Add a greedy join search algorithm to handle large join problems

Started by Chengpeng Yanabout 1 month ago19 messages
#1Chengpeng Yan
chengpeng_yan@outlook.com
1 attachment(s)

Hi hackers,

This patch implements GOO (Greedy Operator Ordering), a greedy
join-order search method for large join problems, based on Fegaras (DEXA
’98) [1]Leonidas Fegaras, “A New Heuristic for Optimizing Large Queries”, DEXA ’98. ACM Digital Library: https://dl.acm.org/doi/10.5555/648311.754892 A publicly accessible PostScript version is available from the author's page: https://lambda.uta.edu/order.ps. The algorithm repeatedly selects, among all legal joins, the
join pair with the lowest estimated total cost, merges them, and
continues until a single join remains. Patch attached.

To get an initial sense of performance, I reused the star join /
snowflake examples and the testing script from the thread in [2]Star/snowflake join thread and benchmarks: /messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me. The
star-join GUC in that SQL workload was replaced with
`enable_goo_join_search`, so the same tests can run under DP (standard
dynamic programming) / GEQO(Genetic Query Optimizer) / GOO. For these
tests, geqo_threshold was set to 15 for DP, and to 5 for both GEQO and
GOO. Other planner settings, including join_collapse_limit, remained at
their defaults.

On my local machine, a single-client pgbench run produces the following
throughput (tps):

| DP | GEQO | GOO
--------------------+----------+----------+-----------
starjoin (inner) | 1762.52 | 192.13 | 6168.89
starjoin (outer) | 1683.92 | 173.90 | 5626.56
snowflake (inner) | 1829.04 | 133.40 | 3929.57
snowflake (outer) | 1397.93 | 99.65 | 3040.52

Open questions:
* The paper ranks joins by estimated result size, while this prototype
reuses the existing planner total_cost. This makes the implementation
straightforward, but it may be worth exploring row-based rule.
* The prototype allocates through multiple memory contexts, aiming to
reduce memory usage during candidate evaluation. Suggestions on
simplification are welcome.
* Planning performance vs GEQO: On the star/snowflake benchmarks above,
GOO reduces planning time significantly compared to GEQO. Broader
evaluation on more representative workloads (e.g., TPC-H / TPC-DS /
JOB) is TODO, covering both planning speed and plan quality.
* There is no tuning knob like `geqo_seed` for GEQO if GOO produces a
poor ordering.
* The long-term integration is open:
* fully replace GEQO,
* keep GEQO available and optionally try both,
* or use GOO as a starting point for GEQO.

Comments and review would be appreciated.

References:
[1]: Leonidas Fegaras, “A New Heuristic for Optimizing Large Queries”, DEXA ’98. ACM Digital Library: https://dl.acm.org/doi/10.5555/648311.754892 A publicly accessible PostScript version is available from the author's page: https://lambda.uta.edu/order.ps
DEXA ’98. ACM Digital Library:
https://dl.acm.org/doi/10.5555/648311.754892 A publicly accessible
PostScript version is available from the author's page:
https://lambda.uta.edu/order.ps
[2]: Star/snowflake join thread and benchmarks: /messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me
/messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me

--
Best regards,
Chengpeng Yan

Attachments:

v1-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchapplication/octet-stream; name=v1-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchDownload
From cf539f322c91bbea79f444c746303bf49d6b4d70 Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Sun, 30 Nov 2025 14:05:10 +0800
Subject: [PATCH v1] Add GOO (Greedy Operator Ordering) join search as an
 alternative to GEQO

Introduce a greedy join search algorithm (GOO) to handle
large join problems. GOO builds join relations iteratively, maintaining
a list of clumps (join components) and committing to the cheapest
legal join at each step until only one clump remains.

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/Makefile           |   1 +
 src/backend/optimizer/path/allpaths.c         |   4 +
 src/backend/optimizer/path/goo.c              | 601 +++++++++++++++++
 src/backend/optimizer/path/meson.build        |   1 +
 src/backend/utils/misc/guc_parameters.dat     |   9 +
 src/backend/utils/misc/postgresql.conf.sample |   1 +
 src/include/optimizer/goo.h                   |  23 +
 src/include/optimizer/paths.h                 |   1 +
 src/test/regress/expected/goo.out             | 634 ++++++++++++++++++
 src/test/regress/expected/sysviews.out        |   3 +-
 src/test/regress/parallel_schedule            |   9 +-
 src/test/regress/sql/goo.sql                  | 329 +++++++++
 12 files changed, 1612 insertions(+), 4 deletions(-)
 create mode 100644 src/backend/optimizer/path/goo.c
 create mode 100644 src/include/optimizer/goo.h
 create mode 100644 src/test/regress/expected/goo.out
 create mode 100644 src/test/regress/sql/goo.sql

diff --git a/src/backend/optimizer/path/Makefile b/src/backend/optimizer/path/Makefile
index 1e199ff66f7..3bc825cd845 100644
--- a/src/backend/optimizer/path/Makefile
+++ b/src/backend/optimizer/path/Makefile
@@ -17,6 +17,7 @@ OBJS = \
 	clausesel.o \
 	costsize.o \
 	equivclass.o \
+	goo.o \
 	indxpath.o \
 	joinpath.o \
 	joinrels.o \
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 4c43fd0b19b..4574b1f44cc 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -35,6 +35,7 @@
 #include "optimizer/clauses.h"
 #include "optimizer/cost.h"
 #include "optimizer/geqo.h"
+#include "optimizer/goo.h"
 #include "optimizer/optimizer.h"
 #include "optimizer/pathnode.h"
 #include "optimizer/paths.h"
@@ -3845,6 +3846,9 @@ make_rel_from_joinlist(PlannerInfo *root, List *joinlist)
 
 		if (join_search_hook)
 			return (*join_search_hook) (root, levels_needed, initial_rels);
+		/* WIP: for now use geqo_threshold for testing */
+		else if (enable_goo_join_search && levels_needed >= geqo_threshold)
+			return goo_join_search(root, levels_needed, initial_rels);
 		else if (enable_geqo && levels_needed >= geqo_threshold)
 			return geqo(root, levels_needed, initial_rels);
 		else
diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
new file mode 100644
index 00000000000..c6dc69e8432
--- /dev/null
+++ b/src/backend/optimizer/path/goo.c
@@ -0,0 +1,601 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.c
+ *     Greedy operator ordering (GOO) join search for large join problems
+ *
+ * GOO is a deterministic greedy operator ordering algorithm that constructs
+ * join relations iteratively, always committing to the cheapest legal join at
+ * each step. The algorithm maintains a list of "clumps" (join components),
+ * initially one per base relation. At each iteration, it evaluates all legal
+ * pairs of clumps, selects the pair that produces the cheapest join according
+ * to the planner's cost model, and replaces those two clumps with the
+ * resulting joinrel. This continues until only one clump remains.
+ *
+ * ALGORITHM COMPLEXITY:
+ *
+ * Time Complexity: O(n^3) where n is the number of base relations.
+ * - The algorithm performs (n - 1) iterations, merging two clumps each time.
+ * - At iteration i, there are (n - i + 1) remaining clumps, requiring
+ *   O((n-i)^2) pair evaluations to find the cheapest join.
+ * - Total: Sum of (n-i)^2 for i=1 to n-1 ≈ O(n^3)
+ *
+ * REFERENCES:
+ *
+ * This implementation is based on the algorithm described in:
+ *
+ * Leonidas Fegaras, "A New Heuristic for Optimizing Large Queries",
+ * Proceedings of the 9th International Conference on Database and Expert
+ * Systems Applications (DEXA '98), August 1998, Pages 726-735.
+ * https://dl.acm.org/doi/10.5555/648311.754892
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/backend/optimizer/path/goo.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "miscadmin.h"
+#include "nodes/bitmapset.h"
+#include "nodes/pathnodes.h"
+#include "optimizer/geqo.h"
+#include "optimizer/goo.h"
+#include "optimizer/joininfo.h"
+#include "optimizer/pathnode.h"
+#include "optimizer/paths.h"
+#include "utils/hsearch.h"
+#include "utils/memutils.h"
+
+/*
+ * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
+ */
+bool		enable_goo_join_search = false;
+
+/*
+ * Working state for a single GOO search invocation.
+ *
+ * This structure holds all the state needed during a greedy join order search.
+ * It manages three memory contexts with different lifetimes to avoid memory
+ * bloat during large join searches.
+ *
+ * TODO: Consider using the extension_state mechanism in PlannerInfo (similar
+ * to GEQO's approach) instead of passing GooState separately.
+ */
+typedef struct GooState
+{
+	PlannerInfo *root;			/* global planner state */
+	MemoryContext goo_cxt;		/* long-lived (per-search) allocations */
+	MemoryContext cand_cxt;		/* per-iteration candidate storage */
+	MemoryContext scratch_cxt;	/* per-candidate speculative evaluation */
+	List	   *clumps;			/* remaining join components (RelOptInfo *) */
+
+	/*
+	 * "clumps" are similar to GEQO's concept (see geqo_eval.c): join
+	 * components that haven't been merged yet. Initially one per base
+	 * relation, gradually merged until one remains.
+	 */
+	bool		clause_pair_present;	/* any clause-connected pair exists? */
+}			GooState;
+
+/*
+ * Candidate join between two clumps.
+ *
+ * This structure holds the cost metrics extracted from a speculative joinrel
+ * evaluation. We create this lightweight structure in cand_cxt after discarding
+ * the actual joinrel from scratch_cxt, allowing us to compare many candidates
+ * without exhausting memory.
+ */
+typedef struct GooCandidate
+{
+	RelOptInfo *left;			/* left input clump */
+	RelOptInfo *right;			/* right input clump */
+	Cost		total_cost;		/* total cost of cheapest path */
+}			GooCandidate;
+
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels);
+static void goo_destroy_state(GooState * state);
+static RelOptInfo *goo_search_internal(GooState * state);
+static void goo_reset_probe_state(GooState * state, int saved_rel_len,
+								  struct HTAB *saved_hash);
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right);
+static RelOptInfo *goo_commit_join(GooState * state, GooCandidate * cand);
+static bool goo_candidate_better(GooCandidate * a, GooCandidate * b);
+static bool goo_candidate_prunable(GooState * state, RelOptInfo *left,
+								   RelOptInfo *right);
+
+/*
+ * goo_join_search
+ *		Entry point for Greedy Operator Ordering join search algorithm.
+ *
+ * This function is called from make_rel_from_joinlist() when
+ * enable_goo_join_search is true and the number of relations meets or
+ * exceeds geqo_threshold.
+ *
+ * Returns the final RelOptInfo representing the join of all base relations,
+ * or errors out if no valid join order can be found.
+ */
+RelOptInfo *
+goo_join_search(PlannerInfo *root, int levels_needed,
+				List *initial_rels)
+{
+	GooState   *state;
+	RelOptInfo *result;
+	int			base_rel_count;
+	struct HTAB *base_hash;
+
+	/* Initialize search state and memory contexts */
+	state = goo_init_state(root, initial_rels);
+
+	/*
+	 * Save initial state of join_rel_list and join_rel_hash so we can restore
+	 * them if the search fails.
+	 */
+	base_rel_count = list_length(root->join_rel_list);
+	base_hash = root->join_rel_hash;
+
+	/* Run the main greedy search loop */
+	result = goo_search_internal(state);
+
+	if (result == NULL)
+	{
+		/* Restore planner state before reporting error */
+		root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+		root->join_rel_hash = base_hash;
+		elog(ERROR, "GOO join search failed to find a valid join order");
+	}
+
+	goo_destroy_state(state);
+	return result;
+}
+
+/*
+ * goo_init_state
+ *		Initialize per-search state and memory contexts.
+ *
+ * Creates the GooState structure and three memory contexts with different
+ * lifetimes:
+ *
+ * - goo_cxt: Lives for the entire search, holds the clumps list and state.
+ * - cand_cxt: Reset after each iteration, holds candidate structures during
+ *   the comparison phase.
+ * - scratch_cxt: Reset after each candidate evaluation, holds speculative
+ *   joinrels that are discarded before committing to a choice.
+ *
+ * The three-context design prevents memory bloat during large join searches
+ * where we may evaluate hundreds or thousands of candidate joins.
+ */
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels)
+{
+	MemoryContext oldcxt;
+	GooState   *state;
+
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	state = palloc(sizeof(GooState));
+	state->root = root;
+	state->clumps = NIL;
+	state->clause_pair_present = false;
+
+	/* Create the three-level memory context hierarchy */
+	state->goo_cxt = AllocSetContextCreate(root->planner_cxt, "GOOStateContext",
+										   ALLOCSET_DEFAULT_SIZES);
+	state->cand_cxt = AllocSetContextCreate(state->goo_cxt, "GOOCandidateContext",
+											ALLOCSET_SMALL_SIZES);
+	state->scratch_cxt = AllocSetContextCreate(
+											   state->goo_cxt, "GOOScratchContext", ALLOCSET_SMALL_SIZES);
+
+	/*
+	 * Copy the initial_rels list into goo_cxt. This becomes our working
+	 * clumps list that we'll modify throughout the search.
+	 */
+	MemoryContextSwitchTo(state->goo_cxt);
+	state->clumps = list_copy(initial_rels);
+
+	MemoryContextSwitchTo(oldcxt);
+
+	return state;
+}
+
+/*
+ * goo_destroy_state
+ *		Free all memory allocated for the GOO search.
+ *
+ * Deletes the goo_cxt memory context (which recursively deletes cand_cxt
+ * and scratch_cxt as children) and then frees the state structure itself.
+ * This is called after the search completes successfully or fails.
+ */
+static void
+goo_destroy_state(GooState * state)
+{
+	MemoryContextDelete(state->goo_cxt);
+	pfree(state);
+}
+
+/*
+ * goo_search_internal
+ *		Main greedy search loop.
+ *
+ * Implements a two-pass algorithm at each iteration:
+ *
+ * Pass 1: Scan all clump pairs to detect whether any clause-connected pairs
+ *         exist. This sets the clause_pair_present flag.
+ *
+ * Pass 2: Evaluate all viable candidate pairs, keeping track of the best one
+ *         according to our comparison criteria. If clause_pair_present is true,
+ *         we skip Cartesian products entirely to avoid expensive cross joins.
+ *
+ * After selecting the best candidate, we permanently create its joinrel in
+ * planner_cxt and replace the two input clumps with this new joinrel. This
+ * continues until only one clump remains.
+ *
+ * The function runs primarily in goo_cxt, temporarily switching to planner_cxt
+ * when creating permanent joinrels and to scratch_cxt when evaluating
+ * speculative candidates.
+ *
+ * Returns the final joinrel spanning all base relations, or NULL on failure.
+ */
+static RelOptInfo *
+goo_search_internal(GooState * state)
+{
+	PlannerInfo *root = state->root;
+	RelOptInfo *final_rel = NULL;
+	MemoryContext oldcxt;
+
+	/*
+	 * Switch to goo_cxt for the entire search process. This ensures that all
+	 * operations on state->clumps and related structures happen in the
+	 * correct memory context.
+	 */
+	oldcxt = MemoryContextSwitchTo(state->goo_cxt);
+
+	while (list_length(state->clumps) > 1)
+	{
+		ListCell   *lc1;
+		int			i;
+		GooCandidate *best_candidate = NULL;
+
+		/* Allow query cancellation during long join searches */
+		CHECK_FOR_INTERRUPTS();
+
+		/* Reset candidate context for this iteration */
+		MemoryContextReset(state->cand_cxt);
+		state->clause_pair_present = false;
+
+		/*
+		 * Pass 1: Scan all pairs to detect clause-connected joins.
+		 *
+		 * We need to know whether ANY clause-connected pairs exist before we
+		 * can decide whether to skip Cartesian products. This quick scan
+		 * allows us to prefer well-connected joins without completely
+		 * forbidding Cartesian products (which may be necessary for
+		 * disconnected query graphs).
+		 */
+		for (i = 0, lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1), i++)
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+
+				/* Check if this pair has a join clause or order restriction */
+				if (have_relevant_joinclause(root, left, right) ||
+					have_join_order_restriction(root, left, right))
+				{
+					/* Found at least one clause-connected pair */
+					state->clause_pair_present = true;
+					break;
+				}
+			}
+
+			if (state->clause_pair_present)
+				break;
+		}
+
+		/*
+		 * Pass 2: Evaluate all viable candidate pairs and select the best.
+		 *
+		 * For each pair that passes the pruning check, we do a full
+		 * speculative evaluation using make_join_rel() to get accurate costs.
+		 * The candidate with the best cost (according to
+		 * goo_candidate_better) is remembered and will be committed after
+		 * this pass.
+		 *
+		 * TODO: It might be worth caching cost estimates if the same join
+		 * pair appears in multiple iterations.
+		 */
+		for (lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1))
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+				GooCandidate *cand;
+
+				cand = goo_build_candidate(state, left, right);
+				if (cand == NULL)
+					continue;
+
+				/* Track the best candidate seen so far */
+				if (best_candidate == NULL ||
+					goo_candidate_better(cand, best_candidate))
+					best_candidate = cand;
+			}
+		}
+
+		/* We must have at least one valid join candidate */
+		if (best_candidate == NULL)
+			elog(ERROR, "GOO join search failed to find any valid join candidates");
+
+		/*
+		 * Commit the best candidate: create the joinrel permanently and
+		 * update the clumps list.
+		 */
+		final_rel = goo_commit_join(state, best_candidate);
+
+		if (final_rel == NULL)
+			elog(ERROR, "GOO join search failed to commit join");
+	}
+
+	/* Switch back to the original context before returning */
+	MemoryContextSwitchTo(oldcxt);
+
+	return final_rel;
+}
+
+/*
+ * goo_candidate_prunable
+ *		Determine whether a candidate pair should be skipped.
+ *
+ * We use a two-level pruning strategy:
+ *
+ * 1. Pairs with join clauses or join-order restrictions are never prunable.
+ *    These represent natural joins or required join orders (e.g., from outer
+ *    joins or LATERAL references).
+ *
+ * 2. If clause_pair_present is true (meaning at least one clause-connected
+ *    pair exists in this iteration), we prune Cartesian products to avoid
+ *    evaluating expensive cross joins when better options are available.
+ *
+ * However, if NO clause-connected pairs exist in an iteration, we allow
+ * Cartesian products to be considered. This ensures we can always make
+ * progress even with disconnected query graphs.
+ *
+ * Returns true if the pair should be pruned (skipped), false otherwise.
+ */
+static bool
+goo_candidate_prunable(GooState * state, RelOptInfo *left,
+					   RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	bool		has_clause = have_relevant_joinclause(root, left, right);
+	bool		has_restriction = have_join_order_restriction(root, left, right);
+
+	if (has_clause || has_restriction)
+		return false;			/* never prune clause-connected joins */
+
+	return state->clause_pair_present;
+}
+
+/*
+ * goo_build_candidate
+ *		Evaluate a potential join between two clumps and return a
+ *candidate.
+ *
+ * This function performs a speculative join evaluation to extract cost metrics
+ * without permanently creating the joinrel. The process is:
+ *
+ * 1. Check basic viability (pruning, overlapping relids).
+ * 2. Switch to scratch_cxt and create the joinrel using make_join_rel().
+ * 3. Generate paths (including partitionwise and parallel variants).
+ * 4. Extract cost metrics from the cheapest path.
+ * 5. Discard the joinrel by calling goo_reset_probe_state().
+ * 6. Create a lightweight GooCandidate in cand_cxt with the extracted metrics.
+ *
+ * This evaluate-and-discard pattern prevents memory bloat when evaluating
+ * many candidates. The winning candidate will be rebuilt permanently later
+ * by goo_commit_join().
+ *
+ * Returns a GooCandidate structure, or NULL if the join is illegal or
+ * overlapping. Assumes the caller is in goo_cxt.
+ */
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	MemoryContext oldcxt;
+	int			saved_rel_len;
+	struct HTAB *saved_hash;
+	RelOptInfo *joinrel;
+	Path	   *best_path;
+	Cost		total_cost;
+	GooCandidate *cand;
+
+	/* Skip if this pair should be pruned */
+	if (goo_candidate_prunable(state, left, right))
+		return NULL;
+
+	/* Sanity check: ensure the clumps don't overlap */
+	if (bms_overlap(left->relids, right->relids))
+		return NULL;
+
+	/*
+	 * Save state before speculative join evaluation. We'll create the joinrel
+	 * in scratch_cxt and then discard it.
+	 */
+	saved_rel_len = list_length(root->join_rel_list);
+	saved_hash = root->join_rel_hash;
+
+	/* Switch to scratch_cxt for speculative joinrel creation */
+	oldcxt = MemoryContextSwitchTo(state->scratch_cxt);
+
+	/*
+	 * Temporarily disable join_rel_hash so make_join_rel() doesn't find or
+	 * cache this speculative joinrel.
+	 */
+	root->join_rel_hash = NULL;
+
+	/*
+	 * Create the joinrel and generate all its paths.
+	 *
+	 * TODO: This is the most expensive part of GOO. Each candidate evaluation
+	 * performs full path generation via make_join_rel(). We might improve
+	 * performance by deferring expensive path variants (partitionwise,
+	 * parallel) until the commit phase.
+	 */
+	joinrel = make_join_rel(root, left, right);
+
+	if (joinrel)
+	{
+		/* Generate additional path variants */
+		generate_partitionwise_join_paths(root, joinrel);
+		if (!bms_equal(joinrel->relids, root->all_query_rels))
+			generate_useful_gather_paths(root, joinrel, false);
+		set_cheapest(joinrel);
+	}
+
+	best_path = joinrel ? joinrel->cheapest_total_path : NULL;
+	if (best_path == NULL)
+	{
+		/* Invalid or uninteresting join, clean up and return NULL */
+		MemoryContextSwitchTo(oldcxt);
+		goo_reset_probe_state(state, saved_rel_len, saved_hash);
+		return NULL;
+	}
+
+	/*
+	 * Extract the metrics we need from the speculative joinrel. After this,
+	 * we'll discard the entire joinrel and all its paths.
+	 */
+	total_cost = best_path->total_cost;
+
+	/*
+	 * Switch back to goo_cxt and discard the speculative joinrel.
+	 * goo_reset_probe_state() will clean up join_rel_list, join_rel_hash, and
+	 * reset scratch_cxt to free all the joinrel's memory.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+	goo_reset_probe_state(state, saved_rel_len, saved_hash);
+
+	/*
+	 * Now create the candidate structure in cand_cxt. This will survive until
+	 * the end of this iteration (when cand_cxt is reset).
+	 */
+	oldcxt = MemoryContextSwitchTo(state->cand_cxt);
+	cand = palloc(sizeof(GooCandidate));
+	cand->left = left;
+	cand->right = right;
+	cand->total_cost = total_cost;
+	MemoryContextSwitchTo(oldcxt);
+
+	return cand;
+}
+
+/*
+ * goo_reset_probe_state
+ *		Clean up after a speculative joinrel evaluation.
+ *
+ * Reverts the planner's join_rel_list and join_rel_hash to their saved state,
+ * removing any joinrels that were created during speculative evaluation.
+ * Also resets scratch_cxt to free all memory used by the discarded joinrel
+ * and its paths.
+ *
+ * This function is called after extracting cost metrics from a speculative
+ * joinrel that we don't want to keep.
+ */
+static void
+goo_reset_probe_state(GooState * state, int saved_rel_len,
+					  struct HTAB *saved_hash)
+{
+	PlannerInfo *root = state->root;
+
+	/* Remove speculative joinrels from the planner's lists */
+	root->join_rel_list = list_truncate(root->join_rel_list, saved_rel_len);
+	root->join_rel_hash = saved_hash;
+
+	/* Free all memory used during speculative evaluation */
+	MemoryContextReset(state->scratch_cxt);
+}
+
+/*
+ * goo_commit_join
+ *		Permanently create the chosen join and update the clumps list.
+ *
+ * After selecting the best candidate in an iteration, we need to permanently
+ * create its joinrel (with all paths) and integrate it into the planner state.
+ * This function:
+ *
+ * 1. Switches to planner_cxt and creates the joinrel using make_join_rel().
+ *    Unlike the speculative evaluation, this joinrel is kept permanently.
+ * 2. Generates partitionwise and parallel path variants.
+ * 3. Determines the cheapest paths.
+ * 4. Updates state->clumps by removing the two input clumps and adding the
+ *    new joinrel as a single clump.
+ *
+ * The next iteration will treat this joinrel as an atomic unit that can be
+ * joined with other remaining clumps.
+ *
+ * Returns the newly created joinrel. Assumes the caller is in goo_cxt.
+ */
+static RelOptInfo *
+goo_commit_join(GooState * state, GooCandidate * cand)
+{
+	MemoryContext oldcxt;
+	PlannerInfo *root = state->root;
+	RelOptInfo *joinrel;
+
+	/*
+	 * Create the joinrel permanently in planner_cxt. Unlike the speculative
+	 * evaluation in goo_build_candidate(), this joinrel will be kept and
+	 * added to root->join_rel_list for use by the rest of the planner.
+	 */
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	joinrel = make_join_rel(root, cand->left, cand->right);
+	if (joinrel == NULL)
+	{
+		MemoryContextSwitchTo(oldcxt);
+		elog(ERROR, "GOO join search failed to create join relation");
+	}
+
+	/* Generate additional path variants, just like standard_join_search() */
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!bms_equal(joinrel->relids, root->all_query_rels))
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	/*
+	 * Switch back to goo_cxt and update the clumps list. Remove the two input
+	 * clumps and add the new joinrel as a single clump.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+
+	state->clumps = list_delete_ptr(state->clumps, cand->left);
+	state->clumps = list_delete_ptr(state->clumps, cand->right);
+	state->clumps = lappend(state->clumps, joinrel);
+
+	return joinrel;
+}
+
+/*
+ * goo_candidate_better
+ *		Compare two join candidates and determine which is better.
+ *
+ * Returns true if candidate 'a' should be preferred over candidate 'b'.
+ */
+static bool
+goo_candidate_better(GooCandidate * a, GooCandidate * b)
+{
+	return (a->total_cost < b->total_cost);
+}
diff --git a/src/backend/optimizer/path/meson.build b/src/backend/optimizer/path/meson.build
index 12f36d85cb6..e5046365a37 100644
--- a/src/backend/optimizer/path/meson.build
+++ b/src/backend/optimizer/path/meson.build
@@ -5,6 +5,7 @@ backend_sources += files(
   'clausesel.c',
   'costsize.c',
   'equivclass.c',
+  'goo.c',
   'indxpath.c',
   'joinpath.c',
   'joinrels.c',
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index 3b9d8349078..a8ce31ab8a7 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -840,6 +840,15 @@
   boot_val => 'true',
 },
 
+/* WIP: for now keep this in QUERY_TUNING_GEQO group for testing convenience */
+{ name => 'enable_goo_join_search', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Enables the planner\'s use of GOO join search for large join problems.',
+  long_desc => 'Greedy Operator Ordering (GOO) is a deterministic join search algorithm for queries with many relations.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'enable_goo_join_search',
+  boot_val => 'false',
+},
+
 { name => 'enable_group_by_reordering', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_METHOD',
   short_desc => 'Enables reordering of GROUP BY keys.',
   flags => 'GUC_EXPLAIN',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index dc9e2255f8a..8284e8b1da7 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -456,6 +456,7 @@
 # - Genetic Query Optimizer -
 
 #geqo = on
+#enable_goo_join_search = off
 #geqo_threshold = 12
 #geqo_effort = 5                        # range 1-10
 #geqo_pool_size = 0                     # selects default based on effort
diff --git a/src/include/optimizer/goo.h b/src/include/optimizer/goo.h
new file mode 100644
index 00000000000..0080dfa2ac8
--- /dev/null
+++ b/src/include/optimizer/goo.h
@@ -0,0 +1,23 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.h
+ *     prototype for the greedy operator ordering join search
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/include/optimizer/goo.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef GOO_H
+#define GOO_H
+
+#include "nodes/pathnodes.h"
+#include "nodes/pg_list.h"
+
+extern RelOptInfo *goo_join_search(PlannerInfo *root, int levels_needed,
+								   List *initial_rels);
+
+#endif							/* GOO_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index f6a62df0b43..5b3ebe5f1d2 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -21,6 +21,7 @@
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
+extern PGDLLIMPORT bool enable_goo_join_search;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
diff --git a/src/test/regress/expected/goo.out b/src/test/regress/expected/goo.out
new file mode 100644
index 00000000000..88996f57508
--- /dev/null
+++ b/src/test/regress/expected/goo.out
@@ -0,0 +1,634 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+ANALYZE;
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+                              QUERY PLAN                              
+----------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: ("*VALUES*".column1 = "*VALUES*_2".column1)
+         ->  Hash Join
+               Hash Cond: ("*VALUES*".column1 = "*VALUES*_1".column1)
+               ->  Values Scan on "*VALUES*"
+               ->  Hash
+                     ->  Values Scan on "*VALUES*_1"
+         ->  Hash
+               ->  Values Scan on "*VALUES*_2"
+(10 rows)
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+             QUERY PLAN              
+-------------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t5
+               Filter: (f = 3)
+         ->  Nested Loop
+               ->  Seq Scan on t1
+                     Filter: (a = 1)
+               ->  Seq Scan on t2
+                     Filter: (c = 2)
+(9 rows)
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+                                QUERY PLAN                                 
+---------------------------------------------------------------------------
+ Aggregate
+   ->  Nested Loop
+         Join Filter: (fact.dim4_id = dim4.id)
+         ->  Hash Join
+               Hash Cond: (dim3.id = fact.dim3_id)
+               ->  Seq Scan on dim3
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (dim2.id = fact.dim2_id)
+                           ->  Seq Scan on dim2
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (fact.dim1_id = dim1.id)
+                                       ->  Seq Scan on fact
+                                       ->  Hash
+                                             ->  Seq Scan on dim1
+                                                   Filter: (id < 5)
+         ->  Seq Scan on dim4
+(18 rows)
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+                           QUERY PLAN                           
+----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t7.h = t9.h)
+         ->  Hash Join
+               Hash Cond: (t8.i = t10.i)
+               ->  Hash Join
+                     Hash Cond: (t2.c = t4.c)
+                     ->  Hash Join
+                           Hash Cond: (t3.b = t1.b)
+                           ->  Hash Join
+                                 Hash Cond: (t5.f = t7.f)
+                                 ->  Hash Join
+                                       Hash Cond: (t3.d = t5.d)
+                                       ->  Seq Scan on t3
+                                       ->  Hash
+                                             ->  Seq Scan on t5
+                                 ->  Hash
+                                       ->  Seq Scan on t7
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (t1.a = t2.a)
+                                       ->  Seq Scan on t1
+                                       ->  Hash
+                                             ->  Seq Scan on t2
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t6.g = t8.g)
+                                 ->  Hash Join
+                                       Hash Cond: (t4.e = t6.e)
+                                       ->  Seq Scan on t4
+                                       ->  Hash
+                                             ->  Seq Scan on t6
+                                 ->  Hash
+                                       ->  Seq Scan on t8
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (t12.m = t14.m)
+                           ->  Hash Join
+                                 Hash Cond: (t10.k = t12.k)
+                                 ->  Seq Scan on t10
+                                 ->  Hash
+                                       ->  Seq Scan on t12
+                           ->  Hash
+                                 ->  Seq Scan on t14
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t11.l = t13.l)
+                     ->  Hash Join
+                           Hash Cond: (t9.j = t11.j)
+                           ->  Seq Scan on t9
+                           ->  Hash
+                                 ->  Seq Scan on t11
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t13.n = t15.n)
+                                 ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t15
+(58 rows)
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t1.a = t3.b)
+         ->  Hash Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t3.b = t4.c)
+                     ->  Seq Scan on t3
+                     ->  Hash
+                           ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+-- Results should match
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+                                                            QUERY PLAN                                                            
+----------------------------------------------------------------------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t16.q = t18.q)
+         ->  Hash Join
+               Hash Cond: (t15.p = t17.p)
+               ->  Hash Join
+                     Hash Cond: (t14.o = t16.o)
+                     ->  Hash Join
+                           Hash Cond: (t13.n = t15.n)
+                           ->  Hash Join
+                                 Hash Cond: (t12.m = t14.m)
+                                 ->  Hash Join
+                                       Hash Cond: (t11.l = t13.l)
+                                       ->  Hash Join
+                                             Hash Cond: (t10.k = t12.k)
+                                             ->  Hash Join
+                                                   Hash Cond: (t9.j = t11.j)
+                                                   ->  Hash Join
+                                                         Hash Cond: (t8.i = t10.i)
+                                                         ->  Hash Join
+                                                               Hash Cond: (t7.h = t9.h)
+                                                               ->  Hash Join
+                                                                     Hash Cond: (t6.g = t8.g)
+                                                                     ->  Hash Join
+                                                                           Hash Cond: (t5.f = t7.f)
+                                                                           ->  Hash Join
+                                                                                 Hash Cond: (t4.e = t6.e)
+                                                                                 ->  Hash Join
+                                                                                       Hash Cond: (t3.d = t5.d)
+                                                                                       ->  Hash Join
+                                                                                             Hash Cond: (t2.c = t4.c)
+                                                                                             ->  Hash Join
+                                                                                                   Hash Cond: (t1.b = t3.b)
+                                                                                                   ->  Hash Join
+                                                                                                         Hash Cond: (t1.a = t2.a)
+                                                                                                         ->  Seq Scan on t1
+                                                                                                         ->  Hash
+                                                                                                               ->  Seq Scan on t2
+                                                                                                   ->  Hash
+                                                                                                         ->  Seq Scan on t3
+                                                                                             ->  Hash
+                                                                                                   ->  Seq Scan on t4
+                                                                                       ->  Hash
+                                                                                             ->  Seq Scan on t5
+                                                                                 ->  Hash
+                                                                                       ->  Seq Scan on t6
+                                                                           ->  Hash
+                                                                                 ->  Seq Scan on t7
+                                                                     ->  Hash
+                                                                           ->  Seq Scan on t8
+                                                               ->  Hash
+                                                                     ->  Seq Scan on t9
+                                                         ->  Hash
+                                                               ->  Seq Scan on t10
+                                                   ->  Hash
+                                                         ->  Seq Scan on t11
+                                             ->  Hash
+                                                   ->  Seq Scan on t12
+                                       ->  Hash
+                                             ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t14
+                           ->  Hash
+                                 ->  Seq Scan on t15
+                     ->  Hash
+                           ->  Seq Scan on t16
+               ->  Hash
+                     ->  Seq Scan on t17
+         ->  Hash
+               ->  Seq Scan on t18
+(70 rows)
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+                      QUERY PLAN                       
+-------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t2.a = t1.a)
+         ->  Seq Scan on t2
+         ->  Hash
+               ->  Nested Loop
+                     ->  Hash Join
+                           Hash Cond: (t6.e = t5.f)
+                           ->  Seq Scan on t6
+                           ->  Hash
+                                 ->  Seq Scan on t5
+                                       Filter: (d < 3)
+                     ->  Seq Scan on t1
+                           Filter: (a < 5)
+(14 rows)
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Left Join
+         Hash Cond: (t3.d = t4.c)
+         ->  Hash Left Join
+               Hash Cond: (t2.a = t3.b)
+               ->  Hash Left Join
+                     Hash Cond: (t1.a = t2.a)
+                     ->  Seq Scan on t1
+                     ->  Hash
+                           ->  Seq Scan on t2
+               ->  Hash
+                     ->  Seq Scan on t3
+         ->  Hash
+               ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+            QUERY PLAN            
+----------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t1
+         ->  Materialize
+               ->  Seq Scan on t2
+(5 rows)
+
+SELECT count(*)
+FROM t1, t2;
+ count 
+-------
+   100
+(1 row)
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+               QUERY PLAN               
+----------------------------------------
+ Aggregate
+   ->  Hash Full Join
+         Hash Cond: (t2.a = t3.b)
+         ->  Hash Full Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Seq Scan on t3
+(10 rows)
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+                QUERY PLAN                
+------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (b.b = c.c)
+         ->  Hash Join
+               Hash Cond: (a.a = b.a)
+               ->  Seq Scan on t1 a
+               ->  Hash
+                     ->  Seq Scan on t1 b
+         ->  Hash
+               ->  Seq Scan on t2 c
+(10 rows)
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+                           QUERY PLAN                            
+-----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (chain1a.val = chain2a.id)
+         ->  Hash Join
+               Hash Cond: (chain1b.val = chain1c.id)
+               ->  Hash Join
+                     Hash Cond: (chain1a.id = chain1b.id)
+                     ->  Seq Scan on chain1a
+                     ->  Hash
+                           ->  Seq Scan on chain1b
+               ->  Hash
+                     ->  Seq Scan on chain1c
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (chain2b.val = chain2c.id)
+                     ->  Hash Join
+                           Hash Cond: (chain2a.val = chain2b.id)
+                           ->  Seq Scan on chain2a
+                           ->  Hash
+                                 ->  Seq Scan on chain2b
+                     ->  Hash
+                           ->  Seq Scan on chain2c
+(22 rows)
+
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+RESET geqo_threshold;
+RESET enable_goo_join_search;
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index 3b37fafa65b..cb0c84cebff 100644
--- a/src/test/regress/expected/sysviews.out
+++ b/src/test/regress/expected/sysviews.out
@@ -153,6 +153,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_distinct_reordering     | on
  enable_eager_aggregate         | on
  enable_gathermerge             | on
+ enable_goo_join_search         | off
  enable_group_by_reordering     | on
  enable_hashagg                 | on
  enable_hashjoin                | on
@@ -173,7 +174,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(25 rows)
+(26 rows)
 
 -- There are always wait event descriptions for various types.  InjectionPoint
 -- may be present or absent, depending on history since last postmaster start.
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index cc6d799bcea..14e3a475906 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -68,6 +68,12 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi
 # ----------
 test: brin gin gist spgist privileges init_privs security_label collate matview lock replica_identity rowsecurity object_address tablesample groupingsets drop_operator password identity generated_stored join_hash
 
+# ----------
+# Additional JOIN ORDER tests
+# WIP: need to find an appropriate group for this test
+# ----------
+test: goo
+
 # ----------
 # Additional BRIN tests
 # ----------
@@ -98,9 +104,6 @@ test: maintain_every
 # no relation related tests can be put in this group
 test: publication subscription
 
-# ----------
-# Another group of parallel tests
-# select_views depends on create_view
 # ----------
 test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock indirect_toast equivclass stats_rewrite
 
diff --git a/src/test/regress/sql/goo.sql b/src/test/regress/sql/goo.sql
new file mode 100644
index 00000000000..c4d9cae48a4
--- /dev/null
+++ b/src/test/regress/sql/goo.sql
@@ -0,0 +1,329 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE goo_plan;
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE standard_plan;
+
+-- Results should match
+EXECUTE goo_plan;
+EXECUTE standard_plan;
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+
+SELECT count(*)
+FROM t1, t2;
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+
+RESET geqo_threshold;
+RESET enable_goo_join_search;
-- 
2.39.3 (Apple Git-146)

#2Dilip Kumar
dilipbalaut@gmail.com
In reply to: Chengpeng Yan (#1)
Re: Add a greedy join search algorithm to handle large join problems

On Tue, Dec 2, 2025 at 9:18 AM Chengpeng Yan <chengpeng_yan@outlook.com> wrote:

Hi hackers,

This patch implements GOO (Greedy Operator Ordering), a greedy
join-order search method for large join problems, based on Fegaras (DEXA
’98) [1]. The algorithm repeatedly selects, among all legal joins, the
join pair with the lowest estimated total cost, merges them, and
continues until a single join remains. Patch attached.

Interesting.

To get an initial sense of performance, I reused the star join /
snowflake examples and the testing script from the thread in [2]. The
star-join GUC in that SQL workload was replaced with
`enable_goo_join_search`, so the same tests can run under DP (standard
dynamic programming) / GEQO(Genetic Query Optimizer) / GOO. For these
tests, geqo_threshold was set to 15 for DP, and to 5 for both GEQO and
GOO. Other planner settings, including join_collapse_limit, remained at
their defaults.

On my local machine, a single-client pgbench run produces the following
throughput (tps):

| DP | GEQO | GOO
--------------------+----------+----------+-----------
starjoin (inner) | 1762.52 | 192.13 | 6168.89
starjoin (outer) | 1683.92 | 173.90 | 5626.56
snowflake (inner) | 1829.04 | 133.40 | 3929.57
snowflake (outer) | 1397.93 | 99.65 | 3040.52

Is pgbench the right workload to test this, I mean what are we trying
to compare here the planning time taken by DP vs GEQO vs GOO or the
quality of the plans generated by different join ordering algorithms
or both? All pgbench queries are single table scans and there is no
involvement of the join search, so I am not sure how we can justify
these gains?

--
Regards,
Dilip Kumar
Google

#3Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Dilip Kumar (#2)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

Thanks for taking a look.

On Dec 2, 2025, at 13:36, Dilip Kumar <dilipbalaut@gmail.com> wrote:

Is pgbench the right workload to test this, I mean what are we trying
to compare here the planning time taken by DP vs GEQO vs GOO or the
quality of the plans generated by different join ordering algorithms
or both? All pgbench queries are single table scans and there is no
involvement of the join search, so I am not sure how we can justify
these gains?

Just to clarify: as noted in the cover mail, the numbers are not from
default pgbench queries, but from the star-join / snowflake workloads in
thread [1]Star/snowflake join thread and benchmarks: /messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me, using the benchmark included in the v5-0001 patch. These
workloads contain multi-table joins and do trigger join search; you can
reproduce them by configuring the GUCs as described in the cover mail.

The benchmark tables contain no data, so execution time is negligible;
the results mainly reflect planning time of the different join-ordering
methods, which is intentional for this microbenchmark.

A broader evaluation on TPC-H / TPC-DS / JOB is TODO, covering both
planning time and plan quality. That should provide a more
representative picture of GOO, beyond this synthetic setup.

References:
[1]: Star/snowflake join thread and benchmarks: /messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me
/messages/by-id/a22ec6e0-92ae-43e7-85c1-587df2a65f51@vondra.me

--
Best regards,
Chengpeng Yan

#4Tomas Vondra
tomas@vondra.me
In reply to: Chengpeng Yan (#1)
Re: Add a greedy join search algorithm to handle large join problems

On 12/2/25 04:48, Chengpeng Yan wrote:

Hi hackers,

This patch implements GOO (Greedy Operator Ordering), a greedy
join-order search method for large join problems, based on Fegaras (DEXA
’98) [1]. The algorithm repeatedly selects, among all legal joins, the
join pair with the lowest estimated total cost, merges them, and
continues until a single join remains. Patch attached.

To get an initial sense of performance, I reused the star join /
snowflake examples and the testing script from the thread in [2]. The
star-join GUC in that SQL workload was replaced with
`enable_goo_join_search`, so the same tests can run under DP (standard
dynamic programming) / GEQO(Genetic Query Optimizer) / GOO. For these
tests, geqo_threshold was set to 15 for DP, and to 5 for both GEQO and
GOO. Other planner settings, including join_collapse_limit, remained at
their defaults.

On my local machine, a single-client pgbench run produces the following
throughput (tps):

                    |    DP    |   GEQO   |    GOO
--------------------+----------+----------+-----------
starjoin    (inner) |  1762.52 |  192.13  |  6168.89
starjoin    (outer) |  1683.92 |  173.90  |  5626.56
snowflake   (inner) |  1829.04 |  133.40  |  3929.57
snowflake   (outer) |  1397.93 |   99.65  |  3040.52

Seems interesting, and also much more ambitious than what I intended to
do in the starjoin thread (which is meant to be just a simplistic
heuristics on top of the regular join order planning).

I think a much broader evaluation will be needed, comparing not just the
planning time, but also the quality of the final plan. Which for the
starjoin tests does not really matter, as the plans are all equal in
this regard.

regards

--
Tomas Vondra

#5Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Tomas Vondra (#4)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

On Dec 2, 2025, at 18:56, Tomas Vondra <tomas@vondra.me> wrote:

I think a much broader evaluation will be needed, comparing not just the
planning time, but also the quality of the final plan. Which for the
starjoin tests does not really matter, as the plans are all equal in
this regard.

Many thanks for your feedback.

You are absolutely right — plan quality is also very important. In my
initial email I only showed the improvements in planning time, but did
not provide results regarding plan quality. I will run tests on more
complex join scenarios, evaluating both planning time and plan quality.

Thanks again!
--
Best regards,
Chengpeng Yan

#6Tomas Vondra
tomas@vondra.me
In reply to: Chengpeng Yan (#5)
1 attachment(s)
Re: Add a greedy join search algorithm to handle large join problems

On 12/2/25 14:04, Chengpeng Yan wrote:

Hi,

On Dec 2, 2025, at 18:56, Tomas Vondra <tomas@vondra.me> wrote:

I think a much broader evaluation will be needed, comparing not just the
planning time, but also the quality of the final plan. Which for the
starjoin tests does not really matter, as the plans are all equal in
this regard.

Many thanks for your feedback.

You are absolutely right — plan quality is also very important. In my
initial email I only showed the improvements in planning time, but did
not provide results regarding plan quality. I will run tests on more
complex join scenarios, evaluating both planning time and plan quality.

I was trying to do some simple experiments by comparing plans for TPC-DS
queries, but unfortunately I get a lot of crashes with the patch. All
the backtraces look very similar - see the attached example. The root
cause seems to be that sort_inner_and_outer() sees

inner_path = NULL

I haven't investigated this very much, but I suppose the GOO code should
be calling set_cheapest() from somewhere.

regards

--
Tomas Vondra

Attachments:

crash.txttext/plain; charset=UTF-8; name=crash.txtDownload
#7Tomas Vondra
tomas@vondra.me
In reply to: Tomas Vondra (#6)
Re: Add a greedy join search algorithm to handle large join problems

On 12/9/25 20:20, Tomas Vondra wrote:

On 12/2/25 14:04, Chengpeng Yan wrote:

Hi,

On Dec 2, 2025, at 18:56, Tomas Vondra <tomas@vondra.me> wrote:

I think a much broader evaluation will be needed, comparing not just the
planning time, but also the quality of the final plan. Which for the
starjoin tests does not really matter, as the plans are all equal in
this regard.

Many thanks for your feedback.

You are absolutely right — plan quality is also very important. In my
initial email I only showed the improvements in planning time, but did
not provide results regarding plan quality. I will run tests on more
complex join scenarios, evaluating both planning time and plan quality.

I was trying to do some simple experiments by comparing plans for TPC-DS
queries, but unfortunately I get a lot of crashes with the patch. All
the backtraces look very similar - see the attached example. The root
cause seems to be that sort_inner_and_outer() sees

inner_path = NULL

I haven't investigated this very much, but I suppose the GOO code should
be calling set_cheapest() from somewhere.

FWIW after looking at the failing queries for a bit, and a bit of
tweaking, it seems the issue is about aggregates in the select list. For
example this TPC-DS query fails (Q7):

select i_item_id,
avg(ss_quantity) agg1,
avg(ss_list_price) agg2,
avg(ss_coupon_amt) agg3,
avg(ss_sales_price) agg4
from store_sales, customer_demographics, date_dim, item, promotion
where ss_sold_date_sk = d_date_sk and
ss_item_sk = i_item_sk and
ss_cdemo_sk = cd_demo_sk and
ss_promo_sk = p_promo_sk and
cd_gender = 'F' and
cd_marital_status = 'W' and
cd_education_status = 'Primary' and
(p_channel_email = 'N' or p_channel_event = 'N') and
d_year = 1998
group by i_item_id
order by i_item_id
LIMIT 100;

but if I remove the aggregates, it plans just fine:

select i_item_id
from store_sales, customer_demographics, date_dim, item, promotion
where ss_sold_date_sk = d_date_sk and
ss_item_sk = i_item_sk and
ss_cdemo_sk = cd_demo_sk and
ss_promo_sk = p_promo_sk and
cd_gender = 'F' and
cd_marital_status = 'W' and
cd_education_status = 'Primary' and
(p_channel_email = 'N' or p_channel_event = 'N') and
d_year = 1998
group by i_item_id
order by i_item_id
LIMIT 100;

The backtrace matches the one I already posted, I'm not going to post
that again.

I looked at a couple more failing queries, and removing the aggregates
fixes them too. Maybe there are other issues/crashes, of course.

regards

--
Tomas Vondra

#8Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Tomas Vondra (#7)
1 attachment(s)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

On Dec 10, 2025, at 07:30, Tomas Vondra <tomas@vondra.me> wrote:

I looked at a couple more failing queries, and removing the aggregates
fixes them too. Maybe there are other issues/crashes, of course.

Thanks a lot for pointing this out. I also noticed the same issue when
testing TPC-H Q5. The root cause was that in the goo algorithm I forgot
to handle the case of eager aggregation. This has been fixed in the v2
patch (after the fix, the v2 version works correctly for all TPC-H
queries). I will continue testing it on TPC-DS as well.

Sorry that I didn’t push the related changes earlier. I was running more
experiments on the greedy strategy, and I still needed some time to
organize and analyze the results. During this process, I found that the
current greedy strategy may lead to suboptimal plan quality in some
cases. Because of that, I plan to first evaluate a few basic greedy
heuristics on TPC-H to understand their behavior and limitations. If
there are meaningful results or conclusions, I will share them for
discussion.

Based on some preliminary testing, I’m leaning toward keeping the greedy
strategy simple and explainable, and focusing on the following
indicators together with the planner’s cost estimates:
* join cardinality (number of output rows)
* selectivity (join_size / (left_size * right_size))
* estimated result size in bytes(joinrel->reltarget->width * joinrel->rows)
* cheapest total path cost (cheapest_total_path->total_cost)

At the moment, I’m inclined to prioritize join cardinality with input
size as a secondary factor, but I’d like to validate this step by step:
first by testing these simple heuristics on TPC-H (as a relatively
simple workload) and summarizing some initial conclusions there. After
that, I plan to run more comprehensive experiments on more complex
benchmarks such as JOB and TPC-DS and report the results.

Do you have any thoughts or suggestions on this direction?

Thanks again for your feedback and help.

--
Best regards,
Chengpeng Yan

Attachments:

v2-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchapplication/octet-stream; name=v2-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchDownload
From 79c4d3fa7d83a24b3937ed2e4d5568bcb949e820 Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Wed, 10 Dec 2025 12:52:17 +0800
Subject: [PATCH v2] Add GOO (Greedy Operator Ordering) join search as an
 alternative to GEQO

Introduce a greedy join search algorithm (GOO) to handle
large join problems. GOO builds join relations iteratively, maintaining
a list of clumps (join components) and committing to the cheapest
legal join at each step until only one clump remains.

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/Makefile           |   1 +
 src/backend/optimizer/path/allpaths.c         |   4 +
 src/backend/optimizer/path/goo.c              | 612 +++++++++++++++
 src/backend/optimizer/path/meson.build        |   1 +
 src/backend/utils/misc/guc_parameters.dat     |   9 +
 src/backend/utils/misc/postgresql.conf.sample |   1 +
 src/include/optimizer/goo.h                   |  23 +
 src/include/optimizer/paths.h                 |   1 +
 src/test/regress/expected/goo.out             | 700 ++++++++++++++++++
 src/test/regress/expected/sysviews.out        |   3 +-
 src/test/regress/parallel_schedule            |   9 +-
 src/test/regress/sql/goo.sql                  | 364 +++++++++
 12 files changed, 1724 insertions(+), 4 deletions(-)
 create mode 100644 src/backend/optimizer/path/goo.c
 create mode 100644 src/include/optimizer/goo.h
 create mode 100644 src/test/regress/expected/goo.out
 create mode 100644 src/test/regress/sql/goo.sql

diff --git a/src/backend/optimizer/path/Makefile b/src/backend/optimizer/path/Makefile
index 1e199ff66f7..3bc825cd845 100644
--- a/src/backend/optimizer/path/Makefile
+++ b/src/backend/optimizer/path/Makefile
@@ -17,6 +17,7 @@ OBJS = \
 	clausesel.o \
 	costsize.o \
 	equivclass.o \
+	goo.o \
 	indxpath.o \
 	joinpath.o \
 	joinrels.o \
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 4c43fd0b19b..4574b1f44cc 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -35,6 +35,7 @@
 #include "optimizer/clauses.h"
 #include "optimizer/cost.h"
 #include "optimizer/geqo.h"
+#include "optimizer/goo.h"
 #include "optimizer/optimizer.h"
 #include "optimizer/pathnode.h"
 #include "optimizer/paths.h"
@@ -3845,6 +3846,9 @@ make_rel_from_joinlist(PlannerInfo *root, List *joinlist)
 
 		if (join_search_hook)
 			return (*join_search_hook) (root, levels_needed, initial_rels);
+		/* WIP: for now use geqo_threshold for testing */
+		else if (enable_goo_join_search && levels_needed >= geqo_threshold)
+			return goo_join_search(root, levels_needed, initial_rels);
 		else if (enable_geqo && levels_needed >= geqo_threshold)
 			return geqo(root, levels_needed, initial_rels);
 		else
diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
new file mode 100644
index 00000000000..247dbb5f921
--- /dev/null
+++ b/src/backend/optimizer/path/goo.c
@@ -0,0 +1,612 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.c
+ *     Greedy operator ordering (GOO) join search for large join problems
+ *
+ * GOO is a deterministic greedy operator ordering algorithm that constructs
+ * join relations iteratively, always committing to the cheapest legal join at
+ * each step. The algorithm maintains a list of "clumps" (join components),
+ * initially one per base relation. At each iteration, it evaluates all legal
+ * pairs of clumps, selects the pair that produces the cheapest join according
+ * to the planner's cost model, and replaces those two clumps with the
+ * resulting joinrel. This continues until only one clump remains.
+ *
+ * ALGORITHM COMPLEXITY:
+ *
+ * Time Complexity: O(n^3) where n is the number of base relations.
+ * - The algorithm performs (n - 1) iterations, merging two clumps each time.
+ * - At iteration i, there are (n - i + 1) remaining clumps, requiring
+ *   O((n-i)^2) pair evaluations to find the cheapest join.
+ * - Total: Sum of (n-i)^2 for i=1 to n-1 ≈ O(n^3)
+ *
+ * REFERENCES:
+ *
+ * This implementation is based on the algorithm described in:
+ *
+ * Leonidas Fegaras, "A New Heuristic for Optimizing Large Queries",
+ * Proceedings of the 9th International Conference on Database and Expert
+ * Systems Applications (DEXA '98), August 1998, Pages 726-735.
+ * https://dl.acm.org/doi/10.5555/648311.754892
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/backend/optimizer/path/goo.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "miscadmin.h"
+#include "nodes/bitmapset.h"
+#include "nodes/pathnodes.h"
+#include "optimizer/geqo.h"
+#include "optimizer/goo.h"
+#include "optimizer/joininfo.h"
+#include "optimizer/pathnode.h"
+#include "optimizer/paths.h"
+#include "utils/hsearch.h"
+#include "utils/memutils.h"
+
+/*
+ * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
+ */
+bool		enable_goo_join_search = false;
+
+/*
+ * Working state for a single GOO search invocation.
+ *
+ * This structure holds all the state needed during a greedy join order search.
+ * It manages three memory contexts with different lifetimes to avoid memory
+ * bloat during large join searches.
+ *
+ * TODO: Consider using the extension_state mechanism in PlannerInfo (similar
+ * to GEQO's approach) instead of passing GooState separately.
+ */
+typedef struct GooState
+{
+	PlannerInfo *root;			/* global planner state */
+	MemoryContext goo_cxt;		/* long-lived (per-search) allocations */
+	MemoryContext cand_cxt;		/* per-iteration candidate storage */
+	MemoryContext scratch_cxt;	/* per-candidate speculative evaluation */
+	List	   *clumps;			/* remaining join components (RelOptInfo *) */
+
+	/*
+	 * "clumps" are similar to GEQO's concept (see geqo_eval.c): join
+	 * components that haven't been merged yet. Initially one per base
+	 * relation, gradually merged until one remains.
+	 */
+	bool		clause_pair_present;	/* any clause-connected pair exists? */
+}			GooState;
+
+/*
+ * Candidate join between two clumps.
+ *
+ * This structure holds the greedy metrics from a speculative joinrel
+ * evaluation. We create this lightweight structure in cand_cxt after discarding
+ * the actual joinrel from scratch_cxt, allowing us to compare many candidates
+ * without exhausting memory.
+ */
+typedef struct GooCandidate
+{
+	RelOptInfo *left;			/* left input clump */
+	RelOptInfo *right;			/* right input clump */
+	Cost		total_cost;		/* total cost of cheapest path */
+}			GooCandidate;
+
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels);
+static void goo_destroy_state(GooState * state);
+static RelOptInfo *goo_search_internal(GooState * state);
+static void goo_reset_probe_state(GooState * state, int saved_rel_len,
+								  struct HTAB *saved_hash);
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right);
+static RelOptInfo *goo_commit_join(GooState * state, GooCandidate * cand);
+static bool goo_candidate_better(GooCandidate * a, GooCandidate * b);
+static bool goo_candidate_prunable(GooState * state, RelOptInfo *left,
+								   RelOptInfo *right);
+
+/*
+ * goo_join_search
+ *		Entry point for Greedy Operator Ordering join search algorithm.
+ *
+ * This function is called from make_rel_from_joinlist() when
+ * enable_goo_join_search is true and the number of relations meets or
+ * exceeds geqo_threshold.
+ *
+ * Returns the final RelOptInfo representing the join of all base relations,
+ * or errors out if no valid join order can be found.
+ */
+RelOptInfo *
+goo_join_search(PlannerInfo *root, int levels_needed,
+				List *initial_rels)
+{
+	GooState   *state;
+	RelOptInfo *result;
+	int			base_rel_count;
+	struct HTAB *base_hash;
+
+	/* Initialize search state and memory contexts */
+	state = goo_init_state(root, initial_rels);
+
+	/*
+	 * Save initial state of join_rel_list and join_rel_hash so we can restore
+	 * them if the search fails.
+	 */
+	base_rel_count = list_length(root->join_rel_list);
+	base_hash = root->join_rel_hash;
+
+	/* Run the main greedy search loop */
+	result = goo_search_internal(state);
+
+	if (result == NULL)
+	{
+		/* Restore planner state before reporting error */
+		root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+		root->join_rel_hash = base_hash;
+		elog(ERROR, "GOO join search failed to find a valid join order");
+	}
+
+	goo_destroy_state(state);
+	return result;
+}
+
+/*
+ * goo_init_state
+ *		Initialize per-search state and memory contexts.
+ *
+ * Creates the GooState structure and three memory contexts with different
+ * lifetimes:
+ *
+ * - goo_cxt: Lives for the entire search, holds the clumps list and state.
+ * - cand_cxt: Reset after each iteration, holds candidate structures during
+ *   the comparison phase.
+ * - scratch_cxt: Reset after each candidate evaluation, holds speculative
+ *   joinrels that are discarded before committing to a choice.
+ *
+ * The three-context design prevents memory bloat during large join searches
+ * where we may evaluate hundreds or thousands of candidate joins.
+ */
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels)
+{
+	MemoryContext oldcxt;
+	GooState   *state;
+
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	state = palloc(sizeof(GooState));
+	state->root = root;
+	state->clumps = NIL;
+	state->clause_pair_present = false;
+
+	/* Create the three-level memory context hierarchy */
+	state->goo_cxt = AllocSetContextCreate(root->planner_cxt, "GOOStateContext",
+										   ALLOCSET_DEFAULT_SIZES);
+	state->cand_cxt = AllocSetContextCreate(state->goo_cxt, "GOOCandidateContext",
+											ALLOCSET_SMALL_SIZES);
+	state->scratch_cxt = AllocSetContextCreate(
+											   state->goo_cxt, "GOOScratchContext", ALLOCSET_SMALL_SIZES);
+
+	/*
+	 * Copy the initial_rels list into goo_cxt. This becomes our working
+	 * clumps list that we'll modify throughout the search.
+	 */
+	MemoryContextSwitchTo(state->goo_cxt);
+	state->clumps = list_copy(initial_rels);
+
+	MemoryContextSwitchTo(oldcxt);
+
+	return state;
+}
+
+/*
+ * goo_destroy_state
+ *		Free all memory allocated for the GOO search.
+ *
+ * Deletes the goo_cxt memory context (which recursively deletes cand_cxt
+ * and scratch_cxt as children) and then frees the state structure itself.
+ * This is called after the search completes successfully or fails.
+ */
+static void
+goo_destroy_state(GooState * state)
+{
+	MemoryContextDelete(state->goo_cxt);
+	pfree(state);
+}
+
+/*
+ * goo_search_internal
+ *		Main greedy search loop.
+ *
+ * Implements a two-pass algorithm at each iteration:
+ *
+ * Pass 1: Scan all clump pairs to detect whether any clause-connected pairs
+ *         exist. This sets the clause_pair_present flag.
+ *
+ * Pass 2: Evaluate all viable candidate pairs, keeping track of the best one
+ *         according to our comparison criteria. If clause_pair_present is true,
+ *         we skip Cartesian products entirely to avoid expensive cross joins.
+ *
+ * After selecting the best candidate, we permanently create its joinrel in
+ * planner_cxt and replace the two input clumps with this new joinrel. This
+ * continues until only one clump remains.
+ *
+ * The function runs primarily in goo_cxt, temporarily switching to planner_cxt
+ * when creating permanent joinrels and to scratch_cxt when evaluating
+ * speculative candidates.
+ *
+ * Returns the final joinrel spanning all base relations, or NULL on failure.
+ */
+static RelOptInfo *
+goo_search_internal(GooState * state)
+{
+	PlannerInfo *root = state->root;
+	RelOptInfo *final_rel = NULL;
+	MemoryContext oldcxt;
+
+	/*
+	 * Switch to goo_cxt for the entire search process. This ensures that all
+	 * operations on state->clumps and related structures happen in the
+	 * correct memory context.
+	 */
+	oldcxt = MemoryContextSwitchTo(state->goo_cxt);
+
+	while (list_length(state->clumps) > 1)
+	{
+		ListCell   *lc1;
+		int			i;
+		GooCandidate *best_candidate = NULL;
+
+		/* Allow query cancellation during long join searches */
+		CHECK_FOR_INTERRUPTS();
+
+		/* Reset candidate context for this iteration */
+		MemoryContextReset(state->cand_cxt);
+		state->clause_pair_present = false;
+
+		/*
+		 * Pass 1: Scan all pairs to detect clause-connected joins.
+		 *
+		 * We need to know whether ANY clause-connected pairs exist before we
+		 * can decide whether to skip Cartesian products. This quick scan
+		 * allows us to prefer well-connected joins without completely
+		 * forbidding Cartesian products (which may be necessary for
+		 * disconnected query graphs).
+		 */
+		for (i = 0, lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1), i++)
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+
+				/* Check if this pair has a join clause or order restriction */
+				if (have_relevant_joinclause(root, left, right) ||
+					have_join_order_restriction(root, left, right))
+				{
+					/* Found at least one clause-connected pair */
+					state->clause_pair_present = true;
+					break;
+				}
+			}
+
+			if (state->clause_pair_present)
+				break;
+		}
+
+		/*
+		 * Pass 2: Evaluate all viable candidate pairs and select the best.
+		 *
+		 * For each pair that passes the pruning check, we do a full
+		 * speculative evaluation using make_join_rel() to get accurate costs.
+		 * The candidate with the best cost (according to
+		 * goo_candidate_better) is remembered and will be committed after
+		 * this pass.
+		 *
+		 * TODO: It might be worth caching cost estimates if the same join
+		 * pair appears in multiple iterations.
+		 */
+		for (lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1))
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+				GooCandidate *cand;
+
+				cand = goo_build_candidate(state, left, right);
+				if (cand == NULL)
+					continue;
+
+				/* Track the best candidate seen so far */
+				if (best_candidate == NULL ||
+					goo_candidate_better(cand, best_candidate))
+					best_candidate = cand;
+			}
+		}
+
+		/* We must have at least one valid join candidate */
+		if (best_candidate == NULL)
+			elog(ERROR, "GOO join search failed to find any valid join candidates");
+
+		/*
+		 * Commit the best candidate: create the joinrel permanently and
+		 * update the clumps list.
+		 */
+		final_rel = goo_commit_join(state, best_candidate);
+
+		if (final_rel == NULL)
+			elog(ERROR, "GOO join search failed to commit join");
+	}
+
+	/* Switch back to the original context before returning */
+	MemoryContextSwitchTo(oldcxt);
+
+	return final_rel;
+}
+
+/*
+ * goo_candidate_prunable
+ *		Determine whether a candidate pair should be skipped.
+ *
+ * We use a two-level pruning strategy:
+ *
+ * 1. Pairs with join clauses or join-order restrictions are never prunable.
+ *    These represent natural joins or required join orders (e.g., from outer
+ *    joins or LATERAL references).
+ *
+ * 2. If clause_pair_present is true (meaning at least one clause-connected
+ *    pair exists in this iteration), we prune Cartesian products to avoid
+ *    evaluating expensive cross joins when better options are available.
+ *
+ * However, if NO clause-connected pairs exist in an iteration, we allow
+ * Cartesian products to be considered. This ensures we can always make
+ * progress even with disconnected query graphs.
+ *
+ * Returns true if the pair should be pruned (skipped), false otherwise.
+ */
+static bool
+goo_candidate_prunable(GooState * state, RelOptInfo *left,
+					   RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	bool		has_clause = have_relevant_joinclause(root, left, right);
+	bool		has_restriction = have_join_order_restriction(root, left, right);
+
+	if (has_clause || has_restriction)
+		return false;			/* never prune clause-connected joins */
+
+	return state->clause_pair_present;
+}
+
+/*
+ * goo_build_candidate
+ *		Evaluate a potential join between two clumps and return a candidate.
+ *
+ * This function performs a speculative join evaluation to extract greedy metrics
+ * without permanently creating the joinrel. The process is:
+ *
+ * 1. Check basic viability (pruning, overlapping relids).
+ * 2. Switch to scratch_cxt and create the joinrel using make_join_rel().
+ * 3. Generate paths (including partitionwise and parallel variants).
+ * 4. Extract the greedy metrics from the cheapest path.
+ * 5. Discard the joinrel by calling goo_reset_probe_state().
+ * 6. Create a lightweight GooCandidate in cand_cxt with the extracted metrics.
+ *
+ * This evaluate-and-discard pattern prevents memory bloat when evaluating
+ * many candidates. The winning candidate will be rebuilt permanently later
+ * by goo_commit_join().
+ *
+ * Returns a GooCandidate structure, or NULL if the join is illegal or
+ * overlapping. Assumes the caller is in goo_cxt.
+ */
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	MemoryContext oldcxt;
+	int			saved_rel_len;
+	struct HTAB *saved_hash;
+	RelOptInfo *joinrel;
+	Cost		total_cost;
+	GooCandidate *cand;
+
+	/* Skip if this pair should be pruned */
+	if (goo_candidate_prunable(state, left, right))
+		return NULL;
+
+	/* Sanity check: ensure the clumps don't overlap */
+	if (bms_overlap(left->relids, right->relids))
+		return NULL;
+
+	/*
+	 * Save state before speculative join evaluation. We'll create the joinrel
+	 * in scratch_cxt and then discard it.
+	 */
+	saved_rel_len = list_length(root->join_rel_list);
+	saved_hash = root->join_rel_hash;
+
+	/* Switch to scratch_cxt for speculative joinrel creation */
+	oldcxt = MemoryContextSwitchTo(state->scratch_cxt);
+
+	/*
+	 * Temporarily disable join_rel_hash so make_join_rel() doesn't find or
+	 * cache this speculative joinrel.
+	 */
+	root->join_rel_hash = NULL;
+
+	/*
+	 * Create the joinrel and generate all its paths.
+	 *
+	 * TODO: This is the most expensive part of GOO. Each candidate evaluation
+	 * performs full path generation via make_join_rel().
+	 */
+	joinrel = make_join_rel(root, left, right);
+
+	if (joinrel == NULL)
+	{
+		/* Invalid or illegal join, clean up and return NULL */
+		MemoryContextSwitchTo(oldcxt);
+		goo_reset_probe_state(state, saved_rel_len, saved_hash);
+		return NULL;
+	}
+
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	total_cost = joinrel->cheapest_total_path->total_cost;
+
+	/*
+	 * Switch back to goo_cxt and discard the speculative joinrel.
+	 * goo_reset_probe_state() will clean up join_rel_list, join_rel_hash, and
+	 * reset scratch_cxt to free all the joinrel's memory.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+	goo_reset_probe_state(state, saved_rel_len, saved_hash);
+
+	/*
+	 * Now create the candidate structure in cand_cxt. This will survive until
+	 * the end of this iteration (when cand_cxt is reset).
+	 */
+	oldcxt = MemoryContextSwitchTo(state->cand_cxt);
+	cand = palloc(sizeof(GooCandidate));
+	cand->left = left;
+	cand->right = right;
+	cand->total_cost = total_cost;
+	MemoryContextSwitchTo(oldcxt);
+
+	return cand;
+}
+
+/*
+ * goo_reset_probe_state
+ *		Clean up after a speculative joinrel evaluation.
+ *
+ * Reverts the planner's join_rel_list and join_rel_hash to their saved state,
+ * removing any joinrels that were created during speculative evaluation.
+ * Also resets scratch_cxt to free all memory used by the discarded joinrel
+ * and its paths.
+ *
+ * This function is called after extracting cost metrics from a speculative
+ * joinrel that we don't want to keep.
+ */
+static void
+goo_reset_probe_state(GooState * state, int saved_rel_len,
+					  struct HTAB *saved_hash)
+{
+	PlannerInfo *root = state->root;
+
+	/* Remove speculative joinrels from the planner's lists */
+	root->join_rel_list = list_truncate(root->join_rel_list, saved_rel_len);
+	root->join_rel_hash = saved_hash;
+
+	/* Free all memory used during speculative evaluation */
+	MemoryContextReset(state->scratch_cxt);
+}
+
+/*
+ * goo_commit_join
+ *		Permanently create the chosen join and update the clumps list.
+ *
+ * After selecting the best candidate in an iteration, we need to permanently
+ * create its joinrel (with all paths) and integrate it into the planner state.
+ * This function:
+ *
+ * 1. Switches to planner_cxt and creates the joinrel using make_join_rel().
+ *    Unlike the speculative evaluation, this joinrel is kept permanently.
+ * 2. Generates partitionwise and parallel path variants.
+ * 3. Determines the cheapest paths.
+ * 4. Updates state->clumps by removing the two input clumps and adding the
+ *    new joinrel as a single clump.
+ *
+ * The next iteration will treat this joinrel as an atomic unit that can be
+ * joined with other remaining clumps.
+ *
+ * Returns the newly created joinrel. Assumes the caller is in goo_cxt.
+ */
+static RelOptInfo *
+goo_commit_join(GooState * state, GooCandidate * cand)
+{
+	MemoryContext oldcxt;
+	PlannerInfo *root = state->root;
+	RelOptInfo *joinrel;
+
+	/*
+	 * Create the joinrel permanently in planner_cxt. Unlike the speculative
+	 * evaluation in goo_build_candidate(), this joinrel will be kept and
+	 * added to root->join_rel_list for use by the rest of the planner.
+	 */
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	joinrel = make_join_rel(root, cand->left, cand->right);
+	if (joinrel == NULL)
+	{
+		MemoryContextSwitchTo(oldcxt);
+		elog(ERROR, "GOO join search failed to create join relation");
+	}
+
+	/* Generate additional path variants, just like standard_join_search() */
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	/*
+	 * Switch back to goo_cxt and update the clumps list. Remove the two input
+	 * clumps and add the new joinrel as a single clump.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+
+	state->clumps = list_delete_ptr(state->clumps, cand->left);
+	state->clumps = list_delete_ptr(state->clumps, cand->right);
+	state->clumps = lappend(state->clumps, joinrel);
+
+	return joinrel;
+}
+
+/*
+ * goo_candidate_better
+ *		Compare two join candidates and determine which is better.
+ *
+ * Returns true if candidate 'a' should be preferred over candidate 'b'.
+ */
+static bool
+goo_candidate_better(GooCandidate * a, GooCandidate * b)
+{
+	return (a->total_cost < b->total_cost);
+}
diff --git a/src/backend/optimizer/path/meson.build b/src/backend/optimizer/path/meson.build
index 12f36d85cb6..e5046365a37 100644
--- a/src/backend/optimizer/path/meson.build
+++ b/src/backend/optimizer/path/meson.build
@@ -5,6 +5,7 @@ backend_sources += files(
   'clausesel.c',
   'costsize.c',
   'equivclass.c',
+  'goo.c',
   'indxpath.c',
   'joinpath.c',
   'joinrels.c',
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index 3b9d8349078..a8ce31ab8a7 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -840,6 +840,15 @@
   boot_val => 'true',
 },
 
+/* WIP: for now keep this in QUERY_TUNING_GEQO group for testing convenience */
+{ name => 'enable_goo_join_search', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Enables the planner\'s use of GOO join search for large join problems.',
+  long_desc => 'Greedy Operator Ordering (GOO) is a deterministic join search algorithm for queries with many relations.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'enable_goo_join_search',
+  boot_val => 'false',
+},
+
 { name => 'enable_group_by_reordering', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_METHOD',
   short_desc => 'Enables reordering of GROUP BY keys.',
   flags => 'GUC_EXPLAIN',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index dc9e2255f8a..8284e8b1da7 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -456,6 +456,7 @@
 # - Genetic Query Optimizer -
 
 #geqo = on
+#enable_goo_join_search = off
 #geqo_threshold = 12
 #geqo_effort = 5                        # range 1-10
 #geqo_pool_size = 0                     # selects default based on effort
diff --git a/src/include/optimizer/goo.h b/src/include/optimizer/goo.h
new file mode 100644
index 00000000000..0080dfa2ac8
--- /dev/null
+++ b/src/include/optimizer/goo.h
@@ -0,0 +1,23 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.h
+ *     prototype for the greedy operator ordering join search
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/include/optimizer/goo.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef GOO_H
+#define GOO_H
+
+#include "nodes/pathnodes.h"
+#include "nodes/pg_list.h"
+
+extern RelOptInfo *goo_join_search(PlannerInfo *root, int levels_needed,
+								   List *initial_rels);
+
+#endif							/* GOO_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index f6a62df0b43..5b3ebe5f1d2 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -21,6 +21,7 @@
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
+extern PGDLLIMPORT bool enable_goo_join_search;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
diff --git a/src/test/regress/expected/goo.out b/src/test/regress/expected/goo.out
new file mode 100644
index 00000000000..0b41634c968
--- /dev/null
+++ b/src/test/regress/expected/goo.out
@@ -0,0 +1,700 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+ANALYZE;
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+                              QUERY PLAN                              
+----------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: ("*VALUES*".column1 = "*VALUES*_2".column1)
+         ->  Hash Join
+               Hash Cond: ("*VALUES*".column1 = "*VALUES*_1".column1)
+               ->  Values Scan on "*VALUES*"
+               ->  Hash
+                     ->  Values Scan on "*VALUES*_1"
+         ->  Hash
+               ->  Values Scan on "*VALUES*_2"
+(10 rows)
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+             QUERY PLAN              
+-------------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t5
+               Filter: (f = 3)
+         ->  Nested Loop
+               ->  Seq Scan on t1
+                     Filter: (a = 1)
+               ->  Seq Scan on t2
+                     Filter: (c = 2)
+(9 rows)
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+                                QUERY PLAN                                 
+---------------------------------------------------------------------------
+ Aggregate
+   ->  Nested Loop
+         Join Filter: (fact.dim4_id = dim4.id)
+         ->  Hash Join
+               Hash Cond: (dim3.id = fact.dim3_id)
+               ->  Seq Scan on dim3
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (dim2.id = fact.dim2_id)
+                           ->  Seq Scan on dim2
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (fact.dim1_id = dim1.id)
+                                       ->  Seq Scan on fact
+                                       ->  Hash
+                                             ->  Seq Scan on dim1
+                                                   Filter: (id < 5)
+         ->  Seq Scan on dim4
+(18 rows)
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+                           QUERY PLAN                           
+----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t7.h = t9.h)
+         ->  Hash Join
+               Hash Cond: (t8.i = t10.i)
+               ->  Hash Join
+                     Hash Cond: (t2.c = t4.c)
+                     ->  Hash Join
+                           Hash Cond: (t3.b = t1.b)
+                           ->  Hash Join
+                                 Hash Cond: (t5.f = t7.f)
+                                 ->  Hash Join
+                                       Hash Cond: (t3.d = t5.d)
+                                       ->  Seq Scan on t3
+                                       ->  Hash
+                                             ->  Seq Scan on t5
+                                 ->  Hash
+                                       ->  Seq Scan on t7
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (t1.a = t2.a)
+                                       ->  Seq Scan on t1
+                                       ->  Hash
+                                             ->  Seq Scan on t2
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t6.g = t8.g)
+                                 ->  Hash Join
+                                       Hash Cond: (t4.e = t6.e)
+                                       ->  Seq Scan on t4
+                                       ->  Hash
+                                             ->  Seq Scan on t6
+                                 ->  Hash
+                                       ->  Seq Scan on t8
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (t12.m = t14.m)
+                           ->  Hash Join
+                                 Hash Cond: (t10.k = t12.k)
+                                 ->  Seq Scan on t10
+                                 ->  Hash
+                                       ->  Seq Scan on t12
+                           ->  Hash
+                                 ->  Seq Scan on t14
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t11.l = t13.l)
+                     ->  Hash Join
+                           Hash Cond: (t9.j = t11.j)
+                           ->  Seq Scan on t9
+                           ->  Hash
+                                 ->  Seq Scan on t11
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t13.n = t15.n)
+                                 ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t15
+(58 rows)
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t1.a = t3.b)
+         ->  Hash Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t3.b = t4.c)
+                     ->  Seq Scan on t3
+                     ->  Hash
+                           ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+-- Results should match
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+                                                            QUERY PLAN                                                            
+----------------------------------------------------------------------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t16.q = t18.q)
+         ->  Hash Join
+               Hash Cond: (t15.p = t17.p)
+               ->  Hash Join
+                     Hash Cond: (t14.o = t16.o)
+                     ->  Hash Join
+                           Hash Cond: (t13.n = t15.n)
+                           ->  Hash Join
+                                 Hash Cond: (t12.m = t14.m)
+                                 ->  Hash Join
+                                       Hash Cond: (t11.l = t13.l)
+                                       ->  Hash Join
+                                             Hash Cond: (t10.k = t12.k)
+                                             ->  Hash Join
+                                                   Hash Cond: (t9.j = t11.j)
+                                                   ->  Hash Join
+                                                         Hash Cond: (t8.i = t10.i)
+                                                         ->  Hash Join
+                                                               Hash Cond: (t7.h = t9.h)
+                                                               ->  Hash Join
+                                                                     Hash Cond: (t6.g = t8.g)
+                                                                     ->  Hash Join
+                                                                           Hash Cond: (t5.f = t7.f)
+                                                                           ->  Hash Join
+                                                                                 Hash Cond: (t4.e = t6.e)
+                                                                                 ->  Hash Join
+                                                                                       Hash Cond: (t3.d = t5.d)
+                                                                                       ->  Hash Join
+                                                                                             Hash Cond: (t2.c = t4.c)
+                                                                                             ->  Hash Join
+                                                                                                   Hash Cond: (t1.b = t3.b)
+                                                                                                   ->  Hash Join
+                                                                                                         Hash Cond: (t1.a = t2.a)
+                                                                                                         ->  Seq Scan on t1
+                                                                                                         ->  Hash
+                                                                                                               ->  Seq Scan on t2
+                                                                                                   ->  Hash
+                                                                                                         ->  Seq Scan on t3
+                                                                                             ->  Hash
+                                                                                                   ->  Seq Scan on t4
+                                                                                       ->  Hash
+                                                                                             ->  Seq Scan on t5
+                                                                                 ->  Hash
+                                                                                       ->  Seq Scan on t6
+                                                                           ->  Hash
+                                                                                 ->  Seq Scan on t7
+                                                                     ->  Hash
+                                                                           ->  Seq Scan on t8
+                                                               ->  Hash
+                                                                     ->  Seq Scan on t9
+                                                         ->  Hash
+                                                               ->  Seq Scan on t10
+                                                   ->  Hash
+                                                         ->  Seq Scan on t11
+                                             ->  Hash
+                                                   ->  Seq Scan on t12
+                                       ->  Hash
+                                             ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t14
+                           ->  Hash
+                                 ->  Seq Scan on t15
+                     ->  Hash
+                           ->  Seq Scan on t16
+               ->  Hash
+                     ->  Seq Scan on t17
+         ->  Hash
+               ->  Seq Scan on t18
+(70 rows)
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+                      QUERY PLAN                       
+-------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t2.a = t1.a)
+         ->  Seq Scan on t2
+         ->  Hash
+               ->  Nested Loop
+                     ->  Hash Join
+                           Hash Cond: (t6.e = t5.f)
+                           ->  Seq Scan on t6
+                           ->  Hash
+                                 ->  Seq Scan on t5
+                                       Filter: (d < 3)
+                     ->  Seq Scan on t1
+                           Filter: (a < 5)
+(14 rows)
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Left Join
+         Hash Cond: (t3.d = t4.c)
+         ->  Hash Left Join
+               Hash Cond: (t2.a = t3.b)
+               ->  Hash Left Join
+                     Hash Cond: (t1.a = t2.a)
+                     ->  Seq Scan on t1
+                     ->  Hash
+                           ->  Seq Scan on t2
+               ->  Hash
+                     ->  Seq Scan on t3
+         ->  Hash
+               ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+            QUERY PLAN            
+----------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t1
+         ->  Materialize
+               ->  Seq Scan on t2
+(5 rows)
+
+SELECT count(*)
+FROM t1, t2;
+ count 
+-------
+   100
+(1 row)
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+               QUERY PLAN               
+----------------------------------------
+ Aggregate
+   ->  Hash Full Join
+         Hash Cond: (t2.a = t3.b)
+         ->  Hash Full Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Seq Scan on t3
+(10 rows)
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+                QUERY PLAN                
+------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (b.b = c.c)
+         ->  Hash Join
+               Hash Cond: (a.a = b.a)
+               ->  Seq Scan on t1 a
+               ->  Hash
+                     ->  Seq Scan on t1 b
+         ->  Hash
+               ->  Seq Scan on t2 c
+(10 rows)
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+                           QUERY PLAN                            
+-----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (chain1a.val = chain2a.id)
+         ->  Hash Join
+               Hash Cond: (chain1b.val = chain1c.id)
+               ->  Hash Join
+                     Hash Cond: (chain1a.id = chain1b.id)
+                     ->  Seq Scan on chain1a
+                     ->  Hash
+                           ->  Seq Scan on chain1b
+               ->  Hash
+                     ->  Seq Scan on chain1c
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (chain2b.val = chain2c.id)
+                     ->  Hash Join
+                           Hash Cond: (chain2a.val = chain2b.id)
+                           ->  Seq Scan on chain2a
+                           ->  Hash
+                                 ->  Seq Scan on chain2b
+                     ->  Hash
+                           ->  Seq Scan on chain2c
+(22 rows)
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+                        QUERY PLAN                        
+----------------------------------------------------------
+ HashAggregate
+   Output: c.id, count(*)
+   Group Key: c.id
+   ->  Hash Join
+         Output: c.id
+         Hash Cond: (c.id = a2.center_id)
+         ->  Hash Join
+               Output: c.id, a1.center_id
+               Inner Unique: true
+               Hash Cond: (a1.center_id = c.id)
+               ->  Seq Scan on pg_temp.arm1_tbl a1
+                     Output: a1.center_id, a1.payload
+               ->  Hash
+                     Output: c.id
+                     ->  Seq Scan on pg_temp.center_tbl c
+                           Output: c.id
+         ->  Hash
+               Output: a2.center_id
+               ->  Seq Scan on pg_temp.arm2_tbl a2
+                     Output: a2.center_id
+(20 rows)
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+ id | count 
+----+-------
+  8 | 10000
+ 10 | 10000
+  9 | 10000
+  7 | 10000
+  1 | 10000
+  5 | 10000
+  4 | 10000
+  2 | 10000
+  6 | 10000
+  3 | 10000
+(10 rows)
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+RESET geqo_threshold;
+RESET enable_goo_join_search;
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index 3b37fafa65b..cb0c84cebff 100644
--- a/src/test/regress/expected/sysviews.out
+++ b/src/test/regress/expected/sysviews.out
@@ -153,6 +153,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_distinct_reordering     | on
  enable_eager_aggregate         | on
  enable_gathermerge             | on
+ enable_goo_join_search         | off
  enable_group_by_reordering     | on
  enable_hashagg                 | on
  enable_hashjoin                | on
@@ -173,7 +174,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(25 rows)
+(26 rows)
 
 -- There are always wait event descriptions for various types.  InjectionPoint
 -- may be present or absent, depending on history since last postmaster start.
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index cc6d799bcea..14e3a475906 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -68,6 +68,12 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi
 # ----------
 test: brin gin gist spgist privileges init_privs security_label collate matview lock replica_identity rowsecurity object_address tablesample groupingsets drop_operator password identity generated_stored join_hash
 
+# ----------
+# Additional JOIN ORDER tests
+# WIP: need to find an appropriate group for this test
+# ----------
+test: goo
+
 # ----------
 # Additional BRIN tests
 # ----------
@@ -98,9 +104,6 @@ test: maintain_every
 # no relation related tests can be put in this group
 test: publication subscription
 
-# ----------
-# Another group of parallel tests
-# select_views depends on create_view
 # ----------
 test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock indirect_toast equivclass stats_rewrite
 
diff --git a/src/test/regress/sql/goo.sql b/src/test/regress/sql/goo.sql
new file mode 100644
index 00000000000..ab048d8e34e
--- /dev/null
+++ b/src/test/regress/sql/goo.sql
@@ -0,0 +1,364 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE goo_plan;
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE standard_plan;
+
+-- Results should match
+EXECUTE goo_plan;
+EXECUTE standard_plan;
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+
+SELECT count(*)
+FROM t1, t2;
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+
+RESET geqo_threshold;
+RESET enable_goo_join_search;
-- 
2.39.3 (Apple Git-146)

#9Tomas Vondra
tomas@vondra.me
In reply to: Chengpeng Yan (#8)
Re: Add a greedy join search algorithm to handle large join problems

On 12/10/25 06:20, Chengpeng Yan wrote:

Hi,

On Dec 10, 2025, at 07:30, Tomas Vondra <tomas@vondra.me> wrote:

I looked at a couple more failing queries, and removing the aggregates
fixes them too. Maybe there are other issues/crashes, of course.

Thanks a lot for pointing this out. I also noticed the same issue when
testing TPC-H Q5. The root cause was that in the goo algorithm I forgot
to handle the case of eager aggregation. This has been fixed in the v2
patch (after the fix, the v2 version works correctly for all TPC-H
queries). I will continue testing it on TPC-DS as well.

I can confirm v2 makes it work for planning all 99 TPC-DS queries, i.e.
there are no more crashes during EXPLAIN.

Comparing the plans from master/geqo and master/goo, I see about 80% of
them changed. I haven't done any evaluation of how good the plans are,
really. I'll see if I can get some numbers next, but it'll take a while.

It's also tricky as plan choices depend on GUCs like random_page_cost,
and if those values are not good enough, the optimizer may still end up
with a bad plan. I'm not sure what's the best approach.

I did however notice an interesting thing - running EXPLAIN on the 99
queries (for 3 scales and 0/4 workers, so 6x 99) took this much time:

master: 8s
master/geqo: 20s
master/goo: 5s

Where master/geqo means

geqo_threshold=2

and master/goo means

geqo_threshold=2
enable_goo_join_search = on

It's nice that "goo" seems to be faster than "geqo" - assuming the plans
are comparable or better. But it surprised me switching to geqo makes it
slower than master. That goes against my intuition that geqo is meant to
be cheaper/faster join order planning. But maybe I'm missing something.

Sorry that I didn’t push the related changes earlier. I was running more
experiments on the greedy strategy, and I still needed some time to
organize and analyze the results. During this process, I found that the
current greedy strategy may lead to suboptimal plan quality in some
cases. Because of that, I plan to first evaluate a few basic greedy
heuristics on TPC-H to understand their behavior and limitations. If
there are meaningful results or conclusions, I will share them for
discussion.

Based on some preliminary testing, I’m leaning toward keeping the greedy
strategy simple and explainable, and focusing on the following
indicators together with the planner’s cost estimates:
* join cardinality (number of output rows)
* selectivity (join_size / (left_size * right_size))
* estimated result size in bytes(joinrel->reltarget->width * joinrel->rows)
* cheapest total path cost (cheapest_total_path->total_cost)

At the moment, I’m inclined to prioritize join cardinality with input
size as a secondary factor, but I’d like to validate this step by step:
first by testing these simple heuristics on TPC-H (as a relatively
simple workload) and summarizing some initial conclusions there. After
that, I plan to run more comprehensive experiments on more complex
benchmarks such as JOB and TPC-DS and report the results.

Do you have any thoughts or suggestions on this direction?

Thanks again for your feedback and help.

No opinion.

IIUC it's a simplified heuristics, replacing the "full" join planning
algorithm. So inevitably there will be cases when it produces plans that
are "worse" than the actual join order planning. I don't have a great
intuition what's the right trade off yet. Or am I missing something?

regards

--
Tomas Vondra

#10John Naylor
johncnaylorls@gmail.com
In reply to: Tomas Vondra (#9)
Re: Add a greedy join search algorithm to handle large join problems

On Wed, Dec 10, 2025 at 5:20 PM Tomas Vondra <tomas@vondra.me> wrote:

I did however notice an interesting thing - running EXPLAIN on the 99
queries (for 3 scales and 0/4 workers, so 6x 99) took this much time:

master: 8s
master/geqo: 20s
master/goo: 5s

It's nice that "goo" seems to be faster than "geqo" - assuming the plans
are comparable or better. But it surprised me switching to geqo makes it
slower than master. That goes against my intuition that geqo is meant to
be cheaper/faster join order planning. But maybe I'm missing something.

Yeah, that was surprising. It seems that geqo has a large overhead, so
it takes a larger join problem for the asymptotic behavior to win over
exhaustive search.

--
John Naylor
Amazon Web Services

#11Pavel Stehule
pavel.stehule@gmail.com
In reply to: John Naylor (#10)
Re: Add a greedy join search algorithm to handle large join problems

čt 11. 12. 2025 v 3:53 odesílatel John Naylor <johncnaylorls@gmail.com>
napsal:

On Wed, Dec 10, 2025 at 5:20 PM Tomas Vondra <tomas@vondra.me> wrote:

I did however notice an interesting thing - running EXPLAIN on the 99
queries (for 3 scales and 0/4 workers, so 6x 99) took this much time:

master: 8s
master/geqo: 20s
master/goo: 5s

It's nice that "goo" seems to be faster than "geqo" - assuming the plans
are comparable or better. But it surprised me switching to geqo makes it
slower than master. That goes against my intuition that geqo is meant to
be cheaper/faster join order planning. But maybe I'm missing something.

Yeah, that was surprising. It seems that geqo has a large overhead, so
it takes a larger join problem for the asymptotic behavior to win over
exhaustive search.

If I understand correctly to design - geqo should be slower for any queries
with smaller complexity. The question is how many queries in the tested
model are really complex.

Show quoted text

--
John Naylor
Amazon Web Services

#12Tomas Vondra
tomas@vondra.me
In reply to: Pavel Stehule (#11)
Re: Add a greedy join search algorithm to handle large join problems

On 12/11/25 07:12, Pavel Stehule wrote:

čt 11. 12. 2025 v 3:53 odesílatel John Naylor <johncnaylorls@gmail.com
<mailto:johncnaylorls@gmail.com>> napsal:

On Wed, Dec 10, 2025 at 5:20 PM Tomas Vondra <tomas@vondra.me
<mailto:tomas@vondra.me>> wrote:

I did however notice an interesting thing - running EXPLAIN on the 99
queries (for 3 scales and 0/4 workers, so 6x 99) took this much time:

master:       8s
master/geqo: 20s
master/goo:   5s

It's nice that "goo" seems to be faster than "geqo" - assuming the

plans

are comparable or better. But it surprised me switching to geqo

makes it

slower than master. That goes against my intuition that geqo is

meant to

be cheaper/faster join order planning. But maybe I'm missing

something.

Yeah, that was surprising. It seems that geqo has a large overhead, so
it takes a larger join problem for the asymptotic behavior to win over
exhaustive search.

If I understand correctly to design - geqo should be slower for any
queries with smaller complexity. The question is how many queries in the
tested model are really complex.

Depends on what you mean by "really complex". TPC-DS queries are not
trivial, but the complexity may not be in the number of joins.

Of course, setting geqo_threshold to 2 may be too aggressive. Not sure.

regards

--
Tomas Vondra

#13Tomas Vondra
tomas@vondra.me
In reply to: Tomas Vondra (#9)
3 attachment(s)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

Here's a more complete set of results from a TPC-DS run. See the
run-queries-2.sh script for more details. There are also .sql files with
DDL to create the database, etc. It does not include the parts to
generate the data etc. (you'll need to the generator from TPC site).

The attached CSV has results for scales 1 and 10, with 0 and 4 parallel
workers. It runs three configurations:

- master (geqo=off, threshold=12)
- master-geqo (goo=off, threshold=2)
- master-goo (goo=on, threshold=2)

There's a couple more fields, e.g. whether it's cold/cached run, etc.

A very simple summary of the results is the total duration of the run,
for all 99 queries combined:

scale workers caching master master-geqo master-goo
===================================================================
1 0 cold 816 399 1124
warm 784 369 1097
4 cold 797 384 1085
warm 774 366 1069
-------------------------------------------------------------------
10 0 cold 2760 2653 2340
warm 2580 2470 2177
4 cold 2563 2423 1969
warm 2439 2325 1859

This is interesting, and also a bit funny.

The funny part is that geqo seems to do better than master - on scale 1
it's pretty clear, on scale 10 the difference is much smaller.

The interesting part is that "goo" is doing worse than master (or geqo)
on scale 1, and better on scale 10. I wonder how would it do on larger
scales, but I don't have such results.

There's a PDF with per-query results too.

This may be a little bit misleading because the statement timeout was
set to 300s, and there's a couple queries that did not complete before
this timeout. Maybe it'd be better to not include these queries. I
haven't tried, though.

It might be interesting to look at some of the queries that got worse,
and check why. Maybe that'd help you with picking the heuristics?

FWIW I still think no heuristics can be perfect, so getting slower plans
for some queries should not be treated as "hard failure". The other
thing is the quality of plans depends on GUCs like random_page_cost, and
I kept them at default values.

Anyway, I hope this is helpful input.

regards

--
Tomas Vondra

Attachments:

tpc-ds-ryzen.csvtext/csv; charset=UTF-8; name=tpc-ds-ryzen.csvDownload
tpcds.pdfapplication/pdf; name=tpcds.pdfDownload
%PDF-1.4
% ����
3
0
obj
<<
/Type
/Catalog
/Names
<<
>>
/PageLabels
<<
/Nums
[
0
<<
/S
/D
/St
1
>>
]
>>
/Outlines
2
0
R
/Pages
1
0
R
>>
endobj
4
0
obj
<<
/Creator
(��Google Sheets)
/Title
(��tpc-ds)
>>
endobj
5
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
6
0
R
/Resources
7
0
R
/Annots
9
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
6
0
obj
<<
/Filter
/FlateDecode
/Length
8
0
R
>>
stream
x���_��8v��cp���?�|��a��D��c�dlL�8�t� ���a�ub'@�~��\{�����%�4f�~��K�:�"�D���o��������#��������-�P���������7����������iI������������=���[[��7����w�F��{��������}���{�=^���^t��y_�h�����u�<j����S�G��o9e/�p;�4��h2�������T\�����?�vJ�U�gy�����S���Jh�T�7��E���8��}��&�C����;�3�V8WN������G:?
�8J�0�A3���c����*o�V��G�S�����do&@�7��e����x��������y���H^�D�F�] /�DZI�v
��Nea|��Ne��f��0���G[��Jg0<]�'P�}U�}��������}���w~���Hj�����r���z����8�������vJ����8����0��"�-������,7��.�=�s?��x�\6�4~,�Ir%)�H�i�������Of��9���������t�Nv���	)���0S��x����}o��������8�y�;�W3��q,����4�\9����w|��'��D9�c+�������������I�c�c>��>Z*���l��q����n��L�U*�V�|ZG�Q-���7.�~Z�X8���5�GK%=��.s���8�`���T���g]����s��-|0���,����q��w�O�����l�d��x�^w����s�l������-��`m��Spq��y_w���#w �@�;��h5\2n_����8N�t���Jr����X�'tZ�G����~��|"Ju����[_�tN��v�j<���4����	��-<�)��g
|*�P�	�����1��t���x�������Y���Riy7������3�x��dg���h���
4�~w��p<�B�T��U���1��~��+��vv;��Uh�<V?��;o�zj���y�����m =V�����������X��6P������������q��3a�������`�0f���C��V;���A��Wh��c���x|������k��j<�C��D'���l��K�3�dg�y4�49]T�8�I��%l}OO>�����YC';�"�}�,9�`�����
H7G��e�5@bP���R�T�0E��������R������,����(���p<Y������P<(��*�O��	C'���x����_8��08
�-@��T����.@������O :�)�<e�d����C���r��p&<��W�7J?k���<��d��y�h�Y��|�<�I?��'PdK�������R�g�Mt�3+<������x����l�Y��sa|�%t�O|�� P�����x�^�g	Pt�� ���������iB'K6O�������)��T0�$@��oKV����������%������<�tV�+�����g�@T���@�`>��U�����Nvf;��2�O�����PHny�Pv�!�C}Y�Z�>���~*|b�T�e�0_Qx�����&�Ty6HfV�����wt&�%�<3)��"��y}Y�-��(��}�&7&���|`������OJ��>;�*MnR4�����"Jh�s��8N��'u�	������������s�@���~��@���	��I���n<	������W7�t2��g���A�'�\w�t����T �.1����`����7�y���j��'=O��OC~.��<}�d��x����n��i�4�O��������p.W�:�}��gJh��n-�`8�S�"��`S�:��Q�1ZdH�8�X���e��p0|n�?�g��`���}*:
n
�����R��B��3��q���	G��A� �d.���#v'������-���x�F���G�@E�j���q��%����~r<Rw�	��c�Z��~���Tx�n�Gg�p0��t������K���Nm�a:PZ�m:���Q�V��O��qr���)�<h���t���@�WM|6�Q5(��h�YB�!t��(<P�/����p<Gh�b��)���������s�@e��}��0��<9h�F������/�������N��#��~E�}w���g�;~f���
�'���p�r�	�@?�Un�GL�	L�N����M�' ����>�!��r>{���t�K�v<;�C�pOrJ�w3��l�irn����EN&`�����m7P�3��|����<;	���H���I���r�����l;�9�$��V9��zD_������v�;!��9��3�eYx2�V�eG�����b4�G�G.��X[���|�>-�L�G���u��/�&Kv;L��Q�og���69�Mv�-�._f��3��[A�����M-�����#|�8���l�[l�[g��r;��"{�:�![��
X�-�?}�V��m2j���������v2J����Y]��\�n��A����&�r���+�w�I�NI��u��:"pn�u�1����!W�M�hu���e��e���mt�A9��3SF�2�v�2vF�e(�t�m���������������dd����'���$N�$CgG?�U�����M�qk�����c�{v@;9�U���IG��KK�������Ye##�?����@��-g9�������������[��8b�������w��pv>28oEF��z���,��,�uG?�C��E��l��-�54���3,�����[����h�����?�~��]�������V}[��	��}�r#'�t�3\e1=�9z��h'%���� "�����Xf���L	"�<C�~����GFo����Td����"��d
d]���}d�2t�������e����v<;!�2�*s��t�|���������������H��m��2�������k���0���h������H�G����v���:�VT�Q4�b��
�u��h<�I�����GK{<3���x�(�z��=���H�U��Pc��xe��O�${��7��+�����M�GEzc�rx��P9�j��>����L���`�G{����,K���,��3xp�7��6�)����QY�-
�{�?&��^=*YF�����������������G{����6
�{�o��h��;�Fas�=������mv�P�5��^=*�F�������o�?����@c�P^�!l��]��R`u�a���g���{(��x�F{c���<�}��-��X ��=�C����{�@r�+<������7X�C{�����w����=�x}c]o,P�C�aw�o\�f��p�m|�U�6
�=T6x�|?To,����P�oI�
G�����3���w������f�X������X�4�P]�!�(�2�R`q�
�����l����C���;=zc��=T+<�
0���7�����!�0��}�f��=t,�6p���1E`X�CG���i������=tx��Fxo,P�C�a��g~48�PK�n����^)��Cm��p������{�ex���~eo,��C��C�s�w{c��j<�������yS;hF��M�p'2�=�Q��hZ�V���_�I�:
����d���z��J{���Xy]��-\�T*o��7x��h����^���G����������l��M������&��n3o��H�����f�K��7�$��G�R�)��l��?yh<��BK#�����z��v�+-��u3�!�N��b�!����b�CN�<�J�\��:�����^����-���&�F�R"�m���e� l(���-��&O�F�R&�m�\�(.y�3
�
�n;�u����$c�&���K��K�:$�\)���j�CL�|�?
�Vr]��:d!�U*�,��P_~�W��O�����.��r����X�0�$1��e�*KF��$Fx����J�2��0��: b�eJ�8��N*H�;�(Y����uF�0(�T�4m+���aP�\�d���3��A���J�T�mc��F�o�*�<�����.��&�U�m���!��T�Lm���-U6n�]}����t�7PU3#�`���^�������p�����3�&�����6�3�&����@��Y	��4vp��~Fr���?v��g(������~F�2t�V�3R&�)rAV�|m��\���WF�RQ?#qa���^��������~F�2t���i��dvp�U��l��t
;8PV?#�a2�������0� ���J���-��$�3��BI��L��tvvp�M�����t*;8�e=h�~.U&MfJ5�3�L4��O�T�m��ua?#:J��������@��9��Tvp�]�����t;8PU?#Cb���V�4	m����~F������~F��d:�(���61���d����������W*y
����������RR?#�b2������R1�Na��gdVL�s���3,&��"��^��,k-S��d�$ZS�F#�t�,s��kb{�=�XMRpOA�."f���m�����Y�U����Q�1k�^���m"p����El�#�1T�������UY)F�������5Y.F�a��4M����a�����5��.���A,�z�6A�������	��!��XB@
'hb��Fu@������-I@��)�$t�.�������	�X�G�� �t�C,���,O����!�P�T��k��� ��X�zr>A�b��k�H�]���#Z��>Lr��������\z\9�?���J,�
W��^��R�����F#��plT%`��h�Ib�z���]Y1��?&�Yw�Q��m��ToP.\�d��V����R�R��?�=Xg�z���+�,�C��:#���U*y��%�]b�M��d���}7�/�Q������1�Ne���m��H�5vo��fF��$~�R��?�e?#����-�g�L����m�g�L�S���v�3�?&�i��@U�������`%��p�c?�����o�(��g�L�S���������L�����h�~���_�T��m��{b?#�:JI�����t2;8��~F��d:�(����1���T�����lM�`%�����\��Fc��~F��d:;;8��~F��d:�hW?#�c2�&�%���V&�����W*y����������
�E�����tvvp�M�����t*;8��~F��d:������1��na+y�����ca?#���PhQ?#�c2��������L�`*�g�L�A��+�<�C[�sK�g$~CG)����1�NfZ�����L���e�3�?&�9��������{�a
/�����)tJ2�F���)L���	�X��s���=���D�&��� V����E��%��U����@~�:�����n�p�D,���-��&F~���E#�?A��R����#�?Ak�\�X������!���S��?k.=`]� ��X�%���.���#n� �t�C,����O��������Ys�����X>b
=����e�|�5���.V��s���]��G,� �41~:=�����$�� 0���O���X>�z�?A+b����m�����W?�Wci�]$��#�#@}^�D����p%��u(+U	X�7n$1������6�|������ ��o����YD��1�������h[Xg�z�r�J%������H����J�����:#�t\�d��6�����R��?-���lb\%���V������J�M-����t*7��>F��d:����?�e7#�����W*y����g�z�6vp�E�����tvvp�M�����t*;8��~F��d:������1�������z�������
�U�����t�\��r�$�&�3�Q�T���������W*y�����=����
��~F��d:�hU?#�c2��������L�`*�g�L6�&v���h�~.������PR?#�c2��hS?#�c2�������1�N�Y�RU?#�c��^��������~F�7t��3�?&�����6�3�?&����@�����4vp��~F��d3�������������SC�E�����t
;8PV?#�c2�������1A�_�T��m��H����@I�����t2;8��~F��d:�(����1���T�����l���SxA����L�S�94?hLa��O�����#�-��I��$b5Iu�=���X]D�-R�.A��"���������Ys��Ez�m����Y�,b�,��:����]��J1�V���]��r1b
�G��&��kOE������u���b����	��.������O���|�z�?AC�7�z�g�� ��b��)���.���-�����,=������	��!��XB@�'hb�t(z�g�5AI��A,`
=����e�|�5���.V��-�{<���X��[~��_=���L��+t#�_�G�L����-������1��=6n�~� ��F���q���H?���b��H�� ��Oh��X'f�0��9�*"c=I`e��irK�:��$���g���f=��H�7�|��XFXY��D,����G���@dSO�:V2*2�Q����\�FnE�7��a=�{ ��7�"�c=����c���@�XO�:��X�v�,9�������n�"�z���c����@�X������3!�-���u��Xdu�,9�������E�����Z�����V������n	P���[���|n�"�z��1�c���@�X��:r,��Q��a[���Xn�"�z��G�D�E&7�@�X����I�E ��S���glwr,��Q��[�J�E7��c=]��x2�d��M�?�H��H�X��:n�X$p�,9�C��;9��(D��D�c%�"{e����ul�Xo�,9���>oZ��H���*9���1E#�"r��M�o��h9y�(D����A�E�6��c=?{ ��"�c=<���c���@�XO�:fr,2�Q���Y�B�E�6��c=3�x�c����@�X���;�D���y.�Y���g��P�'��
���r����;+)%\+�$�V��lp[X�-Rqe�&V����d����L���mc�m�����6]����0yiD^�y,6��
J#�*�3����i�P��j�u�_Aa��bD���a�7�8�3�Fd�{6xg�#7���"�NM���q�f(����3�n���C��'`�W�8�2�Fd�{�58�����4"{�����=�����|
>��H�P�=��Wg�a&�"J����E�L^�=�y���G8�����v�,��E-��;>�������U����j��H�+��9���Jl��h���H�:���,|
7��Z�c�*��F�L#[�����)Y��;� ]��,�d9����\�R��8���32�A�r���qh{����W*Y ���uF��5�T�LFKb��:�WiQ�c�����Y�M-�msL�S���v�1��1�Nc��jfl�c���^�������
����,�C[�3��A;;8��~��9&����@�����L���U�3��1�������z������
�U��msL�S�����%��5�����J��~��9&� w��J���-�����(���m��t2;8�exh�~�3���T��gl�c2������m����V�0m��%����a4J�gl�c2��hS?c���Tvp�]��msL��d��T�<��D������J%�����\�3��������m��tvvp K����\w�3��Q�����m��t;8PU?c����v��G}h�~>�3r:L
��3��1�Na��gl�c2������m�	:�z���~h�~n����n�(%�3��1�NfZ���6�d:���?�e?��~Fx7*������l���SxA���L�S�94�;hLa�ms�.�e�qmAlO"�'�I��)��E��"bm���u	bm��>�,oT�X����-�n��\� �e�����b��� ��"f���u����ZsY:.U����P���#��	��=�==%����Ez�=�\B��9A������mN���|�z��	�b�Q�Ck.=`K���A,`
=��],��#��`�����|�z��	��!��h��5����$�O=@����$�� 0��ms�.������mN���X>�%��q�w��i�K��������>/T"`��h����:���,�
7��^�c�*��F�L#�����`te�,"���Lf�YF)��3�?&���+�,�C��:#�T*W*Y�����To�qp���h�Xg�z�[�J%��`�$�K���q�,�C[����E�7*�6�0�?&��l�@�����4vo��fF��$~�R��?�e?#����-�g�L����Y����g�z�*;8��~F��d:������1�������z�������
�U�����t�\��r�$�&�3�Q�T���������W*y�����=����
��~F��d:�hU?#�c2��d������~F�7*�����
��������Kb?#��h,������Lgg������L�����g�L��d��T�<��D������J%�����\�3��������1��������1�Ne��m��������J��~F��d3�������������SC�E�����t
;8PV?#�c2�������1A�_�T��m��-����
��~F��d:�hU?#�c2��������L�`��m�����3?L�=���2�NI����0�i4�?A�2w��� �'����$����"bu��Hu�����Xc�[�7�z�g�����M�.[���m�`D����[X4"�t�*+����j1�^wlE�Z�g�e��4����T����KX�� p	=�����b��[���]��G,� �41~�:���\z��� ��X�z�?A�b��k���]���#����	��!��XB@�'hb�t(z�g�5AI��A,`
=����e�|�5���.V��-������e	~z�!������3gn��]������M@c
Y���a#	�����Kc�X�D�!���ww�HA_��*����w�Xg�+.MB�u,��HmYg�+~�B�u,�<V�LV�`K��U&�Uj�s���H-*-�t<�<V�LVhaK���`$}�2������m��oTb'{z7�������@lgO�:�	[&TFb?{z7xc?#�������
���H�Fe ���w�+�I���~��npc?#����������~F��K���~��npf?#�������
.rE.r$��~���LV����]g<|���H�gO���g$}�2���������oTb?{z7�������@�gO��g$}�2����1"&�3��1tb?{z���������~��n��~F�7*��=�\��H�Fe ���w��L3�L-�L����h.*#��=��������@�gO���g$}�2���������oTb?{z7�������@�gO���la?#���@�gO�0d?#���P(��=�\��H�Fe ���w��3��Q����]g<����H�gO���g$}�2���������oTb?{z7�������@�gO��g$}�2���;���L���a-Q������Uf���PQ&������D,7��'�S�I�j������%��E��"�Wkjt{�W���!���;��m"�mR1��ewxc�"�g��(�F���F��#�>TG���gwx���Q�#�������UlD�����Mz�>TG������ ����b����8� �CuD����7����U�C�����Uz�>TG��������:�����F�����xv�7���PQz�gw�
<�+��ID�PR�xX��#J��od���PQz@���1`A�����x�Sw��i������p��H���P��m
W�	a��R�����F#!�plT%`A�h�Ib$���2%��t'����e�,JD��:# �W*Y����uF@8�T�T�(m�����J%�������F�J%�hIl�Xg�*-�{ld2�]<�������t*7��>�F@&�i��@U����L�A�+�<JD[�3�A;8��~�F@&�����6�362�Ne�����d:���D�e?# �����Q"�z������U����L�S�����%��5����J��~�F@&� ��J%�-�yO�gD�CG)�����t2;8��~�F@&�)��@Y����L�s���362� ���J%�-��$�3"@��BI����L����m�gld2��������t��2�j�g4�h4�3"�^��Q"�����~F8t��362���������t*;8��~�F@&�i��@U����L6�[��J%�-��X���15Z����d:�(�����tvp��~�F@&� ��J%�-��%�3"��������d:�hU?c# ��vp��~�F@&�9������l��SxA�5[��A�z�V�t�U��im"�e�qmAlO"�'�I��)��E��"bm���u	bm��>��oT�0����-n��\� �e�d������h�F@A��R����#6
�X��b����(hb����T�0��KX���q�G�0��KX7���l��������.v��#���P�������&Zs�[���bS��(�bY,q
=]���#���P���|�z6
��?�&Zs����X>b
=],��#Z�h���,=���D�&������W?�Wci�z\9�?���J,�
W��^��R�����F#��plT%`��h�Ib�z��5����E����;�(Y����uF�7(�T��m+��ToP�\�d���3R�A���J���mc����o�*�<�����.��&�U��m������T������L��q��c�L��������t���J%������To�������1��������1�Ne������L���U�3�?&�����<��U���W�3��������1�N��R��"���~F�7*����t���J%������'�3���������L'����g�L�S����������@E�������V��m��H�0��Y��!��\6�3�Q������1�Ne������L��,C��yF��Fc?#���J���-��.�g$~CGiQ?#�c2��hS?#�c2�������1�Nc��g�L6�[��J���-���kp���Y��� ����g$~�R)����1���T���������W*y��������H���RR?#�c2�������1�Na��g�L�s���3�?&��"��^��?k-ShDz�U��S�F#�t���:��h�'����$����"bu��Hu�����Xc�[�7�z�g�����M�.[���m�`D����[X4"�t�*+��{X9"�t�&���5,��	�?�==�����Ez?�\B@�'�b�X>��h^��Ez?T,� �41~�:���\z��� ��X�z�?A�b��k���]���#����	��!��XB@�'hb�t(z�g�5AI��A,`
=����e�|�5���.V��-����8&����Uo����u�)��������M@��T�H���:n���,42IXzWq��4YeF�I�����
�#��H�u,��HmY'���*�Xz7x�2��2��:��
�L&��X�P��A`&TZ�xz7x�2��2��:��
�����2#��=�\����2#��=������2#��=�����P����������*3�����;�y�Uf$���w�+�y�Uf$���w��y�Uf$���w������2��gO�g�s��������E�����$��~���LV����]g<���H�gO����]V������
���]V������
.��]V������
>����2#��=�#bb?{��&�~��0����2��~��n��~.�<��~��npe?YRFb?{z7��4CV��d����x�	������
���U�������
���U�������
���*+�H�gO�7�s�Ec$���wcz���Y/Fb?{z�� ����b��~��npa?e�vb?{z7�`?�@��~���3fBe$���w�W�s�ea$���w�3����0��������d1���������d�������
MI_����=������.��L�=�����.#�I���j��$��X]�X[D�-Rq��F������)���&b�� �0����xX��#����;�Qe��Q_���=��MV���)V��n���}Qz�gwxc��Q_�������.=���6�"=��;�qH���MQz�gw�
<,h��Pz�gwxc��Q_������F��Q_������F��Q_�������!=���6E����7� ��G&�xv�7V���)J��od���)J���=,H9�b�������������oo����G��������_���?������o/�C�����J�;�������������}�7?����z��������������<>���G���e�a�����������������?�������|����������n�������>���������^R_�/`���?�o>������~��K�[�{����������/I�~0�����g��.�������i��~{��?���������w/�>����L�e�����~�5��m+��������'U�:������}���^�M�����A���J;��D���~�/~�m��y��>w�-�?���M�W�u��P��������?��5��#�V��Eew�^g�_���������L���w��k�8���'��{�G���k��'�#��D�W���+��wW���+���^E������~�����X�,q�.�S�3���)v�M�u���Z��������k��~��^�C��������r����>�_-��_�>����T�����XnK����]��b1W����]-�������^�u�\�a����y�h�6���s����c�<��+�3�_��d��h���9wL��?��O's�_�����(���|��1U���;~M���5c*���9��|f-r��-�1���������~��h�Wo?���En_��Sx���E�����kK��S�������,2����|�/L��1������<S>������6�5W\-l��Z�'�O��������7R��R~[�}~�;��'��c���W����S��O(��I�~mO�8��\�?����\��7'������;3��i�\���D�<���^��O>�������������W/��~��X���/���z��G�x��jVB�8���t������O�_��/.&_L����zq���bK���$�o�=�������L���k��r��K���t\
>V�/-����8}_�����	Ye�gkgs��������\���e���7|E�5�~=�'_�����d�}1�}���/.v_<>y��7|����o��������3���x*|�N�s����\���x}�|�8��1�� ����h����h���i_L�_���/�(����2�F�s���>>�^-�q��7���(t�����E���ig}1�� ��Z�}q���b�{����������<D{1
u_Lu����������S�+�����~}�����B��OG��tO��{.|�O�_���/������'��X��6��>��u�=��ja��S�W}�y�\��������5�����,����7��d/E.�����t_�����5���~���_�L?���d�9��q6���^�X�X���L��f�'�gv��]]����_����(��g�����w.�u{\�k������^.L�8��#���S�v�^����
g��>��l�(_���Q�6�^���S�_���v����b]����������5�q6���^p�x�{rz���E�T�������?K��s:���~{�#��uG<�=�Sg*|���'�����Rf�8�u>�=�H}�{�I�'���TC�L�����������O��O��Qg_���s*{�������Z]��L��t�.3�+����#N?�>�}���?�~��?�~��=�>�=w�l�?&����G]'A�7�������.�u{\�k�����3{�W����
{��@���q�T��;Qn�ku����=f�W<�~�09�N��oN'�S�+��ku��t_]�G�d/q�\�����m��}s:���^��t��uG\�kw�&��]��W��>��.��q,�����	�T��;f��=.�����K���y��M��oN'�S�6�\���x�{n��^�y?���E��O���	�T��M��#��5G�dOEYp�3�����NR�oO'�S����;�Z]w�������;|�
���u�IB���hs*{AR�T��S"^s�L��>x���<b&}�<�-�������T�G<�=���u�����+���
�O���m�����i�T��G�.�uG\�k���^������yD+�$����T�
G\���x�{n������0jL���`M;&I�����������ku�3�K�W�#��&����]�T��'��w1>>i���gw]���l������|���	[�:���=�;���?NN&�V�Lr�����'�������'K��X���i�\��_�z�0��Za�x�����w�2��L���Ng�s�&W�/����L����2���Dd��N6��'~����Za����|��)_s��V�|��IL���|s�{�8�T�����Ol����/>|�����5�X'q�w�S����B�&_\+����^2�\���������Y�\��������g���G��������$���,����,u�����ES�KLr�0��Za�x�t���3��fPi�4���!�\������ja��������%a�����u��t��OB����������]+��l�{�/.Wf_l������T��Z����#b��L���vG����#�>���;~Nu�3.&_\+����^4��j_�����I�����s�����������^/f�W�b�}���M������S��Z�|q���b�{�E�g��\��0c[&��������������/��Wl�|���Z�m�}>���^~^,L��V�}1��$�|�|���m�df��?��W�S/&_\+L7�������_<Q~����/�Ib����s�{���Za��3����)��{w��5�.n'��4	��?~Nu/�|����ba���3�s�
���3�+~����I�����s���;v.&_<>}��*����s���.Tr��g��?��W���X�|q��_/f���G���L��<l��2�M������%�x&|v�1���0���W'�J\>����Y1W���?�
�X�
endstream
endobj
8
0
obj
15679
endobj
9
0
obj
[
]
endobj
12
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
13
0
R
/Resources
14
0
R
/Annots
16
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
13
0
obj
<<
/Filter
/FlateDecode
/Length
15
0
R
>>
stream
x���_���u��c�<��K���_��q��K�K��Sv���Jf���c�U�������B���(���A�s�k�����~y����������������.�k��_���yy_J��_\6B���5���������_�e[�#���|������������?����?�^�u|���������_���_�}�����o���{x�)�^��V1��~{9��-.����1S�G�����z����}<^}����uY����^�W��>8�2a�}�%�J���_��q�������o��ix��5��	�8���>��c�w����W���J���_��e�)�����$�||��z����n���n��c������W�}&���F��������ox��o�w���_���?.����z��_���?-��������F��o����\W�	e_���������������_���/F�6�������m��C��Z_?�&����?|���_�����x��?z����?���t��n��/�~�������������������w�������^~����������^���}�����t���\��/o��^��*��v���j����_^���������m{�����7���G����#.�����
��i��������.��^�����\e�o%��'����J{���v	��"JdC�\H/W�e8�u�)k��7y�>�/1�z6;*�q��~1XK|�����AE��<���>MJvB�w�o�K��v��
�wx�A�~��������������&[>
��X�2� �W�����#>��dgw��������;�dgT������s^]���.�����A����8�8`|��E;���r������|}������/�l�?}��%�T�},��l)��^_����q[h��2�0�a<(A>�aWx����:~�;���c�}	��pp1]N�%���G����y���<|����JG�w�����v9i��n?�XCN�u��{���c�c��J0�a��u!�>��������������c�E�2����7�emK����s��/�����H9���?):�b�`�����>�H�j���������8������������:}��9F�X�>s�O������&:�����4����{�7�������y��~�O�r8�-�Any<�����1?��#�$�{r8��;;�<!��`A����1���W�2��~x���	��c�L?J{�e<6��8N����,��q�J��7:�>xr1�7W�Hz0o��u��]qm:���pr��i�����T��/��]Xe?������b[���=~�1�+�Xv���MQ1�3?�J�t�\,�u{;���w��h����L����]���v�
?����>���a���Rm��&@5��&��(�q:�-�F�^7���q6�����;�`�a��;�'j����~l�f:���!w~|6u�7L��te�������0N��C,4��f!���`�Q�{�4	����C��8~�����F3��h&��zV�1������@P��}��dO�=-���;�Q�k(.�\ ���l�2�I����pl���=�\x�����h���`���b(��}2���m��@�h��8�r~1h�f;��f(&�u�����F3M9�=�d�N����	H+4i�8O��h������0XpP{�5�q�h���4�����t������x��� ����4���
���p�G������h^�E��(�4Kx���K;*��l�f"��!������H3���2MA#�Hl�34?GGiF	`�)�"�����[����~��f"���	��L���K;,��l��"��.�rm�*MJv���h�Xi�0��~e���$�n4	Q�w�����m�Iv��i�q"h��G����7��@����}="��
?�K�8W������Np}{,b
�L������`������vg�S��r�ORp���>�\��r�C��`�+�O��K;�J�W7:��K{��������.��A��4_�w���8���������5�e������-�tl�|<U�������mtxa��c�]�P�`�{�Ot��L�R0��v���8u�`
t<���l%��Mc&i����'�t8%��L�����x.��>���JG�V:���i�?�}����"�_�����S�/_1X�<�
�����F�����@�����a�=��m�%
_���L���"+�qt���&D��HG��	Q�8R���I�t$m���\,��?t:�8���Gh������-�s��M{��
u�����W�v�LG2a���b�������[u�D�x��f[�Z�Pg�;��j���>�1��kG?�B3,�T�{�\.j{���9W(4�R�=�%�h��kG?�F3-���������Wh4�R�]����v�=��&Z���1]>�K������~��9�B���c���?���c��2�#j��P�4�Q���Kk.�4	��&A1��G1�)���I"3��#M���x\����iB3M�b��b��I��X��=���D���@���L8�}�taG?����������/;�<��f��}}��7�<�h��V�-bp���������=����pp�'��{��y�o��L+M+v�c�4�P\���g�����xhJ�,}�3\�S�����~����V)�|bG?�L���|�>i�,c8�H
�-��3�=��B�2M(v�c�4�P��]���[v�i��������B�wh?C_M�n�u<�J���7�?(V�N��[r���%�F��a?|�Ke7;���@�A�����/����m�I4:f~�E�w���`^i��W���D���������p��=�4c�0�E�����.*4u����\E1-�C��kz�v8�D3hMY�10�U�Y��~T��)��s��uB�=����Jn4=Q,4[�������)��h���TYhZ"�����U��RY�3\��
D:��&'���ys���bYh���b���B��7�,�?;"���@�����j�RL�����K������s�A��n<�@������P����eI4]�����D1�t%����i�u��x���+��{�������KMMv��i4Q,��&����viG@���y�otJ����v�u��� �(�5��@�#v���~hq��i����Gi^�����������J�4%Q\h���l��}����~B;��a��d��U�p�������Ke���7���O0���f�)��������g���Xi��L��=���D�V��(N�tw����fC;�1m4�Q�4G�*}z>�!�c�4+�p�i�"���N�hv��d[i:$��?��V����Gm��������j+��v���4R\���|��}�a���E�)����i��I���b�Y�]�|:[n�]�����YP��������e�
���Xi���iu��p=C�v��ys�i���h�,o�3�<	��ki�4?�����H����>g����dG� �(l,�����,ih���l�v847�V���{��V�����_�����B�������/��������	�����������Lk�c��8<������ �����r�^�d��/���������^�d��/x�����������	���V��������Lk�c�������C������Yyhl�g�zS���f]���g/`������ux
j�jz9�2t����'��������u�s<���^^�>JC���|��{y�L�]�?���_���P�^��a����������r�e���Y�O�r/Oc�	�����>�����}&���k��
,���0����f]���������6t��Z�a�����{9�:t�����|�����)]�e�:,�^|�o/`�C�m����_K����u�f]���/����g$��>]g�y_����2��j��Zy�cS�CynV����60�6�����f��60U���d����A	�>3�e��j��oPK�X���<+O��K�R�K�����80�8��d�
]gK��&��'�w}��{y�Nh�.�:,�Z|N/`
C��d]��J�/n�Li��P���h��*���]�u��,�d/`
m���Z�a����-z9�:t]��uX���Z�^������+>_+����u�Z�a5������:t]����Za�o����
]�V�:�X���^��]��u�o_�{�^���K���f/�5h/`�C��j]�o����0����f]�/b�"o/`J��u9X������#��La������U���I��4t].�u��n�o}zS�.7�:|+��w*{SnC�����;-��E/gZ��+����,��@/`
C��d]�/N�{S���:|)�x�����u�Y��+�����������b]�|}����3-C���a���<�}&�������{y�L(]W�u"����^�T����uR��S����nC����q��1Q/gZ��k�����L/`�C��l]��j�X�0���Z��C
�xn����um��C��\S�����-��9���
��������XO::"������0�!��@b����Hb=�H�����Db=�D�����Lb=!n��-N����z^�aJ��p���Q�	0V����7�Y
07����_]�nT-h1�7rr��az���26�����-����d0�D-��m]�P�+&q"Bk���E�@�����jA�vl89�
0P�+.��=�.����8���jy�$@D�b�Z^����^-��
'lv��1R�+Z\d��[$ ,B�` @"t�J-�����]l��W���K�������������	�	�E�b%�XI,W��U�r#��H�6��M��Fbu#�m�j�������V���\+��Y~��R��EW6<�X
$VU� b%�X�$�"U�(b-�X`�V����������8���%jy� @F�b�Z^1���X��W,�d�&�h�WzT��+9 ��e\��],S�+Z�f��1���Z0����F-�X���M[�������J@�1�U����2��b �#t�J-�����]l��W���u�&���Wzl����9���8A��jyE��l89 r=TqB>BC���=��������ALp $t�D-���	]�P�+&q�ABk���E������jA
m89�.�D�\��	],S�+FqBEB����/�pr@���������&���Wz�h��m% x���*@I�b�Z^1�M�X��W����.�Q�+VqbKBC`��=���F���
7�:C0m�Jb=�����Wz�i��(�L�	Z�i�#��L�#UZ�i���LXUZ�i�3��L�e������dG$��Z�L^G1d��XIL�L�H�g����Z0J�"�$t��Q������$;"����`�pr2I`��W\�0	],Q�+Z�i���$��Z^1�`�X��W,���&���Wz�i���$��Z^q �$t�D-��0	]�P�+&qLBk���E�����X�jA0m89`[�H,!&��`�X��W�����L@b�j�,@�I�b��b �$�?#��-/8�6|t�e��XHLp-"+��Jb�R�`�"���Fb�Q������O�|�1��8��Fo�n��>+�Qh�(����}��	�;CJ�bi�j���X
$f��K�jA�Bmx$�I�E�,Q�Z"�6z���^-�Q�
�d�&0����PBKd� ^BJ�b�����K�B	]��yK�F����Wz��+9 ��d�\��B	],S�+Fq�PB������pr@��d����D��&���Wzj��i% ����*@J�b�Z^1���X��W��D��.�Q�+Vq�PBC���=
��@����b�A�(���
��b 
%t�F-�hQ�
'�F@���=
�������}BLp 
%t�D-���B	]�P�+&q�PBk���E�(����}�jA�Bm89�.�d�\��B	],S�+Fq�PB����Y�(���6jyE�Bm89�n�d��Z��PNh+9�'�Wq�PB����Q�(���*��b 
%t��Z^������^-�Qh���,
%�h��-
��+��t�#��^-�Q�
��M`$&hQ�
�$��M`�T-hQ�
O$��M`MT-hQ�
�$��M���Z��P^H����}�jA�Bmx��nc%1A�Bmx#��ns�j�(M�(����F���bx# �����Wzj��H7��Z^q 
%t�D-���B	]�P�+Zj��H7��Z^������^-�Q�
' �jy�E�(�����b 
%t�B-����B	]�Q�+q�PBC���=
����m% ����*@J�b�Z^1���X��W�(����J@��j�*@J1�>�j�!
���,��Bb�k�XI,V���c��H,7���s���X�Hl��Z��,�$41$��ZqYD,�$VK+U�U�R �H��LA�J$1;���"UZ�i�����X�jA0m���$�����`�X��W���.V���8&��5jy�"@�IhbH,{������J@b	1�U����2��b �$t�J-���0	]l��W�����F@b��=��������XBLp �$t�L-��0	]�R�+fqLB����8&��!����`bx �@@b	1� @�I�b�Z^1�`�X��W,���&���Wz�i��e! ����"@�I�b�Z^1�`�X��WL���.����8&��!����`�pr@]�H,!&��`�X��W����.V���8&��m���U�����X�jA0m89���$�\�0	],S�+FqLB����Y����6jy�*@�IhbH,{����oLJeX�	���uX1����]�H^���J]���-�HVz�0(yn��������qT���s���K�_i��e�~�;��*���������w$/U,��e�;�~�;��p��CP��������mT����������������=�<��m�q�'w����3{���p�s{I&J��d�s{1&J��X�s{&J��L�s{���<���H������^���=�id�0�8�K�*�=�Qd�4�8rK�*�=�9d�2�8BK�*��`�6�8K�
��V�rg�������c�{��9�=����c�{��9�=����c�{����=����c�{��y{%J����/D\��|�������������J�P���;n<l�����+�*��������Q�6*U��F��3�i1"�$����C,�9��RZ�T1�J)�R	�R	T�G�Y��Q�E*U����;�/��d���G������
Q�8v�������
Q�8v�������HQ�8v�'������Q�8���;�Ol�d���/{���q�q�(U{����y�q��(U{�S��u�qD�(U{�#������Q�8���};�O�d�{����q�q$�(U{����y�q��(U{�c��u�qd�(U{�3�����Q�8��;����d����e=����G�R���=��\�G�R���=����G�R���=��Kk$+=�����uc�#�C�����uNc�#�C������u.c�#�C�����unc�#�C���������64��p�;������T�~���w�����P�8���w����H�P�8��'w������Tq�q��v��F�J8��gv�����P�8��v����H�P�8���u������P�8��Gu�������Tq�q��z����J8��f3�fw�d����L3�����$�����z���~6<�bH��1���E6<�X��9R���6<�X���5Q���6<�X���[�jA�mx!���uDv��=��uC����-	����z����-�����X7���,Y$41�x�Z�#AN@�����8K	],Q�+q�,�X��WL�,Y$t�F-�X�X�Hhb��z��'�6�����q�,�X��W�,Y$t�B-���X�H�b�Z^���d������jAm89`[�� &���d���2��b`�"��Ujy�,��EB����8K	!f��^-8��6|t����XHLp-"+��Jb�R�`�"���Fb�Q�`n"V7��mUVv�-Y$41���ZqYD,�$VK+U�U�R �H��LA�J$�I�E�,Q�Z"�6:���^-�!�
`�#0�-�������Q-�X�H�b�Z^1��d�����b`�"��!h����Yb�J�+9Y#�Wq�,�X��W��,Y$t�J-���X�H�b��b`�"��!w���a�pr@�����Z^�RLNH�����Q�%��.V���8K	]l��W��,Y$41���Z�M���H"!&�X�H�b�Z^1��d�����b`�"��!�����n�pr2K`��W\�X�H�b�Z^�2NN(��l��I�%��.����8K	M	e�������B@H	1�E�%��.����8K	]�R�+fq�,��F-�X�X�Hhb,{��g�6��Vr2K�	��,Y$t�L-�h	�
'�L@r�j�,��EB����8K	M�e��(����-�$�h��-���+��L�#�^-��
�2I`$&h�
�$�3I`�T-h�
O$�3I`MT-h�
�$�3I���Z�L^H�g��X�jA0mx��Ic%1A0mx#��Is�j�(M�����F��`bx# �����Wz�i���$��Z^q �$t�D-��0	]�P�+&qLBk���E�����X�jA0m89�$0P�+Z�i���$��Z^1�`�X��WL���.����8&��!����`�pr����XBLp �$t�L-��0	]�R�+fqLB����8&!�,��������L�	Z�i�+��Jb�R�`�"���Fb�Q�`n"V7��mUVv���&���W+.������Jbi�j���X
$���@��)�X�$V"��H��%�XK$�FXb��=����,�r��"@�I�b�Z^�LN�����I������b �$41$��Z�L_�q% ����*@�I�b�Z^1�`�X��W����.�Q�+VqLBCb��=��������XBLp �$t�L-�h�
'�L@b�j�,@�I�b��b �$41$��Z�L���H,!&�0	]�P�+&qLBk���E�����X�jA0m89�,�$�\�0	],Q�+qLB+���`�pr@)�$��,���&���Wz�i��u! ����"@�I�b�Z^1�`�X��W����.�Q�+VqLBCb��=��������XBLp �$t�L-��0	]�R�+Z�i�����X�Z��`��^-�f�p��k����&v����iD�w��^�����}�&���Q�Ll�w��^�I�Ll�w��^��H�Ll�w��^��I�Ll�w��^�XH���ObZ��(�&6�;aB�Vl$�i�<6�W+n$f&6Tr�NT6r��}��&���<���@@��jEr������;Q�H�
9y'��`bC# �D�"9���iZ��`bC  �D�"9�LlH����V$x��
������0����w�Zp#x��7��mB�> 9�Ll�����V$x��
������0����w�Z��&6l����V$x��o�G�	Q}��C��
��X,T�XI,V���r�j�Fb��Xm$VU+n$V��87�Upl�!s����XZ�Z1�X
"V��@����J�I�E�VL$��i��nB�>���C��
��%��i=s��DM�������9bC��ED�jEjZ���Q�"�D�"5�g�}��&�j�u<m�#6Dr"JT+�<s��L@D�jEr�g��P��(Q�H��6r"JT+�<s���7�U���#6Dr"JT+�<s��L@D�jEr�g��P��(Q�H��6r"JT+�<s��8�U+r�g�����(Q�H��
9%���9bC# �D�"9�3����Z���9bC  �D�"9�3GlH�D��V$x��
����������Q�Z���c��G�	������!�Q�Z0�<s��L@D�jEr�g��P��(Q�H��6r"JT+�<s���8�U���#6Dr"JT+�<s��L@D�jEr�g��P��(Q�H��6r"JT+�4s��	��������b+0	?n�:C0m�Jb=�����Wz�i��(�L�	Z�i�#��L�#UZ�i���LXUZ�i�3��L�e������dGd��Z�L^G1d��XIL�L�H�g����Z�L��X�$�u�j�,�
LBC���=����d��@-���������b`&��jy�$�
LBk���E���&���Wz�i���$��Z^q`&��%jy� �
LB+���`�pr2I`��W,���$41d��Z�LN�Vr2G�	����$t�L-��X�I�b�Z^1�����6jy�*�
LB�Y��W�
`�$0\���Jb��X�T-���Fbv���6����o$V7�6���[�Ihb0{����XXI,�$�V����@b)�X	T-����Hb%�X�T-X���Dbmt���Z��P>:�N` (.���$t�D-��X�I�b�Z^1����������6�9f��4�Wr@\�0!&������2��b`&��Ujy�,�
LB����8+0	Mf��4����J@�	1�U���.����8+0	]�R�+fqV`��F-�hi�
'����Wz����9&��8+0	]�P�+&qV`�X��W,���$41��Z��PN(9&�qV`�X��W���$t�B-���X�I�b�Z^������`�jAOCm89�.��\�X�I�b�Z^1�����*��b`&��m���U���&��Wzj��m% ����*�
LB����Q���.V���8+0	]l��W����$41��Z������`~4��m�`����z&��e�����Q�$0���G��$0G����'��$�&����g��$p�T-h�
/$�3��H,{���6��b�$������6��X�$��Q�`��E�I�bu�jA01���IvDb��=����d��@-���`�X��W���.V���8&��5jy�"@�IhbH,{���6��L��qLBK���A����
��b �$t�F-�h&�o�����X�jA0m89`[�H,!&��`�X��W����.V���8&��m���U��b�X���C�i�GX&	����"b��X�$�+U�*b��Xn$VU�&bu#1;���mT-hf�����X�j�e���XXI,�T-VK��R ��Z0+��J$��Z�Dk����K,{���6|t�e��@P\�0	],Q�+qLB+���I������b �$41$��Z�L_�q% ����*@�I�b�Z^1�`�X��W����.�Q�+VqLBCb��=��������XBLp �$t�L-��0	]�R�+fqLB����8&��!����`bx �@@b	1� @�I�b�Z^1�`�X��W,���&���Wz�i��e! ����"@�I�b�Z^1�`�X��WL���.����8&��!����`�pr2I`��W\�0	],S�+FqLB����Y����6jy�*@�IhbH,{���6��VrK�	����.����8&��Ujy�,@�I�b��b �$41$��Z���/��#��;`�*�:���;aB�V\I�����Z��(�&6�;aB�V�$f&6�;aB�VL$f&6�;aB�V�$f&6�;aB�V,$ff��G�	���u���0�W+6���x����7�*9����9�����Z��`bC T�>"9�LlH��Jw�G$x��
�P�N���0���*�	��f��G�	����0�!��	��&6$r@�;�#�<���Bht'|Dr����������<���9�U��&6Dr�Fw�G$x��
������`bC%lt'|Dr�����6�>"9��}�=BNh���Ll����N����,���\I����H,7����N���Uv�=BNh��v��!�$�7�$����@b|�z�Hb%�X�$�7�L$��i�rB�>���C��
��6����i=s��DM�������9bC��
|�z@jZ���Q��y= 5�g�}!'�j�u<m�#6Dr@����<s��L�|�z@r�g��P��o^H��6r@����<s��9�U���#6Dr@����<s��LH|�z@r�g��P��o^H��6r@����<s��9�U+r�g����QnS$x��
���6Er�g����QnS$x��7�rB�> 9�3Gl��(�)�<s��D��r�"9�3Gl(��(�)�<s��F��r�"9�3����Z���9bC xD��0�<s��L��r�"9�3Gl���(�)�<s�����6Er�g�}!'���<s��H��r�"9�3Gl���(�)�<s��J��r�"9�3Gl��QnS$h�h��Z����o_�zm��x]^y���^os��z��Z^s�p���q���^�0�a��
�?u����y�a�e�w���o�N~����������_������z�������?���[~��,�"xyy����>����y�����|�G�~���~�n�\��B������|�����qU>]�\n&~�Z���S��w��^��C��2�����;�����A��/���&}��������'{_�,\/'����*w����8Yy��Pg}���}1����)�l_����?v��b&��"��G�|qG���/O����}���/�z�/f�W�=�qC_�+<������b���)����w_����LX&}����������rG���?W�����LD����w������ok���?����t�������{�G�~V����(}B�l��G�������g\S���
�5e�{�5e�}�\����/s��S�3�)'{_�,l}1�}w;=�S��.?���"�Y_<v��b�{����}q����
_����6��kk�����k��N������_T�o��~�^��&�q�$�>�$3����1��I���\a?y�u����?�|F_\x��]`�����rQ9Wx��{��M��I�T������}1�}w�+O��m�}�|:�=#�:Yx��s��|1�}�����O���N��o�B��_=~�j}q����]��&��S����&�S�SnNj�Di�>�Nu���8Wx��{�����N��I������jl�<M��NE��gL6N��\a?y�t�:y���9y�I�������3���8����C_�~4	���QXO_?q��&���^�y�I�2	��}>���q�8Y���dao���Op����gV�M&)���g�S�3�����&�'��f�{�f���)}�&����g�S�w�}q����
1�T���8_���)���L��o��E���N�m9Yx��s��|1�=!���|���M��o��E���\G���\��|1S>�|1�=�|�-��O��S�3&�'{_�,<������u=w�O�9��4X{:�����
}q��]G��WW?�5�]�3�i��}�|,:�=#�8Yx��s��/f������������wB���
���b���	_��,<�����3�����?���m�}�|:�=�|q����
{_�t��	=>�H���z��e�.1|6	���������n�K��TX?�����>q���;����e�r���2q����\t�{���la;��-���\����|��/�-[�E�O��D��E>wu�>Mq��x���OOMO;�������T����d��#N����D��/O�����v>,[�	?��S���q��x���'t�T��I���������?��������c��]�BuY�\�������T����=�h�X����]z����<�l�N@����E�w�~�~��X��&hS�3�(�����\���3~�[���S!�����M���'�3=Yw��Sum
�DWoH�8a����wJs�v~�����s�(������o��'��p�O����D������D������N�f�g�c��N����b"{J�qO��~a9����p�D���������|��'�s��OB�3�s��J?����i=���=O�D��p��}r��]������>�u��9��OI�~(����Dl&z�u�\��N��~����������'���$j{�&����~8Uw��Su�y���=#;WxHH�r��=�(p*�����t��%=W�^p�zKz��[�nH��n��>/�]�}�cO��3�����������,2�i�L��[���;m����k;������j�i�=�l�dOX�s��p�8U�&�O���������X���������)�Su��8Uw<GL��{"�j?���m��=hW���������������~�wn�~v��]����e��=g�d��z�����{��=�v��=%��Is�mH�����5~3�/���<'�q��p��	��M����x���g���Q�L��s���CG���������	1���sD��mO��3�3����}�#N}��9b"����9�?�/��M�,�{:����o��;t��G�9p��~�_=?��	yN.��c���q�L��6��zG��k1�=���L��=�#�,{�������su��8Uw�j��O�Y�d�=������5��g�3�w'<�v�������������G�����Q����g�3�'Vo{G��;t��'���dOY^uO��4;o���>�<�=eq�����zGLd�]Z���U1���	�&%��}}�|f9�=cqO��s�=��~��T�zr�7�L�����_xJ:�__>�Y�d���<Ww��;�O^5f���k������F)�����3����/��:�����/�^c&|���L����8G�c������L��?X9t���CG�������	�gQ�Y��tf9�=cq��w�=�'�>g��-�]����?�j8F__=�Y�d����=Yw��;�O�9>��1�=i}DM�����3����w��t�Y�3�s�����b"}��=�����9�����MN�k9f`_=]�d��%��N����G��~���7&o�����������3�3�!?Wwh�Su��1�=��t.�����;�-�����1g�g�6��������`3�S�?�	��a�=��'����8Uw��Su�#&���#�	�0�ly����1�=c����CG��}�#&��|�5������@���s�����su��8U���G�����M��7g|��c:�����L��	��su��8U�OS��:[x��m=�c_=j�d�XRs��w�L���/!��{�%d.L���.������
endstream
endobj
15
0
obj
15976
endobj
16
0
obj
[
]
endobj
18
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
19
0
R
/Resources
20
0
R
/Annots
22
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
19
0
obj
<<
/Filter
/FlateDecode
/Length
21
0
R
>>
stream
x���_�,�u���1O6�K�� =�*+�V>Z�(��,����z0,PaW�d�����8'#*g�r������������]���/���r���{����??���K����_��������q��m������>�-l/[�C}��������������4x���}������o�����6������<�=��/�P��������x�G�����m��!��!f*�(����_�9<��������pT�G%^�0^��q�����B�x��x5�Y&�����?�����/�QM �,��}�����M	Y�����J��a���,SM����d?�	~xi�z���}�{��n����j�iM���}F:�Y�����#i~����8t��o^~�������������
���o�6���p�����X�p�������'T������t���������?��?�����n�O��w����|��l[{�t4���{����������g���^���o��=~qk������������n��W�R�O���G���������|�zz�o�����x���_���{���������_����]��I����/o���������0�������G{���z&���g&�)�Wv�y`��;���W-~l-��_������e�'���o8}����~�ShN��'�
}�Dz��}z���TS�x���6��nvRq��s�q�L/m�B2���@�I�N�����q������8��%-����.�(�z��_W�A�4�4�~ T�@��>�^C�s�_��u�qo�����`�Y��`'����}��c�=������r���m�z��p����4��N����G�CJ���:M�nt����;�}�����4��'�(i��D?�������Vn[�U����i*�c���R�[}">v������<��G�R��]`�����������m�]
!M�����{{�i��9�>���'&?F��m��6��3MM0�y��!�4���4GS�}`�`x����1��b�	�B3����'x����=�N����;��O4�����C�e��4��ir9��j���L�3����M�1�6�n����ivc,�_=��!�O-4������|�xw������m�<��G�@���]`� �q�M���qS�4������>�J�?B;�J!7��<�v?]���>�-�y:�tb����������N�����3���W%��0y�O�i>q���@�|����w�]�iv%�t�}}��-1w�^�4���|���mT�4��iBm��������+���y:-�tZ���H�/�h�1���n?�%n���(��w���h�=��y���iZ��[��FS�����61x�6�t4�4���;-:��1XPv��L;hZt�3L��P�h�a��f�����i�	`�%���+�����h��?b��b������GJ�^M�K������C���E��-Cb�eHl��P���Z-b_6Z�@���r���(-F�YuZ}(�r��������d��E�1X��"d���);-A������|�<{k��V%��6Z��?�D�6Z����%)�BD������F������M��*)��Dq���,�S�E��>�J��t^���q��M�)���D1�"��wg_���>���$�e^C�w�R�K���cA��B��wZ�(N���B�i�r�M/Z�b�[g�GC�s�i���9�
Ep��bn'[�@K�}n��&���`D�P�'��Qr�E�b�E�g���H��}r��%��V)XV���tb���
T��V&������iir�O��ZD1�J���k�8����ii
`���b>E#o��s���>��� �5���4(��\hY������T.�wZ�h�)����y;BZ�@c �0�;�ojZ$��>�h1r�O.��C1����l���"�FZ|(������g�#�D�	fZz(�����o�������7��&Ek��i��8�rm��i�q�O��rC1�+��q��3��I�f�i	`�%�"�o���y"+�� ���tZt(�������GL���tZs(�����c��9�fW7Zsb�1��X������������M�!u�U� ����s������n�9�g�h�������`|?���C��Gj��"�pZ����~�k~���t9���8~M�K]L�r�'��s�D��V<����{�����H��Zh���~j�S�~��4Z�(��V?�w;FZ�@�h��X������v��9���i����)�{��49�~�m��� ��(�e��UI�+��@���m�u��>�D���5���/;tZ��D��i_t��/%������ ��
-:�A������}�SN)$�g3�H+��P���9W�����@��N����'6'��F�����Zb�����<��@K������=�z�@�U��b�H���w���B��=��_�����X�������`�� �#-�L+�H����D�_�gs����i������l�tn�3���J'c�L��������:=��N��fD'����X1���4��vZ}����{�����	Z���z���mZ�t
�N�g���m�4����mn=��Y����NH�SS;XZ@b v0��~�����	�#����n;DZ�h�m���ys&��	�L2��ke�#��X��&CK��im�8�o������l*-��<�Fb�=�����WZ(.��V��+�R@�;-+o�6g�KKh;E��C���O��Z�wZ��)���KA|ZA����������c� ��3>F������>�in�dqz�0u;�@3I�f"�����.Mo��$m4������S3I�$m4����-2�X�^Mw��!F�O�4��i���Kr;�H�)���2M@�����r��H���D���& �^�;tZ^���4��h�-�{�9	��7F���&�i�}^[��j���"#����l�r�����������������[�|�����d����yS�����Wv��`��>�\b;�IU�c���'�v���[y�}�F�j�f#X(���Qo*;�<�|n�1�'cE��
�=������b�=~�iz�Iv:;�HggA^|���g��GL���9F:?�{\�]�tF����xH�#'������D��>��c���"����������q.������<�������������P��~���h�6Z���[u�����[!���~s�D���$����������@��Nk����}���]�G�-[�N�E��_���>=�a�M��m�)�:E������q����D��h�"8��'��[1-W��EZ�(�s�3=�]�lh�����0�������?���.4�Xh���-����9��c��T�v��V������2-��yUZ)�W�
;*Z�Xi!�8�������X�����`��=}l���/��:��PSy��|<�9=�7
��6����w{�����
���}L��#�<�(g
i*����z��L1O��X�x".��U���\��Z�|<r�i�Q�T�T�7+Oxz�(`�����;��<U��sF9S�����<v+�}.`�}*/��K�������Yy���osS����������Q��a��ux�$�S��i�\w<����<���3�4��x��Gy���gBer��p����(��������>����7�L��1�\�����o=����u)��p+z�{�GS�\���w|�]x0��ui7��n����Li�\���7,��u�3��u9��pgp�LGS�\�������s0��u���p�k��&GS�\�wsn#
~_�Q����u���?���<�>
��J4���������8��dsn:~��(`���J3��.������6��tsn�~��Q�T������p�Z��F9�6��Eb/��2�L(M���������>*��j3�����7���6��vs�
~'�Q�T������p[N��<F9�6��%s��	~��(`J��Z1��N���H��2����:�<�>��������`��M�?��Lar��u�"�'���)N����w�tz0��u{5��3����:�n��u�|<�'�G��O�;>y��_�q��P�\������,q0��u=����j�O�FS�\����f�(l0��u����ya�����u�d��?�u�a\�}F9��M�)Zy�oI�g,��)���$+/��[��J��[������������+�p���GS���������(Ou.g��T����f���L�M�e���[y����O��[y�V��\���u#���__15�R�\��.�W_Z�7
���:|Q��<���3�<��D5%�S�4
��������M�Q���u)���M��(g
��R4�!b�r�Q�'��l�Cz�HAf�	�=��C�w�"��.�hA��0���*}U���"6|#��{���-$����F
r�E$G�����4�Y&���-@����FB���-N����F^���-\����Fz�+UZ�b���,e ��Q-���
�g1$+������06��X�$�;U�.b%�X	$�U� bm#���X��Z�I�S �����p��3�D�W����X!�+&��;�.����E:a��u��b�@�Chb}F���@6�:)0��7��B�.V���I:!���dy�*������jA�l8u@��� &�'�X&�+F��K�.V���Y:Q���dy�*�����9�jA��l8u@	�� &�J�X&�+F�DT�.V���Y:���u��b�@|Ehb�F��Y6�:�n��� &�I �"t�B�WL��]����tb/B�dy�&�����jA��l8u@���ALp�@@F�b�,�����X#�+��g�&��lTz�f����#Y^1H X#t�L�W����]����tB7B����U:��!|����p����AL0H �#t�L�W���]����t�;B����U:A!�,�;��H���`�0m$&h�
�$�"��H��)�XI$V��D��%�X�$�2��L��-�X/$��� pTz0h�����*�	nU�R#��H�4���p�������x��*;���e��I�u�����O�X��ys� ������25����6�z)f�%�����K2	]l��Q��K�5	M�������S/�@��xb�Az	�'��ej�(�����*5��E���!!
%�?���s��$E�B1|D��.VUZj�7�&p��Z��PIl��Z�yTNQ�
O������HL��P�Il�����Z��P^Hl���Z�Z��P^Il����R��E�6���H7"������}C�	�;�	Zj�;��Nb�S�`�"V��@b-P�`	"�6k�����&b=�X�@�9�=
���H7��,��I 
%t�B�WL��B	]����t�PB�dy�&�(����}�jA�Bm8u�M`"�+n��B	]����t�PB����U:Q(��!�����p����H�W�(��S�H����Q:Q(��U��b�@J�b;Y^�J 
%41d��Z��PNPu�O�	�D��.����Q:Q(��U��b�@J�b�,�������Q-�Q�
���.`"�+Zj��j�@��j�$�(���Y^�H 
%t�N�Wl��B	M����(��S��:�'�7�D��.V���I:Q(��5��b�@Jhb�>G��G�6�:�&0���t�PB�dyE�Bm8u����}�Z0K 
%t��,�X�����Q-�Q�
���:�'��t�PB�dy�(�(���*Y^1K 
%t��,�X��B����Zp�Bm���n�Fb��&b)����X"UZj���Db-Q�`I"�2��Lb=S�`�"����,�������,��Jb�[��H,5+��S���X�I��T-Xvk��Z'���Z�qX�Ihb����	�tLB�dy�(����*Y^�LN+uKTV���&��rTz�i��R�@b	1� ����2Y^1J �$t�J�W�s�Uv���7��X����h&�����j�jA0m�Fb#��UZ�i�#��L�@K,�j�)���i�L�	Z�i�3��L�3UZ�i���LXUZ�i�+��L�W����7��@$��Z�L��b�$�q'1A0mx'��I,w��]�J �H��,A��Fbm#��Q�`�D�G��H,G���6�:�$0��-�����$��,���`�X#�+���.����M:&��!���`�p�d��D�W��`�X!�+&���.����tLBCb9�=�����$��,��`�X&�+Z�i��r�@b�j�,����v��b�@�IhbH,G���6�:��$��0	],���tLB�dy�,����:Y^�I �$41$��Z�LNP7�$���`�X!�+Z�i��j�@b�j�"����:Y^�I �$41$��Z�LN�6�$���`�X!�+&���.����E:&��!���`�p��=P ���`�@�I�b�,��`�X%�+Z�i���J����U:&��!���`�p����XBL0H �$t�L�W��0	]����tLB����U:&!�,�<�����`�$0m$&�m"�"��Hb%R�`�"V�����-Q���6<�X�$�3U�,b��X�;��Q-��
�;�2I`�$&�UK��R#���Z05+;�����N��e��I�u���w���&��rT+���.����Q:&��U��b�@�I�b;Y^�LNw�$��Z�LN�uK�	���.����Q:&��U�����{�c������V�8��<����U�L^*8��1�����x&/U�f%�-�����T1�JZ�����L(=cr�)�<�|g�R��_<�<.{g�R���_<�<�yg�R��{`<�<.xg�R��+a<�<xW�3Y�	���78��R��Tq���'�>+�N��%�J%�R�RT���J�L����7*U��Rg��m�82�Qz����IN��`�Tq������q��(U�=�i��6{�%Jg�{9��Gn�R����C��d?���p�����q$�(U�=�	��2{q%J�oY������qd�(U�=�����#�3Y�	g�{�88�GJ�R����:���Q�Tq��G����q��(U�=�y��}�8�I�*����`���������=ig�#�D���
����$Q�8{�3��u�8I�
�w�z�8��G�R����.�?l;���p��G����q��(U�=����2{!$Jg�{�8��G�R����(���?�Tq�����o��d�'�=�Y��4{�#J���8��G��R����"n��9�T��A�#���W$g�����pp�=������=<�g�#iD���qO���;���3���p�>{#Jg�{fx0���LVz�������.�Tq�������qD�(U\[��:{�"Jg�{N8x�=�P���}�>��V�L�gGN8y|J�mVJ�*�Y)EV*qV*�J��T+�4+�D��yVj��z��z�R�2+u������������Hpp��R�T��f%}���Y�4*U\7���g����q�1����qv&�>�*����np�������3=�\gg"�C���L����3��Tqv�v����d�'���i��8;�JggzT78��D��R�������G"/U�����^b�nY$��0�
-���q�"���@��������F��7�����G������S�g��$f�0&I��-��.�3UZh���dXUZh�+��p�W��$��7��@$x�Z��@��b���q'1���X�$;��N����X	$V��@��%�X�H�m$�7�l���Hb�:����l��S �&���&�[	]����tnY$t�F�W����S �v��b��-��&�|oTzTh��Y^q��-��.V���I:�,��N�W���e������jA�
m8u@��� &�p�"��e��b��-��.V���Y:�,��N�W���S��:������S�@��b�A:�,�X&�+F���H�b�,���p�"��u��b��-��&�$pTz�h���F�0b��tnY$t�B�WL��e���Y^�H��EB�dyEm8u@��G��g�6�:�m��!&�I��EB+dy�$�[	]����tnY$41���Z��FN������e���2Y^1J��EB�dy�,�[	]l'�+V���Hhb�G����6�:������e���2Y^1J��EB�dy�,�[	]l'�+V���H1��j�)���sX�L�	n���Hb)�X�T-����Db%�XKT-X���Lb-�X�T-����Bb�.�@$��Z��I>w�E��TILp�"���Fb�Q�`j"Vv+;�����.b��X�$�;U6��e���U�j� �[	],���tnY$t�J�W���e���v��b��-��&��rTzj���k#Y^1H��EB�dy�(�[	]���-
��S���?&`Y��>LB���-�����L�oT-h�
�$62�-�<�����I�2I`L$&h�
�$62I`�T-h�
/$62I`-T-h�
�$62I�^�Z�L�Hld��X�jA0m�>�!����-�����b'���Z0v+��J ��Z�k�����F��m�I�S ���`�p�d��D�W��`�X!�+&���.����E:&��u����6�:��@$��Z�LN�L�����tLB+dy�$����v��b�@�IhbH,G���6�: �$��0	],���tLB�dy�,����v��b�@�IhbH,G���6�:��$��0	],���tLB�dy�,����:Y^�I �$41$��Z�LNP7�$���`�X!�+&���.����E:&��u��b�@�IhbH,G���6�:�m�H,!&�I �$t�B�WL�0	]����tLBCb9�=����{�@b	1� ����2Y^1J �$t�J�W��0	]l'�+V���&��rTz�i���I#Y^1H �$t�L�W��0	]����tLB����U:&!�,�<�����`�$0m$&�m"�"��Hb%R�`�"V��Db-Q�`I"�2��Lb=S�`�"����,���`���,��Jb�`��Fb��XiT-�������Nbm�j���X�$�:��N���;�LBCb9��tLB�dy�(����*Y^1K �$t��,�X�`��Q-��
�@&	�dy� ����2Y^�LN�2uKTZ������	xi�3�f���LlW��^-��Y��
�J���7���0�W+F���``���i�LlW��^��I�LlW��^�XH�LlW��^�XI�LlW��^��Hlg�����V}�}��Nbq�j�Nb��X�$�;U�@b%�X$�U+n$�6�����#�u�<�Mh�'��u�NT+Rx��
�:y'��<���F�����`bC�@��jE�0�<�Mh�'��u�NT+Rx��
�:y'�+u����S �D�"u��c��&��Rx��
�:y'��<���L�����`bC�@��jE�0�a�@��jE�0�<�Mh�'��"u�NT+Rx��
�:y'��<���J�����:�Ll���;Q�H������	����`bC�@��jE�0��P �D�"u������w�Z�:�Ll���;Q�H������	����`bC�@��jE�0��P �D�"u������w�Zp��sl�#��V}B�0�!R �D�"u������w�Z�:�Ll���;Q�H�&6���;Q�H����'�	����`bC�@��jE�0�!S �D�"u���P��w�Z�:�Ll���w�Z�Sx�yl��	Q}����Fbi�j�Hb)�X�$V"U+&+I�Z"���Z1�����3��L����:w�=Nh�'�;`
0�!UK����&b��XiT���X�E�w���c�M;e�����(Q�H���2�%����9bC%�"�D�"��3Gl����(Q�H���ql�s��V}B2�g�����(Q�H���2�%����9���^�H��G��G�cw`�`��m�`b�����j�jA0m�Fb#��UZ�i�#��L�@��j�)���i�L�	Z�i�3��L�3UZ�i���LXUZ�i�+��L�W����7��@d��Z�L��b�$�q'1A0mx'��I,w��]�J �H��,A��Fbm#��Q�`�D�G���G���6�:�$0��7���I�b�,���p&��5��b����.����M:w`�2�Q-��
�@&	LdyE0m8u@J��Q-��p&���dy�*�;0	M������S�@��b�A:w`�X&�+F���I�b�,���p&���dy�*�;0	M������S �F��b����.����`�p�����9�Z0K�LB�dy�&�;0	M������S��:�#�7���I�b�,���p&��5��b����.����M:w`�2�Q-��
�hu2G�	n�����
Y^�LN�
u2GT���Ihb�G���6�:`��!&�p&��e��b����.V���Y:w`��N�W�������9�jA0m8u@��!&�p&��e��b����.V���`�p��^��9�Z�J�LB�Y�xTN�
�;�2I`�HLp�D,EK��J�j�E�$+��Z�j��D�ek��z�j��E��sX�8�=���sX&	L���*b��Xj$VU�&be'1{�?��T-h�
�$�:��N���;���$41��Z1H�LB�dy�(�;0	]����t��$t��,�X�p&��!������p���`BL0H�LB�dy�(�;0	]���-
���80	0L�}�`b�0	]�����o$62I��Q���6<���$�����L�&1�$�1����6<���$�9S���6����$��P���6����$�{�jA0mx#��IDb9�=����,�Lw���Nb��X�T-h&��@b%�XT-X������Fb}�j���X�$���X�jA0m8u2I`"�+n�0	]����tLBkdy�"����:Y^�I �$41$��Z�LN�L�����tLB+dyE01�R�J����U:&��!���`�p����XBL0H �$t�L�W��0	]����tLB����U:&��!���`�p����XBL0H �$t�L�W��0	]���-���FPuKT6���&��rTz�i���F��b��tLB+dy�$����Y^�H �$t�N�Wl�0	M������S��:�%�7���.V���I:&��5�����S��:������S��:�%��tLB�dy�(����*Y^1K �$t��,�X�`��Q-��
���:�%��tLB�dy�(����*Y^1K �$t��,�h&�w���������L>w�e��������X�$�"��H��)�XI$V��D��%�X�$�2��L��-�X/$����rTz�i���L�*�	nU�R#��H�4�LM��Nbe'��S�`�E�u�w�{�jA0�p��&��rT+���.����Q:&��U��b�@�I�b;Y^�J �$41$��Z�LN�uK�	���.����Q:&��U�����qE`��B���Kmp�q%L���9����0��	�Zq#10�a\	z�b$10�
�9���N�&�)���q%L�����,���q%L�����,���q%L�����,���q%L�����v6�=BNh�'�g10�!�$�W�'�$���Nb|%�X�� b-�_	�p#���X�H���OI�K�rB�>!u�����"_	��:�Ll(����OH�&64���W�'��:u@�+�Rx�96�rB�>!u�����_	��:�Ll(����+u����S$�>!u��c!'��Rx��
�: ���	�<���L��J���`bC��|%|B�0�a��|%|B�0�<BNh�'��"u@�+�Rx��
�:����	�<���JP�JX�Qx��
�:�����<��9�U��:�LlH�����H�&6��JW�g��u@�+�3Rx��
�:�����<��9�U��:�LlH�����H�&6��FW�g��u@�+���`�
x����OH�&6D������H�&6d������H�&6T������H�&6��;]	��:�����Z�	�<���H��J���`bC��t%|F�0��Rx���H�&6���w�v�0�
�9�]��p��)�����X�,����R�I�Pt�Db%�XK$�(:a&��E�g�����X��G�	���sL&6�Jb���6�J#1�;�w+���Nb�S5c�i��"��#��D2�g�����Q�%�i=s��J����/�L��#6�dZ�(����9�
x����OH���"��#��D2�g�����Q�%�i5s�G�	�Z�L������W/�������_���/�7�?���
/w�p���z��m��2��w<��y��I���N��o���c'���/���������~�O�����#��������y��t;��B�G��c���������^~���}���|���?�����=~���8Y����x�p���.|�n���w��n�N�lk�/n�_|�w��o^�{�u-�����)<;���#�x���O��gq����Ku�����-�����_>�����'�>�M�xE�}<9���uG,d����~������w��wDoG��iG,d����q����Ku��k�#^��iG�p[���{O:b){�	��j���u����F+/����p�R����]����x��sv�B�������#.��{�R��_�;b)��%��a����v�B����Ku'G\���X�>������me_)��]�^Q��Z���o_>��){����<m�������M�=.������������}�
��qRV{|}�=����Y{�d/�.}U�Y{\{�f���%����gG��p�wO;b!{�
�Z�����#��_��O;��+����WO��K����u'G\������;�YW����wz����/�H��9#���hs)��w��'{\�;��R]�X�^s
�Xxv�~N��z:�\�^r
yE�� ���uG,d����=�\J��s�����WOG�K�+q��;�Z]s�J�����qrV�s��W\��x��z>�\�^���Vw����n���3���BV�_>���������s���%��Twr����������*���h�$���s���%��Ku'G\���X�^r]������}�|�������Z�����#�������XxrD����W���+�+����#��5G�d���o���XI_qOE��g����������N��T���}.�pG,��{����rN��~>�\��������N��T���}����m��������0W���5.��q��;b!���<�G,����Z#�s����J��;�.��q��;b!���'�����U�]W����}�|�����R�Z]����f���%��k�\x�tN��~>�\�^���Vwr�������E����wW�Br9'a_?`�d/q����#^�}�����5��_p)��s����J��E����#.�uG,d/��^��%�����0W�_^p�������t�|�X�^r��k��5J<�`_?`�d�x��Vwr�+�O����}�s��-��?m6;"�s���0W��8�R������wg��npp{,�n�n�)��}�|�������ku'{������J�����wW��e?�b�<�f�d�x�Z����N����yfp��O�����}�|����b�������+��#V��}�a�XK_������}�|����bQ�������;�G��������{?����9�7�
0�����X��_�������~�}���mi����[K�q�?����y��c)�tt����"��s*���a�J��~_2�_\�;�_\��g���E����5k�~N��y>�\�^�����#.�uG,d/���j��m;�b�<f�d����V�q��9b%{�#^��J��s*���a�J����ku'G\���X�^o�&|�#�9���0s%{�u����#^�}:�X	���=w�B�~z�:��s�����J�������#.������%�_-<;��n�{:�\����;�_�}�Z���uG,d�YG�"|�#���}�|~������ku����#V���8���~���H����r%{�#.��q��;b!{����r%}���~}��
�+�Kq����Ku��{���'�����7i_�������g�+�K����	�����X�~q�b��#��<���9�����r%{�������ku�+������/���e������3���\}^�;9�R�)�X	_���������z>�_�>�Y�d�=�>�����/R�q���G,d/��|M�����z=�_�>�Y�d/9k\�;9�R]w�B����5�V�}_���tf������ku'G\���X�>w���#����S����n�{6�\�^p�q��9�b]8b){���yG���{>��!��I���r){�{����#.�uG,d�8k\.<;"���g3���%���N��T������?��C]={�lf����=�R�����#��}[������W�����+�O�1���{o��?�����>��p����t���:1���3����$o�9���8s){�������q��d�����}^~�����U��l�����f��u'G\�k'���7�].<;���W��8s){Axu����Ku��kn��wAT���-����K�Kq����Ku��+����~;���G���]���7���������O����:�w�l������_���"�#joH��]o��7���i�?�����O���/�����g��V�W��]���i���V���{^�����=��D�������p���a!�\�f�+�'n��PZ�}~������=$<�9V��=��������=]5����aW�O]#M�h�?>��{�B���Z����R���KR����S��}�����1W�?���t��N�����
_c���y�1��B���4��w���Hq�����+��h�b]��V��+�+ByU���F���G���B�������.����[��g(_=��|����u��=m���\�^�;��R]�X�^�Y�k��~u���1f
endstream
endobj
21
0
obj
15760
endobj
22
0
obj
[
]
endobj
23
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
24
0
R
/Resources
25
0
R
/Annots
27
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
24
0
obj
<<
/Filter
/FlateDecode
/Length
26
0
R
>>
stream
x���_���u���q��������F�B���(m�&5����0��`�P�}}w7*��LT��^� ��:��{O�l����,o����z��R����|x������������m)mc{q���?�T��%,/K���=��}���������_�����V���}>�������1<��������/�;�����~(��������x�GE����m��[��x�1S9F�����������1���Wm���QCl�x���j�c/��s
k�����U��2���x����}�^�I�j�g�����Wm79$�����*��}{��^�����7���v���>�	�w�����v�W�����-T���3h�c���������T����x����������~�_������
����)���u����1�|��{����C��P��U����w��������_����������~�G���%��)/K}yw����_���������x�����������_��i���7V�_o~�����o�����*�������]���~�_����/^��>�o�����|����WI�G{�������������J;?����o���_������^���h�����^�����z&���f&�)��v�y`x�v�i��j|[k!�������eoo%��3��>�Z�[?�6�)4o���N�L6��������8����=~���c���G���1��;���j��^���"d�����>s]b�F�T=�u���:��L�j��vM��)i�/���n�����5��x��n?���O>
�n���{Lq�qO����j��}���j;~��y�!N�)-������������f����.�`A��~�&�_���}n�}�K�f�Z�aJ����B3�Z���r��p����,�W%�-���C��i�0XPz���m�����������hj9�\�����@�X���a�����=~P��n&y����fRWz��m�Gf����/4�&��������%��|zB5��j�	��f X����+��fi�m,��Q~��W������K�' �����m��Z�����.mk?!��
�]�l&��~��0x��Z^R?�}�k�Y
���.�*�c��q5}k�X�Ib�6�D�l��`�n��>X�5���Ls��&#���c���4��l��`A����;
���9�d.4����s�������K��Y��>:�������Th�u�)	��>�C�wM��}�;�k}�u�5���C-�������?���j{�?�a�6)Z#�bW���iW��V��-��S����(&:�+.���G��$Z�3)t�WL~������4t�K�>����@�w��l����~t��Yk�����"�@��F��B�q[��~�%]7�B�H7Z'(����g�q��m~�o�'����@�`
�J�`�D�>=~m���^������A,���?��h�p�O*�RA1���}������U�ia�6Z8`,��q�����|-
c�Fx��l[�	EZ$@�hU�(������gh��V���@1=;ut��]��h��}`� �2���m����<����b�Z,��V����dk{��:-h�?�-�F��n�>���������J��j?vV���qZ�@n���j��v,�3/��T<"�|�Pu�Qk���	�@F�������;�y�����2B��g�"�?�	�rg[i}����s�	[���>�L+���!��d1��1<y��"-� ���Q�=�3+����&��i-t�O���G1�������[���J��9�Rh���Q�����$�A��--������Q����?8��;����@�N+E���D����8�����7�<���|O�BK��g����P\�%������v�����~	�=�dh	����P\��%}��!��6-K�9fZ�(��F�l�;���f����%�]y�������=�j�@�\���b�o�4��9Zx�Xi���i��Z��N������Si�����P��������5-=��i���;�d|go�� b�9,��C����]&c�6�~]b�8��9��!�n
�*��O0��������m�6�����Op9-�0���IS[w�ZYh.���S��V��K�f�ire��v�����Vhr%���H�,;Y����f�9�@s�"MB���!���B3���A^B�P���vij��9�K�G,���V�v�����>#i�s���((#i+U��Vs���~�b��h�����������W�_�4!��+�����]��V�b�4'A��'d���1%�c)4)����*�C�R���!��S�"{���X2Mq�4'������2��.��E�k�[y��l�Z%��/N1gU_�>�]m�6�~�b{h�e������JC�`���b���G��l_6Z��HK�n_����<.c�E��>�L���,9�����I�2%fZ�(���L���)��*�K-S�m#��=}�a{�d�Rb�e�"�qx�:���Z�@��N��>����;���{�`�';�?�h��t3�i�r��p]h�"������C{��b�F�u�%�`���9v�-V��+k�������{s�4A0��Zq9(���k���>�Jgh�|�K���{�I��z��:�����M:C�s����X��x(>{{���Y{��:B����O�W����}�M2-t����|-�����n���s���
��i���`����L����;-t�N+����d���X�m:t�N+��i�]b^�;.�$����6���9:a+���{=��P�qP|D����)�t�����Zq}�`�XZ�S����>������|���`�����6:c+f:�����3x��~�M.:eb��S�����::?�������H'�}B�����?a�����I���|��mRt����������<��Bi����9Q�������
��O�mNt&��RE�#n��3���n��B�}��"����/v*�ns<]`6!Jr���b����hr��E��>��V%��sn�8���j*@�T�#,�4/���V@+�mB%��D�qCD���~C���}�Py�����h�
v����M�^n'��~���xL�����'%��D1����w���7�[
{�9��DZ�(v{����vD��EZ��D���/j[������X�us��<�0�zD����?��U���@�\���bzU��]�theR*-Ey��m��=-LJ����>��V"��_,|�{��
-O�N��n��J�i�p�����6X���;7���m�b�gt`{:
�������N��/	"���#��G�+�����U��'���iy�=l<���eu����>�L���V��)���&@k��i���~�Q�L��}�;����{%>z(�.mR��� ����Ey��*8������~jUPwZh?.<�b��#�l�/�<;��O�������>��{�4������;���L���/�x��(`��G����y���/gZBW�.V�����X+`Z��<G+o���0�������sk��~jLu���d������L��10��_r��3-�+_���'��?�
�����j���������\��j]�s�?=�
�j�u��5���mL�(?Z��/�����P���xV���<�K�gB����i���(��>*]��:|���r�:0a���@�:<T�F�V���;����/�����P����?���<�K�gB���Z��pz���[S���n�u��;�M�GS��������(�}�	�������<�s�gBk�u[���}����lL����Z�����r���u��[��^��wKL��u��X��f��w"�r����}������o�kLk�u{������o�kL����Z����7����u��[��������/����xD��ms���j�L����`�)Xy	}S
]yY��,V�-}SY��-Z����[s���y��{�>���<�}9SX����<&+O�/`��+O��S��������R��+�J_�TJW�U+��uv�Q��l�u�����(�}�	���b�����?EoL������p�A���[S��.V�:|���V�T����u>%���Q�������A�_�}�	-]���u��Z����V��v]�f�:|l�#�V����[�u>�
��^+`�]���u>
���Q���]�����/�h��3-]��������0�]��b]�����
�J�ui����O�?�8
���u]�u��'�'��)t]��u>G	����u]N�u��"x��
�R�u�X��#���r+`*]����I{���(`�[�u%X�!����r��u]��u������)v]W�ur���^+`J]��j]��3xd�
�j�ue��C�<�:
���u]]����Z9��u�_�^���3��������F�QZS���V�:=�s�V�T����u��pOA�>c�v���%��7��a������Z��1H��X�[4B�bk 1AIl�Bb-���-2����Z&���-@��+�����T-hq�
O$����SZ���+6<�bHO�k&1A�Zlx!���s�j�U�����J����prr�N-�X�fM�L����#9�Dr�	FqBB+�����pr��F-�X�tMQN��h�����#��b �!t�D-���~]�P�+&q� B����8���!j���pr���� &���],S�+��H�.V��-J������$�Z��.�b�V-�1�
'�9!�q�'B�����81��Ujy�,@(E�b;��b �"���SG�`V����F����]�R �H��LA��Bbv�?p[�Z�b-Il�`�V�������W���Db1�XJT-���Lb)�X�T-����Bb���V�Z��*�m�,k��������#9@1���X��W��Di�.V���8���������pr@���Z��n6��.��m\���],S�+��r�.V���8�������U�������jA��l89 -��v\��],S�+���z�.�Q�+qB>BC���=������� &�	],Q�+Fq�@B+���I�p���6jy�"@THhb	[����6�P9�!��81"��%jy�(@�H�b�Z^1�1��N-�X�	MQc�������B@�1�E�0���2���*@4I�b�Z^1�T��N-�X��-	M�e����[5`�7���-���;��L�!�V-�&������@b�`����Z&	�UZ�i�#��LX#UZ�i�Wk�$p_�Z�L�H�e�
�X�jA0mx���I�Lb�`��Bb-��B���4-LB���-����d���Z^��`��V-�&�Gr@��$�����.V���8&��m���`�pr2��H,[���6��L���8&��%jy�(@�I�b�Z^1�`��F-�X�0	M�e������@@b	1� @�I�b�Z^q �$t�J-���0	]l��W���������Uz�i���B@b	1�E����2���*@�I�b�Z^1�`��N-�X�0	!f��Q-��6�w�e��u'1�e�H,+��S���XYHl[�Z�,"�E����X�jA0mx��$�q%1���XL$��D��1�X�$�2��L��)�X)$V
�m��K�����;��V-��
�`�$0��8&��%jy�(@�I�b�Z^1�`��N-�X�0	M�e���������b��8&��ejy�U����*��b �$t��Z^��`��V-��
'����b��8&��ejy�U����6jy�"@�IhbH,[���6��L���8&��%jy�(@�I�b�Z^1�`��F-�X�0	M�e�����J  ���` �$t�D-��0	]�P�+&qLB����8&��!�l��`�pr@����+����6�PWrKT����.V���8&������U�����X�jA0�?�m&�{�
Gh�
�I�e�
�X�jA01���.����/$�2I`^�Z�LI�e���Z�L��X�$��J��`��Db-�l���Uz�i�s/�L�f���k�$0�\�i`�X�T-h�
' �����U�����X�jA01<�J$ ���` �$t�B-���0	]l��W,���&���Uz�i���$��Z^1�`�X��W����.V���8&��m���E�����X�jA0m89`�$����.���WqLB����Y����vjy�*@�IhbH,[���6��/�$�\�0	],S�+����.V���8&������U��b�X��]�i�{X&	\w\vK��R ��Z0+��������"b[$��w�%��Z�L�;�2I`\IL�L�H,&K��c��I,e+��S�RH��
U�"b[%��w�%��Z�L�;�2I`$(qLBK���Q����*��b �$t��Z^��`��V-��
'�v�?p��W�����������8&��Ujy�,@�I�b;��b �$41$��Z�LNH9�%�qLB�����8&��m���E�����X�jA0m89�$0R�+qLBK���`�pr@N�$��L���.�Q�+qLBCb��=������H,!&�0	],Q�+FqLB+���I����vjy�*@�IhbH,[���6�PrK�	.���.���-�������H,Q-��0	]l��W����&���Uz�y|Y��.�{z���u�	������q�
��K��������.�{�R��T���[6n��=y���+Yh��]������W���q����K�^�������'/U�������s����JO�S����oO^��i������nO^�8������q��(U�{����{��3Q���������q$��T1�=��d���8bL�*�=��d���82L�*�=��d���q�(U�{�����������qO#���]�T��q�"����[�T��q�!���Z�Tq��������X�T��qO �_��JO������c���*Q*H_���c���8�J�*�=��c���8RJ�*�=��c���qD�(U�{�#����{���=�yc���q��(U�{������q$�(U�{������q��(Ua���qd�(U�{�3���t��p{B���N������J�N�����v�b�z��Tq��,Zl�-���P�b��6�q��=Y�	��B��q���J���W.y��8�^)%*U��}����%�J%S�b�EL�%6�J��*U����+�=Y�	�/��q�{�#J���q�{y#J���������q��(U�{����{��HQ����'��O��d�'�{�c��k���Q����g��s��Q������k��HQ����������-�Tq���O��d�'�{�s��k��Q�������s��HQ*H_8�	a���q��(U�{�������z���=��`���8�D�*�=��`���8RD�*�=��`���8"D�*�=��`���q��(U�{�����~z������q�{�!J��$�q�{�!J���q�{�!J��m=l��=����}�{x0�JOVz���=�k��=����}�{��8�=����}�{����=����}�{��x�{	!J���������}�o�g(���������
7`���6|'�
6D���=A��v�#�����-D����h�����Gk� �F��(���$�B��R����6<�X�"l��(����!&���-S����ZR���-V����ZX����87?��N-�X������
�jA�1<����b��GB+���I��	]l��W,���Hhb[��g�6�����87?�X��W������#��b��GB����87?���V-���
'l���b�A��	],S�+����H�b�Z^1�p�#������U��	M�a��$������b��87?�X��W�<����L@��j�,����.�S�+Vqn~$����G�`L���7����]�R �H��LA��Bbe!�m�j����Il�`�b��������W���Db1�XJT-���Lbv�?�d�����+���B�����VIl�`Ac�������$��A��	],Q�+Fqn~$t�J-��������vjy�*����&���Uz�i���B@�1�E��	],S�+����H�b�Z^��LNX+9$��87?�b�V-���
'���$b��87?�X��W\������6jy�"����&�H�Uz�i��9��JBL0�p�#��%jy�(����.V���87?��F-�hI�
'�����Uz�i��%�RBL0�p�#��%jy�(����.V���87?��N-�X������X�jA�>m89�.�d�\������2���*����.V���87?��N-�h9�
'�����UzzX�L���0��L��X�$"�l��`bx0	]l
$&h�
_H�e���P���6<�X�$�5R���6|%��I���-�����Z&��e�����^�$p�$&h�
/$�2I`.T-�J�"�$t�Z�Z�LN@&	����8&��!�l��`bx$ �&jy�(@�I�b�Z^1�`��F-�X�0	M�e������I#��b �$t�D-��0	]�P�+Z�i���$���b �$41$��Z�LN�9�%��8&��ejy�U����*��b �$t��Z^��`��V-��
'�9�%�qLB�����8&��UjyE0m89`��$�����������L�;�2I�������X
$���@��)�XYH�,$�-T-X�"�m�,�l��`����I�Jb�a��H,&K��c��I,e+��S�RH���n��-��������X�jA0mx��$����0	],Q�+FqLB����Y����vjy�*@�IhbH,[���6��.�$�\�0	],S�+����.V���8&������`�pr����X�jA0m89 -�$�\�0	],S�+����.�Q�+qLBCb��=������H,!&�0	],Q�+FqLB+���I����6jy�"@�Ihb�?�Z�LN(���b�A������b �$t�B-���0	]l��W����&���Uz�i��u! ����"@�I�b�Z^q �$t�J-���0	]l��W����&���Uz������6���z��O���S�.���	�Zq'10�<�Mh��K��<���v%L����Y��
�J���#�Y��
�J���W���0�W+&��m�3��V}���y��
�J�������x����+�Y��
������0�a' �D�"9����xZ�b$x��
������0����w�Z��&6l����V$x��6�qoB�>!9�Ll�����V$x��
������0����w�Z��&6l����V$x��6��oB�>!9�Ll�����\�`bC& �D�"9�Ll�����V$x��
;9y'��`�
x���OH�Vr�NT+�<���L@��jEr���P��;Q�H�vr�NT+�<�<6�����>c��.���u'�u�j�H,+��J�j����"b�Bb�B����6v�='Nh�'����W�+U+&�R"���Z1�X�"V2��L����J����V�Z�������	�����"9y'��`bC" �D�`&x��
������0�a' �D�"9���O�Z�	�`b�J@��jEr������;Q�H�*9y'��`b�N@��jEr��m*'���<���������0�!��w�Z��<���������0�<`Nh�'$x��
������0�!��w�Z��&6r�NT+�<���������0��#���h�'$x��
������0�!��w�Z��&6r�NTVr������w�Z��f����	����0�a% �D�"9�Ll�����V$x��
������0�a' �D�"9@L{���OH�����R�������#�4���$���0[�����n�$t�5�����6|!�p�B������Hb-��H��������Z�	�W��4��'kgC��Z��P�{1��5�����6��X8��P����6��X8��R�`�vNB���-
����
`�jAOC1<�p��b�vNB+���I��9	]l��W,���Ihb0[����6������8�s�X��W����I�b�Z^1�p;'��m���E��9	Mf��4����@@�	1� ����.���Wqn�$t�J-��������vjy�*����&��Uzj���B@�	1�E��9	],S�+����I�b�Z^1�p;'������U��9	!f�Q-���6�w���u'1�e�H,+��S���XYHl[�Z�,"�E�zX���=
���,�����*b1�XL$�U�$b)�X�$V2U�,b��X)$��,E��Jb[�0[����6�w���HP�4���b$ �D�`�vNB����Y��9	]l��W����Ihb0[����6��.��\������2���*����.V���8�s��N-�X������`�jAOCm89 �Q���Z^��PNH+9&�Wqn�$t��Z^��p;'��!�l�����pr@�����I�b�Z^1�p;'��jy�$����.�Q�+qn�$41��Z��PN@�	����A��9	],Q�+Zj��%�`�Z0�p;'������U��9	Mf��4����B@�	1�E��9	],S�+����I�b�Z^1�p;'������U��9	Mf��4t\,Z�I��pn#����$�2��H,[����LB[�	Z�i�k�$0/T-h�
�$�2I`�T-h�
_I�e��}�jA0mx"��I6Db��=����C&	\3�	Z�i���L�U���0	]�V������Iwjy�*@�IhbH,[�����$��Z^1�`�X��WL���.�Q�+qLBCb��=����d��H-��0	],Q�+FqLB+���I����6jy�"@�Ihb[�������I#�������������8&��Ujy�,@�I�b;��b �$41$��Z�LN�rK�	.���.���WqLB����Y����vjy�*@�I1K,�j�.����,��;�	Z���)�X
$VU� be!�����P�`YDl�$�����Uz�i�{X&	�+�	�U�b"��H,%��I�R&��I�d�LY�J!�RHl+T-X��m�����X�jA0mx��$����0	],Q�+Z����39�%��8&������U�����X�jA0m89`]�H,!&��`�X��W\�0	]�R�+fqLB����8&��!�l��`�pr@Z�H,!&��`�X��W��9 rKTqLBCb��=������H,!&�0	],Q�+FqLB+���I����6jy�"@�IhbH,[���6�P9�%��8&��%jy�(@�I�b�Z^�L���R�H,Q-X�0	M�e������B@b	1�E����2���*@�I�b�Z^1�`��N-�X�0	M�e�����ytB�8���6x�v%L���;�Y��6�ytB�V\B/�&6�+aB�V\H�LlhW��^�I�LlhW��^���������	�Z1���m�G'���^�LlhW��^�XHl������^�XI�Ll����W�'$x��
;9 ����`�
x���#9�LlH��BW�g$x��
�P�J���0�a#�>#9�����Z�	�`bC$T�>#9�LlH��JW�g$x��
�P�J���0�a#T�>#9���a��;�!�<���H��J��+9�Ll�������H�*9`�+�3�<���������`�
x���OH�Vr�NW�g$x��
������`bC%�t%|Fr�����v�>#9��c�=�Nh����LlXw�+a�H,+���J����E�����J����6v�=�Nh�'����W�+�&�I�R"1�>a&��E�d�+�+E��Bb|%|�Jb`�
x���O�;�0�!�"_	���&6$r@�+a�L�*9 ���	�`b�N�|%|Br��m�G'���<��������	�`bC&�|%|Br���P�+_	���&6������OH��m����V}Br�����<���H�29���}���&6l��;�!�<�l�<:�U���&6Dr�����`bC"x����&6r�����`b�F��s"9�����Z�	�`bC$x����&6$r�����`bC!x�����<�����y�>Dr��m�G'���<�����y�>Dr������w�C$x��
��y�>Dr�����<���H���G'����y����������������~��H����)�������_��������[<������h��o�������������/�����-/�����<����������9������6������_������������/���������q�������U���v�~q���U�eK�z�������Wo�~�^%���#�������m���i����uq�g�����?<z�����m���o����-n���H���W���3������1~����3�X�bt��~��b${���Z��su�X1W���������C���Z��:�u��#�S:b�n�Su�mUY����������q�/&t�m�r�~�i���������W;�����v����1��~q����x"<�#�m ��3s��/^�������u���-��#�?�������Pz�:"������]�������w�\]��g�?\���O�JG,�fBG�a�j�;b({�1����G��#����#le9��vB�|�	?�#�2����r}Ge�����#��v1U��C�	+�g���������w�@v���3����g��M�����RF��p�	���#��W�_�?�����>�������>�G���Ds$;�O��v}2U���9����]G�e��2����������su�#�Y�x��������	}��c�����#�k�g�WW�su��1�����8��'��
E����������Xv��c�n�Ot_�:b ;%�z&<!��64�@�rGd��K��v�D�b�5���'\�����f���}u=��~��u~����������e#�+���1|�S>'��9(��z�9��qO�\]��g����#��W��m]�6R�u�qy���k����}u=��~1�=��v�1U��c ;eQ�Lx�j-�����a�HvJGL��:b��w�@vJd1[���m��];G�3>��XT<{��#�o���rG���3.<�p����k�d��pc�3������c�Hv�"��'�[<'a__�5G�_���'��;��o��?�]����q=:��$l�v�q�b$���{�};c���s@���\s$���y�(Su�C�T]������e#�f,/�r����k�dg��5W���'���,1��t����P��W�[��������s����\s�n�Su�#�Wn���x"<�����:�;�r�9��r�]zsu�#��ZG�e'���'�5�xN����k�dg�5��v1U�;b {�a�����f\�����}}=���XY���:b��w�@����������3�{=gb__�2G�_L��b�n�Su�#�s����������������?]�:b�n�Su�(s$���O��
{G���2��Q�Pv���d]����8Fe��#��s:b=�l�\�2��_\?FL��:b��#��������������������Pv�1b�n�Su�1���q�S��W�9�s�����r(;�#��v1U�;b ;�#&�����o.g�C����]GL��:b�n���"�;b ;��,�������Pv�1b��w�\];F�d�����P2��a�1bY���7�3�����r�n�Su�#��:b����cD9G_�\�,�����]GL���#�y����e^�s�����r(;c1W�����}G��t��I�����7�3����u�\]����v����cf(=��9���zf9�������u�T]�����u�3���G����:y�#�32���]GL���#�	W�#�Yg�r����Y�d��5��v1U���k	��5�3�
�q;�_�^�,G�3V�su�����#�W��F���5���o�g�#������su�1���P��5f�G�7_�,G�3V�su�����1��q��S�	��5���o�g�#�	w�L��:b��w�PvFG<��u����3�����'�v1U�;b ;�����}G��������Hv�:���������1��t�1����L�������Hv���\]��g�W�^�Px�=T#�w��������g�#��?��u�T��#����{�v�|��w�Pz��F��������Hv���u�����1�����	1��v�:����q9���XG���:b��w�@v���O�'|���s�����r$;e1U������:b <��������������g�#�w�����x�{��s$;�/����qw~^���w�3����<b�n�Su�c�H��1�}��@���3��p&�|N���`�dgD��t�.*����1�����3��K��9	��z�9���}v�u����������H����EE	�����Hv�1b��w�3��#�I����_���}G�s���s$;���
ug|�5W�;b(���K����&|u@.���}=�������u���g����s$��)g�r����`�d�t�T��#��zGdg|M�S��������#��'D��t��#�1������^���=�/E��z):�B��s(���,s$;#�����1W��c$;�������E��H��Yf��we�z���W2jy[�->y����{�����W�;�b���r�=�����gM�������HvF�9W�;^L����@v�E�Hz����2J�.G�#�)g���]GL����Ny�����3�>����������x�{5���~�#�s:�������s"���(s$;�������t��������G�i�YY/A��/����� ��
endstream
endobj
26
0
obj
15727
endobj
27
0
obj
[
]
endobj
28
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
29
0
R
/Resources
30
0
R
/Annots
32
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
29
0
obj
<<
/Filter
/FlateDecode
/Length
31
0
R
>>
stream
x���[�$�u���8O6�3�!�HjE�=-H�@[�H�$C��5 �%����:��/keT�ae�9���^�Q�wF���:���}/�����E���������^��V��J_���������h��s��C������!�0���_?����w|����g���y���/c�&�p��1�z6����^�e�{����|W������]��*n��b��m��)��S�OLU�V���_��1����O��l����G�g���4_�����`}��f���4_����$U�~?���}v�?��{4���2��W����M	�a����Hy�i����������D����O/����u�C����O�������GJ�,io<��P��og���H<�~����_~qO�����o���������)��jf�/�\��	�a����]��*v^���_[�����??����������B~M����+����|��l[{����_�����}��w�����?|����?����n�n����~��o���wq���}J=�sj��z�?{�����w�x�����=�������y��?>%�������������{�J��������w?�����_>�K�'��z���}�{���G������)�:��1|�Cf��W-~h-��_�������S)m���L��o��M�e
m��:q"i����7w�(���t.u/������8��\�v��]�2��6Z(�����s������>V�����?�����(���z����
�Qg�)��z�;���u��z�0F
������|�B��b����}�}���M�?)��������_�J������.�d���~��"8�����e�1�{7i�����cj0��`�e��S{���[.���w�?������g��0a=�;ko��p������CX��������n]��7���t[0B������s->�6`�m���W���xv���_/����n��~��?���(���������re#�[��6�#�FF8��/�����	0���4&���^����B��~��g���^��s�A�K�m�n�����'Xo����H������4&���r������r�}^�9��P"��f
��fn�}0xU��t�#���"�p� �	i^{M�����+7��`h5��z�������Rr�t��}�0�j�Kc������a\=�q���6>�_��R����j����]�eyu�����D�26��0�]��@K���_BL�75wxS	#��Ze��u�r�q���+�/w!v�fV��Q���s�!�c"�o�����.7]0B��#����nt���j����!�f�/��vc�0�`P���7��m�0���u��z�Q�����k�V��^0��W�?�������[�_>L���##�t��D���RAS��n�8��U��i��������pK�'m0��`�i[����sz��1m0��`P���7��o�FW"��ea���t����
j�r�u�P����#��D]�0B�������J^��w���%aK0�Q`H�-}��f� Wj���
�%`K0�Q`D���%��u�!X@�yw:J�/���0�k����m�^�o���M�
�&�r�q����>0�PG+��7�m��������dGZ�Uc�5��Vz����%��:�����9=oX��h�l�a,��
W
����DD�F�G�����
�&;�S���4~���+���,E����������6�Bi�����%��8IV#��/���?�vw�	�������5o��F�v�1a|d8,{��s����O����q���a)�:������C�0Q�	�a)�����*r=EX��h����b��U��.���V`����1��o�v�f���g�mxV^�|W�vI9���:L4;,��CW��i�HOb;�s���4~�%E����L�gcB��[��r��v{���������FK�a��*GwCO�d� �fG[ax�������6�K.�xX}���/=uX|e�4�
�_�����3��v�+���_��|b9,�r��P���@���.#����zHD;,����z��?r��P��*�s�����s��U87�"�X6Xf��M��Z�X	�+��`������/Z���'���$X1�.��]L�;�z��c�Sw�����v�M^�����@)0s�h�`������4�o����4Q�=Q��
L��!�`�f,���2�4��w��
����������	��D����n����e0_��c�L���x�p�iB���qC0k�����4M�=�/��}Aw_~mn�u�Y{Gb�i�q��S��v�2K�:$����m����/��4K�
1�\��
������My�����	��Z`g���>D�
�	�k�0Uv�6��K��6�H�:(XATu�
�����i�bG��5c�	��������`!�V����|r�0��Sy��Z ���'���T���g��7����O�>����k@{�Tn�w���U�N��]�[	wW%���YI�:$��[�[o��������U��w��u��+��*���Y��t��W��*���"�a�f�.h���7��;� {�)�P����~S��a��v�WL�Q{0����uO0��h��0�3�n�M{{�G��=�$��=��V>=o��w�Af��c~f��u�0�3���Y]����3��;�+L���w���?����4���8^�{���W�Oe{�4&�0�����}��t���Cw�-��1�4��ue�t��0���D�R[H]��#�0���D����;��*�-an"�s`G`���1�q���/,$\0�
?������m���EpF��c�u��>=�OFa�2
��3���7
,Rv��4X�0p�m���Y����5�h�(a,��-���r4X��hC�:al�rx�r�R���1`u���\�a����
�Lia��Bm<��jb��*d����U�h��=��	�C+�/���D�Ze�
1"�v��`�����5��c#<������gU�0�Ra���j���z����q[a�����R��R���`��"v����d�v�����h����a����w�UN�0���-#t���;8h��A�6�`��?��D�����_��lL�{�e��SwS7
�&�hC��F�=�(�%�\��Auc0F���yl��-
\0���h�q����K����n0B���i����]�0��s�z�e�v��
0�aT������7�
���"���W����AUw%�� ���/T6&����i��?��F��a������>=�K�+�a�����}��#,v��eX0�����K����aU�x����v�%��6�
k��==^�HO:X.��4&t==��}��=��&�'��9���r��gR�.�
��3���fR.�
�O���$i���>���^��s��G
��Q��#o������I��ce�������Y��3[����T��E���Q����{�f��
�����=%3��Bu��ixl��@�������kx�>)w^�����}��:\�>$����=I�}�7����8�=0��������)jx�>)E^�����-���\x�������Zv��h����-�{�4�~o�Y'���m���H����4�d�x���3)���E�N�a��;�����4�d�s���3���KA�N�����u��	�r�>����:�m}��W�gD�e]��u�3�>��T]���Y'��m���RwY��f��$�7m�#�u9j��F�`�fRtY��f�����k e�u�j��V�`[�fRuY��f��#�i@��e]�4�d�V�MF3isYW�f���
��g %�u�h��6�`{efRqYW�f��!
�e 5�ueh��n�`�<��2\��M�Nv��A1��6�u5i��6�`�fRrYW�f������@*.�j��������H�e]�u�� ���{R.�Z��������H�e]��u�a ���3)��kU�N���E�@�.�Z������}S� �����:�*9�w�3)���Q�N��
�
�@�.�z���oA�}�7����^5��;�`_V����N~#G_�����=�~'�����=<�<#
.�F���/��}�1����Q4����`_����n4�:�~%�1?����14����}�?������>��=<e��e���������T\x�^�����Ju��ixk>�@j�����C�N����c@aX�M��������H�p�9hx^�@����M����}�Hus�=jx��S�g@��e���>��=<��#
.�b�����3)���Y�N������Hw:�?����'�$V�F�6� 6���!�Pmm>@l��m@4��$�|%�*&��&4�D�o^L<����(�<��tHs�hB�S�y������j�h�b�=��	�j�������-{4�3^�yub���
b�j�h�b��XnM��b��X�M�;��bu�XMX��b�W��53���m�+@������9�<�X� V"D�Hb%�XI �D�Db-�X� 62D�Lb����
�gF�	�����L���U��B�&V �U��D�&� �U�XF�&6 �U�H�*&���fTb'�X��gTcI�C� ��Df���M�C�3V�1�UL,�Mh�6�
�*@(#TbJ�X��g�TbQ�X��g�TbX�X��g�Tb_��W3���,i�A�
*@l,#����4�)��&�6�
(*@,.�&,Tb{����glTb����_3���0mP7�1�D�p�
���
�<c�
����<c�
����<c�
+
P��D���f�I��"T�Xj"F��f4�
)����6�
h*@�6�&�Tb����o3���8m�T�Xq"F���4�)����4�
)�����4�)�X���T1��f4�Yz�*`�1�D�0P��hbR�1Q��hb
R�Q�?m0T�XM���15�hBgjs_��	�b�[&�T@,+�	S!�RA�Tk�	K%��@�5
�	[#��Al�
P;qF����}�(��n��r�@��&����bz���oM�F�6� �}�
9�	������w�P��*@�J@�����*@lK@����j`��W��b�V��6� 6=I��!�P
Lm>@lz��m@4���|��*&���&4S�o^L<I���a�Hl��&�#D�����MOR�&�&TS�g���`�M��6/ 6=�����	�����SOR0V#TS�7�
�r�h��H,w��j�h��I�����h�:Hl������f`js_�I
�
����R�A�D�&TS�'+	�Z�h��H�ek�F�h��IlP�X�hB30�9T�x��	R�Q
L�e�3m`�����i�1�RLPK? ����
4���x8����x�M����
T1�>g4c�Z+��2c�Z+��*�Z��j)U�%�>%��R-�
�b�}�hB�B�9�RPK�}�a�Z+��2c��D�P@�����*@�P@�����*@�P@�sF�*�7���A��)b�U�X��&V �U�X��&� ��
��P�A��)���*@�P@�sF����� ���nTb��X��gLTb��X��g,Tb�����glTb���x�3���Pi�Z�
�S�#U�X��&V!�3U�X��&�!��
��P�C��9�	�
��P=@��)b��*@�P@�����*@�P@�����*@�P@�����*@�P@�sF����F�
�S�U�X��&V �U�X��&� �U�X��&6 ��
��Pc�
P�s�&tV�6����`� F�eK�R�R �0+�J�V!��Tk
�Z�� ��5����>g4�Y���W����i��6H,��j�h�H�n V7�D���z1���q��F���}��)�U�X��&�!�#U�X��&V!��
�� �Z����`\�Z�����t7K�hB�B����n
���j�J�i���x�3���Pm�y1q7�b�a#�i��X�M�V�6O 6�M�� �P�Pm�Al���=C4�Z�����t7wT�s�&tV�6�NL�M�XA�P�Pm�@,6�
�	c#��A,w��	s'�:@���	� �@l�
P�sF���}��)�6#�6K�R�!�0E+	�J�� �P�Pm�A�e�	[&�Q@l@��9�	�
��P�n
&Hy��*@L@+����*@L@k����*@L@����*@L@�rF3�10M,C�3F�10M�B�3f�10M�C�3�����R�
�rF�����r�
�R�U���&�!�#U���&V!�3U���&�!�+U���*&���&4S�oPe�
�R�7�10M�@�3&�10M�A�3�10Ml@�3�������
�rF������ ���nTb`�X��gLTb`�X��g,Tb`����glTb`��8�3��Li�Z�
�R�#U���&V!�3U���&�!�+U���*&���&4S�C� ����10M,C�3F�10M�B�3f�10M�C�3V�10UL�Mh�6�
*@K#Tb`�X��gLTb`�X��g,Tb`����glTb`��:�{4�30����$S1�-�X* �
������X� V*��
����Xk ��������� 6|�c9�	�������L��Ab9�X VD�@bu���X� ��n$�#�u_�X�hB30����$#Tc�
��2�<c�
��*�<�����y#�I�����8�rrj^i��J(c�Jj]N����,�qx%�-'��_OJ8m��VM�����������9�����'e�^I��������2&��^��y���B�WR�r����d���+u��ib~�?�{����M��+�
����b������713%���z3srr�^�ve�?c���>�RJ8�W�������t9�<��i�Ji�P���RD��R����RI���Wj	B�o�9yd�42�2��=2r���|��i9C��������8���s����g�8���3����g����(�������g�x����}f�W89��cQ��7��L3
'W���*J(��Ls	'w��b)J(��L�w�?�IC�3�����g���������g�8���3�����_}�F�PF�5[pr�9.��2�7Opg����4�~�����������s�������X���s�����������s�|���������s�L����ez���7pr�9.v��2��pr�9.^��2�7�or�9.F��2�7�o��9..��2�7�og�k��4�~
�,���������s�����������s�������8���s�������y���7�or�9.���2�7�or�9.���2�cqr�9.n��2�7wor�9.V��2�7kog��_�4��>����}��	(�����f�M.>���PF����Mn>����PF��f�M>����PF�����Y�(�'	=��qg�MN�+����+��J�x�R �q����[�J�B(c�J���h^i4e�^i@��_����t9����ix�4 �������&���j�P��+�g7�o^�o��R��?4�IC�r��u���q��$����Yu���q��$���8�t���d��>���)�r_���E�O�I0�PM?m�AlZy��C4��~�|��t���hB�������bb��hBs������������#�M[O0G�&TP�'���`MM�6�6� 6�=��!�P�@m^@l�{;���G:3P�W'��`� F*��b��XnM��b��X�M�;��bu�XMX��b�W�z3���Am�+@?������X� �"����)�XI V����%�X� �2����-��( 6������fjs�1�<�F [M�@�3&���hb
R��P��E@����*@�,���3�1P��E@�����*@�,�X��g�T�e��:�<c�
�-��*&&��&4?R�C��(!�����P9B��(���*@�,�X��g�T�e��:�<c�
�-��*&���&4{R�oPe�
[Q�7���hbR�1Q��E@k����*@�,����glT�eP��b����Vjs���W��<���*�&�1%�0Q��E@k����*@�,����glT�eP��q���f^J��"T���"F�d�"��UHy�L [M�C�3V����b�>�hB32�9T����R�1P��E@����jgjs�������h�L [M�C�3V����bbF�hB�5�9T�P�G�a�
�-��&V �U�lY4�)�X�d�"��
Hy�F [EL��=������W����)���I,�����@4������X� �*D�Jb��Xk 6D�Fb�����V��&4�S��
P/S0
#���b9�X
M���
��b}�h���X� �}�m9�	�������P��*@�,�X��g�T�e��*�<�Z��n���	�I1	�����;�MOR�t�&TS����`M��4�&���c9�	�����OR0n F��6� 6=I�!�P
Lm�@lz��5A4���<���${�hB50�y��I����M�Lm^��z���������Xl �D�Fb��X� V;D�Nbu�X �D�Ab#�������&4S��
POR0m F�m$�"��b%B4a�$V��b-A4aI$�2��b#C4a�$6
�
�q,g4���*@<I�)���6�
�	*@K�&LTb`�X��g,Tb`����glTb`��8�3�1P��	hbR�1R��	hbR�1S��	hbR��R��	�b�X�hB30�9T�x��R�1P��	hbR�Q
Lm�3T�8�M����4�)�X���T1q,g4���|�
(T�8�"F�Q��	hbR�1Q��	hb
R��P��	hbR��Q��	�b�X�hB30�9T@����1��*@L@+���j`js��Z����h�B &��
Hy�F &���c9�	����*�E�q,E�0R��	hbR�1S��	hbR��R��	�b�X�hB30�9T@P�X�a�
��2�<c�
��*�<���*�W�q,%��R��	�b�X�hB30�9T�P�X�a�
��
�<c�
���<c�
���<c�
P�����	����}�')�2�n��R�T@��&L��J1����*D������b�A4ak$6:�
_�X�hB30����$�1�m�X �����9�X�@�n �7�&���b�W�:�3��Lm�+@=I�����4�)����4�
)���~��]~��P]�l�Ml�	Z4c150����h�bj`��y'h��=�����<�
������r`�	Z4c150����h�bj`��y'h�������N���uLZ}P��X��30�@� +D36���r�� ���X�$V;������ �>@��&�V�>�
����L9�6KD3FK��J�!�1�XI$���������#����X@lP����}@�30�@�
�S�����
�V,J�f��5�QHZ�(%1HZ��@���R�!i�s��V,J�f��5�QTHZ�(%���<G9�!i���hFHZ��y�P�Ik�����bQJ4#$�y�r C��E)�����9��
�m�(%�.��9�� �D3B��8�C����A��(T�X��`��(PbQJ4#T�y�r�A�E)��P�9�� �D3B��8�3��}@���@�
�R���s�*@,J�f�
0�Q4��(%�*�<G90����hF���y�P�#T�y�r C�E)��P�9��
 �D3B��(:T�X��`��< �j���s�*@,J�f�
0�Qd��(%�*�<G9P����hF���@�
�R���s��ip@�> T�y�r B�E)��	*�<G9P����hF���@�
�R���s�*@,J�f�
0�q?��J�}8�Q�b)C4c�TH�+�+��Jb��X���@�5
�F�h�b+@����
p��H���h�@,��j�h�
��Fb}��A4c�����j�}8�QD��(%�*�<G9�����hF���r@�f�
�G���"�;0?)&��B50�y��I
���j`j�b��l�	����s&����8�	�����OR0n F��6� 6=I�!�P
Lm�@lz��5A4���<���${�hB50�y��I����M�Lm^��z����a�$��b�A4al$�;��b�C4���|�X �D�Ab#�������&4S��
POR0m F�m$�"��b%B4a�$V��b-A4aI$�2��b#C4a�$6
�
��g4���*@<I�)��Q�L@+����*@v`�X��g���* 6�10%��Q�L@sF3���	hbR�1R�L@�����*@v`�X��g�T�P��������js�����1�@ ;0M,C�3F���	hbR�1S�L@������js�����������J�
*�lPb`��F ;0M�@�3&���	hb
R��P�L@����*@v`���3���PmP7�10E�p�
���&V �U���4�)�X�d&��
HyFuC�9T@Pb`�hBsC�y�
h*@L#�T���*�<c�
���&�!�+U���T110g4����*��10E�0P�L@�����*@v`�X��g�T���:�<c�
���*&��&47T�C� �����	hbR�1Q�L@k����*@v`����glT�P�����	���}��)�2�n��R�T@��&L��J�RA�U�&,��Z��@l4�&l��F1���Q�Mhn�6���` F�
��r� �0���
����u#�A��
PsF���}��)�U���4�)��d&��UHyFuC�+�����`_�������$K�hB50����I
���j`J�i`��8�3��Lm�y1�$�b�j`j�b����	����	��')XD����3�MOR�g�&TS������X����������')+�������b�A4al$�;��b�C4a�$V��b}@4���|������f`js_�I
�
����R�A�D�&L��J��@�%�&,��Z��Ald�&l��F� ���&4S�C�')� �7�10M�@�3&�10M�A�3�10Ml@�3��9���	�b�X�h�@ &��eHy�H &��UHy�L &��uHy�J &���c9�	����P9@�c)b��*@L@�����*@L@�����*@L@�����*@L@�rF��)�7���A�c)b�U���&V �U���&� �U���&6 �U���*&���&4S�C�
*@K#����4�)�����4�)�X���4�)�����T1q,g4���<B� ���F�10M�B�3f�10M�C�3V�10UL�Mh�6�
�*@K#Tb`�X��g�Tb`�X��g�Tb`�X��g�Tb`��8�3��Lm0�*�c��gTb`�X��gLTb`�X��g,Tb`����glTb`��:�{4�30����$S1�-�X* �
������X� V*��
����Xk ��������� 6|�c9�	�������L�����9�X VD�@bu���X� ��n$�#�u_�X�hB30����$#Tc�
��2�<c�
��*�<��m��&�����,������0�E3vSS�;a@�f ���w��M����9�#��}�����)��0�E3FSS�;a@�fL ���w����AL
L90��-���X���G�u�;`ub������	����r 7�;�v���j1�>��:H��;a�@l`�#��}@_���i1�>`�I�D�;�&+��Z1�>`��Ild�;�T�9�F*�L9��"�	*�L9� i#����<G90 i#���Ik�����	o^Ik�����	o^Ik�����	o^Ik�����	o^Ik��<�$m���B���("$m���B���(2$m���B���(*\�3��.��9�������P�9��9�F3nP�9��P����P�9��P����P�9��P����P�9��P����P�9��9�F*�<G9��*��*�<G9P�*��*�<G9��*��*�<G90�*��*�<�y@!�h�`���P
n^�`���P
n^�`���P
n^�`��< ��j���s�*������s�*������s�*�,��D���@�
0�r,*�<�y`�������
4�`�Xa�
0�Q��(���s�
*�,��D�����
0�r,*�<���>B�&�}8�Q�b	��K��J���+��Jb��X���@L=G90��E9��Al`�#��}@_�s�i�XM���@b5�X
���X�H�o �7�f� ���r@�>���9��`�X"T�y�r C�E9����>Bh��P���_~������Kx����y�/w����)���v�������xw��o��X����:/��4_�uZ���Q��_�N~��/������}���������r��|����^�{����%��_�������|�|�����~����|����}��d�-�F�1�e�z�_���)���]�j��<�{�m-|he[���&��w��)�~���(����>#J:H���W�3b!��}6#.�uq�n{����W����������{��y������O����_��'���<���\���X�~s{�r6=���lz<����c!���}���=���~���g�(��x�N|F,d_��+���Ku]F<�}v
��A�/__p�X����O����1nK�cz|s6=V�W�'��Zz\���������]0V��o�=��-2������b�y������]�,#�?���kN����w�\#J_d��Og�B���x�{�q��ZF,d_g��.������S�gD��xnu�3b!{IF\��2�R]�����Yc����NgD
!,2�������WO/�5#.����XW2b){����x(|���!n��x���g�B�G�w��%�����-|\F\�k���"#{AF��-���n�R��Y�b]�t��k,e_?������r��F
����?�f.e/��Ku]F\�k��}��g]%�����`>#��;k`.e/�#.�uq�nk�C����0�U��z���;��W�--���m��������'����c%{nu������Q��2��:�K��.Xo^��2�R]������>�/_p���!�������buq����Ku-#�������w��Q�����X�>{��2���Y�b�����v��X�^����+2�-�������%��Ku]F\��Z�n��>{q��>��y���{��\�^qr��e���.#����������E�vLGK��y's%{�5�Z]�����X�����
��(GK��y's%{�5�R]����:b%{���#�g��xr��v���������w�\�����f���~�k�C=���w�~�������O~�r�J|Q��O�B����S���;�U���q��N�_+�K&�Ku���R]��3���B��~s�i;�j�����f������:��(��0�g��Fq���%���=i����o��u-��}R}:Sl>Y����O_<nk���y�+�Z����+�Sf���r��Nc+�+f�ku��R]]��d�,,?}�����'m1[y�D������w�XJ���b+����n����B�����_~v/���q��N�c+�+n|��u��Ku�:��}-��w"��/XS����y6V�W���Z>\�����}���t>����+��!/<�������p����Ku-��l��Z�Y��.=�����b�x�{���Z]��X	_�%���{�<�J����v��;�j�d����=��\I��^�O~ok������~���g����?h����?VTo	����^+V�W�X�����Z]�+�K�h[_����v��\�^���V�e�����X���W���+������[���uq��e���}�`���X�gD]�`�����%����g�Ku�������~�X���Y��v����������\��2�R]�F,����'?� #jX`�}�����ku-#����X���^�c��z�/Q��;�\�d��%��uq��e���}�&Q�k�o�x����	v��\�^r��T�e����|w�>?k�����3�3�������J�
?�Z]������J��?��@��u�XY_�O^�^������TWMo�{����7����{q������n�J�y+�r�Z]��kuu>Y�^�]���>#��������=���V�e�����k2����U+G[���n�J����Z]���ZF,d_�������%+������������.�Z]�tO���d/����?���6���������%�@��Sq��e�B����[F,��7�]F��h�}}��\�^���ZF\������gV����E�G[���n�J����V�e�����s��ZF,����z���>�f�d/�F\��2����Yc%�jC�����������7��������t�~+z��e�B�����/�#F8�x��w3W�__��t��k1�(��}8�(�L����_e}�I�R�������=��Z�#����i+s%{�Mq��]:��5��������?W�:���#y���y_s%{�Z�Z]�tO�Q��.���En��8�����=��a��&�J����T�����3�B���j]I�x��eD?�e��79W�W��^��2�R]����%K���-#Z�g�Of�R���X�jF\�+������������+�������`�y����Kum��R����m��B��7,>#��+��������o]��2�R]�F,d�������F[��;kr.e���=.#.�uq��e�R��:�ra�c���59���������TWoE�|+���[���_��v���=�x.e�z�nK�ku-=����J���#���m���������������.#.���X�^��������n��_�>�f.e/��Ku]F\�k���b�C���v���w3O�K������.#.�u��+�������j1�N���
�����ku]F<�}�!�����_�-O�u�z���)��y7s%{�r������:��d������L!1m�o���+�+��ku]F\�k��������Q���������%��Ku]F\�k�����@��_q�����CO
endstream
endobj
31
0
obj
15830
endobj
32
0
obj
[
]
endobj
33
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
34
0
R
/Resources
35
0
R
/Annots
37
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
34
0
obj
<<
/Filter
/FlateDecode
/Length
36
0
R
>>
stream
x���[��Hv���8O6�/�� =�D��h�	c�����aY����J��������w��8�g�l5F�;�bF����J2��������?�?�1���>�����������������������_�e}Y��~iK[�#��?~��?���������?�����>��u|��<�����^�����}�����7��sxy(=��Q1<�~{�����S������|��{~�k���~�G��>v]��2,�W������LX|����J<�����(������O���/�QM �LK������Q�MZ��^���+��c��Q&���'�����<�	�g���K������Q�S]��^	�L��n�L3�n�����S�����W���y���^m�W/���o�;�f�dO�������C�W(����_��]�gn�����?��?�����n���#�}��������|����o^����������������|������t��7W���~�������������)����\�����?��/�~���O�o���?��������S��a����=��}�ww������?����������������A���_?������z&u]�����+��y��>6|������eY�K�5��x$����Rn���%���?@;�#��5��N&�������8���R>K��t?���������.3<�A�.S�0>��<MJvB��<�>=V���	�wx�AE��:<���|���;��W_�^�I���^r�>����|R9`�����$F���h�)��/���}��>�0��,�{W��O*��P����o-/����0����x�o��p_��Z-���M�����3���k
[z�����d���������}�a���.�mO���o���k%�q�5�k��-u�� �=�p�Q�}����whs����>Xp���XMo�����2NnG�\h49����+!��o$f�s��l2���w�������'XI=TRO=}����������<�16z�"���e�]���{���������tz9��c���/�OL�m���po�ave����f�MG�,�7�#����{ o�m#M���f���>�����1��x��z�__
���q~q��		n�������q�w����bOz���T��������.�9��i������>�/R��#����)�a��:��%�I`Ov��m�,%�����ky<D�����F��*��h6���n���}k|<Z�m�q�c�4�i�%��S|��i�6��z1�d����'Z.��0�0�B��}b�
�e�/��1����=^��!;�q��6Z)({|�1-v����V������a��>����5Z1@�#v������x��sK+�v��m�@P\�����P��i�G���������"�����������4>&�U��Vi���
��k���Y�K��\��]���!%Z������TQL��&|�{�d�1�D���_��gW����eG�c^h�"���.�X��������JHt��`�q��m^h����&��Dq����W� j�c�;L;��O���e�v�V8�S�Z���iy��)�����-Q������D�?���I�}R�V&��*s�N�K�-Tr���������$gZ��L+�\ii��y���{U�C~�b�4�v�^f�;\�����h�xLu�`��������E�_���_���h/_	�HP\�O�|\O�_?=�����{�`�a��=q��K��}r�V	��>�?���gK+(#-ywo��J���>�B+�8~z�uU�=��h�P
-�kK��}%�raG�b���b�O��}�`��R��Bi�>P��b��o�}��s������Zw��������w�^'Z�@����'�{���=�^�G��p|Q-P�����"w��hq�������+u�����jJoO��&(n�Qu����9�c�5��>�D����o=�.m6�B���$��K?0���<5�eG�d�E�b����l��}�thqR�F�(oY�BK�}n��"�%��jNC��im�e�������Q���������ml{��By�f�@���/J�,m������l+-��J����jHq�xc81����g���hq�6Z
);|���m�8j-�Z�����5/���K�\�gL$���y�x���~��?�)&Z�D��Vi=��h�����=eZAXi5������x�a�l����hG��.�����o.�M����)ZAcG��>XPw�������R���&(��J����h7�����l.M-�� �jo�����H�^�6N.�4�����F�c�q;x�_����c7�w�~�I��J3+�0n4%�pX�|��r+4�hn5�d#��X������[4�i2�������V��z�H�&���e�g����q���^�u�	�|��Q{�vh�W
��>X�M;��`n����O0���B��o9,��lB��g�@�!�o�>����2M/V��`�U�[.m���|2M/V�� ��M��5�_,4��hB���Do�_,4�Xh~���yoz�r���J�k�G�/e�,�Lhj{�U�`[hF������������+��J�A���~�KL���!��n�]�`�C�����S+�v�)n�PP\�
�7\~`��	��!l�ZP����K��
�v�)&Z.(n��������fE���h��H{|���M�V;�K�I	��2�����S�K�-$B���"��G�,�����Fsl�4R,K��b ��M�3���E���=iZ��h3�VZ�b��^��!{�9��f��2A��[���-1����*�WZb�Xh���t�?��Bo�j;��I��S�G�A{����
0�JFq��[�[�E��n�B�
�Tt_�1�����l"���
�(e_�o�n����f�W��	b�[?�9��*�B+A��[����w�g��I.���1�uc�ET��Z��.����=�em����-�:��>��7-cb�en1�`�@��7�Ec6'Z��H�E���#�S���~������5�g��]��h��]�������Th�����.��v��_�W�c��1�VZ�(������U+-cv�)���-���>t����{����`<�a�6+Z���.������&�O.GK�h����S�����V��bx�U��x��	��v�^f�Y����������{�0X0�K����q����z�y>��a���Q��w#����Y�=��Hk�d�A�!������iI��O��H1S��`{�Y��(UZ	){|�������Jk����H���M�����v�}m�VP\��A~�^���|G{�r�On����������>�s��nE�c�o���:����k?���(����X��T1�����.�^�oe��/{��A
`�Bq����}f�h��M�}� �A����=����>�i�o�H�O�m��S,���=��C"v��7G/~��~����C��>�O��Q����&�aXQ������3-u(���������B��b�������Li��j�����o��Le�[��~���w:�L��>pC9n[�^�^��nC����k���:��i�CyJV����KrzSJCy1�����o8�Lep�~�'�(�={���4�����o���L����V�O�p/O�����u�=���^^G�	��u��������L��>�\���x��3-���k�?���<�>
���k�?���<�>���r6��������Lyp]��:\���5�{S����3�O�p/�����u%��p�������0��Ds�L^�z�^���b��E��_�����:�4�=|��r����c�����{�6�Lh\W7s.�\���^��
���\�K"���0��u���p�������2��6s.�[�b������um5�����/���L������p9���2��mp]K�:\���uB��)
�k�\���n\���n
�
�a���J��a���u(��C�������Yy��<ocS����<G+�q,`�q(�����|�v�?�C�Tw]�
��?��C���<��b��Xy,cS(Cy�V���:0�:��f��YymcSnCy[�����%�^����ua5��{�����L�������5��_<��mp]H�:|A���z��)
��\��>���0��u�������_��L�
��Vs��[���^�������<�>�������^^F�	��u[1��;����Lep~��>�����J��:�t�=����3�0�.FsR����^�������^^G�	��u����U/��L��K��)���f/gZ��`�C��x�����:���=����3�8���d��:�L(�K�\��n�k/`Jup]^�u����z9�:�.o�:�h�G/��i\�����QG/`J��r1�!�Y<��Lep]n�:�-�=}������7P-� �hX��-����z��1H��X���Q�0T����7�)06����{lB�be�jAPl�Jb=!���-N����z^�aJ��p��o�������E-6<�X�R�)R��&�E�B�b%Q���06�:9����t�BC$��=�����`�Y^q�@hC�b�,��I �!t�J�W��tMQN��h��S ����"�����"Y^1H �!t�L�W���]����tb!BC ��= ���e�@<1�E:���E��b�@�D�b�,��'�X#�+��K�&�X�Wz�d���J��	b��t�'BKdy�M:1����b�@(E�b�,�X�Q���^-�a�
�h+u�*�	����],��7��Y�.V���I:�!�,��������`)0�$&h��
$��@��!�X�H,n$�7�����Hb9�X�T-����Dbu���z��Ge6|����!����E,��b�j�PD,V���r�j�XE,7���j�j��D�-$����jA�l8u@����Y^��7N6��o�����X!�+&��s�.����E:a��!������p��m�@h1�U:A��%���&�X���
Y^1I �#t�F�W,���M,�U9�"����"Y^��@N#u�@TF����.V���Y:Q!��!$����p���P 2���"����"Y^1H T$t�L�W���	]����tGBC���=z���: ��!&�J �$t�D�W�X��S�D�P��I:A%��5��b�@lIhb,{�����b����a�3�����dG$��Z�L^G1d��PIL�L�H�g����Z�L�&�����-���+��L�V������dG$��Z�L��b�$��Fb�`��Hb=��H����&���D��`�p�d��F�W,�0	M�e����S �ndy�U:&��%���&����*Y^1K �$41$��Z�LN�L���`�p�d��H�W�0	],���tLB�dy�,�����X�jA0m8u@Y��XBLp�@�I�b�,��`�X&�+F���.����E:&��!����`�p��jG�7����6�:�n�H,Q-�I �$t�B�WL�0	]����tLBCb��=����m�@b	1�U:&��%���&����
Y^1I �$��%�{��`���,�����U�B 1;��UZ�i�7������&b9�X�$V#U�(b5�X;��^-��
;�2I`�$&�d��B!�X�Z0���b%�\�Z0V���r#���Z07k�5�$��Z�LNV�$�\�`�X"�+Z�i��B�@b�j�$����Y^�H �$41$��Z�LN���H,!&�J �$t�D�W��`�X!�+&���.����E:&��E���\�`�X$�+���.����`�p�����X�Z0K �$41$��Z�LN��$�\�`�X$�+���.����Q:&��U��b�@�IhbH,{����R��:�%�W���.�����tLB+dyE0m8u@.�H,Q-X�`��^-����-�$�hX�a�`��Bb=�����Wz�i��(�L*�	Z�i���LUZ���=�$t��P���6|%��I�J��`��@b=�����Wz�i��Q�$p�HL�LI�g���Zp�"�$t���Z�LN�L����E:&��!����`�p�d���,��J �$t�D�W��`�X%�+f���&���Wz�i���IY^q�@�I�b�,�h�
�@&	�dy�(����*Y^1K �$41$��Z�LNP�$�\�`�X$�+���.����Q:&��5��b�@�IhbH,{���6�:���H,!&�J �$t�D�W���S�D����I:&��5��b�@�IhbH,{���6�:���H,!&�J �$t�D�W��`�X!�+&�����r�L>v�e��������X$��@��!�X�H���;���-�����r$��Z0G������X�jA0m���IC&1�%�X($
��B����X�$+��J����Xn$���F����X[H�Q ����`�p���R ����*����Y^q�@�I�b�,�h�
��:�%��tLBCb��=�����J��b��tLBKdy�M:&����b�@�I�b�,�X�`��^��H �$t�H�W�0	],���tLB�dyE0m8u@��H,{���6�: -�H,!&�H �$t�H�W�0	],���tLB�dy�,�����X�jA01|��+uK�	��0	],��7���.V���I:&��5����6�: 7�$��Z���kB?	?�z��g~<�����G�R��<��y���#Y������s?��K�����s?��K{F��Zb����������dqe�~�;��*�Q����c?��J�
JTv�'�#y����U�Rv�g�#y�����:����3Q�8z����m�8�L�*��pr���G��K8z������q��(U=��d�4z&J��q�$;���0Q�8z����2z�e/=��qO#;����.Q�8z����q�8rK�*���s=�����_�\G�#�D���qO w.��q�������=~�F�#�D���q�;���*Q�8z����y�8RJ�
���z����GD�R���9��?�<��p��������'Q�8z����i�8�I�*����s=�X����!��F�#�D���q�w����J8z�����q��(U=��b�4z��_�9��q�;����!Q*H?������C���#�O�p��*v������aT
��b�b�R�mT�+�mT���q����<K�\��T#�*��pg�-��������y��9�Q)d*U�#����J�P���Sa�v�uT�?�p��W�<<�\��T�
�?;$�;�/��d�=��a�m�82F�*����s=������=0�\F�#]D���qO;����Q�8�������F����8z�s��it&r@��d��3=��\Fg"D���L�:���H�oQ�-�3=��Fg"��?r%8:����qt&�?�+G��3=���Gg"��?�$8:����ut&R?�*���og�%����(���s������3=����/�>�#4�������y�8�>��6���=��\G�#�C���q��v�8�J��j=����G��R����uN�����Tq���u���qD{(U=�Q]�6z�JG�KN�c�ODVz��������v�d���a�Z�g���(�#��^-���
���<`�$&h��
o$�=`lT-h���K	]�,T-h�
_I��z��R��e�6<�XO�:"������mC��6�$��G��0E��0��'��$��<��S �6��b��%��&�(�Wz*h����7���*�K	],��7�\�H�b�,���p�"��!������p��~�@�W\�p�"��E��b��%��.����Q:�,�X%�+ZZh��r�@���=0���e�@�1�E:�,�X$�+�\�H�b�,��p�"��5��b��%��&���Wz~h���J��b��t.Y$t�D�W��p�"����b��%��.�����%�p������jA�m8u@[�BLp��%��.�����t.Y$t�B�WL��d����&���Zp�m���Jb��*b!�X$U� bq#���X��Z0n"�#��Hb5R�`�"V��Q���{��'�6|���!����E,��b�j�PD,V���r�j�XE,7���j�j��D�-$����jAm8u@X�BLp��%��.�����t.Y$t�B�WL��d���Y^�H��EBCx��=�����J�k!&�J��EBKdy�M:�,�X!�+&�\�H�b�,�X�p�"��!�����t.Y$t�H�W��d���2Y^1J��EB�dy�,�K	M	e�����S$;������t.Y$t�H�W��d���2Y^1J��EB�dy�,�K	M�e����W���R ����*�K	],��7�\�H�b�,���p�"��5��b��%��&���Wz��0	?V`���6��X�$;"����`��:�!��Jb�`��Fb=��F��`bx0	]�,T-h�
_I�g���R���6<�X�$;"����`��mC&	�6���G��$0E����0	]�$����S �6����6�:�dG$��Z�LN�L���W���.�����tLB�dy�,�����X�jA0m8u2I` �+.�0	],���tLB�dy�(����*Y^1K �$41$��Z�LNP�$�\�`�X$�+���.����Q:&��5��b�@�IhbH,{���6�:���H,!&�J �$t�D�W��`�X!�+&���.����E:&��!����`�p���R ����*����Y^q�@�I�b�,���`B���Zp0m���I�Jb��*b!�X$U� bq#���X��Z0n"�#��Hb5R�`�"V���,����`���,��Lb�`��Bb��X,T-���Jb��X�T-���Fb��XmT-������u�^-��
�+uK�	��0	],��7���.V���I:&��5��b�@�IhbH,{���6�:`����Y^�LN�m�H,Q-�I �$t�B�WL�0	]����tLBCb�����.���A:&��e��b�@�I�b�,���`��^-��
�@&	dy�E:&��E����6�: E�$����0	]����tLBCb��=����: ��H,!&�J �$t�D�W��`�X!�+&���.����E:&��!����`���p�tM��e?M=��R�E��	z�b!10��zMh���������	�Z��������	�Z0-$f&6�3aB�V\I�Ll�g��^�H���wbZ��Q�Ll�g��^�Il��~lB�VL$f&6����V��u�NT+Rx��7��lB�> u����Q �D�"u������w�Z0Sx��
�:y'��<��p�6�U�:�Ll��;Q�H�&6D����V��2u�NT+Rx��
�:y'��<��p�6�U�:�Ll��;Q�H�&6D����V��2u�NT�0��Q �D�"u��}n�&��Rx��
u�NT+Rx��
�:y'��<���B�����`bC�@��jE�0���Mh���6����V��u�NT+Rx��
�:y'�+u�������G;`0�!�$V�V$���@b1P��Fbq���X��Z1����P#��H����*w���Mh�;`0�!d����"b��X,T�XI,V���r�j�Fb��Xm$VU����t��&��Rx��
u�NT+Rx��
�:y'��<���B�����`bC�@��jE�0��
Nh����%����9bC!�"�D�"��3GlhdZD��f���3GldZD��V$�z��
�L����dZ��!�iQ�Z�L��#6T2-"JT+�i=s��L��U�L��#62-"JT+�i=s��H�mD��V���g����Q�Z�:�3Gl���(Q�H��c��;�	�Zq���6�D��V���u"JT+Rx��
�:%��<s��F������9�
��V}@����>2>����a�Z�i���L�#2�^-��
��2I`�$&h�
o$�3I`lT-h&��+0	]�,T-h�
_I�g���R���6<�X�$;"s���`��mC&	�6���G��$0E����'��$�$�L�����Y^�H�
LBC���=�����$�Y^�LN�L�����t��$t�J�W�������9�jA0m8u2I` �+.�����"Y^1H�
LB�dy�(�+0	]����t��$41d��Z�LN�L����t��$t�H�W���S�H����Q:W`�X#�+�\�Ihb�{���6�:����!&�J�
LBKdy�M:W`�X!�+&�\�I�b�,�X�p&��!s���`�p���R s���*�+0	],��-����-Q sD�`������q�L>v�e��������X$��@��!�X�H,n$�7�����Hb9�X�T-����Dbu��{���6|��$�!����E,��b�j�PD,V�����R���6��Xn$VU�&bm!�F���Wz�i���J��b��t��$t�D�W��p&����b����.����E:W`�2�^-��
��V�\r	1�U:W`�X"�+n�����
Y^��PN����,�����`�j�E:W`�X$�+�\�I�b�,��p&��U��b����&��Wzj���B�b��t��$t�H�W�����2Y^1J�
LB�dyEKCm8u@��0{�����R��:&�W�\�I�b�,��I�
LB+dy�$�+0	]����t��$41��Z����xg,�$�hX�u�`��Bb=�����Wz�i��(�L*�	.U�z�I�b�Q����LB+UZ�i�W��$��T-h�
$�3��H,{���6|��I���-�����z&	L��71-LB+��-�����$��,�X�`��^-��
�@&	�����tLBKdyE01<S �V��b�@�IhbH,{���6�:�$0�����.���A:&��e��b�@�I�b�,���`��^-��
�(uK�	.�0	],���tLB�dyE01�P�B����E:&��!����`�p���R ����*����Y^q�@�I�b�,���`�X#�+���&���Wz�i���J��b��tLBKdy�M:&������^�Z;���Zp0m���I�Jb��*b!�X$U� bq#���X��Z0n"�#��Hb5R�`�"V���,����`���,��Lb�K�PH,���C�XI,V���c��H���;�F��`bx[H�Q ����`�p���R ����*����Y^q�@�I�b�,���`�X#�+���&���Wz�i����:�%�W���.�����tLB+dy�$����Y^��>&��!�����tLB�dy� ����2Y^1J �$t�J�W��0	M�e����S��:�%����.���A:&��e��b�@�I�b�,���`��^-�&���y�@b	1�U:&��%���&����
Y^1I �$t�F�W,�0	M�e��s?Y�[�	mM{@\E\Ft�~&L�����,��p9�U��b`bC?&�j�Fb`bC?&�j���������	�Zq%10���	z�b 10��BNh��F10���	z�b$�ML�[�	�Z1����P�"�	�:�Llh����H�f��[�	����`b�F��L���`bC�H|&���<���J��L���`�
�����H�&6��Lg�G��"u@�3�#Rx��
�: ����<���J��L���`�
�����H�&6��Bg�G��"u@�3�#Rx��
�:����u�����
�	�:�����Z��<����:�����<���DP�L���`bC��t&|D�0��QT:>"u��}n!'��Rx��
u@�3�#Rx��
�:�����<���B��L���:��}��BNhk��0��V�3�A�b 1>>�Fbq����	0�X�"V#�����U������8v�`bC�$�g�,$f&6�Bb|&|�Jb��X�$�g�l$����Fb|&��k������H�&6l����H�&6$���g���
u@�3�Rx��
�: ����<��p9�U�:�LlHdZ�(����9bC!�zD��H�����#�6���i=s��@����M�L��#6D2�G�m�dZ��!�i=�lS$�z��
�L�e�"��3����Z����9bC �zD��H���"�=�lS���g����<�lS���*u�G�m���9�
�����W���a����M�:�3GlH�Q�)Rx��
�:�#�6E����QxD��H����BNh���[�������o/��/o��������������7�
�~������qJ�7Jw���yH���>��_w���7}����?�p�������/����u}y�_~�xz�Oa�-����Y��>������?�����������w/����5�o��0�������gO	��a�.|�n�
��YuI�\����w���S���{;aiy.������GlK8���bp�L�
G\����V�1��������v�L��w�\���M��iGLd�����:�R����~}���1�
GL����3:"��#�<�����~�j�#.�q��;b"{w���v������-L�����#&��8�R�����#&��7����xE��Q���,GGLd/YG\�;8�R�r;W�u�y&���7��_�=��������'|2������%�v6u��s��Of�W��Z]����������t�&�A�I{�Rc��/Yj�P'����=&�W|�\�;��R��0r�)#���<�����}��'����D���?��|���s���O.}������	_�]��&|��4������v�D���KuG\���������K����V��������3��+������KuG\�[J���D��w��2f��]���3�o���3�+q��;�Z];F�d�}j�#f��]����cf����s&{������#.�uGLd��!�p�D��+�I���}s>���^��Wt���\�|���1��7���	_q�(�����a�L��s�kuG\�;����hk6�3}����7�#�������O.�|����s�����I��d"���x^�1�7�����)�����ku�3�s�=E=*k����G���1��|�9�����Z����z~��w����'�'������}s>���~q�=.��q���_�����1}���Do��#Ng�3�K����TwX�����l���.Xw���}s>���^���t��\�>_[w�d���u��ag������UK8h��O>g�W�D�������s&{�������2���������Y����#.�uGLd�\i5:b"���.�#�1B��|�9����c�+���?
���^��1}��\
>��`�Y�1,��|�9��"M��z�Z]w�D���=�
*������~sE~q[4O��d������B��~y�������5l*�}n5����6>}�����y�_=V�mb'����\r�d���_��p���=~�d�Xr^���ku��1�=w�����������y�L����kuG\�����^r��k�,0j>fe���8g��8�R�����#&���G]?/|AtU�1��|�9������#.�q������	�7d�G�����'m=fe���8g�W9��u�\�kG���%w��&|���m�kO;b"{�#.�q��;b"{�/�������v�G:�f���;g�_�^���0�=.�����s�en���Ey�L�����cl����s&{E�u����Ku��/�����u���G�c"����s&{�#.�q��;b"{����/������~�������������xNe/����f��ua������������Ht����l������T�G��{r�y��uGLd�8q'�/*���_pR�t��;�qNe/8�Xwp�������5������V�r��;�qNe/�=��uG\������s��y���r���;�qNe/���b]w�k��~a������*|����av���4s*{������#.�uGLd��q�������;"�~��l�9��bey����Ku���#�?�u���;	o]�,;`Ne/q����#.�uGLd�|�m�w��������}:���^��KuG\��������pGL���5�r���?`Ne�p�����ku������w�=����o<n��1	��|�9������]f^�|��1���q���������#�Yv:��������uGLt�������#��W����!y���0g��#.�q��;b"{��5�
��S��:�O�t�9���N��uG\�������>7i���'�:����#f�W�U���#�����{�s�>5�m��iN;b"{�#.�q������{�#�f�4M��R�����'�������_��
���������x�'Z��s}2�������n2K��t�~{�O n��W�v�����Gw�I�x�x9����&�xy��p���~}�&��|�������mrY�i?LD/�Y�b�����&������q=��go��������?=����~��+�_��\`&|����o���5-~����&���.�=l�D�<S���~��V��1��(��I�85��&?9z��1������������c"}���j��er����D�����t�.2f�_�_d�d�]S�~N���_�8��M�M=������6��~��^���\��O�����o��R��������;y[g��z��O-��}����%�^��~/f���p��k�\��������������b]?�\������8����)�OK�����g����s&{�Rt������.E��5��A�I��w�����.���|�7��F�\)s�h1�=�������R]?ZLe/Yx��/��0/����:b&��������ku��W����j��az��������L�~m��G	�i�W��{�k���K�X1�/�}�j��q��=���o��Vw8VLt���M�������c&�����g���kg�W��{���Z�a}9���5�����|��:����:�O����>=^�~������U����W��8VL�/�v�,�X�t�9����+/���c�L���_��_�K1��J�W��?�S�Y
endstream
endobj
36
0
obj
15927
endobj
37
0
obj
[
]
endobj
38
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
39
0
R
/Resources
40
0
R
/Annots
42
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
39
0
obj
<<
/Filter
/FlateDecode
/Length
41
0
R
>>
stream
x���[�$�u���q�lp�6=?@|P3��G%��mRm�0��5 �)�������{�Zu��2��8�������^yYY�_���|��/�Z
��������>�|�O��e��P��8~�l���}��w�����u��u�������������`�����>o����{'�i@p7�m��~|���?n�����)_������t�)�[���&���t����/q{a����}����q���m���i�4�z��������>����0�g��.�J����i��LT��~������������]���>���n�K[eqeT�O��Ocp�e���xy!�^�����`{���������i�4��\e�*�}��
��LW�/����@���n����/om�o������|���=�����w�;�7��Y_�
��[���
���l����{����x���?=����������G��6�?�����7�|���_<����O����=��O�?����?~����������WO����>�����z���Z����������/�~��z���Z�������������=��������W�����o������~q����_=��rk������G����=���#3�N�����
����L{����:��s����~��������V��g��+'��r
���J��gNB|�Tz��y:�
��V��|�����2�z<�+n�`�u^_^:��:l�)B���tCy��U7��P�U���G���~9��
�@����4(�w���}������ %�w���v����������|�`����c�`'���W��ug
9u/?v�[�r�����c
���&��r;
�����&�]�M��S>�Vn/��q�c�0��a����c�wXK���i/�"�	����2Lp�@Ft�uj���>����s��VL�0���Vo������C[N��j�x�S�=������j����!����~q�ULS;�9U����&�w�����tz����|a�(���+�q������6���4�����k%��i�������M�|�w���p�F��c�S�O�2^���-���������$��/s)�]O���?ew�{�g8��Sr0��L���\��E{�a�0�aJ���{�/����9�]�`��{,����s������y���yR�2x�����~�&8v�3
�E&�w7<8L���]�'��M,d������Y@_h�g%��!���z�){�+�
m^	.�|���rI^��w5����"��5��p� "�	�a�=�Z������z�P�)��"���5t�K���t�ZZ���A�.+Lp=���u�$�$�� ���n�x7���/��,pa��M���c����h�#��tk��$;�9����A�����V��'��s������b��Q�P��
&�].)l�K�|�2��L���/V^���K'�`^����z��ui��
��=L�0�u�tZ�>��e6������N;\K.�����f�(������|M2���a�o��p����x�\��^��e�;�Kq�Y��*�{?_v0��o�����T����L8����!���2d��,f���2d���}�4"�*f�!�k��>&�IL0�\�����LvG$����3������_<��+�0��az��|�.5X������&�w�u��?&�����.k�]�� ��|r�HTx3;�����3���)�
S�pr�}����.�|�
N���������e_:
85��b�i_�`����M��9�1�=a���p:���_�I�rT��5\��o��d$���8Coh;l�@X��]'pA��0�}
N�����	e�W����4-"���2!����A��?���l������B�������:833���������N$98����1�2i���p85��b�iO_�rQ�s����'M������c��X,p�z7VWX:��'�
u���Y�P��p�,��u��R���H�k�S�8G1�W����
��W��b/��v����t8M��%���)��)����T%8�lh{�p�`L}7���YS�SH�p
IN���}�����	#u8a����>&��1A��/N����p���"�?��T��{C�U�C5��,�8�� ���2�Q�1�;���l�]�
�����p�����L,���tQ�pg�_y��n�6���
�!��Y����%����cN��pJ
A���+��;�-�{���9�����P�����76���:��Db`�p�"���U�Kb�p�*N]%���qZ��E���H���O�'���������s�p�+�p��)�1�x��[d_:8���4�g��J�J������'4����~��J�!og�?����y�P���u��D��/�Y�r���w\\?�?}�p^���������{�*H��s��k
p:e�=~�j�[�
m�	���K�b��8�K�`�S8c���XMp/�����uc���lz��6M'���h�<`L�d���M-p�P\*����ym���^��b�yv�DD���c�����c��
.6�I6W�2xL�����s�mf�9���d�:)�`�=����C[Z��]��Y\_4\5lh3p����������Q���4C��N	.Z��F���[�_��aMSp���M1�uc����t''{�I����B�_^�/�6�V�k��Hu�ap�}�p� ��q�_�~���]<���"��
���&,��_4��RfU�z�V��>���+�/�{�@!����XHq���>J����F�0�����{����������%���LgEZ����9�%��@�]@�R��#\�lhS�p��! ���3���.`z�+���Xz�9{���
mvN���+�.������V�ta�p���U���d<�������?���+�_q5�o��|Z��Nx;�|m1��/����ND_�0_J��6����(}U����D��V�:��?j�~����c����q�_�(�vjoi��86|����~�%�U��,c�Y���b�pm�5w��S�U�Y���b��~�i���p���d���1�o�Cl�6��m'�L;��^���s�����90��oZ�j����3�$�%�n'O���������r�<M��dC��2�{�/\{�nmr'N�wkW��y��=�5x�k�87�6/�H�W�q���LS��1�������)�S����bNv�q��{}�P��'k��g0��YC'�w}�����j �2�����9��I�Q���T^�������_FRmSy�Z>��f�
�d��|{������'7�#7�'���q��!�Q���T^���gU�GFR	Sy�Z>��%�
�d����d�g�q+�'F9�KSy��������)L]'�N�L��GR��N�[���O�GR��n[{��~���:�[��q(]�K��?�>�#�>�G���iyvsRtSy�Z���W? e?����5hysR
Sy�Z���t��V�$�~�J���Zg�5G9�OSy�Z���< �<�����hy-sR.Sy�Z^���: �:����]�N��mH�O]�v��]t� n�#���B���E������4u](�u�$����Q�T��M�N�9[�� �6u]t�u�z����Q�����A�N�9[�4
���u1i���,gK�FR��.�:Yc�l9�(@*S���]'���-��
�b��.9�:Y�l��(GrS���]'���-�Ha�����d���1�)O]��v�,�q�e ���R���59���lH�O]��v�,�q�Ld�#���r����-��`��8u]��u�P��*�Q�����U�NV�8[H0
���u�k��:g��oH�O]W�v�,ep�)�(G�S���]'��}�=
���u�h�����>BHe������cug�nH�M]W�v�|�����Q�����A�N> v�q�(@
S���]'�:�<o ���j���<�}T6
���u�i��'��>��
�j���9�:����G<��M]��v�|���Q���kI�N>dr���(@JS���]'�8K�GR��N�-���#�����!���
����<�}F����Q�N2}g��(@�S���]'����w ���z���p�Y�:
���u�k�I�<���
B����M2s�;�q"A����i�f�Aal�F����i�E�����Fs�!A�("t�M�y��tk�@D���Y#��4R�"�f�M#E�(�um���4#���
5-���F"�Tjv��+��pD�V�&�$E�7Q�`oPM���� 6������jBKYd�HZM,9#��E�{��`�PM�	� 6"���P�Al.%�������4�I�"�jV����&hy�@����
�<c"H�hb
Z���$�1�t�j�)����4��]'��@,:��	�#��A,{��	5
���j��������M�F5�%E:|v�FA�1��O$3��b9C5a�$���b�@5a.$V+��
b�B5a�$��up��K����& i��zr�$P�&V��9@�(@k����L�pp@h���F5��T:8@R*#t�I�M,A�3r��X�&V��9@R-@k���� ��I�5�	-��������u��#H�hb	Z�1�$
4�
-������X��g��L��RHF6�	-3����������'H�hbZ�1�$S4�
-������X��g����UL��QMh����M�=9@�8@����� ���5hy�B��P�$������pp@u���D���$�4�-�����X��gL���M�A�3r��}�*&9��&��O���H�'b�� I ��%hy�@�\��
�<c"HJhbZ���$3T1IG5���:�=8@�C#���M,C�3Fr����&V��39@�F@����� �#��y��r�)����^F�XQ��WV�
cC��P�96V�sG��Q�9wVl�����-��
�^����GEf�Y1TS@�X1ETLKDfM9�?�)'�'�(�W�)�/ 6�K�\��PSN^Al���B5���:���.{�jBM9ux�\�XsTZ�)�G�	hb�����:���.��jBM9ux�\
����r��b#�(���&��S��YL�K��@�PSN��R0A�3r����&V��9@RN@k���� )'��i��UN)�����`� F�:�Eb��XvPM�eb��X�PM�=��b5�XPM�)�� �gh�9�	-����4��	�}"��A,f��	c&�\@,��	s!�ZA�V��	k%��@��$����r�pp@���5E���$�4�-����r�X��g,�I9ULb�QMh)�D�XS�9@RN@K���� )'��hy�D�����<c!H�	�bk�jBK9u88 9p���"F���r�X��g�I9M�B�3fr����&���+9@RN@�XsTZ������$�1BO����2�<c$H�	hbZ�1�$�4�-�X��r�������RN( ���zr����&���#9@RN@k���� )'��I�9�	-����	.�<�#H�	hb	Z�1�$�4�-����r�X��g,�I9ULb�QMh)�4�XS�9@RN@K���� )'��hy�D����:�<c%H�	�bk�jBK9u88��Q~�-��)���XS�	#9@RN@����� )'��uhy�J��P�,�#�B�RN+�M`��r�(��++�����bn��+�����b����;+6���������l)�UxP��R9xTdv�C@E=N�5�����)�b����)�v��)'�'�(V�)�/ 6�K�\��PSN^Al���B5���:���.{�jBM9ux�\�XsTZ�)�G�	hb�����:���.��jBM9ux�\
����r��b#�(���&��S��YL�K��@�PSN��R0A�3r����&V��9@RN@k���� )'��i��UN)�����`� F�:�Eb��XvPM�eb��X�PM�=��b5�XPMX��b}v������RN>;@�K��@��'��b����0f��r�Z��0��j�^���V�
�:8@b�QMh)��XS�=9@RN@+���� )'��5hy�B��P�$����r�pp���Z�QSN� ��Tr����&V��9@RN@k���� )'��I�9�	-�������k��#H�	hb	Z�1�$�4�
-����r�X��g��I9ULb�QMh)�d=�o��5������kJ5a$H�	hbZ�1�$�4�-�X��r�������RN( ���zr����&���#9@RN@k���� )'��I�9�	-����	.�<�#H�	hb	Z�QSN�	 ��T&r����&���9@RN@�XsTZ������$�1BG�����<c H�	hbZ�1�$�4�-�X��r�������RN� ���zr����&���5�������kJ5a&H�	hbZ���$�1K5������
fXj�+
2�����bl��*0�����b��X;*0�����bs�(��(0[�i���<*2;��!�b��*0���)�����
��rn�7V���L���w8}1�q��3Y)c��4�<��g�R�:+i�9x�$�d��mV�ds��C��J������m�����#�c5�<��g�RF?+i�9x��d��aV�4s��+��J����3���3���p�������zJ)���bNs�K�)��s�[�9��=.q��2�=n���6��d�R�8��e��7���f�I������Xp98�Y)t(%�nV�������RF?+id9��Y�z(e�R
������2�Y�C��_��IKw�����1�J1A)��7S�yV�J�o���rp-�R-P�8����{��z�R��{�,��X���LZ����-���SJ	��v�r��e�q	1��q�q%���%��R���-��8���%��;�{����a�q�.��q�������\J)���D.s�Kj)��s�[
9��=.���2�=n���Zg���=n���0����R�8���������TJ)!|��%�����SJ)���;�s�'��2;�{�2��������;�{���q�qI'��q�M�����MJ)���5�s�K.)��s�[�8��=.���2�=n!����g���=n	��8�x��V����-^���,RJ	�{k-[��� RJ��`qc��~3i���Tqp�{\"H)e�{�"��i�q���q�������>J)���&ns�K�(��s�[���������T1�=n1��0��d�R�8��e�����8J)��� .s�K�H�K�%����}�q���{�=n������f���=n���8����R�8���������0J)��[&���%^�R���-.���lQJ�����^�.��o�O}>���!V���w�@.6��
�r��w����j����y���9���3�����r
���A.x,�q�H.�K�wACAI
?#N�;N ��3�k{�JJ�O�Q0�PcF^@l����@5�&�:����k�jB
ux�!
����7��b#E(9��&��Q�����&��j���=��,Q�x�&��Q�q�`PM���� 6����jB�ux��$T	�9@VR�X��g�R��$Z,���� +)M�A�3r���1��j�)����4c�]'��@,:��	�#��A,{��	�'�@���	k �A���DqTZ8��gh�(��Db1���7��	5����r�Z��0��j�^���V�
�:8@�QMhY���Q�=9@VR�X��gL�YI	hb
Z���d%%��I�8�	-��������7��#�JJ@K���� +)M�@�3j������$x�j�B����*&���&�S���H�(b�� +)M,A�3r���4�
-�������:�<c%�JJ@�(rTZ������$�1BO����&���#9@VR�X��g�xS��rH,)��� +)UL��QMh!��pR�=9@VR�X��g��YI	hb
Z���d%%��IJ9�	-�������T��#�JJ@K���� +)M�@�3&r���4�-�������rTZ������$�1BG����&���9@VR�X��gL�YI	hbZ���d%%��I�9�	-������c��'�JJ@����� +)M�B�3fr���4�-�����>;����y�G�`6�E���� ���*�����sl��;*�����s���*6��m��e�V�A�;����"���*���)�s��"*���%�����vh����b�+��S���`.PM�)�� 6�K�Z��PSN�@l���A5���:���.J�9�	-���#�4��@�PSN�Al���C5���:<��.[�jBM9ux�\�XsTZ����,&��`H F�)�Hp)���9@RN@+����r�pp���
Z���$�1�5�j�)����4��]'��@,:��	�#��A,{��	�'�@���	k �A���XsTZ���ghp)��Db1�X� �3T�Lb����7��	5����j�^���V�
�:8@b�QMh)��XS�=9@RN@+���� )'��5hy�B��P�$����r�pp@t��5E���$�4�-���r�X��gL�I9M�A�3j������$����r�pp@r��5E���$�4�-���r�X��g��I9M�C�3Vr����*&���&��S���H�)b�� )'��ehy�H����*�<c&H�	hbZ�QSN� ���&��S���H�)b�� )'��ehy�H�����<c!H�	�bk�jBK9u88�:p���"F���r�X��g�I9M�@�3&r����&���9@RN@�XsTZ������$�1BG�����<c H�	hbZ�1�$�4�-�X��r�������RN� ���zr����&���#9@RN@����� )'��uhy�J��P�,�,#�B�RN+�M`��r�(��++�����bn��+�����b����;+6���������l)�UxP���b����<+���!�b
��+���)�b����)g��i������Mo�[+��Lb�v���i�)��2�U3V��S6��e@�fl �)�l���V��ALS��A��j��f1K9e��]�jFb�r��q�h���4��
�v��#�5jZy�P�w�f1K9eCH(*���K9eCH(*���K9eCH(*���K9eCH(*���K9�
�h9�T�qv��r���A,t�&���#��@,;�f� �=�Ub�C5c�H���#�ut�>i��;�0���!&�	�3��Lb9�X�P�X@,��j�j�
b��X� �+T36��y�P�w��S6Dp���RM���r���PT���r���PT���r�
�:�V�`)�l�	E��`)�lH�	E��`)�l(�	E��`)�lh�	E��`)�� ��j���r���PT���r���PT�	38�RN�P��J5#8�RN����J5#8�R��AQ���,��
 ��T3�,��
 ��T3�,��
 ��T3�,��
 ��T3�,���u@��!8�RN���J5#8�RN����J5aX�)8@BQ�fX�96����Z�Cp����!�$�jFp����!�$�jFp������$�jFp������$�jFp���c�<���;X�)8@BQ�fX�)8@BQ�fX�)
8@BQ�&��K9eCH(*���K9�y�P�w��S6Dp���R���S6dp���R���S6Tp���R���S6tp���R���s�`��#K��g��n�cE�7T��sC��Pa�sg��Q�vT`n�#Ey����A�2N�<*�
;�+���)���#*R�i��#O
;N��O���U��
���
55���F*�Tjj��+�� T�V�&��T�7A�`oPM���� 6���t�jBKMe�X
hb�����:���B��jBMMux��
�������b#(A��&��T��YL�P��@���dm(��%hy�@����&V��9@���X��g,�Y
(btn��Sj��gh*:��Nb��Xt �TFGb��X� V=TfOb5�X
 �T�@b=�X��A��&��T��� T0&#���b��A,g�&���r�\@��&���j�ZA�W�&���z1=��P��QMh����S�=9@���X��gL�Y
hb
Z���dm(��I�9�	-5������t��#��P@K���� kCM�@�3&r��
4�-�X��6P�$������pp���Z�QSSH A�Tr��
4�
-����6��:�<c%��P@��sTZj�����$�1BO����&���#9@���X��g��Y
hbZ���dm(��I�9�	-5�����G�
#�<���:P"8@�N�&��Y
hb
Z���dm(��I�9�	-5������t��#��P@K���� kCM�@�3&r��
4�-�X��6P�$������pp���Z���dm(��%hyFMMu88�%p��RM���6��:�<c%��P@��sTZj�����$�1BO����&���#9@���X��g��Y
hbZ���dm(��Y���3O���&�T9Vd��cCE=��
�57������b����;+6���������l��UxP���b����<+���!�b
��+���)�b�����i��
�r~R��m��r��b#���	5����Fp)X+Tj������R�7�&��S�w��@�5G5���2|���&��j���=���R�x�&��S���`PM�)�� 6���k�jBK9ux��$�	�5����	.�<c H�	hbZ�1�$�4�-�X��r����[5��r���\
�b��r���@,:��	�#��A,{��	�'�@���	k �A���XsTZ���ghp)��Db1�X� �3T�Lb��X. VT�Bb��X� �+T�Jb��XH�9�	-������G�
#�<���2<�BH�)��� )'��5hy�B��P�$����r�pp@t��5E���$�4�-���r�X��gL�I9M�A�3r����*&���&��S��$����� )'��%hyFM9ex��XS�	39@RN@����� )'��I�9�	-�������k��'H�	hbZ�1�$�4�
-����r�X��g��I9ULb�QMh)��XS�=9@RN@�����r��( ��Tr����*&���&��S���H�)b�� )'��%hy�@����
�<c"H�	hb
Z���$�T1�5G5���:�8@bM#t�I9M,A�3r����&V��5����*8@bM�&��I9ULb�QMh)�t�XS�=9@RN@����� )'��Uhy�L����:�<c%H�	(b�j�\!O)��&��R9Vd��cC��P17T`��sGE=���5����P�9P�TS�-��
��yT��g�P1TL�C`�Q1ET,�5���2-yP��(����&6n���������a�.Z5c1M9e��]�j�b�r��q�h���4��	x@�fn��S6��e@�f� �)�l���V�@LSN�0n���1�X���'��z�i��S6p@���=�,��
	��vy��K9eCt�]�#8�RN���n����s��O���p����S6�bx���EGb���.���X�$V=������@b=��.�0�XG���Z���S�)b1�]�a��I,g������j1�]�a1M9eC� ���;l ���<�V�`)�l�������	`)�l(�����;X�)8 �����r�
�<�V�`)�l�����;X�)8 �����r���x��Cp������"�.�`)�� O�j���r��Hx��Cp����!��.3fp�������.�`)�l������;X�96���Z�Cp����!�2�.�`)�l������;X�)*8 �����r���p��Gp���c�<��;X�)"8��]���r��(p�����S64p@�{�=�,��	x@��!8�RN�������S6$p@���=�,��
`�h_"8�RN�����%�,��	x@��!8�RN����%�,��
	`�h_"8�RN�P���Vp������,�KX�96���Z�Cp����!�,�KX�)28�B��Dp������,�KX�):8�B��Dp�e��{�r�=�.�3N�+*j*��pC��X17T�
v�Q1wV�kG��P�9R�'��Ma�-��-��b������!�b
��*�8�"e��<�����������|���=��_\����z��{��o���.����o��L>��/z�Y���yC��?���O������z���������o��{
�n�>^N'99��)��R~�����?���/��{���������M6]���7qa-���?<}��pn�&|�ni��?yH�^N.5�{��O.�����[m.g�^���/��1��#��	�z���;b!���;��hG��;u������������X
�?�#jXt�w�;b!{}����Su��8U����1���;��,�����q������`��)������D-_�~�U����(��E�c�B��c�R��cE�\�����G;c%�����{������<�Xg���?�����>v]�_>���b^t���g����{��E������mx�X!�|�gt�R��� �;"��[�����X�����~��;�v��7�Je-���R������R�'Oom��
gw��\ng4���o�����1������v����{��s����M�^V���\V��b!{m��'tDo��x������	��;���y��Su�(�������u��:���x+���+���u�=��>�#����X�^q��K������;"��W�F�v�����Hte������+����^�������p���>{�h�Y�\������<X����.7���XH�rr���m��~4����\���������J�7W��>�>��n�/-�����8r�����D��Oh���>/{�h��WK��<j�����zZ9Y�:b)�x)����9����>){�h�9u�R������SG��+'����
��������>){}8�\�~w�c����]0Oq����X��q���>�����>${�h���K�W���cW-vi������N���3>@�+|����"��	�R����Su�c����A���B�x���=�����>*{}8�\�8RhG��kqO���c%{(����~sRO�}X��p���}w�#������u�'��\c�>���UJv4�\��:�b���/�������G��3b���gtF�'do/�\�>PO��Su�c�����s:��������}��p���}u[�t4�|A��`�~Y����u�B���8Yx��������i�J��	��t.�>��Nw+�#if{Y�����#�>{s<�\�>��m��;�?M?���1b%{���w�O��y��9�f�d_*=u���SG��k��=��q���u��9�\s){���u��X�~wxi��3[J�=#�}�@�p���}�|?u���jSG��z�����/��;b)|�uD��8���)��s�d���'|�q_���6����;c%}B��~��d�1�C�7�������9���c�=����J����{�'�����7�=_�>�Fz��Su��8U�:b!{NG�,<wD��ao�g�+�7gt���SG��k��=�#N�:"�}�����K��OH�����8WW;b%{JG�-<wD�G`o�g�+�3��su��8U�:b!{NG�,<wDZ=e}8�\��9�q�����ZG,d���;�'d���C���������ZMq���wt]]%��=�#���K����g�+�3>���{4�<W�:b!{�J������n��}4���j%���W~LI���SRu_����J��c�=��9�C���Wb�d�?�Xq��+���]���w�����#�*�;�]�d�X[u�����ZG,d�������������r-{<���{�.�����oHG,d���w�;��������=�]N���Y����'�J?x���'��g+�?���~&��~��G��0���s%{����������c���+�c��C�����a�������#���w�����_w9����S{,t?�M���O��|�>�;cYM��d���@s%{F�y������c!{���=�nIK�'c���+��j�#N���+V�����g���M�~}�7����������J��3N��N��Su�#��t���SGT���_���=#�^���
����Rb%|���>����}(���z����#���]�}���1�K�+V��+�	���G����g�+���XO��Su�c���g���I��W�?����}8��x���}�������{�;I������I�_��~�mGs�H����1W�g�v��k��=�=��#V�'#����'.�����,s%���{���	.�d��
s%��)�>%�ni��}<�\�?k�t,���8U����1��7c�>�#�>��x|��=����#N��:����oX	��]������;��C���/�+���g}��A����� nG���)��gO���*�;�d�d���#���v�X�>���#V��:B>!�+�'�o�����}:���Xs%{FTq���wt��J���2xG���������K4W�g|��=�����}�v�X��U��O	�{��b��3W�?�q���{�#N���X������O�/g�Ur�#�g|]���SG,t��%���9�~{BGx��j���<s����yc-|B~u��9��m���9�k.�q�=�j���Z���?������_��}�������I���g�1��r^E|G����	_�~��|�X�|�{��s|K�=���/j?�3�>:{8�\�~w<?[x��;��������T���)������^���}��$�}q���w��}���=�y����n����*@<�w�u_P7��J���B��
������J����G�v�X��g|�v��������s�{�7��>�A���x�YY)��E�g+C_�}���p���}w�e���s_�*l'�����W)������gt
endstream
endobj
41
0
obj
15730
endobj
42
0
obj
[
]
endobj
43
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
44
0
R
/Resources
45
0
R
/Annots
47
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
44
0
obj
<<
/Filter
/FlateDecode
/Length
46
0
R
>>
stream
x���]�$Ir��{��fzf����2"�����]����l5&� 0��Sy���Gu�T�J&m>�'*���y**��������~0J��������mz��Wrpi�>�v4�Fh\�3��aK[zK����m��+��_}�_?�������^|����������L��y����/���?���}������o���{x�)��r��0w��_�{���-�����_�c�||�������8�t�M����3o����O����le��c��~������x�nevQ����o��'s����z�y��c���qtS�����m����O����fe���xy#E���Oo������u���cX}:�����=�{�|�t��2S�����o�������������]�7������
���o�v{���:�o������nU?�+d��������_j�����~���?�������b�k|�=�)�m�~�����>�M��������~�g������������?����?O7��pk����w����x������O��[M���������w���o���)��V~k������}�����t���Z�?]��_���W�����n���������??���S��[�~�(�{r�~��z&#�gfb.�����
�e�J{=��C�����z1�v;rW��[�R��=\?/��%��hJ-�r��(�~p9�������pI���B��x��������u�z��m��������H������;���x�b��u]~
����j����f�.?I���]>^��!J�!J�!Z��I`�~1�}i�.?I�r���������.?����+U�cy��!./���:
�/���}�c�������>��0��F���*Im���'�Q?�h���1l����G��>oG���u�!��z_Z���1���3�i���v���dG������<���3��|�i���
M�x�g;�e���k�]�i�����T���}!���S�9��s�|���~��:l3Gf�U�Vy��(�z�f��|���O27�d<)��������x����1�����S����S+��67��gs����h����\���Qu"�'�&O����v<D<��X����cb[����o����?�>�1��x�w�S���3^���C�L�.`H�������������4':q�i�y���k�</�i�������6��1���3�Zn;C=�������'�k�yn����y���O��<)�n�����yF5��z�x��,�9'0��S�<�^x*�+/��x��;�/���Z�������v^b@Gx��"�7�`����;���^��?��7_^m������C�9�U�~��;&,���D^�9��wQ�B�r���[����ha��O��'�K�3�T��(>7���w6S��|��e��s�y�����_;��c^U���Pn.��+�*���Wy]�����<�W����z/|����2^���\�C�'�?� �����-�g���.����1�I�[k���*
2`��{�a������2yug3���&�x�gQB&6yI��c;�����]�]r��z��4_4�~B����R���5?W��X��Q/��l���N�K���z��/�O����>�k�I�F���Um��
\���.b�Q/�j��U��
������L�m���G�1�\�AuV�����R����K�'��������-����)��S��T�x�����U���2��f@���k��ZF�|_kh4x�������]��k�l�Z-�	�z�n��?��U1��ye�ic[3������)/��$}����Vxa�
/�Z��T`5?g���Wn��
l��,����96^Z��K������'7}�������5T��P�1/u��3���6����w��E�=����pQ�}�����v^���r��=�ae&�r�����4l���7r����9+���l��E�}�QoR�o��8�����%.���^yusg3�������n����n���i�zt�n�IV^�@D��Z&0
j�a"1
����
��f��W4�;H�|+�������
"��W4�{H�>wf��W;w�9	9������b���� ;��k��G���g7�e-\R�b�95555v^�N��1cY���]3Y���u��$������o���K�;��V^��)L��m��{^�@EXR����W<_�f�����4;�wWZ�$��~/2U����y������9:/z�l&6y����E�9��gL^�6><�.�����':y�33�u<��?�<�Aur�����;����/�����Tg�%���T/������Aej�D��(��A�����;�y5^�.�h��m%N�vf�W?�n��	�pX�]�����"��f��=��G�{���6 ��C��:�`\�����uO`Wk��K�9xtg�m�6Z�x�����&����BH�����������:��-�6s����y���W�S���<�\y��y��b�
>�n�L;e����s~�3P?��3��g&����]��?�d<���O*B������u�s����o����T��a�o
w�#��S-��*�E_s	������	O�5��<)��S����[R�95��<'�f��Y�]�<�AK��vZ	��'"C�h���F���vZ3�-�?���8���o<���K�KJy�y���3_��P�����`�����=�C|.��u>����>r�+��o�4nt��$�fO<����<w�����C��Q�����K<����<����>$}��';���_�=���"KN��+�]g��N����W}�v��:��������w��N�6�|.[��Pq��p+_	��EH�jM����x1���/�Yn�����_�������f�����k]O����2�N�/���%8p�yQ�E�/�w6��|����rwv����P�|lF�����&_�����%����M$d@�
_���c�v������M���f������l`�}��*��p�U@���U��O��>yb�W�w?���������l��d�������}�_�m�������f��� ���l@v�.n�0���&���H���~�G&^��Y�[6^�x���6����k����k�n\��,?l�������f��W#���`��_xb\�/P0�������KK���fj�� ����	"�x
T
����� �����fj��9�K�u��]�
+����r��]s_s�b�Q�m�lf4x-������.$��TxqS�V����}piK�2x�sg�n�xI��������������_�p�/x�lf�y�x{������{�UT�3�r�Q����f^���L���&p��_���:'^������<����%]�<�����y���B�|�-�A��B��^������<�W���"���;��N^��~���/)d\�/���O���Q��q^��Y'�_��������+��:#^�`������k��z|� ���z<p���\��_V�8~�{=�OA�N����6���go��vPh8����]5����������0w�Q�j���[��aV�M�8~^y;>�����6���T�����?�;:9�+<^�D�T�[���0%��g�8~x;>vx���=[���F��3��Y����V�k���l��I����:��2�'s��DPa:�+�'Q����SazL�N��	=>4*������wD?��C�Saz��N�\
=>4&��n�����F�T�7[����d��B��1�:��)���hT������N���������l���u��\�������[�m�:����q�����:��4���(T���S<+C��F����:mM���o��
�c�u���)�@_�������
[�=i�b���x����l��]��yo��
��n��W�S���w*L���i�Z���z;�T����>�N���z�m�G'�}�:I�{'o�;��d�t�Z���x;�T�w[��j�b����Saz��NG�:�.�������m���u�]k�c�l::9����Z��v;.T����Y�N���v��0=[��i�b?��xPazl�N��:�&����$�wr(���x�������B�b5rU�\U�T��0W�Q�j���Q'��Y��U�u��:9l�j��C�T��?:9����cs�O�����4n�j��j��j��:9�7�Q�j��=Q'�5Y��U�g���:9��j�]5��)�t=:9L��iNZ����v�SazL�N��u�/�o��
��n�4W�S|�z;�T������N�m��xRaz��N��:�W��c|}ttr����=i��;���N��1�:���)���7*L������N����xPazl�N��u�/c����N�a��lZ����v��0=n�NK�:����B��1�:-E�!���Qaz,�NK�:E~;T����2�N<_��L��a��nZ�Hso��
��f��f�S����B��1�:�U�)���Saz��Nk�:E�w;�T����:�N��]�[��tXe?��i��+1R�m��0i���G~F���7i�F�H��scE��>i���G�$\:+x�,J{V<�&�6X��$S�c���;	��
�%��GV������YS+��H����X��dX�#���P	��
�w_�H���b�Y���[��=��Jx�Gw�$^����
�5���$[�;{$p��A�l+{$��=�l��(v�H��=����(N�H��=���Ykf���g��1��	,y��`� -n����{	�Q����{y�*"h��gM��{�m��n��y��A�l{$p��A2�l{$p��AN�l{$p��Aj�������Y�;���3=�g�����=�D��(V�H`���{�W��=Q�\�g��1��	��g��1�"B?(x�P{�gFb� E��{� �Q������RBf���#���2Cf�8�#���DfUDt��%J�����=� Q=g����F��GK��=�3��g2����=���Y%r<<�R{�g$a��=o�+�����b���9W�X+���������b���:+��
�[��c�� �Hp	��dj�����y���mz�}c�}c�����}��5��\G��<K��=2+���3�������Yq�gB������=�{a�(zN�3HH��be���g��2��	\�g��2��	��g��2�"BT(x�TU{�g���A�*����rVf���#���RWf�8�#�%���}�g�B������=S6��XQ��y� �e6��=8{� �e6��=�x� �e6��=�y� �eVED�P�����`���=�@W=o�3Hy��ba���3�|��bg���3H����d��,X{�g�d� ��gM���Z]�d�����5K2�=*+I/I0<k2�=)"���=K2�=:+I�p���Y�a�1X�Hz��`��k���G�+<&+x�dXz�0�*"	��gM��G"E$��{bE��k���G�+\3+x�}�#f6�}g��k��^��	,�0�q��oy��#?���o�-����4h�lA�)���������(V�\��[A3�Q�l���[A3�Q�l���[A3�*"X�B��[A3�Q,l���[A3�Qll��4k� �c�����43�"�e(x��Y{�g���A�,��7���F��Gg���F��G���Fq�G7�����`
�5h��=�{��(zN�3���be���g43��	,A��`����A�,
����ffUD��4k��H����9y� hf6��=x��A��l;{$p��A��l'{$p��A�������Y�f���33�g,����=����(6�H��=����(�H`	��{f�����g4k���������x�\Y1WV,�<��Kc��X�5V�\�Wl�[g��Y�s�^qV�	���Y�f�A���X8OV��M��o��o�X7V��o^�&V��{b�5y��YQ�#��
�%h�;+N��e(x��Y{�grb� XE��{A3�Q�������ff���#����ff�8�#����ffUD��4k����3�E�s��A��l{$p��A��l{$p��A�������Y�f���){��(z��g43��	��g43��	\�g43��	��g43�"�e(x��Y{�g���A�,��7���F��Gg���F��GW���Fq�Gw�����`
�5h���A3�'��k��Y{TV<�c0�e(x��Y{4RDp,�+z��Y{tV<�c��Y����c����
�%h����XxLV�,A��8�ffUD��4k�D�������%h����X�fV���
G��l��
�%h�����=�{� fVE$�P�����`� ���#����af�X�#�w�$��F��GW�$��Fq�Gw�$����$
�7�$��F��Gg�$��F��G�$��Fq�GK2�=�3u�g�C��&���=�6��`Q��y� f6��=8{� f6��=�x� f6��=�y� fVE$�P�����H����3H�E�s��A2�l+{$��=�d��(v�H��=�d��(N�H`I��{�O��`(x�dX{�gFb� 	E��{�0�Q�������af���#����af�8�#����afUD��K�����=�$X=g�$��F��G�$��Fq�G7�$���(I����$���<#I�p.��y+^1WV��Ke��z��X�4Vl�<��[g��YqtV���W�yF�`(x�dX{�g$���=o�+�+�+��<��W��kb��X�sM^�gV��gf�={����\G��$
�5�����3H�E�s��A2�l+{$��=�d��(v�H��=�d��(N�H��=�d�Y�C��&���=�'��`Q���g�3��	\�g�3��	��g�3�"�`(x�dX{�g��
g�H��{�0�Q,����{�0�Ql����{�0�Q����{�0�*"	��gM��{�n�$���y��A2�l{$p��A2�l;{$p��A2�l'{$p��A2���H���Y��c�b:"B���#�3�4F�q�Oh����i&|4���f"CF���5Sa4w���{`zH���h8n�	M����4���p�������i�����'4�=�/^.!���w���=r�r�����'4�g��]��}>��x'9�~������{`rE�a�Or�b��\��/��T��t�=2���h�T�t�{`*cMg������J��T���aR#�����/�\
��9�tLe��,
�1B\���XY44*c$��=0����hT��o�{`*c�b���Q#�E��T���!����tL'wMa�P������+4�EC#W ��������a�+��J���

_����+��{`~4�&�h��Hj�{`r���h��
���=0�B3W4tr2Z��\��+&��tL����h�?6O��#�+4jE�N�@4+��+4gEC%W ���������+�J���
MX�0�Hd�{`r���G��mB�����*
�Y�tL��`
�\� V�&Wh���A�@
+��+4R=[�������������!������#j���RI�T����I*Z#���{`zj���h��F�������
i�����#��5@EC�$�'w�L��6�)�Fru����It���H�'�8�\�Nnf�����In:W��*%�������a'W a��������+�J���
�J����V�{`r��h��
��=0�BS���X#�v�L���
;���t�L7�(�y�tL��p
�\�0U�&Wh2z4���#������!�+�J���
�D�P��P�{`r��hh�
��=0�B�P4r�S��\�Q���j�P�G&Wh��L�@n*��+4EC!W 4�����������+��J���
�?�0��K�{`r��>�p�'F��\������;[�d��Iy���%M�����
�5P����
����%S����T�tV�,����x$��m��gIV��d�#,�<K�*=�M����<
�5_���
��=K��=2+��p���YRV�����
��<W�l�e6��=�{�`�-�*bS-<k��=�3�4+��G'�l�e6��=x���&[f���#���6�2��	��g���Y�B!��=�M��F��Gg�l�e6��=�x�`�-�Q����{�l�UA,<k��=�3�j�3{$�d���=�2{q�(x��3�d�l{$p���&[f�8�#���6�2�"rY(x��Wz$�LO�D���9y�`�-�Q������6�2��	\�g����(N�H��=�M�����
�5����!���w�H`I~�{f������y���&[f���#���6�2��	��g���Y��B�����#�gff� �E��{�l��bc�.�3�d�l{$p���&[fQ��P�la�A���W8V����++�u��RY�������bi��+x.�+����������u�8+���P���� �H�+�'+z��W�7V�7V�+x�7�X+���=�����b���3+��
�{��sg���A���k�LN�D���9y�`�-�Q�����k�L������z�`�-�Q�����{�l�Uq/<k|�=�3{b� �E��{�l��bc�.�3�d�l{$p���&[fUD��%k�L��3HE���=�M��F��Gg�l�e6��=X2e���)�=�X<7�l�eVE$�P�����`���=�0X=o�3�d�l{$p���&[f���#���6�2��	��g���YC������j2��Iy���%�����$
�5����
����%����W�tV�,����x$��m��gI���d�#��<K2,=�d�Y�C��&��#�"�^�=��gI��Gf�#���<����3����gI��{I��d���3H��UI0<k2�=�3Hz�w�H`I��{I�pe���g�3��	\�g�3��	��g�3�"�`(��g�3��	��g�3��	\�g�3��	��g�3�"�`(x�dX{�g��
g�H��{�0�Q,����k�L+�$����x� f6��=�y� fVE$�P�����H����3H�E�s��A2�l+{$��=�d��(v�H��=�d��(N�H��=�d�Y�C��&���=3{I�(zN�3H���be��dX{�gFe� 	��{�0�Q�����{�0�*"	��gM��Gf����A,�����af���#����af�8�#����afQ�$�P�l�a�A���W8V����++�������\�bi�(���[c��k����������u�8+��$�P����� �H�+�'+z��W�7V�7V�+x�7�X+���=�����b���3+��
�{��sg���A��k�LN�$���9y� f6��=x��A2�l;{$�$���=�;{I�(x��3H��UI0<k2�=�3{b� 	E��{�0�Ql����{�0�Q����{�0�*"	��gM��{�l�$���y��A2�l{$p��A2�l{$p��A2�l{$�$���=S{I0<k2�=�3uc� 	E����af�X�#����af���#����af�8�#����afUD����[w<���[?�j����/^����B�����Oa`V���5��#`6
�;+J2,-G�lV�dXZ���(��(����Q�<7V�d-x(�*DN������Q�Yq��G30��;+J2,-�=�,Y�g4����A�,
��3���h`V��\���JK�
G�+
���5������Ws�k�+-�+��(8Fn��k�+-�+��(�
�WZ
W8�_Q��9��4�p$���+\s\i\�H~E!0W���h���U!2W���������W�UAs\i)�$���=�9��4��_Q���WZ{��(f�h��<��Y'�������g���B`�����R�3H~E!0{Fs\i��$���=�9��L��_Q���-x��*Df�h�+-;{��(f�h�+-�=��W�g4�����A�+
��3��J�d� �����q��=0�B����WZ
{��(f�h�+-�=��W�g4�����A�+
��3��-��fQX0y�����+��
�++��Ke�RY!pc���bk��+����W�Gg������<�Y"�gL�+-y�b���y�Xq��b�X�n�8�bM^�'V��gV��+���3�B����	��
��3��J���A�+
��3��JKe� �����q���g���B`�����2�3H~E!0{Fs\��	���=�9����$�����g4�����A�+
��3��J�`� �����q���E0�Bd�������3H~E!0{Fs\i)�$���=�9��4��_Q���WZ{��(f�h��<<�Y"�g4�����A�+
��3��JKa� ���=�9��t��_Q���WZ&{��(f��W�%��
��3�4�q���a�O���,�����x$�`��P�����h���W87V��5�x�f6����gI���`�#�n�<K2�=&+I�����Y�a�q�fVE��P�����H���WxO��Y�a��Y�Hz�kf��k����W�����z�`�0�Q�����{{��U{���Y�a����`��=8y�`�0�Q�������3��	,Y��`� ;�����{{��U�0o�3�3�l{$p����af���#����3��	��g�g�Y�C��f���=�6��aQ��y�`�0�Q,����{{���bc�.�3�3�l{$�d���=�{�0<k�,={�'��aQ���g�g��(V�H��{{���bg���3�3�l'{$p����afUD2��5k��H�$���9y�`�0�Q�������3��	\�g�g��(N�H`���{fL��a(x��Yzd����$���9{�`�0�Ql����{{����`�n�3�3�,��
�M��=�3�������se�\Y�TV���W,�Kc��X�si^�uVl�Gg��{�1XQ�#wF2��5k��d��y���mz�}c�}c�����}��5�bM��+x��+���=������g�8wV��$�P��Y��`����A2,�����3��	�{�`�0�Q�����{{����d���3�3���H���Y�f����{��(zN�3�3�l{$p����af�8�#����3�"�a(x��Y{�g���A2,��7��f6��=8{�`�0�Ql����{{����`�n�3�3���H���Y�f���Av,��#�7��f6��=8{�`�0�Q�����{{����d���3�3���H���Y��y��j2��Iy���%�����$
�5����
����%����W�tV�,����x$��m��gI���d�#��<K2,=�d�Y�C��&��#�"�^�=��gI��Gf�#���<����3����gI��{I��d���3H��UI0<k2�=�3Hz�w�H��=�d��(V�H��{�0�Q�����{�0�Q�������afUD�����af�X�#����af���#����af�8�#����afUD��k�L��3H�E���=�d��(�H��=�d��(6�H��=�d��(�H��=�d�Y�C��&��#�gzb� 	E��{�0�Q�������af���#����af�8�#����afUD��k��H�$���9y� f6��=x��A2�l;{$p��A2�l'{$p��A2���H���Y�a���33�g�����=�d��(6�H��=�d��(�H��=�d�Y%	><�dX{�g$���=o�+�����b���9W�X+���������b���:+��
�[��c�� �H��k��$��y���mz�}c�}c�����}��5�bM��+x��+���=������g�8wV��$�P�����`����A,�����af�X�#�w�$��F��GW�$��Fq�Gw�$����$
�5���]�#�����K����{I�(x.�3H����`�n�3H��UI0<k2�=�3ec� 	E����af�X�#����af���#����af�8�#����afUD��k��^��	�y� f6��=X�a�Q�3��g�����=�d��(N�H��=�d�Y�C��&����O�`��^d����F����B�����O�`V���5��#`6
�;+J2,-G�lV�dXZ���(��(����Q�<7V�d-x��*DN������Q�Yq���I0��;+J2,-�=�� 2{F�ai����e��3��O�`V��\���JK�
/��=2W���������c���9��L�����=#���5����^�{d�p�q��p�Ww��+\s\ii\����G�
�WZWx�;�s�k��<M�Y"s�k�+-��
����W�q���g��/�=�9��4�L�;��g4�����i|��`����h��$�U!pb�h�+-;{�����3��JKe�t�c_0{Fs\i����w�f�h�+-�=���}���q���I0�Bd�������g��/�=�9��T���;��g4�����|��`�����2�3������-x��*���q���g&��/�=�9��4���;��g4������|��`����G�<M�Y�g"�gL�+-����c�\Y1W�X*+�;���K������c��YQr\i��{����yF�&��
��3&���<Y����7V�7�X7Vtw��+��{bEw�9�b�^qfVtw��wV��3x��*Df�h�+-;{F�����3��JKe�h�;0{Fs\i��M~�f�h�+-�=���|���q���I0�Bd�������g4��k.��q���g4���=�9����&���g4�E�&��
��3��JKf�h�;0{Fs\i)�M~�f�h�+-�=���|���q�e�g4���=�9.Z�4	fU����WZ2{F�����3��JKa�h�;�\�3��JKg�h�;0{Fs\i��M~�f��W�&��
��3�4������:��{��~s��x�����������w�������������.�J{�|}N�~�O�����������P���o�������O�����Mo�|���]^������[.��d�r�o������_����_����x�7�n���f9?���~���5D�*F�O	����]��>�o�}s���)�~���rs�@�����gO)�����:��s}��vN���u��}����=����m����/��J���#���:9W������b�������y�H���?�Lu�����y�.��^>��/���o_��S��=y�?��^���;���g�E������Lu������;��X_�|�����S��9_,����6u�@��3��e	��9�P],t�yzY`��Ta[�
��X�^�z�>]C�D���������8��^�_>mk[�
��8U���B�������.��.����������t���u�H��u�����/�������;>�.r[���>�����t�������������~�}����������X~�������\e�����][����=���@��������b��~�X��o�>#Q]��x���RT���_=W�������t���=g�q�2��Xt���+��������.N6u��}��$}A���()fg�>!�\��?�~���s�8S��c����9u�H�����?�]�����w���_��O����.���h?��]��������w�O��;�6����R8uS{�O��k���T#5�s�'h+���X�>~9A;W�T�B���x��������l���l�����D[�
��8U�T�B�����S�3fsO�g�z�P�9��������mR�V���%�����k���a����Q�������Xj������9��T�?����B�6��s�md�R~%J�)d�{����1�{2H3����yK������|u=����Y|��L5Rcd�z��R���(��9?w_o���'|��~������x>��U�c`�z��R������
��x ������+[@�������s�\D�/q�R���|�����O�0�r���m�����7,���\[^�v/�5V����5g�s��Y�\a����	+�G�O�BG�P�2�w@��������y���w��W��1����������J����F.�|���C��m����tO�Zx��=s�*l��O��3��7V��lic����t�;ck�#����s�M],?�3�"��l��o����p��DW����9��*��D���8%]k�pB0������G���8L}�U��z��=�zr��9o<~u%���������?��QV9��[��'�������s���s���~/9�@�Tm������u���S�m]<~u���='�Zi�����X�t���+��.S�
��X�?!�Z��<������w����..���^����	?�\	�?�'O��_�r��$��Hn~w����������v]���t�9c_����HN�����+�c_P>c�1j��������7g|�v����S���c�{���J����z��u�djB����j<x���k�3����Y��^i����������g�P[��/���/�l}<�~��?+�n�����+�s�f{�|���L1P{���W���#>W�\W	�z]Y��s��R���e�	u���D���uO����������R���1?������~_��{��h�C���~����i�P+5Fl�OH��'��
�s��W���9[{)�q�2�js���J�������u�@��m��CKew�8�'�Z�������\�����+�S�L�H��jy ��V��<�r���M]�-����c����'l|(��C_�.|�_]�Y�E�/_?y<x�����>m%o�=��n�G���j��n��uY�,�O��=]�����~>�j��������x�X�=-��5o����ir�Sx�T��������R��g<�4mc�[��7�.u��EN�W�S��)d�{���K�S����jK���K��g�h�daS�
k]�tO��}�|��%����_�Q����R��uq������)��,�}_��Z%&o����.u�x�����.N6u��=�|�@���E[�����t�{�u�����O~��.��mJ_P>�F6���}�zf��}�&������.����B��R�?!�X����9'|�������rT��}����H	�|Qy$������)A~�|�/"S�1a�����/u����|y3��_��{������R>g�q�2�G�����o.]���[����y�TaS�W�������������r����'��+�����N8�<�~y��g���d.2�S��;Y��c�l������?c8Y��D������9I�J�����V�6_OFW�g<�daS�
k]�u�Xt<R>a�i���IOHFW�g��da[�
���J������Tu���������b����.�|�X��������N��m�1]���dt�{�u����u�~~�����~�&e�~������Zf���6/5w++�o�y�����ne�}����@��-?����JK�a��'D�k�����wg�>	?�YW+���=��X����[�c���	�JW��<�0uq����S��|��=�n�le���N�HW��D��
��8U���B���x�|��R1O�����/uyJ]�*l��TaS�s�g+���[��~8!
]��r�r����s���b��J���X����"�~g�z�����u�J��t��wLu�P>�.����S�������i�J��}��
��x ��s���<|t���9��N��vG����t���m]�*l��Ta:_,�Oy���3~�RG��~8!
]��s9U����������)���;>����m13���}�+�_���<W���#��	���9�����������w���
endstream
endobj
46
0
obj
15967
endobj
47
0
obj
[
]
endobj
48
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
49
0
R
/Resources
50
0
R
/Annots
52
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
49
0
obj
<<
/Filter
/FlateDecode
/Length
51
0
R
>>
stream
x���[�$�u���q�LL�\���lF�=-X�@[�9jS�)>&��MY��}�%�e�u��*H���b*VTT���**��>�����?��O��?����9�o��������:����4��<r{�p<a�#������������������g���������q��b���M��������=����(�������t9����:�
��4��S��x}b�r}��}�����i��������h>����gq�����h>8j�d���IG��|p�2���>���}R����7��g	e�IG����l����:{���y4\�Le�NO$��U���]�\���C�����y4G��Y����Y���C�V���L�<a����e�?<��R��~�_������
�����������/�?�\��"/���BE�W��R�����~��/��O�v2��>��������G{�p5���?���o�~�������o����������7n������O���oO�����������g������_�~��������������y��?�%�/������'���<���].u�Y�������??<}�(�R�_6��w��.>�K���=3Q��_�����}t�=����B~.'3��������Q��V_.��Q����WMb����L���i�}�rz~@R�3���#���%���'�����tZ���OO3��>��-dY�x�W�g��z(�����+u��$�O�^������g1�|r�����YX���0D9pW�!J� ���9����|r����v��-���4�6p�)A\C�gm���50D����[���2=����v��$�c�
r<��,�]>9��l3kA�/C��c��zN��4�uAv>\��e�G����n�G�5��g����z��.�S�o�����"%�E)��-'9�^'y�N�8R;�X��i�1e	�5���[�1[��gs��T��z�����h�8�Vqb������.SG��t�S�#���O����Aefg:��[V���|q���[�9��s���~a�-��4.G��*Lr�*�*8�9
?�2�z-��i�xT���F��*L��f��k�i�<�1�5���k��|xn
�:G��U�*�B��\��<��y��i5�f8M��:y�:;t��%6�[V��p�s~�esy������:N3u�f
8-���i�7���<�,��Q9�p�I�AeR'YN�r�/L��,��Y������rv@�~Q����x>�;����[V���s��d���8;4�sc���0�p�=�${�0)����ZD�v�i������W��6�p���f��r��^��x���sL8'�f��"��2WV3��tqe��O-�m��z�7�F�I���F��[�QU��%����q�se5����9}n�:�9z�<��\q��8�"K�9�w��f�q}����N��Se���{��4��<4
?�2�z�����r�9����.O�<n��v\�\Y�:�s,��������f���������t�iz�eW��W�m.n�dG�����d#�tX�\V��sy;���RS�Qej���Q�����7>���k�+��e\�8����^bo��pb�:���qi�G�����U��v.ob���i�@t0YO�>��5gX�,.��%�+��E��Iu���[q�se��\�8�z1���k�^1�;�@$�<p���;?����� 6.�������E�e~�<!��G�u9��K!����t
����_���t`E4YM7%����s+"B�r��R��Y>���3sJL,�`9}.{9u���d������,�4W/�9�x��2��%��J�y��/�e�]�wg��;.��������3mg�	s]s�����P�{����s�������s�I��,�<�����o���u/}��Q�5�E�������/�0��|���xz�e=��?�����g��c�8G�*������9U�c�8G�8�:�TvH�so8��p�e��,��2��V�w�y���,�eY
&���A-��yw�g�8�p^���(�x@�W�y����\`	���su�>7�y���l��1�����`)�KJc�%���m��`�����-�A��"��d`�3Y�5���q��%�<SX�p��k��:����~�:i�B'F\������2����nY����p�3�u��_���9�ls��V\�8�������h�����"��qv�3.�>?����Xq;.��[��>��T�����J,v\y9�9�*��g�K�+�lS���ez��b��X!�x2+\��>=��������Sj�)�Z(\��k��B/~�(��B$��yF[��/��y��'E\������Kns��I��Tp	D���-/�\��2.~��&Zq��8��gq�!d��I�7����\}:Y�/U\�\Y�l���q����f�%�0\�8�A��
�:�y�,���q,��_�W���qy~�=��e�e3�|�����\�\Y�7�:��q+�Y~T���k!�aN��q|�\n�3������^�'X�|n!)��>$�\p�����/�O.�������qqk��m���
������p�n�F�g��
��<pq���b�K��<�W��Geqe�dG��L���'W����X�����Ed9p�qeyK����F�#_^����_>\r�
3gm�fT^\��4����+��\u8N_��3�+��UH)��p��~i
�r](�����hwu��-�vc��)��k �an��q����{����5�8���/���\p]D2�
�A���n����e����o���I�����2�\�X�C��N�WV{x��sz�ez��~E��H��q�eY��E'�q�S#.j����������9�R�f\�8����!%}1�J=����+��U�y�[	���:V&���Zq������y+?�b�S;.���mm�!d*���WT����>{r�g���+���1�.��#�-\�#���:���o9�e�|[!��y��J��5a��u�0�_?hXyIq��8�hk�|a�|Z&���B-���q����(G��)-�R���5���q�]0���NN&�+�Vq�����J�U\\Y��q������^<��
_����~�E�2=���l�����qX��J,4��Q����+��&�;z]�v�w>A,Y��pU���}[3�Z��Y�^/�����K�+��\
8N��+�_���w�4�L�4?�r��g�\)\Y�����q�K���r��K���p����Ao�?�����2�q���2=��`\,�K�<Q\%�
��U�cu�.2p�peu��X���(�^���^��Wf����H�'wy�x�&f�X��|���d$�H���Y���8�vY����;[y��0 f�X���n$3/�GNkC�l���h�p\�R�XC�2\
��W�f�*����aqe5���
��/���KRa?8�Q��]����rj�=�d.D���M!���2?�G.DhX�,Dx��x�fX�}]�v��tb=��j����Z> �����e={�~$)3�Ayf����gjY
�%'��@�Y����ge9�����a8�qF����n�#w0��y����z�|������1C|9�{Z�����F)�1�{9��G���R�F��1
{9��2���V��h�1iz>��$�N��?��v���p^���>�0xt���h��G^���9�d0
�Q�h�_^�{�Nk������1�Dlv2H��a>6��|.�_`����F�:�����&�d0�:����:�
�b�uz�m�'u<5:��������O�x��#@a�G�0+uJ�
��$�a0�:�����:���@aZ��N�V%r<5*������I"�Sc@aZl�N������/�q��� ?���X�S�m��8E�0xD���h�$%A'�)i��E�d�h:,Yk�"���(��`+ZcT�\��#yv2(�o��K�S��}9N
4Mk�.��F���`�Z��(C4��N��=�F�:��������:�;d?����N-]�1J�����q���u��,uJ>/�
�b�u��)m��w(L�U�i�R��C�|L��f'���:�������F���t��(uJ;�.�
�b�u���)ma�W(L�Y�i�R��e�r��0-V]�iH��V��1�������4R����r��0-�Ns�:�=C���i1�:�E��v�\�����47�S�js9P����<�Nis����@�N��uJ�������0-�NK�:�����i1�:��N���hP���S���O��i��:�A���+�G(L�A�)�}J��F���u��,uJ_�^�+�����V�S��r��0-V]��K����c�Jkv2X��S�U�O��i1�:�{a����P������N����q����u��*uJ_E]�;�����u�S�z�|L_C�N[�u��S���r��0-�N{�:��D.�
�b�u���)}�p9nP������N)��(L�M�iR����)������tR��_���C��HR��._�����t�S�n/�
�b�u:��)�����i��:C��2��r�k'������\��������F>D#�Q�d�w�\o�,��G�D��	����8�#��Q�2�M����L��[A��>I���3[b,s%=*�����(R�,�����H�s��h�s*�1Pq�P�e��eN���L���b�`�3,�q��L��)�"��hI���W1����9���J��3z�q����Y)V���l=C��R����z��0dQ��,K.&=�3�z1G���`=CI�R����z�r3d�X�#����h�Jq�G7����Y����`Y�k�<��s��h��V1%TL	KB�)Y��Q�dTl,�l[A�VPqT���Ux�#9R�,���p��*Z>�ULSG��Q�r�V�T,�@�eX�P��g8�#���I�'w�=���>����=C1+X��3��!+��q��g(	DV�=��Z�P.�,���eI�z&����h9X�Pf��3z�q���Y)V���l=Cy"�R����z��EdQ�X�,K�(=�3��#�z�1���=�z�"GV���g(�DV�
=��IH?�����F�(O-�Z��4kA�<�E��NR���#��J1�����"+���s��)EV�
-��XRT��Z�q���YkD�9���"+���s����@���4�,gkA�X��bG�9���E�+�(R�J
�%z����3�����`=Ca,�R����z��Yd�X�#�����J��GW��m�E��ZR�,.�8�3�@�Pz�����t��bA�8�pWz�gzA�P��
������Jq�G7�
�E�R_R�,1��@��=C0+Z>�g(FV�=�8Y�PL��z�q����Y)���f=C22+rv<,�0�{D�G��9����b>P��#���
�9h��5@	��?
'�c�4K���38f.,s�,=
*����T��A����8�c�QQ�2�������)X&�4K��3����9h�gp�\*X���{��Y)��
�9h�*�����eR�,A����H�1s��h��f������9�GG�
���bE�8��34#+��q\�g(hFE
�I����=C�1sD�8�34#+��q�g(hFV�=�8[�P���z�q�����9X�
�U�,=�33����9h�	SB��P�rJV�dT,[F�%[�VP�T,�bGE���`�,K�,=�33�����fSG��Q�tT���U,�@�6P�rV�T���I����<��1sD�8�34#+��q�A��@�����`�,g�
���bG�8��34#�"��`Y�f���I=C�2+Z�34#+��q�g(hFV�=�8[�P���;z�q����Y)X&�4K�L>�3,����z��fd�X�#�9h���\�3,���b=C�0�R���z��adQ�$�,K2,=�3�@�P����J���bA�8N�3�#+��q\�g(FV�=��Y�P2�,�����`=C�0�R����z��ad�X�#�9���Z�3����j=C�0�(RL
�%����3����`=C�0�R����z��ad�X�#���%��J��GW�J��E��`R�,�0�8�3�@�P����J���bA�8N�3�#+��q����@�����$�,7�J��E��`R�,���@��=CI0+Z>�g(FV�=�8Y�P2��z�q���dY)���f=C�02+r<,�d�{D�'��9����b>P1�XT���p����a����8���a��Qq&��%��eN��GA���2��
�9�g��<**X�dXz4T�I/1%��`Y�a��A��^��Q�2'��c��Lz��@��s��#+�P�2'���@���SL
�%�)�e�-�h#z��^��q����@�P��\�#���%��J��GW�J��E��`R�,���@�P���#���%��J1�GG�J���bE�8��3�#+��q��g(FfEN���e�K�'��)���#Z��P��#�KB��K���%�b��`�d��
*�������V����8�3���eI��x��^��P����b���:*��
�S��e�b��*X.�*���<�I0)X�dXz�g8�e����z��ad���#���%��J��Gs2,=�3��g(	f��z��adQ�$�,K2,=�3)�g(	fE��z��ad���#���%��J��Gg�J���bG�8��3�#�"%��`Y�a����z��`V�|X�P2��z�q���dY)6��cN��z&7�%��`�Y�P2�,����eI��z��J�Y��a=C�0�R,���z��ad���#���%��Jq�G7�J��E��`Rp�g(FV�=�8Z�P2��+z�q���dY)v��cN��z�v�%��`Y�a���i=CI0+Z�3�#+��q�g(FV�=�8[�P2��;z�q���dY)	&��s�=��%��h����dY)���d=C�0�Rl���z��ad�8�#�9���>�3���eI��zf�J�Y��a=C�0�R,���z��ad���#���%��Jq�G7�J��Y����`Y%��#�gR�s@E�1X�|�b>P��`���y��:#@�k��3?<���Puw�A�3aj(��gy������0?����+�qL
�c?�����G����������������a~�T������}@����|���S�����;>@��2��s>�t���d����sw��
	~�!�+((������RCWPJ���+$��������;WH�;FWP>L�=�+$�����p��;WH�K
\A�0ww����*��ba�n��+$�����L��;WH�;�
��O!y��P�.5�r)bw�	�R2r%�\I��1�BKr]jh�#b����c�����0
�������$��
��]�	0u����8�R����c���d��P:�������$���6@��G�p�m�����+8�����+T�K
\�������2���^��\!�-5Tp����1�B�[j��
Jz��cp������0;�t�����"�"����\!�-5dp���1�B�Zj��
Jw��cp�D�����rw�p�o���mp����~�+$�����P��;WHBK
\A�.ww��w�h�
�s��cp�d�����/�������%F��eL�+wwe,*5(c�\���2���1��7v-CKzJ
���V�V�/�(c�N�!BS�*��2��������)g�����%4��
eL!+wwe,�)5t(cJX��c(c�Kg�}H@��.���.Y)5Dpe���4-�+$(����`��;WHJJ
\A�*ww����:��"U��\!��l�?(����%����0��;WH2J
\AI*ww��X���bT��\!�(5pe���1�B��@�
P�{WHJ
	\A�)ww��(�
���S��\!9(54p����1�BBPj�

M��cp�$����T���3��\�������� g���~BT�G��?�<��0o�E�(����9M�g@�\2*X�@UzT�)s+�`�3U�QQq������e�U�GC���SJ
�%Y�),eN-s�*=*����T���*���l��b�`�#V�q��LM�)%���J���2������m�EV�=�8Z��&[d�X�#���m�EV�=��W������BRR�,���@�P���#���m�EV�=�8Z��&[d�X�#���m�EV�=��Y��&[d�����N�*����U�SDE�G��)�bJ�X*XN�*���%�b��`�d��
*�ud�(�`��X�QQq�g8B%��J���������Y��Q1uT,,�n�@�2P�
T�\�U�;x��TR�,����p���3���m�EV�=�8Z��&[d�X�#���m�EV�=��Z��&[dQ�t�,KZ+=�3)�g(`eE��z�6�"+��q�gh�-�R����z�6�"+��q\�gh�-�(R�J
�%����|�g(oeE���m�EV�=�8Y��&[d���#���m�EV�=��Y��&[dQ�(�,�&[���)z��\V�|X��&[d�X�#���m�EV�
=��X��&[d�8�#���m�EEJvI�q���M��J1�GG��d��+z�q���M��J��GW��d�,�����eI��z��`��q�gh�-�R����z�6�"+��q��gh�-�R����z�6�"�"���`YBd�q�g������-�3��Y)���d=C�l��bC�8.�3��Y)���f=C�l�E�2`R�,���@���LN��+K��H�J�Y�r���M��J��G��d��z�q���M������T��"f��3�3����c���@�|�b=P�2���~�d��p".k�dXzdT�I/s��`��a�QPq&�����eN��GE���2��
�9�
g�KLI0)X�dXztP���9uT������8�^�2P�2'��c&��J�T�����8Pq&�����eI��GEJz�cDE��K�%��=�8Z�P2��+z�q���dY)v���j=C�0�(RL
�%��Jz�#z�q���dY)f���h=C�0�R����z��ad�8�#���%����I�T���a�����9ET�|D��*���%�����b��X2*��
�K����b+�8
*Xn�*���|�2%��`Y�a�����95T�|4��:*���������b�X*��
����=�b�pL
�%��Nz�#z�q���dY)f���h=C�0�R����z��ad���#���%���HI0)X�dXz�g(�e����K�L��J�Y�r���dY)V���l=C�0�R����z��adQ�$�,K2,=�3�@�P����J���bA�8N�3�#+��q\�g(FV�=��Y�P2�,����eI��z��udrB�8�dXz�gJB�P�
���%��J��G�J����@�8n�3�#�"%���8X�P2��3z�q���dY)V���l=C�0�R����z��adQ�$�,K2,=�3��2G���`=C�0�R����K�L��J�Y�r���dY)v���j=C�0�(RL
�%�z��J�Y��a=C�0�R,���z��ad���#���%��Jq�G7�J��E��`R�,���@��=CI0+Z>�g(FV�=���a���=CI0+X.�3�#+��q��g(FfEN���e�s�����9T��U�*���
�9�s����s�*.�6�g`�83d��8�"'��23d����"'��23d����"'��23d����"'��B�c@�%��� +�9��� +�5�"'��23d���@�n+�n��,
�#(J2�-=CY2+8F�H2�-=CY2+8F�H2�-=CY2+8F�H2�-=CY2+8F�H2L-t�dQ����d�["z��dVp���d�[2z��dVp���d�[*z��dV���3�s�@�P��
��3���q2+,<��anISD�	S��%�bI��8�"'���2*��
�*�bGA�QP�qE�a<��q@���sKj��*8����U,KG����m�b�`�T��3|OdQ��Q�0�D�e���=#�0�d�e���=#�0�T�e���=#�0�t�e���=#�0��-�E�3zF�an����Y�1zF�an����Y�1zF�an����Y�1zF�an����Y��@�H2L-t�dQ����d�[z��dVp���d�[
z��dVp���d�[z��dVp���d�Z�����+\r\nIX�����c�p�q��`�S��
���%����N�/+8�
��[V8%��`��p�q�%b�S��
���%����N�/+8�
��[*V8%���+\r\n�X�����c�p�q��n�,
��� 9.�D�%���=#9.�d�%���=#9.�T�%���=#9.�t�%���=#9.��}"�E������[z��_Vp����[
z��_Vp����[z��_Vp����[z��_Vp����Z�����=#9.�$�%���=#9.��%���=#9.�4�%���=#9.��%���=#9�l��H ����Q9.����9���m����@V
�#*��$z8�>�g��p"nk�dXzdT�I/s��`��a�QPq&�����eN��GE���2��
�9�
g�KL9.)X�dXztP���9uT������8�^�2P�2'��c�FV�=��eN�����3�%��,K2,="(R��#*Z�3�gY)f���h=C{���bE�8��3�gY)v���j=C{��E�r\R�,���@�P���#����FV�=���a��������Gg��3��z�q���=����9�T���a�����9ET�|D��*���%�����b��X2*��
�K����b+�8
*Xn�*���<�9.)X�dXz�g8�eN
-�*���|�\:*X�dXzT,�@�eX�P��g8�%��K�'��=�8X���ad���#����FV�=�8[���ad���#����FE�qI��$��=�z�r\V��gh�0�R����z��#+��q����@������,W��3�,�����eI��z&��qY��a=C{���bA�8N�3�gY)6���b=C{����@�8n�3�gY)&��gXz�g����d�-�3�gY)���d=C{���bC�8��Yz�gJC�P2�
����FEJ�I�q���=��J1�GG��3��+z�q���=��J��GW��3�,����e���z��%��h9X���ad���#����FV�=�8[���ad���#�9k�����3���e�������z��aV�|X���ad�X�#����FV�
=��X���ad�8�#����FEJ�I��d��=3�%��h����=��J��G'��3��z�q���=��Jq�Gs�,=�3c�g8�
�U��="x��c�P�rV1��T�*X��y\/�0�G�D��������8�^��Q�2'�����Lz�[A��K���3�e,s2,=*�����`R�,�����HI/s��h��a�1Pq&��e��eN���L���b�`��a�q��Lz�)	&��K����2����9��Jz�3z�q���dY)V���l=C�0�R����z��adQ�$�,K2,=�3��2G���`=C�0�R����z��ad�X�#�9�
=CI/�@�8n�3�#�"'�S��J��x��^�Q���bJ��*��
�S��%�b���2*X.�*������(�`��8**�'��`Y�a�����95T�|4��:*���������b�����m��eN��G���3���eI��x��^���q�g(FV�=�8Z�P2��+z�q���dY)v���j=C�0�(RL
�%����3����`=C�0�R����z��ad�X�#���%��J��Gs2�=z&
�%��`Y�a����z��`V�|X�P2��z�q���dY)6���b=C�0�R���z��adQ�$�,K2,=�3�@�P����J���bA�8N�3�#+��q\�g(FV�=���a�A�0�(RL
���%��J1�GG�J���bE�8��3�#+��q\�g(FEJ�I��$��=�z��`V��g(FV�=�8Z�P2��+z�q���dY)v���j=C�0�(RL
�%�z��J�Y��a=C�0�R,���z��ad���#���%��Jq�G7�J��E��`R�,���@��=CI0+Z>�g(FV�=�8Y�P2��z�q���dY)���f=C�02+r<,�d�{D�'��9����b>P1�XT���p����n���`�%������������s���������s���������s���������S�MY<wP�d�[f��T�d�[f��,����s��������p���(x��(�0�D�L�`��I��%�g:fF�H2�-=�1X0zF�an�������3�S�MY<�g$�����,=#�0�d���`��I����gf�zF�an������3�����\]=�gT2�-)���<'TL�*���&��Q�d��2*��sA�V��(�h2����MY<�gT2�-����<wTL�*���&�<P���*��q���g�n���<��an���h2��I��%�g��<�g$�����&����d�[:z&��3zF�aj��I ��g��$���3�d��3�sKF�$�xF�H2�-=�L�=#�0�t�L2�����d�Z�n���=#�0�$�L6�g��$��R�3�d��3�sKC�d�xF�H2L-t7	dQ��.9.�$��b>�{�
��[
Vx1��=c�K��-
+��O����%����^�����%����^�����%����^�����%����.����X���rK�
��w�`�p�q���&�,
��� 9.�D��$���g$�������w�`�����R�3�������[:zF��q��3��R�MY��q�%�g$�7=#9.���$���g$�������w�`�����2�3�������Z�n���=#9.�$��$���g$�������w�`�������3�������[zF��q��3�����2+x����rK��*8>P���|7	d��8�"�M���~>?������N���������������������py����������T��?���/�F���'����9������?������?��������K����gy������A���Y2�������O�����������>����|�q����#�o�~�����w)��e���]�|=�����r��}uR~���R���)C]����w���R�'O_=\[�u],��9	��Z��X���������~��$�����7;������ww��P���~�u]l�u�~}~sg]4y�����������nG]�c�����X����_?\[�u]������B�|��������Q�R��g��>_���0������_=T$��~�Er�V�J�����^aU$�������c������g������<ZJ�����P��v\TV��v,6�
��c��czK�����(yQ��H�.�_�}��uqC���S�d�:z��R��h?z]Y+uZ�<\�W���W�P�,J���Kc�����.�����>elVu���T7��]�@]��x5�{��.���v���������������W���X>�=yF?��.��H>�/��W��O���V�@��z������}f���Jy�y�����IO>K�nC����������_o	?z=Y�>���xQ���+���$��
9�J���u�-���{�U],u���������^��.�O��l�AW���Xg���R��b!|��)��X)��b�t�����G�)��
9�J����[��=eU{�u]���n����P��go6D�+��?>��X��R7��[��ud�J|�!�Z+��s��>>{�!�\������u�UX��
�G�_�>�=+o����&_o��dT���7�������������������������*���c%s����J����l�D�����+�O%��w_U],tw�J��=�|��TC����������c���M����K�ww��P����!1D����7�u��}�a��fa][������rQ����.����<��.u�n����o���b����������+C]T���y<]���2���*��b!�����7�����R���h�'ko�E��_o��,�_o��u�3����5��������+]��J���E�#�Rw�G����K}�E>��T����C�d��g�V���+�'moOI��_mH�6���-������oa��__���.����>��.u���Va][�U],t�uq��*�g�7|;������o]�������.�
��X��:�w��������1V��Q�Rw��Q6���!|oz��r!���U$���B��P$�Xnc|�HV�["����H�
�E�J��E(��Jw��(1&�����t��q��%�pD�W�b���'����.�*|<
]�������.���ZN���������r�n��k��l���\t�����UX�
�GW�+�=y�-��h
�d��\t�{�U]�Vu�WX�b�{��'uqKy�"4�U���~����O�{�u]lV�T��=��y����<�o���G���t?��t��p��d��.��������sQ�����J�>Z{�!]���y�fa][�U],t���������>Z{�!]���T�YX��Va�	v�o��
���|����XT~��}�@R�~�][���G?���wl����Wi����Jw�y����R�>c}�X�����~���u�W�����J���$���*�������������x�vl�9o�Y\�������m�u�UX��RwS],��-u�W��|<]��)���*��b�������m<����$|��sn!�_�r,~�~�j���~�����������U��/>��7,�T�mX���7,�W��^��[V����F�b���������^au��%����o�>���7�^z��wu������Kd��%��+�Kd���H�R���d������*����A�R�N�w�<��e�z=-GkM�R������.;���b
]e��S�F����(������2�Tw��j��>�lV5������������~>|Y��;��W�����R#+�=5�[j$-~����c�����{���c�������o�o)o������xU,T�lD�%�xUl}��*���w�+��{����[D?^�wZ�,��b�������+�fe����L��x�����%�z��s����~5v�%���N�vJ�����J��GW��V��g�v�/�����_
d�|�2C}h])��ef�����ht��e��^a][��*�{~��W���2������������������X���%�-�
�#��
��LD�Bc����M&jk�Z���Ojk�nmU�Wz������>zXEi���k�
����������y��	3�z���Rq�=�eq�{�]t]�~�.n?��/l���j��gVx�e���*M{<	]�����t�,��|�]	����J���}����M��J���^W)��	�J���j�*���������_�M�����-?��}��=���t_o��l�u�|%��ZwS],���Pt]����i�JwK��WX��^a�����]�+�=��i�=�����W;�#{�u]lVu���u�Xi���FY����hTE+�W��<u��~�O����G�����Xho:o��H�3"�������3������Gak�G���O-+�[GW������l�7��{�����{��ue��:o,t�u�:o,��\WR8|�����t�����Vn<����K�G�T)�/��������WyCD�B�����#���7�[wS��/��������T~����]���sS��*d|8]���*����_�n���
�
_�}���O���Q%;
endstream
endobj
51
0
obj
16065
endobj
52
0
obj
[
]
endobj
53
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
54
0
R
/Resources
55
0
R
/Annots
57
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
54
0
obj
<<
/Filter
/FlateDecode
/Length
56
0
R
>>
stream
x���[��Hv���8O��=?@zP��+���%�����aY��QC��l��������^{GvUgFOcf��3>&��"�+y�������v��O�GI����?�����}��%���������e%���K�����o��6��_�g����������?��s��^�y������>��������A?�����o���?���|�]����t[J�m�Y��p���S��O����r�n{��w�e����������}�<�G�-�#���\:��&m����s$�>�K����d��x�����,|+��n?�V�mb���tn�n��}d��9K�����j���<��O����~Op���c;��b���tn�����HL��D�?xX����g��	�x��S�����w�i��.��������������9;��d"Vy�7�����\WH�
U}^M���Y��.�������/����%��I��|������T������|���?~�W�����|����?y���o���y��nn�o�~��?���������){�����������y�o����o�������?���������S�r�s��<��z�_�����6o?�~��������������������m�[N~�=9���=1���������2p��.����m��[��a�-�������\q��p���)���~y�������N��$s8�G���_�������P�u����*�,��hE�*=�;�3.[:hS����7q��a7q�nb��6����M���&������_0���~���v��b��Q�]{���,z���O�s%������2���?��s���C��}��S�z�����=�vk+}���t�\�(�+�qly�L{{$��#��b������so�����@-�R�Ku�l�����]K�����"��e���7]�����^N������|j2�b�O�s"��|>?�������f�va�g�����w��E��T�g{g��-���9��~�A^_���53��[��+���V������>��;V*�X��#�K}�K~��T+���>�#��\����X���;���q��yn�o��K{�f����9����w����[�E��>���yt���7�-�x��]�
��Nv����^��M����l7�f�9hw6��o����s�n���\��y���I�^�;������N�l����������n���=;%�u�=�L�?��fOf��j�xW����������~���]�xW{�]�l6���:_��Y�+W>T{���	�
�}
��|	�r��l�����ZK|f���`��A�;�?7�9�)��f��OI�s�����\��ug��|�\���;��y]��+k�����
��������d�|������F����{|��������z����;����'l������d��z���z������'�;��>M���;�U2,�����Un|:	��H�/m���,�W����|�)��(��vq1�gQ9���SKi|j)�J7:�������=�>i>��"|��$p����|n���X��
�g<��G?}�|Z��
�����ee�������&~/x����{v�fu���mM|��=,���f���y�
�����_�#�u�D]��':Q�%�
�F^�7��������=��}k�/zEt^S��-|y����s��~���6�J���m����3��*���L}�|�����sn�B�w�M`O�x�x�g_p����l^��g��]	����|�sY�����`��[|����V?�@���{����'���/��NlPw��<Z�����'��V�l�
��[������2���L6og�F;���l^��������z�9�G�ToSh���������>�#�������b�
����h�������6�{�����n����N����%@���g>���%��)�t�2�	�%(�@�]�=��v����O^\���e�������=%�M�>S��F���?p��JR�5_�����j7p�s��<���_��'���a��C���;�t��u�s�|������<\(������%��>�'�l��C�P����&>y�t�|���������{��
�c6�{���#�i=���9|���]/K�y�Y��f?���x�����|��@��Y=p��Y��|������g��5�����q����"�������_x����~�	~l|B�l7������l�,�)<�f���<�_?�����6�{�'���D�6k����v�t~�hw6�y��fg�������\a�5�Y��g����:m�������f_��{�o����������9��m�3=<�����i��8����������?p��j^�5��!>�����,����Uk>}��V����e��2��<��U�k�l���s��|���������F?]�����������w��F�������2D$��������{L.�����k�����Ry���T �����k\����v�v�	}��G���������w��c�������r|��}��m9xo��{��|���lm�����6v���*9M��`��k�w�
�1����/���6��A�\��M�X���_�)�lWw���d;x�g������N�a'���������C2I-��{��w��U����5g�W�f���C�s�
����w�s�K�k�R�m�b!�9G���f~i{�mx����D^��yGk���_I����=���~Y�7���;�|�,����3��=�`��{�wW��ms~�]=(���]��?�����g<���dG�]|9��G�S�}p��$����f�2_��?�s}�|��p����f����K�/>�lv���F��Wz�;�t���;3�b��s|A����=�f�����|Erg��_������O��5F
|��m���O��
���_�x��c;�s
�E�Ww�W4'�"���g��#����+���� ���� }�|��_"�����7��Vu��!�$�[��3J.���$���W����B�������������'n�'��#w6;v��G�����6}�|E���W ��v?�Z/�w��N����<�������kl��l��Y���������|����+���}g���W��=A���
���l~�����}dq����v�~�O1�O�[���ti|BL[��w`�����f_����������C����M<��.������u��+px�g<�3O��l�*�\�-n�����/�������(�;��'P~���/�:����.�7��A���3u�t�����P~-��/�:����-���a�C�����l�8G��|�m�AK����q�2�m�����n����~�����s�C<����C�-���y�ayS��k2���� �y���������y�9��ut������������y���������g89�#<����q[�41=�v����'�|:*ML�����/G�d�OG�����yz�������41=v;O��D��Y�;p��9�!���X���I���ibz��<��e��Y>�&��b�ii:Oq�m������yZ���K������A�a�i�t�����r���q���&������\hbzLv�������ML�����t������A�c���:Oq�u7n��������<�}���D��f�iK:Oq�m������<mU�)���-w�������<�
���A�c���~/�Of���-p� �x���cu�����r���q���g�����\ibz�v����7���;ML�����u�����������y���S�9v]��G� �}�yz�:Oq��m9�����yzd�����\ibz�v�M�)�0�-41=6;O�C�)n!�.���s�����tl:Oq{�m9�����y:��S�s[.41=&;OG�y�Ln��&��b��h:Oq��m������y:���)��,��9�G�x>V���mp[N��n�PG:�Q�0�Q�:�PG4�a��7u�Mc�A�fcW��y*���n����c��������d9�#gu�L��l���u�B��b���Wu�J��j��c�<�G� ���1�����3ML����)�<��.��J�c��4U���4���ibz�v��C�)>0�.��>9L���y�y��n��&������t��X�-�������<E_}[n41=;Os�y�b��|�����<���S���e�� �����l:O�d��ML����%�<E9��"
�&;OK�y��q3�9,v������f� r��<-C�)����.��tX�����Pj���Q�os��IGd6�����o���h��Sa�gi�tDe��-	����E�����in�
������g�$|t6x��JGl<[(0J*<kk�#�I	��F��a����b6����s�3��1��
������W��3�����bV#�.<k��#83h��3g$��3�6��+g$p��A7�l��3����)c6��	�}f��1����A���c��3x��A��l��3����ac6��3X�6��)gE��y����qfP�����3�.��g$p��A3�l��3�����c6��3�����cV#�:<k�#83m�������g��1�H��3�~��;g$p��A��l��3Xz?��i�3������L�93���y��A/�l��38���%d6��	\}f�2����>3h������%����sfP$����3�v��+g$p��A��l�g$p��A���FT�0x�RGpf���A)F���ZIfc,����g%�16�H��3�����H��3���Y�R\�������)�Sg���{c:��6��
����e��6���exc���76��
����cg��G������������9�����1g6������9go������6x��{ec�l�
�{����883(Qa���������3�JU��w�����X9#���ZWfc�����g,�Q���Y�X��A�*�8#�7�����X8#����Zfcl����g�-�1����gM.�Q���Y;]��)g��=o>3hy���pF'�t����8#���`fc<8#����`f5����6��?2��0�G���Y�a��x6�`4�0x�fXG2��N�������g�+\*<K3�#��W�56x�fXGt6�M�����Y�aq��lz�h�a�����dD�+�=K3,#�f�������p4����w6x�fXGpf��
�H`i�ugM/M0����4���3x��A3�l��38���f6��	\}f�3����>3h����&�����^��	����f6��	\|f�3��	�|f�3�M0������qf�����3�f��g$p��A3�l��3����f6��3����fV#�`<k3�#83m���	���g�0�1�H��3�f��;g$p��A3�l��3����fV#�`<k3�#83}���	���g�0�1V�H��3�f��;g$p��A3�l��3����fV#�`<k3�#83���A,F����afc�����g�0�1����g�0����Y�a��A�+�8#������83h���9���f6��	\|f�3��	�|f�3�Q�����4�:�2#M�p�l��uoL���r��s:��6���6���o�������s��q�l�i�a�������H�+�=K3�#2sfc�l���7���Z��<������W6����z�hl�4�0x�fXGpf���A,F����afc�����g�0�1v�H��3�f�Y�h�a���������N������afc,������L.�4�b�\|f�3��	�|f�3�M0������qf�����3�f��g$p��A3�l��3����f6��3����fV#�`<k3�����f����Ns�fXGd6�M/M0�����hz�Sa�gi�uDe���
����������n�
�����g�+|t6x�fXGl<�^0�`<k3�#��
��F�����f6����s�3�0�1��
����4���3����fV#�`<k3�#83hz�3g$��3�f��+g$p��A3�l��3����f6��	�}f�3�M0����4���3x��A3�l��3����f6��3����fV#�`<k3�#83hz�g$�4�:�3SgM�<'�4����8#����afc<8#����af5�	���6�:�3�6��`1z�|f�3c��N>3h����sFW�4���88#����af5�	���6�:�3��<rr���fXGpfz���	���3�f��;g$p��A3�l��3����fV#�`<k3�#83���A,F����afc�����g�0�1����g�0����Y�a��A�+�8#�7�4���X8#�����Q83h�������f6��3����f�4����i�ueF�^����y���6����`��txcl,��m��s��76���cc���y���8(3���Y�aA���W8'6z��7��F9��\3<K3�#
kac/l�\�7���^�8*<�����qpf���Y�a��I;gM�=�>3h����rFg�4����9#����af5�	���6�:�3�7��`1z�|f�3c��N>3h����qFK3�#83�qf���s��A3��F4�0x�fXGpf���A,F����afc,����g�0�16�H��3�f���H��3�f�Y�h�a������E�Y�_]��}>�������	����t�	�+���O�:<2}E��Xq��'4���Ei���~B3<0}q�V�Xq��'4��w�i��~B3<0}������t��'����������>����{����q:�����w�I���R��X��Th���R��X��Th�{��;�-1�G�Th���R��X��Th���R�~X��Th���R�rX��Th���R�fX��Th�{�(;��0�G�Th���R�NX�{.�
-x��Q*P����
mw���T�
���)Z��+�F�@���)��bE�T����)Z�bE�T����)��bE�T����)Z�b�A�@�+�S*��=W��R���#S*����D�@�+�S*����B�h�#�fk���R��W��Th��R��W��Thy{��Z'���)��bE�T�����)Z�bE�T�����)��bE�T�����)Z�b��Tt�b�Th[{����&���)Z�bE�T�����)��bE�T�������������R�RW��ThC{��_Q&���)Z�bE�T�����)��bE�T�����)Z�bE�T�����)��b�A�@�+�S*�����?Kh�@k`�.E�c�"u������*j�� ]9xx`��Emb��
����=����+�F�����;���=W��Z��q����X��r���3�rv��IW3\HW���B�^xx�J�^�nT����7�
�
�aAB�R��+VdJZ�R�u+VTJ�Y�R�]+VtJ�Y���z���
��9B�R�-+V$JZY�R�+VJ*Y�R��*V4J�X�R��*V�
��2<0�B��s����L��Z+�5�L��N+
��L��B+��L��6+J�W�����W�g����L������g���2T>�e�R������o�O�����:����p*l�,���l<[W�R��YZZ��x�������:����^����������g�
F�
�g�ku� #X�4��Y[q���l�uc�g)mu������;<W����l��3�����]f5�m�����:�3�BV8sF�>3�g��+g$�t�:�3�ZV�sFW����l��3�����]f5�|�����:�3�~V8sF�>3�g��g$p���=���xpF7�����F�0x�bWGpf���A+F�����e6��	�|fp�.�16�H`ixug�6�JY1xn>3�g�Y��ea��=������3�jV��7����l��38����]fc�����g��2����>3�g�Y��ia���������3��V��w����l��38����]fc��������L��T�b��}fp�.�����Y[`��9v��[1z�}fp�.�1V�H��3�{v�����n>3�g�Y�hpa���������3�W��7����l��38����]fcl����g��2��	,�������2#��i�l
bA���W8u6z��7����`c9��9�X�`cl�\�7���}c�����o�8v6����0x��XGPf��������9�1g6���9{c-l������s-��+�<r��l�,���hl���0x��XGpf���A�+F�����e6��	�}fp�.�1v�H��3�{v�����Z%��L�83h��y���=���X8#�����e6��	\|fp�.�1����g��2�M0��Y����qfP����3�{v���pF'����l��3�����]fc<8#�����eV#�a<k��n��6���p��4�:"��lz�h�a�����(dD�+�
=o��f��Ke�gi�uDc���
����������>:<K3�#6�M/M0�����hz��`�gi�e��3c���9��f���������^��	�}f�3�M0����4���3x��A3�l��38���f6��	,�����������g�0����Y�a��A�+�9#�w�4����8#����afc<8#����af5�	���6�:�3S7��`1z�|f�3c��N>3h����qF�4���xpFK3�#83����	���6�:�3�6��`1z�|f�3c��N>3h����sFW�4���88#����af5�	���6�:�3�w��`1z�}f�3c���>3h����sFW�4���88#�����>83h�a�������;gM�=�>3h����rFg�4���xpF7�4��jD�gm�ugfl�4�b�����f6��	�|f�3c��.>3h������n>3h���(M�i�l�aA���W8u6z��7����`c9��9�X�`cl�\�7���}c�����o�8v6��4�0x�fXGPf���������9�1g6���9{c-l������s-��+{e��l���7��F9��M0������sf�����3�f��+g$p��A3�l��3����fV#�`<k3�#83y���	���g�0�1�H��3�f��g$p��A3�l�g$p��A3��F4�0x�fXGpf��
'�H��g�0�1�H��3�f��g$p��A3�l�g$p��A3��F4�0x�f�������?���� 2n�/��xv��8�Q�a���:0�!r!�6������!pe�4������!pc�4������!pg�4������!��Fi��������������`6�ycc�3���l�w6J3,k:g]�sf��5�3�.Y�93�c
���Y
�93�����A�,���m�eM���KC`��6���sf�%�!0gF�aY383����3��0�� ���3������t�b�\83�����A�,���m�e���A�,���m��������m�eM���KC`��6���pf�%�!0gF�aY�83����3����983����3��0���!���3����I�t�b���fX���d1x��m�eM���KC`��6��fpf�%�!0gF�a��wE0�!2gF�aY�93����3������t�b���fX�t��d1��h3,kg]�sf��|u�"sf��5�3�.Y�93�����A�,��3����983����3��0��k$���3����I�t�b���fX���d1��h3,kg]�sf��5g]�sf�>���J0�a��������:lL�7����`C���2��
6���}cc��qll�l.3�%�j�L�1������9�!pfc��X3kfC��Fi�eM/l��
�+{��Q�8*76�|��"sf��5�3�.Y�93�����A�,���m�eM���K���3��0���'���3����I�t�b���fX���d1��h3,kg]�sf��5g]�sf��|�"sf��5�3�.Y�93�����A�,���m�eM���KC`��6������K����	��|;�"sf��)���9������s��YGd6��1�0��k������Sa���x�y2�1����5�����;n�
��k���gw,|t6x��YGl<�c0�a<k��#���F��5���.dfc�<K��#v6���p�������.dfc����gw!3��0��k��t���3x���]���X9#����Bf6��	\}fp2�1�H��3������f��5���c��	����.dfcl����gw!3��	�|fp2����Y�f���g��=o>3���g$p���]����8#����Bf6��3����.df5����v�:�3��X8qFK��#83-qf���s���]����9#����Bf6��	�}fp2����Y�f���;g��=�>3���+g$p���]����9#����Bf6��	�}fp2����Y�f��9�<rr����YGpf���A3,��gw!3��	�|fp2����Y�f��g��=o>3���g$p���]����8#����Bf6��3����.df1J3|<��YGPf�;N�������`��GN.<K��#�`cl�\�7���}c�����o�8v6��4�0x��YGPf�;�������9�1g6���9{c-l������s-��+{e��l���7�����A3�g��ug&��4�b�����.dfc�����5��L��4�b�\}fp2����Y�f���g��=o>3���g$p���]����8#����Bf6��3����.df5����v�:�3S6��a1z�|fp2�1�H��3������qFK��#83�qf���s���]��jD3�g������f����>�,����l<�^0�`<k3�#
��
��F��������.�
�����g�+�<K3�#:��W��l�,���8�x6�`4�0x�fXG2��N�����g3�l�uc���g8�afc�;<K3�#83hz�g$p��A3��F4�0x�fXGpf��
g�H��g�0�1V�H��3�f��;g$p��A3�l��3����fV#�`<k3�#83hz�3g$�4�2�pf��
7�H��3�f���H��3�f�Y�h�a���������3�&X��7�4���X8#����afcl����g�0�1����g�0����Y�a��A�+�8#�7�4���X8#����3�*gM�<W�4���88#����af5�	���6�:�3�w��`1z�}f�3c���>3h����sFW�4���88#����af5�	���6�:�3s��4�b�����f6��	,���h���qf���s��A3��F4�0x�fXGpf���A,F����afc,����g�0�16�H��3�f���H��3�f�Y�������iz�Sg���{c:��6��
����e�Q�#'���������ol<�����A��&�����4��9�����1g6������9go������6x��{ec�l�
�{����883h�a���������3�&X��w�4���X9#����afc��������3���`<k3�#83y���	���g�0�1�H��3�f��g$p��A3�l�g$p��A3��F4�0x�fXGpf���A,F����afc,����g�0�16�H��3�f���H`i�e������A�gm����.���Y�)"�.�Nl�g�l�3��|?�"2j3,k���W6J3,k���76J3,k���w6J3,k���l�fk���j�<�����9;fc��76f?�����xg�4���sf��"sf��5�3�\�3��0���)���3��������:���m�eM��d�D��h3,k:g&� 2gF�aY383�u�93�c
���Y
�93�����)�\83�����)�����fX����:���m���O�����m�eM��T�D��h3,k
g�� 2gF�aY�83�u�93����3S��0gF�a���S0�!2gF�aY�83�;�	sf��5�3���\93�����i�L�3���������93�c
���Y
�93�������L�3����������93�������L�3���������93�c
���Y
�93�����9��0gF�aYS93w�gF�aYspf�&���fk���j����fX�$���`��m�eM���&���fX�4���`��m�e����L�3����F���Y��F���fX���F�D>��o,]y��ol����76����F�D��8\f��)���2c�aY�3�f�3s����X�7�\�X�7�����Y���^�qT6��"76�|?�"sf��5�3�]�x��m�eM��h�<0gF�aY�93�%�9�m���O�����m�eM��h�<0gF�aYS83�%����fX�4��v��sf��5gF����93�c
���Y
�93������.y<`��6���pf�K�3����i������h3,k��v�c��3�a�~
f5D����S���wo������������
�wo�7���^V\����z+�w���~g������?Y��:U��wo��������������o��-�p{����p���rYQ�����R�>�t�������}���?y���o���y�U�HGJ�_���w_>e�G�����%����_l��F{`���������]�u������3���d^���y1�^_��f���'�G��{n^\^�6�������w�s/M����w��>5&�o.�|�`j�����xnj\�������{�����������_{�_��/���r�~%�:KV�i��m��<w0-�wH����-��>7Gz����fH����N02?��yz~r|��������L�_�|��y������`�����Z������b3����2���^����W������s�#;/�����z�x���������tyO��s?=;/f�/V\���y�V��b�}�x�������@4/R����2b�3f�//��g���u�j���X�6�cj^q>Ym��Q�d~<������O��������'����?�w�3�o.sn�qcb���+[��M���������w�f^,�y�@��u��{M���W+�kzl��+���cV�^���/�O��X*�3����+��w������J#o����J�\i��_^����s�������^i<v?wU��cn^3?f�E�#�6��g{Qs��y�x�'h�k����Vl���{����
��yE_�k���Y����_���O�{�x�~���=n<t��x�������F�m�7������k���1��E�����q#�o������W��������������o_�-#vl�,�Gg�5�e"~��jg��glf��	/9�<0��9��o��3��+n�X+6�b���3��9��x����[���~������������o�0���������}�^���������s��V�������X�@��E��K�q�I��y�u�9�L���5������M������q���@����G�W�����|nj�����Y3/Fl��Y����K>�_+��b�����w�'n��+�����=|������7f^��y1�x�2�kz��{M�Qs���]�����<}q`����w|��y1��9^<2/9^���}�l?j������O��_>�<?�I��s����}��'�����yq����������Z+��b������J�q�Jf;/�[�o4�3�W+����y�Vl�������yW5]-���
�������G���/f�o���������Z�>����}���y������G�>c3/������+>�o-vf�>�����g�W~��~.��m?�_�6���y��Xl��q����{��w�o(����h��_>nL����{��o����;����~���3��������X+�y1���
�G�=FO�9�vA�9�~��:�����%3��+�������������
	�������s��y�Tl��D���>|�]����_/���>��2��{����@a����������/\���x_�\u�����a���9�nA�9�>���K�v^,�y1�.��+�/�=vg�-�=g�%��Z��k�����W��3����G���w������y�|��4=�c���������W����j3��:�����s�]�c�������G����t�qcb���y1�.�}�����:�.�F��b;/����b�]�{�6���;������O&�/o�~�5��o�������}���J���[g�5���=vh�-�?g�/W�O���q�����K��5}�����F�}��������s�G��?/Y+����^����R�=�O�2A������wG���������W k�v�<���<3��;��?�%G�#�k�/hFg�5G�����$��b�36g����r������/y�r����}�z3��������^��O����%�����������N�����}�z3:���$e�����b9^L���H��%w����V��g�Q�������dk��T�+��7��
v3K&�%}�r3��6�M��������g�Xl��������s�����>�yq�����������N���x ~��z�]tV�����s�����/�:�>���f^��y�V��b�]p��C�����b����������Vv^<���N�����=���+�#3���O��U����_�E�����Xl��R�9^L�K���4/Z��~x���z�Z�9�C��}�T����sj���-�������4/��o����u�]���~�}�:�u;��|�����]�j��%i�m������^C�k���1/��x�x�����r�c���}�v��c�����c����nt�}�=��'K�v�<�x������#���RR������������-�y�@���wM�/?t^L�_-i�R�}���m�������������������������x1b����6t�]��#�����b3/&�%w�/7�y�������
�y��^��/�G�>c�.vf^�z������<����6t�}�/��y�Tl��R1���y��]��4/����_oCg�%m�Z��K�z�{W�Ym�y�gM��m�����^���X*����5^�w�W/.�71�|/����[ ���&����b��W|z����xQ���%_�?g�%��Z��K�f^L�k���6��(��	_�;g��w�����b3/�����4/��o���w��_���g�������>un^q}13����r��L|���O���H}��~���'��W{�4?����=��9�9n�mz�����w���-���Z����xE��I��.���`��
endstream
endobj
56
0
obj
15628
endobj
57
0
obj
[
]
endobj
58
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
59
0
R
/Resources
60
0
R
/Annots
62
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
59
0
obj
<<
/Filter
/FlateDecode
/Length
61
0
R
>>
stream
x���]�$IR��R�^	������pA����`�VBb�d .dZ[���A�0����2�����������'��DE�~2#OE��o/�������=���������,�Z���\��w������?���-�����x��e��G��������?�?z�����c����e���i�����������>�������|�>�����(���`��e��S\�Oqb��?J�^����q�����8�p�]����3-��������de��cn�v������x�fe6Q����o��h�?��[o7���cL}8��a��=�=�R��8�p�V���o/O$��5�������\��K?�������/����3)�����Q����4}���`�:�o^~y+����/.����f��z��Z^~}T���B
�����s+�r]!�+T�yU���������?����O~�����#_���o�Lqm[���������I����_�������W���_�����������]o?���?�����}��_������z���\��������o�~���o������?o��������<��}y������i�[�~V��~�����_���Q��@�l�_=8F�����I_�Gfb.�����
�wy�J{=j�]k����r1�r;rW��S�y\�������%�%���ZF���?��<���t�N�����[~�_(������m&{{(N������\ e��qY�������������!���|����������b{��AR�
��������V#:��:D��3�|<~2��4@��A������=�������c�<��}��r,��?DI��`�����C,�F������Hk���{��v�ER�����Z����N�?^u�.����v1�>���P�cy���nU�3]y�m�!��3����x=K������2���$;���|�����}A�quv�g{��������	�������H�3o���2�����|���pZ��{>����1��d��������?=���v���'9���\�J�x��Q?{�\���J���?�~���:�L��(x�g7����z���b�Z�Bs���U.=u�+��>[�P�Ux���]���W�k��;�I�K�<����O�+���?�N��
��S�g���2��~��^-�I�[k��V_��/�1LwWz��?A��h�Z��4���T��{.wW'����"|Hv�Z��__$�-�/��"��=��_z
�W��t�������_�#������������k���:2�c<��'�~����������[��kK��i��9-��&pZ����'�+��x�������U/�>��'�W�h�eN�|��J�*���E����{�ve��S�>S^��l����
\Z����?�na������=������H#�����N��U~l�a�Q�x�<�_F0������0x�g����/���/�z��U`�������pgb&�Aur��� �x����F}������+�B*p
+�9���/��]8�2*��
���;��*�mg��7�U�c��V^x�l^������
��V���#��L���u��\K���.��w�l�4����3���lp�	7�#v��"���y�/>����#c����x�x���&�k�O��C;M�'�Zx}y�g�.�'�5]�.Z�D�����,/<o�.��/�va���.G�:�Nu��D�/>o�Z��d^��l&�x���B�O�|���xmt���:-^�`y�g��,��V����m�p�l�dG>;��^�n�^\wm��x����C��n��^������2`YVZux���?������/�E�P�*��y�{]>^	B'�ybr����r�3�=���"Sx������L<o{����~��N{�-�Hl^��y�����b���^N�+\*O�T�j���z�Q��"r�i<��x�c��<��_�����kk<��x�c��<���>��3�<���tY-��_�u����f�����W�^���3�f�`�?��&�s�������`\�����t��L�~q�u������7���Jo[|��@���<����<��_xk}���g�.~t����&C��Gg�.[���+2.W_A�T�8�M����SKE��%�8^���]�����2*%�3��:^�Tx^�iP-O{C����S���f��W�]�1�M
t]�O����&�>\��W.<�������_v���:^�$��nsv�~�[�^�l���\�-C>������`g}���W���/\����5d���l��Q�S�6%�in|������_$nK��$o1�~#M����U��-<M�4�yu�Y���M6
�l<��K����"��lm��:j�WI�*sK���.���G��]�l����f���;����QC�bP�/~�����%�t��x����2�|]����*���x��
^��q��u���-���C<�����:l^y9�����t^y���y�7^"^�~��{b����*���Q�\H������
/o|�����xq�/o�"���Y.|�����81\���c����*�	�����,	���;?@y=��Ex�j ��+�������:lYy1���'W\�.G���@��=��;��Y2_����@����3�;2���/�%��9�����Y����U�T�*��z�d!"[����D7�NCG��u9�����T�>������"�~���t�>���e]8����*�����X�zv���B��:n�L��w�;��&��^�������z\_����9�j��O�/�;��f��N_��1^�0���/�5�8p��e�>{�F�lf[��86��:�*CR�9�2@�#���l�������������",��m������>�f�K��:���%�3�U1$���"�������gV����c��fN�����K�E���0P����&��m��p2�����/,'Zhh�������d�eD�/+���0'��
r���������"p���%�yf^e@F���"p~��>���A��f�����
]3�#���l��������<��}�����:�����3����5�~Zi���;P���7�y�/���+�xv6��x�x���\�M'��K]o�����x��7^�^��7�i����=;��^����!|���Aur��� �x��gC�^x����W�M��5���'�k���z�s�k�O����������8���7->y-��$;��;V^�x���8���:-^������_���>o^��l���"$�J��Kg;9�cX�/M��K��f�;��Fv63������=>����:^�`y�g3������0���Y�c������_&�8>�x;>�����-Y�����������
���j����C��O�N�S��_�8>�w=�'��N�c��_V���n��n,h8\��8>E������
��g�����q|p�v|�YB'�����/�jT�{���aF����]�����(����R��%�S|(�&[��gU>��C�Raz��N��|4��F���Xm����z�k`c����~�{�K�S|��v��0=.�N�|4��F����l��[�?��C�Raz��N��������0=V[������x��n���C<r���)6�/f14��N��u�������N7[��h�bK�b�����b�t4�S�^��Vtr�l���u�=��+v����#{<V�T�����B�b5��[U�R����Z��T�4�h�:9,�j��������a�Vc�R������p�N�-������p���W���j��:9����I5jR�������F�T�K���������:�����C#Q�z\l���u��_��L��1�:MY���n��
�c�u���)v0��;��j�4u�SlG�c����a��N�E�{|n��
��b�t��N���v\�0=n�N��u��)��F����:���)v|����f�tZ��Lq=���G'���u�W�S���oT�W[�y�:����q�����:�E�o�����b�47�S�Y;T����<�N��������a���Z�x��v�Qaz\m���u�w�o��
�c�uZ��)���w*L���i�Z�x��z�w��NK�uZ�S��y;NT�[�5i����q����l���u���n��
�c�uZ��)���w*L���i�Z�x��z��$�Nk�u��S�ws;NT�[�-i�����q����l���u��n��
�c�u���)��������l���u���z�`����
[�}�:E };��0=��N��u���v\�0=n�N{�:Evz;nT������NS����f���S$��cTG'�}�:��)b���F��q�u:6�S�e��B��Q���������
��Y&��X����Kb��7i���4I�m��Y�'��Y����Gf��Ei���G�F��Li�J��������%����J�4V�,�����xdR����g����`�#��<7_�H��U���OX�-���Az%��#�%���dY��=8{� �b6��=�z� 
cVE�`P�����`� �N������2f���#���r3f�X�#���R4f���#���25fUD����I��=��Lxc�^�g��1��	,���`����A�&
����8f�8�#����9fQ�H�P�l2:�A��Nx+��y-^q���UV,�<o�+�����bk���4��:+�����������8�3�A��&}�#�g$��+zN�W�++�u�����gI�Gb��X�'V�\�W�+v���P��	�� �H�'��3��d��F1�G'�$��F��Gg����F��GW������X
�5g���ma� dE����Gf�X�#�7����F��GK"�=�3[c� ���{%�*"���gM+�{&��D���y��A~�l{$��=�4��(6�H��=�l��(�H��=���YqB��f���=SV�OQ��z� e6��=8{� e6��=X�Q���)�=�h
�5+�����g�����{�)�Q�����{Y*�Q�����{�*�Q�����{9+�*"`��gM\�{�-�����y��A�l3{$p��A"�l{$p��A>�l{$�$���=�{1-<kn�=�3}e� �E����\f�X�#�7����F��G����Fq�G7�d�����
�5������g�����{y0�Q,�������K�a��x��$��#����
��
�%>�����	����P�O`�'X6~��@�f��Y�SxdV���43�"�e(x��Y{TRDp,�UV�,A��h�x�����g	��Gg�#8n�<K��=+������y� hfV�F�o�4k� �c�����43���,A��`� 8�����{A3�*"X��g
��{��pb�^�g43��	��g43��	��g43��	\�g43�"�e(x��Yz����{$��=����(�H��{A3�Ql���4k��h�����y� hfE	��&h��	�����������[e�RY��V�bi�X+��
�K����b��8:+xn�+����<#�2<k�,=yF�c������x���b^Y����9�^�&V����=��g	������<#�2<k��=�3'�L��{A3�Q�����{A3�Q�����{A3�Q�����{A3�*"X��g
��{f[�3�E���=����(�H��{A3�Ql����{A3�Q���4k��6�3���Y�f����+{��(z^�g43��	�y� hf6��=�x� hf6��=�y� hfVE�P��A��`���=�`Y=��3���be���3���bg���3��U�2<k��=�3ua� XE����ff���#����ff�X�#����ff���#����ffUD��4k�L[�3�E���=����(f�H��=����(6�H��=����(�H��=���Y,C�����=�W��eQ��z� hf6��=x��A��l{$p��A��l{$p��A�������Y�f���+{��(z^�g43��	,A��_�z���7p����#����
�%h�+I�p�X��$��#����
��
�%�����$
�5����
o�=K2�=+I�pi��Y�a��Y�Hz�[g��k���G�+<+xn���3�"�`(�dX{�g��
g�H��=�d��(V�H��=�d��(v�H`I��{I/I0<k2�=�3Hz�{$��=�d��(f�H��=�d��(V�H��=�d��(v�H��=�d�Y�C��&��ce� ���#�W�$��F��Go�3H���bc�.�3H����`��dX{�g� �H|(x6��� �H�+�V����UV�*+��
���Kc��X�5V�\�Wl�[g��Y�s�^qV�I���Y�a���3��
��=��+�����ue�y��5�bM��+x��+���:�3�`(x�dX{�g$�N������af���#����af�X�#����af���#����afUD��k����g�����{�0�Q,������af���#����af�8�#����afUD��k�L^�3H�E���=�d��(�H��{�0�Ql����{�0�Q����{�0�*"	��gM��{���$���y��A2�l+{$p��A2�l;{$p��A2���H���Y�a���A�+��#��$��F1�G'�$��F��Gg�$��F��GW�$����$
�5�����g�����{�0�Q�����{�0�Ql����{�0�Q����{�0�*"	��gM��{��u���=X�a����{I�(x��g�3��	\�g�3��	��g�3�"�`(x�dX{�g���A,��W�$��F��GK2�
�G@(��s�{=��W'w�����������?��x#9	��p������Iv{4��&�P�G��yb�[4w���{�Fr�����='4�w���
��9��x�\suW�sB��1������!Q#������5�EC�2F�+�SkL��Je�XW��2��
��8�����k@{4��\��7�N�\��,�i�tL��h
�\�(W�&Wh.��J�@�+��+4�EC'W �������
c!W �E��+�B�X4l�
���=0�B�X4r�[��\�A,���tL��
�\��V�&Wh{|���ZWHd��[��K�W4l�������ci���RI�T���*K�W4�Fr�q����Y��at����/����h�o�'4�B�3}w�	\����w�����h�+����N$W�����z���7���
�e�����{�����
�\�PV�&Wh���L�@"+��+4^EC%W ����������+��J���

V���eB��\��*�)�t�L��m"U4r"X��\�y*���tL��0
�\��U�&Wh�z4���j���
�Q���+�J���
�P�P��\�{`r��hh�
��=0�B�S4r�V��\�����_iJ��#�+47E�F�@�*�=���kh��J�@�*��+41EC'W a�����
�����=2�B�R4$r�U��\�A)2���tL���
�\�TU�&WhD��N�@�*��+4=�{	�{dr���hH�
���=0�B�Q4dr�T�����\cQ44rbT��\��(��tL��@�h��D#�������a#W =��������+�J���
�A����M�{`r���h�
���=0�B�����P�G&Wh����\��T�&W���G?2����;�����r�@t�-��
��,i��H�x��%��g	T����GF*�6V�,�����xl��<�&[�QX�^�V��Y�Z�QI���VY��d������
��
�%����V�uV�,����x���c��g	m��l�U9+/�3�d�l3{$p���&[f�X�#���6�2��	\�g���Y��B��f���=�XV8�GK��=�3Hf�3{$p���&[f�X�#���6�2��	\�g���Y�B��F��ce� ���#�W�l�e6��=x���&[f���#���6�2��	��g���Y%�=<��W{�g$��
+z��W{TV�*+��
���Kc��X�5V�\�Wl�[g��Y�s�^qV�	h��Y_���3��
��=��+�����ue�y��5�bM��+x��+��;yF�Z(x��W{�g$�N�����6�2��	,��`����Aj+
���6�2��	\�g���Y��B��f���=�-�����y���&[f�X�#�7�l�e6��=�x�`�-�Q����{�l�UQ.<k4�=�3ye� �E���6�2��	,��`����A�+
���6�2��	��g���Y��B��&���=SV��]Q��z�`�-�Q�����{�l��bg���3�d���Hy��YSc����{A�(z^�g����(f�H��=�M��F��GK|�=�3��g������=�M�����
�5D�����g������{�l��bf�N�3�d�l{$p���&[f�8�#���6�2�"2`(x�LY{�g���A,��W�l�e6��=x���&[f���#�%\�����3��E�s���&[fUD$�1k��X�3H�E���=�M��F��GK�\���5f������%����W�$V�,����X�Hz���
�%����WxdV�,���(�x$�`$�P���������Wx���Y�a��X�Hz�Kc��k���G�+�:+x�dX{V<�^�1X�s��d�Y�C!�$���=��W8�G'�$��F��Gg�$��F��GW�$����$
�5��$���=x��A2�l3{$�$���=��W��Gg�$��F��GW�$����$
�5�+{I���	�z� f6��=x��A2�l{$p��A2�l{$p��A2�,��
�M2�=�3��
o�=��+n��:rp���Y�a��X�4Vl�<��[g��YqtV���W�yF�`(x�dXz$��$��yaE�i��ye���b]Y�s^�bM�X+��
�k��}c�N��$
�5��Iz�{&��=�d��(f�H��=�d��(V�H`I��{&U��`Q�\�g�3�"�`(x�dX{�g��=�$X=/�3H���ba���g�3��	\�g�3��	��g�3�"�`(x�dX{�g���A,��W�$��F��Go�3H���bc��dX{�grc� 	��{�0�*"	��gM��{���$���y��A2�l+{$p��A2�l;{$p��A2���H���Y�a����{I�(z^�g�3��	��g�3��	��g�3��	,���`����A��k�L[�3H�E���=�d��(f�H��=�d��(6�H��=�d��(�H��=�d�Y�C��&���=�W��`Q��z� f6��=x��A2�l{$p��A2�l{$�$���=�{I0<k2�=�3ce� 	E����af�X�#�%���$|�����+N��3�Q<2f�8��$��rd�F!����K�q��lV�-�.fU�\IQs\i9����B�����J�q��lwV�WZ�;vf�x�b����e`6
�������JK�
G�+
���5������Ws�k�+-�+��(�
�WZ�;vf�8����h��40�Bd�������3H~E!0{Fs\i��$���=�9��T��_Q���WZ:{��(f�h��|k�*^�3��J���A�+
��3��JKa� �����q���g���B`�����2�3H~E!0{Fs��E���Y&L�19��l���
�++n�+�����B����y��X�5V�Y�u�8:+��
�+��NfU��3&�����b^X!���y��ue���B���5y��X�'V��bw���w`V�����JKb� �����q�%�g���B`�����R�3H~E!0{Fs\i��$���=�9.Z�u���=�9��$��_Q���g4�����A�+
��3��JKc� �����q�e�g���B`����h��?0�Bd�������g���B`�����R�3H~E!0{Fs\ii�$���=�9����_Q���-�2fU����WZ6��_Q���3��JKe� �����q���g���B`����h�C0�Bd�������3H~E!0{Fs\i��$���=�9��T��_Q���WZ:{��(f�h��|O�*Df�h�+-�=��W�g4�����A�+
�{Fs\ii�$���=�9����_Q���-��fU����WZ6��_Q���WZ
{��(f�h�+-�=��W�g4�����A�+
��3����"��
��3��J���A�+
��3!����`6
�+{F�M���{��?(o�6gI��Gb�#�.�<K2�=6V<�^����gI��Gf�c�����Y�k���GvF2��5k�J��������%k����X�4V�,Y����xd�����g����`�#;�<K���3���H��x����af���#����3��	��g�g��(v�H��=�=����d
�5k��d���=x����af���#����3��	��g�g��(v�H`���{�1�0<k�,=V��c��=x����af�X�#�7��f6��=�x�`�0�Q����{{��EQ��C�����yF�c������x����VY�TV��U�X+���������b��(���Gg��5k����<#�0<k�,=yF�c������x���b^Y����9�^�&V��{b�5y���b'�H2��5k��d���=x����af���#����3��	��g�g��(v�H��=�=����d
�5k���ma� E����3��	�y�`�0�Ql����{{����`�n�3�3���H���Y�f����+{��(z^�g�g��(�H��{{���bc�.�3�3�l{$p����afUD2��5k�LY�3H�E���=�=��F��Gg��f6��=�z�`�0�*"��g���{�.�$���y����af���#����3��	��g�g��(v�H��=�=����d
�5k��d���=x����af���#����3��	\�g�g��(�H��=�=����d
�5k�����g�����{{���ba���g�g��(6�H��=�=��Fq�G7��fVE$�P��Y��`�����GK��=�3cc� ��5���&���7p��$��#����
��
�%�+I�p�X��$��#����
��
�%�����$
�5����
o�=K2�=+I�pi��Y�a��Y�Hz�[g��k���G�+<+xn���3�"�`(�dX{�g��
g�H��=�d��(V�H��=�d��(v�H��=�d�Y�C��&���=��W8�G/�3H���bf�N�3H���be���3H���bg���3H��UI0<k2,=V��^��=x��A2�l{$��=�d��(6�H��=�d��(�H��=�d�Y%	><�dX{�g$��
+z^�W�*+n�Ke�[����bi��+x.�+����������u�8+�udg$�P�����H�Iz����������ye������z��X�&V��<������<#I0<k2�=�3��
'�L��{�0�Q�����{�0�Q�����{�0�Q�����{�0�*"	��gM��{I�pb��dXzl��mc� 	����af���#����af�8�#����afUD��k�L^�3H�E���=�d��(�H��{�0�Ql����{�0�Q����{�0�*"	��gM��{��u���=X�a���3%�g�����=�d��(v�H��=�d�Y�C��&���=S��`Q��x� f6��=8y� f6��=8{� f6��=�z� fVE$�P�����`� �N������af���#�%��=�
{I�(x.�3H����`�n�3H��UI0<k2�=�3}e� 	E����af�X�#�7�$��F��G�$��Fq�G7�$����$
�5�����g�����{�0�Q,�����cW�M�Y'�]���(�Q�XQ�ai92f�xcEI����cg6
�+J��|��*D���9��w��F!pcE�q���cg6
�;+J�+-�;�Q<X��z��I0��m�x�q�%q�7�c�0W���������O�+\s\i�\����'��9��w��F!pfE�q��o�`V����q�%�g:��O�=�9��d�L�;�	�g4������|�>a�������3���'���-�#?:V��+{Fs\i��3���'���WZ
{f����3��JKc��c�0{Fs\i���w�f�h�{���I0��:2y�����Vtw��++n�+�����=rcE�q��5Vtw��;+��GgEw�y��p��o�`V���<cr\i�+�;��++��+���{���5y��X���G�X�;���I0�Bd���q�%�g��c����WZ2{&�;����q���g��c����WZ:{&�;����q��o�`V����q�%�g6w�xc�h�+-�=��;����q���g6w��=�9�������#�g4�E�M�Y"�g4����=��{d�����R�3���Gf�h�+-�=��{d�����2�3���Gf�h��|��*Df�h�+-{��;���=�9��T��&���g4�������w�a����h��I0�Bd�������3���;���WZ2{F��q��3��JKe�h�;�0{Fs\i��M~�f�h�������U!2{Fs\iI�M~�f�h�+-�=����sa�h�+-�=�������q�e�g4�w�=�9.Z�m���=�9��l�M~�f�h�+-�=�������q���g4�w�=�9����&���g4�E�M�Y"�g4����=�����������I0��=��&���_�\k�?^��_\����-�����������������\���-f��������i����f�J����C���_����������������r+����=���|=�zyw�X.�*�������������������������^��������m�����^���oR����|G�����	���vY����z�5���zH�_n�e���&�?<_�o.��c��.�?_�>����������o���'R���}Vq���D�z�x�t]�*l��Ta:_�_���b��L]��W�]�A�^����}�����e�w����h�X�]f�/�;��o���W�:~B�z9k�t���4{��9'��lk�^�E��O��f�����9W����	?�{F�)?sF���.wS��
~�<������O/��\�lk4��%2Q}�bJ�Ta["�
��c�{���O�8�){����������L��������'��2O����zf}���X&Sx�*�/wA�2����r�U��o�?�LT�=c�{��=��*ljb���eE��	���)'�������@&�'�@NW�����M�L��Y���lk���	���k3��k�X��3�����q��V�L��3�=�S�b������L��?Vo�*�?�����MULt�����)�\��z��(�������������_lU�*l��TaS�s� g+����in�|]Lt�;�l1�������W��o9D�7>�����~��rT��o��Y��|f:�=oU:�?������D��'N'������7�3��/1�d��,$|>.��~�p�hN&�
��8WX/2�W������;���b��"�r��3���)o��+l������.����A�.>�)�>�.�,�{0%m�]=�����-"�~F���������6�1}��)��8Y������������K={�8U��7�?���L���>]O&��O�i�,R{05u1�}��l�b��OXg�{��n Z��i��?{��E�d6�O9y�4K��OGg��������H�?����c����7f�'�v�bt�Y��|>:�=��rO������_T�������'NXy��������I�En���s�vu�+l�d"|���	?���9yL�<%�}k>��t��7D<Y�
��8U�.*���p�2�}��z���,�D��`T�b�{��n'k]�,,����)	���T�d�����&S������K�;�����&�x��^O���H�E���w&p�{qe)1j������D���=����T,S��������"3�>�sS'+S}��}�h\j/2�3�^9Y�^dN6���u��	���7{��l]��}�|L:�=c�T��}`w���o�N��<��W?�0>/h�E��1h����t�{��c&��+��+��f���+i����"��5B�r��gX�<��[��{>*��>�\��8U�����za������te��2����Q���#�����o������O�@�T�����|��������9�
?���>���S�7/M]L����,D�������=���9�u����@�\U&��l9>]�VIZg�=�J�Q��������\H�k*��cN,����?7�=i�T�g�$)�����K������+l��Ta{��)?���b�������d�����>�����S�m]�~�|1�}�|!�G��i���4)��c���)w��
�"9U��D������c�}N��-������3��g�����.���������i�Ti�1������)q�=���b"|���;O��'�tS����V����'��3�3���da[�
����^?X����;��?��-�.�l��)�L��S�w��^��+loNf��|J�de��>M����1����p�n�������>����A9oL���vO��,/1c{��^����O6��{����L�������N���c�7��z���~w����������o��������2�>g���T%�ioNCg�g|������q��9oLt�����Lu�bT���0t�{��s�m]�*l�b�{��mg+S]���V>��tOy��\a[�
�ud���{��.&�g�EYg[��?g�g|��T�������.f��>q���=M����'S"[�����tO9u������g�l:��=��ho����Z���F���2�4���L��	�1xW����=�gohg�'}hv���)7���X��3�3>L}����S�M]Lu��a9[��b��8>��t�{���
��8U���D��l�}Np^���=!����!���M]�+l>,�����3��g:���d����>q?����"�#��E��gl�^f�g���t����5&loOHGg���`�
��8U��b�|�gVf���E�	������)��s�m]�*�����9��{�g�E[b����tt�{���s�M]�~v�L����k]���\~zg����lO����L����#��"�\aS�s>{�2�E����"���)���+l������U<�=+��i����Vg�����L���y�	?�N~��.&�g��i��[����=!����f�+l��TaS��B���9]�K����~�t�=��f������{���]<s�g��Z3������O?g���+������)u1�=�SI3�s�Gz��6���b�{���\a[���p�.����/�O(�>���z����'��3�Sr�s�m]�*l�b�{��b�}������}B�9�=�.N�uq������9�����.�3����K��+Q6~-����}�K�y��������a�>���������7Rf�g��[��?!���9c�zO����L��)w�)�R�k]����(�^?_�S��
��8UX/83�s�`��l�8������b�
endstream
endobj
61
0
obj
15846
endobj
62
0
obj
[
]
endobj
63
0
obj
<<
/Type
/Page
/Parent
1
0
R
/MediaBox
[
0
0
595
842
]
/Contents
64
0
R
/Resources
65
0
R
/Annots
67
0
R
/Group
<<
/S
/Transparency
/CS
/DeviceRGB
>>
>>
endobj
64
0
obj
<<
/Filter
/FlateDecode
/Length
66
0
R
>>
stream
x���_���u��1�Oq�k����A���b���I$O�Tl?��R�TC;v\��6��s��U7%����D���!�!�|����O.s�������|
�S���l?��������q�sH�c�p�����?����}�_��?��k���������!<W�a��g��z���������]y;��iW�����0����^N1�O�rbM�RJ��������R^���Q-;��p�C�5���������m�a�5��������������[���)����9���=���L��R��Rk��s=����)M��v"IO���i��\�\���\����zT[���p�)��	�K���,M��v&����p9um���{�m�����9�i�����N_����-s;�.�[���Q?���U�o~�Q��������~������-��A��5^)�?�cLy���%I��:���7�=����>�����oN?�n��������������_n���M�q������?{���~�������=���O������t���/�o������g�����������o>=|yS+e��k�����<��{2�-=1C�m��1<�EF����)��NyK���({>�����T������C����C)g9<[�+��V�s9�K�P����@	������ekQ��kU���&k��\G�I���qe=c�����6�%���n
N5���<�@#��<�����|�O�|������Ti\%[y��M�Y��l/J��5s+nb���������)�����r�g�~�F����5R�3s��{J[��|>���b������MW��]e��������<�q��|�u~������}����V�[-a��x>���I���4F�i�����g�1�6��;�{W�~�����}����U�Y���VZyfhu	���s���-��G���.���i����Z2v������_�x=���G�k�i\�i����r�N�d�e�
���0BgK������v������2�����kmU������V��Z��X��__7����3tV�)�,���s��{{�lok�����ff	�~k��P<�R?N�3����Q��5V���W����V����K��h�����]�^���a�������������	����6-�s��t�|����]�v�sv6�>����������i��N{��f�j�{�c�vz�3v��4�v�9y;��@*��,��e�^1�U��vje������f��G\���vpA�tJ�R�]��}��G�6Co���]�+I3R��6[?S��.X��&����#�"����_#������H���8"��}p@�#����etA�G�'�\��y������ �G����'�6Zyf��G�a���bF?��E�)�<>~�����H��z�,�u�{&�G��m{6������G�K=w�>"�xA���4*���!j�~lpA�!����R^��f��sl^n��nD�%`�g;>���v�Q��P��g+�j��zH#�<36��[O=s�6=�h5�86��}J{�)�cF�������[�cF�"D�cq�z��aiW��c��R8��v���8��am7����.q)��{a�D�A�qp���/�)���"��)�0�8�����X)��xa:�@��#����$E�q���q�1Xg&��������CR�A����3���Xq�f2S/:t��&E������2~�g�g�������R�.K�+
�D��G88JR��6H�:�v�����6��8�;0B�a����:�"����N}�F�}�2���i��9n���������&�G"�����E����,*���M�W���p���X�a�q�.w�z�8�J����cj�#�7�����7���G���y��,��l��g�������h9���G_z����=@p�g���GZt6
��x������\�`/l>��>��8|�V�~�)o���������<2���ey���p1��]�9�<+�&�J����Z6�F{��W?'�!Z�8�F�g�2�/��h5RR��Xd?��G*�d5JV���a?��B*�l5��u�|,�����|�x��j�!Q4���_��Qg���:�H%������j�����^��aZ��Tc
���D8����h��4V�D(%����2���������4�j��F��dm�^��Vs\5&L�l��2�����@`2N6N/�,�9�h��@�D(%����2�����������j��F��dm��Y�T����	�1�8g�S��>�}h�D8�6NS�8�[��8B`2�)j��=�~� 0����4N�6w?.����i*�r������i�5N���|,V�V"L���4N��g?�����i��r[�'L�h�4'�Sq��q��dL6Ns�8c������i^4N�t����J�y�qZ�S�u����8�8-���8��8C`2����Z_�1����]���h������Tnv�*0�5�Ul��q���"+V��l��
���h�����4.	�����i<gT`n�HkT��GXL�(0�K�(�j'Tdn�Ik��XQ�4�ssPZcA�������j5���S@�%��XqPq��k%
������8��#����sF��Q��#�G��b�Fq�q�9g��!�s���9#>
Y����:6��9#~���9�x���l3����sF�Q�0Gg��w��(�N���i
��q�#�������L��3b��s��'�l����9#��(��#����DdU{(
����L�3b�"s���l����9#~�(���sF�%�Q�1G�����(&S��uj
������M��yP��9SF�1�M��9�����#E~V���>7G�5T��rs����0�bs��F1FTd��#E6�iD��H�FB��0��
���j����a6�3*07G�5
*V�),T���j�	�a6�*27G�5fT��q�Q��9R���bu����
����S@�)��P�y
����`��fu�ZsFf�s�qs�ZsFf��9�x��G�l'���sF)�Q\0GO�3�H�UQ�(0�#��3�0��#��q��F1c�89g��"�	s�q��G����@E�Y������8b�8�3�H��b�q�����I	sFhS`N�3�H����9��p��#EVEq�����Tk`���9#�)2�q��F1a�8��3�H��b�q�8g��"�s�q��G����@E�Y����)��8���<p��#E6�s�qs��w�#E~V��c��#�*V�Y�9����0�bs��F1FTd��#E6�iD��H�FB��0��
���j����a6�3*07G�5
*V�9�o)��:R�1��8��qBE��HG�����(���#�*V���,���i�1T�*.���������8PQ`VG�50g�a61G�3�H��b�q�������x�q�9g��"�s���9#�Y����:R��9#���9�x��G�l3����sF)�Q�0Gg�q���(T���j
��0g��6E��9#��(&���sF)�Q,�#��#��3�`��m
��sF)�*�fu�Zs&�q�M�9p��#E6�	s�q��G�l����9#��(��#���8RdU*
��H��L0g��6E��sF)�Q��#��#�%����~��s����E�+���x��Ea�������99cDa���h�;A��PX��"����,X��+������EX��"����,c�e�+���{�++a���h�����FX��"�����s�u�+���<���-���� ��&��\��g�
���PrE4�CV���5�+������HX>�"���������+������IXT�"ju�W�O����Tw|e)%,�\Mu�WVU����Tg���R��Q�{��P?	k1WDS�1d��IX��"���!+�I�
��Tw|e1&,�\Mu�W�e���Q�{��D�p�����+�5a5��h�;��pv�����+k8a���h�3��x5���sE���!+�1����TwY�v����TwYQ��r}���"?+������j�����<cU`6TkD��le�Q���P�1�bu����
�qd�:�lKB�fF�FF��/����������PHQ�C��b�P���R�1�b5����
���j���l\T`n����*N��
�S`�e@�sF�(0�C��3b:��#���E6�s���9#���Fq�q�9gd>�(.�#��[��3b@��`��V��9#���9�x����Pd��1G��32�l'���sF�C�UQ��(0�y��3)`���l���sF�C��b�q9gd>�(���sF�C����9��p��|(�*��f��Zs&���M�9p��|(�QL�#�#����"��9�8q��|(�Q�1G��EVE������Vk`��sF�hSd8gd>�(f����y�ou�����p�ss�Zc@��0�J��C�Tl��(����!�bu��F1������H�Xf��P��9R��Q�:��sF��H�FA��0�����:R�1��8��qBE��H�����a6N3*07G�5T��qYP��9�Vc
�8T\*0O���q�����Tk`���l<b�88g��"��9�x��G�l'���sF)�Q\0GO�3�H�UQ�(0�#��3�0��#��q��F1c�89g��"�	s�q��G����@E�Y����IsFhSd�3�H��b�q9g��"��9�8q��#E6�3����9#�Y����:R��9#�q�q������sFhS`��3�H��b�q�8g��"�s�q��G����@E�Y����)��8���<p��#E6�s�qs�If$��������1�����k����w���*���~��9C�GV��d�-oP��GV��d��o��+�k��b��[���������75�����=�g=�����z�A�/������e�O������_���V,*�+�O���K@Ez/���y������P���3�$�����W��9g�a>�C6�&\�s���|d�fj~'�����G��F�1��:R��<�G�ox��kky�y�����������3�l��������9g��>�Q`�1g���O�	?�y��c�u��'s&E���3�H�O��xX~�/�lX�s���~d�]~����������e���^-�9#���{a���Z�sF��#�����h�<��<�G��=���jy�y����-�/Z���3�������f��/�3������1��:���sF<,���G��9gd�}�&3���h;��YWd������qq������6Xf�qq����n�Q��y\�dm%�[����GV�������$k�s���g�Jl������<.n�����
(0�����Vb�H/�v�<���Q�zV�m����qq���(���7��[%��v���
�S`�e@�sF������Z��:�#���u�=x�/S�G��u��o��*S�3�����>3�������"��^0G����1+���s���9#���O���c�s�����Jl'���sFf]���s�Y=�����
6*G���sFf]y��/����9#���vg���sFf]yo������9#���
���`��z\��a%�{#`�8�32���+��O}��32��{���O}n7X����9��p���+����v}�aV��50g����G�������;�����#���m��VG�l����)nP���~��l)n
���t#*2��������~k������F�+��6�ss����Jl�`����)n���mN(0�#��QWb�����������+���sF��Hq����(��$�>7G��h��v3��
�S`�e@�sF�K������\�����#��q��e��p���9#��7F���}��3�Hy[B������sF)o��7�����w�[��x�#��q������m���9#��w�����}n�7�[��n�#��Hq�������9�8p��#����es�#��8R����6�9q��#����~\s���8R���o{5wY)�����0G�q������i�s��G��[����>'�q������h�ss��e�Jl7<�aVG�[$��vG#����8R�I��q��$3����l)s��b�#m?�����E���Tl��{����X�=�=���U���X�=�=���U�'V�����E���3+�kr���c���er���c��+�kr���c��3+�kr���c��+�y{t�)��Xq	��\���X�<���@�y\t�Z�sF� �<.:V-�9#��{�����u�=���U�s��:���E���9gdr���c���3���q��jy�Y�����X�<���@�y\t����9#��{�����u�=���U�s��:���E���9gdr���c���3���q��jy�Y�����X�<���@�y\t�Z�sF� �<.:V-�9#��{�����u�=�����_8gdr���c���3���q��jy�Y������3�������;������������?��Wu��/��X ����a��^����Z��������_N?��O��p��������+�-a�vuJg�m��)�������:������?>=}s���w�M�VY�xM���~p�v��Gh��I�L��v��f��<\U~�����nR���[�_�����oo��9>.q������S~s[t���|�p���o���0q��={/�������O���6�����3q��=".�
���O�oo�sW�w�/������Un_�NO��$��?+�="H6_���>��?H:��nZL�\����~y��cz\���+���O�����A�77+C\l>��������{{*�������S�qq��A���z72�EG����q��c��xu\tt_2�\���m\\����E�3~sD\t�����^i��_�=�s�����8V�����6.z��{6.�U�����}�����\�}��P��F�r�[����v����uT�i�s��.�he��4v���+)\=:���U�	�v���qE�V�a��w7�C�������VqQRo$�?.:�/o6�6.�qq�0�EG��Q��������t���N������nm\*l��Pa3�tu��:\��E~:����B���Of��8V��EO���B�=�{�=��,�������}z�ThO��	gW����C�X�=�C�\U>�z�����f?{����m��6.�q�~u�8b��C�����!���������~������������0w�����~cb�Z����������}����|�]k\�l���B{�w�k�������qE���������<`��������d����&F{���&H�6Ar��	/�}I�����G?����YR$�C�$����C�u���������E{����8�)�������E{��\<��=�q���������EW�����g��0/��}q�{�qq����C�M\tt�q����p��r�[+����t���	r�#=��M\tt�y�v����4�N\�?/��}uD\+l��Xa����1��k����8u���y���!���
��8T��EG���8X�"�N����=�G��+l��Pa;/���������9��W��t�9V������z��}��O��NC�����#~� ��Q�&��{�����c�M\+�q��=f9Z�"������{���Xa�
�q���~��|����bG�������O1m\t�Y-|�������c����1�����n��U����WFo�#�_u��������{���|�xb���-��<���|��gO���28V�^7��F�3�����{��8�a��"�=��G�����&.���E_��y�2�E�sg��������Xa�
����+C\$?w���y���!�WpM���$���G�|���E��!.����|5�
endstream
endobj
66
0
obj
8095
endobj
67
0
obj
[
]
endobj
10
0
obj
<<
/CA
0.14901961
/ca
0.14901961
>>
endobj
7
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
17
0
obj
<<
/CA
1.0
/ca
1.0
>>
endobj
14
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
20
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
25
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
30
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
35
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
40
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
45
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
50
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
55
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
60
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
65
0
obj
<<
/Font
<<
/Font1
11
0
R
>>
/Pattern
<<
>>
/XObject
<<
>>
/ExtGState
<<
/Alpha2
17
0
R
/Alpha0
10
0
R
>>
/ProcSet
[
/PDF
/Text
/ImageB
/ImageC
/ImageI
]
>>
endobj
11
0
obj
<<
/Type
/Font
/Subtype
/Type0
/BaseFont
/MUFUZY+ArialMT
/Encoding
/Identity-H
/DescendantFonts
[
68
0
R
]
/ToUnicode
69
0
R
>>
endobj
69
0
obj
<<
/Filter
/FlateDecode
/Length
72
0
R
>>
stream
x�}R�n�0��+|L��h%�T��������PK�X�����&MR���������h_?���<z��j`�����4��Bo,	�F�?�� ���Y���v#+K���4��o����
�^�ol�7�&����/��<fU�5t��I�g9�P��u��y��/�}q��5�F
��
��=�2���c8���1����@8~�cF}J�>��'���"���>�E�4!��+w*�vq�o�4EZ.�+�*�9�R�+�a�TH���@�(Kl��JF�B\��\���oA��w��w]������05��:(c��Lnt�
�o����
endstream
endobj
71
0
obj
<<
/Filter
/FlateDecode
/Length
73
0
R
>>
stream
x���	xE�?|���������f�aM#��(�/$C����**
("*���"8.�:�qtD�Q�qgFT�Ay}���~�Tw�����~���'��������:[��F``�� �6�������|�9�(����:�����a�$�������7|�ig
����&O�=�?��Q{�N�i��-	fc��s��^�hB��1��e���L�(>]��z1�����h����`�1,�;������'�+��"*?
)����)l��:N�)���
6��l:<{�%vkm�]P����Z�����8��
F�O��_�H�:�F��p�^7�n�p�sX��ob�[�	������]����G�-�
.��`.[���3uO�	xv�H5��0	S_�M����}�|�����$��K>
�a�X-�����A\�}�`0d��>}2|��l�����T]j?��A5L�u����B�<>58u���"|�C�
v��~�2�|2�D�$D�.����7�>��qYS%���������-��Y��0Gv�]��|}�-�Cg��}k~��)���%���7�p\������o,�:��l��N�#���[���Z���� >�C�`;�pH����tVIo:�r������(��9�M�l����>������������N�����;�Y�'���l8��Mc��Jv7{�d��q��0J�)|-N����z�o��@�E^!��o����OM�LuI���H�����z|�]p���G�w&3;s�/���hv�nbw���&���V�����7�[vV�)B��%d�/G�/\+�RxD8����?�����-&�2�B��`�V�k��C���I)�.���c�&�Y�%���Po����s�j,j��	�V5�����>�7�Fq2�{?3p��G��o2�]����2�	l���H.g������f{p�����>;��s�L�-��/���<a�p�P/�-�U�.���X$����B�:�~�N|]�@��xZ<���d�2�l)_JH�	���z�3�3y��G����VV(
��]���0u�Z����T��� u�v��������p�P"E�7�7��'@�8X@J6�U���^��)	�!pR���> <&�.�Al$�:�OS��f*���	i����E���$|�8`��|Y�$%�?���GL�6�{����	�iqR�o���X��_�����C�`;kY�t<�mF�0�ua�S 
C�����-0S�+�@>^�Zi*�	%l1|O!W���R��{U�.�|��|�r��D��Y��N�Zx��C�
>���~-�N�#�4��a�K-�������T�����t[,v��0\�Re<������Q�cN)�2���(!���A�R�t���Q����(���.�R@�c��z
JM��R�@{�+S������6�[�n������!�L�/������w�����/�v���5&z�/�j�/0*SkRG��Q�>W��p��+la��J��[S����������Lf�i�Y0������q�3��
0Y�Z(Nn���p�BG�j�?�%���+Y�����z�w�VVZ��s���'������dg�33�ci�H8�}^��v9v���*�$
����������I�9��t�D���"��.�Y�/,S�����Lb�)�J&�����L�W@E��x��x���9�6n�X���7�*^w����Zwb<++���������x����L[���/>n���'��d[�b�j�c����P���,������c�'v�.���_]$�/��N��7��n������eeU�/�c}&�\Y9���	^��f��>u*o&>��n�o-��zM�W�$�9����'VQ����.t����$>��g���w��������\�ze�n���-�f���
��u���5��c�kp��ck��Uc����d����J��9�(�fF����;g��585��u0���m�hrW�(D��W���UW��S5�ol�V��n{$�\x�}�V���V���8�-#����/N�A#�G�Q�r.A���O�cO���;u�����zRw,�Uk����L����Y���|�_'�i9���R@��\�3��Q��o��D'�����x]"QWTD$���9�>�������499s�88|0�vbU��8�YY4��7$�JL�->VO����m�����j��>�N`4�Yj�i�^���\d��,���������u,��'����4|��x��5��uAJ��������+�	FLH�]$����)1�Q'��
'����T�sX��V3P�V�����J
��T��������0}����X-b�QU5n�j�����/1�x56+��F#g��
�}�	UiuI�>T�O�2�L3�U�G����?
���������Y=�!�������z��������jL�iH��=����*�i�2�����U��&�������p��j��m�����������$y�@��I�8%`���&Xx��]I�����3xzR�g1�Lj�<��0O���<��H��5�%�p��j��(0n`���
���������=��K�p��>*tm�5�1�M\5� 
�bP�����Qa�%��� �K��8	���h��w��XQQ;���v1��,-�+��L�� <�-��#������n{�se
��v�#�q|��K/Nh��O�:���T�h<�Uh�
���-/'����Q���S��u���]F"J��3Y�|�u���SpgBH
d2�
c>���3Y�,�t��N9xq1G&�x���L��x������2V�+�Z����������?X��kYi��J��{�����V��������/B������'��+�F��W5N���/���������X�p���,P�������=��
����5�V/� �f��'#s���0�
�BT��"��;��!��j�S�8�D�N0_�,+�Kh�v�@3m2`+q�'B^2,T�M����%h�K��i��|J�i2:w*)+	�>x� ��N}&y�}�A��N:����h��n�=ZiHOz(-�)�jtM�\;��R�>�:��G���tU5�n����h�$�3���+����h�$#N'�<��:xuPt��:����_�q�V��O:�OR�I��;�<�U2b�+�H�r@s8�Jy��<��z%�b(����EuDx����IY)���r�����=,��]�4�'m�o|`|dD�Lu�}�oV`f�&�:�Z������������w�������������Hb��z6��+��A
-�&�rJ;YX5��_�J�!�Q	��L���nx,��Y(�q��'�X���6���i����'�J��y<j��������UU&�$�{|��"�
h�DA�O#��h�9��2z��������77�u����Y���gnZ|i��&����M���z������?�{����O��z�W�W�~��w���&��������!��M~�NO�Li�p���EzNbVPdA���!��l|(l4��H5���kRC�����W������y2B�cR���CF(��Y.z���rR��}7�`������q����X���r�)���jS�d�xE-���[�p������{���
=g�z�k���&Rq2��.P�3h,H|�U����TH�9_��`�h�����v�x<<�U��i���DA!*��Aw3b.������h^L:[(��<��D�����t=�D�t����Ohn���
������v�&�^�0:�Oy��m�h���$���Pk�����Kv�H�HyQ�����by5�^��r�r�t����^������I����Q�^�>!M�i�Z���6uG�(X0��G3l�EQ^�E��X���L�Dc�3Ck��>��<
,�����������j3�F����mA�M$^bV�������I�gG�0A�#,A#`����������I&*�S:�U4V�&�>����e��C��
��!�u��C5��opb^ +�RPW�C9��Z���Q���I��nB(�W�����
7?�v����7O|����g<�|��I�n������>��w��/��y��&v&��T
"�%X�N1��|�A���B|�#�$M^8�x#��k�cCm�����2bRF������t�#�q��-���gb���$|v�x�++��	����rm��&�Pv���+�R?���k���Y�m�j�u�������t�������p�$�a����l�� ��_& �wO@D���b/e���kN���bo�,�.���ab��R�,��E�����|.���k�����V�����}[�M��u��7����
��:�@2���Du�Xn<F|qB����
J�.l^�_��a��(��5��D�+�)3�>���K�<~c�e~�}A������������fN��ym����b��ZYw�������'��|y|�+S��Nx�C�o������d-DQbi�n��N��.p��$���q*�p�W����s~��8W����v~U-\���������[�U�W�_�����X�4�:�3�W�e�e�_J�����6���>q:_%�(J��SR��������
$	��k6�A���,�����6Sq�t��G������uK:�dvN��4�L]���N)�YD�*S��Iu������?H��8El]�}�q����8]�)/g�=,�<p��8����������(m�J�K��������^A��Bb�2I�#i/w,V�H��;�c�/������m�	\3��OI �#z�p�r��{�o*c�w������(��k�Ir���,�)�`��>�N/�����F��b��H2D1���*�M��3�^�b>n,z����M��d_(�v��v�����������nI��9]�0*{n\��X�\H�W!K5�G)CB���+A7��^��:�~����;�v��f������h�$w��F�"���|����{����|~����&���$]\���N����{�D�����������hwi��3B%��J�AXaS�����{X��}�y���v��p��P�\ ^�+�k>�J�c+-2�p���W����lZ�2��@���~�VK�xh������|M�3w
�4�0t����e������j�o����mC+��=�t����z��mGI�F�
�J�"A����I>6�#7G�bF
L2�i&�,}}��.NL�4�d���%���N�t�L6���0#�dN'Z1irv��i�`��Q-�<�2B�T�k�_�������j/��U}B�_M��~f��U������q�Q��b�Zk����/�\���"�����G����2C��AuF�,~C���x��P/�9�g{�l�Rif�)��gQ�IYy����@���1�P���|�l_mm1J��I_��.�3���h`���������������P������P���=�����XK�;�+5��p�:�s�a-��9��_���J��K�NN6x�n�����g���/�9���+�^{��7^{x����=z���?h�6��!��x���7K#]3:
�����'�4����O�������mz������?�e��D�mA�ip���k��I��`���<H�t�du8��@9��|�u[X���HL��9l	.�".��h���U>ub�v�V����r��C�������t�z�Mw�i:1��{�x��&�y~�}M���
�=��`�<B����5���@'��.��K�(�j��#7��;�k{��k�,����+�l�I��t�������?�b��|~���dsIkNGy��)�yunQw�7����|��2:�b�u�0�CoV�"fx�dQp�����o�p�� �t�
�����H7I��f)�������������:h�r�������bvD�;r��"���7��<��KfS&5K5\����?�1l�u4:`��J�� k�$xI����;��N�F��-�Z���;�v^�V�5�
�2�r�
���=|�l�b�(�xG
���I�D���vcC�b�M1�a��#\�f,�ke���TH�f�D��I,p'�(k���[p7����.a.`�\����	/��� LMr��\~3���]0��@2 �v~��m\�q���f��l={��� �Ee�������yU?hn���2�h��9>��R�sg}�w�3g�����;�4����3��z����z\�v��M����i1���36����)�+��jO
�w����i�o�0i��s��k�>�����Lqv��
�����C��W��5G�t>pY����
N�t�8o�k��&�I����A�t����A�5C�o�tx����I�M�����������B"���S��;W<aOq�^��ve���D����I��QF3���i
N��?Q��k�.|����5������h���_���|��?���m�j�c����=���9W/��"�
��N��>zc�������D�D�~?�]\|>(�hW�d-� o���J�0c�k��1j��9LW����L��2M��4�<��Y9���vf�m7o�I[{.4����	��!��Q�EW��f>�$=�gm�>BMm���A�F����z����I�l��JHKc�>^w�3�$�}����G�8�+�������z��7\�_�?����'.����7����W]���s�13���1m]��M�4}����{���w�d
�j��KS����
���)YluZ�"�hQ;gQQ��k�[Z��K����E3���j:�v�h�.�p�g�P�sny���OE6���X�?r����
-}��d �Ne��KW�K�2��C)��'��J����K���c,U�)���k+qE������[��IZ���P�,xB�9��v���J�]��\)���k��k$�\D�u��H�E4M��E]�"_����K!vs����8�#e�h}mN:��\�����Th�:�+�u���v��`!q�+)&w�*�+������o�"$0&;���#���{�����S�ry�0}���m�H�
����w���/�#��\�h�;o�R���;�sI���\��\�P���Y��I�q�@(/����rGN�9uw���R�L�R?a~�U����R��]	�+(\��U��4�
�OJ����\����e�w��8e��h��'���8�@VI�=��u�a������j�XhI���GH�t���5�j��@.�P0����G;�%�l�����]3���``��w���~��\�^���m�6����=�������2{�����o���[�,�w9��y���_\5/<��A���vXt���wg�����\1��ki�?,u\<��e��B(�������_������_�uT�k����,	�`.��7fW�1��\�BS��9P�T�$��;��.�q���@2w���2c}|}B#}#C5�������:��Q������3��s�K�O9vXw�v8A�
���������^���x"�P�j�[ka��`�������r#�$�|[+�e�����wN���Urg�\{"�1��,�J���Dv,I�XW*��Dd,I$���(=�]p:p:p:�RY�Z�
����6��r���{i���9�t���2��<�V�76����{���$�|���%�V}�#�D�>���XH_a������^j�[�����M����m����%�d���O,�q'�5��!��l�1a���i3g����_�%s�������t�7��&H�<g���S.���.F�F�G��
��d�$Ml_�[���O|���}�$�hf*3����V+���s3�f��\g�`��9H�����$v�m�s�����v������knH����-�R/ljL���m���o^����q�.$�Ny�v��4��5��)3I�����/�H�$e<
��'����4���������#��H��+S��qj�������O�������*}UE5���gj��W�f��P��f"�����J��`"���W�'��D�1�n� x����jY0/��J,�2<%���>y��#W�x����;no�?w�5On�a�������cL\=���:�_��������~���Pog��	 u�O�2!��X�\mm�,���X'�-R6�PK��Xz�;K���g���Rgo�H�X/��h��p�����D�����"eQ��p:�A������`MpnP��k�
��iRZ���na3q	�t��S�!C��C�2}Ol�ruJ:Q�q���t;Ia��;�Q����:'sF����=/���H�e�� �����.����g]�t������Rs�u��%@��������"�g��ah����w�7�9?�yH��Q��f#o�f^E��
n{��K�X�M���I���>,��g������y������b�����:iM���pG�1�-~��	���e2�9Xa��M�i�-����V���QB����H	��a/'k�v�_l��_f��W����b{��8��������:�>�~��m��!���gN���
�o(V�fumWY���?�_�QY��MW'eMjWS������Y_�|]�	�@����0�S�j����+���ZL��IM����~�1�-(�+i����%��d������J�jBKCR1�����\:��t5K���*��_���J����!��tgZ��I{g��8�-t�<������)%��Ff�^�!�G��[�tW�����Oop���4������S$F-�>o7��H�xa�����d3o��0h)1����t�<���u���
���PMn��k�������\EO�b��g����.vM�{'���{�j�{~��CO��x���/�46:<�K��nu���dl��K�����E��E������=Y.+D�z����Ad�@��or/O*�����
�"�!�����2wLV�v���s�4sE4��<k��ki���YY�+�`�&�Z��~�X+Y������5J�0��>�V?M��H�{w�6�������4$HR�]i������07�!XL����S��S�����c�����:I'�H�GA"����d���3t�����C_������a����<��� ����`�ISx�}I��uI��R�\�#�9-�4t�a$�D	�}?����S�<+�o�w���_=s����o��~���	���7�����Q:����[t��=��6����
�����m�E�9skI�H$j�)&��S������X��4���o=��u�	�/t��_~U���k�ll\��r������u�u���������Uk�u�u��1#��5e�eZ��T%A�*"�p{��MY�l��'����A���IG%e�tR@�K�1%ID�4�R��K|�%�/�i�%}Y�#M\��~���!��D0��oO�T'�������n��WVq�W���K_:t6 ��}��gS���]8�St[���g[�1���dg�?u~��Q�
N����n������7Vt��o���
/�2z�x�M�*q_V)6wr����J*C��3�xFr9�(�$KJ7�I�S��������+~��O),G�W�,�Jwk�s��J�R��U�������?Ko+����*�Y^�MEIP�j�`�j����_UQ��d�_�m6�n��p*eE��o�I
����w:d[(�/�W|��F��qa��h��������3�)�L!����*a(�N{�3
_���,�^. ����"���Li�hC7��6��D�`\�~�����*_)������U�TX*D~5.9YY�u�(X�NO)��yU��w�f-N/�Z��+pj?��^��[��<��e�k�i�*$|�\I���UNl�-H����rEx����v���+NMy?�������
~�Z�����?����Yu�����A��.�5:/��T$w����l��M�����auM�4�
��7]��2@7�dlp��R�] ���������o���E��]+siC���w��O�m/-��N��0;O?���j�-g�����P����Ly��TN��� �����UN����1`�p-��;�:�w�[�����I0�FR���f�C���r�������K��[���g�v����d���]�3D���|����ts�bf$��D�H���2�P$��D���^��1#.3�6#>�~�����x���4C43�5#3�4�3�B����vgi�tL:f�[���|D>B�x�5���bNFL	���2%'�l�����
yB^(u���0����a���~?���s7����1�/j|Q�=~�T�`i���aK�}N����i,�7���@o ��*j �[)i���F���Kij*�t.�Q� �����pa���]N;�\=B&����K����~@6��z�<O%��8�I��K����h{��-d�����"S?�u>�8�����������u�`:������M�������4�uL��\������;��W�oVq���lZ�X�<5��2ozm���9�{��e���������2������l,�5��}O4> l[�h����1,�O���lk�'��O��5h���N��}�Dz2I�:�=�
��R��w��^���t��.��$Z��q����9$7���0������s[��lK���g�T���vnKc�;�8����-�$�]vn���g&�ULvu�dX����KaQ(	9�9
9���;]�������i[+s�������/�mm�	�=��?��>�M�n$�MT�deW�8oc��f��6Q��=�+��m^�`�������JnA+������4[}��������o��.76.V\5��=�7��y��q�g�	�wg����{�|g�xr2�"��W�E���1J�e�2�b)�zx{����A�A�~���x���[�-���j������kY����+�Q�(��Y�dy�m���I������������C�i|���IGm>��r���]&��;G(b����U���#������N*US����?'��#�VTb6�m0����r�{.��s���S�^.X�sb�:�c��\Z?+Il����c��{��9J���~KJ��%������>�����#K�:Ri�R��*��B�|���gZ.��>q�����
_��Q��]�V�������+�����5��f�������?���������G�*4��E�Yv!!�/	�9��@edPdm����W�V����7m�od�$������o)G��*�;�k��lG"P.�9.�;�	��w��?~�4���f����U���Ivp�\%`BK���r����N�k�K�Rw�dp�ps�����7w���b�.� ��[?����9�/4��h��E��<�-=������E��5����_.=����p�������Sd����o8b���1����j�T.��=0�7M_�y����=�����Om���_5M,
a�������<�G|�����������t+���W|����4��H�Ri�4EZ()V��j�:}�D������p��Y��>��/�E��P4[��JzZ�T�3�zXwR(-V#C�������V}j�11�r�-h��t���Fo>�6�eH��m(o}����+~��w��~����7������5���>W���[qd:��C���~-lqQ���8v�Gr�H��6#Yf�6&�poC�?���Rk��1���[��.�}��l�K����C��������ua��x�x�x�x�x�x������g}~}�� ?� �]��q�*{m~m�����Ks��=�������:=a{����'
����,4-�l3�cFr������
��R���
��&���,y���${��(9[�#�|�$R��9Q������G)3rWD��) �����I?�X�	;�kc�1������R���\�R�:�O��.�����Is����������H�u�gFY47���K�P�2
��~%n��/�"q��S�_kG�_������5��N���-����.bE�&�/2?m+2eJ�~�GN���Ey�
�Jk���"TvY�E�B��MTN�q}���+��SK&�-��0�����������L2��<�i����wgd:"��}�B�Zh�����!��w"1�vZ�'h/1A������.;�5�@��6v��^I����������4Q�v���Z��1�=^2���r��Av��aigKc�V���� SK'�&AN��M����e����L��|���|Q�_�A(+�g�Ad�j��:�!��1�r���/*����CC{u/�{�����s,��xF0�1m���L?p��w�����'��8'����eC\W��x�����#����}���^���{���H������� �2��&�$O�y���<��G3b#2��'o���H�,�0`�����	�M	�D�[��l�4v�}C_X�9XJ�����Q��K���h�lP��}�aUQi�����=)�g��6�n���t3X7��vn@)�����na�Y��SZ��O�N^�c��N��W�h���UZ�E�B��'�Z7�M?`'h��*��U�|��;|�����i='?.LZ��YMw�i�wpq��+(������n�Q�~�J��/X����y��	������Q�yp��$h�O���l^���!ZHD�*%��'!/��i>��+��2	���������L�4d��b�!Q��Z�DOF���
��h**�����S�p������[[�Z%��H�����w���j��O+_�X���:$r�������+U����r�x22sT�\N�SPT�b�-��i��x�� EE��N���~q�g�Y�X�+����G~��������j��;/��~���e�{���y���w�����3��/��z�	���t���[3���I��]�u����c-�b_�Rq��(��*gL/����.��
K�
U1<�����UM�{���>w~m���h��	����~��f~� ��n�6n7����jO\�m�������?~C�K��W��~�K1�Yz�u'��B�\B����W��w
�%;R���i�Gd�@��)n������a�d�<6��KI>��}P{��H��q��� NC*��"��M��s��N����_Q�;Hf���HZ3�J�X���O���[*)�OI�F���b��]�>���,i�t\���E�������\}�JRld�����{�{�w�Zk���N�^]h���v��~����=�P�,p�������Z�
������&a��)����v�Az[y�z\:���{J9c�����_5E?���X�&6��i6�[����Z�Tw����RE's�9Ro'��:�<V��	9������|[�3Ja���Y�Y��yl���C���C]m�X=��QZ;F?]�iI�(����l��,H�6�C�]m�����%�)6�+�{�j���7!�~YV]8�yN���tYp���Y�Xd�
~����P����q���{^�n��
S�n��6�i��j�tBKt6�����P�c[bl
���u����,�J�5��p��(c�����n�D����u��E#���y�A3~���tr����np�������~�T����W]Z���Au�#��;����'u-���J��N�8������U��JG"�YR���t03�F�+���,��[�����������>%��mj'z�6�.��[j~xs���I�n�Kq�����Ro���C1�vC|�CQet�����6]���cY������W���@d��^��L�T�����.������g��E�o|���5����xP�r�]a��s�PVg5
�BYf�m�����m\���[2����u7
wf��C/�;V���+?��&O��]1G�m~�hc�W�+����'q7����������hD���
�pJ����q���c���1�-61�L�w��S�F�a��ao���Q�����,s=��z}�U�*_U`�w�oz�:��u����nu������������G{������3���F�;*�a
���K��}����;��}}��58:-���vh��6#~�/�k�c��@����pid���d�B��:����X�P���c��7���Jo�+L���
��{��eC�4�����;:9�:�a��Cp`���(�PY�_�����8���	��k��E�_>8
k'x�d��~���~}K��UQaA�r!M���_D;�8�S�YK���>�������U���rOv���U�Y��i��B����@?e�?�� 'aF_��d/�_T\10����M�_� ������iV��N���6M}F+�M��N�
�z��k��g���w�H����Yw����	��o-i�/�=�qA�v��3[�j`q��������i�����3�k`�7�9�#��}@u�_�� .Q��Zy�e+a���tHJ��|,���0�Mu��h�G�
�D�����Ii,����3��sx��Y2a�<&����/�S�1���1lR�a6���z{%�nT���l�1��?	��c8�1>�u2�V��P�P0�>�v�}��AWiA�o�.U��K+��a�G�2>{#V�W`{%�8��n��WR>�������+�^.�o�x��`�Fd!
���\��;��_��7��F���N��O����A-�m��#��>����o�qK+\"��Rg"����0[���C�' ��h�>D\,��L3��H��Q1�cA�Qz6���;��^�����3�4t���<X�������y��C-���;`X"}�ihb
���9N46�^��:�:G��G"��,E���`�i�i����r,{��'`~���h��P}|V�A����q,s��Q%D��`����w�A(�tD�'��3=���6`�"�W��MNH�+8��7N��;������F�Y�N���4�E�$~!���l5�M<E4c���gr�����h�9D�������H[fH|�}&~���U�C:��h��g�4.Dk|L�'�����v�<���c��-fh�Es8
��g�(W�L���0P���NB_�t�;a������}P�s9��
$�G�y���8�G�Q�y�![:�d����2�W�g��x�{ak�}�=
	-�����o����|6��|$�����xB��uB����!�"py���d
�h�pa{
1GJB9	��}8?����?Z������#�w�RX*�j&
��L�����=��-���kMKfh�k��d�AS�*�o8f�4�[��AH��
$��~@�X��k�L3}�
Obx�I���tf+�t����!�-(�M>�~�f�?�G�q$#I���1��[�_-lF:&9|�|�m�R���
�G9��}y*��O=���6���&�����SO�{/j��cSM�>mg�R=���K`�!������%��cx���X"��yG�����AO��L��|�����+�11����@���D�>g�Ew�-�{h/P��p}Q	�c�_�y�S)�<�rx\��H�Q���Z�+z����jpZ('�@g�,���� 	Os���3����P'��4;���6�:I���^m�a|������G���C���Q�<�M��'��h���r}}\���
e�*�9��\���,��"��q)����������W�e�J�q3��(��&{�>X-%��2���;d�����������mX?����m���T��l��_�$������S�}�s�(^
���{Y��q��#I��������o2�F����e��H�B	�[��H�����tit;#�z���'����a�
���a��PZ�A�X��_��%��a�/���8������	�@������)8�XO��$���5�>�q����.���m��.'H�=����&Z�Y�ou)�)�������O��?�?���\�Ge����`K���������,b��.��ulSj7�k�V�2-����R��X��b�����v+�������v�;;��+���� ������v~(�%�����;P� ���nB��8�]���������K	�����_,����*-�!?��\R���>���S�qL�|Gs>0�x�E���
����O���Q���+�4.�v�}���A�FD`�=�}�x�������V���4���[�[������0�%L:h��{�'A�����i��������^�~Zz�g0��u�'�������P@r��Q��<�hNB������w	B=���������v�q�����1����`���p	���c8�K��%�����y�,��2�x���=��O@�y
�
����m1@ZEh�}�C*��<���tn�e�����P���/�������q�M��Q���b|>����4�`����i�����?��3�[��g7#f`�����~���0|����c��~�q��A����������0,F�^�?�����C���^��!�,�������pq�5�����3a���9�?���
�q�5�����k����5��|6��4:��6���h�e�~������c�]���L�+��d�b���d�������2�FK��N�z��H3��X�;� ��7����6z��ib���!�]n�u{Q�~��AL�c����L��=�3:�;������N�b`B+�X���.!����)~Nw��u�����z��4m�y�����&S�	�����?��9;�?M��;��t+��L������=���B����?�-��m�������4�Q��@9Ph���Q^���JG��J��y7Y�A����;�7�N`XK�0|��A��T#�o��&�e���9znM�d�s�����������ElE�6������;j]Z�J�R�Jo Z��?��<���vc�����xPn'�i��ch����}�y_�Q��������@��WIG�����}zM�V|��������
�q����\��
���QZIw`�c���L�����/E;�5|�~��L�)�WJ�����c�,����JI��M���W������c�o��6�z�+��R�-K�~���#p�=��	�(	��2������G��h�O�x��6��x���1-�5�Y��.����t?���6��W#j������w�^7���M��o�����p�g�d���m���a�q���m��4��-d�&�������A�Z������9��Kh�d'����?�K���zK����k��{��s�F\.����#�^���4(���������x�Y���2Q�����6���	��<R��������R���.��{�nc/0"��Q��y~O0,r�u�4
�����������U��q]G�H��x�"^d�H����_M"�����r�9h��CY�����
����;L=PK`�So�/1DK� |���`x7��w��=as_M�O�Y���V@{���a3�2�	��x���r��a>c3<�X.�w�Y���vo���
�lG���Z�\i��hg�t9�����X����������m
���wk`~�������~�X~~k`~��B?~��9���9?��A������~��8�����D?���i��O��m:�k��0����?��2����c��)F��F���M=���r���y)Z���\W���G����sf;�{E�1z[T��E�m����z���1�C�t���o�d�ns���[e�[��������b�;�zu��#�~&�#��i����1�5������x�1��/����8#�C�Q����n�C�����C���\~���K����.���G�7�
$������r-�&@�d���)Yz"�'0A�
��;�.�����2�l��ds���`���{B�w�V�����a����!��k�U�X`X_Q;`z-����H�������I�����*S����0�\�*��*;�.0B��0I-����>��u%�u�a�Y7����{�����_���8�@\����E;L����<7 W������{N���kt��F�}	�V��:�*k6(��=�S|_~�1��h�I�
����o���c8���f��g��v�(M�����k����|��-�5tV��]c�Q�6��#h�9���!����7����S���i���}"�C�O|o��a��{�RU��)������`�T^u��>SUn��&-���H����c������/��� �������9ob^�:#b1b�~�����������{������)��Z�j>���!��v�q�j����{�D?�6�7}h��t����[��b8�L�����=X7�PL;�u(��Sn�CnR����h�l��a��+?v��'�X�����s/f�#�o>��3a�s2��T�H��]���s����?�}r�C�{���!�
;���K�>?���	4���i�B�!�y������������P��zKfk����}^�#���/
<N�������o�>_�Wy�EX��P_���������/��?	�2��n7�J�q7��|�O���5��l�x���<������{�T�[�8�g�tvO��~��p��~�f3�(8�/"�E�f�^�J��*����&����u�Gw���`���7������������u�Nj�>N���n{}���4��N1d_�ul4��f�lA�K|�I�L���K������QO�X�#/���S���G�p2�y	�lk��W
l�m������o�gZ��*��-@<i��d��������_�����q"�|i����I�qM?"��x��o'B/�bW�����"��,�>�P��e�����:W��grh����x}s}_��K3Q�������gz�t���"W�P���Xvx�O��4�/�U��10]X��)�>��N��!�`<��Q�xq
t��g�N�`y�(a�ue\������5:�>_o��Z��k�yz�#��j�K��Z�7>�	�R��F\���b������
T��3�X���O@������v��R���P!���Q�s���~ ;�G+���	�����F(?����������HG�B>
��P�C=�-]����:O��I�a��M(c!`}���0C�Y�GJ�}Gs}���3����-2~~Z�5n��}���������)�����{�~N�Pz�u;��PM8Z)���(�}���6�-������?��6���*�at^���B_���_�K�,i��t?����-��>��������;���������������t�=���/CZ%�?������L�����	R)�����D;��B\�^��O���(�2�5���B�P6��}��s�w��J�9�K�0�"j|�@�������&����0�d-�T�3�l7��P���l^���.�� Y�������y��B�!Sz�U(�w�W��N��e�K�Y"��H�����U������.�����S�/h����|MM�!�����.'�,$?$���(���M<H�����d����
_4����:�u�_���A]��:�hGg{��]%�l��|�2��
r��7��|�p���}�z]@�94���^��5��"����i���.�������2���,H�2�I������k?s-g�5.����T��:��$����X�>A�gH^�'�Yf1� ���
�C^FF�	��m�O��};D���z��4�����:V�eQv������_�@���S&6#_�_@��W��`�i8��(�k�Q��G`CK���������8�����X8����_������/p�t$��G��E���+]��+�{7��m���<���Z���
mhC���6��
mhC���6��
mhC���6��
mhC���6��
mhC���6��
mhC���6��
m�����V�
T����t��Uz��[�A���������{�vp!���%�3w�b���2�
b�vo���W{1�O���q��AlA�EH0A��|
�KK[{�
^�n1��(�����x���@�`���-��kD
!B&^;"�"& �B<�Px9���X���8��$���{J���m��`��Y�O_���Y���=/�$K���
��w������2�&]|vm��BI�P|�4i�H���JN	��*Q�
�L (�R��41M;�Q�$�,�����
>�#t�d~�{N���]~��y������^��%��h������f����_>�q�1O������{�?���P<iqnjI�f�R����R�K�����t�&5�#��v����G��$JN��*Q��5�ib5�IBDe�`y�QuGkr>�8���
�����}���5�M��
p
����p���%����80�����do��",��co��[���`�&���&��''u �(�DO�Q�ugW{�	��.��s{7v��;��,u������R]��9�����V��z5��]'6������:��a`84���������
`����o7�>������4.���Y5f�g�&�P����~��.���W��G���u'��L3�}�� ��{�/�]!��ie+��
���!`��
�tN�!�L�e�C>�"yA&����������3�����/�Mn�K���������F��yx���8����������q����q��?�z@M
=E�L���J���,�4K|l�������'Nw7*v�H��V�%j�F���z�ZS�:G���:H���JPK�V�Z���~������h0���N�W�U��N�8������������������?:��O�EQ�(�|���k@M���NO����jw�k��K>�9���q
�a���p�����0����q`�j@��X���� 
���@�X�&����%�*�S_�o�5��8�,jt�`"xX�Sh B�"�K�p�j�[]���I��?i!��Fv�������<���P]�#G_V3������ :�����h?B�s/Q�����C����Q���kA���M�Pq��+��_4�G������^W.�o��2"��.-iB���W_Y��H\q�s��o)��S�HLy��e���zTSc��rR5�sAM+������gA��%$<�����Ic1�WR.=m��_��C�/���=��_�w���;���w���M�,7�>��D���6������G�/����d�2������<N��IV����:I
'5�_#1�6���e�*��h���(���Q;�(����+�^2��w\JF�.����v;t��H(m��l;�/\x�4I[�l�-h=���]�D�~��mw����H��i�i'�S�0�F�Rq�~L���-�[����4@?��qi g��:��[�a��:_�\G49���x�8�C��	��F�xc���(�U�]�\��Khvi�,4�]�g5�qh�q�	[d]h����B�(�D!��EHz���T�S�\��\3I�S��iZ6�4-������yLe	Z�7'K��X~"��&���=�f['5�2i��fK������OL�fl*gO�rZ��t�t���c�
)�G���1�s���|�D���������\��wl����L�%���A>W����s
�b."��p�"��y��q�57a�N�G�l8xf@l��h���%�Zy�4'L��X�nx������g��v �����G���K�T��X�$�g�3�-�D��+�@hz������:�����\y����=R��G����	~Iv�V��9��V��^�xP���<v�������3uo���r�:M��dG
����1\ki����R���l��4A�[c��������-L���z-����D��VI�^��v��1 ����
endstream
endobj
68
0
obj
<<
/Type
/Font
/Subtype
/CIDFontType2
/BaseFont
/MUFUZY+ArialMT
/CIDSystemInfo
<<
/Registry
(Adobe)
/Ordering
(UCS)
/Supplement
0
>>
/FontDescriptor
70
0
R
/CIDToGIDMap
/Identity
/DW
556
/W
[
0
[
750
]
1
7
0
8
[
889
]
9
15
0
16
[
333
277
0
]
19
28
556
29
67
0
68
[
556
0
500
556
556
0
556
556
222
0
500
222
833
556
556
0
556
333
500
277
556
0
722
0
500
]
]
>>
endobj
70
0
obj
<<
/Type
/FontDescriptor
/FontName
/MUFUZY+ArialMT
/Flags
4
/FontBBox
[
-664
-324
2000
1005
]
/Ascent
728
/Descent
-210
/ItalicAngle
0
/CapHeight
716
/StemV
80
/FontFile2
71
0
R
>>
endobj
72
0
obj
319
endobj
73
0
obj
21801
endobj
1
0
obj
<<
/Type
/Pages
/Kids
[
5
0
R
12
0
R
18
0
R
23
0
R
28
0
R
33
0
R
38
0
R
43
0
R
48
0
R
53
0
R
58
0
R
63
0
R
]
/Count
12
>>
endobj
xref
0 74
0000000002 65535 f 
0000211073 00000 n 
0000000000 00000 f 
0000000016 00000 n 
0000000142 00000 n 
0000000227 00000 n 
0000000392 00000 n 
0000185944 00000 n 
0000016145 00000 n 
0000016166 00000 n 
0000185892 00000 n 
0000188042 00000 n 
0000016185 00000 n 
0000016354 00000 n 
0000186139 00000 n 
0000032406 00000 n 
0000032428 00000 n 
0000186101 00000 n 
0000032448 00000 n 
0000032617 00000 n 
0000186312 00000 n 
0000048453 00000 n 
0000048475 00000 n 
0000048495 00000 n 
0000048664 00000 n 
0000186485 00000 n 
0000064467 00000 n 
0000064489 00000 n 
0000064509 00000 n 
0000064678 00000 n 
0000186658 00000 n 
0000080584 00000 n 
0000080606 00000 n 
0000080626 00000 n 
0000080795 00000 n 
0000186831 00000 n 
0000096798 00000 n 
0000096820 00000 n 
0000096840 00000 n 
0000097009 00000 n 
0000187004 00000 n 
0000112815 00000 n 
0000112837 00000 n 
0000112857 00000 n 
0000113026 00000 n 
0000187177 00000 n 
0000129069 00000 n 
0000129091 00000 n 
0000129111 00000 n 
0000129280 00000 n 
0000187350 00000 n 
0000145421 00000 n 
0000145443 00000 n 
0000145463 00000 n 
0000145632 00000 n 
0000187523 00000 n 
0000161336 00000 n 
0000161358 00000 n 
0000161378 00000 n 
0000161547 00000 n 
0000187696 00000 n 
0000177469 00000 n 
0000177491 00000 n 
0000177511 00000 n 
0000177680 00000 n 
0000187869 00000 n 
0000185851 00000 n 
0000185872 00000 n 
0000210458 00000 n 
0000188186 00000 n 
0000210834 00000 n 
0000188581 00000 n 
0000211031 00000 n 
0000211051 00000 n 
trailer
<<
/Size
74
/Root
3
0
R
/Info
4
0
R
>>
startxref
211210
%%EOF
tpcds-scripts.tgzapplication/x-compressed-tar; name=tpcds-scripts.tgzDownload
��=ks�8��j�
\�u�HIv\�*;���U&��$7��(M�c��	�������$�2�$Rf"��"�����F���e���"�=�x�U���hD~���@�e����7�����O������������4G�B��t�-pw��A�_����Y�"N�Qr�.�p�(\�h��Q��a�����?��2eS��w���l�t�O�e'_w����������������?��'���/�a'�C��?�Y�8G$� �4�Q4����qt
��\�vD������2B��"�������M����kTB>F������1��e:G��?{��5�^�|� 	�����_�}��{���O�u��e������(���|ehM����X��?��A%�5��$�_�C��s_&��O�?�p��J���?�l����������w���'�$�.�5�~���:��i*���e�^^��|�Ex�.g�g��%�����1�	�X)�1��,���)9}-�9S3#������5b=���uB�U��� �u��U��y���@�%Z�)	�"`r�,'��R��RT)p��h�Z������~�����?�}��z��������$��d�5N��� �8��C	]��U���<^E�&��!]�,=J��e4���~L�d�� �Q�n)A�T�(I�/*�U����br�^��x�����((�P��Y���������s���Nq>��Q7G����8ZF!4�S�a���)��2KW(I���>v���E7�d�\~�������>w@P*�B��1����C����>�%�xo�C�f�c��C|s��.�S��!����F��U�H�G	]��`y��QE��sU�o�vY����x���?������oT�!����V���A��fT�?�������>O���k6J��\������u��*����?�����|��� 8\�@�t	��i�"��	��qV��a�����t3_�z��]���nVQ&�U�Yg�e�#��3$���P������4|���� K;h���M2��u�L�~�?D������R *tA�Y4� �l���,^uhdg�npDX�t��y�q�;���l�#ZX�8RK�A��f&��+`������Y�dV��^I&��S�P]�i&�dozo���TL���0��l�G5{[Uk����!c�*H��s�)4�/��H���*�'��5�
����u�����]c�``�#��_�Y��:�WA���Q�?V�yi�� ���Lscnw�s�E�D����
7YF:��N3�X�,�"}�=P%0\�X�+J���h=?7�d��@����:rc�85D���������#����A�����
������W�������"8E�/��1�
1
�#�qL������\j�ef�,�7Y2��IN�/gzM���9 �,(�#�/��X<;��4����9G��,�9�U��X��iEWS�����\"�(������
)����;���;}�]o,_<xo��++G(*�;"�d��)��va`��#��#��#�`�����������)��������"��2�oG����A��aA�z<��|��\�������y�`��{���
��YtS�,���Q|�_X�/>��B/�y��&��y$�8mG��x-��F�%n&�YT�6#dg)6�a���A�k��g�7������������TL��<v$�u��$pDV7�zx������=G$Z2�Qw��%S����C�3=�t��a��(L�k1	�r���#@Y���h	�P��\R�y]�P��a����,����S(���E�2��Q�!��d���P�����P����d��1����7V��R^#��SYD5)��R��!W��b��g#p� $h�;;��x����R��$��,���f��9���'!5-�)	P�
��hT{Rwq�|,Qk8��[�rEA9t[�yj+��	S��E�����i�o���t������?��]I��8T�+77@��y��j�fr�06#/2XLf�:Kg����#��j_������Z�QB��'�TV��V]�]��(��� �]X�&lK!�����4���Lh8�����2HwU����L0O�}E*a���a�%>�W���"���&�J�S�<O�j����m0�qn2�KX���&�v�QOR��F�3�t�,����qFxx�y"����,].7�v9k:���@gyP��A��p��5�*hs�Y��hV���
=�����l����Y��u��~��3��m�U�g������ ������'�i������w�w4�(����6;�x������)'��B'����������
���0����#��:9xnt���3r�����?�����2�V�ez�\&��?P@�l���uur�hUZl���v�}��S���~������Z��w������"H�h�!��v1T�a|���������$��w~iG�ru� ��<�W����%�~������]�T�"[�*�i�Ys �Q32�K�@��Rv���������o/�b���;�����������E`�f������A/�����1@����u0��Rq�A"U4"�9u�T4��a�����PJ��c�w�4U�]�e*Fk,l:`�e�\t����~{��W���ky;o���o���M��C�_������~��{tz��������	����,�T�m��0r@�a�u���w	U�	���
��!"lV�l��Z7���ir�W���4[[�����A{��oyk6UQ1���9��Cge	��`Hs�.q5���XL����lq��f���0���[���h��m=��I��-�x�S��T�Ht5s���h6��)N��n|m�x=�&�j�[!N�B55*�T���Z.�
;�y������`��'�����GxV��bfh����(qJgl���-�t0�rY�60V�
N�ZY�{g:T�r�SA�D�o��U�%W�����S�������<�8����/�i�7f��T���4��Q�D�����P�]N�n�E}K~jLA�qG�.(��9��\}�>�����������������A��	@��U��l:��e�ed1lq)��H�;�������$�H��T �#�M�j$=t6#yW����FE:�Y�%U���*�\F����a��
p��f��w5Q��	�3
-w��2N?��]��ZW�_���>�GF��h�80����'�\T{�������P�w��DCi�����3c�@\����\����=T��v����^�����D����~6�����[�}E�����{u�(���A�M#�/�au�R:Y�J���*�S5
h�W)W%������o�u����7~�7�o4�-����N�����o�����37W����95���5�i�^��"��8��o�U��~_��^��6A�{o�������t�����w�r]�aS�ivy���w��P)����b/A5���3��'U?|O���"���<}6���<SU�)%�&�,���#�xl�FS0���U\wkUCP%��n+oO���TA�����*�o�Z�?��P/��_|F�6n�6�m�Y�c-:�E���o�{��(f��=U#��*��_J��m*O�����ZDQ-"�-[���)�q+��oE}
�����^V�����������N��������S5B���<E����N�'�,J�������1Y��SY*T����e�#vu$@�3B��'<������(�&>L8�1�{7��
��]���4 I'���PH�������������q'A���,�&���*7T�����h��L9H�:t}����!��J���-�p�����Q��	+W��iR*�L������8����cf��1�g�@���yS�&��c9"�Pq��To�}�3f'���a��f�	)�z[�%������j�S&���j����������K!�������@jHD
E���
�������L�]��k�'� ��:�S�t�cS%�XCyg�>�,�(_���~�_�dCE�~�u����@���dy$��()2�xQ��h�����+�\B����
��a������� ��$�������u���j�k�n������U�UK/Ga�G$l���j���]�HR�m�[n�/���	l��x��oC�3b?c�s�~N��3�s���oi��n���b�I=��5M�p���q/g@���%A}�&qX���6]�����2�&����,'����,��1MB�S�������������E��`,����7"ET�O[��]=��O��&�o8���q�"B�Y��tEG��
�C�ow�J��)!���&�!��,�C�C����n��a�
�W�_)�d�f���+�-�z������S����\~������DSP��,@gZ��b]R����=��?���z�����������F3�{Yr�A11�W}��f	���B�i�0�M�"�4*P&t���8�����n�tI�Fn�h;)����"���o1ey���i�%zU()-(,�������xX7d�fi&�}gOD��������~>����� pyI���1e(Kq�,��7�8��9���s�������LR�3�����$�>&�u���)��4%H�,��/�l�]��A#����������pPr.`�b���j�������������r����e'A9�5-�x�H��{d5�����pi�Tcj`���&J6��	��>U*��+�����I{�q�3 ��Y��i�1Z�9J� S���Q-��V����8&OL#
?�
Z�!S��-r�M>����czHq$]�@Y=�l����f���E���m�+�lm������� ������������y7A����$tq����(�k����u"���2�+t��s�a���@*2i�w��Q���*�������-� /6��u�Y��LP��#K���������$-���T~��2O�y�Gn���7j
�`��a�����RG~O�����x�����G��|F����L�y~|�?L$��O?f�P�pf^���<p��i��G�?�|�q8>��]���rLG;��\aN�lw���{����9���L�5uau����l�Y��szZQ�}��y�����<�������=�*}��W;v��j�>�����\#����3sc�S)�9�?77�����h���%�L]�GzG[��(H����z��b�7<��]���W��IL��6�hn:(�G���n����$/c�K��|�W�o:���
��7��GU7d��T���H��\6��y�L�S��R�tI��_�>�U�H�����M`s!U�(@�f1���@U/:��V�K�F��&I�!����9j�sJ��jz^��La�A�	R��G�/�����p�������������������������Y�rE�++T�@^�[-�a<"��)Hj�C�&�U_�C������l>�#����QU��9���['����.R�v�p��v�
�~D�K���F��q;NX��P�Uh�*��*��U��*4pVq��

\��*��%����5?|;1?���*���q��`U:����Q��0����p�
���h�6�����:~*�
?��U����g�yb���O0����������^�6�(j&����������"������Oer�6p����Qn�'q ���@"�X�d��#��0�b���@�zQ���M�W<�Qs��02�5��-;^��i��]�Z
w��(��N���`&*Lj�H�<EA��8�P�	Y=��z��z����9i����=2q�H��])
��w:��.Xh�R�<��&���>�9�6T�D���!��'���_O��[�S���h|���I(����Y��>�I�L����+]T��N�0�C3��.�_(`z�/����;���],��{&�g�dl��F	�hwz������aBl�h��X�<N�����j�?:�G�H��X^%_�����|��+:b���M�H���h�qe7���(�X�>�����WU�S�!G�����|���,:��;�|��?���/�U���v��@�E���^���tx����b�A�o��C3C���o~�[�R������<��������r�GI"�F�L�S����BQ����Q�:��;jI�"!�f�k9/Jb��;��Q#G�[P�����R;�G!�"�x.=����%>�P�f�B���O��2�tl�sF�����f����������=cY�7����Z���t�M���2�j��dQ�����[t����j�f�k'��f��ry�l?��A����^_��9��.��d�1e�	XA�	Ce{���l�#PX�
�v��v��v�@f�$*Y/��\���>Ef����s���!�Jr�
�e��%�EKp�q�����5�-��|�����I��������-���i~������n�FF��U�x��9�������ky�L���y����O\t�%qL���Y��_�p+����D:61�	��B��uwO�!��RK��*�x�Ns����3n������h����$�"��A�L�t��NH�TH�u�z[���Hm�%�D��S��T����:��0���2.���i{;�
�B��_��34���B�����V�nGV�(���-���y9j������P2��A����S��mP������
�
�nP=4�ez}%�����3���^:p���mk����G��j.����ey��n'J�
r��vG�]E��Qs�_��"Ts �Y�:�V���d�6��CfN'_�������o'����F��hV�z4��z4��z����uE�MK�����[����4�{KJ��*nI1L�[�~l���s"wf�q��U�#��#��j���,�������uJa�X�mh��G��|4`���F���h��R..[;V�J�����W���|�F����w��t����;Hh8�G�����w��w�3�`p����i�!���w�/R-b{������b��������"���T���t�����bspc$����C*9`3Do/P��&�<�����{�c����:X�����5������M��*�M�L7v&Sp��I
��<���	��7�c�/^�X��M�Q��p�w|��iF	�Z	�uY��V��fz������z��L
�i.e>���f�����?M<�������������@k";�6�3��0r��{Z��g�2A������u�;��O�I\��'��	j��t�_��q�o��4�;�f�4��}��$�������D�9�Z�
����(�z-~�����U�����h��d�,\�n��������T�ZX:J��^����N��G<�IZ��)L�"�wo�q����7�1��5�;��,U\������$���f}��+��2(�����v\�������A����L���;�) �.������-@���'f�<X��*��� �wh�k68�c�k1o��B�i�=�u��N�Xk���e�����h���<��������zj�nY����.��r�e���7w���O�E����t�C�o��5����P����z�^�g;�����5Qb�����T�B<����XHWV"����q�23���W�3�����+~�>=`
Y�W���f>~�>}��y���O���������Q�=����Oi�������7z��^H}(5�:U
�^�(U��^](U
�^!8�	��(U
��V�f�o�rqC�G�nk����a��O��\zF	Y�1���E�vj��MJ�7)��tx���MJ�7)��txsx�s��K:���dBa�%��^��
�tH�B���s����s��>Zh(s�`2�=���H������fy��ng�;����3������A�WtD�Yn�@�<�O~��p������;�-�� ��U�*��nee�3�9NR|ge�;f��� ��{{�W��nA�p�J*�CS����>m���l�I���������d����N�-�_{Z�=���uZ|�LJq�I���_��C4�����^�2V�	��E�������9D�W���|��jRl��b%Ng�E����p����M����FX������}�A��Q�3�z����?<�5����d�F}�*��Y�Q_�X 3�K|o�5��r�sE�.�"��X��o���	�_,+����,%�J�(7�KP�Z�=_��E>�r��=�5(�>_lxB+l���g��������?���
����}�����$(�/
�#e���$�]k����	��y��&��P�����o���'�a������9��"�����������j|�9u�~3j��aH��{�!�I���D�Q�����T:��v����s�N\���^'aU$�����QLWkE��Y+F�dEF	sR�**Z��I'���Q�g���ev;#���N�����
�������7��%�N���a�������n/�a��
�I�Xt�|&F��x0����Z3u���z1��p�KY�Q��I�;������h�(I���3��S(b��{��O���"�q?�����>�&M!+���=�V���G�^
�����~�a���V�E�>t ��0{C.���u���^>��.L�p�F�S�b�ac�0��������P+m����@�#ZI�2��|��t���u�|�u�\������j�p<�
���� �Jz�N��i���+5XQ�]������I��H�|-����X��$l,��~\����S��0<��V��n�}�a�[��)E)�4&c�jO]X;�hP5��A��e���@�����.��"���XVJAa�)�hN/�l�(E�U�%W0�.LnJ{���w;������Kg��NV{��_#�. v������_��(��E��v0�.�Ha����>����)��zC�=����[�Ta'�7��t=�JC�V=����;T��Rr�D�2�A�7�H<�XfIRQ�hR��������	%4����jO�Kj�����1l�I�	b�NM��&C�2��n:�;{�w|N��&��(b��@bzt�`y%)ChJ�X�iZ�!������.'9=��fv��/�:B���8JK�>
V��W��Q��k8�Ck����9Pn���i��LYs�~����g�/rJ�`lz���/�8��G
��n @�@)��iDE)��h����`���9��:U�Ewt��"4c�3�VP:�t��t+����1�	��.p|t��1��c�����$v9���b:��Sc:����J��z��tra��Q�S��)f�>��:�6��PD��9`w���
S��MIf�3	���G;��<�EO�PJ��,S6�����E�:D����	/��GiG���Q&!�Y)	<���v������ll�]~�����M{I�&0H8kBy�T�z��)��.G���u��9�L9�����q�e��*f��E	_�]��t�|�������x�t�
�0,+oMg�Vq%��9*��%�!R�"�.��N���R\�e&x/z��K+��YX��@rzt�$G�=:V,�^��	�p3@�@�.c�`RGU'�4�c~���3e��$@1:B��Qs0�9OE)6l��fF0�	��(�G�=�����l�1�E�jV��x8���#x��X#�<2J���"h_��Q��J��
����N�=Je;� 1)���Rt{��:I����R;�{8���g�"b���h����?T���5@�Ft���
����V�����lH'6��������!��N��G���;`��fP�!R��A4�7�����O�*�CI'q�C~����oE=~2��:��H;�@t�����s|�~�2��s;�CQ�S.�?����fP�w
�]�m�������E��*���N��m/�����[�8�>X�s=up)N!kw�oS���b8���9�n*�2~n��KWA7�[��������p�����8�����1H�^:b[=���v+%�������H�������8
�TQ-��q��w5�v��������W�!&������X����L'�_QD*N��K��k���\��0QR��F������U����	��ld��_�:����m�
����e�M�QsC�qH@�N�M�z������
��{g���L���bG
/�b�1���K9�����'-,�a��k%m#z�G7���s<�O�����'���������_�n�X2fk����&����B�����(�����6�v ��
-l�@^��mw���������@�u$�fC��_#"P����5K�h�f�T��}�#>�j�jb�+2��Sz����O��.Xa�h���
)�b���b��&V���~���� ��������0b���E��67L�q@���|-
�B��������dy���J"��_����68��g�������$���8�����h��:[+�s�0,���VU�'�^O������4������>9�����l��j�����0�0�ZR)j�g^��6"OW��9��6�*����purnZ��A
=����9��r1PxP]YiE�%���@�X]e�J���c��r�����������C8�������K�����f�������������#��S��_�{��u�����U�q���`�6�%�*��E����9��������~��%qUx�&=�����i����m���w�pK�4����n�a���\���-�	��a�|�����V;��"n'&v����%q��da����t��^���eF���0c�����
������'��{���O�������`�����u?#��@t#~Ca�:�t�h�m�QDh�,�����d��1e'~t/i�dsE3[�V�y����*Z����nNDFU������KNk�a�Z��Z}���m���-��X�Lw�0;I;�S����X��e����_��jM�������#k�)�}b �=�����h���4���`�������'�:���'��'S����c ��O
.'�Va�g��84Y>`Vu	47���e`�D��	U��)d% )��
��/����B\�_d���<R[x������IBO��p��|,��l_��-����0�Jk��1���H����)�?��������;�?H������G[a8�����4'��g�/��'%fm-&�������9�9-��m��}>nA�2}2�mIE��E�]y5��l�+u�Y��fmW��<m~y�6%��u���+V�_�Q�����9����k��t�s�`���l@D�t��j�x�d/b��������RyD��!�nF�V�'�md�K��8��,\x�z�;�=\8����$����yM��c�7d�^�
Z��H�7������F��'hg�	�9��S4�_������ash�V�II3G�Ml;��xY-�Q���y���'.������3��K����X��-���,�8�lf�'�P�9fmFI8}cH!������k������
���Uk�Y]P�^����
���`7N��Mt�R���h���R�t��T ���`�9=�}�A���/�x�����ABK�b��F�'3�P��:	�>�'��F���
��P��Lr3�'S*��-��e���l���u�l������N��8��JKJ�R]/|9�������$�@&l��]����x�6@����q@�]�
������l��d���X����m��	3*6�BLv�RT��e���%I	�Q>����Jw��������������������N�����2�t�	(i��:X���
�W2�!�t�S�0���#��%]G���=��$����E�Lm/2����|N����B�G�9��q���������E�u�h��-�O��
=���<U�{[����-���z�-l�%.>����)�R�&��~G��4�+����C���O
0X�-��zqKQ��_�������I�hm��n�tk�������<���',�M��b��%�
0���p5�]4�j�*�"���MD\���u+ �@�}GP��;8o-��2��Mz~:
1����D���h�*+���&���$�C3=��"�f�t��M����@�W���l���(��A�*���P0��2&L�����y�����'���>l�B6@_�����O�!�������t�������A����n��P�3��h{��!x�J
m�LFqr}-�I���$^\)-�j������m��(��L�������x��dqw5�6\���e:4@:��nt�6<���3����b�Xu���u��SJ��������R���$�y�`��k3�����{������g��$������o�|������q*�2��������Mt&�}��%6�?��NzM�9�� 3�B�"/�Y����9���f��6���F�q_�#�^���������]��jX��fd5�T�{7�f1�[�R��1�������<0���r����r�����w������������)|���>�f������K� ����|�F?���,��OMw��m4O8.f��}��"�0�s�0�x<���[��8�?X=�/k�m�J�b?q��Z��2[��S��-���e�+#�q����k����5�[�r�*�Z�F&>��ar$<�v�f]�M/���G�/0��,�|�,&~1��c�)<k5�2�
�l��)�92�|v3�\g7�i���'L��k��v����&2��}ov[��y�y"B'"��DHF*2D�N�hOBD����r�yQ���A_��A��<��Og08��+������%��%a�V�l�\�m����a�e�[������iGH�-��{�qmp��L.�:��O0���E�A���$�%A}}��/��%�����(NF� D�~��������b|����7/@z��#gt��d�'����>����Q��9��'�?�	����r��E��������/c��X\bo��%b�r���,�J�����������#����+����������R��"i��F��b��[S
S����P���m�Df�|:�������
�
�i��~�����|��� {FQ�y~���JID�8$sn\(Sy7$������m�'�Z6��:���~Q����,���}B��e2[��������}q�bB����I���ui�1C�C��w���f?:��-}ka��].
�}^��c�`xY
@0�:S���2U�yIgEw��
Og���	��TK��rT��������K!�c���]X<��}&�}3[��~M������xC��=��C�>:�����;T����wi���6��}��<q����O�7Nb������"���#���������?�+���'������Aqx����n�G1)8��?"���)}u'\.2Vu��7�_.��H��1"�j�e@y���o_�Ad�EP��w5�|n��"iS����D���;[���[M�&�2E���z!�����1��.�?��$(�o�e<C�9�Q�,?G��Q��-��o��H��E0�%B�"���OG���6��v��+�����"�����e.��evs�$��$�����i/��;�����|����H9T�j�5-/M��A�(���VB���5��A�������Zh���������X`�l����+L3�'^�������$������@����s;�N�9UN���c&���f���`��W>���}������Zg����Xf����������u���X�u���X]�>Vm��Bph��v9�x��8�Klj:p��ypoL�B/6�5���X+%]�8N�Y~Z.]w.�A�=�<��)�,�F]������c���� +�������� E�-C�12��[>(�I%�O9�����pW�50�g�K����q��VN��u����v��	<;W�nB��b��;���8�(���������Z���H��/��@+������o	;l�s0��JJ�h�_���o1����"5�L�:��o�����3��ieV����A%����3E���?�g��5���
,��lqc�h3N1l����s��Ujb���h���[d��L��:
�:������m��[�T_����o��K����;[4F��A5���P��L�]��{��b�V����nm�omx�y][��MB�-_�!�z�������{L�������BP�k�L��(���~�T)K8+V�4�W��_�O��������1��%��5�L�g�~	����S��e���i$����4?���M����\~�1�d��[���WA�+�3L�[�H�r��6g�R�-�0��hj��UT+Ykt�1��+�� ��wD���{��=����/AAGLiiX���^o#���������D��b~V���4���bN}b6@���~������9&�.��v;=����������w���v��h�v���[�9�i��.��ZY&�*�a��2"iDzD$������}�"���dTa�A���������������Q���2�������sI�����M��s�{��r����R�,"p5��c�k����d~��n��
 ��h3�q���M�������!��c(;m~"MO��&��S�����IAm�\Js��e�N4�W%��@��knE��[����>*1d�O�u}�/����i^t�i���Qt*�)�J���:����=�m���bYl����]#�a:��z�)����m�z~�:�<�<r���5��. �%���-����x�_�$��9�8H��?N����
�P���'v�c�#{���yM�i��!�0��$�1mN���lG->��q�<gJ&���L���"���e1��s~5H������ jE(�Y�i6�z�G��\6v[���T\xR������������[�^�i�<�+�STW�����q�n��v�GS�f��y�5���3aT��@�d�_m��nCg��Kz�e�B��l��}v��'`^5L�6��;cDr1<���%	+~{N��!����0�c
WcT��������j���������>/Q�|�coF�	���6a6������1�4�]����6H��9�t�[�d
;��'�tI$���NHB�)�-2%b%��?-r�D���_��%]����+[����.^�S�.�=0V�GkI��S��LH"��
�
�h������%a�4,D�<�R14:5��9��T���:���bv���x$M���h��n��yh
�m^�BB�
�q�8I����Y�@�x��D�����������8@C<�y]OE����9�`;I�LA;��Ju��TLT�&n����������w&b�p��KMf
%�>��Q���q� M�������K�������m�����!���~�������s�����g���������� A�*X2F�D��[������S�R@���k�,����a ��c��7��B�Vk���{E�����LV���c�, �g�����t�$%�n�Iz�6s�P3�$%G��.oH�h��XG���c�=C�f��2��|�hx�)�m:����S�=�
yC���
�8=��Fs����Y�qg!L�j������~�K��������������������A�z���p"�k6��7-K
�Z��/���G�%�������@/��Ne����K�]�R�/wyQQ4*{s��P���tQY�.|�Owi����~�������zV����l��?L6w��H2�����u�B�*���1��z�#���u�2�*4k����S?��o����������c�����0�� �z)n~MC	Zt_k�O�(��|�D<��X��0S�� �o�������f�@�$d#�H�*�D=��L���*vuO���������L3T�
�"&�$�c"����0#�^���t�3����eh�;����V�x����o�����[_���n�����[��)R*B]�z��rI=]N+������_Z/�+���P^�#��4��-�����j��I���{�>_O���������y�WNDJ����#]K�Y�o������x�f���P^x�g]GY�zV\ikI��"q�huq[=��:=�Wi�jI���]����'\iS��"�\"cep�C����$����p�	�:��J
A��c���V=�/,Og���H���&�Z?��_xAa=?��e,�a����i
�0;�9g�_&�N���M��P^6�2r[2�uDD���"����%w�O~�A��<�R9���&zd�D��z�J��%�T�����"�/���E8�T�&^l�~�jf/�xf�(��h�"���^����|D��.2_��������'��A��>����rT;��Hx���P����������-6-�y+��p�tF��h^�kPEN�&Y��-���h����q���|%�|�'s_&����>N�[8R1y^o�uF4��:��s�A��d#'�y�A���@����d��d"m���t	�� I���q�""~������5���*Pj�	�_��u�n�w9?�|���e/�2�U
6jJ+�P�����|z��B��)d�+�iL���Nx���K�9E��v�K����{wY3�S'���t�u��������(T�Ia��A����g�#x��N�	�Vi H�C��p���9	�����/��0R�E����#��Du�"[q�E��H�F%$"���g�e��W�S{�Ph�R�����_��D�QX��KR��R����m���}X����L�C�j�n4.���Q&5z��z4��BY�P���A���������1�X�����7��/��l\�56���e
_����M,����x	��s���*����7WI�\%��JJ�*��UR:W�o���j��%x��]=��p���=��h�.zI@l4L�����������~�#�����C�z�@gS��!�'�5{��7K
@������H�m���@�7����$�\���G��{��By�Yo�+�K�j��q�L!3'�v��m�=�
��
fN���N��w3��@�	yX����u�KH��R���iw:�Z��gy�^q���)!����������CE�>����}��.��A�=�\A�[�x�N�Z��7���"��5�K�-�}�LMWK�`�I9�O�Y�[���mh�>�v�ES�����Z�w?1s�?���}�l���#*�d�U�F�'n�O�f���}���q=���@����q0~�~�h�h[���9}�.��G���q���������O�EO��6s�i�%(�LfP��sv����m(w��O���A��������Aq+��$�K���Dp��s�GK�Y����c��Y!�a���a��K���;�6���]>�����f��&���.����,���m����e�o���s��/�r�!G�m��
����lX>^����*1�2������c'�Xz5V�G+f:w���Cs��<��-�\��)@9d��?�Lm$:vYd�%�3�������PM�X�#���'��Fw4�=']��T�"D��U`����sdA�V�-	"�b�d�Em|�XX
����z��'�@E������H�5Z���'���}�,�j(���vX$i��T���T
BYgQ=�T�L-{M����h��x���M�O���2����������D�����W~t���y�O���������'�	��3%+��l�L��.U��X����0O`/���zc/cJJ�-���F�r���=�
�\\�R���
��\�L'�J�"���6�}�K���x��V�D��lX��j��t1�-�!�kd���E���K�t[N�����?��[�s�����!���V��5ua��I&.���-�om�5?)�Y~0��-L�zg ��,�.5&lw�g�7C����"�����i�xW.���J�.Ge����VX#����)��T�c�5y_�&(�C��@(���qU������{6�I��>1aw:��5��6 7(
���>���4w#�+��$�O;���I���?��$��?�����1���$���5^7pA�Y{Iv���`�g��P�[�^u:"<�G�����r�,Ex��2��p@
�&��a\Sj��4�������q5[�o���e#�W��*_�i�X���|r���������W���
'����!��*X^�X����va,���g�V�`�1?>Q�88cF�z��9�v�������z�����hL�{>#v��/!��0.�k�XF��H&Lc$�:�
s;����F��?�5�B��tg>LP����������O��!�>�i���������"&2��7�oHC<xS�b�1���_im������;�i�5����R+7</��i1���MSH�xz���Q�<����.^Um<X7�!{l�x���N��"��S���V����p����������g�Q7Uc|����������s0:J�������O���w����{���?�H��"�X/-dC��bmOSpI4]�*B���v����('�����FU���5�������7�K�����)[���
��/�eVs��nf�&�@���j�0i��|w�����F;!���?�,8G1����|C�%r���|:��EtP���vz��������a�\:�YL��v�F��vd��]y;�n��y�������'d>Y_�5����3���$�'�������f��_�U���d>�:�d]�n��{�qz�-����r���g�N����0�+�F���s�+���S�����t1��������ew�O�������rk������d����7��?z�lI�������������\/Kz��zrk����Ot\GZ[�9��������r����������R�P��WU�{uV�2������*��x��� ��)h�o#��6���m[KN,�
(	��L��o���	����i�C �l;�;��v�py+�s�Y��t��\�m)W�<�P����<��6��z���?�)�P)��CH���xF{������(������q���'���$�+FK1G"����+���~�#6��zm��T�ls�\�{]W��N�{
p���������_�mJ�����
���������d�.����[������Pf��q�i
�zB�Q/wx2/��������z��o���b'&���oc7ef�i��L��]���7��wl���.+
��$�`��P���Kf�H
8�D�PJvd��� �[����L�C��b�"������BUX��������x:���h�d�~g���n-E�I-�������c��y?���)x���������z=������ A�t9g��u���?�?L�6"�6i��b?[lb��[g7�"��fv���,�Df�|:�������
�J3�J��d����CF��{3��vDr@��mJ��� ��
��7��KA��3�}Vl
��=|���TA�"�3{57V�m��*�� ��l��`^&������t�vl���	vy�n������@���W���zO����v�/��V5���r�3�a��1A�>������$���-�;K��?����tRW�;9��	j�!�Jy��v�������y�D�	!K� $���8��`L�Ha��E	�g6����Ox����p��L��f��_�s�.m}}Y�X�����
?���a#59���N�����i_����������7��*\b�YI#5�@�K{l`�
����D;/�rQfI��(I���������$"}BF�~Ri�c���+,��&�0�	���[�]�(%����-��o������W���U��3u��O����N�����8�6������������&t����bL��%,�cn$=������C����V�g���2���cP.�<�xb�
����sG���*�N������8;�����3��F�>Z��~e�K;��}���L����LgfF��4.�o/)�c6�Oq[+J�`��F��O^��j��+�?��)���x��=v�{��{� �����
��;�����s�"i���c���,}�V��Y4d�V�!���nJA�zx����=�l1����M���v���>3�����c&�RB�G�����J���E�����r��{�mz,���������<[��m,����nE9�����m��>�}V��������e\�
M���}��F}
�c��G����M��`�a	���0�<r=d��}3�`;_[{Y�
m���Y������0[���a��zdA���-�����[���0^_
l��M#c���|����	�H�>���1mK����7����p��~C����61���y��G50���oSN8����m�����U�������G��d��0��v��T4�O��x����G4%�m�}����1&���,~IZ}@R����=c�2��5�K��el?�,� UC��������4W���f^��������q,��{<�('5G9�y��G�r�w�Sg�G|�Gl�Q�CwS���~��\:�)�uL1�I�Nk�p����a���0������9����0���s����n����<���
/������[s��N����i��|f�1�����9������AN8'��q*�����"JJA�v#C>=C1�����9�������a�T�3�	�x2�9�I/N�,��n��/�����/�������x��I���=��9H������Xl����S���`Bs������E��-d�lY��S��Z�=����t��5A�����P���JM����P�q���mD6.��?�}�G�o�k�h^?�=�y��ic���II�F�ML�hKkx���#�j�a	OFP��r���� 5\����5]���L�����U�����&J0�q�*]����=����{�#��������UA'��3
j��k��������;��	j�G{�+.|������Gf�P"��qG|Mb�9qz�M�����]Z�a��?'��~�Q�d�����|�);O���Q��%�'+��~��F�3��wF��v��H�[u�]������"_�d�K&/����NDx�by���/�<�3��~9c���is�+�wF����3#��*��Y�P �J�eV�����5?T�����>4`w%�0#�y^�g�7�>�t_f�U��*��Y�\ �J�eV���}��2�t�hS�]���7�\�$�1^�$���N&�o�S:�Nb��q�0��(in�EgS����\�$��gJ&�o<2I|�Q�I�[���sJ�l[�=�q5������������y�������o���DB{����D+��*��������5��_�������r� ��d�����-8��`g�s��U��a���l�CU���&�����{<�*x�����[�h�����@:{��p#���}
v�O��>;P����l:�-��f�;�$��z��e[U���pk����nm�U�c��?���|�U���Q���>f�M�����V��vT���J�8�*��[��SEWv+\qO�u����Hu9f�s{�{D���T���.	!��R�d]1^�f6Q��U��4�6�[O��,�K\��<���A	�D��8�	�z��@,���� 7�#Y�H3��ZRI������#�6\�d���C��/H�T|�����K�X�n������S���]��]'t'�z��w��w��x��������x��������x���t�j������3���a�{�v����aF|�>������X�}k����9;0������_��������_
e��^��L{5������P�4��<{�<<�����yvS��y�>����'�#NO!H��?���'�'�/�	��?����8i���i
���S�s>���#X/��5r��z�#$9_f7�'�����,>�������9]���Rivn��_���f��[�%�����v7���m�����p�O��1��1[�$������q������
�c��\�,n������o��4l�}�H��_D�(gi1�����i�*�zr(�7�'������x�:�������$����R�G�a#m�T��l���i�I_��h�j�4��*�
#�����(N�l&Pn5���/:	���,$x�
	}m!�]������0���(F����{���U4�#4X;��![!�[<I���\yX4V�����������vN��A�X��L�g���y�����+HZ����v��c�K))$8���[E?,��N37�� �
$"��434!�0
������F[|b�oR7�o��������� ����_��
���P�h}kK���26�����gFv�d�5$�������A`(}����6w��Z���3WZ������ :n,�'������������;���n�Q9�g}n�0
������ ������E�HG�0����,��hIX���i����g��:���a9�g8�� ��&w�*nOq��� �;�@	�VCc����������
�"�?�f��{��?�[~����2@�#l�
F��4���S�%��K�w�����_��JYC�5����U!�����K�Q�W�]/R�88�F��h��m�A^j�vr�E���3R���gQ���u����:�0�ib�%qTY��H���H�uZ��L��V��R;�-y����g�?�������a�:�	�^�sM
���F�P��H��J`9��S������z�+���T�,s��CD���H6���	�+�+����#���uLpN�a������P(�0��}�i�cJ�;v7h������Z�"�����p�hb�
14��) ��&$��D�Mgkl{'�/eb ):c����^�X=]��&���t�5��l�R;����4�Wymq|�{��a-,����
���3���Ijgy�����t���h\�L�'�,�:���x��'��G:�v��b�`|�*M��BN�
�����fD�y��}�N
Z��/����e���g�fn�����5�����?������s�<�����w?�������$=�5-m���R3%nx���r�=���U������������ A��`�.���2:b\Q����o|�]�1DZF�a����N��%���bU�5���(C=8J�X�Z.?��x�c��0���(�M�D
���`A0uN��v1e���F����2X9��8:.z�xQD�g�Q��������@
3<-�d���-����E2�'����G��(�s�C}4����v�pl�=�O�A�@���2���`A���a�B_�Z�tD�#`�`����U��5����n��=��c�N�?�����Ww�=E���'�|�f':�����Z��n�t��F	�"�^`Q��5M[~�"���C��K��pWl��{�*�.��m�W6QZ�T��+#r��>�(��2�,�2l�Q�����O��rs"�	�-]X���w��r��#�d������NS�!�����O��v����3����N3��������w�N\i�� ����6���n�
�I_xa�E�[;c)��o��y�?I�D�v!���=��g�[v��D7�����dx��x��{Xc�[��E���K�Y��O"/[��#�=���N��x�P9. �t���(�����q�������&��-�����|��@~��������7 �
��`k�����s��TNc�'�o\���EL����B�gl��g��F��N�tqkoy
B���$���p��m>��5L@��a{���M�7��OJf���d���@�����w:��>[����-#Y��B���"�c�����~�Zf��|<��h��������v�0�
_�X������X_�)P�����?�n�=���?���H��7��z���`-%�x�/����P'_�����2�����rA���,?����*>.t_?�����t�<���~_�����'C�c����Oy�F�m)Z�N��(q���=P�)o��^�0n��|�7�J��w���=�Z�_nP�?���7���?{'��A��~��6�������������"y%��lGo&��H��P��V?��W�z�i���x���p.���!ZOxT������+�1%jL��W����{=�2���)]�X�n[�$*��e%1�]�r��B{�s	5�.I�
5?&��+��?&��c�1(�Aa&�����	����d����������o[J�O�/�!��oXhh�Vh����_�FMD�%+����nB��}��$"�����wk�>C���x�_�����_����a��at�����=CY��o/���rjUh8��{cS��2z�Yon����dD�-�)���a?Qr~;���`F��w����5O7�s�-�1�e;��T��z��D^%-4a��f�$P��h��6D{lV1B����.A��������{&�U�b��L�;�fyxB�)E)S���t+@^ �%�y�@�[��G��� �\k���@���X�/t-����,��������-��kx)l+�����rl����y�x�|�ilh��2.���i{��
�B��_��32���> ����V�nGV�(��������n��nu^��������4���d�B3X'�#��>.s�F+j��B�$�B@����M\�lMIe^�*/�Y�n�Th��G���	��_��~
��B�R��R�B��-��A�/\���`��0ZL��Dn�w��
g����� ~��������Y��?����DV�
U�jU�������{O�=��^�Y\t��7(��#���z��t����!�!�K���}z����)������|�������2��m�~��hv��V�� �U�uU�q���x*~����:Y���}3��q�#��S�%h�m�Sy%hT�'��x�y���?�'��������B��������<�qj��(���o�=�.�EX5��>_�)����9����M�sc�������Rf4��qfQdr���ou9�o!(��J??�D���_�6���Y���zS�/aF@�){X9���^
��{-h�� #C@X�%U�,���������o��a ��[YE����FG�������q�����9{�����������6�}K�o6���\�v["����O3Y[�d���4`�=_
B����yV~0w
��&�(o�����I��G��<f�o��DIu��E�,rh�+h�H��\WS�1�����$�g�
l�d�
�b#R6:�`|����;K'���A�������/:��.�������bx��������)�9MK���L������3�w�������~�g��`����ZFu��+`P����a��R�������?���?����Q��(��iD�G��I��Pm��^�����9a�Z�A�������0��5�2W����
��E)U�~T���R���k�Q�mM�`[E���y~�!�;���?����m ,���9��NL��:���5�` ���a�9�
�ca�e�BDT�77��"�:}�'|Mu4.Y�b 19� �$`4�k�$��w�������F�\b
���6I��\`����1�R�MA����I=��%����,�x�U
���Fh��c�-���i�.�B��-��a5�D8�Qu����N?>��8V�����b�{��#���H���gg��U���`#��i�a�w�(}2Zi�����K�>Lv�����1�������q���!�����������I�� ����R�-�����"1�l��q������c����*�\V
��c.��!`s��`��Xn���(B��<0���`���r���s���v;���j,xk�,���3^{?d�3T��G@�}Y�&q�{M�s'�;@�qvLU��J�d�<�$�(q2%�{��:���dHU-���g��e0���+rK���X����~x��w*���sz����8�� {�V���\��J��D@����z����'�}Fsc���\7e!�8P������l�(`��^��J���0����).�8�T����S0���x4��8�$����O��!���_s��eHn�7�q�o��Q���^�+������`�CA����XPy.�Wf5-}���4��2}��L� 5���VOg�z����_�+]4-��Q������#@?���P(�7�U�)���?U ��'���j�_@?N�/�J��D���~��b�|c6�_4��;����_7����_7���s#`���1��/���q|"�G��~�L����N����o����#��A�J�/9��#���q�������O��{�O��n����.�`a����(dO%%s7(%�j��{���Fl��0Z�`�5�x�U���8�D��2���k�{�����G��.�r������b����-��}�����R�m�a��q2�>����[�����*�?����ng���<��>L�����=��Q�?��)�)i�I����4��n��"�&��'�&W��2&����Y�����l��6�����*�]���pZ��hrHg
k ��D�PE�8����#-?��/#�)DCl�2�VaD8�%:"�*q!��!�n�n��"W�������w�_J�����}���aq�2�	5�O�\�	(��bq�x�J��]T��J�(9�Px$>���/�*.���"_v��HO�ph�eWG%2�e�e����P���?O$�DN$��%	�6��^�w:q�*��e�'>����;p�?O��AB��~�+y�c��GyPEnO%��SQ�f����`��[�4����������P��������GV�<����5�����0=8��J�4���m�����{a��zC9:P���R�����<�N�����������G�x�v4�1.�n���1.�1V��B�Y�5lT�o��vIt;��\A!�y��?���
����'��}�Z��w���*����h����i�-�(�@���K��T��Y����
��j�1�H��|�S��ELLP^(v���1t�)�_�f"�$E���)CCti�����A\i�q�4���h�NZ
}�g���"h��j�\c'U�?BP����d�������I�� �_�d��nf�sM�p�\���0������+�V��h����C,�f���Y��&k��H#P,S#h��m�>�MV����
I�,N�c��������m��n�N^��a�f`:�o x�gL�uz�	�h��`f6�(�,��?U��f+M�D�d3w��f�+�������*���`��6��-X+>-H�d�$v2o���lA"[��h�Y���	����+#%�)E���z���a�������9��x5��FK]-���"�i���w�q ���.E���F�V��E&����n=�"���<Z�k�������
H�����0��v��o�m�NEyg��&�?���8��s�+�_�����$,�������A`�6l�lVH�1StM*�=��cKR���\��f$����L�� ��M���Q�Ra=�M�
�}�f��X���%�!�y!�)4rR8���m-r��V�e���3H���%��a@	d@�.��c��}����I kR�U �e����rf�#��R��r���S��r���)��7��~SG�-6y>����?��#�Y��t��-�Dl�^�����K�MR7�K!��?{�:��`&@����=_����o�%�R��n����[y(�,>�����}Z�$N����=)+����b���#5{�����b�b�><�,����)f��]df�9HW\���c!�y\q��B\���7�q"�'�qF���6��8`Zqd���l�I�/Yv�`���	�$f�Xd:�0����������P���2��������8�B4NXl$���(�������}��
N��C�������qI�9����"����7������j�x��%AVY�
76�H3!������q����[Z�Dt�I+�������Mf�L�3�%�},(��@���'ceU3���s���_)CE�g(j�e��^.���fi�4�|��|����5��=��������e�y��z�Z��7�����5�����i�,���z:�C��
k���ja��V�*�+��U�@�+�����������s������y��4��2o�m$�UZ�����gW���P��o'��:�;H���t�|{�����������B,�Z�*�K������4co'���	e�P����(��b��_�S0�W�_��{�lt��e(��H���.�w?��������kg25������x���1�N�c�
06�U:���~x��R��^oS���~7@^u!H���~K������^�m��xn]�_��K
�7��G�����@ma�fNO��t�'���������~d+vE6��+oq��B9�!.)�gE5��`���64����a����sk�3�1���,�����k�+~y��x���/��#�]~�(����ni��.D^Y^>.m? ;a�(����%<����f2�7�_~���#��@'�3�>D#MD<a?j�C�D���k��E'��8�jb��4�������Ck#�!�`�r����#�v��2#���9���%�]WW��K�*�y��+VV3���E�b��������3�#��'��(`fA���XH��p��'�D&�K�.b������{g����������1�Dz���4���G
�������-{s�#{�N2Z_{P��G����8��K���������{aS�O]��6 g��X:{7b�|�\p�QCS��y���'1�p�Q�e��<�����=�02-r��pK�����������x�O���n�4���!��h�L�	,V��Yg�a�),�i�B%#�h�p�9�ie��k�d�h��.�[n�h��O������$�J�0�[!������j��1*8��AE~�lj���t��r�'#r������4v����?l�_��3��b\����cvt�v�{��>h����'���"���8�ME2&��Zb:�1
d�\={rv9M����=oF�p�)� ��=���|RnW���4��fP:[MiP8[gF��U��a��V}��Y�d���!��.������|1Y���&z+=�����Q�����[��9�����!A����AQ`�4�u���(�Et��Q��<���(D�b.q���f���������V!j�������L~�����L�q��i��f(Rax�������NWX�r�O�'���i�?RP���E!�~
-\I���d���5>�n�9�@�n���J��*�����yw������"K��T�25�L�'����$
��C���v�@`:_��Xtv��+p���.�2�0 ��-�$��Z�������iTb������4�z":,�Y�������x�.q�{_W�>��
�j� ����^�	7^n�{�*�7��}�=Q���h��v\���������:��@PA/�R2�Z����b�>G�Gy�����7�t��������c�&e������^3�U;���v��-@�F����2��'e���L����;qy-T�Ug_w[�����>F}54��a�L�oV��RuE��L���+O�/l�����a���g"���tb*J�K�������fz��^��2�4j�� r�B�������0L
�5�5=��^Q��$�^�~5��V��X����pa<��-T�y�b`K�4Ca�����,{�9[�ew�"<��o�C�ZN�U*��3�m��-�&�d>���R4�����Bn�5������n?��7���-{������VO�Y��U�=Q~$���;�i��1<��+w���,�����!+ :e�[��%�7���]p��������@��]�@�����]�t��[n�l�5�\�T��pu��Z9�����t��tA��t����������BC1��o�-��I�xA.{V�'K/��t�
2;y �
���q��j�%`,CA��k���y��aM����yn��,�d<w	�����S4x��~_��[�h��:m����VC[��b|K�Z����i����d���]FW79���m���-q��Mf<���7��4xA��)����A?O�����G3"���a����������Vv����=O����������W4��"�:���mct������*�&���t�Z'�O��W��l��9��G�A/(��������1���=g�d���9����?��'����o��o?������E��|�r&VaZ��������q���J`
���K!� 4�K����S�!�v�A]�c� ���3!�&%���b��Y��lC_�����q�l����F�P����{�@l�����7��������5��_q�
�4x�-p ���M/��mY�GP�3[��v�lZ�y2[������&����-���K�n��Ba��ZX��Y�+p����N�H*����,�������&}W=�J���	��9�y�������I�^���i|����O)<�
9:�+�B#����������<�olY��Se�����vn����Q���.�X�8S�������l�8����l�	T5!�%h��U_�O�Q�]@]t��NB�;��;qO����f�����	P�u4����=��58�R~1�tX���LH��LH���l���hRK��&��3��c2�?���X$�j+QY��Av�^��/�y�f��*mw���,�����e���G���o=�oQ��,�~��}��\K
^9�
����V�4���i��,$���VA*C������Uu��9����{�����C��[L[~q���&`�qim�Q�gJ��o�|Z�j#�^t�M����gg`:���� ����r���1��;�X��8V�?�W�Q����<\�&Wv��[��y~��� m[����m��^��E,� �����=ihQ���+xi!W%��h�
�������W���@�Wt����	L�O����I�si�'s�L;4����������W�z>z���v,7����$���(��������a���!���B��j��Y;RX;1#}�Ox���-��m�`G��QX������n�V}:oy}%k���>'�Lt�E�������O� UUx�������C�B��vT���r/���[�;��B��e��<���1������/J���`J�_:��4����V��9up6�K�UX��"e��V��@��jM�q�L��]��shD����ES9�!��~�Y��C0w}Fty}{����?8����g�OO�?����e�\����
�"�S?�7�=���������_�k����g��w��(��n��?��k��?����W���j�|�)g&7�D���z{��c�j��������^Cy��t$*o�S����_q7v�'�������L�|�l9��������������*K�a�C��_���h�p-��UW.�M�H����qgc��{���&���S	�Q���~�@�����E���<���b��x�!oP�r���Gk������&�y�A��d)$d��|�����i[w���
��N������9Vg\�ceY[,/�^40`Y��<�"W�eC9��ey7���r�Ns�����w����������$��������s��\�j��:���n�k�����'`�gUD��s���U%�+�gn��m��qn��B�k�
�`s��^q�Z��qM'�u�#���R�1������k����X��V��2��J���[(����c��m\���[��IH��Qi������Cs�����!+������/��@��������K�0:@�WT��Pg|���h�K��#��x�>8<k�L#�2UY�
�#�F&^QI��BO�_�8���?.H�e�����DN�������v����*-f�����b{�b��n�9J���]������Ncl�S����� �s��@`o��>��/~�z�"R��od>
�;0>�]��#������w��(�*2��=��jO�j���7!u����>��F�q�$Sf�2���$�Z���]�_�k��y0l>��ra�P%�}Vl
���qF��#tL[����[�f�����&�4�!~�������(��t�qU�hu�gC�/Rf+�����F_�B���+q;k�o��av�u3[��pM�!{w0�S�c��"]��
h�����������k����b���z���������������������\^��2i��������l1���H�0D�C�`�������%q���'�/TU���%���E<j�9T�a�z��{�����R�Jk��H����|��{5x������08A��=f�}�m�GU4������o&���=���4�|�nZ�EHk�� '���9��-��hj[����Z-L�UO��#���������(~[XZ��r�:�b�eG����o���gz�9�S�"�	[ R���B��T�[]��[��-"Qx�(v)�v+��oE������]�a���l����N��?��)��=����(���g�z��\Y����j�����3S{�d:��
���}��E���}��_2O����4o<~�MW��3��>JP����������s��v��[��9��zn�p�xL4�w	�>*�w^��k��>��(Fxf������2j���g4�4��5�g���(�~���z)_�E!��L3�Gf��\
���5o��If�1mZ��h�~C;��a�qB"7
���QT��KQ�9���l2��s9�hV�3�V��0�������A�H�)��j�6���y���k������ ������u
mS�d�A���G�����b��+?�P1���	�����G-�v8J�EI��QfyQ�������!V����:���	�����?&i����������b����IZ�R!^�T����U�\I���E"�W��wj��@��Q�����Z�lK�
I7���<�����?]��������3�F"{G��r�\���}!IL0�����S�������SJ���[6���b���r��,���|],�9��Z�7����~��+:���}ST������@a�h	���r>YOn'�k���G�eE���f��������v���{:�� �XdX�����F��]1��_��rT&Y���yW�Y a�� ]�'�k���%�&�Mh���@�g��_K:"4c>���U�ItKD��c@�5�`0���z�)�r�|+u@�SI�"cZ�Gkjt�1�A��t�(���������A���O�,�Rf��^|���	�c[0�3 %�W��-� �
�]�
`(,:���;�y�W���r���4[�s�Q��e��w�LU�{��h������->q��-�����������^�������tY?�(�� ��_R�,fl{��G\6������'�Q��h�-���Bw.��H*l�=�����@���BR�S�4e�D������0�f��"��Ps�!�r�"@�%*FB)��5���?h��_rD������E�N�����36�A�e���HuH�qp�����g
�N
���}���I�Jp^���?�Q�v��Y{�k�s����W�3��#������_�Q	��
��o�������������1J��TP�c_7�+7s�'��1�Q�)S�(��c�,�����!f�i���2���J��b�9>mY�z�?���z�N��	��_����]���;g����5�&�c;��O���������1!�+��h�`�����T���������j��dyF��K�|�������������r+��Y�;�Ty�������yR�a�U�:�;��
^��������a6��&�eY���f��8^W]3�����}�a5a���~\>A+8R.]�;[~�������=����������A���6����w5�6����p�����d�������!��	�JVU�JmV��*:?��m���/�?��}��������y���n�n���^��\�ah����Bs`Rg�ws���[J��������/�3�#�����������c��t�{�Pv�k��d��>�����7@��vr};��Y�Q�����`�t��N���������� ��>��H��\�0�Ye���Y�6�������nZI����
B���i���3����Ft�F+���GyOwI����J��s�S���q��Q�����M�9���=���8�������E�����[�@�� ���Lp��'�>Sf[���R*������<�[����|�-���63 ls�����,��*8XE��	={nM�L��p�����O���:+
T�]��r�p������(b�]���<����*3�*��*��U���Uf�U��Uf�Uf�Uf�������u�k�����bCt���9+}VU�v�34��sV��0��������g������8�8��X�Wzvx��bm^"_������|v*�,�gy����Aj
&����j���Z�bz�����)(Z��R;��Q�(aq�c��"�X�d>9"������>e�
���,7t����G��"��	bp�5F�beg��;K�X�6
��
���M��-R��\Z��������������8�A����=�������Q$� ��
�� P���plR�{�����@���&����(��A�>�_}��u���I�� �s����y_���"�y��OO�L��P-"AuKp�L�T�L�(��<�Yj�
��_-��x�G��}���Ip`�

�nw�����a�����A�c7+6��8Gp-	Un�N��A^TF�7�\k$�s�&p���Bh'�g���i�i�n�g7�O���O������>�Ry@!�k���aHD�NW>����g�+�$��'������2���*�������H$�������'���a���2#�+��E���L~b�J�h_K�}M<
�'< ��)"m���p���4,{�`�N��"����0rX&�8���iH�Gc��������N7�9!S��-]�.:qS�k���>)���GcC�;��0����\�O��K����8����~q ������[�Q�yu���zp)8��E��U�z����d��f��$^���j�cd��Np_q��m��uc��rz�?H���3��oPt/8GJj��M	���h����Up>��"���IDY?����t�ST&#7hy�.Uc�O���Nfs�fI��
\����_C}M�J��"�fh�u�3�r7�&�OoV�u�v�!��R�J��*�y�.s����3n��i���h����$�"��A�L�t�NH�TH�u�z[���Hm�%�D��[��R����:��p���2.���i{;�
�B��_��34���B�����V�nGV�(���-���y9j������P2��A����S��mP�����
�
�nP=4�ez}%�����3���^:p���mk����Gj�j.����ey��n'J�
r��vG]E��Qs�_��"Ts �Y�:�V���d�6��Cf����:�=�`����g����� ������fu�G���G�]�G
�1��Zw�����9����&M*�I�����q�������&���&��:'rgV���Q�8r9<�k���v�k��i�KZZ��[��������~5��W�XnD�����-���c����k��y�k���72��w����3�����?�w��%�������g����%���BX�%��_�X���5l�%3��3_<��/E�y1�1�ls�����A����Hz�I1��Tr�b��]���M�y�h���$�N��s�tO5D-[
^������U���n�L���?���y�
��Co�D_�p�:�{��%�������������,�����'O����:��"4b�X�|�)'��E����xP�o7���UA9#����VDvm$�g�Wa��
��\o=�e��_�y�K��w<����u�����A���%5����{~K����AG0��y�����(%9F�������G&"�)��Xl(���Dq�k�������������L3&f�b�v;=������'���Q����|t��>�M�R�L`�5i�{�T��������&�	���g����u������$��+�4�3����/�����?O����_�����A���DH�l��t1o��S�������o��D1��zb���%A������i�6�v��m0v��6�-���q��[']�D����.^6?�-��fK��C�0��0;[i��F���5��]�R�/wyQV.*xs��P���tQ^�.yK�;4��n]������y=�W��z�C��l]%&�~	a�,�c�+����e%�j�i��3#��*�1~�>�(iY`
��W����%~�>=`j��W��W��GZ�����y�_�O�e�S�����&}l��z�|��8��T�RC�S� ���R�����R��������h�R�hl�m���(7��4����j(%&m�T���g����]�[�)����tx���MJ�7)��tx���MJ�71�W�>�(����/M&�^���������N��?rP�����vN��G���0���{�G�\Q���f|��[�?���w����D=R�� ��+: �7e�U��'���}�`�������sy+e�mf��2����(>���X��z�k���������=7!��'%���tV��d��jOJ���d�I	L�qb�iZ��bZ�}����=-��R�:->u&�8��������O���!�;���i/c+�����A�;jJC����3��u>�t5)6������"_[�x8EFT����iSH#���L
r�������(��=��'��	��?d�UGf0$+���UY��������U_�{k�a����+�u����:�}��L�bYi��ug)aV�G��_�������
Ly-�9��gp�a�A	��b�Za��~�p>������7H����+������w��8H�������6�T`F����u���������&��P�����o���'�a�������9��"������������/L�c�M����v��!���u�L$IFIG	�;�z�R��fo�M��n���K:}��wz��U���"F1]�q�g�
�1%�KIL��hE'����Fi��:$#�u���X|�:�R.�6Z4|�gc�Gll��:�;��"�)�N��V�����RE���b,:C>#^{<�|x�q��:�Et���y8��,�(��$��t��s��W�b�$PD�����)1L�=����by���@G��QZ����Nf��H���yo��N/l�X�~?���QDI+���_:�ta��!�~��:�AH/��a&s8d#��)J���0�1bVQD��}�GC���jc������b�uc>yq:bE�:]���t.�Xti�X$z�> x:���^����aZ�����JM�V��G�;t,�����bRi7�._��q(�;	���Wtd8�T�?L��U#�i�w��V`gJQ
@)�I����A�N:TMjw�t`Y�{1P���#������5B9��RP��~J1���.#J�zUcA��������"���&�$���������c��H����w�(zh�Zf�����w��N�w$��0�q�b�z@��@Q�!�RR���H����@b:�G�!P��N�^��bR)�c�l����f$�,�$�(�n4)���[�h����oEoP�������@��6�$��G��bR�!_��n7��=�;>�Zt��U1JR 1=:l����!4%�,�4����ju�i���l��;�@��Y
���l���I��+z����(I��5��5io���(7]���b[N�}�~����g�/rJ�`lz���/�8��G
��n @�@)��iDE)��h����`���9��:U�Ewt��"4c�3�VP:�t��t+����1�	��.p|t��1��c�����$v9���b:��Sc:����J��z��tra��Q�S��)f�>��:�6��PD��9`����
S��MIf�3	���G;��<�EO�PJ��,S6�����E�:D����	/��GiG���Q&!�Y)	<���v������ll�]~�����M{I�&0H8kBy�T�z��)��.G���u��9�L9�����q�e��*f��E	_�]��t�|�������x�t�
�0,+oMg�Vq%��9*��%�!R�"����N���R\�e&x/z��K+d�YX��@rzt�$G�=:V,�^��	�p3@�@�.c�`RGU'�4�c~���3e��$@1:B��Qs0�9OE)6l��fF0�	��(�G�=�����l�1�E�jV��x8���#x��X#�<2b�AU��<J}aR)�_�vx ��A�	�G�,`g�$&ev���.��Uu�������s�)����(8%ZqE+Fio����h
��c�hC��*��=>�|7�I�M�r�@���*�dg@����������h�Tm���s����A�����E�����P�	G������0�[Q�_��*���8?��:P����?���_��z���N�P�T���a�u��T���BtWzA�=��))?hQ����$�sr�K�|r;�%N�V��AO�A�S����v���.=Dp����L��[%���E��
��v�o�tk�g�>u�t�*��)�r`����VG����JF��8)g�c~���#.%�=NC;UT��{�>�]�����0��� �Um�� ��>E,h=VA�>?5�I�W��S2�����a�|W=cl�y�%yna�5l��kdz�@�{%Y�D�W��sG�ob�����w��G��u��Pp���z��$-�?1v�����a)�`-����K���B�3��R���m5�I}���ZM��������t�'�I7����#��/8��v���B����Zv��2
�Eb^��k���v��p���7P�0y�B���w3���������)/l�}
�h@=�.d�bd�,��d��RJ�F��O�L�-�����L����3<)Vd�`�-Z���+�,��O���X��w��BK��0b�F�������Sb�!��1�p��g��$�!EPG�W�f;�n�����*A����K����x���������A����(�'�Z���mZVgK1N������������I�qs{&������G"����8p�
�CN-|���f�4K*�L��c����F����0gs��]e����K���xX"������P;��].�
�++�H��S�����[I��L9BT.S�by�w�w��4���[qi�Zr���+�<Z�8C?��S���uD���k�����?L��p�3@��$�X�
jI��lcDQ�o���D��:�e�������m�D\�:�I���{xld��1�e�w�]"�RD5M' ��[cXh���omh�g��o�5_�w����Nn���IE��]>��d�F�1YX0f>"�����%`�E6m9��/�a���������i'������A�u�{��Q����gds�n�o(,CG�f���!1��m����~t���73�����%-4�l�hfA��93>�[E�t��m����
���!��`��i=7��@��U+�����
U�R�e�+���F'i'u���v������V�KX���]:�^yd
8��O����5_������4L2R5������Z������d���S`�}�DV�I����*����&���.��F@P�<�����S3��S1����$��Ta��%z��B�����r��Kj����3��6	C������������E^y�f�Xi���	�:�i���?u���
������������9�����:z;�]i�Nf���a.�5o���^$,�=��Q��s�s[2w����|��e�d@|��xQ��	��j����W�m������Vk�Z��<�J>���hUW�X�$�������;��������;H����L�D�p��j�x�T/b���n���"�RyD��!�nF�V�'�md�K��8��,\v�z�=��]8����$����}���c�7d�^�
Z��P�7������F��'hg�	�9��S4�_������aqj�V�II3G�Ml;��@Y-�Q���y���7N�������3��k����8��-��,�8�lf�'�P�1fmFI8}cL!���������?���
���Uk�[aP�Br���
ha�`7N��Mt�R���h���R�t��T ���`�9]~=A����o�������A����`L��H�d���z0R'�'5���P�Yi��t�In'��ha
y�e����S�M��.���9��<�}��CiIIZ���/G�a�}����H��_�L�Z{���cT��(:hf�����J���A�L�x���U��� @��!aV��U��PAJ�v��D��$)A9�g��� ^_��?�5
$����y����Zv����^��O�n<%
�`S�8X�ArKf9d��N��c���9��_��������`���>(�c��������sVA�8w�^�����F��T���?����E�<��!��r��m�i�����������Xh�/��ma�q�1��D�R	���71�C�{�@X���_�6����|R���l�(f��[�B���gv��b��HjGkC�tW�;[�������o<a!%x�W��/)T��o������(�YTSV�[e�o"�.�W�k E��K����y�i����m�����Q(�	P,�t'�f�D�VY����6)}�&������5[0���lRl��"��u/g�
?E�
�T�,�����2aZ\��%��^=�8)$���a&���L�d�~���?H�/=��Wg����O���	����<Jr�m�g@?OVI���	�N���>�:���+�e����"�`����	�8�~�����,��&����t��L�HOc�����gp|q�5;�C6VD���h�{_J��������������aB��_�q��l��g<o��=�<%�^��7���x��kWQ���$���x���V���3�4��H(w�B��d��.:�E<4'�s`����L���V��'s�_k�-T����sBf�y�}MO�zy
kzS�S�t����a�����SE\�������n�JA�������������s0:BX��;�����z�;��_��z�?���l�/@_���+��kv������9��
��8[��k�S\`��2Z�T�qw��Fs��b�/�S��i.�
�7w���C��=�I~����#��F�����!������{*�5�=E�������0�pg��
�$Z?�o_���*��"�%kd�#�&F��n'k����r�l�xD����>�rq�'�b�W��8�`���V��+�����A���RY�c�g���uv3�6?|���Q��I�iwz/g"�j�f�f��5������1�D�N��i���T��&������������HOM�������z���N���=�9P(���ow-�?/�B�Jf�BLphK%�^�h
.C�;�`H��y�v�4��������2/4�
3���]�tC���K�_t���W��
_c1��n:��d
�A���-�)8^.�7p[.�?r���8pF�][�x���9��>�PP��i�����'��PJ�#}=���x���:������(I�����L���=����`
�\_3�f�����������du3��X|Z��Kf��t�a��Ox-���-�*���a�@8�J������|1��Y����M���X"�'�;����ie��w����m=�9���8���"�����l���7��@P��y�����S�^��M����#��p��>R��4Y�:$"m���?X,�VwkJ`�|�J�6�
��l�Og�������R4�W����"��v5_>0a>��Q�|�_�~�������6z��������������S\-�	^H~��?�z���f��y����6�b�B�o^���/���#b1!o��E���h��4������C�;����]��m�ka��].
�}_��a�`xY@0�JS���2U��yIgEw��Og���	����K�rT��������K!�e���]�<��}&�3[��~M������xC��=��C�>:�����;T����wi���6��}��<1����O�;NR��O�N��!�����*S�<&2o<�O��-$��"�e��nX��6��[�=TjN ����o�aR_�������R����6�K�/T�Q�H�Z�9P��t������kT��I�<��2�H�X��it#������A6��V���LQor"��
���x�q���O�	���i.����X���dF�����GMz����I3"M�� c����Zv^�+�<lC�����o`pg���T����G�	N:�$����_�+��:o�L�g������#�P������4I�B,
�[	A^���NA�>�Jo�V�j�q�w����vc�1��o|�0���x�?BP�?G���$��'������p���v����r���_3!���U6��������������X��.��:g��=�2g���X����GX�����5�Z�{�%�����i����CX���)�k�X�Q\c�P������{c�z�	��e�Z)��b�q���t��s2
j����.Vyf�5�"D�,��,)(��gt[i��s���?$X��
���x�������gZ��C�3�:�9���
N!����:p�g����m�n�D�������{���F�o������
Z�Y�id �I[����h�c��[<�-ag�u�]TII��+V2�-f?�y[�F��]g2�-���Zu&�:����'62�D�31���tbb�gb�L��N>�����#nl��)�I&�s�8T�JM�X�Tm�z�LU��[��[�8���
v�����������`���zG`�F�(T3��Q�<�V���O�vb/Ul�*s����M��
�?�g��I����3��D/�x����i��������&��?���-!:NYvDQ`������pV�i���=*�.��^�����kd�)K�'8k��6����m^
��r61�`�@�4�����r�)�����O� ��`���Y�ZS|�a�*Hm�qF����a�,�RmR�f��Q	����Fm#�@
���j�/k��4��t����w{G����������A�O�G���C����I�s�U���k��R�AbG$��.pV���4��ScN}b6@���~�H�����9&�.��v;=����������w���v��h�x���[���i��.%��Z[&�j�i��4"iDzD$������}�"���dTa�C����������)�4��R�
��2��������I�����M��I��X�����d����F\c��n'���u[�W������S��o�����u%
I�9��i�8��y�(G5���c�(M�N
Z[�R�/3q�!�
���\;;���.}�P�!�������xyuU�L��b��L�����S�F�Tj����(
%l�yl55��`����!Sa�f��0N���l�`��#�A��)���������(f,1�'^�vP����
��k�'���C����hiEAx��[�k��������x`$�A��hwL���hL�S@��%�Q�O"��C:����|�<'���,�,BYE+��_�sEAp>q'�Z�e�.d�����9;���mt>W��,��s %��������uZ-������f%-��|���3�����E�3CneMq&�L�?;C&����W��������uY��&[8x��-�	�W
��� ���\�f2gI�����2b	hf~+�X������,�Fe���D�4n��������K�_�����}�-��m����3u!`;Ma3c:�
�"�G-]��i��@�I&]�t�����h
y@�L�XI��O�\9�@�d��D�`I��6�����q��W�T��h�����GR/C��d.���ekE�x,�{��a�tI� 
�0���T�NM*f�g5U2���a���%'�I��<3�&���k��i���P�y���E� N�6��"lV$�5�%�bc���h���:��On^�S�3�1aN,��G2S���c�V)4��6���Yj.m���4q����=\.��R��YC	�O�r��bu�,H�cy1s�%�7a-b����L�dh�Edj�)k���8�F�(9=�*(�������]��[�{��v�����P��%c�A4!���}0��[>�+��p�&I�����a��a��7��2�Vk�v�{B��w��LT���c���g�����t�$%�n�Iz�6s�P3�$%G��.oH�h��XG���c�=C�f��2��L�hx�)�m:����S�=�
yC���
�8=��Fs����Y�q'1L�j������~��J���Q���������)Sq��t������ E��l��oZ�����_6?�-��fKj�aqS��9_hI����-��|����_����hT��.���_����t]�6������u��77w;�����v�W��%�l����d�1��6#��44rU��c�+�j�E-!��ZezUh,�8�DO�~4X5/���������4���:��$��I�^�k_�N��������,����,_2Ou.�*?�T!=���&!s1���2(	�����f�J,�F�U;�E�d1�J�]����������%SLM��?��1����fgx(�H����"����w�,��<��<�&�~'��[w{���������������r�4�P���.{$\RO���.��;�����
�/-����/
�g6K�o�|��>yR{a8^����k�F�+�|�D�;�a�#������(�HG��s�C�s8z*4�^��0������Y�QV���W��Z"u�H�>Z]�VO��N��U��Zbauz�"�����j
Ez�D���V���+WH�O�c��:un����(��=O�z�_Xn�<�)�~3�M��~l%����J~zq�X��z7o����7`v�s��L��*^����m��l�e�(�d2^#��� 
EF[U+L�������Z�yP�r�iOM���Y
����
=J&����wG
D�_l=�Q�p��vM��>/����^x��hQ2����E�!������.��e]d�Z�A�y��q:�=���td���l����Ng6�N}G�?���k:�mnf�h���l�J�<"��<��rT�S�IV�a�2'Z�,�me�<?_�4_����	�p,����U�A��d�
��� ��j��u���y^s�u~>P�:��3�<7�H���;]�yIR�& �����V�c����{N(5���/U�:�?7���D���w��aQ�*=5��S�~��V>�Oz���2��4�y�O�x'��x�%��"�r
}��%�mr���������`�{:�:|D�ms�mW���7�k�������H��������}����!�H�G�����NBa�
����!X���v�r�W02���V�����D����L�LW�J}jW
��W�3�2_�+��h�/
+?uIj��W�3��a�M�3�I��V�)uh#��m����!Rc�W8���B��X��^^(�
�>b=(�Q59c=&�by������eCq�m�[����l���y��@�������a/��CTc���\%s���*)���7WI�\%��JJ�*��U�Y����W��+g�.�p�g����E/	���iP}.X�O�?��O���
��W�M$���8B:Ohg��oo����e�����0$pM��o���9�H�����s�Je��������JO����r����BfN��d=�0{������M��O�2f�c����&����<��+��U���t8����r��v��S$B�k-��������^}�3���*���]����{z%���O�<����So���E�OkN��[�����������rh����
��}1��F}�����a
�����~b�������=��-GT��V���JO����
������]U�z�q�����B�`���P�8����As���Zr������n���w�`��X@}=Ac����y���H7�A�O��]dT:^����UC.A\�OI����C��bI�	����,/��a����-1�eE�Z�k�=6f���9����/��+>���{+w��������'�c����D�.�\����{�Z@@���!�b�A�������:�]�7X��up`�xY'K0<��p��fp|?o��cl��b��X������
�-�
x��`��s�����M����3!��h��e�1�h2�>&��NC5`(��^������d���tmoNE�Z�U�V��*��Z!��l�i�UU���ca5�j���)'�tM�#:B#i�h9x������vn�\���0'�a� ��QS1�R5e�E}�t0S�"���i4E��3����7kO4e[<e[s���r���z�����^��I���?9���N�����������gJU�w����]]�*9�1a�+`��^
f�{��0^.���L[������zJ�{�X%����'4<h���NM
'$/=:m
������>������i�y��V
p�P��b�[�C���W%�IM����<h}-A�>���n:p���?Dp�Q��5uag�I&����-fom�5?)�Y^0��-K��f ��,�.4&�w�g�7C����"���0�i�v7.���J�.GS���8VX#�����)�{T�_�5yO�((�C���B(���qU�����{6�I��>1w:��5��6 6(
���>���4w#����$�O;���a4�������!����VxRD�����s���.H6k/���+�������`p��NG����H����T���OB�R��`���B�$r8�kJ
;�F��w��?�f�B0���k��j�_��5��=��O���V6�8[��t�����~����!$X����7�>�e���,���3��'
g��V44G���P��>��[/�6��9#�I|��g�����%����u-�X��i�$Y'^a�gg}����7���#��Z(�um�	j�?��_�q���t�;H����p��j������gt
�B��7�!���)�1�L�����6f��������@o4����
�\�u��I���^���)�o�<�t���G��Q��6�����=6R<�nGh#QNQ��)y�7�roFj8Up�U�O�BTz�3�����1��g����Wy`�9��>�dA��������?���w���j�4i3[d�������Y�
ia.�����E�����:_9N����q��(R�jQ1��s]#`q�����\�d� >����@A��%��j.���l�d�(v5YM&����n1����h'd6��G��(f��oh�Dy�Ogw��jt�NoW�=�x��?l�K�3�����.��?���s�+o'�M�3�_��zB�����'���fw��vfV�v��=���n��tE7KE�R���(n'����'�Bv�������l�^\���|]>+t�����]y4��p��k]QN�����������le��/��Z�~�uU,�[��&��%���d�Q�������`Kju�^�d��@�q�^�������������,���ns��g�����:/6%]���+?����*;������e�W���sU������#������A����C�
rgw�����ZA�i<�J�����gBzG��o��� �������@g\�J���x$��&�p]��&�D2�~�|���*�
�%7�.���@F�3T�8���bo��^5("C�����?��_w=��'�����+F�1G"����+���~�#6��zm��T�l��\�{]W��N�{
p���������_�mJ���������������d�.����[������Pf��q�i
�zB�Q/wx2/��������|�3o��b'&���oc7e��i��L��]�;��7��wl���.+-��d�`�P���Sf��
8D�XJv����(�\�=��l�C��b�"������BUX��������x:���i�d��g���n-EvI-�������c��y?���)x����������'�� �����l:��t�G��i�FD�Fm Z^�g�M,�Vw��fR�����n�����l�Og�������Ri�P�������r�Lq����LHs�M�~����7`�F�`�@�pi#H^s����M��@^���#�*Y�vf�����{���\��c;��3���`�
��D]��3)���-�:=�.o�m6�4]�q�Q����_���}���NC����������x�!0�`"���#&(�GTP����t��`�����d�����������w�=���������*����:���b�9�)�L=�X��,RA��5	"���$.�j��4�x|��>�]@��MF3A��c~�������eyc�
x�O�6�P��������:$:a�*R`Cr(���N�S{��#��<��p�uf$���.
����6����G��d�E�)#(�$��^���"�����	��EH�Q�=Z��������&�2�nE3t����;���0kH��o��3^���Vu
����w<�o��s��;N���J^���g����*��:�{�O2��1-;C�0i�O���@��VADZ�;!�����3������A������6x&�g`���;;��;Y�<�Kf�������[P8M�h
Z����.�����F�3e`�c�2���y��H����KLO�4?�|j�(M��Y�px���=n���;�����������'��	��_��!rZ�_{gS|���9`�\$
�vl����O��06�����2�]��m)�Z�O�u�![��-F���o�	��.�U��o�W�rl��BJ�D���:V	0>�����aV�A�xs��M��_0_1S��g����Sx��(��Az��m�g!��*����1���k���*���O�`C��OpL��h�X���c�,V",���#f�G��l���/�l��bk/x��
� =+��ow����o+1_�+9X�,H�����51~�`����������idlP����0����G�8��?�-`�2���&����c��o���u�&&�2����f��U�m�	�v����mY��T����ox��_7��O���\�/�?!����)��7�	M	[p����(5��7��"�_�V����?���B����F!g���*~��1�5�����>E���y�/����������.���2a��b��7�I�QNv��Q���]����f�����T�o�� ��p�/�D�pRc���#��<���FX"g-L�����k�(�#L��4��%�5��[sx�;o�q��G,����0d@������c�>v�!��aGr�� �jro�A�=j���I=j�
/�i�6����R���H��O�Ps��0�ks�a�?n����s�;�k23�%f1Nw#|�t%5��aH���������$q����O��!����%^�},6�sG�)��rn0�����a���"v��D�$�V)�K�����KJ���D�bC�
���k�o�^����[VFT���~��6"_����#�7��O4�_���Q�4��c����y����?�}���5�F��}3��D'#��v9UH�.���B����@�E��
S�Q^�VHM��X%]�8N��hyq��V^b����	������e����Kp���������?H\�����A�O��F���Yd����W��c��b�-4�U4r��)n6Y�g���K�3l?��d1�2��L�����4m����5JV�d�d���/�����`&���h���N��s���k\����\�+��~�����B����O^,�Q��%��y���/g�_93m��x���h�r�qf$�Y��2�
dV���j��U�������������d�f3�K�,�&�g�����*�Y��2+�dV���
#�U�/���@f��m���\�1���+��7�K�$�1��$��qJ�z�I#T3�f�%����l���7�K�$��L�$���A&�o<�2I|��sN��u��g�#����?�y�����A��?o~��O?���-�{��Hh��t�����\e6��46������[]�YY����U��y��{�l{n���
v6L����-~�*�������[�`���U�c�1p�U��RxHg��n�Sr�O��)8��`��" �6�M��E6�L~'�$QV���lk����nmuUtc������v�������������<��yy������4T���
���Jz�[��RESv+��}���n�+�I����T|���l}n���h3���Z��%!D�T���K�K���&J��J�����F~�����{g��S�G��5(���_G=!"_/��������{$i�Q\L*Q>U�3^uD��+m��xhW���������x��������x��[�_�����[�\�.���c���c�;��;����c����;���Y�.P-��V��r���5��~�W�.<�~5����������3�K�o
���=�a�|�v����b6}�v������a��k��i�����x���\�g���g���?"�nj�<o�g�7Q�$Zb�ioQ
e��h���8�z����?$����?����8e���i
���O�s>���#X.��5���z�#$9_f7�'�����,>�������9]���ivl��_���f���[�%%�����6����m�����p�O��1��1[�$������q��������c��\�,n����1�o]�4l�}�H��_D�(gi1�����i�	*!�zr(�7�'�����x�bJ�O��G
J�kw@�
?�i3���Xd3���HN�&J��[��P�]m���D�Eq�e5����E��I�
d#��n�H�k	��bG���������F�0vG-��������}Yq�z�Ir'����De�� ���x���A���x��q������Mn3q2�����^�m�^A���D&���-��_JA1Y�v�}�v�����
���k���2���E��s�u���F���B>I�h����7���S�l�6��~��+�b�B����-}����/k��_�kG�e�!��d-�dUtW����|l��%w�V�������p��Zm�.n,�G����������g<8��C����'��z�q$�(�2`HO�����d��?+(?J~��f���f��TMK���4L���3E����
����1/���_qy�;��Ga�Q�N`�����N���=<��m�
�q5[��8�1��oV�:WHq�����@����cz��vy
��Z��}�k�R)kH������*���S�|)������A
g��VMs��:�k�����z����T4&�YT=#v�|n/!��0����sI�d�,��"3�d���(������N�^��<��`���N���	���P�f;�������n���D^����n1��+=0�8�W9���Yf����x�9�l*-��W�W|�;G��U������[�=q��XX�XA�������w�m�i����E�a�����.�@bh@�S@�?\KL���������N�_��DRt��������z��aM����.�k$U�D�v�U��h�/r�����'@�ZX�k
�����g4�C��������q��5.?�����OY>u�y�F�Ob���;��/� ��,(U����*�Vm����4���������
��_'h����b����y�k�O?�x_�9=���y����!�~b���?���IzFkZ�(���:vTJ6���[���{���U���������79��$��_����4��X��fr�"D���p��}L����|Xw6���li�-�XUs�$a�	�P��R������OE�%�fY@�J��<8`�$��drXL���e�$Y}p�Q����VNg0��F��1�����YJ}���D������9��O�"�.(b��j��F�L�I����Qd�����PD
�h���=�vC��S�G;�"<�h�=X�M���q}�j�RU���v����oWq���7��IT�_�x��������� ��}O_���;��"���\��H�^�����|r�Rm�y:�b����?X/�(���&�m�h�l��!����K�+>��=df�u���+�(�mj��f��9�c�mEB�v|	F�(�{u^��ef�;������.,\�����j����t2g����Fx�)�v������r�h�����s�f����k��
���;d'
�3VC��U�rg�c;����	�0���y������7b������e�G�Oe�������-������c�|�x2<q]�_�=����e�"�z�%�.~��'���-��v�E�c��
j��z�W�p:�y�J��x���}N������-���H�|��@~�������7�
��`i�i��s��TNc�#�o\���ELK���B�ol���`�G��N�t�kg�
B�����p��m~��5L@��a�z���M�7��Q
f���d���@�����w:��>Z��r��-#Y>�B���"�c���+6�Zf��|<��h��������v�0�
_�X������X�C���������^�����?D���w�����q���7o�VQSZg�~n9_
c�uv3�R�����Z.��|��G��O:R���������������B��^�K\0�uw�dhq�K�=��)/��h�-E��]�%�q��J<�����
�������^}�����+R�U�_���9�'�������R�`"l���w�73.x�Ow���������"�/K�[Z�F@��	P����2{��5�N����O��<�=�Pe��\Kc�Xl���t�1�v`U�#�B �����2��t�bu�mm�������lw��	�
��%,�|_�$i+�8��0b�#��0��	�����|Ox7�n'�������~�o�*G����o)]z<Y�\��v�a���[�%V�j�~�;5�v��t��<�	���k���^F���;�!��g�����F8�_�����A�����F4���y�3T	����+5�������6��L� �����F	}�LF4n����=��%����QfD+pAx��b�\�t�?wy�c�����YMe:���6�U�B�*kM�q���kC���#!�W-R�Rs�:�L�j��a,�� Fl����n��'��R����ZO���!Z�w	d�%��|dK����E�1�[��e����B��i)<�R�:Ka�]
[�R�\�����r)Xnh*��6�J=�������w����:)�"�X�����`/����9<#S���(���Xh��vd%�"}�Yy��,��<�V��Xj0h��`O�w
@�,4�u�>����2�n��L,��@r�,�!�mh������T�1������L��<{3�}m�,�e��w���)�)e�)�,d[����B��mmf[	��d�J�F�q�Q��pV-��/����8�]Yq�8������kxJd��P���V��U�j�����s��5_�[�1(��#��z��$'�	�?������}z
����)������|�������:��m�~��Hh��y��� �U�uY�q��x*~����:Y���}3��qO$��S��h�}�Sy�hT�'�KQ�����S�����$(�o���W�T��8�\P[T����G��!��u~�/��DE�]�����������S�=F��
)3�|�8��19�K�����������qk���|��������r�)��0" ��=��q�pA��E�=V4�h�j�! ���*u������Eg�7p��0�C����Z��Z�#��~9$�I���8��g@�����;��$������o�������kQoK��� �>�i&k���s��c��KA�y!�[1���j)bVY{����:����MEu��t��=8O�Y����3Q�B�gcQ;���J�2�r>���Tx������*�����/������2��-4��RJ�G-�}��!�%3�������d��A{�~����;�sciJtN�{j!�l��c.����/�`���_�Ya6�#����Q�e���.��sX���w�g������p���=C��lx��*
�qQ��Q{jR�,�@�������,xN�aP���=E���'L}}���U�(h���+mQJ��U0E:�a���~FTa[�)�V�l4`�_m���.-��%=�k#K$)r������ �v�#X�H=��X|����Xd��������d���R_D�_S�KV�HLN,�$	M���(��@��vq�&���g�XF��&�M�!����cG�\jS����bR�v��3�>4��AU�%�@��<�XoYs[�w�i�.�B��-��a5�D�Qu����N?9��8Vp�?)�
��B@��j#����fV��G�m ���gd������t�h���� �/��4���cO7�Pj�f��"o���^���\���x��I�]�IrZ����w_R�-�����"�0�\��q������[�����*�\X
^�c.��!`s��`��Xn���(B��<0{������z���s����9���j,xk�,���3^{@d�3T��G@�]Y�&q�{M�o'�;@�qvLU��J�d�<�$(q2%�{��(CR�!U�X��R��>���C��-Q�Rc������y�������-�o�,�W��1Z�L�D�m/��-+Q���N^������H�����{.������@qC��������S{�[+������r����BP�����������z�����$��?��������.z3���f95\��u|��i�	�?T
JO��~aV��G��E�o/��I�4R���n�t��'����%��E�<�H��{�8��hH��{�_5��2��S~{��=��&�%��0�"���N�����z�/�7f��E�,��;�uC�'�_�u���>7��s��2`)��'xD����O�������D���~�K8�}�����;"�
�[��$��������?����!�}�oI���]H�����!QH�JJ�nPJ���?�,��-�����a�N�|k,67����z'q���e+a���,_IG��$�[N�0�m�3}�@9�m[~��xi72�c�@����d�}�1j�e���z�U�FG���8>��>V0���L�G�����S���"�K$Q?*6��>��'���@c�\�K\�V�����fg'[����#��BK���vu��i�����u �5��h��C)�<��j ���tTZ��^�
�E��R��@�h��������H����w�\-��N�w�;��~M(��FG�q�������'��?9r�'�����}�)*1�JtQ�.*���4C���Hj�P��x *[K|��a#=m��I�]�������w�C��<��i8����4 8�H6z��Q����������x�������8��9HP���?��W8������r����J�!6��,����56�&���i�_C�)*%D���m���w���;����y�Og�k~�m�1`zp����i�w�X�u	p�������rt�F�+�����?jqz�.G�5��3�E�.j�p��#�(Zc\<�c\�c���^4O���[%����C�N~?WPHq�3�O7��B:�w��fv������-�J�5�k}-���5oZa'
���D�(���b�!z��B��d�2��)����n����!z�]e��W��H5I�nuT��]���6�vW�r.�a�� Z���CC���Y�������Z(��I��s���3:��������I��0��������4�������ca��'3=W���)��y	t�*X��d}��(AM�t��&�X�F������{�����;��Y��4�U�����=���~������!��p>�@����2��.�����l�Q2/X�C���V"�~���4f�l��:WNi�G���U��2��m�Z[&�V|4Z��-�-H�d�$����D� C-�j���*P��	WFJ*S�E�'�l�����w��Ss2��j*3���Z
[iEJ����O���<@���]�����6h����L|��U	*�z�E^�
y��Au+�o�t��%aO������6����M����q(��W������oIX,����53���^l���.���c���T�{�a4 �:�6�v�-�����H��3��)�A ��65����zh���T;7�.$����!K�C�sA.�Sh��p�	��Z����6���g����Kl~�����]����=�h�[Y�@��*�@V�������X	F�������������5?R"9+n�)��4��[l�|N�.&��.�Gv��9�P5[N����:T�=�9���L��n��B����q��L�~_�{����/�nJ���=��3�w��P�Y|�)>��W���I��17�;RV�m��&IGj����9"3�,�`}x�Y���1S�"3���*s(���H���B
����#.��T�%*o��D^#N�5��V%mm�q�����-�X��_���V='�JI���t*�_��%�e�����(�d\%�cS��}yq0��h���H.�G��(�������s:�)�������v��qI�9����b�2��w������j�x��%:VY�
76�H3������������[Z�Dt�I+�������M�f�L�s�%�},(��@���'�eY3��s���_)GE9�h(j�e��^.����i�4�|��|����5����������e�y��z�Z��7�����5�����i�,���z:�C��
k���ja��V�*�+��U�@�+�����������s������y��4��2w�m$�UZ����]�+������������N�?��������<l~x����~!{-��%]tYQb=���������@(����	w��i���/��)���/����
6:����uC�a�~��������wo��+�u�]���n��q�Q���G��*���O?��6)z�w�K�e� �����S���RR��o��/�6�H<���/ms�%������k�K�B�v0~3���R:����O�����
?��"�����8�b�������J��qd���p�0�����5��~��]_~m�����<>T��U�����.�OJpk[�4fa"�,������a����v�~E��|3���/?�����?�C��b��S��&"���5Z�!`�B����|����cT5��]|����a|�������\0f9LjU��Z���_��WD�������.�����%i����+
���JQJ��D1
���t_��L����m������M0���FY,$�Y8�_��y"��%I�L����_��3����~x����"�@�d���v�����������9��=O'��5(��#����{�?��$������+������H#��QK.�=1�
.�
.�����m��<�����}8�(���@e����v��Yn����a�U�_�������&���"h��6��F�S���b�����4��b�s�u�o��v��)TR���
��V6m��K��F`C@s�������|���.o��K�ThS�*�y�0�^����T�G���F�pgLg���Hy����x�_������� A���X��3�b|����cBvt�v�{��Nh��r�'���"���8�M�E2&��Zh:�1
d�|={rv9M����=oF�r�)� ��=���|RtW����4�gP@[MiP>[gF��U��a
��W}��Y�p���!��.�������|1q���&Pz+=�����Q�����[��9s����!D���Ai`�4�w���(�Et��Q��D���(D�b.s���f���������V!j�������L������L����i��f(Ra��������N�X���'�������������� hQE��_C��C�)l.9�r�@�����m�P���x�����5��4��1���0�lM��R)4u�L�'S�I�;�3I�k��3%��?��;(^��>��z����!��h;	��F������)`}�X�G#�Km>
h��SA��!/F�Di5��A3A�K\y������gCj��<H��=��v�����[���J��{f���O�F��������a���~���c�� L-�h����c�Y�#���fJYM�~:z��a�L�X��^�2X�TF�I�����C�t�������G�Q��y�?	��2Qmo&�{�����J�����-���N~��:���K&��7�lJ�:�"
��
�xr����H}fj[���V�3h
J�T�1���k��n�V��u3�zJ��bo�5�i9V!\EWsl�
o������z�(]g�R/d����i`.J2xP�0d����w1�%h�!�0�W�El�=�������+R��m�����m-����e^@�6���Le2����`)�m��j1��[�Y`l��[����c��=bg��Ep�:�����V���^�G"?��u�v.7��i�r7.�����
R�S�������k���]1�+�K
���e�[��+�^K'<����6_c��M���!W����,9|�0P��Ow�{y��=��?��9��'8���V���|�&�G����=X��,�����7��P�i��*�����Kl��!(���,�S��{����5�>�^��n2:Z�q:�'d��O��WO�����}���m=�9������[
m����-ijiK�^��o���E�Ow]���#G�����	�8����[��".���4��{y=�^�����4�������BG$"��Z����Z�<M{�k�O?�x_�4:���k�������������h�hZ��mk�|M<Y�/'����y�����������������������<��3�}���|u����[��\��������Bp���o0q���~~��z�����o��3i������(��W����
�W
R�N%v�z�X�Z���u�vGK������V
�����j�{G��Z�1�Y��%u/�F)��T���|1f���Ci�r�:Fk�*8��Vl���*�c��1ZE�j����i�L�~�����b�Ne��IQQ0��Tf�u|����V�[�����\�c�2k�jr�:��4V��������H��JV��J�VP������%��%��Q�s������v.�����)P���������y�:@��D���r�o�N��&=�������A���^��Wg�W���|�7���rM�c��{��$�e�q6]/W����bvu��>+6������YF7.z����g+z�T�������&yM���6e�I����gE>%������!�tJ�M��^{��������W��a����3e���H���E0�z"13^d���Ivw�4���o��+3O�������<��Z���t���(��?[��?q���?��?����4>�����~~����������_f�����;�����[\�3���B25���D
�����*��0������
�J����{���T9-8K��`�:Sc�W�8��\5A�r��d��/rTh|sl�(�g�K.�!<���*`�l��2��/��d�9�����=��vi���'�c������Y���N�b�Fu3`O��2�i�[F-�7m"��^�f�^U8[uO�J���Z���Z�b�|5P���A�a�-������k[e��;)3������Tw)�\5#�Rs9���J�>�j����;�Vnu�������88�nM���/C
=�%H��c�g8viy�������������ua�m�F���Up�"2��U�"bY������6�`��5���/��Z�Y8[9�x�T �7O9���U�y����}56�p����^Nf
�� �+��w�"|N?Kp���h-X������|YT��T����Z��<��K�3,W�bp�r@��2��l�/x��xgx<�VL\o���5�����2B�H����iPy���bLM`�1��m�������W��W��,cb�5����U�90 �-�|��D��4��k��7A�2��^�g#h���zY��Z9@�d����m�j����9w���2k����h�/C4LL
0���;����i�A�����v��x��0yUtL������n-1s^�"V��}%��0�������������~'Mb���N�����DV~y���Oo�����������������}"?����������E�1���dy,�%K�!���%K"�eq�3D�v)o��P�Y��N����W����kM���������o��D���~Q�sC�dW���7��<7��v)S�q�j/T[!�����a�-�s\�c�T���%TV������'XF��?�B*��	�RY5O�����9�c��>����s�va/����:���m�c��^����S��D��R�Y�^�F��V����\�������k�fUO��k���U^s��y����g�"���y��x�x�)���t�}�WE��Y�Ns���<��bPh�`�������U��l�vf�������_a���r�T��v�����f{������jzBzX��'���j|2�X�q���3���������>���/��:}O���W���[YmO���U�T[\9B�ub����RB������2WF�@KV8u�rF;��5��k��(w�sZy�;����=��W��' �5�y�[��G����S�d���`J��XW^�1���7���([J��e��sS$n��y��V��G�e���r���x��z����U!�g��:}�~;o	�J�{#++}�-���Oq|�_���Z�=��U����j�z�qm�j2YOzL�_��O��7����u��I_\��GSe-R����Vw��e�L,+��g�u��<Op��k� X�E-����/.��6�Bwm6Iu��%���o
���vk�tu��-%��Q3X�)P�{����������-1��+x����
)u���+���K��<��d��!YR�W�x��Z]�!}�d���w[]�d�.WR���t����G�W���ZE5K���b�.��}l����Hz�:����e�+�_I�$'��C�q���~������!hP���{'C��W�N��6�4Z�,;���}*}i(�/�b*^�Lv����Ag�c�g�Q��5w����]�.vS�cc;���x��R�����L�Jk�Q�xX����2�����dd�y�iVTz�����J���Rv������W\�l`�A�2q��r	R��^��R��?�K��L��.)��i�D�d|�=�|�OiO��L���q���"��2|�`�/(��>w��#	B�y��!����������@�0$�h������
1/(5a�E��P����a�����A�L��_��oW��{XH���i�,M�4ZZ������"����0���[d�����|n1���w��[����|��R���6g�i�p�j#So����������OF�
��=!2��`,pe�3�-)`�*J�-�������.��S�+g��-���l��GR@_P�oFK!V	qOV�p�B\�u�����(���<�V/���o��0���u�P(y���j5R���v��!h���Ez���<�8�3u�u�����%�'k��U�6���U�u�!b�X�.1N��w@6��CO��1VX��T��6���TT��Iq+L2��A%�k��u��^���H^�n����"��4���5?�E�g�-�w|��<��`�H�dZ	�3C9n=K�l�uSJz+o}e�����*������2��P�y��FqX�hS?��kJ�!���A1%�H����E�����B1brq"�
?��@/(vX��Nw�Y+x<��T��%A��A��A7���I�����(k�:T�-X(h����ob0�U���F7���dP(:��	��#��t�]h��a�ul1�wZa�I�t(���DN1���z��-!V�������"(zRe��� �x��`&RB�FE�M���N��������;��Y"j��f�
!�lv"R�����l�[�tv?�k_�2�����.oW�����"Q����b�0w�R��Z��,��X��@Y�[��[��<Y��n�N�s���dWn�M�D,�	�L�.��*_�5�n��*d(������B��%��@��pL���q�#������d�0���(��a0����cpV�~Y��aTY��n�	S���:H^�J��R�	���F
�T�l��6������f��-v%H9�*x�r����D���J$�7�%�[tH��u����-
~�X�F�����6�KBf����8w�r:���w��rC�z6��������~������@�gBq��o�N�(��N|M������X��sY�!�njK6�S�|s?��on��]�r�-�qAS�-�m���:��T�=@�Kq� K�m���Vl��S��~�eo�����:�L��V+Orx���0��r�ym<u
��!��vK6�]S�\���.Z�m��l��6��+�h��k*��l�����	^�{6�6��z��/����s��
G7�E:��d��@�J�,�Fm��3u�*����pf��} �uU?�NB��{�	���l�������?���"5��l��&���Y�2����:�j����O$v���r�\�s�-f��1�M���"_����M���/z���e�d��G�6�!�G��3i-)?T�+��
ST�u6�B�	b�QK�l��B[PF��
���d?JG��&�8NYYl0���`��e��R��a���R+b��XbZ�)�I��WM���c��y�R��Y�9�������06.�6�GI���@�:,��CZ�|�^�%P{T�Z�t&d��4��5[we5��x&d�1i���4R��
u������m�����b��*��53���Y�������p������-td<�c	���HC
��J�ji��Bp�+��tA]����C1�����)�$������"�R}'	��a�P�3�;r���V�j���c�Hx���2W����E>Oo'��=4T^J|*�6���p����lY	��[����g��~��5�)�;Wu��n�$�V���sj��z��6����7�q"��W����^��.�A<�l�x�� ������|�����-i/Hy[<r6��'��X<��"���)��}�A<T����6�GX�i�+)�a �b^8����# ����U^Bl�rA����W" �����W�h���@=����+P~�� �Vn����
��L@�����pO8��m�_]���^��2���%�6��\	V���o������������*������<*���*����FyZ�^�e{��X���au�V���S�s��r`�;�|�"L��p�v-���S�sdp��{X0
�{Lpb��A�
�cA�
��Y�� ��X�P&��A<H����M��-���Y	E�-=O%l/�n�!�-$t�q�)wE��r�O������}������������{��*��"5@$=v!�v��<
��m�L��j>�F
m�*JeM)���f0��{���u������bW4�->�P$��(>�[�2&S|e3������67�����mF��0�A�Q����I6�#���8��.���:�\C� ��`��:R�����28|����\:������s��s���p�/����gh�����rQ}V.����� H�����^���:�*�~��3aQ�LX�<5��E�3aQ�LX�<5��E�3aQ�LX�<�5�z�>3����a�R[�a�u�n����do��L���N����f�y)+���,�v*
3�J�e���Qb����r�D�K4-<���_����0�B�SM��LYG�Id�J[�N\�����$����UN{��h0����l�����v�9��
��)�J�r�h���z�G
S����]I�a��5L�e���0:�Z����� �+M�{�����0RV0�(���an�����)�{9�
��[���+��\S��m�����Y������C��:�.����������i<HO���\�����q��~$Cf�wkN��f��Q��B�r3+�PP�� �+��,|lnr�d��?&(�%]�������\~Ch1K�n���-B~��l3����4�cN����M�w�[&nY��:g���)��67��o��2Y<lor�L;2���|�vc7�)Ib<k�j��
b�`�a����L��{>�eA+�M��+Y����	
�t��������@],6�^,�6��7�PEA��v�K�����${nd%O����|#*�����Q3u1�e�{��/�����e3��$p����p��OZ����,r:b=_N�W�k��mM*�K����$ p�s������@�)h����8�?����-��]�)%��+�Nn��|�����������G��n&�9k!/�e`e�j(BA	�}����z:�����*�6+�|��g����7�y����n�
�����~�Y1=������7��(����h/g�
��<O)2P�h1�����������L��������j�7��|�&�b���� �����:-��a�XrVy}���m��o$�'a���?Z�R\R��tL�5E��8����r���P��
���;��2��w�����?��?>lr����Kf��������_y@���O��l�t�R�V3�k8T���{_��6��}_�.Z��;K��8��\v��=�:v6�gn���TEY�P����8W��_��|�,f���*�Kb�h4�F���0���[O�����u�
��61�[��% �<��0e����~�������mmmuV���?B��RO�.O��.6����e~�eF@���1�y����$MfL����� Xz�6������@�M�&1��`;�%�gA;��E�QH�o�C*�G�?�2N$|���u�����Y��#���)�nk�5$	(�0����g[���2�t�xNL�^�J��0���{#/�6^&$*|G�o�p��~��(��I����$H�/��H���xh���<"a�Gw�;�����xrd%�m�yY]�CC�6 �&D+q�f��{�����6�:8;RW�?�]��f~����6�"G]u��l�9�-T9�1�"Pm����)�����T��g�w��T��ZL7s�^��{�h|�6�4�bM�A�;����FBRv3m����V��|�����=���V���=m:��=�+-mp�� ���s����0H1�2���
y<�g�������f����:MH�]���A�3��L����'�(�[�5�H
T�����1����FI������MV���0H�2z�M��w�z�����0����rm�-���)	�S���������O���?����6�{z4�F0nH���������v|L����}�~����QD�����&���:*�Q'�����������.r���G.�g������
+b{��8�4�<�p|~u�����i��G!��-+����\]�[Y����$�1�	�6�	�TV���
����]����,b8d���I����������Vw�n�{5�m3���6I�� ��;Q������eS����JZ�&O����9~�f�}�<�g��Y������V��mG�g��m�a�S6��;�S<O�n���N�1i�B���t���3���B��I(�o�T������������'���8�Q@��V�s:
���tg�PX_o���Db��I���s�p�O����+�|R��8���	���\�����9�"���|�%����)/d�E�
���*�~BR�>�"?���4�5�G������B�G��p>��?����������o����������NO�v��_N]�^�����n,��(�}����Z��-��e;jy�g��5S(9,2+R�$���Y=�>�so��op�B@�z���E���y�'�=4��5��+��5|�_��C��d�9���)��jx��!�j�(3��2��F������O��������z|��N�=����P�����������XK��{����,��u�o������H��3����L����,��+q�����p����wK``�_4�!v�KdY�^�yM����8��~�Ox�"��Cg�~��C�}��J�9r��8��EL�e��.�8����c������"��y8�5y��g,�;;}�^b��^6E���1�GK���A��n���=w>$���*�!���tdt����pr�@���/3�Iow)�L��^OIS�[�r�IM��O�Hw`�zi�q�
���fE��(��i&���,b�<C"C�*b��j��$�4�P�blA��������$�@W,����0���j@���jp���v36���L�)
�>O���js��$�������G������#BYi\*p�bS���y��RF!��p�����@[�&K9n�����Jc%��*��W_������[�a�i�j�#g=�w_�
�����2�p��@%i��������yHn�_�f{@���b������dH8�v_-f�=�f��>EQ���:��A"1N��`��4#�Lv*L_�hK�hj.���92v��64��J���X���Ga��
-�����]Q���_g�8V�L&W�����hA�$��Q��l�'�!�8����( �&0�W��(?J�@=
'e.{~�C&k:�u,
5yw�����^YXz���:<�8o%i��-�c����/O��Y=W�'��g���� c;"�)��E�r.�1��C3��B��J�;6�||G��H�~?�\)etF�|��Z�� �9�����
X��K�Ab`�#J00�%����e\�8�9�!Z7�w�R���.�TS;M��<��t��D�k�I��w�>�c�-��g�v@	'�����2g4��*Cj���`v$4���a��{'���]����������l�B���i��zq�,2ur�T@�����+:*��]8�^��V���C��q�����r17���{�F��>g�^����Z��� ����(ma��9������
v�b�W;��������%�s���@;�`k'�`t��1,Bf1mN1�����Jd�q(���J��Ur�ll~d����f��{��.����2-WH�%3{�6����+�Z���=� �%0�>E�5��@���2��o�T���� ���5�� <)�O00VQ�{^�*9��e��s�8��]���������G������K���x������g�$>�Uv�W�>i?�f����~:Q���M���������y� o�\�%�$��� �#�he���� �-�AP~����@c��IL�J1�#�(�!��Lk�8m3v�rD�j���3�\����<������>�"�P���2����M��i+#�?
��6��O����Q%@���o!����/������v&�(o8Ck8���4�J� 37/b-P��2����4Dd��x��D����]`�q�|�LB-��u��pz�@��=�k�A��uR�c���l[���u������;�k��K��Xe>d��Rn&n�[���[��I�g�����3�����?��-l�F�Z���{�w����5l9��*��N��]������c�0����9S�
u���eR��c����
���p#�5�,E��}�~H:^a���Ig�������p��A��%s�i��;8*i����nV|����O�y#���v��������Z�@u��H}��F��a��\��������u��c�����?���C���Yh��!G��a�����s���7�4�Mo�M�W! >�1N9�
��Pz���7E~���E�d�X���{�^�AJ�n0L?����s��	z��w�$6f��E����-XY$.���s@^��/�G7Q��`�����\����tc�V��^D���:�p����>5/~�������^��mV�a1e�F.�5���(p�a�I��Y�����Y��?��D=y>�����\�2����'�_�E�s�d{�d�g�b6�����wgNe�!v�0h�k�^��&t��;�k��eH��%�R�$k
Z����g��l�O�	b���l�<t�+y`�W�(�Yu�K�x1�N[i����U�s��	
�g��Y��e�
��3@�,	\��cJ {X'�0%p$����B��������
]t���f��S�1����_fI"9mk,��#E���D���0��q��ATc������%j�-$:���,�d6��V���|rHv�������4:��:9��Q����8������K��"����B�k�����������<��o�w�/�IF ��O`9[Io�����	oL@�X3���%�r�*r|��H�1]^��c_Hl�ipr������S�g/WA6�o�GJ��Mows�} ��1��x�8�V?	����������05�Z3�w�o���`�����N�F�	�O/�3,��&��ABA?�>h������Y]�1�#4c�����K���#���!i��^^8���(3M�����p���>�/����������Y�����!����w��i�9���l�uI��<�`X�!>�jSzZ�EvMm�u��������N�W�����?J�Q�����c7(��	 �x�a��D�������iW(���m������T|Y�%nS�����o�R�B�����J"��p�t��h�G�x�?MP���j��o���b
���K�9����"�7���i��;��|�����@"��2���y1m������l��d�.\�������gLM�D����0&5�����}Db�bA$�	�-��$���S'�H�$8dZX��+���]����1,�2R6%fVW����}�Y�I~�:�64)��L�4�T��'Z^h=���q�dg�@��:���9���d��>1\=K!���@�,�y}p9�bo� 75.}���4�-=��<�<����;���w�D�H�M�d�~� �vQ������qtx��/^��C[��[E����M(�:F�T���gV�rK��y�W��@�p�� h��Ye�d�i�Z-�E�9�?N�lY`��|
(�.�r�� #"�Hs���s�u��=dD��q�o�{��mB�uw��h���#��|@��W	g	|�x��3�����V��R����l�O��T8�y7U����>��X�R��^�R��[�p
�h}a���ME�q]l��s�N��:����X��v\q��lN��$�"J�����)���A��g�N�T&�nRw��Y1�J���j���<�����O?������
P�!86UD>,���7�{�����1��w�f�3o� ��s	v���]z�t0������$��c�\���*�KRz;��;��p/�_�H�"h��4�%b ��u�b"�(I���.m�&���<���<d*��}T������� ����hRS�[��hwqP����,��>W����q�2#yH=
�"�� HLs���dA4��
�1�N���$�z+����E��z���@�C���.x�����������8�4��hQ�72'���
�:/����aD�j����|1�l�A�+��5t
�`�����n���u���K�m1��()���� ^�����n!��O���*��$��p��\����E�C���I���G��/a>d���"��!����K>�m���{7�a-$|�����_������Q)���0)�E)����;�����r�g<����"�I�4"�l�3���a��C������I��f]7���M2n6=����q����;�r�G'.����D�:��+�����\�{�)����n4O���<}SL�d��4�QC�&��j'�Un��$_qn[�q�z=�\�����l�`,���	�Oz�}�u�'`FB��e4�K6�!���8Yv���iE�X��$[|��7�TV�vn����/R��#NR{8T����t����%E�Hky����(n����*w���u���Q+�9�x2�%[���8?9S~��/����h��c����4z�#�,B��?Dc����r�7g3�������oL}����2��X��9�:�tI:?O<=�������
)��i"�m�CP����rR��ne"D�!S7��d]iF����������~G�����pU���8l�=D�N���Rc������6�����F���-�P�kx1��M���#���L�k�>������cj���T�4�aw�1�������Lp��'�LlKMD�����n_}��h�4f��D�`3wv�6����1�l���i�o4���w�A�)D���y�3���t�6S����Q�D�JP�Zj�KAaA��3��~������Yo{<��a���E�E�c�@�9�si�������n���T@��,�`j:�hh�/��@�	;�m&p����S��z����������
����H�e�q��){lX�''�}��o��L���VS����-�)�A������n�
(O�f�9��b[fZ\M�'����� WS��$��:m���[ Y2�6���$�%�
&�xy��63�71`�5T�?sJ|( �Ub�����������$6�����j]DxU�D�G6�m��,�����b;�Yrh���*��x�8�����xep��y]v���G�$�#��F���O]�N��;\�x�!�I�������[RQ�$�t��L����C����?I�go�Vz���P�H��"������:/����
)O�V�B��c9x����K5�v���`���o��M���E�&{����j���V
P��U�e��UR[L
�.���[�)+�I��w��q���g�/�I���Z�m�H��}�����Z�2$8B��5�}%.2D�IH�A+L\�F,�(R�I���� LmRa���b���{R+0����1 "[i�$�����J�*���gJ�l�>���}�#�^g��u5b*q�M��`�`�a�G�F����i���"������
��6�2�����f�n����J�-��7[[�~)j�������j��N9
��H35CT8�L�����&r�������B%������>!�p�>� 7��u��-S�|i�������gog���c��8u�����y�m��)��'���f��&���&�B7+�^J�[�\f���}��Eh�Rc���=��N^k���T�uw/��v����	���E��O�J��l�v����9���p�~1��������6�H�{=p���;E
�/�
�y<�Hq�C��r;l���'�������|�r�����<��	�p�Q����K����i��O:+��[�������8�k�XL*b��$�9�u; ��c������q 4\@���)@���fy{������T9S��
�g���D��p8Xd\���� ,n����8�Fj����9�k�(_�����L��L�P�5>��\��\C��������
u�����z]��U�%��Xjkn��Brr[�T�k2�����q�%3��Y
�o����
�W1m�`���ve���N�%�����c1JDry���z5n	5To�:^;+|���2�j���2]n�-iEN[wj-�H������k������zQ%��0�J�|��-W�W.O�r_)i,(4�G�
��%Z���f��&-Z
i���b{{{���2*�?%�cY���Q|��=�Q����Nq�!�a�K��9�������F���+��sNH�����`�bF���^��5f� ��;-\GL�|t��4$�j�3[2�z����K���\��R��QS���!E��rY�e���8�9��2P�K����a�N�.v|S�#���7���d�#��B�En���%��V�_^�N(&���W��`k8�G�]��0��|H������d��g[<R�$_�&q�H�y��c�]/��I���2���m|�����g�0>>�jM�a�(���t���$�!w�����������������S���B�H4-T�D~#Y�r���H�������MH�4{/��R���(�L�(�E
A::��F^�I�c.b����~+�Y}�e�#�����!���JF\,�#,�v���n���<�&����,�C�n�+�imPOW��c��F�.�`?V��\r�/��TR~�d���������,�t~d��-h�9+cvm��}���+Ju�Vb,	���PMV�!V�����r�Pt��E�K�#fl�a��I�dX��^K�l�+DQ�.T��P��t'�.]�e0�7T�HLd�(
�Rj������%����0�p7f)[���7� 
��$t��vC��S���<��I�4��U�Q��rR�=�Kq���L���Y�J�P+`�$M���k�s��`M������{?�+&��J`6�V��X���u�
-���M� �i��W��9��I�2^k�8_`l�}}�dq��r/���E�
���8��4�o���P��3Sy�8�5���/[��.����������K�U�g�y\�����E��Xq��5��{�y[���#�wh.Mk��-1
*���<}V��	�S������`?G��,��(-[��4���-Z���?w+-�6�����w&�;�&�x�&h�V������)��K�����$�I��kVR���r�'�/�0����A���Z�e��U;o��~,�aJ
���lN���r-��!(��������Kux~vv|�"���������2�/���Dj~�0���J�^�#<FS���]4e���5���(�5�B�oU��q"�dG���n�9�<)��!o�!UR����0��z��
���6�i�������F�X��?�O��>[d:j�\#^L�,�\M��e!]
P�A��}}��Wa�d��*��_����&X��F(����g8J�������C�$�y�(X��=�����
�T�h�+�:%��>�)y����w��PW�M��YRx�:M�W'��|�� ��v�FnM�\�j)8P�UC?k\�5���{C���M���
�Q�bG��mu��"$�J�#B^a����TE�Rw(�N��QxCk��&V7z��R��"�]�S/��l�11p�>Gf<
�����(������;M�B��J����8���9�	i���Q��!i����"�g�c�c�
��(
nB[����9�[.)�:��_��2�>��(m4{���R�R����|���rs���Vm�o��z:
Q�^n�����������r�E�����'����!������n<��J��2����}��/4��$J<�`�}�k��9<M���vp����6�~��2@��]�D�"/U6&^���~2��k4�2?�PL�66�=�&�����jY��8��.l������-���L�����V���e7��W����{���G�i��+���<��U�2�#2���5��jE����eh/f�qOc��*75U����
���!1�A����j��E����+�h�f�1�\�����9�S,��A�R�7F�v����G������(XC93�u?��Q�P��^�ef�T_>�1
h���y�cB| ���B������rQZ�kw�+�P(.�KK�A����=�J��I)_���92;����H)}s�U��H�a�e��rB|��$�odOh�:Y|�zgf����/rz~�7�������2T�(����f����Y�.�J�t�Yp���f��\������Tj:p��=#FE;hk#�6(�]��\�V`��5�k���ep������?]����8O.�?��A��xpy�������*�	���I��GRRMU��G&�	�(2&�e�����_	����e���-�^T����E:W�I`7[��ZxC��u`O���!)
���������2/3[���tEz�-Eo�C������%u���!k36�"����c��?�w.FE�!TF��r����'�����_P��"[zy���A�5���Nn�W�������8�+����
=M{�M`6�"XP
��Dr��-�K
9�I�2d�B*$_��u��_7�@m�$_�����������'�z*7
��_���������O���ON����������xuE97�'R����&
�C��I�]R�(A��B�+j�����<?��4���T6"a�I%�R��p% D������� �Q�(�����\���l��������@������q�a��t	�.c����1��ZM;��^�I�-�
'C�J�5�VFJ<y�D�v&�,�U#�z����<�p������G�;<e��%�t�n�1�Ei�$�����
���iw������{�=����������{�=����������{�����/����
#14Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tomas Vondra (#12)
Re: Add a greedy join search algorithm to handle large join problems

čt 11. 12. 2025 v 18:07 odesílatel Tomas Vondra <tomas@vondra.me> napsal:

On 12/11/25 07:12, Pavel Stehule wrote:

čt 11. 12. 2025 v 3:53 odesílatel John Naylor <johncnaylorls@gmail.com
<mailto:johncnaylorls@gmail.com>> napsal:

On Wed, Dec 10, 2025 at 5:20 PM Tomas Vondra <tomas@vondra.me
<mailto:tomas@vondra.me>> wrote:

I did however notice an interesting thing - running EXPLAIN on the

99

queries (for 3 scales and 0/4 workers, so 6x 99) took this much

time:

master: 8s
master/geqo: 20s
master/goo: 5s

It's nice that "goo" seems to be faster than "geqo" - assuming the

plans

are comparable or better. But it surprised me switching to geqo

makes it

slower than master. That goes against my intuition that geqo is

meant to

be cheaper/faster join order planning. But maybe I'm missing

something.

Yeah, that was surprising. It seems that geqo has a large overhead,

so

it takes a larger join problem for the asymptotic behavior to win

over

exhaustive search.

If I understand correctly to design - geqo should be slower for any
queries with smaller complexity. The question is how many queries in the
tested model are really complex.

Depends on what you mean by "really complex". TPC-DS queries are not
trivial, but the complexity may not be in the number of joins.

Of course, setting geqo_threshold to 2 may be too aggressive. Not sure.

I checked the TPC-H queries and almost all queries are simple - 5 x JOIN --
2x nested subselect

Show quoted text

regards

--
Tomas Vondra

#15Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Tomas Vondra (#9)
Re: Add a greedy join search algorithm to handle large join problems

On Dec 10, 2025, at 18:20, Tomas Vondra <tomas@vondra.me> wrote:

I can confirm v2 makes it work for planning all 99 TPC-DS queries, i.e.
there are no more crashes during EXPLAIN.

Thanks a lot for testing this — much appreciated.

It's also tricky as plan choices depend on GUCs like random_page_cost,
and if those values are not good enough, the optimizer may still end up
with a bad plan. I'm not sure what's the best approach.

I agree that many other cost-related parameters can influence the join
order. For now, I’m still running my tests with the default settings,
and I’m not entirely sure how large the impact of those cost parameters
will be. This is something I’ll probably consider at a later stage.

I did however notice an interesting thing - running EXPLAIN on the 99
queries (for 3 scales and 0/4 workers, so 6x 99) took this much time:

master: 8s
master/geqo: 20s
master/goo: 5s

It's nice that "goo" seems to be faster than "geqo" - assuming the plans
are comparable or better.

One additional advantage of goo is that its memory usage should be
better than DP/GEQO (though I haven’t done any measurements yet).
But I don’t think this is the main concern at the moment — I’m just
mentioning it briefly here. What matters more right now is the plan
quality itself.

On Dec 12, 2025, at 01:30, Tomas Vondra <tomas@vondra.me> wrote:

A very simple summary of the results is the total duration of the run,
for all 99 queries combined:

scale workers caching master master-geqo master-goo
===================================================================
1 0 cold 816 399 1124
warm 784 369 1097
4 cold 797 384 1085
warm 774 366 1069
-------------------------------------------------------------------
10 0 cold 2760 2653 2340
warm 2580 2470 2177
4 cold 2563 2423 1969
warm 2439 2325 1859

This is interesting, and also a bit funny.

The funny part is that geqo seems to do better than master - on scale 1
it's pretty clear, on scale 10 the difference is much smaller.

The interesting part is that "goo" is doing worse than master (or geqo)
on scale 1, and better on scale 10. I wonder how would it do on larger
scales, but I don't have such results.

It’s interesting to see that goo performs better at scale 10. I’ll try
to dig into the results and understand the reasons behind this in
follow-up work.

It might be interesting to look at some of the queries that got worse,
and check why. Maybe that'd help you with picking the heuristics?

FWIW I still think no heuristics can be perfect, so getting slower plans
for some queries should not be treated as "hard failure".

I agree that no set of heuristics can be perfect. The best we can do is
to look at existing workloads and understand why certain heuristics
don’t work there, and then evolve them toward strategies that are more
general and more aligned with the nature of joins themselves. There
doesn’t seem to be a silver bullet here — it really comes down to
analyzing specific SQL queries case by case.

Finally, thank you very much for the testing you did and for all the
insights you shared — it helped a lot.

--
Best regards,
Chengpeng Yan

#16Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Chengpeng Yan (#15)
4 attachment(s)
Re: Add a greedy join search algorithm to handle large join problems

Recently, I have been testing the TPC-H SF=1 dataset using four simple
greedy join-ordering strategies: join cardinality (estimated output
rows), selectivity, estimated result size in bytes, and cheapest total
path cost. These can be roughly seen as either output-oriented
heuristics (rows / selectivity / result size), which try to optimize the
shape of intermediate results, or a cost-oriented heuristic, which
prefers the locally cheapest join step.

The main goal of these experiments is to check whether the current
greedy rules show obvious structural weaknesses, and to use the observed
behavior as input for thinking about how a greedy rule might evolve.
While there is unlikely to be a perfect greedy strategy, I am hoping to
identify approaches that behave reasonably well across many cases and
avoid clear pathological behavior.

In the attached files, v3-0001 is identical to the previously submitted
v2-0001 patch and contains the core implementation of the GOO algorithm.
The v3-0002 patch adds testing-only code to evaluate different greedy
rules, including a GUC (goo_greedy_strategy) used only for switching
strategies during experiments.

All tests were performed on the TPC-H SF=1 dataset. After loading the
data, I ran the following commands before executing the benchmarks:

```
VACUUM FREEZE ANALYZE;
CHECKPOINT;

ALTER SYSTEM SET join_collapse_limit = 100;
ALTER SYSTEM SET max_parallel_workers_per_gather = 0;
ALTER SYSTEM SET statement_timeout = 600000;
ALTER SYSTEM SET shared_buffers = ‘4GB’;
ALTER SYSTEM SET effective_cache_size = ‘8GB’;
ALTER SYSTEM SET work_mem = ‘1GB’;
SELECT pg_reload_conf();
```

The detailed benchmark results are summarized in tpch.pdf. Execution
times are reported as ratios, using the DP-based optimizer’s execution
time as the baseline (1.0).

The compressed archive tpch_tests_result.zip contains summary.csv, which
is the raw data used to generate tpch.pdf and was produced by the
run_job.sh script. It also includes files (xxx_plan.txt), which were
generated by the run_analysis.sh script and record the EXPLAIN ANALYZE
outputs for the same query under different join-ordering algorithms, to
make plan differences easier to compare.

Based on the TPC-H results, my high-level observations are:
* The threeoutput-oriented greedy rules (rows, selectivity, result size)
show noticeable regressions compared to DP overall, with a relatively
large number of outliers.
* Using total path cost as the greedy key produces results that are
generally closer to DP, but still shows some clear outliers.

To understand why these regressions occur, I mainly looked at Q20 and
Q7, which show particularly large and consistent regressions and expose
different failure modes.

In Q20, there is a join between partsupp and an aggregated lineitem
subquery. For this join, the planner’s rowcount estimate is wrong by
orders of magnitude (tens of rows estimated versus hundreds of thousands
actually produced). As a result, output-oriented greedy rules strongly
prefer this join very early, because it appears to be extremely
shrinking. In reality, it processes large inputs and produces a large
intermediate, and this early misordering can significantly amplify
downstream join costs. This makes Q20 a clear outlier for output-based
greedy rules when estimates are severely wrong.

Q7 exposes a different issue. The cost-based greedy rule tends to choose
a locally cheap join early, but that join creates an intermediate which
later joins become much more expensive to process. In this case, an
early commitment under relatively weak constraints leads to a
many-to-many intermediate that is only filtered after fact-table joins
are applied. This illustrates how a purely cost-driven greedy rule can
make locally reasonable decisions that turn out to be globally harmful.

Taken together, these outliers suggest that all four single-metric
greedy rules tested so far have structural limitations. Output-oriented
rules appear fragile when join rowcount estimates are badly wrong, while
cost-oriented greedy decisions can still lead to locally reasonable but
globally poor plans.

One question this naturally raises is whether making irreversible greedy
choices based only on a local ranking signal is sufficient, or whether
some mechanism is needed to make the approach more robust and to limit
the impact of such outliers.

As a next step, based on the current results, I plan to ignore
selectivity (which performs poorly in many cases), treat rows as largely
redundant with result_size, and move on to testing on the JOB benchmark.
I also plan to compare the behavior of DP, GEQO, and GOO on JOB, and to
use those results to better understand which signals are most useful for
guiding greedy decisions.

I would be very interested in hearing people’s thoughts on these
observations and on possible directions to explore next.

--
Best regards,
Chengpeng Yan

Attachments:

tpch_tests_result.zipapplication/zip; name=tpch_tests_result.zipDownload
v3-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchapplication/octet-stream; name=v3-0001-Add-GOO-Greedy-Operator-Ordering-join-search-as-a.patchDownload
From 79c4d3fa7d83a24b3937ed2e4d5568bcb949e820 Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Wed, 10 Dec 2025 12:52:17 +0800
Subject: [PATCH v3 1/2] Add GOO (Greedy Operator Ordering) join search as an
 alternative to GEQO

Introduce a greedy join search algorithm (GOO) to handle
large join problems. GOO builds join relations iteratively, maintaining
a list of clumps (join components) and committing to the cheapest
legal join at each step until only one clump remains.

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/Makefile           |   1 +
 src/backend/optimizer/path/allpaths.c         |   4 +
 src/backend/optimizer/path/goo.c              | 612 +++++++++++++++
 src/backend/optimizer/path/meson.build        |   1 +
 src/backend/utils/misc/guc_parameters.dat     |   9 +
 src/backend/utils/misc/postgresql.conf.sample |   1 +
 src/include/optimizer/goo.h                   |  23 +
 src/include/optimizer/paths.h                 |   1 +
 src/test/regress/expected/goo.out             | 700 ++++++++++++++++++
 src/test/regress/expected/sysviews.out        |   3 +-
 src/test/regress/parallel_schedule            |   9 +-
 src/test/regress/sql/goo.sql                  | 364 +++++++++
 12 files changed, 1724 insertions(+), 4 deletions(-)
 create mode 100644 src/backend/optimizer/path/goo.c
 create mode 100644 src/include/optimizer/goo.h
 create mode 100644 src/test/regress/expected/goo.out
 create mode 100644 src/test/regress/sql/goo.sql

diff --git a/src/backend/optimizer/path/Makefile b/src/backend/optimizer/path/Makefile
index 1e199ff66f7..3bc825cd845 100644
--- a/src/backend/optimizer/path/Makefile
+++ b/src/backend/optimizer/path/Makefile
@@ -17,6 +17,7 @@ OBJS = \
 	clausesel.o \
 	costsize.o \
 	equivclass.o \
+	goo.o \
 	indxpath.o \
 	joinpath.o \
 	joinrels.o \
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 4c43fd0b19b..4574b1f44cc 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -35,6 +35,7 @@
 #include "optimizer/clauses.h"
 #include "optimizer/cost.h"
 #include "optimizer/geqo.h"
+#include "optimizer/goo.h"
 #include "optimizer/optimizer.h"
 #include "optimizer/pathnode.h"
 #include "optimizer/paths.h"
@@ -3845,6 +3846,9 @@ make_rel_from_joinlist(PlannerInfo *root, List *joinlist)
 
 		if (join_search_hook)
 			return (*join_search_hook) (root, levels_needed, initial_rels);
+		/* WIP: for now use geqo_threshold for testing */
+		else if (enable_goo_join_search && levels_needed >= geqo_threshold)
+			return goo_join_search(root, levels_needed, initial_rels);
 		else if (enable_geqo && levels_needed >= geqo_threshold)
 			return geqo(root, levels_needed, initial_rels);
 		else
diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
new file mode 100644
index 00000000000..247dbb5f921
--- /dev/null
+++ b/src/backend/optimizer/path/goo.c
@@ -0,0 +1,612 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.c
+ *     Greedy operator ordering (GOO) join search for large join problems
+ *
+ * GOO is a deterministic greedy operator ordering algorithm that constructs
+ * join relations iteratively, always committing to the cheapest legal join at
+ * each step. The algorithm maintains a list of "clumps" (join components),
+ * initially one per base relation. At each iteration, it evaluates all legal
+ * pairs of clumps, selects the pair that produces the cheapest join according
+ * to the planner's cost model, and replaces those two clumps with the
+ * resulting joinrel. This continues until only one clump remains.
+ *
+ * ALGORITHM COMPLEXITY:
+ *
+ * Time Complexity: O(n^3) where n is the number of base relations.
+ * - The algorithm performs (n - 1) iterations, merging two clumps each time.
+ * - At iteration i, there are (n - i + 1) remaining clumps, requiring
+ *   O((n-i)^2) pair evaluations to find the cheapest join.
+ * - Total: Sum of (n-i)^2 for i=1 to n-1 ≈ O(n^3)
+ *
+ * REFERENCES:
+ *
+ * This implementation is based on the algorithm described in:
+ *
+ * Leonidas Fegaras, "A New Heuristic for Optimizing Large Queries",
+ * Proceedings of the 9th International Conference on Database and Expert
+ * Systems Applications (DEXA '98), August 1998, Pages 726-735.
+ * https://dl.acm.org/doi/10.5555/648311.754892
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/backend/optimizer/path/goo.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "miscadmin.h"
+#include "nodes/bitmapset.h"
+#include "nodes/pathnodes.h"
+#include "optimizer/geqo.h"
+#include "optimizer/goo.h"
+#include "optimizer/joininfo.h"
+#include "optimizer/pathnode.h"
+#include "optimizer/paths.h"
+#include "utils/hsearch.h"
+#include "utils/memutils.h"
+
+/*
+ * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
+ */
+bool		enable_goo_join_search = false;
+
+/*
+ * Working state for a single GOO search invocation.
+ *
+ * This structure holds all the state needed during a greedy join order search.
+ * It manages three memory contexts with different lifetimes to avoid memory
+ * bloat during large join searches.
+ *
+ * TODO: Consider using the extension_state mechanism in PlannerInfo (similar
+ * to GEQO's approach) instead of passing GooState separately.
+ */
+typedef struct GooState
+{
+	PlannerInfo *root;			/* global planner state */
+	MemoryContext goo_cxt;		/* long-lived (per-search) allocations */
+	MemoryContext cand_cxt;		/* per-iteration candidate storage */
+	MemoryContext scratch_cxt;	/* per-candidate speculative evaluation */
+	List	   *clumps;			/* remaining join components (RelOptInfo *) */
+
+	/*
+	 * "clumps" are similar to GEQO's concept (see geqo_eval.c): join
+	 * components that haven't been merged yet. Initially one per base
+	 * relation, gradually merged until one remains.
+	 */
+	bool		clause_pair_present;	/* any clause-connected pair exists? */
+}			GooState;
+
+/*
+ * Candidate join between two clumps.
+ *
+ * This structure holds the greedy metrics from a speculative joinrel
+ * evaluation. We create this lightweight structure in cand_cxt after discarding
+ * the actual joinrel from scratch_cxt, allowing us to compare many candidates
+ * without exhausting memory.
+ */
+typedef struct GooCandidate
+{
+	RelOptInfo *left;			/* left input clump */
+	RelOptInfo *right;			/* right input clump */
+	Cost		total_cost;		/* total cost of cheapest path */
+}			GooCandidate;
+
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels);
+static void goo_destroy_state(GooState * state);
+static RelOptInfo *goo_search_internal(GooState * state);
+static void goo_reset_probe_state(GooState * state, int saved_rel_len,
+								  struct HTAB *saved_hash);
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right);
+static RelOptInfo *goo_commit_join(GooState * state, GooCandidate * cand);
+static bool goo_candidate_better(GooCandidate * a, GooCandidate * b);
+static bool goo_candidate_prunable(GooState * state, RelOptInfo *left,
+								   RelOptInfo *right);
+
+/*
+ * goo_join_search
+ *		Entry point for Greedy Operator Ordering join search algorithm.
+ *
+ * This function is called from make_rel_from_joinlist() when
+ * enable_goo_join_search is true and the number of relations meets or
+ * exceeds geqo_threshold.
+ *
+ * Returns the final RelOptInfo representing the join of all base relations,
+ * or errors out if no valid join order can be found.
+ */
+RelOptInfo *
+goo_join_search(PlannerInfo *root, int levels_needed,
+				List *initial_rels)
+{
+	GooState   *state;
+	RelOptInfo *result;
+	int			base_rel_count;
+	struct HTAB *base_hash;
+
+	/* Initialize search state and memory contexts */
+	state = goo_init_state(root, initial_rels);
+
+	/*
+	 * Save initial state of join_rel_list and join_rel_hash so we can restore
+	 * them if the search fails.
+	 */
+	base_rel_count = list_length(root->join_rel_list);
+	base_hash = root->join_rel_hash;
+
+	/* Run the main greedy search loop */
+	result = goo_search_internal(state);
+
+	if (result == NULL)
+	{
+		/* Restore planner state before reporting error */
+		root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+		root->join_rel_hash = base_hash;
+		elog(ERROR, "GOO join search failed to find a valid join order");
+	}
+
+	goo_destroy_state(state);
+	return result;
+}
+
+/*
+ * goo_init_state
+ *		Initialize per-search state and memory contexts.
+ *
+ * Creates the GooState structure and three memory contexts with different
+ * lifetimes:
+ *
+ * - goo_cxt: Lives for the entire search, holds the clumps list and state.
+ * - cand_cxt: Reset after each iteration, holds candidate structures during
+ *   the comparison phase.
+ * - scratch_cxt: Reset after each candidate evaluation, holds speculative
+ *   joinrels that are discarded before committing to a choice.
+ *
+ * The three-context design prevents memory bloat during large join searches
+ * where we may evaluate hundreds or thousands of candidate joins.
+ */
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels)
+{
+	MemoryContext oldcxt;
+	GooState   *state;
+
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	state = palloc(sizeof(GooState));
+	state->root = root;
+	state->clumps = NIL;
+	state->clause_pair_present = false;
+
+	/* Create the three-level memory context hierarchy */
+	state->goo_cxt = AllocSetContextCreate(root->planner_cxt, "GOOStateContext",
+										   ALLOCSET_DEFAULT_SIZES);
+	state->cand_cxt = AllocSetContextCreate(state->goo_cxt, "GOOCandidateContext",
+											ALLOCSET_SMALL_SIZES);
+	state->scratch_cxt = AllocSetContextCreate(
+											   state->goo_cxt, "GOOScratchContext", ALLOCSET_SMALL_SIZES);
+
+	/*
+	 * Copy the initial_rels list into goo_cxt. This becomes our working
+	 * clumps list that we'll modify throughout the search.
+	 */
+	MemoryContextSwitchTo(state->goo_cxt);
+	state->clumps = list_copy(initial_rels);
+
+	MemoryContextSwitchTo(oldcxt);
+
+	return state;
+}
+
+/*
+ * goo_destroy_state
+ *		Free all memory allocated for the GOO search.
+ *
+ * Deletes the goo_cxt memory context (which recursively deletes cand_cxt
+ * and scratch_cxt as children) and then frees the state structure itself.
+ * This is called after the search completes successfully or fails.
+ */
+static void
+goo_destroy_state(GooState * state)
+{
+	MemoryContextDelete(state->goo_cxt);
+	pfree(state);
+}
+
+/*
+ * goo_search_internal
+ *		Main greedy search loop.
+ *
+ * Implements a two-pass algorithm at each iteration:
+ *
+ * Pass 1: Scan all clump pairs to detect whether any clause-connected pairs
+ *         exist. This sets the clause_pair_present flag.
+ *
+ * Pass 2: Evaluate all viable candidate pairs, keeping track of the best one
+ *         according to our comparison criteria. If clause_pair_present is true,
+ *         we skip Cartesian products entirely to avoid expensive cross joins.
+ *
+ * After selecting the best candidate, we permanently create its joinrel in
+ * planner_cxt and replace the two input clumps with this new joinrel. This
+ * continues until only one clump remains.
+ *
+ * The function runs primarily in goo_cxt, temporarily switching to planner_cxt
+ * when creating permanent joinrels and to scratch_cxt when evaluating
+ * speculative candidates.
+ *
+ * Returns the final joinrel spanning all base relations, or NULL on failure.
+ */
+static RelOptInfo *
+goo_search_internal(GooState * state)
+{
+	PlannerInfo *root = state->root;
+	RelOptInfo *final_rel = NULL;
+	MemoryContext oldcxt;
+
+	/*
+	 * Switch to goo_cxt for the entire search process. This ensures that all
+	 * operations on state->clumps and related structures happen in the
+	 * correct memory context.
+	 */
+	oldcxt = MemoryContextSwitchTo(state->goo_cxt);
+
+	while (list_length(state->clumps) > 1)
+	{
+		ListCell   *lc1;
+		int			i;
+		GooCandidate *best_candidate = NULL;
+
+		/* Allow query cancellation during long join searches */
+		CHECK_FOR_INTERRUPTS();
+
+		/* Reset candidate context for this iteration */
+		MemoryContextReset(state->cand_cxt);
+		state->clause_pair_present = false;
+
+		/*
+		 * Pass 1: Scan all pairs to detect clause-connected joins.
+		 *
+		 * We need to know whether ANY clause-connected pairs exist before we
+		 * can decide whether to skip Cartesian products. This quick scan
+		 * allows us to prefer well-connected joins without completely
+		 * forbidding Cartesian products (which may be necessary for
+		 * disconnected query graphs).
+		 */
+		for (i = 0, lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1), i++)
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+
+				/* Check if this pair has a join clause or order restriction */
+				if (have_relevant_joinclause(root, left, right) ||
+					have_join_order_restriction(root, left, right))
+				{
+					/* Found at least one clause-connected pair */
+					state->clause_pair_present = true;
+					break;
+				}
+			}
+
+			if (state->clause_pair_present)
+				break;
+		}
+
+		/*
+		 * Pass 2: Evaluate all viable candidate pairs and select the best.
+		 *
+		 * For each pair that passes the pruning check, we do a full
+		 * speculative evaluation using make_join_rel() to get accurate costs.
+		 * The candidate with the best cost (according to
+		 * goo_candidate_better) is remembered and will be committed after
+		 * this pass.
+		 *
+		 * TODO: It might be worth caching cost estimates if the same join
+		 * pair appears in multiple iterations.
+		 */
+		for (lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1))
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+				GooCandidate *cand;
+
+				cand = goo_build_candidate(state, left, right);
+				if (cand == NULL)
+					continue;
+
+				/* Track the best candidate seen so far */
+				if (best_candidate == NULL ||
+					goo_candidate_better(cand, best_candidate))
+					best_candidate = cand;
+			}
+		}
+
+		/* We must have at least one valid join candidate */
+		if (best_candidate == NULL)
+			elog(ERROR, "GOO join search failed to find any valid join candidates");
+
+		/*
+		 * Commit the best candidate: create the joinrel permanently and
+		 * update the clumps list.
+		 */
+		final_rel = goo_commit_join(state, best_candidate);
+
+		if (final_rel == NULL)
+			elog(ERROR, "GOO join search failed to commit join");
+	}
+
+	/* Switch back to the original context before returning */
+	MemoryContextSwitchTo(oldcxt);
+
+	return final_rel;
+}
+
+/*
+ * goo_candidate_prunable
+ *		Determine whether a candidate pair should be skipped.
+ *
+ * We use a two-level pruning strategy:
+ *
+ * 1. Pairs with join clauses or join-order restrictions are never prunable.
+ *    These represent natural joins or required join orders (e.g., from outer
+ *    joins or LATERAL references).
+ *
+ * 2. If clause_pair_present is true (meaning at least one clause-connected
+ *    pair exists in this iteration), we prune Cartesian products to avoid
+ *    evaluating expensive cross joins when better options are available.
+ *
+ * However, if NO clause-connected pairs exist in an iteration, we allow
+ * Cartesian products to be considered. This ensures we can always make
+ * progress even with disconnected query graphs.
+ *
+ * Returns true if the pair should be pruned (skipped), false otherwise.
+ */
+static bool
+goo_candidate_prunable(GooState * state, RelOptInfo *left,
+					   RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	bool		has_clause = have_relevant_joinclause(root, left, right);
+	bool		has_restriction = have_join_order_restriction(root, left, right);
+
+	if (has_clause || has_restriction)
+		return false;			/* never prune clause-connected joins */
+
+	return state->clause_pair_present;
+}
+
+/*
+ * goo_build_candidate
+ *		Evaluate a potential join between two clumps and return a candidate.
+ *
+ * This function performs a speculative join evaluation to extract greedy metrics
+ * without permanently creating the joinrel. The process is:
+ *
+ * 1. Check basic viability (pruning, overlapping relids).
+ * 2. Switch to scratch_cxt and create the joinrel using make_join_rel().
+ * 3. Generate paths (including partitionwise and parallel variants).
+ * 4. Extract the greedy metrics from the cheapest path.
+ * 5. Discard the joinrel by calling goo_reset_probe_state().
+ * 6. Create a lightweight GooCandidate in cand_cxt with the extracted metrics.
+ *
+ * This evaluate-and-discard pattern prevents memory bloat when evaluating
+ * many candidates. The winning candidate will be rebuilt permanently later
+ * by goo_commit_join().
+ *
+ * Returns a GooCandidate structure, or NULL if the join is illegal or
+ * overlapping. Assumes the caller is in goo_cxt.
+ */
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	MemoryContext oldcxt;
+	int			saved_rel_len;
+	struct HTAB *saved_hash;
+	RelOptInfo *joinrel;
+	Cost		total_cost;
+	GooCandidate *cand;
+
+	/* Skip if this pair should be pruned */
+	if (goo_candidate_prunable(state, left, right))
+		return NULL;
+
+	/* Sanity check: ensure the clumps don't overlap */
+	if (bms_overlap(left->relids, right->relids))
+		return NULL;
+
+	/*
+	 * Save state before speculative join evaluation. We'll create the joinrel
+	 * in scratch_cxt and then discard it.
+	 */
+	saved_rel_len = list_length(root->join_rel_list);
+	saved_hash = root->join_rel_hash;
+
+	/* Switch to scratch_cxt for speculative joinrel creation */
+	oldcxt = MemoryContextSwitchTo(state->scratch_cxt);
+
+	/*
+	 * Temporarily disable join_rel_hash so make_join_rel() doesn't find or
+	 * cache this speculative joinrel.
+	 */
+	root->join_rel_hash = NULL;
+
+	/*
+	 * Create the joinrel and generate all its paths.
+	 *
+	 * TODO: This is the most expensive part of GOO. Each candidate evaluation
+	 * performs full path generation via make_join_rel().
+	 */
+	joinrel = make_join_rel(root, left, right);
+
+	if (joinrel == NULL)
+	{
+		/* Invalid or illegal join, clean up and return NULL */
+		MemoryContextSwitchTo(oldcxt);
+		goo_reset_probe_state(state, saved_rel_len, saved_hash);
+		return NULL;
+	}
+
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	total_cost = joinrel->cheapest_total_path->total_cost;
+
+	/*
+	 * Switch back to goo_cxt and discard the speculative joinrel.
+	 * goo_reset_probe_state() will clean up join_rel_list, join_rel_hash, and
+	 * reset scratch_cxt to free all the joinrel's memory.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+	goo_reset_probe_state(state, saved_rel_len, saved_hash);
+
+	/*
+	 * Now create the candidate structure in cand_cxt. This will survive until
+	 * the end of this iteration (when cand_cxt is reset).
+	 */
+	oldcxt = MemoryContextSwitchTo(state->cand_cxt);
+	cand = palloc(sizeof(GooCandidate));
+	cand->left = left;
+	cand->right = right;
+	cand->total_cost = total_cost;
+	MemoryContextSwitchTo(oldcxt);
+
+	return cand;
+}
+
+/*
+ * goo_reset_probe_state
+ *		Clean up after a speculative joinrel evaluation.
+ *
+ * Reverts the planner's join_rel_list and join_rel_hash to their saved state,
+ * removing any joinrels that were created during speculative evaluation.
+ * Also resets scratch_cxt to free all memory used by the discarded joinrel
+ * and its paths.
+ *
+ * This function is called after extracting cost metrics from a speculative
+ * joinrel that we don't want to keep.
+ */
+static void
+goo_reset_probe_state(GooState * state, int saved_rel_len,
+					  struct HTAB *saved_hash)
+{
+	PlannerInfo *root = state->root;
+
+	/* Remove speculative joinrels from the planner's lists */
+	root->join_rel_list = list_truncate(root->join_rel_list, saved_rel_len);
+	root->join_rel_hash = saved_hash;
+
+	/* Free all memory used during speculative evaluation */
+	MemoryContextReset(state->scratch_cxt);
+}
+
+/*
+ * goo_commit_join
+ *		Permanently create the chosen join and update the clumps list.
+ *
+ * After selecting the best candidate in an iteration, we need to permanently
+ * create its joinrel (with all paths) and integrate it into the planner state.
+ * This function:
+ *
+ * 1. Switches to planner_cxt and creates the joinrel using make_join_rel().
+ *    Unlike the speculative evaluation, this joinrel is kept permanently.
+ * 2. Generates partitionwise and parallel path variants.
+ * 3. Determines the cheapest paths.
+ * 4. Updates state->clumps by removing the two input clumps and adding the
+ *    new joinrel as a single clump.
+ *
+ * The next iteration will treat this joinrel as an atomic unit that can be
+ * joined with other remaining clumps.
+ *
+ * Returns the newly created joinrel. Assumes the caller is in goo_cxt.
+ */
+static RelOptInfo *
+goo_commit_join(GooState * state, GooCandidate * cand)
+{
+	MemoryContext oldcxt;
+	PlannerInfo *root = state->root;
+	RelOptInfo *joinrel;
+
+	/*
+	 * Create the joinrel permanently in planner_cxt. Unlike the speculative
+	 * evaluation in goo_build_candidate(), this joinrel will be kept and
+	 * added to root->join_rel_list for use by the rest of the planner.
+	 */
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	joinrel = make_join_rel(root, cand->left, cand->right);
+	if (joinrel == NULL)
+	{
+		MemoryContextSwitchTo(oldcxt);
+		elog(ERROR, "GOO join search failed to create join relation");
+	}
+
+	/* Generate additional path variants, just like standard_join_search() */
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	/*
+	 * Switch back to goo_cxt and update the clumps list. Remove the two input
+	 * clumps and add the new joinrel as a single clump.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+
+	state->clumps = list_delete_ptr(state->clumps, cand->left);
+	state->clumps = list_delete_ptr(state->clumps, cand->right);
+	state->clumps = lappend(state->clumps, joinrel);
+
+	return joinrel;
+}
+
+/*
+ * goo_candidate_better
+ *		Compare two join candidates and determine which is better.
+ *
+ * Returns true if candidate 'a' should be preferred over candidate 'b'.
+ */
+static bool
+goo_candidate_better(GooCandidate * a, GooCandidate * b)
+{
+	return (a->total_cost < b->total_cost);
+}
diff --git a/src/backend/optimizer/path/meson.build b/src/backend/optimizer/path/meson.build
index 12f36d85cb6..e5046365a37 100644
--- a/src/backend/optimizer/path/meson.build
+++ b/src/backend/optimizer/path/meson.build
@@ -5,6 +5,7 @@ backend_sources += files(
   'clausesel.c',
   'costsize.c',
   'equivclass.c',
+  'goo.c',
   'indxpath.c',
   'joinpath.c',
   'joinrels.c',
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index 3b9d8349078..a8ce31ab8a7 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -840,6 +840,15 @@
   boot_val => 'true',
 },
 
+/* WIP: for now keep this in QUERY_TUNING_GEQO group for testing convenience */
+{ name => 'enable_goo_join_search', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Enables the planner\'s use of GOO join search for large join problems.',
+  long_desc => 'Greedy Operator Ordering (GOO) is a deterministic join search algorithm for queries with many relations.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'enable_goo_join_search',
+  boot_val => 'false',
+},
+
 { name => 'enable_group_by_reordering', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_METHOD',
   short_desc => 'Enables reordering of GROUP BY keys.',
   flags => 'GUC_EXPLAIN',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index dc9e2255f8a..8284e8b1da7 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -456,6 +456,7 @@
 # - Genetic Query Optimizer -
 
 #geqo = on
+#enable_goo_join_search = off
 #geqo_threshold = 12
 #geqo_effort = 5                        # range 1-10
 #geqo_pool_size = 0                     # selects default based on effort
diff --git a/src/include/optimizer/goo.h b/src/include/optimizer/goo.h
new file mode 100644
index 00000000000..0080dfa2ac8
--- /dev/null
+++ b/src/include/optimizer/goo.h
@@ -0,0 +1,23 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.h
+ *     prototype for the greedy operator ordering join search
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/include/optimizer/goo.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef GOO_H
+#define GOO_H
+
+#include "nodes/pathnodes.h"
+#include "nodes/pg_list.h"
+
+extern RelOptInfo *goo_join_search(PlannerInfo *root, int levels_needed,
+								   List *initial_rels);
+
+#endif							/* GOO_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index f6a62df0b43..5b3ebe5f1d2 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -21,6 +21,7 @@
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
+extern PGDLLIMPORT bool enable_goo_join_search;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
diff --git a/src/test/regress/expected/goo.out b/src/test/regress/expected/goo.out
new file mode 100644
index 00000000000..0b41634c968
--- /dev/null
+++ b/src/test/regress/expected/goo.out
@@ -0,0 +1,700 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+ANALYZE;
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+                              QUERY PLAN                              
+----------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: ("*VALUES*".column1 = "*VALUES*_2".column1)
+         ->  Hash Join
+               Hash Cond: ("*VALUES*".column1 = "*VALUES*_1".column1)
+               ->  Values Scan on "*VALUES*"
+               ->  Hash
+                     ->  Values Scan on "*VALUES*_1"
+         ->  Hash
+               ->  Values Scan on "*VALUES*_2"
+(10 rows)
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+             QUERY PLAN              
+-------------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t5
+               Filter: (f = 3)
+         ->  Nested Loop
+               ->  Seq Scan on t1
+                     Filter: (a = 1)
+               ->  Seq Scan on t2
+                     Filter: (c = 2)
+(9 rows)
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+                                QUERY PLAN                                 
+---------------------------------------------------------------------------
+ Aggregate
+   ->  Nested Loop
+         Join Filter: (fact.dim4_id = dim4.id)
+         ->  Hash Join
+               Hash Cond: (dim3.id = fact.dim3_id)
+               ->  Seq Scan on dim3
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (dim2.id = fact.dim2_id)
+                           ->  Seq Scan on dim2
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (fact.dim1_id = dim1.id)
+                                       ->  Seq Scan on fact
+                                       ->  Hash
+                                             ->  Seq Scan on dim1
+                                                   Filter: (id < 5)
+         ->  Seq Scan on dim4
+(18 rows)
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+                           QUERY PLAN                           
+----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t7.h = t9.h)
+         ->  Hash Join
+               Hash Cond: (t8.i = t10.i)
+               ->  Hash Join
+                     Hash Cond: (t2.c = t4.c)
+                     ->  Hash Join
+                           Hash Cond: (t3.b = t1.b)
+                           ->  Hash Join
+                                 Hash Cond: (t5.f = t7.f)
+                                 ->  Hash Join
+                                       Hash Cond: (t3.d = t5.d)
+                                       ->  Seq Scan on t3
+                                       ->  Hash
+                                             ->  Seq Scan on t5
+                                 ->  Hash
+                                       ->  Seq Scan on t7
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (t1.a = t2.a)
+                                       ->  Seq Scan on t1
+                                       ->  Hash
+                                             ->  Seq Scan on t2
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t6.g = t8.g)
+                                 ->  Hash Join
+                                       Hash Cond: (t4.e = t6.e)
+                                       ->  Seq Scan on t4
+                                       ->  Hash
+                                             ->  Seq Scan on t6
+                                 ->  Hash
+                                       ->  Seq Scan on t8
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (t12.m = t14.m)
+                           ->  Hash Join
+                                 Hash Cond: (t10.k = t12.k)
+                                 ->  Seq Scan on t10
+                                 ->  Hash
+                                       ->  Seq Scan on t12
+                           ->  Hash
+                                 ->  Seq Scan on t14
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t11.l = t13.l)
+                     ->  Hash Join
+                           Hash Cond: (t9.j = t11.j)
+                           ->  Seq Scan on t9
+                           ->  Hash
+                                 ->  Seq Scan on t11
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t13.n = t15.n)
+                                 ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t15
+(58 rows)
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t1.a = t3.b)
+         ->  Hash Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t3.b = t4.c)
+                     ->  Seq Scan on t3
+                     ->  Hash
+                           ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+-- Results should match
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+                                                            QUERY PLAN                                                            
+----------------------------------------------------------------------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t16.q = t18.q)
+         ->  Hash Join
+               Hash Cond: (t15.p = t17.p)
+               ->  Hash Join
+                     Hash Cond: (t14.o = t16.o)
+                     ->  Hash Join
+                           Hash Cond: (t13.n = t15.n)
+                           ->  Hash Join
+                                 Hash Cond: (t12.m = t14.m)
+                                 ->  Hash Join
+                                       Hash Cond: (t11.l = t13.l)
+                                       ->  Hash Join
+                                             Hash Cond: (t10.k = t12.k)
+                                             ->  Hash Join
+                                                   Hash Cond: (t9.j = t11.j)
+                                                   ->  Hash Join
+                                                         Hash Cond: (t8.i = t10.i)
+                                                         ->  Hash Join
+                                                               Hash Cond: (t7.h = t9.h)
+                                                               ->  Hash Join
+                                                                     Hash Cond: (t6.g = t8.g)
+                                                                     ->  Hash Join
+                                                                           Hash Cond: (t5.f = t7.f)
+                                                                           ->  Hash Join
+                                                                                 Hash Cond: (t4.e = t6.e)
+                                                                                 ->  Hash Join
+                                                                                       Hash Cond: (t3.d = t5.d)
+                                                                                       ->  Hash Join
+                                                                                             Hash Cond: (t2.c = t4.c)
+                                                                                             ->  Hash Join
+                                                                                                   Hash Cond: (t1.b = t3.b)
+                                                                                                   ->  Hash Join
+                                                                                                         Hash Cond: (t1.a = t2.a)
+                                                                                                         ->  Seq Scan on t1
+                                                                                                         ->  Hash
+                                                                                                               ->  Seq Scan on t2
+                                                                                                   ->  Hash
+                                                                                                         ->  Seq Scan on t3
+                                                                                             ->  Hash
+                                                                                                   ->  Seq Scan on t4
+                                                                                       ->  Hash
+                                                                                             ->  Seq Scan on t5
+                                                                                 ->  Hash
+                                                                                       ->  Seq Scan on t6
+                                                                           ->  Hash
+                                                                                 ->  Seq Scan on t7
+                                                                     ->  Hash
+                                                                           ->  Seq Scan on t8
+                                                               ->  Hash
+                                                                     ->  Seq Scan on t9
+                                                         ->  Hash
+                                                               ->  Seq Scan on t10
+                                                   ->  Hash
+                                                         ->  Seq Scan on t11
+                                             ->  Hash
+                                                   ->  Seq Scan on t12
+                                       ->  Hash
+                                             ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t14
+                           ->  Hash
+                                 ->  Seq Scan on t15
+                     ->  Hash
+                           ->  Seq Scan on t16
+               ->  Hash
+                     ->  Seq Scan on t17
+         ->  Hash
+               ->  Seq Scan on t18
+(70 rows)
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+                      QUERY PLAN                       
+-------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t2.a = t1.a)
+         ->  Seq Scan on t2
+         ->  Hash
+               ->  Nested Loop
+                     ->  Hash Join
+                           Hash Cond: (t6.e = t5.f)
+                           ->  Seq Scan on t6
+                           ->  Hash
+                                 ->  Seq Scan on t5
+                                       Filter: (d < 3)
+                     ->  Seq Scan on t1
+                           Filter: (a < 5)
+(14 rows)
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Left Join
+         Hash Cond: (t3.d = t4.c)
+         ->  Hash Left Join
+               Hash Cond: (t2.a = t3.b)
+               ->  Hash Left Join
+                     Hash Cond: (t1.a = t2.a)
+                     ->  Seq Scan on t1
+                     ->  Hash
+                           ->  Seq Scan on t2
+               ->  Hash
+                     ->  Seq Scan on t3
+         ->  Hash
+               ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+            QUERY PLAN            
+----------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t1
+         ->  Materialize
+               ->  Seq Scan on t2
+(5 rows)
+
+SELECT count(*)
+FROM t1, t2;
+ count 
+-------
+   100
+(1 row)
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+               QUERY PLAN               
+----------------------------------------
+ Aggregate
+   ->  Hash Full Join
+         Hash Cond: (t2.a = t3.b)
+         ->  Hash Full Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Seq Scan on t3
+(10 rows)
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+                QUERY PLAN                
+------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (b.b = c.c)
+         ->  Hash Join
+               Hash Cond: (a.a = b.a)
+               ->  Seq Scan on t1 a
+               ->  Hash
+                     ->  Seq Scan on t1 b
+         ->  Hash
+               ->  Seq Scan on t2 c
+(10 rows)
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+                           QUERY PLAN                            
+-----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (chain1a.val = chain2a.id)
+         ->  Hash Join
+               Hash Cond: (chain1b.val = chain1c.id)
+               ->  Hash Join
+                     Hash Cond: (chain1a.id = chain1b.id)
+                     ->  Seq Scan on chain1a
+                     ->  Hash
+                           ->  Seq Scan on chain1b
+               ->  Hash
+                     ->  Seq Scan on chain1c
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (chain2b.val = chain2c.id)
+                     ->  Hash Join
+                           Hash Cond: (chain2a.val = chain2b.id)
+                           ->  Seq Scan on chain2a
+                           ->  Hash
+                                 ->  Seq Scan on chain2b
+                     ->  Hash
+                           ->  Seq Scan on chain2c
+(22 rows)
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+                        QUERY PLAN                        
+----------------------------------------------------------
+ HashAggregate
+   Output: c.id, count(*)
+   Group Key: c.id
+   ->  Hash Join
+         Output: c.id
+         Hash Cond: (c.id = a2.center_id)
+         ->  Hash Join
+               Output: c.id, a1.center_id
+               Inner Unique: true
+               Hash Cond: (a1.center_id = c.id)
+               ->  Seq Scan on pg_temp.arm1_tbl a1
+                     Output: a1.center_id, a1.payload
+               ->  Hash
+                     Output: c.id
+                     ->  Seq Scan on pg_temp.center_tbl c
+                           Output: c.id
+         ->  Hash
+               Output: a2.center_id
+               ->  Seq Scan on pg_temp.arm2_tbl a2
+                     Output: a2.center_id
+(20 rows)
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+ id | count 
+----+-------
+  8 | 10000
+ 10 | 10000
+  9 | 10000
+  7 | 10000
+  1 | 10000
+  5 | 10000
+  4 | 10000
+  2 | 10000
+  6 | 10000
+  3 | 10000
+(10 rows)
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+RESET geqo_threshold;
+RESET enable_goo_join_search;
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index 3b37fafa65b..cb0c84cebff 100644
--- a/src/test/regress/expected/sysviews.out
+++ b/src/test/regress/expected/sysviews.out
@@ -153,6 +153,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_distinct_reordering     | on
  enable_eager_aggregate         | on
  enable_gathermerge             | on
+ enable_goo_join_search         | off
  enable_group_by_reordering     | on
  enable_hashagg                 | on
  enable_hashjoin                | on
@@ -173,7 +174,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(25 rows)
+(26 rows)
 
 -- There are always wait event descriptions for various types.  InjectionPoint
 -- may be present or absent, depending on history since last postmaster start.
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index cc6d799bcea..14e3a475906 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -68,6 +68,12 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi
 # ----------
 test: brin gin gist spgist privileges init_privs security_label collate matview lock replica_identity rowsecurity object_address tablesample groupingsets drop_operator password identity generated_stored join_hash
 
+# ----------
+# Additional JOIN ORDER tests
+# WIP: need to find an appropriate group for this test
+# ----------
+test: goo
+
 # ----------
 # Additional BRIN tests
 # ----------
@@ -98,9 +104,6 @@ test: maintain_every
 # no relation related tests can be put in this group
 test: publication subscription
 
-# ----------
-# Another group of parallel tests
-# select_views depends on create_view
 # ----------
 test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock indirect_toast equivclass stats_rewrite
 
diff --git a/src/test/regress/sql/goo.sql b/src/test/regress/sql/goo.sql
new file mode 100644
index 00000000000..ab048d8e34e
--- /dev/null
+++ b/src/test/regress/sql/goo.sql
@@ -0,0 +1,364 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE goo_plan;
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE standard_plan;
+
+-- Results should match
+EXECUTE goo_plan;
+EXECUTE standard_plan;
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+
+SELECT count(*)
+FROM t1, t2;
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+
+RESET geqo_threshold;
+RESET enable_goo_join_search;
-- 
2.39.3 (Apple Git-146)

v3-0002-add-a-GUC-goo_greedy_strategy-to-choose-different.patchapplication/octet-stream; name=v3-0002-add-a-GUC-goo_greedy_strategy-to-choose-different.patchDownload
From 5777b1bd17e06fdbc5e8cf55bee6ae38ad623d76 Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Tue, 16 Dec 2025 20:15:44 +0800
Subject: [PATCH v3 2/2] add a GUC goo_greedy_strategy to choose different GOO 
 greedy strategic to test

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/goo.c          | 36 ++++++++++++++++++++++-
 src/backend/utils/misc/guc_parameters.dat | 10 +++++++
 src/backend/utils/misc/guc_tables.c       |  8 +++++
 src/include/optimizer/paths.h             |  8 +++++
 4 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
index 247dbb5f921..64ea7667315 100644
--- a/src/backend/optimizer/path/goo.c
+++ b/src/backend/optimizer/path/goo.c
@@ -55,6 +55,7 @@
  * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
  */
 bool		enable_goo_join_search = false;
+int			goo_greedy_strategy = GOO_GREEDY_STRATEGY_COST;
 
 /*
  * Working state for a single GOO search invocation.
@@ -94,6 +95,9 @@ typedef struct GooCandidate
 {
 	RelOptInfo *left;			/* left input clump */
 	RelOptInfo *right;			/* right input clump */
+	double		rows;			/* estimated join cardinality */
+	double		selectivity;	/* join selectivity */
+	double		result_size;	/* estimated result size in bytes */
 	Cost		total_cost;		/* total cost of cheapest path */
 }			GooCandidate;
 
@@ -417,6 +421,11 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 	int			saved_rel_len;
 	struct HTAB *saved_hash;
 	RelOptInfo *joinrel;
+	double		join_rows;
+	double		left_rows;
+	double		right_rows;
+	double		selectivity = 0.0;
+	double		result_size;
 	Cost		total_cost;
 	GooCandidate *cand;
 
@@ -477,6 +486,14 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 		set_cheapest(grouped_rel);
 	}
 
+	join_rows = joinrel->rows;
+	left_rows = left->rows;
+	right_rows = right->rows;
+
+	if (left_rows > 0 && right_rows > 0)
+		selectivity = join_rows / (left_rows * right_rows);
+
+	result_size = join_rows * joinrel->reltarget->width;
 	total_cost = joinrel->cheapest_total_path->total_cost;
 
 	/*
@@ -495,6 +512,9 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 	cand = palloc(sizeof(GooCandidate));
 	cand->left = left;
 	cand->right = right;
+	cand->rows = join_rows;
+	cand->selectivity = selectivity;
+	cand->result_size = result_size;
 	cand->total_cost = total_cost;
 	MemoryContextSwitchTo(oldcxt);
 
@@ -608,5 +628,19 @@ goo_commit_join(GooState * state, GooCandidate * cand)
 static bool
 goo_candidate_better(GooCandidate * a, GooCandidate * b)
 {
-	return (a->total_cost < b->total_cost);
+	switch (goo_greedy_strategy)
+	{
+		case GOO_GREEDY_STRATEGY_ROWS:
+			return a->rows < b->rows;
+
+		case GOO_GREEDY_STRATEGY_SELECTIVITY:
+			return a->selectivity < b->selectivity;
+
+		case GOO_GREEDY_STRATEGY_RESULT_SIZE:
+			return a->result_size < b->result_size;
+
+		case GOO_GREEDY_STRATEGY_COST:
+		default:
+			return a->total_cost < b->total_cost;
+	}
 }
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index a8ce31ab8a7..26d72283e7d 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -1154,6 +1154,16 @@
   max => 'MAX_KILOBYTES',
 },
 
+/* WIP: only for testing */
+{ name => 'goo_greedy_strategy', type => 'enum', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Selects the heuristic used by GOO to compare join candidates.',
+  long_desc => 'Valid values are cost, rows, selectivity, and result_size.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'goo_greedy_strategy',
+  boot_val => 'GOO_GREEDY_STRATEGY_COST',
+  options => 'goo_greedy_strategy_options',
+},
+
 { name => 'gss_accept_delegation', type => 'bool', context => 'PGC_SIGHUP', group => 'CONN_AUTH_AUTH',
   short_desc => 'Sets whether GSSAPI delegation should be accepted from the client.',
   variable => 'pg_gss_accept_delegation',
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index f87b558c2c6..f8812d65294 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -411,6 +411,14 @@ static const struct config_enum_entry plan_cache_mode_options[] = {
 	{NULL, 0, false}
 };
 
+static const struct config_enum_entry goo_greedy_strategy_options[] = {
+	{"cost", GOO_GREEDY_STRATEGY_COST, false},
+	{"rows", GOO_GREEDY_STRATEGY_ROWS, false},
+	{"selectivity", GOO_GREEDY_STRATEGY_SELECTIVITY, false},
+	{"result_size", GOO_GREEDY_STRATEGY_RESULT_SIZE, false},
+	{NULL, 0, false}
+};
+
 static const struct config_enum_entry password_encryption_options[] = {
 	{"md5", PASSWORD_TYPE_MD5, false},
 	{"scram-sha-256", PASSWORD_TYPE_SCRAM_SHA_256, false},
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index 5b3ebe5f1d2..28846d01d3a 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -16,12 +16,20 @@
 
 #include "nodes/pathnodes.h"
 
+typedef enum GooGreedyStrategy
+{
+	GOO_GREEDY_STRATEGY_COST,
+	GOO_GREEDY_STRATEGY_ROWS,
+	GOO_GREEDY_STRATEGY_SELECTIVITY,
+	GOO_GREEDY_STRATEGY_RESULT_SIZE
+}			GooGreedyStrategy;
 
 /*
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
 extern PGDLLIMPORT bool enable_goo_join_search;
+extern PGDLLIMPORT int goo_greedy_strategy;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
-- 
2.39.3 (Apple Git-146)

tpch.pdfapplication/pdf; name=tpch.pdfDownload
%PDF-1.7
%��������
2 0 obj
<</Length 3 0 R/Filter/FlateDecode>>
stream
x��\ak$���_��N'�[-	�������|��l���8������������x��3�OOz�����.L�<|����������<]�{y�q��w>�)��bNSY�+k�~������������V��y�yq9�i)��4��y/lP���?.n���O�D��`0���L�6}�j��e���O�><�G��������:<����I�����?|����n6��c�U��#�����w��,En��w|7	n�v���������?�!}?�T�/�spk�S��
���\��Vg���M�)�q�5�%y��w%��w�%�es�iy?o?������k���
s�����ct�0��7���w�6��������s������\m	��m�)�B W[�j�����F����\-�:���1���gW���l�~�8�h����s��-�<��<�����jlR�zGb�P;�
u����s`�n�������������8�=��X9�u�#+�T����S�3��c�e�[<y�������%q)S^�Kq�w�=e�����?4�{��Q���#�7om�������^~{�������{&��`�F7���h|j�[|��'�Q:��
�����/."8�l��+�{�W��Y�W�j{��!�mw1�P;v�5x�!��/�iNt�h[����i��f/�+�u�J�r������J!��6��"��/��|U[3W��!���_*�<�5�b�����
�#�Y����:K��������X��
���^�O���5���LLp������Wg��r����:34X�e�&|�h%��.�����a�"
qn�|���l���2d��$�k��W���F@�aa��6b
]���q
�3���O��w�q���������}o�3"�.gc���?o����#�A��u+v��@_��`�-i�
[��2PXwKI.WQx'�����/b5����"������`�i����b�_�h��*
/>{:����u�a��U�X(�V
l��C
�+.�3RS1_
��(����V��p
\��V]w��5+Y;��$�6jg6�
���N^�H2���Wg����s�v�lgXY��&�V�������(,���gVW������6�k�sC��.a��XA���:0�mqn�T�<�z
��lGA�[Z���.��p���pl��a=u�����J	`��� 
l��e����k4x//��\^�P���X^�����Rl���Y�2HXc�$$��X�������t5���4@��~�������N	VU����Kn��f?��4��/o]90��N<�z�XX�p��X���J��
��wU�!�w
(�+������U h��,�)��A*R�d���:����J�����D@�l�{�>���bm� ��5��@���d?`�=�����b%�s��v��-�������.x���Z��;v:P1�-|�������y������"�t����rW,2v:����g/��EZ�:��XJ�tpg�RD�����Bch���E�
Ek�K��*�2`1^q�7�+�GW�p_�qF�c���	x���^b�p�
hz�6�+%�����e��K�J!��V�
.�NtgoZE+�2R�%�����/Z)�T)�k��*���Bo�L�&�z�"�X+������[�q����H��B��uh
���[�"�[2�{��'��{s r]�qL5�h����d������J��M��T�v������s0.�3=x�$R��U�R��Tx�T�t��[�z\�6���� ���)�����X��Gt�*�����-���C��$�u>
��%nc1:a�+Qd��X^X*����y���
^J�Yw	�K
�����RD<A���=QB�u�N6�K!Q�Jw����xPB�.��*V�9`�7t�]�::)p����:�l�8������tZP����+�;:-�s���1h�#��u����8���B���D����d�b�R�p/�����	��-���/0
��E�N��������8��a��;�p���m���l�G�};���LK�Qa��w�fQ*�"��V�h��wz�Q�����AU�����:=�X9����i{S���x�C2p��b
�����f�iU�E�������_������k��7M����-�k���1��1�����E*��=-�,7�Q����1h��4���b�����b�f�A�0�zZ�7V);��
c0�ZX�+��G
�L����q=:-(��n��������Vg���A
y��)�b�G�\0�=������6y'�� ��J�;0�Z�;W[��
����{��z�D+@
�sus����JXq<�Ep��!��"a����P��`��&���,!��vu�8�2�2��{�oJ:�2�
��(���6��
���h��1d���[1��~��|�aC�h��Uk����� 	��ib�d���(T��`Ho`�������I���P��a7Hop��.v���A���x�R�T!7�Yk�
������� ����
"�$*�^���Qi�ao���{c��F��H
2z��1
�Bz�@��6}[6��2�������
�����a�Vi�m�)�6G�~#����!u���v����~=>Z����H���&�=#�8B����H����N�������xZ����T�����[�y�M6?���Cd�����i�M�F���n�PO����������H�?iH�{G?����MSG"��clb�Y�Uk�|�)f�^�%*��F�� c�g����=T�-Gl�po�R������	c�H?T��Tl�z��Fl	�j�Q"����J)R|���gd4
���^�R�T!�[���yd�)T���6q�����i��(�!���,�
#���O�r��"���UK������T��%�-�*)����O�\6��)���"��>B�z|��>�;F�#V�n�n�F{���#�3Vd����n��GuH9R����8�`I?SH���~��-��v<'�������?�H������|�r�4~����I^<���G:]P����`�H��T>eJ�L�]����/�I2�m/nM:���o��$p���ta���?��ih�
����)��:����Ns!8�Hz�p�H��$�J;Y��D����Uj�w�JM�$�	LR��7V�9�������z�m`��9����(��(a�Q.����#�� �m��;����z��dt����q�I�N�aoc(��R���%�qm"�r�����St���ym4�M�=>���_�b2����]���d���,���D-<��V2�B��[�[J_�9C,�_�<<)
endstream
endobj

3 0 obj
3405
endobj

533 0 obj
<</Length 534 0 R/Filter/FlateDecode/Length1 15056>>
stream
x��z{|SU���{on�&��M�����i�#�-
�%�m-�P

44�CK��+�"RW�/���.��
���oY�Uw��T�������X��o��7� ����������;gf��93s���I�}I�hIa��a�?���}�B�%��F���<�{	a�7��?t��s�p��(5�.o�������	�z�9���]�O��#(ct3""�;��>�����������H������P��}��M�����o7�l��B�q��p{&!�B4���Ht+��'dL�H���L9�c���v2����A^l3,���*u�F����i�&�%�:(�f����.���G���]r�b51���~��OLd!�_��������Z���!��Ov]BZOV�}�%�����	
m'��"�(�+C[�6r�O��L����8��O=b�������_a�d�G�E�~B���(��"?'�F����x��+�v�,�93��1�cW�;���Nh!������ydb��$���v�.�Y��0�Q���I�p5��r��r+zR!��,�����?$/���)�4��:�WY���<�0}�c�>���������*������1/��w���m|��	z�Y��{����������9�z����V�0�����������N�v�5���3�ddQa����C�rs\�N��d4�u���J�+8��/���<��
�
������/�[��F���*�c�_����sUVR����X>���1/r6^���8�IN0�q�;^����uo*s�����Fa.�6R��tb����P�X��Y^�:B�&e�kr0eD>�N� �A(6����������Q����L���X����2����?%�s�Q�LE���1%)�����Bw~O�=GdQ�[p�7��X?��d�;;����a������8�`,�UVs�R�f&���8$�����
������R�_����o����1�Y�?�
�ugg�K�������X���n��3\��&�u(�H��m��{|1C}3���S��YK�1�.��V�~����9��4&y��L�,h���)�a�/Y��X��:�-�E��[����z�����kEJG���^�B�V��u���)W9Z|�?����f�1.CL�����L3
�
}�W@��Z��"���v���thC���������q.#�)w����K��(@@CW��@�U��!���+�.*��ztXKuf����\����*o���]�n1���o�{�
����;��$DY�uG����{�`;�!���Ld�L�(�+��4�����F����y}�a��.��-4��F��GceV]U��j�����"A���_&�Ug��`�T�*����>d4 B�@�5i�c�\^48���;i�P6��F5b���`��'�/��ireB/6Q��J����>#�$���C%�2A�4����J�mi�^�s]>W��V��s�C�,��\���KZ��f"N$'�1cn�@�����d��2��Y�T��j:E�.Y A�������F���va��������z���<^���t��M���O����J#UP5k��|Lm��]�~F�����;j�Zn���0��'��s�VwT �K����bC����PQ~�Q/!��Qm7Bq�H�F�����@^� ��(�7�8����8��&���)
����j�T��
"�b���S
��R����fR���V{mGrx%
��^�vn�A-�n��M?.�ft6n+�B@����;�}�b#t
�C\�M���������b�$_*�K%</���`�����������$���l���EO�0�t����J��F�(�����
�g�*�!��x�qc�g�=#���Fg��i<��o��W��a���|�7�82��+���'�%�m��R	��y�����Z��j��j`S�}J�b�����Co>��C}>t�C)���0��[���NJ=nb��1��i�AU�����2&<��KF�BS2j�����,W6o6eAF�>��'����3��c���E������o��������n^9e(��=�n�c��Y�����C��Uo��r��r�
U���\{�_��:���XUg���k�T*
����E��bI5����z���z��C���]v��)���lgY\Z�6O��tzF�43l�2\��g�Wb���o�����O?;��������e��;���'_��7=<��]�}�y=Vn.�F2Vz���q��B�J-��������H�f��g6h�N51�P��R7���p��
_����s�n�����r�5��q��H~���S�*7�s�t7��p�
�i�$�7H�)��sn�$!����Q���;Oi�s�����i�����^�F��p�C{v��^����"7���A�@����R�IA��$�I�%�2�H)��U|Ro��L�#���Qyb\]�QC<YL�g"��*=(Z��dv8r�A�����������y���/]�<���b��6�5��#s�����;}�"e�/��3C���E��.RD����
S*�:}����\���������f��J#)��^�1V�35�>���T����vCW1tC������(2iR*.U1�����']Hm!�����[�q<jt)��	+��9���,��1f��1��O�kA�c�&�xt����+|��6�������&�Yv}`��������Uk*��m��!��fm���F�y�;^P=C6���t��_��8�(0��^�W��wh�t����tB�&��O1pz<G���z<��G���L}�a��t/�W����9�9�K����Gr76�<�����w�����������������q�U�>=������s+�i��V�i�IVe�+�Y���9+���Vx�
����
�g��P�&���:l�j�����.+l��Z+��Po�YV(�B�+���Y��z����Y�G�cz���2�9��dK���T'd+�X��
V@d��\0`%.��R�X��^��zH����v2��-2{H	q)�'���t���n(�+��"c����B7�����x��������wn��o�n��R_c������7��q_N!n��S1�F��8��U@ �#V"-5��B�txO���(������)�
L{�l�&�y������0�����d����2TF�a0k`s\���JWEf�Oa ����9 ��{9��.
��>�=90=v�@G��>���	
��*t�l�Dn�2c��}���hp�ip��1����O�r��F�����������'��8f��:�p����u����0����W\����px�-����}���>��D����� ��[�n���p�k�F�����D�}����
���-�>�A�V���6���.t���a����E6�,�L'&>�Q�"�cL�g����!�HQ���-K6
���������O��w��f�=������ ��������_��Fs�l�CN+��~��9��t�^�����:B4�J�TX�&kA��s���9�K�'���~����k��U�H3�7[R����/�kv3�!~����mwo��|p������	������������6D�C���><��7��9����s�H�!��c��aT��D��k����&�#*�]�c,�<(���<��#���7z����U�8������d}�3{����x�,������c��x���!�)�\���o����u�,/]���������W=�)�_��F6�����?����/m����Hbm���W d�7��P�;�hdlQ�]��b����2t�j��B�8Cx4�y�@(��� V]&E��������"�(��"���"8A�+��b�_���p-"W����%�9�3`
�Qr
���LN�YO���T�s`���u<��W����55�+�n�][���#�j\�Ts��0����(G���Z|,�����o�����s�F���9�B*��F^Cx�aU�h������H���"�'���#��m���{��w���g�������_�����G62Y�S����LQ�t���w�����;Ak����-\g�K<��jFA8 ���`Et��ivp{�-w�I���7���vx��XR�Z��MWkY#kR)M�jT*����.�U�Akd���h��,TX`�r0�Y���9���,p��-��w%8�('D�Z�������[����Q�:P"������k����8d8e�������6X��PO���J�=G�:Fet�q�,PD���yJ�%��H��*}�l8Cx����k)����X�a��G��e[��m��^m����3<��n[0���oL��)�iAZN;D�7l��_��7n��/���������2����/8����=#���Y�i}�v^��7��t����D��,Y���b0`���*��zS�Nt( ���
83��K]
���~���'�/���))gK����yH����>���o��D��$���+���l���Q�s�V�6�N�8��`�0����{y�
|=m� B��r#%7���������S8`Uq��L�c8���P�Z���w��O��}��Q]{��&��'�[�?�i"�����n��/J�����gb"���T�I���9�b�)TX.k�j��j�J���{��|)dG�<��4ur��^.�*J�����cvIG
f�o���X[r��ozJs�T�o���=�����R�9j*s-����y+Y��p�J��sf 5�������j�QCL
;�����j j83��K
]j�NIWr%���Zc-Y�1�h�
�R������?�:�FI�o�5)p��{ �:�e>��h����v-��B�fi�L�LZ������pL����R��I"K���O(^�;��m��7R|�k�0	�\J(��)���1S��B-�@�r���*�����r��+�	O�e��S�	���a�����#u�k��/���}m�R��V��C�5,�^`���Wq���p�pzP��<1��c8��������j ��Y�j`�
�4@4pN�@����/��9�4p*!ve����r�9G�%=vS����!���CJ�H�s�*��ui ��j�8j��h����u��>�Q*On�u��8����]p�k��}����G��6o���(�
��3���������{\V��m������A�o�s�V��d��^�Ntz�y�YO8������4_����g.������$�yJ&*o3��9&(��in���������GH=b��������~d}sr������g�gG;���������|�����j�B�m=����L�"�aT��t��\��g7��<�^��N�g�;��KD��Y"N����������Y����.fTj���8�������S�e�������D�y#�h��>CI�w������ZB�s
v�6<�h0�>�5��ix�iz#X��k��P���O��+�=�d6�������W�'=a��$y�HZ�W�����_>��>�'������h����,�_�4���/���u�~����ZY����[����|����{�8�:����DC�{M*N� j5��u�:�K�9��M*��+FS���&"�����_��O�>���?��oy���nF�m������BR�-p�����\I�:���FZ��C��.���!���f
��A��X��v����-V�U{	����o�D�(g�����X��2�����;n����;'�yW������j��;V�s=�i�C0��.���>~��yg;���o���C��(�z��e�W-���f��;��nm��<�$��l3�)X�p
���PN&��=��'�H�s�X����d��$-��a2�t%oM��������L}�����LQ���I	%D�k��K����d�K�.�^��h"���r�;�NV4��������3���o�c�LYY+d�}klK�:��s���{����m�v�a���n�9\��������P�)���y�:H�
���92�g?:�����gO�������@����M�<~���vna^��������������HH�����O*v��uHC�3�,oAV�M����yZ�����=�c�z�l�E|f�3� ����J&�D@�vKK����4����D����}���}��l��
}%����?��������uk��wMc>�?_�q�-h�.�w���w���^����N�����"�����y�&�
��r����%>��U�u8'�f-�������f�\|�r�F!pM���GHW�� ���g�Ag?���1���+9����"�~qx�]+��r��[���x�Lh����������[x��m������i<��9|�sA��:�d��e�
��p�ZC��r���m��z-������CT�k������@�i]��A�B_h0�C�``�`P+�X�B_=3y(��g�/��8o����B��?��G��s
l���fH[2*�y��c
���{�/��fN<�Vi���_=(30g���O=��@���\�zi�T��S�1w��U����g��a���O����C��^��;��g��]v����<�L�������
Q����>�.���13�2C��f�7C���/Y/.%EvN�6���Z���O����}�����}��L+�<������7�{�
\�����Hy���F�'fzO[I�!U�����k�k{�K���Z��\�eve�&;��_���n��C�fQ�8;4���Cv�B����a�)i���PI�F�E��cP�;dI�4	A�%U%������;0a:���TbO�f�^_�`��4-�����{�1X���P|��2zck"���C1[=rH|�]��c�,��<,3��*��a�=�u0x����m�pa�b���k�����}��U�w���m��F�'|C�o���������?���]
��������7������e?c��	9�2���u�^��s�)��#�a�f�8��V~�������>x�t"�fq �a%^5�&���W!^7�������s&^�x�����M�+� ;p|�M�G����0+��.�=���Q1Q�8?��������J5U����zWJsJG�o4�J�SZA;V�U������t����Fy�9d$���	����M�f8�Qj�%m2'i zl��KIe�%�d�s�s�+H*�*�<��GeXIV�nV�eXMtP*�)��dXC��3�_�0�p*)a��H&[�����S�t����0Ct�M�Y2�&�������dr��0O��2�$��nV����dXM���2��|���k�X�s2�%7��%���fuB7�>Z���mY�/4����[������aBq��"��P��5(L��C��hK��@H�|9_�0eT���������-���P�o��6-i��_i�����2������..YPr�vgKD��v ���~�j�T�=������&����h�-*����d����-
A�l�G���6��7/io�Z��"I���&\����`$�6���P���[���e�-
��2D#-MmH\�\����T?���-�E.
������HsK[���`{K�,B�6������-
�������a�����%�,��o�[ i�fiDk
-�����T����`�
����ZZ[�(����o@c��Z"�h!�oQ��=��s��z���	�.
F(w[0����[��
�"N�1�����#��j�b���p�h�P���������r�������(JY)h�F���-[V�����N)@��W�E����+�E)�[����D�-��'Q3e�0=���@��!_H������h��p4Rii-�7N��J�����W�$HD���m?B
$D�d9i�\����+��bR�I����+��V�/�6B�0����i#HI����+Fh��G%�������2�b�EH(Y 5�j#���,A=��qb��������pu�lJ�$����H�J����2[�"PG)E�q1����p����R�E����*��E��UM{�6����(��+�8Gl��
��	�*[�Ir�f��7�����/1���c�_9*j�vK���(^lG(m�#��$�]G�[�-��Pq�f
��=��[mr�Em�U���~�/m�B^IK�O�l�Fz��q�pa���T���2-j1?�����H�R�����ry�-F�H�.���2�2��sG~g6��E[H��(��@�a�CT���FP����V"��+}�h��Hz4���S�eG��	+�Y��)f)�� ���l�9��^Q�d��)z��� ��j��P��"W�<�4�V�nIz��F�d��6�'��Hm�G
Q��'�Y���]B�&�")��?����7$��,�uYLWE3��0�d!j'����V��R �\��O�+L-8pU�'uY�:N��|[r�-�j����3�f��?����$�k��<9���Kg!Ec��T��e�C���S�\s���2���:'Q�50�#�0Q~N/1�9�:|:�y
��x���'�����a��8�^����}@� e�y��7�Cg+�:�Y1�q���Xxz�iFz����7��Z���T����W8�����
����
�{�'{O���^����
��_�;����~U�e���I��������$�!��O�=Y{��?]�����w�?r|����m����W���	������8������ta���x���W8��~8tx�����VZ����]bX��zbO��iP��<}���u��X�'v"��/���z2�$����'��}����O@��{��{6�a
���������G�vm���������d8�[[Vm������>�}L�}������=�Olf������=�]����`����h������&8�*J�`����*=l-�S�G�B�n���7��1���i�
4W�����e'�S�V�g����~o`��Q2��;#wh�{�0�BpT�����_'+NW0`)6�A_k(��2��'�p�K�����^_����7�O����R����!���U��@W�������fULY=/�c�5��;cn�_#�s��u��[�i�4�*V\S������@���2��F�K��$�D��HD�@l�%��A2�a'lD���;�HK�X�pS
�#x"D&d��'%�P���������<�u�����	
endstream
endobj

534 0 obj
9273
endobj

535 0 obj
<</Type/FontDescriptor/FontName/BAAAAA+LiberationSans
/Flags 4
/FontBBox[-543 -303 1301 980]/ItalicAngle 0
/Ascent 905
/Descent -211
/CapHeight 979
/StemV 80
/FontFile2 533 0 R
>>
endobj

536 0 obj
<</Length 377/Filter/FlateDecode>>
stream
x�]�Mn�0F����t�����R���� 0�H� C����J]���oF���Y���_�W;6,��Mka��q�[o<�D�7���3�����j�J��I��o�l^�*v�v������lonb��Un]���0��4-t��S==��T�/[w�/������	���d�fla��lmn�%A���(RL��L�\r������t� �u�X1���8���9��B��O�1������O\K=���G�����9s�|!��cF����?B��c����d�8B�����������^��5�aM��_���#2��2�k��d�w����G��F��!�W�b�b�CN���>'������n�J�
������N��U�}l �
endstream
endobj

537 0 obj
<</Type/Font/Subtype/TrueType/BaseFont/BAAAAA+LiberationSans
/FirstChar 0
/LastChar 35
/Widths[0 500 556 833 556 333 500 556 556 556 556 556 556 556 556 722
222 500 277 222 500 500 277 556 556 556 556 556 277 556 556 556
556 666 722 833 ]
/FontDescriptor 535 0 R
/ToUnicode 536 0 R
>>
endobj

538 0 obj
<</Length 539 0 R/Filter/FlateDecode/Length1 515/Length2 1102/Length3 532>>
stream
x�SUt��+	�,H5�5�3�R��KwK�Kv�
JM/�I,R00�s*�d&�($��g�q��4*�S���3�����T},��U��e��z�(��1B�obIQf�B��fC��@c��&����T"T;9�W(T��)�)�)X��b���K�W0��#���}����[50����bPqbnfN%��S�RP�]���S���L���+���hdj�Pm�����Z��Z�������_��PPZR���_�r���~rf����9H,d H�����������N���2sRRS+R��&6;rS9d���ev������~��.t�Z�������=��z����>��x'����71�V7�7���3�]��7�;d������<��{��R��Z�������G����z��s�\Wy�m���W��}��9f)�3��0�����OM�����G`��</>�`)K��	
���28���f��/����o�d�����b�,m�$gz��lK�����5:�YT;�oQ�}�C�+��l��G�4����~�x���T�d��Woy�T��:�f��x��^P����[_�K�1U�����]��E5��w�K��>�G�3������9��)���Yz�jY���ya�cnZ�q���M<1��TyJf���q�9�e�.R��GUD!ZgF�$~���O�?��m��"����_�
n(~�"�'A���}j4�^���U^�l7���{q5�gm��H�1>q_{m������"64q�3\��Qf����c�.�"I��1k��^�NUq�o�$��$O[��s�kn�]��^������j�����Y�"���^��R�2�i����(��������b��
�yI/��lM����o����N�����N��0��r���/M����v�����sD�7
M�����q�����.�����4+ ��x�����+�
V����f����'3Nh6����������_�w�����������s���W�`�"������,�����;���%�U��bw����U�,:	%���5z����+O�76��������a������E~(�x|���M���7EE���z����)��Z���I�����9n~o�fX�_>��ZVf��Z���gK5j��k��~�3���?.Z��w��3�W��-����b��h]D��.����~���T9�
;��k^O/
���n�c�Y�a�3��r�O�?OAp��	����/��Jn���l�f���{����W�]p:60f���#�'��mM���[�;S#�����TO���T}6�-tyK�����
������H�����
w����N���'��|,0�����s����K�|M�s����.M�x�%�h���8��U���w�n�Y�TB��������W�Wp����Re��>^�!<�F��
���N.��|�
�gAy�����zM���D��r�"g �q�^~�]s~���h�jqPF
$��&���&e��/%
endstream
endobj

539 0 obj
1499
endobj

540 0 obj
<</Type/FontDescriptor/FontName/CAAAAA+PingFangSC-Regular
/Flags 4
/FontBBox[-72 -212 1126 953]/ItalicAngle 0
/Ascent 1060
/Descent -340
/CapHeight 952
/StemV 80
/FontFile 538 0 R
>>
endobj

541 0 obj
<</Length 232/Filter/FlateDecode>>
stream
x�]��j�0��~
�C�c� JG!��a�������Fqy�)n��6����$O�S|�om���=�>�J��6�T��d���v��qj��Z�w���V�]�q/�+9$F�}�:����'�hp8��g�^���P��q�������cM����F�s2��E�T����_O_�~�_��Y�������Zs��V��9�	��?��.D�����������J1mTy�%Oo�
endstream
endobj

542 0 obj
<</Type/Font/Subtype/Type1/BaseFont/CAAAAA+PingFangSC-Regular
/FirstChar 0
/LastChar 2
/Widths[0 1000 333 ]
/FontDescriptor 540 0 R
/ToUnicode 541 0 R
>>
endobj

543 0 obj
<</F1 537 0 R/F2 542 0 R
>>
endobj

544 0 obj
<</Font 543 0 R/ProcSet[/PDF/Text]
>>
endobj

1 0 obj
<</Type/Page/Parent 532 0 R/Resources 544 0 R/MediaBox[0 0 595.303937007874 841.889763779528]/Tabs/S
/StructParents 0
/Contents 2 0 R>>
endobj

545 0 obj
<</Count 1/First 546 0 R/Last 546 0 R
>>
endobj

546 0 obj
<</Count 0/Title<FEFF00730075006D006D006100720079>
/Dest[1 0 R/XYZ 0 841.889 0]/Parent 545 0 R>>
endobj

547 0 obj
<</Type/Metadata/Subtype/XML/Length 4950>>
stream
<?xpacket begin="���" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
   <pdf:Producer>LibreOffice 25.8.3.2 (AARCH64)</pdf:Producer>
   <pdf:PDFVersion>1.7</pdf:PDFVersion>
  </rdf:Description>
  <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
   <xmp:CreatorTool>Calc</xmp:CreatorTool>
   <xmp:CreateDate>2025-12-15T11:58:26+08:00</xmp:CreateDate>
   <xmp:ModifyDate>2025-12-15T11:58:26+08:00</xmp:ModifyDate>
   <xmp:MetadataDate>2025-12-15T11:58:26+08:00</xmp:MetadataDate>
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
                                                                                                                                                                                                        
<?xpacket end="w"?>

endstream
endobj

9 0 obj
<</Type/StructElem/S/P
/P 8 0 R
/Pg 1 0 R
/K[0 ]
>>
endobj

8 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[9 0 R  ]
>>
endobj

11 0 obj
<</Type/StructElem/S/P
/P 10 0 R
/Pg 1 0 R
/K[1 ]
>>
endobj

10 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[11 0 R  ]
>>
endobj

13 0 obj
<</Type/StructElem/S/P
/P 12 0 R
/Pg 1 0 R
/K[2 ]
>>
endobj

12 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[13 0 R  ]
>>
endobj

15 0 obj
<</Type/StructElem/S/P
/P 14 0 R
/Pg 1 0 R
/K[3 ]
>>
endobj

14 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[15 0 R  ]
>>
endobj

17 0 obj
<</Type/StructElem/S/P
/P 16 0 R
/Pg 1 0 R
/K[4 ]
>>
endobj

16 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[17 0 R  ]
>>
endobj

19 0 obj
<</Type/StructElem/S/P
/P 18 0 R
/Pg 1 0 R
/K[5 ]
>>
endobj

18 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[19 0 R  ]
>>
endobj

21 0 obj
<</Type/StructElem/S/P
/P 20 0 R
/Pg 1 0 R
/K[6 ]
>>
endobj

20 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[21 0 R  ]
>>
endobj

23 0 obj
<</Type/StructElem/S/P
/P 22 0 R
/Pg 1 0 R
/K[7 ]
>>
endobj

22 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[23 0 R  ]
>>
endobj

25 0 obj
<</Type/StructElem/S/P
/P 24 0 R
/Pg 1 0 R
/K[8 ]
>>
endobj

24 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[25 0 R  ]
>>
endobj

27 0 obj
<</Type/StructElem/S/P
/P 26 0 R
/Pg 1 0 R
/K[9 ]
>>
endobj

26 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[27 0 R  ]
>>
endobj

29 0 obj
<</Type/StructElem/S/P
/P 28 0 R
/Pg 1 0 R
/K[10 ]
>>
endobj

28 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[29 0 R  ]
>>
endobj

31 0 obj
<</Type/StructElem/S/P
/P 30 0 R
/Pg 1 0 R
/K[11 ]
>>
endobj

30 0 obj
<</Type/StructElem/S/TD
/P 7 0 R
/Pg 1 0 R
/K[31 0 R  ]
>>
endobj

7 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[8 0 R  10 0 R  12 0 R  14 0 R  16 0 R  18 0 R  20 0 R  22 0 R  24 0 R  26 0 R  28 0 R  30 0 R  ]
>>
endobj

34 0 obj
<</Type/StructElem/S/P
/P 33 0 R
/Pg 1 0 R
/K[12 ]
>>
endobj

33 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[34 0 R  ]
>>
endobj

36 0 obj
<</Type/StructElem/S/P
/P 35 0 R
/Pg 1 0 R
/K[13 ]
>>
endobj

35 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[36 0 R  ]
>>
endobj

38 0 obj
<</Type/StructElem/S/P
/P 37 0 R
/Pg 1 0 R
/K[14 ]
>>
endobj

37 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[38 0 R  ]
>>
endobj

40 0 obj
<</Type/StructElem/S/P
/P 39 0 R
/Pg 1 0 R
/K[15 ]
>>
endobj

39 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[40 0 R  ]
>>
endobj

42 0 obj
<</Type/StructElem/S/P
/P 41 0 R
/Pg 1 0 R
/K[16 ]
>>
endobj

41 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[42 0 R  ]
>>
endobj

44 0 obj
<</Type/StructElem/S/P
/P 43 0 R
/Pg 1 0 R
/K[17 ]
>>
endobj

43 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[44 0 R  ]
>>
endobj

46 0 obj
<</Type/StructElem/S/P
/P 45 0 R
/Pg 1 0 R
/K[18 ]
>>
endobj

45 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[46 0 R  ]
>>
endobj

48 0 obj
<</Type/StructElem/S/P
/P 47 0 R
/Pg 1 0 R
/K[19 ]
>>
endobj

47 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[48 0 R  ]
>>
endobj

50 0 obj
<</Type/StructElem/S/P
/P 49 0 R
/Pg 1 0 R
/K[20 ]
>>
endobj

49 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[50 0 R  ]
>>
endobj

52 0 obj
<</Type/StructElem/S/P
/P 51 0 R
/Pg 1 0 R
/K[21 ]
>>
endobj

51 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[52 0 R  ]
>>
endobj

54 0 obj
<</Type/StructElem/S/P
/P 53 0 R
/Pg 1 0 R
/K[22 ]
>>
endobj

53 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[54 0 R  ]
>>
endobj

56 0 obj
<</Type/StructElem/S/P
/P 55 0 R
/Pg 1 0 R
/K[23 ]
>>
endobj

55 0 obj
<</Type/StructElem/S/TD
/P 32 0 R
/Pg 1 0 R
/K[56 0 R  ]
>>
endobj

32 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[33 0 R  35 0 R  37 0 R  39 0 R  41 0 R  43 0 R  45 0 R  47 0 R  49 0 R  51 0 R  53 0 R  55 0 R  ]
>>
endobj

59 0 obj
<</Type/StructElem/S/P
/P 58 0 R
/Pg 1 0 R
/K[24 ]
>>
endobj

58 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[59 0 R  ]
>>
endobj

61 0 obj
<</Type/StructElem/S/P
/P 60 0 R
/Pg 1 0 R
/K[25 ]
>>
endobj

60 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[61 0 R  ]
>>
endobj

63 0 obj
<</Type/StructElem/S/P
/P 62 0 R
/Pg 1 0 R
/K[26 ]
>>
endobj

62 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[63 0 R  ]
>>
endobj

65 0 obj
<</Type/StructElem/S/P
/P 64 0 R
/Pg 1 0 R
/K[27 ]
>>
endobj

64 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[65 0 R  ]
>>
endobj

67 0 obj
<</Type/StructElem/S/P
/P 66 0 R
/Pg 1 0 R
/K[28 ]
>>
endobj

66 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[67 0 R  ]
>>
endobj

69 0 obj
<</Type/StructElem/S/P
/P 68 0 R
/Pg 1 0 R
/K[29 ]
>>
endobj

68 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[69 0 R  ]
>>
endobj

71 0 obj
<</Type/StructElem/S/P
/P 70 0 R
/Pg 1 0 R
/K[30 ]
>>
endobj

70 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[71 0 R  ]
>>
endobj

73 0 obj
<</Type/StructElem/S/P
/P 72 0 R
/Pg 1 0 R
/K[31 ]
>>
endobj

72 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[73 0 R  ]
>>
endobj

75 0 obj
<</Type/StructElem/S/P
/P 74 0 R
/Pg 1 0 R
/K[32 ]
>>
endobj

74 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[75 0 R  ]
>>
endobj

77 0 obj
<</Type/StructElem/S/P
/P 76 0 R
/Pg 1 0 R
/K[33 ]
>>
endobj

76 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[77 0 R  ]
>>
endobj

79 0 obj
<</Type/StructElem/S/P
/P 78 0 R
/Pg 1 0 R
/K[34 ]
>>
endobj

78 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[79 0 R  ]
>>
endobj

81 0 obj
<</Type/StructElem/S/P
/P 80 0 R
/Pg 1 0 R
/K[35 ]
>>
endobj

80 0 obj
<</Type/StructElem/S/TD
/P 57 0 R
/Pg 1 0 R
/K[81 0 R  ]
>>
endobj

57 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[58 0 R  60 0 R  62 0 R  64 0 R  66 0 R  68 0 R  70 0 R  72 0 R  74 0 R  76 0 R  78 0 R  80 0 R  ]
>>
endobj

84 0 obj
<</Type/StructElem/S/P
/P 83 0 R
/Pg 1 0 R
/K[36 ]
>>
endobj

83 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[84 0 R  ]
>>
endobj

86 0 obj
<</Type/StructElem/S/P
/P 85 0 R
/Pg 1 0 R
/K[37 ]
>>
endobj

85 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[86 0 R  ]
>>
endobj

88 0 obj
<</Type/StructElem/S/P
/P 87 0 R
/Pg 1 0 R
/K[38 ]
>>
endobj

87 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[88 0 R  ]
>>
endobj

90 0 obj
<</Type/StructElem/S/P
/P 89 0 R
/Pg 1 0 R
/K[39 ]
>>
endobj

89 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[90 0 R  ]
>>
endobj

92 0 obj
<</Type/StructElem/S/P
/P 91 0 R
/Pg 1 0 R
/K[40 ]
>>
endobj

91 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[92 0 R  ]
>>
endobj

94 0 obj
<</Type/StructElem/S/P
/P 93 0 R
/Pg 1 0 R
/K[41 ]
>>
endobj

93 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[94 0 R  ]
>>
endobj

96 0 obj
<</Type/StructElem/S/P
/P 95 0 R
/Pg 1 0 R
/K[42 ]
>>
endobj

95 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[96 0 R  ]
>>
endobj

98 0 obj
<</Type/StructElem/S/P
/P 97 0 R
/Pg 1 0 R
/K[43 ]
>>
endobj

97 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[98 0 R  ]
>>
endobj

100 0 obj
<</Type/StructElem/S/P
/P 99 0 R
/Pg 1 0 R
/K[44 ]
>>
endobj

99 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[100 0 R  ]
>>
endobj

102 0 obj
<</Type/StructElem/S/P
/P 101 0 R
/Pg 1 0 R
/K[45 ]
>>
endobj

101 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[102 0 R  ]
>>
endobj

104 0 obj
<</Type/StructElem/S/P
/P 103 0 R
/Pg 1 0 R
/K[46 ]
>>
endobj

103 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[104 0 R  ]
>>
endobj

106 0 obj
<</Type/StructElem/S/P
/P 105 0 R
/Pg 1 0 R
/K[47 ]
>>
endobj

105 0 obj
<</Type/StructElem/S/TD
/P 82 0 R
/Pg 1 0 R
/K[106 0 R  ]
>>
endobj

82 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[83 0 R  85 0 R  87 0 R  89 0 R  91 0 R  93 0 R  95 0 R  97 0 R  99 0 R  101 0 R  103 0 R  105 0 R  ]
>>
endobj

109 0 obj
<</Type/StructElem/S/P
/P 108 0 R
/Pg 1 0 R
/K[48 ]
>>
endobj

108 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[109 0 R  ]
>>
endobj

111 0 obj
<</Type/StructElem/S/P
/P 110 0 R
/Pg 1 0 R
/K[49 ]
>>
endobj

110 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[111 0 R  ]
>>
endobj

113 0 obj
<</Type/StructElem/S/P
/P 112 0 R
/Pg 1 0 R
/K[50 ]
>>
endobj

112 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[113 0 R  ]
>>
endobj

115 0 obj
<</Type/StructElem/S/P
/P 114 0 R
/Pg 1 0 R
/K[51 ]
>>
endobj

114 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[115 0 R  ]
>>
endobj

117 0 obj
<</Type/StructElem/S/P
/P 116 0 R
/Pg 1 0 R
/K[52 ]
>>
endobj

116 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[117 0 R  ]
>>
endobj

119 0 obj
<</Type/StructElem/S/P
/P 118 0 R
/Pg 1 0 R
/K[53 ]
>>
endobj

118 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[119 0 R  ]
>>
endobj

121 0 obj
<</Type/StructElem/S/P
/P 120 0 R
/Pg 1 0 R
/K[54 ]
>>
endobj

120 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[121 0 R  ]
>>
endobj

123 0 obj
<</Type/StructElem/S/P
/P 122 0 R
/Pg 1 0 R
/K[55 ]
>>
endobj

122 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[123 0 R  ]
>>
endobj

125 0 obj
<</Type/StructElem/S/P
/P 124 0 R
/Pg 1 0 R
/K[56 ]
>>
endobj

124 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[125 0 R  ]
>>
endobj

127 0 obj
<</Type/StructElem/S/P
/P 126 0 R
/Pg 1 0 R
/K[57 ]
>>
endobj

126 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[127 0 R  ]
>>
endobj

129 0 obj
<</Type/StructElem/S/P
/P 128 0 R
/Pg 1 0 R
/K[58 ]
>>
endobj

128 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[129 0 R  ]
>>
endobj

131 0 obj
<</Type/StructElem/S/P
/P 130 0 R
/Pg 1 0 R
/K[59 ]
>>
endobj

130 0 obj
<</Type/StructElem/S/TD
/P 107 0 R
/Pg 1 0 R
/K[131 0 R  ]
>>
endobj

107 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[108 0 R  110 0 R  112 0 R  114 0 R  116 0 R  118 0 R  120 0 R  122 0 R  124 0 R  126 0 R  128 0 R  130 0 R  ]
>>
endobj

134 0 obj
<</Type/StructElem/S/P
/P 133 0 R
/Pg 1 0 R
/K[60 ]
>>
endobj

133 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[134 0 R  ]
>>
endobj

136 0 obj
<</Type/StructElem/S/P
/P 135 0 R
/Pg 1 0 R
/K[61 ]
>>
endobj

135 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[136 0 R  ]
>>
endobj

138 0 obj
<</Type/StructElem/S/P
/P 137 0 R
/Pg 1 0 R
/K[62 ]
>>
endobj

137 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[138 0 R  ]
>>
endobj

140 0 obj
<</Type/StructElem/S/P
/P 139 0 R
/Pg 1 0 R
/K[63 ]
>>
endobj

139 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[140 0 R  ]
>>
endobj

142 0 obj
<</Type/StructElem/S/P
/P 141 0 R
/Pg 1 0 R
/K[64 ]
>>
endobj

141 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[142 0 R  ]
>>
endobj

144 0 obj
<</Type/StructElem/S/P
/P 143 0 R
/Pg 1 0 R
/K[65 ]
>>
endobj

143 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[144 0 R  ]
>>
endobj

146 0 obj
<</Type/StructElem/S/P
/P 145 0 R
/Pg 1 0 R
/K[66 ]
>>
endobj

145 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[146 0 R  ]
>>
endobj

148 0 obj
<</Type/StructElem/S/P
/P 147 0 R
/Pg 1 0 R
/K[67 ]
>>
endobj

147 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[148 0 R  ]
>>
endobj

150 0 obj
<</Type/StructElem/S/P
/P 149 0 R
/Pg 1 0 R
/K[68 ]
>>
endobj

149 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[150 0 R  ]
>>
endobj

152 0 obj
<</Type/StructElem/S/P
/P 151 0 R
/Pg 1 0 R
/K[69 ]
>>
endobj

151 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[152 0 R  ]
>>
endobj

154 0 obj
<</Type/StructElem/S/P
/P 153 0 R
/Pg 1 0 R
/K[70 ]
>>
endobj

153 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[154 0 R  ]
>>
endobj

156 0 obj
<</Type/StructElem/S/P
/P 155 0 R
/Pg 1 0 R
/K[71 ]
>>
endobj

155 0 obj
<</Type/StructElem/S/TD
/P 132 0 R
/Pg 1 0 R
/K[156 0 R  ]
>>
endobj

132 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[133 0 R  135 0 R  137 0 R  139 0 R  141 0 R  143 0 R  145 0 R  147 0 R  149 0 R  151 0 R  153 0 R  155 0 R  ]
>>
endobj

159 0 obj
<</Type/StructElem/S/P
/P 158 0 R
/Pg 1 0 R
/K[72 ]
>>
endobj

158 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[159 0 R  ]
>>
endobj

161 0 obj
<</Type/StructElem/S/P
/P 160 0 R
/Pg 1 0 R
/K[73 ]
>>
endobj

160 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[161 0 R  ]
>>
endobj

163 0 obj
<</Type/StructElem/S/P
/P 162 0 R
/Pg 1 0 R
/K[74 ]
>>
endobj

162 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[163 0 R  ]
>>
endobj

165 0 obj
<</Type/StructElem/S/P
/P 164 0 R
/Pg 1 0 R
/K[75 ]
>>
endobj

164 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[165 0 R  ]
>>
endobj

167 0 obj
<</Type/StructElem/S/P
/P 166 0 R
/Pg 1 0 R
/K[76 ]
>>
endobj

166 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[167 0 R  ]
>>
endobj

169 0 obj
<</Type/StructElem/S/P
/P 168 0 R
/Pg 1 0 R
/K[77 ]
>>
endobj

168 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[169 0 R  ]
>>
endobj

171 0 obj
<</Type/StructElem/S/P
/P 170 0 R
/Pg 1 0 R
/K[78 ]
>>
endobj

170 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[171 0 R  ]
>>
endobj

173 0 obj
<</Type/StructElem/S/P
/P 172 0 R
/Pg 1 0 R
/K[79 ]
>>
endobj

172 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[173 0 R  ]
>>
endobj

175 0 obj
<</Type/StructElem/S/P
/P 174 0 R
/Pg 1 0 R
/K[80 ]
>>
endobj

174 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[175 0 R  ]
>>
endobj

177 0 obj
<</Type/StructElem/S/P
/P 176 0 R
/Pg 1 0 R
/K[81 ]
>>
endobj

176 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[177 0 R  ]
>>
endobj

179 0 obj
<</Type/StructElem/S/P
/P 178 0 R
/Pg 1 0 R
/K[82 ]
>>
endobj

178 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[179 0 R  ]
>>
endobj

181 0 obj
<</Type/StructElem/S/P
/P 180 0 R
/Pg 1 0 R
/K[83 ]
>>
endobj

180 0 obj
<</Type/StructElem/S/TD
/P 157 0 R
/Pg 1 0 R
/K[181 0 R  ]
>>
endobj

157 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[158 0 R  160 0 R  162 0 R  164 0 R  166 0 R  168 0 R  170 0 R  172 0 R  174 0 R  176 0 R  178 0 R  180 0 R  ]
>>
endobj

184 0 obj
<</Type/StructElem/S/P
/P 183 0 R
/Pg 1 0 R
/K[84 ]
>>
endobj

183 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[184 0 R  ]
>>
endobj

186 0 obj
<</Type/StructElem/S/P
/P 185 0 R
/Pg 1 0 R
/K[85 ]
>>
endobj

185 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[186 0 R  ]
>>
endobj

188 0 obj
<</Type/StructElem/S/P
/P 187 0 R
/Pg 1 0 R
/K[86 ]
>>
endobj

187 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[188 0 R  ]
>>
endobj

190 0 obj
<</Type/StructElem/S/P
/P 189 0 R
/Pg 1 0 R
/K[87 ]
>>
endobj

189 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[190 0 R  ]
>>
endobj

192 0 obj
<</Type/StructElem/S/P
/P 191 0 R
/Pg 1 0 R
/K[88 ]
>>
endobj

191 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[192 0 R  ]
>>
endobj

194 0 obj
<</Type/StructElem/S/P
/P 193 0 R
/Pg 1 0 R
/K[89 ]
>>
endobj

193 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[194 0 R  ]
>>
endobj

196 0 obj
<</Type/StructElem/S/P
/P 195 0 R
/Pg 1 0 R
/K[90 ]
>>
endobj

195 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[196 0 R  ]
>>
endobj

198 0 obj
<</Type/StructElem/S/P
/P 197 0 R
/Pg 1 0 R
/K[91 ]
>>
endobj

197 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[198 0 R  ]
>>
endobj

200 0 obj
<</Type/StructElem/S/P
/P 199 0 R
/Pg 1 0 R
/K[92 ]
>>
endobj

199 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[200 0 R  ]
>>
endobj

202 0 obj
<</Type/StructElem/S/P
/P 201 0 R
/Pg 1 0 R
/K[93 ]
>>
endobj

201 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[202 0 R  ]
>>
endobj

204 0 obj
<</Type/StructElem/S/P
/P 203 0 R
/Pg 1 0 R
/K[94 ]
>>
endobj

203 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[204 0 R  ]
>>
endobj

206 0 obj
<</Type/StructElem/S/P
/P 205 0 R
/Pg 1 0 R
/K[95 ]
>>
endobj

205 0 obj
<</Type/StructElem/S/TD
/P 182 0 R
/Pg 1 0 R
/K[206 0 R  ]
>>
endobj

182 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[183 0 R  185 0 R  187 0 R  189 0 R  191 0 R  193 0 R  195 0 R  197 0 R  199 0 R  201 0 R  203 0 R  205 0 R  ]
>>
endobj

209 0 obj
<</Type/StructElem/S/P
/P 208 0 R
/Pg 1 0 R
/K[96 ]
>>
endobj

208 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[209 0 R  ]
>>
endobj

211 0 obj
<</Type/StructElem/S/P
/P 210 0 R
/Pg 1 0 R
/K[97 ]
>>
endobj

210 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[211 0 R  ]
>>
endobj

213 0 obj
<</Type/StructElem/S/P
/P 212 0 R
/Pg 1 0 R
/K[98 ]
>>
endobj

212 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[213 0 R  ]
>>
endobj

215 0 obj
<</Type/StructElem/S/P
/P 214 0 R
/Pg 1 0 R
/K[99 ]
>>
endobj

214 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[215 0 R  ]
>>
endobj

217 0 obj
<</Type/StructElem/S/P
/P 216 0 R
/Pg 1 0 R
/K[100 ]
>>
endobj

216 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[217 0 R  ]
>>
endobj

219 0 obj
<</Type/StructElem/S/P
/P 218 0 R
/Pg 1 0 R
/K[101 ]
>>
endobj

218 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[219 0 R  ]
>>
endobj

221 0 obj
<</Type/StructElem/S/P
/P 220 0 R
/Pg 1 0 R
/K[102 ]
>>
endobj

220 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[221 0 R  ]
>>
endobj

223 0 obj
<</Type/StructElem/S/P
/P 222 0 R
/Pg 1 0 R
/K[103 ]
>>
endobj

222 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[223 0 R  ]
>>
endobj

225 0 obj
<</Type/StructElem/S/P
/P 224 0 R
/Pg 1 0 R
/K[104 ]
>>
endobj

224 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[225 0 R  ]
>>
endobj

227 0 obj
<</Type/StructElem/S/P
/P 226 0 R
/Pg 1 0 R
/K[105 ]
>>
endobj

226 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[227 0 R  ]
>>
endobj

229 0 obj
<</Type/StructElem/S/P
/P 228 0 R
/Pg 1 0 R
/K[106 ]
>>
endobj

228 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[229 0 R  ]
>>
endobj

231 0 obj
<</Type/StructElem/S/P
/P 230 0 R
/Pg 1 0 R
/K[107 ]
>>
endobj

230 0 obj
<</Type/StructElem/S/TD
/P 207 0 R
/Pg 1 0 R
/K[231 0 R  ]
>>
endobj

207 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[208 0 R  210 0 R  212 0 R  214 0 R  216 0 R  218 0 R  220 0 R  222 0 R  224 0 R  226 0 R  228 0 R  230 0 R  ]
>>
endobj

234 0 obj
<</Type/StructElem/S/P
/P 233 0 R
/Pg 1 0 R
/K[108 ]
>>
endobj

233 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[234 0 R  ]
>>
endobj

236 0 obj
<</Type/StructElem/S/P
/P 235 0 R
/Pg 1 0 R
/K[109 ]
>>
endobj

235 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[236 0 R  ]
>>
endobj

238 0 obj
<</Type/StructElem/S/P
/P 237 0 R
/Pg 1 0 R
/K[110 ]
>>
endobj

237 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[238 0 R  ]
>>
endobj

240 0 obj
<</Type/StructElem/S/P
/P 239 0 R
/Pg 1 0 R
/K[111 ]
>>
endobj

239 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[240 0 R  ]
>>
endobj

242 0 obj
<</Type/StructElem/S/P
/P 241 0 R
/Pg 1 0 R
/K[112 ]
>>
endobj

241 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[242 0 R  ]
>>
endobj

244 0 obj
<</Type/StructElem/S/P
/P 243 0 R
/Pg 1 0 R
/K[113 ]
>>
endobj

243 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[244 0 R  ]
>>
endobj

246 0 obj
<</Type/StructElem/S/P
/P 245 0 R
/Pg 1 0 R
/K[114 ]
>>
endobj

245 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[246 0 R  ]
>>
endobj

248 0 obj
<</Type/StructElem/S/P
/P 247 0 R
/Pg 1 0 R
/K[115 ]
>>
endobj

247 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[248 0 R  ]
>>
endobj

250 0 obj
<</Type/StructElem/S/P
/P 249 0 R
/Pg 1 0 R
/K[116 ]
>>
endobj

249 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[250 0 R  ]
>>
endobj

252 0 obj
<</Type/StructElem/S/P
/P 251 0 R
/Pg 1 0 R
/K[117 ]
>>
endobj

251 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[252 0 R  ]
>>
endobj

254 0 obj
<</Type/StructElem/S/P
/P 253 0 R
/Pg 1 0 R
/K[118 ]
>>
endobj

253 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[254 0 R  ]
>>
endobj

256 0 obj
<</Type/StructElem/S/P
/P 255 0 R
/Pg 1 0 R
/K[119 ]
>>
endobj

255 0 obj
<</Type/StructElem/S/TD
/P 232 0 R
/Pg 1 0 R
/K[256 0 R  ]
>>
endobj

232 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[233 0 R  235 0 R  237 0 R  239 0 R  241 0 R  243 0 R  245 0 R  247 0 R  249 0 R  251 0 R  253 0 R  255 0 R  ]
>>
endobj

259 0 obj
<</Type/StructElem/S/P
/P 258 0 R
/Pg 1 0 R
/K[120 ]
>>
endobj

258 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[259 0 R  ]
>>
endobj

261 0 obj
<</Type/StructElem/S/P
/P 260 0 R
/Pg 1 0 R
/K[121 ]
>>
endobj

260 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[261 0 R  ]
>>
endobj

263 0 obj
<</Type/StructElem/S/P
/P 262 0 R
/Pg 1 0 R
/K[122 ]
>>
endobj

262 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[263 0 R  ]
>>
endobj

265 0 obj
<</Type/StructElem/S/P
/P 264 0 R
/Pg 1 0 R
/K[123 ]
>>
endobj

264 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[265 0 R  ]
>>
endobj

267 0 obj
<</Type/StructElem/S/P
/P 266 0 R
/Pg 1 0 R
/K[124 ]
>>
endobj

266 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[267 0 R  ]
>>
endobj

269 0 obj
<</Type/StructElem/S/P
/P 268 0 R
/Pg 1 0 R
/K[125 ]
>>
endobj

268 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[269 0 R  ]
>>
endobj

271 0 obj
<</Type/StructElem/S/P
/P 270 0 R
/Pg 1 0 R
/K[126 ]
>>
endobj

270 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[271 0 R  ]
>>
endobj

273 0 obj
<</Type/StructElem/S/P
/P 272 0 R
/Pg 1 0 R
/K[127 ]
>>
endobj

272 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[273 0 R  ]
>>
endobj

275 0 obj
<</Type/StructElem/S/P
/P 274 0 R
/Pg 1 0 R
/K[128 ]
>>
endobj

274 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[275 0 R  ]
>>
endobj

277 0 obj
<</Type/StructElem/S/P
/P 276 0 R
/Pg 1 0 R
/K[129 ]
>>
endobj

276 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[277 0 R  ]
>>
endobj

279 0 obj
<</Type/StructElem/S/P
/P 278 0 R
/Pg 1 0 R
/K[130 ]
>>
endobj

278 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[279 0 R  ]
>>
endobj

281 0 obj
<</Type/StructElem/S/P
/P 280 0 R
/Pg 1 0 R
/K[131 ]
>>
endobj

280 0 obj
<</Type/StructElem/S/TD
/P 257 0 R
/Pg 1 0 R
/K[281 0 R  ]
>>
endobj

257 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[258 0 R  260 0 R  262 0 R  264 0 R  266 0 R  268 0 R  270 0 R  272 0 R  274 0 R  276 0 R  278 0 R  280 0 R  ]
>>
endobj

284 0 obj
<</Type/StructElem/S/P
/P 283 0 R
/Pg 1 0 R
/K[132 ]
>>
endobj

283 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[284 0 R  ]
>>
endobj

286 0 obj
<</Type/StructElem/S/P
/P 285 0 R
/Pg 1 0 R
/K[133 ]
>>
endobj

285 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[286 0 R  ]
>>
endobj

288 0 obj
<</Type/StructElem/S/P
/P 287 0 R
/Pg 1 0 R
/K[134 ]
>>
endobj

287 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[288 0 R  ]
>>
endobj

290 0 obj
<</Type/StructElem/S/P
/P 289 0 R
/Pg 1 0 R
/K[135 ]
>>
endobj

289 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[290 0 R  ]
>>
endobj

292 0 obj
<</Type/StructElem/S/P
/P 291 0 R
/Pg 1 0 R
/K[136 ]
>>
endobj

291 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[292 0 R  ]
>>
endobj

294 0 obj
<</Type/StructElem/S/P
/P 293 0 R
/Pg 1 0 R
/K[137 ]
>>
endobj

293 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[294 0 R  ]
>>
endobj

296 0 obj
<</Type/StructElem/S/P
/P 295 0 R
/Pg 1 0 R
/K[138 ]
>>
endobj

295 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[296 0 R  ]
>>
endobj

298 0 obj
<</Type/StructElem/S/P
/P 297 0 R
/Pg 1 0 R
/K[139 ]
>>
endobj

297 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[298 0 R  ]
>>
endobj

300 0 obj
<</Type/StructElem/S/P
/P 299 0 R
/Pg 1 0 R
/K[140 ]
>>
endobj

299 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[300 0 R  ]
>>
endobj

302 0 obj
<</Type/StructElem/S/P
/P 301 0 R
/Pg 1 0 R
/K[141 ]
>>
endobj

301 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[302 0 R  ]
>>
endobj

304 0 obj
<</Type/StructElem/S/P
/P 303 0 R
/Pg 1 0 R
/K[142 ]
>>
endobj

303 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[304 0 R  ]
>>
endobj

306 0 obj
<</Type/StructElem/S/P
/P 305 0 R
/Pg 1 0 R
/K[143 ]
>>
endobj

305 0 obj
<</Type/StructElem/S/TD
/P 282 0 R
/Pg 1 0 R
/K[306 0 R  ]
>>
endobj

282 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[283 0 R  285 0 R  287 0 R  289 0 R  291 0 R  293 0 R  295 0 R  297 0 R  299 0 R  301 0 R  303 0 R  305 0 R  ]
>>
endobj

309 0 obj
<</Type/StructElem/S/P
/P 308 0 R
/Pg 1 0 R
/K[144 ]
>>
endobj

308 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[309 0 R  ]
>>
endobj

311 0 obj
<</Type/StructElem/S/P
/P 310 0 R
/Pg 1 0 R
/K[145 ]
>>
endobj

310 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[311 0 R  ]
>>
endobj

313 0 obj
<</Type/StructElem/S/P
/P 312 0 R
/Pg 1 0 R
/K[146 ]
>>
endobj

312 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[313 0 R  ]
>>
endobj

315 0 obj
<</Type/StructElem/S/P
/P 314 0 R
/Pg 1 0 R
/K[147 ]
>>
endobj

314 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[315 0 R  ]
>>
endobj

317 0 obj
<</Type/StructElem/S/P
/P 316 0 R
/Pg 1 0 R
/K[148 ]
>>
endobj

316 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[317 0 R  ]
>>
endobj

319 0 obj
<</Type/StructElem/S/P
/P 318 0 R
/Pg 1 0 R
/K[149 ]
>>
endobj

318 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[319 0 R  ]
>>
endobj

321 0 obj
<</Type/StructElem/S/P
/P 320 0 R
/Pg 1 0 R
/K[150 ]
>>
endobj

320 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[321 0 R  ]
>>
endobj

323 0 obj
<</Type/StructElem/S/P
/P 322 0 R
/Pg 1 0 R
/K[151 ]
>>
endobj

322 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[323 0 R  ]
>>
endobj

325 0 obj
<</Type/StructElem/S/P
/P 324 0 R
/Pg 1 0 R
/K[152 ]
>>
endobj

324 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[325 0 R  ]
>>
endobj

327 0 obj
<</Type/StructElem/S/P
/P 326 0 R
/Pg 1 0 R
/K[153 ]
>>
endobj

326 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[327 0 R  ]
>>
endobj

329 0 obj
<</Type/StructElem/S/P
/P 328 0 R
/Pg 1 0 R
/K[154 ]
>>
endobj

328 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[329 0 R  ]
>>
endobj

331 0 obj
<</Type/StructElem/S/P
/P 330 0 R
/Pg 1 0 R
/K[155 ]
>>
endobj

330 0 obj
<</Type/StructElem/S/TD
/P 307 0 R
/Pg 1 0 R
/K[331 0 R  ]
>>
endobj

307 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[308 0 R  310 0 R  312 0 R  314 0 R  316 0 R  318 0 R  320 0 R  322 0 R  324 0 R  326 0 R  328 0 R  330 0 R  ]
>>
endobj

334 0 obj
<</Type/StructElem/S/P
/P 333 0 R
/Pg 1 0 R
/K[156 ]
>>
endobj

333 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[334 0 R  ]
>>
endobj

336 0 obj
<</Type/StructElem/S/P
/P 335 0 R
/Pg 1 0 R
/K[157 ]
>>
endobj

335 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[336 0 R  ]
>>
endobj

338 0 obj
<</Type/StructElem/S/P
/P 337 0 R
/Pg 1 0 R
/K[158 ]
>>
endobj

337 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[338 0 R  ]
>>
endobj

340 0 obj
<</Type/StructElem/S/P
/P 339 0 R
/Pg 1 0 R
/K[159 ]
>>
endobj

339 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[340 0 R  ]
>>
endobj

342 0 obj
<</Type/StructElem/S/P
/P 341 0 R
/Pg 1 0 R
/K[160 ]
>>
endobj

341 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[342 0 R  ]
>>
endobj

344 0 obj
<</Type/StructElem/S/P
/P 343 0 R
/Pg 1 0 R
/K[161 ]
>>
endobj

343 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[344 0 R  ]
>>
endobj

346 0 obj
<</Type/StructElem/S/P
/P 345 0 R
/Pg 1 0 R
/K[162 ]
>>
endobj

345 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[346 0 R  ]
>>
endobj

348 0 obj
<</Type/StructElem/S/P
/P 347 0 R
/Pg 1 0 R
/K[163 ]
>>
endobj

347 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[348 0 R  ]
>>
endobj

350 0 obj
<</Type/StructElem/S/P
/P 349 0 R
/Pg 1 0 R
/K[164 ]
>>
endobj

349 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[350 0 R  ]
>>
endobj

352 0 obj
<</Type/StructElem/S/P
/P 351 0 R
/Pg 1 0 R
/K[165 ]
>>
endobj

351 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[352 0 R  ]
>>
endobj

354 0 obj
<</Type/StructElem/S/P
/P 353 0 R
/Pg 1 0 R
/K[166 ]
>>
endobj

353 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[354 0 R  ]
>>
endobj

356 0 obj
<</Type/StructElem/S/P
/P 355 0 R
/Pg 1 0 R
/K[167 ]
>>
endobj

355 0 obj
<</Type/StructElem/S/TD
/P 332 0 R
/Pg 1 0 R
/K[356 0 R  ]
>>
endobj

332 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[333 0 R  335 0 R  337 0 R  339 0 R  341 0 R  343 0 R  345 0 R  347 0 R  349 0 R  351 0 R  353 0 R  355 0 R  ]
>>
endobj

359 0 obj
<</Type/StructElem/S/P
/P 358 0 R
/Pg 1 0 R
/K[168 ]
>>
endobj

358 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[359 0 R  ]
>>
endobj

361 0 obj
<</Type/StructElem/S/P
/P 360 0 R
/Pg 1 0 R
/K[169 ]
>>
endobj

360 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[361 0 R  ]
>>
endobj

363 0 obj
<</Type/StructElem/S/P
/P 362 0 R
/Pg 1 0 R
/K[170 ]
>>
endobj

362 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[363 0 R  ]
>>
endobj

365 0 obj
<</Type/StructElem/S/P
/P 364 0 R
/Pg 1 0 R
/K[171 ]
>>
endobj

364 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[365 0 R  ]
>>
endobj

367 0 obj
<</Type/StructElem/S/P
/P 366 0 R
/Pg 1 0 R
/K[172 ]
>>
endobj

366 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[367 0 R  ]
>>
endobj

369 0 obj
<</Type/StructElem/S/P
/P 368 0 R
/Pg 1 0 R
/K[173 ]
>>
endobj

368 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[369 0 R  ]
>>
endobj

371 0 obj
<</Type/StructElem/S/P
/P 370 0 R
/Pg 1 0 R
/K[174 ]
>>
endobj

370 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[371 0 R  ]
>>
endobj

373 0 obj
<</Type/StructElem/S/P
/P 372 0 R
/Pg 1 0 R
/K[175 ]
>>
endobj

372 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[373 0 R  ]
>>
endobj

375 0 obj
<</Type/StructElem/S/P
/P 374 0 R
/Pg 1 0 R
/K[176 ]
>>
endobj

374 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[375 0 R  ]
>>
endobj

377 0 obj
<</Type/StructElem/S/P
/P 376 0 R
/Pg 1 0 R
/K[177 ]
>>
endobj

376 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[377 0 R  ]
>>
endobj

379 0 obj
<</Type/StructElem/S/P
/P 378 0 R
/Pg 1 0 R
/K[178 ]
>>
endobj

378 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[379 0 R  ]
>>
endobj

381 0 obj
<</Type/StructElem/S/P
/P 380 0 R
/Pg 1 0 R
/K[179 ]
>>
endobj

380 0 obj
<</Type/StructElem/S/TD
/P 357 0 R
/Pg 1 0 R
/K[381 0 R  ]
>>
endobj

357 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[358 0 R  360 0 R  362 0 R  364 0 R  366 0 R  368 0 R  370 0 R  372 0 R  374 0 R  376 0 R  378 0 R  380 0 R  ]
>>
endobj

384 0 obj
<</Type/StructElem/S/P
/P 383 0 R
/Pg 1 0 R
/K[180 ]
>>
endobj

383 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[384 0 R  ]
>>
endobj

386 0 obj
<</Type/StructElem/S/P
/P 385 0 R
/Pg 1 0 R
/K[181 ]
>>
endobj

385 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[386 0 R  ]
>>
endobj

388 0 obj
<</Type/StructElem/S/P
/P 387 0 R
/Pg 1 0 R
/K[182 ]
>>
endobj

387 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[388 0 R  ]
>>
endobj

390 0 obj
<</Type/StructElem/S/P
/P 389 0 R
/Pg 1 0 R
/K[183 ]
>>
endobj

389 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[390 0 R  ]
>>
endobj

392 0 obj
<</Type/StructElem/S/P
/P 391 0 R
/Pg 1 0 R
/K[184 ]
>>
endobj

391 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[392 0 R  ]
>>
endobj

394 0 obj
<</Type/StructElem/S/P
/P 393 0 R
/Pg 1 0 R
/K[185 ]
>>
endobj

393 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[394 0 R  ]
>>
endobj

396 0 obj
<</Type/StructElem/S/P
/P 395 0 R
/Pg 1 0 R
/K[186 ]
>>
endobj

395 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[396 0 R  ]
>>
endobj

398 0 obj
<</Type/StructElem/S/P
/P 397 0 R
/Pg 1 0 R
/K[187 ]
>>
endobj

397 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[398 0 R  ]
>>
endobj

400 0 obj
<</Type/StructElem/S/P
/P 399 0 R
/Pg 1 0 R
/K[188 ]
>>
endobj

399 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[400 0 R  ]
>>
endobj

402 0 obj
<</Type/StructElem/S/P
/P 401 0 R
/Pg 1 0 R
/K[189 ]
>>
endobj

401 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[402 0 R  ]
>>
endobj

404 0 obj
<</Type/StructElem/S/P
/P 403 0 R
/Pg 1 0 R
/K[190 ]
>>
endobj

403 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[404 0 R  ]
>>
endobj

406 0 obj
<</Type/StructElem/S/P
/P 405 0 R
/Pg 1 0 R
/K[191 ]
>>
endobj

405 0 obj
<</Type/StructElem/S/TD
/P 382 0 R
/Pg 1 0 R
/K[406 0 R  ]
>>
endobj

382 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[383 0 R  385 0 R  387 0 R  389 0 R  391 0 R  393 0 R  395 0 R  397 0 R  399 0 R  401 0 R  403 0 R  405 0 R  ]
>>
endobj

409 0 obj
<</Type/StructElem/S/P
/P 408 0 R
/Pg 1 0 R
/K[192 ]
>>
endobj

408 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[409 0 R  ]
>>
endobj

411 0 obj
<</Type/StructElem/S/P
/P 410 0 R
/Pg 1 0 R
/K[193 ]
>>
endobj

410 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[411 0 R  ]
>>
endobj

413 0 obj
<</Type/StructElem/S/P
/P 412 0 R
/Pg 1 0 R
/K[194 ]
>>
endobj

412 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[413 0 R  ]
>>
endobj

415 0 obj
<</Type/StructElem/S/P
/P 414 0 R
/Pg 1 0 R
/K[195 ]
>>
endobj

414 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[415 0 R  ]
>>
endobj

417 0 obj
<</Type/StructElem/S/P
/P 416 0 R
/Pg 1 0 R
/K[196 ]
>>
endobj

416 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[417 0 R  ]
>>
endobj

419 0 obj
<</Type/StructElem/S/P
/P 418 0 R
/Pg 1 0 R
/K[197 ]
>>
endobj

418 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[419 0 R  ]
>>
endobj

421 0 obj
<</Type/StructElem/S/P
/P 420 0 R
/Pg 1 0 R
/K[198 ]
>>
endobj

420 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[421 0 R  ]
>>
endobj

423 0 obj
<</Type/StructElem/S/P
/P 422 0 R
/Pg 1 0 R
/K[199 ]
>>
endobj

422 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[423 0 R  ]
>>
endobj

425 0 obj
<</Type/StructElem/S/P
/P 424 0 R
/Pg 1 0 R
/K[200 ]
>>
endobj

424 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[425 0 R  ]
>>
endobj

427 0 obj
<</Type/StructElem/S/P
/P 426 0 R
/Pg 1 0 R
/K[201 ]
>>
endobj

426 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[427 0 R  ]
>>
endobj

429 0 obj
<</Type/StructElem/S/P
/P 428 0 R
/Pg 1 0 R
/K[202 ]
>>
endobj

428 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[429 0 R  ]
>>
endobj

431 0 obj
<</Type/StructElem/S/P
/P 430 0 R
/Pg 1 0 R
/K[203 ]
>>
endobj

430 0 obj
<</Type/StructElem/S/TD
/P 407 0 R
/Pg 1 0 R
/K[431 0 R  ]
>>
endobj

407 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[408 0 R  410 0 R  412 0 R  414 0 R  416 0 R  418 0 R  420 0 R  422 0 R  424 0 R  426 0 R  428 0 R  430 0 R  ]
>>
endobj

434 0 obj
<</Type/StructElem/S/P
/P 433 0 R
/Pg 1 0 R
/K[204 ]
>>
endobj

433 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[434 0 R  ]
>>
endobj

436 0 obj
<</Type/StructElem/S/P
/P 435 0 R
/Pg 1 0 R
/K[205 ]
>>
endobj

435 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[436 0 R  ]
>>
endobj

438 0 obj
<</Type/StructElem/S/P
/P 437 0 R
/Pg 1 0 R
/K[206 ]
>>
endobj

437 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[438 0 R  ]
>>
endobj

440 0 obj
<</Type/StructElem/S/P
/P 439 0 R
/Pg 1 0 R
/K[207 ]
>>
endobj

439 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[440 0 R  ]
>>
endobj

442 0 obj
<</Type/StructElem/S/P
/P 441 0 R
/Pg 1 0 R
/K[208 ]
>>
endobj

441 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[442 0 R  ]
>>
endobj

444 0 obj
<</Type/StructElem/S/P
/P 443 0 R
/Pg 1 0 R
/K[209 ]
>>
endobj

443 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[444 0 R  ]
>>
endobj

446 0 obj
<</Type/StructElem/S/P
/P 445 0 R
/Pg 1 0 R
/K[210 ]
>>
endobj

445 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[446 0 R  ]
>>
endobj

448 0 obj
<</Type/StructElem/S/P
/P 447 0 R
/Pg 1 0 R
/K[211 ]
>>
endobj

447 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[448 0 R  ]
>>
endobj

450 0 obj
<</Type/StructElem/S/P
/P 449 0 R
/Pg 1 0 R
/K[212 ]
>>
endobj

449 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[450 0 R  ]
>>
endobj

452 0 obj
<</Type/StructElem/S/P
/P 451 0 R
/Pg 1 0 R
/K[213 ]
>>
endobj

451 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[452 0 R  ]
>>
endobj

454 0 obj
<</Type/StructElem/S/P
/P 453 0 R
/Pg 1 0 R
/K[214 ]
>>
endobj

453 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[454 0 R  ]
>>
endobj

456 0 obj
<</Type/StructElem/S/P
/P 455 0 R
/Pg 1 0 R
/K[215 ]
>>
endobj

455 0 obj
<</Type/StructElem/S/TD
/P 432 0 R
/Pg 1 0 R
/K[456 0 R  ]
>>
endobj

432 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[433 0 R  435 0 R  437 0 R  439 0 R  441 0 R  443 0 R  445 0 R  447 0 R  449 0 R  451 0 R  453 0 R  455 0 R  ]
>>
endobj

459 0 obj
<</Type/StructElem/S/P
/P 458 0 R
/Pg 1 0 R
/K[216 ]
>>
endobj

458 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[459 0 R  ]
>>
endobj

461 0 obj
<</Type/StructElem/S/P
/P 460 0 R
/Pg 1 0 R
/K[217 ]
>>
endobj

460 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[461 0 R  ]
>>
endobj

463 0 obj
<</Type/StructElem/S/P
/P 462 0 R
/Pg 1 0 R
/K[218 ]
>>
endobj

462 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[463 0 R  ]
>>
endobj

465 0 obj
<</Type/StructElem/S/P
/P 464 0 R
/Pg 1 0 R
/K[219 ]
>>
endobj

464 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[465 0 R  ]
>>
endobj

467 0 obj
<</Type/StructElem/S/P
/P 466 0 R
/Pg 1 0 R
/K[220 ]
>>
endobj

466 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[467 0 R  ]
>>
endobj

469 0 obj
<</Type/StructElem/S/P
/P 468 0 R
/Pg 1 0 R
/K[221 ]
>>
endobj

468 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[469 0 R  ]
>>
endobj

471 0 obj
<</Type/StructElem/S/P
/P 470 0 R
/Pg 1 0 R
/K[222 ]
>>
endobj

470 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[471 0 R  ]
>>
endobj

473 0 obj
<</Type/StructElem/S/P
/P 472 0 R
/Pg 1 0 R
/K[223 ]
>>
endobj

472 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[473 0 R  ]
>>
endobj

475 0 obj
<</Type/StructElem/S/P
/P 474 0 R
/Pg 1 0 R
/K[224 ]
>>
endobj

474 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[475 0 R  ]
>>
endobj

477 0 obj
<</Type/StructElem/S/P
/P 476 0 R
/Pg 1 0 R
/K[225 ]
>>
endobj

476 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[477 0 R  ]
>>
endobj

479 0 obj
<</Type/StructElem/S/P
/P 478 0 R
/Pg 1 0 R
/K[226 ]
>>
endobj

478 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[479 0 R  ]
>>
endobj

481 0 obj
<</Type/StructElem/S/P
/P 480 0 R
/Pg 1 0 R
/K[227 ]
>>
endobj

480 0 obj
<</Type/StructElem/S/TD
/P 457 0 R
/Pg 1 0 R
/K[481 0 R  ]
>>
endobj

457 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[458 0 R  460 0 R  462 0 R  464 0 R  466 0 R  468 0 R  470 0 R  472 0 R  474 0 R  476 0 R  478 0 R  480 0 R  ]
>>
endobj

484 0 obj
<</Type/StructElem/S/P
/P 483 0 R
/Pg 1 0 R
/K[228 ]
>>
endobj

483 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[484 0 R  ]
>>
endobj

486 0 obj
<</Type/StructElem/S/P
/P 485 0 R
/Pg 1 0 R
/K[229 ]
>>
endobj

485 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[486 0 R  ]
>>
endobj

488 0 obj
<</Type/StructElem/S/P
/P 487 0 R
/Pg 1 0 R
/K[230 ]
>>
endobj

487 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[488 0 R  ]
>>
endobj

490 0 obj
<</Type/StructElem/S/P
/P 489 0 R
/Pg 1 0 R
/K[231 ]
>>
endobj

489 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[490 0 R  ]
>>
endobj

492 0 obj
<</Type/StructElem/S/P
/P 491 0 R
/Pg 1 0 R
/K[232 ]
>>
endobj

491 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[492 0 R  ]
>>
endobj

494 0 obj
<</Type/StructElem/S/P
/P 493 0 R
/Pg 1 0 R
/K[233 ]
>>
endobj

493 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[494 0 R  ]
>>
endobj

496 0 obj
<</Type/StructElem/S/P
/P 495 0 R
/Pg 1 0 R
/K[234 ]
>>
endobj

495 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[496 0 R  ]
>>
endobj

498 0 obj
<</Type/StructElem/S/P
/P 497 0 R
/Pg 1 0 R
/K[235 ]
>>
endobj

497 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[498 0 R  ]
>>
endobj

500 0 obj
<</Type/StructElem/S/P
/P 499 0 R
/Pg 1 0 R
/K[236 ]
>>
endobj

499 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[500 0 R  ]
>>
endobj

502 0 obj
<</Type/StructElem/S/P
/P 501 0 R
/Pg 1 0 R
/K[237 ]
>>
endobj

501 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[502 0 R  ]
>>
endobj

504 0 obj
<</Type/StructElem/S/P
/P 503 0 R
/Pg 1 0 R
/K[238 ]
>>
endobj

503 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[504 0 R  ]
>>
endobj

506 0 obj
<</Type/StructElem/S/P
/P 505 0 R
/Pg 1 0 R
/K[239 ]
>>
endobj

505 0 obj
<</Type/StructElem/S/TD
/P 482 0 R
/Pg 1 0 R
/K[506 0 R  ]
>>
endobj

482 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[483 0 R  485 0 R  487 0 R  489 0 R  491 0 R  493 0 R  495 0 R  497 0 R  499 0 R  501 0 R  503 0 R  505 0 R  ]
>>
endobj

509 0 obj
<</Type/StructElem/S/P
/P 508 0 R
/Pg 1 0 R
/K[240 ]
>>
endobj

508 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[509 0 R  ]
>>
endobj

511 0 obj
<</Type/StructElem/S/P
/P 510 0 R
/Pg 1 0 R
/K[241 ]
>>
endobj

510 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[511 0 R  ]
>>
endobj

513 0 obj
<</Type/StructElem/S/P
/P 512 0 R
/Pg 1 0 R
/K[242 ]
>>
endobj

512 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[513 0 R  ]
>>
endobj

515 0 obj
<</Type/StructElem/S/P
/P 514 0 R
/Pg 1 0 R
/K[243 ]
>>
endobj

514 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[515 0 R  ]
>>
endobj

517 0 obj
<</Type/StructElem/S/P
/P 516 0 R
/Pg 1 0 R
/K[244 ]
>>
endobj

516 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[517 0 R  ]
>>
endobj

519 0 obj
<</Type/StructElem/S/P
/P 518 0 R
/Pg 1 0 R
/K[245 ]
>>
endobj

518 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[519 0 R  ]
>>
endobj

521 0 obj
<</Type/StructElem/S/P
/P 520 0 R
/Pg 1 0 R
/K[246 ]
>>
endobj

520 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[521 0 R  ]
>>
endobj

523 0 obj
<</Type/StructElem/S/P
/P 522 0 R
/Pg 1 0 R
/K[247 ]
>>
endobj

522 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[523 0 R  ]
>>
endobj

525 0 obj
<</Type/StructElem/S/P
/P 524 0 R
/Pg 1 0 R
/K[248 ]
>>
endobj

524 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[525 0 R  ]
>>
endobj

527 0 obj
<</Type/StructElem/S/P
/P 526 0 R
/Pg 1 0 R
/K[249 ]
>>
endobj

526 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[527 0 R  ]
>>
endobj

529 0 obj
<</Type/StructElem/S/P
/P 528 0 R
/Pg 1 0 R
/K[250 ]
>>
endobj

528 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[529 0 R  ]
>>
endobj

531 0 obj
<</Type/StructElem/S/P
/P 530 0 R
/Pg 1 0 R
/K[251 ]
>>
endobj

530 0 obj
<</Type/StructElem/S/TD
/P 507 0 R
/Pg 1 0 R
/K[531 0 R  ]
>>
endobj

507 0 obj
<</Type/StructElem/S/TR
/P 6 0 R
/Pg 1 0 R
/K[508 0 R  510 0 R  512 0 R  514 0 R  516 0 R  518 0 R  520 0 R  522 0 R  524 0 R  526 0 R  528 0 R  530 0 R  ]
>>
endobj

6 0 obj
<</Type/StructElem/S/Table
/P 5 0 R
/Pg 1 0 R
/K[7 0 R  32 0 R  57 0 R  82 0 R  107 0 R  132 0 R  157 0 R  182 0 R  207 0 R  232 0 R  257 0 R  282 0 R  307 0 R  332 0 R  357 0 R  382 0 R 
407 0 R  432 0 R  457 0 R  482 0 R  507 0 R  ]
>>
endobj

5 0 obj
<</Type/StructElem/S/Worksheet
/P 4 0 R
/Pg 1 0 R
/K[6 0 R  ]
>>
endobj

4 0 obj
<</Type/StructElem/S/Workbook
/P 548 0 R
/Pg 1 0 R
/K[5 0 R  ]
>>
endobj

548 0 obj
<</Type/StructTreeRoot
/ParentTree 549 0 R/RoleMap<</Worksheet/Part
/Workbook/Document
>>
/K[4 0 R  ]
>>
endobj

549 0 obj
<</Nums[
0 [ 9 0 R 11 0 R 13 0 R 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 25 0 R 27 0 R
29 0 R 31 0 R 34 0 R 36 0 R 38 0 R 40 0 R 42 0 R 44 0 R 46 0 R 48 0 R
50 0 R 52 0 R 54 0 R 56 0 R 59 0 R 61 0 R 63 0 R 65 0 R 67 0 R 69 0 R
71 0 R 73 0 R 75 0 R 77 0 R 79 0 R 81 0 R 84 0 R 86 0 R 88 0 R 90 0 R
92 0 R 94 0 R 96 0 R 98 0 R 100 0 R 102 0 R 104 0 R 106 0 R 109 0 R 111 0 R
113 0 R 115 0 R 117 0 R 119 0 R 121 0 R 123 0 R 125 0 R 127 0 R 129 0 R 131 0 R
134 0 R 136 0 R 138 0 R 140 0 R 142 0 R 144 0 R 146 0 R 148 0 R 150 0 R 152 0 R
154 0 R 156 0 R 159 0 R 161 0 R 163 0 R 165 0 R 167 0 R 169 0 R 171 0 R 173 0 R
175 0 R 177 0 R 179 0 R 181 0 R 184 0 R 186 0 R 188 0 R 190 0 R 192 0 R 194 0 R
196 0 R 198 0 R 200 0 R 202 0 R 204 0 R 206 0 R 209 0 R 211 0 R 213 0 R 215 0 R
217 0 R 219 0 R 221 0 R 223 0 R 225 0 R 227 0 R 229 0 R 231 0 R 234 0 R 236 0 R
238 0 R 240 0 R 242 0 R 244 0 R 246 0 R 248 0 R 250 0 R 252 0 R 254 0 R 256 0 R
259 0 R 261 0 R 263 0 R 265 0 R 267 0 R 269 0 R 271 0 R 273 0 R 275 0 R 277 0 R
279 0 R 281 0 R 284 0 R 286 0 R 288 0 R 290 0 R 292 0 R 294 0 R 296 0 R 298 0 R
300 0 R 302 0 R 304 0 R 306 0 R 309 0 R 311 0 R 313 0 R 315 0 R 317 0 R 319 0 R
321 0 R 323 0 R 325 0 R 327 0 R 329 0 R 331 0 R 334 0 R 336 0 R 338 0 R 340 0 R
342 0 R 344 0 R 346 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 359 0 R 361 0 R
363 0 R 365 0 R 367 0 R 369 0 R 371 0 R 373 0 R 375 0 R 377 0 R 379 0 R 381 0 R
384 0 R 386 0 R 388 0 R 390 0 R 392 0 R 394 0 R 396 0 R 398 0 R 400 0 R 402 0 R
404 0 R 406 0 R 409 0 R 411 0 R 413 0 R 415 0 R 417 0 R 419 0 R 421 0 R 423 0 R
425 0 R 427 0 R 429 0 R 431 0 R 434 0 R 436 0 R 438 0 R 440 0 R 442 0 R 444 0 R
446 0 R 448 0 R 450 0 R 452 0 R 454 0 R 456 0 R 459 0 R 461 0 R 463 0 R 465 0 R
467 0 R 469 0 R 471 0 R 473 0 R 475 0 R 477 0 R 479 0 R 481 0 R 484 0 R 486 0 R
488 0 R 490 0 R 492 0 R 494 0 R 496 0 R 498 0 R 500 0 R 502 0 R 504 0 R 506 0 R
509 0 R 511 0 R 513 0 R 515 0 R 517 0 R 519 0 R 521 0 R 523 0 R 525 0 R 527 0 R
529 0 R 531 0 R ]
]>>
endobj

532 0 obj
<</Type/Pages
/Resources 544 0 R
/Kids[ 1 0 R ]
/Count 1>>
endobj

550 0 obj
<</Type/Catalog/Pages 532 0 R
/PageMode/UseOutlines
/OpenAction[1 0 R /FitH null]
/Outlines 545 0 R
/StructTreeRoot 548 0 R
/Lang(en-US)
/MarkInfo<</Marked true>>
/Metadata 547 0 R>>
endobj

551 0 obj
<</Creator<FEFF00430061006C0063>/Producer<FEFF004C0069006200720065004F00660066006900630065002000320035002E0038002E0033002E00320020002800410041005200430048003600340029>/CreationDate(D:20251215120036+08'00')>>
endobj

xref
0 552
0000000000 65535 f 
0000016262 00000 n 
0000000019 00000 n 
0000003495 00000 n 
0000064074 00000 n 
0000063993 00000 n 
0000063739 00000 n 
0000023367 00000 n 
0000021685 00000 n 
0000021617 00000 n 
0000021829 00000 n 
0000021759 00000 n 
0000021975 00000 n 
0000021905 00000 n 
0000022121 00000 n 
0000022051 00000 n 
0000022267 00000 n 
0000022197 00000 n 
0000022413 00000 n 
0000022343 00000 n 
0000022559 00000 n 
0000022489 00000 n 
0000022705 00000 n 
0000022635 00000 n 
0000022851 00000 n 
0000022781 00000 n 
0000022997 00000 n 
0000022927 00000 n 
0000023144 00000 n 
0000023073 00000 n 
0000023291 00000 n 
0000023220 00000 n 
0000025305 00000 n 
0000023600 00000 n 
0000023529 00000 n 
0000023748 00000 n 
0000023677 00000 n 
0000023896 00000 n 
0000023825 00000 n 
0000024044 00000 n 
0000023973 00000 n 
0000024192 00000 n 
0000024121 00000 n 
0000024340 00000 n 
0000024269 00000 n 
0000024488 00000 n 
0000024417 00000 n 
0000024636 00000 n 
0000024565 00000 n 
0000024784 00000 n 
0000024713 00000 n 
0000024932 00000 n 
0000024861 00000 n 
0000025080 00000 n 
0000025009 00000 n 
0000025228 00000 n 
0000025157 00000 n 
0000027245 00000 n 
0000025540 00000 n 
0000025469 00000 n 
0000025688 00000 n 
0000025617 00000 n 
0000025836 00000 n 
0000025765 00000 n 
0000025984 00000 n 
0000025913 00000 n 
0000026132 00000 n 
0000026061 00000 n 
0000026280 00000 n 
0000026209 00000 n 
0000026428 00000 n 
0000026357 00000 n 
0000026576 00000 n 
0000026505 00000 n 
0000026724 00000 n 
0000026653 00000 n 
0000026872 00000 n 
0000026801 00000 n 
0000027020 00000 n 
0000026949 00000 n 
0000027168 00000 n 
0000027097 00000 n 
0000029199 00000 n 
0000027480 00000 n 
0000027409 00000 n 
0000027628 00000 n 
0000027557 00000 n 
0000027776 00000 n 
0000027705 00000 n 
0000027924 00000 n 
0000027853 00000 n 
0000028072 00000 n 
0000028001 00000 n 
0000028220 00000 n 
0000028149 00000 n 
0000028368 00000 n 
0000028297 00000 n 
0000028516 00000 n 
0000028445 00000 n 
0000028665 00000 n 
0000028593 00000 n 
0000028816 00000 n 
0000028743 00000 n 
0000028968 00000 n 
0000028895 00000 n 
0000029120 00000 n 
0000029047 00000 n 
0000031202 00000 n 
0000029439 00000 n 
0000029366 00000 n 
0000029592 00000 n 
0000029519 00000 n 
0000029745 00000 n 
0000029672 00000 n 
0000029898 00000 n 
0000029825 00000 n 
0000030051 00000 n 
0000029978 00000 n 
0000030204 00000 n 
0000030131 00000 n 
0000030357 00000 n 
0000030284 00000 n 
0000030510 00000 n 
0000030437 00000 n 
0000030663 00000 n 
0000030590 00000 n 
0000030816 00000 n 
0000030743 00000 n 
0000030969 00000 n 
0000030896 00000 n 
0000031122 00000 n 
0000031049 00000 n 
0000033215 00000 n 
0000031452 00000 n 
0000031379 00000 n 
0000031605 00000 n 
0000031532 00000 n 
0000031758 00000 n 
0000031685 00000 n 
0000031911 00000 n 
0000031838 00000 n 
0000032064 00000 n 
0000031991 00000 n 
0000032217 00000 n 
0000032144 00000 n 
0000032370 00000 n 
0000032297 00000 n 
0000032523 00000 n 
0000032450 00000 n 
0000032676 00000 n 
0000032603 00000 n 
0000032829 00000 n 
0000032756 00000 n 
0000032982 00000 n 
0000032909 00000 n 
0000033135 00000 n 
0000033062 00000 n 
0000035228 00000 n 
0000033465 00000 n 
0000033392 00000 n 
0000033618 00000 n 
0000033545 00000 n 
0000033771 00000 n 
0000033698 00000 n 
0000033924 00000 n 
0000033851 00000 n 
0000034077 00000 n 
0000034004 00000 n 
0000034230 00000 n 
0000034157 00000 n 
0000034383 00000 n 
0000034310 00000 n 
0000034536 00000 n 
0000034463 00000 n 
0000034689 00000 n 
0000034616 00000 n 
0000034842 00000 n 
0000034769 00000 n 
0000034995 00000 n 
0000034922 00000 n 
0000035148 00000 n 
0000035075 00000 n 
0000037241 00000 n 
0000035478 00000 n 
0000035405 00000 n 
0000035631 00000 n 
0000035558 00000 n 
0000035784 00000 n 
0000035711 00000 n 
0000035937 00000 n 
0000035864 00000 n 
0000036090 00000 n 
0000036017 00000 n 
0000036243 00000 n 
0000036170 00000 n 
0000036396 00000 n 
0000036323 00000 n 
0000036549 00000 n 
0000036476 00000 n 
0000036702 00000 n 
0000036629 00000 n 
0000036855 00000 n 
0000036782 00000 n 
0000037008 00000 n 
0000036935 00000 n 
0000037161 00000 n 
0000037088 00000 n 
0000039262 00000 n 
0000037491 00000 n 
0000037418 00000 n 
0000037644 00000 n 
0000037571 00000 n 
0000037797 00000 n 
0000037724 00000 n 
0000037950 00000 n 
0000037877 00000 n 
0000038104 00000 n 
0000038030 00000 n 
0000038258 00000 n 
0000038184 00000 n 
0000038412 00000 n 
0000038338 00000 n 
0000038566 00000 n 
0000038492 00000 n 
0000038720 00000 n 
0000038646 00000 n 
0000038874 00000 n 
0000038800 00000 n 
0000039028 00000 n 
0000038954 00000 n 
0000039182 00000 n 
0000039108 00000 n 
0000041287 00000 n 
0000039513 00000 n 
0000039439 00000 n 
0000039667 00000 n 
0000039593 00000 n 
0000039821 00000 n 
0000039747 00000 n 
0000039975 00000 n 
0000039901 00000 n 
0000040129 00000 n 
0000040055 00000 n 
0000040283 00000 n 
0000040209 00000 n 
0000040437 00000 n 
0000040363 00000 n 
0000040591 00000 n 
0000040517 00000 n 
0000040745 00000 n 
0000040671 00000 n 
0000040899 00000 n 
0000040825 00000 n 
0000041053 00000 n 
0000040979 00000 n 
0000041207 00000 n 
0000041133 00000 n 
0000043312 00000 n 
0000041538 00000 n 
0000041464 00000 n 
0000041692 00000 n 
0000041618 00000 n 
0000041846 00000 n 
0000041772 00000 n 
0000042000 00000 n 
0000041926 00000 n 
0000042154 00000 n 
0000042080 00000 n 
0000042308 00000 n 
0000042234 00000 n 
0000042462 00000 n 
0000042388 00000 n 
0000042616 00000 n 
0000042542 00000 n 
0000042770 00000 n 
0000042696 00000 n 
0000042924 00000 n 
0000042850 00000 n 
0000043078 00000 n 
0000043004 00000 n 
0000043232 00000 n 
0000043158 00000 n 
0000045337 00000 n 
0000043563 00000 n 
0000043489 00000 n 
0000043717 00000 n 
0000043643 00000 n 
0000043871 00000 n 
0000043797 00000 n 
0000044025 00000 n 
0000043951 00000 n 
0000044179 00000 n 
0000044105 00000 n 
0000044333 00000 n 
0000044259 00000 n 
0000044487 00000 n 
0000044413 00000 n 
0000044641 00000 n 
0000044567 00000 n 
0000044795 00000 n 
0000044721 00000 n 
0000044949 00000 n 
0000044875 00000 n 
0000045103 00000 n 
0000045029 00000 n 
0000045257 00000 n 
0000045183 00000 n 
0000047362 00000 n 
0000045588 00000 n 
0000045514 00000 n 
0000045742 00000 n 
0000045668 00000 n 
0000045896 00000 n 
0000045822 00000 n 
0000046050 00000 n 
0000045976 00000 n 
0000046204 00000 n 
0000046130 00000 n 
0000046358 00000 n 
0000046284 00000 n 
0000046512 00000 n 
0000046438 00000 n 
0000046666 00000 n 
0000046592 00000 n 
0000046820 00000 n 
0000046746 00000 n 
0000046974 00000 n 
0000046900 00000 n 
0000047128 00000 n 
0000047054 00000 n 
0000047282 00000 n 
0000047208 00000 n 
0000049387 00000 n 
0000047613 00000 n 
0000047539 00000 n 
0000047767 00000 n 
0000047693 00000 n 
0000047921 00000 n 
0000047847 00000 n 
0000048075 00000 n 
0000048001 00000 n 
0000048229 00000 n 
0000048155 00000 n 
0000048383 00000 n 
0000048309 00000 n 
0000048537 00000 n 
0000048463 00000 n 
0000048691 00000 n 
0000048617 00000 n 
0000048845 00000 n 
0000048771 00000 n 
0000048999 00000 n 
0000048925 00000 n 
0000049153 00000 n 
0000049079 00000 n 
0000049307 00000 n 
0000049233 00000 n 
0000051412 00000 n 
0000049638 00000 n 
0000049564 00000 n 
0000049792 00000 n 
0000049718 00000 n 
0000049946 00000 n 
0000049872 00000 n 
0000050100 00000 n 
0000050026 00000 n 
0000050254 00000 n 
0000050180 00000 n 
0000050408 00000 n 
0000050334 00000 n 
0000050562 00000 n 
0000050488 00000 n 
0000050716 00000 n 
0000050642 00000 n 
0000050870 00000 n 
0000050796 00000 n 
0000051024 00000 n 
0000050950 00000 n 
0000051178 00000 n 
0000051104 00000 n 
0000051332 00000 n 
0000051258 00000 n 
0000053437 00000 n 
0000051663 00000 n 
0000051589 00000 n 
0000051817 00000 n 
0000051743 00000 n 
0000051971 00000 n 
0000051897 00000 n 
0000052125 00000 n 
0000052051 00000 n 
0000052279 00000 n 
0000052205 00000 n 
0000052433 00000 n 
0000052359 00000 n 
0000052587 00000 n 
0000052513 00000 n 
0000052741 00000 n 
0000052667 00000 n 
0000052895 00000 n 
0000052821 00000 n 
0000053049 00000 n 
0000052975 00000 n 
0000053203 00000 n 
0000053129 00000 n 
0000053357 00000 n 
0000053283 00000 n 
0000055462 00000 n 
0000053688 00000 n 
0000053614 00000 n 
0000053842 00000 n 
0000053768 00000 n 
0000053996 00000 n 
0000053922 00000 n 
0000054150 00000 n 
0000054076 00000 n 
0000054304 00000 n 
0000054230 00000 n 
0000054458 00000 n 
0000054384 00000 n 
0000054612 00000 n 
0000054538 00000 n 
0000054766 00000 n 
0000054692 00000 n 
0000054920 00000 n 
0000054846 00000 n 
0000055074 00000 n 
0000055000 00000 n 
0000055228 00000 n 
0000055154 00000 n 
0000055382 00000 n 
0000055308 00000 n 
0000057487 00000 n 
0000055713 00000 n 
0000055639 00000 n 
0000055867 00000 n 
0000055793 00000 n 
0000056021 00000 n 
0000055947 00000 n 
0000056175 00000 n 
0000056101 00000 n 
0000056329 00000 n 
0000056255 00000 n 
0000056483 00000 n 
0000056409 00000 n 
0000056637 00000 n 
0000056563 00000 n 
0000056791 00000 n 
0000056717 00000 n 
0000056945 00000 n 
0000056871 00000 n 
0000057099 00000 n 
0000057025 00000 n 
0000057253 00000 n 
0000057179 00000 n 
0000057407 00000 n 
0000057333 00000 n 
0000059512 00000 n 
0000057738 00000 n 
0000057664 00000 n 
0000057892 00000 n 
0000057818 00000 n 
0000058046 00000 n 
0000057972 00000 n 
0000058200 00000 n 
0000058126 00000 n 
0000058354 00000 n 
0000058280 00000 n 
0000058508 00000 n 
0000058434 00000 n 
0000058662 00000 n 
0000058588 00000 n 
0000058816 00000 n 
0000058742 00000 n 
0000058970 00000 n 
0000058896 00000 n 
0000059124 00000 n 
0000059050 00000 n 
0000059278 00000 n 
0000059204 00000 n 
0000059432 00000 n 
0000059358 00000 n 
0000061537 00000 n 
0000059763 00000 n 
0000059689 00000 n 
0000059917 00000 n 
0000059843 00000 n 
0000060071 00000 n 
0000059997 00000 n 
0000060225 00000 n 
0000060151 00000 n 
0000060379 00000 n 
0000060305 00000 n 
0000060533 00000 n 
0000060459 00000 n 
0000060687 00000 n 
0000060613 00000 n 
0000060841 00000 n 
0000060767 00000 n 
0000060995 00000 n 
0000060921 00000 n 
0000061149 00000 n 
0000061075 00000 n 
0000061303 00000 n 
0000061229 00000 n 
0000061457 00000 n 
0000061383 00000 n 
0000063562 00000 n 
0000061788 00000 n 
0000061714 00000 n 
0000061942 00000 n 
0000061868 00000 n 
0000062096 00000 n 
0000062022 00000 n 
0000062250 00000 n 
0000062176 00000 n 
0000062404 00000 n 
0000062330 00000 n 
0000062558 00000 n 
0000062484 00000 n 
0000062712 00000 n 
0000062638 00000 n 
0000062866 00000 n 
0000062792 00000 n 
0000063020 00000 n 
0000062946 00000 n 
0000063174 00000 n 
0000063100 00000 n 
0000063328 00000 n 
0000063254 00000 n 
0000063482 00000 n 
0000063408 00000 n 
0000066287 00000 n 
0000003516 00000 n 
0000012878 00000 n 
0000012901 00000 n 
0000013099 00000 n 
0000013547 00000 n 
0000013850 00000 n 
0000015461 00000 n 
0000015484 00000 n 
0000015685 00000 n 
0000015988 00000 n 
0000016160 00000 n 
0000016206 00000 n 
0000016414 00000 n 
0000016473 00000 n 
0000016588 00000 n 
0000064156 00000 n 
0000064279 00000 n 
0000066364 00000 n 
0000066565 00000 n 
trailer
<</Size 552/Root 550 0 R
/Info 551 0 R
/ID [ <312D73418A31EE521776431F74158928>
<312D73418A31EE521776431F74158928> ]
/DocChecksum /B28D1C560FEB87C526C5115037B1D01C
>>
startxref
66791
%%EOF
#17Tomas Vondra
tomas@vondra.me
In reply to: Chengpeng Yan (#16)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

On 12/16/25 15:38, Chengpeng Yan wrote:

Recently, I have been testing the TPC-H SF=1 dataset using four simple
greedy join-ordering strategies: join cardinality (estimated output
rows), selectivity, estimated result size in bytes, and cheapest total
path cost. These can be roughly seen as either output-oriented
heuristics (rows / selectivity / result size), which try to optimize the
shape of intermediate results, or a cost-oriented heuristic, which
prefers the locally cheapest join step.

The main goal of these experiments is to check whether the current
greedy rules show obvious structural weaknesses, and to use the observed
behavior as input for thinking about how a greedy rule might evolve.
While there is unlikely to be a perfect greedy strategy, I am hoping to
identify approaches that behave reasonably well across many cases and
avoid clear pathological behavior.

In the attached files, v3-0001 is identical to the previously submitted
v2-0001 patch and contains the core implementation of the GOO algorithm.
The v3-0002 patch adds testing-only code to evaluate different greedy
rules, including a GUC (goo_greedy_strategy) used only for switching
strategies during experiments.

All tests were performed on the TPC-H SF=1 dataset. After loading the
data, I ran the following commands before executing the benchmarks:

```
VACUUM FREEZE ANALYZE;
CHECKPOINT;

ALTER SYSTEM SET join_collapse_limit = 100;
ALTER SYSTEM SET max_parallel_workers_per_gather = 0;
ALTER SYSTEM SET statement_timeout = 600000;
ALTER SYSTEM SET shared_buffers = ‘4GB’;
ALTER SYSTEM SET effective_cache_size = ‘8GB’;
ALTER SYSTEM SET work_mem = ‘1GB’;
SELECT pg_reload_conf();
```

You realize this does not actually change shared buffers size, right?
Because that requires a restart, not just pg_reload_conf. Are you sure
you're running with 4GB shared buffers?

The detailed benchmark results are summarized in tpch.pdf. Execution
times are reported as ratios, using the DP-based optimizer’s execution
time as the baseline (1.0).

The compressed archive tpch_tests_result.zip contains summary.csv, which
is the raw data used to generate tpch.pdf and was produced by the
run_job.sh script. It also includes files (xxx_plan.txt), which were
generated by the run_analysis.sh script and record the EXPLAIN ANALYZE
outputs for the same query under different join-ordering algorithms, to
make plan differences easier to compare.

I'm not sure SF=1 is sufficient for making any clear conclusions. No
matter what the shared_buffers value is, it's going to fit into RAM, the
runs are going to be fully cached.

Based on the TPC-H results, my high-level observations are:
* The threeoutput-oriented greedy rules (rows, selectivity, result size)
show noticeable regressions compared to DP overall, with a relatively
large number of outliers.
* Using total path cost as the greedy key produces results that are
generally closer to DP, but still shows some clear outliers.

To understand why these regressions occur, I mainly looked at Q20 and
Q7, which show particularly large and consistent regressions and expose
different failure modes.

In Q20, there is a join between partsupp and an aggregated lineitem
subquery. For this join, the planner’s rowcount estimate is wrong by
orders of magnitude (tens of rows estimated versus hundreds of thousands
actually produced). As a result, output-oriented greedy rules strongly
prefer this join very early, because it appears to be extremely
shrinking. In reality, it processes large inputs and produces a large
intermediate, and this early misordering can significantly amplify
downstream join costs. This makes Q20 a clear outlier for output-based
greedy rules when estimates are severely wrong.

I don't quite see how we could make good decisions if the estimates are
this wrong. Garbage in, garbage out. AFAICS this affects both the
regular DP planning, which heavily relies on the costing, but also the
approaches on heuristics, which still rely on estimates in some way.

If the aggregate subquery is 1000x off, why should any of the following
decisions be right? The approaches may have different tolerance for
estimation errors - some may be "defensive" and handle misestimates
better, but the trade off is that it may pick slower plans when the
estimates are exact.

I don't think there's an "optimal" approach picking the best plan in
both cases. If there was, join ordering wouldn't be such a challenge.

Q7 exposes a different issue. The cost-based greedy rule tends to choose
a locally cheap join early, but that join creates an intermediate which
later joins become much more expensive to process. In this case, an
early commitment under relatively weak constraints leads to a
many-to-many intermediate that is only filtered after fact-table joins
are applied. This illustrates how a purely cost-driven greedy rule can
make locally reasonable decisions that turn out to be globally harmful.

Taken together, these outliers suggest that all four single-metric
greedy rules tested so far have structural limitations. Output-oriented
rules appear fragile when join rowcount estimates are badly wrong, while
cost-oriented greedy decisions can still lead to locally reasonable but
globally poor plans.

I don't think Q20 is about greediness. Poor estimates are going to be an
issue for all approaches relying on them in some way.

The issue with Q7 seems pretty inherent to greedy algorithms. Picking
solutions that are optimal locally but not globally is the definition of
"greedy". I don't think it matters which exact metric is used, this flaw
is built-in. And I don't think it's solvable.

One question this naturally raises is whether making irreversible greedy
choices based only on a local ranking signal is sufficient, or whether
some mechanism is needed to make the approach more robust and to limit
the impact of such outliers.

Sufficient for what? Sufficient to replace DP or to replace GEQO?

I don't think we'd want to replace DP with such greedy algorithm. With
accurate estimates and modest number of joins, we should be able to find
the best join (more or less).

But this thread is not about replacing DP, I see GOO more as a GEQO
replacement, right? Or did the goal change?

As a next step, based on the current results, I plan to ignore
selectivity (which performs poorly in many cases), treat rows as largely
redundant with result_size, and move on to testing on the JOB benchmark.
I also plan to compare the behavior of DP, GEQO, and GOO on JOB, and to
use those results to better understand which signals are most useful for
guiding greedy decisions.

I'm not sure ignoring selectivity entirely is a good plan, though. Yes,
if the selectivity/estimate is significantly off, the plan may be poor.
But what exactly do you plan to use instead? Isn't a lot of the metrics
(output size, ...) derived from the selectivity/estimate anyway?

I agree the JOB benchmark may be a better fit for this. The TPC-H is
pretty simple, and even for TPC-DS the number of joins is not all that
high. Sorry if my initial feedback suggested these are the proper
benchmarks to evaluate this.

I suggest the evaluation should focus on cases where we expect GOO to
actually be used in practice - as a replacement for GEQO. Only when it
proves useful/acceptable for that use case (for sufficiently many joins
etc.), we can start comparing with DP to figure out if we need to adjust
the thresholds and so on.

Another suggestion is to also test with larger data sets. The problems
with SF=10 or SF=100 may be very different, even with TPC-H. Also,
consider testing with "cold" cases, as if there's nothing cached by
restarting the Postgres instance and drop page cache between runs.

I would be very interested in hearing people’s thoughts on these
observations and on possible directions to explore next.

I realized the paper mentioned at the beginning of this thread is from
1998. That doesn't make it wrong, but I was wondering if there are some
newer papers about join order search, with interesting
alternative/better approaches.

An interesting paper I found is this CIDR21 paper:

Simplicity Done Right for Join Ordering
Axel Hertzschuch, Claudio Hartmann, Dirk Habich, Wolfgang Lehner
https://vldb.org/cidrdb/2021/simplicity-done-right-for-join-ordering.html
https://vldb.org/cidrdb/papers/2021/cidr2021_paper01.pdfl

Which does something similar to our approach, although it seems to be
more a replacement for the DP and not just for GEQO. It's meant to be
cheaper, but also more resilient to poor join orders, as it cares about
"upper bound" (~worst case) for the join orders.

It goes beyond the scope of GOO, as the paper also talks about sampling
to determine some of the estimates. But maybe it'd be useful (better
than GEQO) even without that?

I find the focus on the "worst case" (and only trusting baserel
estimates) interesting. I wonder if it might help with the common
nestloop problem, where we opt to believe a very optimistic low
cardinality estimate, only to end with a sequence of nestloops that
never complete.

regards

--
Tomas Vondra

#18Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Tomas Vondra (#17)
Re: Add a greedy join search algorithm to handle large join problems

On Dec 28, 2025, at 01:00, Tomas Vondra <tomas@vondra.me> wrote:

You realize this does not actually change shared buffers size, right?
Because that requires a restart, not just pg_reload_conf. Are you sure
you're running with 4GB shared buffers?

Good catch, and sorry for not mentioning that explicitly. I did restart
the instance and verified that the new shared_buffers setting was in
effect. I’ll make sure to call this out clearly in future descriptions.

I'm not sure SF=1 is sufficient for making any clear conclusions. No
matter what the shared_buffers value is, it's going to fit into RAM, the
runs are going to be fully cached.

Thanks for the comment. I agree that TPC-H at SF=1 is too small to
support strong conclusions. I mainly used SF=1 as a convenient starting
point to quickly validate ideas and iterate on the implementation. I’ve
already run experiments on JOB and plan to share those results next,
where the behavior should be more representative and the conclusions
more meaningful.

I don't quite see how we could make good decisions if the estimates are
this wrong. Garbage in, garbage out. AFAICS this affects both the
regular DP planning, which heavily relies on the costing, but also the
approaches on heuristics, which still rely on estimates in some way.

If the aggregate subquery is 1000x off, why should any of the following
decisions be right? The approaches may have different tolerance for
estimation errors - some may be "defensive" and handle misestimates
better, but the trade off is that it may pick slower plans when the
estimates are exact.

I don't think there's an "optimal" approach picking the best plan in
both cases. If there was, join ordering wouldn't be such a challenge.

I don't think Q20 is about greediness. Poor estimates are going to be an
issue for all approaches relying on them in some way.

The issue with Q7 seems pretty inherent to greedy algorithms. Picking
solutions that are optimal locally but not globally is the definition of
"greedy". I don't think it matters which exact metric is used, this flaw
is built-in. And I don't think it's solvable.

I agree that all approaches are affected by estimation errors, but as
you noted, they differ in how much error they can tolerate. In its
current form, GOO is still quite fragile in this respect and can exhibit
severe regressions when estimates are badly off. Based on additional
experiments, I also agree that a single greedy rule inevitably has cases
where it performs extremely poorly; as a result, my current direction is
no longer to further tune the greedy criterion itself, but to improve
the robustness of the existing greedy choices through additional
mechanisms.

Regarding Q20, I agree that this is not fundamentally a “greedy” issue.
If the rowcount estimates were reasonably accurate, the extreme behavior
observed there would likely be avoided. At the same time, when estimates
are wrong by orders of magnitude, the current GOO approach does not
handle this well, and improving robustness under such severe
misestimation is exactly one of the main aspects I am currently working
on.

I have already run additional experiments in this direction, using
result_size and cost as the base signals, and will share the results
separately.

Sufficient for what? Sufficient to replace DP or to replace GEQO?

I don't think we'd want to replace DP with such greedy algorithm. With
accurate estimates and modest number of joins, we should be able to find
the best join (more or less).

But this thread is not about replacing DP, I see GOO more as a GEQO
replacement, right? Or did the goal change?

The goal has always been to use GOO as a replacement for GEQO, not DP.

I'm not sure ignoring selectivity entirely is a good plan, though. Yes,
if the selectivity/estimate is significantly off, the plan may be poor.
But what exactly do you plan to use instead? Isn't a lot of the metrics
(output size, ...) derived from the selectivity/estimate anyway?

I agree the JOB benchmark may be a better fit for this. The TPC-H is
pretty simple, and even for TPC-DS the number of joins is not all that
high. Sorry if my initial feedback suggested these are the proper
benchmarks to evaluate this.

I suggest the evaluation should focus on cases where we expect GOO to
actually be used in practice - as a replacement for GEQO. Only when it
proves useful/acceptable for that use case (for sufficiently many joins
etc.), we can start comparing with DP to figure out if we need to adjust
the thresholds and so on.

Another suggestion is to also test with larger data sets. The problems
with SF=10 or SF=100 may be very different, even with TPC-H. Also,
consider testing with "cold" cases, as if there's nothing cached by
restarting the Postgres instance and drop page cache between runs.

Thanks for the feedback.

I’ve already run experiments on the JOB benchmark and will share the
results shortly, including a comparison against GEQO, with DP used as a
baseline. I agree that the primary goal at this stage is to show that
the approach is good enough for the intended use case first, before
looking into secondary aspects such as threshold tuning.

Larger scale factors and cold-cache runs are also part of my upcoming
evaluation plan, and I agree those are important dimensions to cover.

Regarding selectivity, I agree the situation is not entirely clear-cut.
As you noted, result_size is also derived from selectivity to some
extent, and many bad cases share similar characteristics. However, in my
initial TPC-H SF=1 experiments, selectivity-based greedy rules already
showed many poor cases, and I expect this to become worse in more
complex scenarios. For now, I therefore focused on cost and result_size:
cost because it is a first-class concept in PostgreSQL, and result_size
because it is commonly cited in the literature as a more robust signal
for greedy join ordering. If you think selectivity is still an important
signal to evaluate, I can certainly add further experiments for it, but
based on the above I have not pursued additional selectivity-focused
tests so far.

I realized the paper mentioned at the beginning of this thread is from
1998. That doesn't make it wrong, but I was wondering if there are some
newer papers about join order search, with interesting
alternative/better approaches.

An interesting paper I found is this CIDR21 paper:

Simplicity Done Right for Join Ordering
Axel Hertzschuch, Claudio Hartmann, Dirk Habich, Wolfgang Lehner
https://vldb.org/cidrdb/2021/simplicity-done-right-for-join-ordering.html
https://vldb.org/cidrdb/papers/2021/cidr2021_paper01.pdfl

Which does something similar to our approach, although it seems to be
more a replacement for the DP and not just for GEQO. It's meant to be
cheaper, but also more resilient to poor join orders, as it cares about
"upper bound" (~worst case) for the join orders.

It goes beyond the scope of GOO, as the paper also talks about sampling
to determine some of the estimates. But maybe it'd be useful (better
than GEQO) even without that?

I find the focus on the "worst case" (and only trusting baserel
estimates) interesting. I wonder if it might help with the common
nestloop problem, where we opt to believe a very optimistic low
cardinality estimate, only to end with a sequence of nestloops that
never complete.

Thanks for the pointer. I’ve also been looking at more recent work on
join ordering, and there are indeed several ideas that seem relevant to
the current direction, including the paper you mentioned. These are
definitely directions I plan to consider more seriously.

My current plan is to first establish a reasonably solid baseline using
relatively simple techniques—reducing extreme regressions and getting
overall plan quality closer to DP. Once that is in place, I’d like to
step back, summarize which recent papers and ideas seem most applicable,
and then experiment with more advanced approaches incrementally,
building on that foundation.

Thanks for all the detailed feedback and the many useful insights
throughout this discussion.

--
Best regards,
Chengpeng Yan

#19Chengpeng Yan
chengpeng_yan@Outlook.com
In reply to: Chengpeng Yan (#18)
6 attachment(s)
Re: Add a greedy join search algorithm to handle large join problems

Hi,

Recently, I have been testing the JOB dataset using three greedy
strategies: result_size, cost, and combined. The result_size and cost
strategies are the same heuristics previously tested on TPC-H with SF =
1.

The combined strategy runs GOO twice, once greedy by cost and once by
result_size, producing two complete candidate plans, and then selects
the one with the lower final estimated total_cost. This allows GOO to
compare plans generated under different greedy criteria.

In the attached files, v4-0001 is identical to the previously submitted
v3-0001 patch and contains the core GOO implementation. All
experiment-related changes are in v4-0002, which adds simple, test-only
support for evaluating different greedy strategies and will be
optimized. The v4_tests archive contains scripts for generating
v4_job.pdf (run_job.sh) and for collecting EXPLAIN ANALYZE results under
different greedy strategies (run_analysis.sh).

The detailed results are included in v4_job.pdf. The results report both
the measured execution times and their ratios relative to the DP
execution time, with color coding used to highlight outliers (<0.5 dark
green, 0.5–0.8 green, 1.2x-2x light red, 2x-10x red, 10+ dark red).

Looking more closely at JOB, only a subset of queries exceeds
PostgreSQL’s default geqo_threshold of 12 relations and therefore
exercises GEQO. This includes the 17-table queries (29a, 29b, 29c), the
14-table queries (28a, 28b, 28c, 33a, 33b, 33c), and the 12-table
queries (24a, 24b, 26a, 26b, 26c, 27a, 27b, 27c, 30a, 30b, 30c), for a
total of about 20 queries.

I therefore also extracted results for this GEQO-relevant subset from
the full JOB runs. The detailed results are included in
v4_job_geqo_range.pdf, derived directly from v4_job.pdf. On this subset,
GOO variants tend to show more favorable behavior overall, particularly
in terms of tail robustness.

For reproducibility, JOB was run using the same configuration as in the
previous experiments. The following commands were executed after loading
the data and before running the benchmarks.

Settings requiring a restart (e.g., shared_buffers) were applied via a
server restart prior to benchmarking; other settings were applied using
ALTER SYSTEM followed by pg_reload_conf().

```sql
VACUUM FREEZE ANALYZE;
CHECKPOINT;

ALTER SYSTEM SET join_collapse_limit = 100;
ALTER SYSTEM SET max_parallel_workers_per_gather = 0;
ALTER SYSTEM SET statement_timeout = 600000;
ALTER SYSTEM SET shared_buffers = '4GB';
ALTER SYSTEM SET effective_cache_size = '8GB';
ALTER SYSTEM SET work_mem = '1GB';
SELECT pg_reload_conf();
```

Full JOB results (ratio = algo / DP, lower is better):

Overall summary
algo n gmean p90 p95 max
---------------- --- ------ ------ ------ ------
GOO(combined) 113 0.953 1.94 3.15 8.68
GOO(result_size) 113 0.969 2.63 4.45 67.53
GEQO 113 1.066 1.50 2.06 16.81
GOO(cost) 113 1.496 5.80 16.20 431.32

Tail behavior
algo >=2x >=5x >=10x
---------------- ----- ----- ------
GOO(combined) 11 3 0
GOO(result_size) 18 5 2
GEQO 9 2 2
GOO(cost) 30 15 7

Workload sum (total execution time, ms)
algo total_ms ratio_to_dp
---------------- ------------ ------------
DP 115710.85 1.000
GOO(cost) 798600.41 6.902
GOO(result_size) 139100.42 1.202
GOO(combined) 154027.19 1.331
GEQO 173464.38 1.499

Observations:
* GOO(cost) shows severe tail behavior (max 431×, p99 327×), with many
bad cases.
* GOO(result_size) performs reasonably on average (gmean 0.969) but has
a poor tail (max 67×).
* GOO(combined) is the most robust variant: it achieves the best gmean
(0.953), shows no regressions ≥10×, and significantly reduces the worst
case (max 8.68×), trading some average workload time for improved tail
behavior.
* GEQO is generally slower on JOB (gmean 1.066) and also exhibits ≥10×
regressions (max 16.8×).

Conclusions:
1. All non-DP algorithms have cases that outperform DP, which typically
arise in situations where the cost estimates no longer reflect the
relative execution costs of alternative plans, often due to severe
cardinality misestimation. This patch set does not attempt to fix
cardinality estimation; instead, it focuses on reducing tail risk among
greedy plans under the existing cost model.

2. Based on the current JOB results, further tuning of a single greedy
heuristic is not the immediate priority: each single-strategy variant
still shows corner cases with large regressions. The next direction is
to reduce catastrophic plans (tail risk), rather than to optimize one
specific greedy criterion.

3. GOO(combined) improves robustness by reducing extreme regressions.
Increasing plan diversity via multiple greedy criteria appears
effective: different heuristics fail for different reasons, and the
combined variant selects the cheapest plan among candidates from
different greedy strategies, helping avoid extreme outliers with minimal
additional planning overhead.

Next, I include brief notes on a small set of representative JOB queries
to illustrate where greedy join ordering behaves relatively well or
poorly. Under severe cardinality misestimation, neither DP-based nor
heuristic approaches can reliably select good plans (“garbage in,
garbage out”); different algorithms simply exhibit different tolerances
to such errors. These examples document how specific join-ordering
choices interact with misestimation and help identify where the current
GOO implementation is more or less fragile.

For regressions, I focus on GOO(result_size) (12b, 3b, 11b) and
GOO(combined) (15a, 17b). I also include a few cases where
GOO(result_size) outperforms DP (29c, 31a). The full plan-level
analyses are in the attached v4_bad_case_analysis.txt and are optional
background; the summary points below are sufficient for the main
conclusions.

## GOO(result_size) bad case analysis

TL;DR:
* 12b: Estimation error misleads the greedy choice, causing a highly
selective predicate to be applied too late; with accurate estimates, the
regression can be avoided.
* 3b: An inherent weakness of result_size-based greediness, where small
estimated results hide expensive scans or repeated execution.
* 11b: Row count underestimation leads to a non-materialized NLJ with
repeated execution; accurate estimates or materialization / Hash Join
largely avoid the regression.

## GOO(combined) bad case analysis

GOO(combined) regressions mainly fall into two categories:
1. failures of the cost model itself (15a), and
2. cases where cost and result_size share the same structural weakness
(17b).

TL;DR:
* 15a: The selector chooses the cost-greedy plan due to lower estimated
cost, even though the result_size plan is much faster in reality. This
reflects cost model unreliability; in such cases, plan diversity
collapses back to a single fragile choice. This is an expected
limitation when both candidate plans depend on the same cost signal;
suggestions on improving plan diversity or adding lightweight safeguards
are welcome.
* 17b: Both greedy strategies converge to similarly bad plans (~3× DP),
indicating a structural limitation of greedy enumeration rather than a
selector issue.

## Representative cases where GOO(result_size) outperforms DP

In addition to regressions, I include a small number of cases where
greedy join ordering outperforms DP. These cases are not meant to
suggest that greedy ordering makes intrinsically better decisions, but
to illustrate different failure modes: avoiding fan-out amplification
under severe underestimation (29c, 31a).

TL;DR:
* 29c: Under severe cardinality underestimation, DP introduces early
fan-out, producing large intermediates and repeated inner execution.
GOO(result_size) starts from a highly selective predicate and avoids the
fan-out explosion.
* 31a: DP chooses an early multiplying join under severe
underestimation, causing row counts to explode. GOO(result_size) delays
the multiplying join until a more selective prefix is built.

## Discussion and next steps

On JOB, the combined variant behaves reasonably well overall: it reduces
extreme regressions compared to the single-heuristic variants, and looks
competitive with GEQO on aggregate measures. This does not show that it
is “good enough” in general, but it seems like a promising direction and
worth broader evaluation.

The results are clearly workload- and query-dependent. TPC-H and TPC-DS
provide limited coverage of scenarios where GEQO is exercised, while
JOB, as a commonly used and well-recognized benchmark, includes a subset
of queries that reflect cases where GEQO is actually used. That said,
JOB is still limited in overall join graph size. I therefore plan to
explore more complex workloads with larger join graphs and queries
involving more relations to better approximate real-world GEQO usage.
Suggestions for suitable workloads or query sets would be very welcome.

Evaluating plan quality in isolation is inherently difficult, since join
ordering is only one component of plan selection, alongside cardinality
estimation, operator costing, and other planner decisions. As seen on
JOB, even DP does not always produce the fastest plan, suggesting that
improvements in join ordering alone do not consistently translate into
end-to-end plan quality gains. This makes it less clear how such
improvements should be measured, or how average and tail behavior should
be weighed.

Planning time and memory usage, in contrast, follow more directly from
the algorithmic structure, and I plan to add explicit measurements for
them in future. Beyond plan quality, I am also interested in addressing
areas where GEQO is less satisfactory in practice, such as tunability
and graceful degradation (e.g., using DP up to a resource limit and
completing planning with a greedy step). Broader evaluation across
workloads should help clarify both aspects.

Given the current JOB results and the fact that this implementation
matches what seems to be a common baseline in industry systems and much
of the literature, my next step is to treat the current implementation
as a starting point and expand evaluation: more workloads and
configurations. I also plan to incorporate selectivity into the greedy
strategy and re-run the evaluations.

There is also a large body of academic work proposing additional
mechanisms to improve robustness. Many of these ideas do not seem to
have a clear “production” consensus, and few systems implement them, so
I would prefer to explore them incrementally based on evidence: first
establish behavior of the baseline across a wider range of tests, then
evaluate a small number of well-motivated improvments and measure their
impact.

--
Best regards,
Chengpeng Yan

Attachments:

v4_job.pdfapplication/pdf; name=v4_job.pdfDownload
%PDF-1.3
%�����������
3 0 obj
<< /Filter /FlateDecode /Length 10881 >>
stream
x�]M�,�m�����h�����m\�d��[��+��_,��DV�H~}4@�At���My!�~~}A�������f>��y����m3=�]��?5�k�����_����M�<>���_������C�6�~�����t�y\>������:������O���Y�i~�Gq�Q4�U�[��������>Z���,���������o�_�<�ez<o����e �C�1u
������c�����?�F�<�o?5����	A!3!(d,(��kf�x9��<��X�~&��c	gB��_�3a��x�X�_Q�c�bz��3��������F�L�������1N<�y��������e���o��)r8����!� (�����:DZ��~�d�����'��o��������=
�B�����Z�f!��	��l��?&�	��c��0'�B�>��c|>��d������������d���M������6q�C4aL�~������34�c����E���8
���
2��m��[#���X��B�	�������\�LA�Cw~�c@���0-�w��������=@��0S����1C<�����6��7�fh����;������7:�^���2>D{�f�5�dn�:�R�\:@���C����_gVc.������?��4�y��>@���`�q�����,��*��������>]!k��������|�������n�{�������Q���"�26��:��C�<��q�oG���!����x����H)�����v�;Q��G�Cu��
o;��=�5��<����zU/l�0��F���}U�}E���ue\7����W-��}E��,N��>/�u�?/���n��&�{�6bV��:�7=��mn|�U�����bonWl�:��]P���1�H�wc���6�?��(3���������ie�����&z&�44�m+�_���:�,�p�H�w4��p�ucFV?X-zs_e�s_��|�g ���7�k&\Cs���x�������8�}7>������5���C�����������N�1mB����G��?�����yA�$-6L43�e���i5�^Ic\����an�d|h�N�{��k����F����g����Fv�C4a��Y�t����/x,��u�;��>�R��hX3q�Zs_��+Kq��Xb�i!�B}�������b�� Vn
��C#c�f���^�O���N����k,���X����[�WC?8T�����c3W��e�b�V���e�������k������Z��5"�_d��u\���F�+[�����c������?�������N�:��[�0-�t����<�=WG���=C����0\?4�~n����f���o
��?����2>n�?7?|~���?l~����������'�G�4��?a�z����m>����'��wk���P0����?�k>�����
d`�WV��~k��Avj�v����h 0�����P`�o���)���0���i����7W�����i!�L6����a�w��t�r���2wF�N������n��5��_}��������_�'���D[��L���G��/�������� ������+�f�QGL�4��\JEr$�4e�/�M������1Xq�~a��{[���Fd�
���/�\2@b5�
����=�5�����@���cs��N���uP=�n\D,��+�4Vt]�x���� ���_"r��G~[)��D�{������
K����������#|mK�K��L���f�n0�D�4M�$X�L4x�V>E�7����TJZ���c��8�K��&��?$��L��@�ZQDY{��	o�]�L�;�|P7��Y%1��y
)��u1��$�4�-Yh3O7�n��sk'(������Xt�)k�-t�F�A�) �G��V�e��G���-����d�aT��q����Z��Pa���S8e.�P�����(���v�Mn%�(��������x��M�t
��L����-������dm���G�b��2��{�]J����Ft���P��|yB�����\�1��y@�	���"���s����1�}��/�/�!����w������z/��fq�����D��X���y�xz{� b�w�V�RP89���<�-����\��zK�C�������������S��\�C<�P���U�IY�6�4Mi~S����B,4*���BG&�r������a��0/,��-:����f�D!.,�l�DY���05�Mb����K<l��$��� �����@�G��E|�L��K$���r-1oPh��%�X%���G��z)�
>�����9Zy|��+����e�����X0��5 ��H��4
=�{������y�����6-�V2,^�(�D4�_b��OX�n�]J�������p\�{xTmn��u�����YR�1��z���������.��F_�t���=���;���&/�c�����{N�2T�x�e2�;D���*�-���M�
[���a����D�z.=��������%6?@�#�v�w����aZ�����6�u�}�����6���Qxz�S�+�o�9��w���I;�5�n@�������'H�S�V�l�j�\R�wh�zo%�*����V�
c�:�C��2+�n��_����2�^;��L:AO��
�>]��QW`~` �C���WW���=
��S�����-H�s��Y�5Lo@�;.%,�yd�A	y���g��VW�4����^�t���B����F���eD��p���E�>��juE�$�������T�G���z:R�G����;DV���WQ���9k���-H-CZ�"�f���7D=x��[.wh��J�����<$�z���-�q�s��������iOz��	����g��(���%�����k���*��@�(�}���
�`��x��g��?�t�$����>��^1�[8�(�%Z������yU��:��+���vA�<�>fW������f
c������F*�.�R#���5����5sk#"^GiF�^A��E0��@hmr���an����io�u���CaL{v1���2	G���[aH{@.]	���b���J����a�5����?~w���:P)��X����q���%�x�����D��X��^Y���������E�(������#�/A���	f���.e�����6N |@�Z�]y]kD�"��-�=	_QI[��.3N��1 ��<�E�����U����u�<�QLHpA����|hf�=�BJA����@��:�X�k�++����*U/�#eVV� 5m���\Xa3�:�y\Kw��
i	�;0��E�,�w4��G���@.���
�0�#q��m������u��5��c;OW�6����x;th��kR�c@@E�L��y�V[����Dc��*j��.���[���DTn�3�lp��^�����Bm]��t����u��b���G�Z�uB�� {�X1����@�� Sg��p_�VZWwB1:@��5\^H��n����m!9��[�E����^������C�}�j����?D���h����H���ZD�5E,r�1�L�y�F�(�v]Cf <_����X���b�X���+����\!��%;������&��
�����.���
iUQ���h�Hx���@B�����F���t>�
����="��S�����v����f���"�2�PM;W�`"c������D��B��P�c���q�$����1��#�J��K3�b�(�o���Um��O�~�#D�W�Tte"�.��b#�I��5�������G�^��:3��G���"?J�Q��l�;���UE�
�`p��������q7�>��[�Pcb����W��^�!���7"_}���C�M� ]�x{�	.��.�BSj����������b����($�j/��#At9w����~:�x�Bh�0+���>H%��"�+��%���C����_
D��j��>��~��y����Z����!�k���gm5� G}�!Eb����|@�k#�b��c�i��=���(��i��]��o���!�f(x�`U��2[�(�\[5LH�>������u���0UL���)*��ih9��Z�����\��r��,��~"��A[�N!��$�,�a@�C�o�C��D���BU#�����#�b�NK:��S���TR|�H
���V��������w��f�	���H�����������n��Xo_�{?�d,��r'�Bd�92�u~�W�� ���D�6 ��O[�*[J%�h�4T���?+���Ii���R������=@St�i<�!���Tu&��{��w�m�$M���$w�E%���3v7����"����C�����)�s�:�{&t�2�+0|2 �
(�Kw�<6|F����o�b�@Z�i���#k\����l@��b�`d���}��}�f�b���Ux%�=~��`=��x�@����b��K�,c�M�lC9}*�N/���_n�3�w���������,�� �I�j1�:�C@������A�l"u�U��'*�$=Q����w�J(��p��L�0�L�P���&O_p�f���"�P�t}����B�vscB�f�I�������26�4L)Q�U��Hf��C7|���<�f�����s���2��0#�v��8F�q'u�O��	R�K[D����;�r-���yi��V�����E��D�YO���k���5��'x���5����[h��j�Fefo�r�������C=St���h����_��BW���-?o"/	YN�"�YD����"�{���	��B�^h��G9}fV^'.6bj�z�:9fP�boR����k@���[��90E���k���B.�=��`�O?^[�j':�f�����\2�����u����"usB�L����+n���%�H8�v�e{4�`"�lbzr5cs-�%���a`�T=��vFd}������'.�f����-�A ��bpOW4��������h����l�-���C6�����9!V:�m>@�������xE�0��6_`����{�\^����#�����Y����%1��m5�?�������C
e��iH�(�#���.CH�	����.!d�Q�[\����G��������4]�H���\���8�7��W5�K�12�hZ��.��~a�����i������3��i���� D��z��u�=e�S`D��H>�$sdd|����J4�!��*1_�b��������T&�>S���5�������t8e�?��jA����j���&j:�E����E�M�V��6���+&T,r����	k�%z��5��������I.x�:�jG�Z9
�i�;���G�.�86V�z�oFE�;sLDB��Z�	���q�z��qOT�hSTlv��9������0�U{y��9P�z��v�>BZ,\b=Z��|�fs��%�C�je��<�����`�z�i�V�j�\Qv	&�G��`{u����Ddm����6��������$d���5d}(M��&��7���=��(MPNP���v���j���PD�i
1O��"����, ��((H�]���n{��*X�$}D���]��MHl������E��xD�%���R�0������"�����F��A_�"����rh����/���xwA���P�e4��V�x���������6��:�X����<��������X��=[iD���N�S{��x��C�y-n���5�������9a���IS��8�o���5�\"Mm`�{��yh	�~j�-E�Pc���z�����XV��(W���YJ���7Z��Y��d��;������r�����a�s���L9�RQ�QA�z�k��6��ZZ��(�jT��q��Nr��3,��a*kD��#o��$�����{���CLL�����lq�-OCy[�O����+�0���0q)� �����+���t�Lt�����@T�\
�j@��Fq��o��\�"MW����RR��Xa;��f����pG�Q�B��l���<���oA�2q72	�P����	H)*�h�P��4U��p�%o�Z���,:�X�@`I��4<���i��a6,d�h'�p�S���b�v`%'FD������H��
�:���yn��8m��E
(\��������~�����+�2����W?�I��v)te���a�+�Oy=�����El�09]�?��[��b�Z$�V��-!��9(����|�a��
FX/TG��,���o1��z3o�������lF<m�HVgzyo[�"OpP�E��O<�-����Ai�:��������sY�c���
�����5
��E����T$�VvAD�C -z��]X�����;���$��]1����"��.r�It�����
c��������gb�Z�5$���KL�!�+g8/O���! �sX�pW/#�S+@p��:�xN�EN��%Wbj���Codj���Y/_P�q���|2���N\�-�����w����j��|��G���G��z���|����%���>���W������"i�$|r=M6���K�aE�m9=g���uA�5�R� )>�����G1Y!���
� $��Gx��EH��m����������������\�.��vUw�8���89��l�{ELto<W�>����
�"�P������
+c�����x��f��z;�<���~ d���C��i]��wKe9�D(w[�\
tpt��vmC5���'�6�Y��:K� �i��b�#O�����Sj��<�y2����X'�m�u�|_��?�L�W�
��M�m]'Y�1�o�Fmg3e���������to1�i�(VJ���1F<������+P��\v���d��]�O{@_��HO+@����1��>�d�f2��>z�}���+z26������e��L��a�(tf���q����<�L����(�LAEH�n�d��1��l0Ie�B��s���yy+(&�����x�w�O����-LB��;��J�ZB.@�E��-�l���A�8X5����]�F����;^�o�����u��8�=H����r��"]Ad�-Q>kD��PC^��$��6E�S��$�k��������V�������3L�����R�<�����{���������i����������X
���e<e�(����<v�s3:������{��k��W��np�/��9[�������_������_D�zC���]�������D����R�>��[���;D��z�i%�H@K��"�t��1���p�,������k���6�Y�dD�&K�������b�pR���n�TJ�)�L,����)RO)��fr��<�IB���h�d,���&�4&	qQ?q�=�/U]�Y�VI������V���g�JJ��(��|/�y-�fbuo"�Pr�zFc"{vn�!!��<������e(���+������p/��.�����l��6 *��������':2��o���+�rt��ptJ���y��h��.Gdh<�a�N7=���	�h���%�X����R�^#)o���/wfR�����DEo&�����^�������Od
_��� �6�?x����,Ij
�!Usm�����	@v�!r�"}����y#z62='�l#��Q�b������m�����
������Z����s�YAB~n�+���Bm�����lR��up,4��D4�1�����x��RbGZ�#��]i-=d4����b���;�[i0q�i"�������b!�\���D�>#��� ��5���)����S OCIm{�S����U���F�f�.���BO�����.��PFh.��_/�<�6����5j�/�X����6�<�{����8X4��6���/]�1bhb�37m� ��6��~����F�M�"M��^&Stn� ���\��Jl����jt(�2�(��il�o�.���:��>�"�v�|Ata���4����!M[����7��C�4@�r�;,���U���+���&Q��e3YQW�5C������?�K�FCqm�M��[\�dH�G&;�Zh2�r�d<��o��?;����n�����dn,B���A�X��,��f��wB����2�5�����4�y�M��%�������`7w�\�	;�mL������:&_��u�$��7J����g����[�� �6��mqvD������~�"�i�EP�}
O{9= e���
W�8a���u	<�R1���j��Y��
�� ?�m��*�}I+��fIr�ZIf��D���	�f�C��xo���2k/�B$���\��r��#L�'J�(�_���h�bJ��5�������'ii
"��O�V'�����C���I��������
�{,s��$�
g��k���BWE�����^�}��c�S$��7�T�U�kA���7Ob��|������������
�H��=���M����q��Q�w�d����O�^s���;T��������C@|��9��z�����bdc���91��#�����-�2�~A��^;,[������{����Jd�0�����-�-L��89{�;�*<0n��]f)B����X������R��m�Z(H�*_�Du�d�;%������&)�i_z{~'Z>��V���v���+��LZ������\r��2��
J*�1�����<\^c��`PtIIp�f��*mZ�d�)*�=��vaB���:�m��`������L�3-�C�.1���J.��>�������k���C����	��:��Y4���J��N�g�k����4[T�)���YC���rr���*c����y�.��
 �I_���(�C�&	����o��{���GU��
C���3U1��%�#Utf��DQ?����;eU����c�� ,��s%���Z�����E��b���5d�Ax2N|����������]^�$c(/���a�y�4}���8���}	���������5z�>�VBH�Cn����V��-H�s;�a��������V��&G+R2@���0�yO*\C %6r9B�qv�'7G`!#���c��>/r��X���h���C����� 2��fMMS
=�0F��p�!{�Y��Xt,�|�o������P"�g�o��&�9o�=':7��U.0����St��	��K�D���������O+���9����62�=�V0���	��,��������s���+1���O���)����$I��]������a+��1����8X�`������^���@tG�{��S�]�G�e�N4����'��r	���F��'7U`M#�So,g����2
hS��!���7
�'*�\��PcD�6�����h�P�#���}���BN���oF_��Q���~�x�+J��{� �Md�v���Dk�In:O�!d�������2� �Q��D�Rh��������h�r�����J:�@��r��#�3bno#�m�������������H{�=e�@D�
PX�HK%{�2b�~��:����'S��x���,R�J���}{8�x__[VL�D<]X�'�+�F���97���CHRexp�m�����U"j	C����`�;2�����$�MCoOfD� �|���+�A���X�D��B.�Pf�C�m�&�hD����f�)�F��P*Q+��lu������2I�.&^�Z��IO/��&Y^z3���6�����������h�C�}m-�rw�C�h:��=���F[F*#�V���!��4s^���2��H��^�=�M�Rl���*�>�i�� �tv}:o�<��.��v��
,�����d�XR�� ���4�Bg.����W,H�����r�2�H� 
W����a[iX�nn&�W�cyZ��	���������S��
N��^n�T�c�����R���%t|�=3=�8~�p��*t����>����m���M����F������k�6u���P�UWP1t�Y����)�����Y{3���2����	����H��FnU�K�E�O�_���Q/{<��[�'E����wm(_��1)R������@���-��)Uf��re�Pl��@O���oIfo�`"z}t�
 $�l�|.8����"Z9l��"^���V�e�a��[��/����{��+��T�S�_�k|�m�F����������M�-��
Z�����GXs��~�V�N�_�����.x�#�0\1(��`=E7H�p�Sk'��$Wh���q�dt���N���'�<$W�Gi����3���r5�BH\�+��,9�������<=��e{^��1��bB�A���|�p��]����`�~h<o_�c!���+�r�AG���,.�����������m����k���XkYXU".w]�Z��v�,#F|�/w�p���Wa�1�����v����@p�V�[����
L�s�&�V���a2+L�H���]��L�8m!N��i��q�b<)	�����O<�S�
�����
<B���v��Na�5/������LK��3FjZ8��|���gCt���O2~����C��2�K�����������$�Z���Jz�*|�����<��W�����
endstream
endobj
1 0 obj
<< /Type /Page /Parent 2 0 R /Resources 4 0 R /Contents 3 0 R /MediaBox [0 0 595 842]
>>
endobj
4 0 obj
<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /TT1 6 0 R
>> >>
endobj
7 0 obj
<< /N 3 /Alternate /DeviceRGB /Length 2612 /Filter /FlateDecode >>
stream
x��wTS����7��" %�z	 �;HQ�I�P��&vDF)VdT�G�"cE��b�	�P��QDE���k	��5�����Y������g�}��P���tX�4�X���\���X��ffG�D���=���H����.�d��,�P&s���"7C$
E�6<~&��S��2����)2�12�	��"���l���+����&��Y��4���P��%����\�%�g�|e�TI���(����L0�_��&�l�2E�����9�r��9h�x�g���Ib���i���f���S�b1+��M��xL����0��o�E%Ym�h�����Y��h����~S�=�z�U�&���A��Y�l��/��$Z����U�m@���O� ������l^���'���ls�k.+�7���o���9�����V;�?�#I3eE����KD����d�����9i���,������UQ��	��h��<�X�.d
���6'~�khu_}�9P�I�o=C#$n?z}�[1
���h���s�2z���\�n�LA"S���dr%�,���l��t�
4�.0,`
�3p� ��H�.Hi@�A>�
A1�v�jp��z�N�6p\W�
p�G@
��K0��i���A����B�ZyCAP8�C���@��&�*���CP=�#t�]���� 4�}���a
�����;G���Dx����J�>����,�_��@��FX�DB�X$!k�"��E�����H�q���a����Y��bVa�bJ0��c�VL�6f3����b���X'�?v	6��-�V`�`[����a�;���p~�\2n5��������
�&�x�*����s�b|!�
����'�	Zk�!� $l$T����4Q��Ot"�y�\b)���A�I&N�I�$R$)���TIj"]&=&�!��:dGrY@^O�$� _%�?P�(&OJEB�N9J�@y@yC�R
�n�X����ZO�D}J}/G�3���������k���{%O���w�_.�'_!J����Q�@�S���V�F���=�IE���b�b�b�b��5�Q%�����O�@���%�!B��y���M�:�e�0G7����������	e%e[�(�����R�0`�3R��������4������6�i^��)��*n*|�"�f����LUo����m�O�0j&jaj�j��.�����w���_4��������z��j���=����U�4�5�n������4��hZ�Z�Z��^0����Tf%��9�����-�>���=�c��Xg�N��]�.[7A�\�SwBOK/X/_�Q��>Q�����G�[��� �`�A�������a�a��c#����*�Z�;�8c�q��>�[&���I�I��MS���T`����k�h&4�5�����YY�F��9�<�|�y��+=�X���_,�,S-�,Y)YXm��������k]c}��j�c��������-�v��};�]���N����"�&�1=�x����tv(��}���������'{'��I���Y�)�
����-r�q��r�.d.�_xp��U���Z���M���v�m���=����+K�G�������^���W�W����b�j��>:>�>�>�v��}/�a��v���������O8�	�
�FV>2	u�����/�_$\�B�Cv�<	5]�s.,4�&�y�Ux~xw-bEDC��H����G��KwF�G�E�GME{E�EK�X,Y��F�Z� �={$vr����K����
��.3\����r�������_�Yq*������L��_�w���������+���]�e�������D��]�cI�II�OA��u�_��������)3����i�����B%a��+]3='�/�4�0C��i��U�@��L(sYf����L�H�$�%�Y�j��gGe��Q������n�����~5f5wug�v����5�k����\��Nw]�������m mH���F��e�n���Q�Q��`h����B�BQ��-�[l�ll��f��j��"^��b����O%����Y}W�����������w�vw�����X�bY^����]��������W��Va[q`i�d��2���J�jG�����������{���������m���>���Pk�Am�a����������g_D�H���G�G����u�;��7�7�6������q�o���C{��P3���8!9������<�y�}��'�����Z�Z�������6i{L{������-?��|�������gK�����9�w~�B������:Wt>�������������^��r�����U��g�9];}�}���������_�~i���m��p�������}��]�/���}�������.�{�^�=�}����^?�z8�h�c���'
O*��?�����f������`���g���C/����O����+F�F�G�G�����z�����������)�������~w��gb���k���?J���9���m�d���wi�������?�����c�����O�O���?w|	��x&mf������
endstream
endobj
5 0 obj
[ /ICCBased 7 0 R ]
endobj
9 0 obj
<< /Filter /FlateDecode /Length 9866 >>
stream
x�]K����������E*~?�d3�,sYf��t#�$���!iR�)���mU�\����#���Y�X����4V��<��������U����S���������V5U
���{���sl�i��m[�
��s<�����O�v�~q/��U?�q��n|.������q�vx����I�/?{�k������U�4�>Kc�u<n���?[M2>��C�~v5X����9�R�`t���[��h��~N`���`�ny����|^�^��p�9�s�w3����4�2�s.����1�J�,��s��\?�z������15���z�ki�}�>g�����a��1
��7���qi�~������&o�_�����W�?������]���#�B�����?���!������~��}��i���v�����~�aY�G&a{8@7���c���5�I�]����`:���#�YD7f�<���	~�]���r+��@�0fk�8��c���"���n�������Y������d,���p��t�t8�0�?C� ��0�V�rA5��>���|���_Kc$�����~V��q��e��]������[YP\o;�[?K���3`���V����A8��3�,8.��`��[���
���`�X`��B2D�"���dL9�0�%%= ����F��������Qf� e�c�jR^s��1�H6�Kc5����I22)2>��'��
$%K-�~YS��<��W�rC��#/�c8a���%&�H�2��}��t
R���u���&d�!>���O8�2>��z2������,���,��3��?�_��^p��C*j�>����rF�,q���1��u9����������:���&#���g�����X>#/c��;q��s�kG�~�4�8����<d|��w]�?��y]���X>#�!���F�=jB�������_/�@>+/c���	]bV�4f��<��:!TE��_Z�^��+�g����'Y��������,���������1���W�A���������jW{�j�~zPE�4e+�c�jz�#�6t�c8��	�5{ �p��c��G$L�O��8���l��hc���u�'K>����'Z� 0�l��s���t���������	:
T���s���+b
����?����e�rC(Ox,�Q��H��o�8'A[n%�XA`�_M�o�00��
��O�j\}��1@����_��*@k�~�e�p��;���������H��9j8;�]�G��b�CD�X����8}�����77�<9�+292����H�F��:��
p��
���@�9X����
m7�v��^�2��gW�_I0������/'a��_�<7�l�8�>�>���/��������Y'�y������2)�2pX�w�t8)+q��������D��}�p�M����/��G&I�l�DZ����e�C24�_)c(��r��q�d��[r�����	vQ;�Z?K� Y�U���D����A%2��:����GX"�d|���'�5s:8���~�������pB�4���C�p����������w����~~%�W���!p��'x��y���P���pw�[��: {B�����=�*.�N���u�����2>���uI}��\u4��������:�	}'�G ��8+�c�3��li�I���If��R\���x�|��W���m��d���Y������g����I����M��j���<?��dNolD���vMq��p7���5[Hi��x��K�l��V��������`�X`0�i�	�%����Tn�����eZ�5��[%�?Z �0�c�-�{����N:����)�]�>pa�v�4��?d�������|V�^`�[CId������?Ly<����64�2>��}����5�Y�ki�H�}f���6��
�XD����D'p���9$Lm-��&���
�m
��`s�����=a����:�<�4�SP�#Z{88b�����<O�O�������b���+���?������k���������o�+0�
��A[���������5�&��������P}�{��o�����M���xF�8�����n���U�����������	�i��YQ
}6���}S�3MYd���U?G�
��Z��VSSU��r���@$�j�AUu���`��VDM�m&����6��$
�
����B�9c#\�� z��P�"$�F;x*o��#�|�em������f�b�������	�������W���xt^�u��f^�U���X�� �3�-����B��-G>�\:"��@5������r���njx��3���U��(f�3�w������3��s����gu�2w l� ��L����tH�X���ncy�S"�M
��������~jW�muF��z5�0�x�v�T��U�R�jh8�M�Au����T�KmY
��4}S~���)bh�����/?��
24�V����,v�I����h�F�2�����c��'����	v#(�N�n��!m�j��	U���* 6*)�4�J,�h��3�O����f�Vm���c�������E��X��I��$�	I!I��[�Pb@������m�����hH��k��i�����{�*��en(\w�k�X���udk
��F�I��g��cl�V@j���cU?���*��S�0����-LM�L,��m)�
��
$�X=h�z����@q��G�����=����	\�2)�|N}_�K�{{hX�l��M�5{ Y/�%�d �m=�N��
��K4$�2�`�q��������T���#h��p�aF��qk�q�v��i`����{bm=_����k{��c��=;1��<��	L�������v"�6�N���j6����p%���f����MY���: 7 �~��s�g��I����h��v����Y�8���e�Q�8�!"j����B��m��^�<���"��~\��p�]H�B1�ec&��,
���q������m���]�
����H{+�^}jd"�BN*���%:�iH-��
D�M�F���Qj9���x5�g�D!K^���F��%�$�(Dto�[���j��BI.o�VR8(�^LNa�W?���Klaj��xI0o[{�����a*<�G��Z{���O���$[�[;��#��&)x�a~+�������������Ix;�Bq5o��z{ND����m�y{��{M���$���Ho/�.pg�6t�kTW����\�GT��4���z	+�e�j&(8b����|"�#L}y;i[��;�J$��&��%��I����Vd�Nl�[*�xi��,�$��="]�>�[L�n'=R6H�������O��5(�,��m��e86�Lp4J������B�m��[!W��6�K(���$��Zh����lD���rm�y��n*iK��`������7J�Q�1S�!i�
z-���H;����U���H��#y-\cG�JI��5���aH���Dx��F�~���L�#.�N�A�r6����t������:N��Sc�O�����6.��Y��v�4u�(�2�O�X���o�����������Yj�[�W:��v��U�-P=�o@����p;���J��Iif�����������h�q#y��$@�@�H�'!�?��(Bb�"m`�C��+`�iv�|����._�s��z�S`7�f��[f�	��5����T!P@��/x"��^!R�
j�]�0���R�
J:v��>�}�(��Qz����H�p"%]�����^7�jCMR2'5�v`#�d�F����%<������up��8h���f��C)_ k+� ��!�\���%��X�@MBE����#�&&����z�����M.����*��o�P����>��"���xa��4��6��|�"����i��At�"��="W	��]T�J%��Z{pZ{��@����G8� �Z6
��b��m������Y��	�H�56\��8����I6z�v?&��[5t���m7�c����It���wE���=���Z �l�K��O ���="��'N�pv���J��K�^B���q?�|���f�"�
gt,Hx�*���������0S+-�����$�z�x��z�c��\�E��JvD��cE�K�M��QT�e��n�il?o�Q�g-��}�Ic{D�Q��Y(W���V�����N�t_�����%<��)� _'F.tg��[�Q
�g���zW\��x�20�����&�V�<�0�G����
�{���������By-�l�Z:��#]��CL���m���W���,_�����jo�YF��k���lk����~n�_��[]��?�_�#J�'(��S{��S�T�6 � 2��cE��.nH6J�����k"o��Y@��5������<#�Zx�L��m��F!��RF��jHs$��i���^z�!������]����#�����T��"����5�j�Lw%YR���#r�V���S��B����A�Kb���X��[A.5�Q�'I
�{\"������d�E�{;a+,K0
pS'w��r�DA�0uro���w���l�� EK����2d��O�na�;0��K�;1l�i�N��_;!���f�X�$�p"DBO5
ZS��2g�pr"������,S>�!��\�;_����H���������T���=[k�]�b�mC������t?�c
����Fv�47���8��N�EO�c"70��E^���1���������(�
��2����m�u��^�O�6Z*��
q��J�o-L|�UNm�-O�n@���f��E����>:]��= �����*��<�e�e;\S-R��.��q�7��4��a����������*z��~PD�����m����H���-�)�i�~LD�&����I>�K*���m�+t��Q��m$.r�OD����<kQ[Ue_PJQ�?�.�_K��`)E����d�z��gC����&��^���$�
C��5o��J�^�lJ:�6
�%0g���9;j�����
L���(�n�D&���r��"������~)��M��$~2��{���6�Ha�F!��it�zr
�t��W�+��!�|+=Y��a?���HW����[S�������������SU=�������t�����5Hu���31x�M\z���P�3]*���b���pN�<
}�
\U7���)z�&�hW.�������@���3�oWF���!��J�{�'�(��lmW�4�U�hj���v����i�;AJ�9�m��F����3(�
.�Vr\.U��\�)_b.������V"�t%q�V�1�<��]j!���H���)9�r������V��I�F{�0N��|+��
�y��8�Xj�m���x����i&xl|���jz(�
7;-K��P��}��r�I�^���i�9GO��_c�[����Z�����v"7���a�����D���]P-o"
I�d�#��6r��=i�H$�i{���l�OU4��YN�l��AB���I
=���?���bak�P)�	I�����^����v����I���W��bazS�]H�H��(*Q05�U�	);��#H���v��!��	M�"��y�^r�-���v��r��de���P����W7$�����$���5L��,����c��v�v �.}R�`<�9db��cd��8Q��I�u`�3b����U�w[���T��D�
�$�$<�v��Y�=�A#�������?*��#��mQ��N�]�d��=�'���!_a��o�w-��@�t��]U����M�D���@���&���r���!rO�c��	��X�����^k���-���L�l��:y�)���y.E�maZ��v�����5�m�(��%�O�$��
D\������Htn�>��A{��i�w��_��N���B��wGL����|e�bx���$���N���=F,;��mH$T�0�r�)��/�'�lS[KU�<&�l��l�����
Db#])D���>P�G����������"R���q�$����_��-P�$w~ ���6A��htE�;��7}��
P}�rKB�<����2o�RTvs�I�mXJ8���?!�"�m@D��D�+�mDX!��#�x�
D;�}q�D��o��@+�������$+l���cS���3)m	�y�L���{S�G��60uR���!&R��A�����g}r���/,\�Q�T��!!�m���vjo���O�����(�<N����#T��6r�#o����3'*�/��T��������c&��Pj���l���MH�~������	.�������h�%�5���]��
i��� %>,������������cM;����H;�5
oBM.������\:"��f�=��~R�6�'�([!

6�������_����3� ~��A8(qx�Gt�*����<��2/"�[��N�W�PA!P��g�r���������	(S�]�c� �-L�4�
��Jo�JuVfC����NO���Tltf`�q@�&1�6c�{2#�6r	�M����nn��>D�r�x���R�koxb[��T�bX��D8��;�c[m+AFx���a���Dr��va�a� E1���#!����Q��;0��2)t�P��@r
�:?������*����d����nw��@|�Q9�����F�{���
��i���u��_���>@��?�B��cu_�T����xNx(��d"��@"H�� ���=d��QFq�$�H��s���)��`���$�������0D�6�=
�c�J;�����s��&J6�$�I�H\�9��u��;�B����=H[+DA��l>��6�jn�F�T {W�G����ZH.�0��pD�Q�C�4���0�joar�^��b�d�W{D.�F��zDYG�HX+Hb
0#f�S�,)#���
Hr������$���y���,�Xm�����#"���^�Do� �P�D�~dbo��h�2 �''���O�cF�s��IF@��^`�;H��F��9Xa����,�3���*�"���lC�4���t�Sm�5�z��P%���z��I����J`�mI��d�{��y�R"7�$U-m�=1��$n@d���H�~Q�k*��<C�n<���>'���yX�?���`����	V�8Hn"��r�E-���:��	l�0����z��'"u�N������������b�n`j���E����;"u�*{�����(�[�:>����B:"��6r�W������Y��%o��-���O�V��(5��gC��\��d�q��r(P�R����4�
:4l{�0)�)-X������Eh-11����E�3$JqS/W�G����6@�t-vZF��	y����;�;,-��-�6 �j���|&A���e���
��-o�m��P�OP4��K�R]
\� Aj[�)�+L%$$�Tbb�{��Z{����Z�%�K
Z!��	��&9�%����6@���'.�:iQ(#O�sA�Frt$��8��������N�����c+DHL�����re��Q����zj
KI���+��G��K���H%���?c3``�����-�����a���g9�Z�I�1�`'r�|P�i����I;�����i2����O|��_����}���c����ZA
C_'��ycD�O|m �����,��hO����BZ"�6hIe0�IRB����_'5�vHD/�(�p���M�]|S��6����?�"<���v���rCtm<�s�U'[�X�s$�7�tj��$����]/g93/�����k���;9P��GB3��jT��t�6z�9a�N�Ybl�(Lj�b$?�c���%P3��Y
JG���]�T�0���R�#R�� wmF�x�?�����&��=	r���]%6���m��F�����a��q_����W��[�lP��pyOA^�x��T����o������.�=��
�������m/��u�����H���
��~b�fs��O��z���WW'SB)��J�{N�R�T����s��{EJ�����&�|y;����fR��������*��4^/l��2eH���F$����y�reg��q�G���TS28=����Q�B���D"��{�D�m#Bq���h��dl������I��C������U�uJ7sk�+��s�$���<��Tp	(����F�7/|��sT3�������G��5�F�f*��R��'"�;bL��=�/*kR"r�n��7�&��F�����
�b4]�8�W���71��F��%�ifO@��&7�����]�Tv�T��L�]-}�`
�em��.����@��@�����+�jAb�0��8/7:/��Y��-P=��x�C������-P\uQ7��*�5�8 �
�R���@I'-H���I�i���$��n��d����A�C��&�������q�����5�����zU.�N��bc�Zg�Z�w�(�ds1:hx�a?a`%u��\tp5��]�?TfXR	0����w�s��N
&bpi��!��sJ��XTf0�Aec%9v������_j�#_�������AC��%�1�Y��s�%'4?��r�1sR�$�a/`��u0��������u�"�����aj�Y�y����%��-P����\.��N�4�������
E���r�p��n*a)�g�stDg�����e������)_� ��m�R��H����r��B���������=Uj�|FR���_]������B|������^�������E�{�i�D���P.)R�l������'��x�`0m.��w0#�O�Vl��kX������j�nc?�����wv7�"����y)�)��="7��(��@�u�4�����W�i'���?�&�-^��N��,v��n�--H�z��i��?�Pq�OWl&�*w��B
��&`�(�����y���6������������8�������3�*&A|�l�61��+��Cm���6�'m	��=b]�O������3������Th�7f�wPp��mw'��~������<�r��pl��-!j[���nL-/�S�|���bm<(�Q��uu([D������=�T+�>Mx�`�*�Cr�^2|F�8)���CH|��cv�8S�BT�������A�8��4b�<�D��K4�.����HC�#����~E�:_C�=�Fel�����y�V�Z�&d21�j�������I 
��WTQ�0������Eg��-���bkQ����O+�f�&b@�Nm��0���u��b��"%�,�@��\��p���o!'���H�} �[+DAFKe�3�u�9�uI���3>�8�u��\2���e�u`���l���|����S��N����r����H�e4�b�=����A���0��g���b,(�������-H"Et��~��l}��Il����QDb��~���l��1#28��5Z�D��F�7�	�����
�������.��f���a�5�0�F�[>)��.-T�2����_A?�~����@R���@{���[��{�*��]"����h�_����7(��&6���P
��4&,i�W!X��wB��)@;�����xaUvg3���|c"G���3�4vOh(m�yt��fx������~��T�#��m��(�OS����V8�G�"c~8z��������q����;X~�%$��4�v���/��g����>��f�+�
endstream
endobj
8 0 obj
<< /Type /Page /Parent 2 0 R /Resources 10 0 R /Contents 9 0 R /MediaBox [0 0 595 842]
>>
endobj
10 0 obj
<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /TT1 6 0 R
>> >>
endobj
2 0 obj
<< /Type /Pages /MediaBox [0 0 595 842] /Count 2 /Kids [ 1 0 R 8 0 R ] >>
endobj
11 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
6 0 obj
<< /Type /Font /Subtype /TrueType /BaseFont /AAAAAB+Aptos-Narrow /FontDescriptor
12 0 R /Encoding /MacRomanEncoding /FirstChar 46 /LastChar 122 /Widths [ 260
313 507 507 507 507 507 507 507 507 507 507 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 722 0 0 0 0 0 519 0 621 0 0 0 0 0 0 0 0 0 416 0 487 514 479 514 485
278 450 0 224 0 0 243 784 507 505 514 514 309 443 296 510 0 0 0 414 399 ]
>>
endobj
12 0 obj
<< /Type /FontDescriptor /FontName /AAAAAB+Aptos-Narrow /Flags 32 /FontBBox
[-457 -275 1092 1010] /ItalicAngle 0 /Ascent 939 /Descent -282 /CapHeight
657 /StemV 0 /XHeight 496 /AvgWidth 519 /MaxWidth 1171 /FontFile2 13 0 R >>
endobj
13 0 obj
<< /Length1 11008 /Length 7581 /Filter /FlateDecode >>
stream
x�z	\T���9���UT��P@��RZl������� hk�.����(��]�K�nQ���mzMrQ�?5=�L�3����tg~�L&����o���$3�$/�-����.I�������;�|�[��w.��u"5�D4r��{�������ox?'V}��v����LB�����.��A(J�������<s{�A��u�L��?*�#>��\��/�	��������P�v{:%�5?�g���}�C�~x���w���!*]�{���lE���(�C��)�vZl!�u�K�3�6��?�����/
�'����{��{�C�_)"�Pb7���|z��������C+�3��4��
�[2����YsSF���4��?2�R���iA�����
���~u��nu��}M�\��us�j��-��\����*%h��4W���
��\��m.K��\�4�X��b���">h.L�,��X�f��us>��y34?���7q��	~�����a���'�y�~sn|����y]�G����9+�u��L�9=�)sZ���fu��
k%��b��D�9���i��>e�6A���mNX���4��fSN���U��
M��*R�&���������A��5�:w�C� s0
j7��`�1mm��a�
�&���\M���l�;��[�f����:cXCT	r�9
��jP�)��N���gQ����<��RP�4	��`�#wgm���PCc�k����S�P|A�p��u�FPt/PTa�k��O�����"R����������db��CA*�T��8#���X�����/2�����2 ����t1�k�.��At
�wu����=h��N4��Q7P���>��>E^����(��8PC=0b�{�~y� �4��`�K�����;�O�3��P����a���f��o�D-@��Yqa��s�����:2y�����c�#�C������=����������������475�];w4����l���ZYQ^VZ�b�)�R��JY�v*�R��REUZ*�BA.6
��h�e���*.2Y,no�c-&��#�[�p�0
���u|em��+x�Q�R�XM�_Of�B%�*�w	%vh{�z�XB�Z�Dw�r7�	�&�X@��q��X��t�N���n�-���ZP ���S%�r	s��w[������o�P��%p�.wP#�*����(�����q��Z��W�"`o
���@b�k
Xx��z/�P���B<>Q���'�]wt��'�]7(Lz�_���u�C�)���x
H#!�HUb��
J!���8�{�A��`b�Dm�nSR�N�[��9w}����<m
�mR�N	Q+�GGz�"
�Z�t��(���9�0��
�@�����0�n�q86-���h��'���;�LR�]<	��m&�Q��=2�(m��44�n��/����|�R��j;���k]���\m��iWB��s`����Eh=&�y��]��J��s��&���S���V
����D[��6�=���C�u�lik��/�	n�rh���<B��ENW�n��%���@���X�f����%�Y �����|�/���G��(I��/�V�||;X����m�r{an��{�/0-0��k�-/�j;��lp���	�����'c����^d�����"���#������<@Q���R��@1��:<`� �:�D�F�J}�+���;x������M��m
�}���`
����S�(�V_�ns����K
�;�l�~���m�+�r�l���
��(���h�8�a���q�/�+D�T�<��H����_�A~���j�J���k�d+c#���}&��M�E"�
��\���xr��zK=��Z*L����$�=h������x����J�n��#S��zX��)�5���y<�
A�b�<�./1.�5�>�j���
��XD�$�!ty;y�;��E�����+�B\2|@�����az�����~{����H������`W���T�[�@BY��������kZ��dV}��@�\���������NT�,�����0�D+��)7����a4Z�A�D�g�����(�����*z=t����
�("<�����3���@A(AC_N��B-�a�"�.��W$T���,�_P��0�����x���d;�s�e`Z,���K�8G~�F<�
c��|bh$ �wz����	r��H�<��M���!N�&&���V����UVATdR�tWZ����g�'	��&�_�NHzw��"���D���#h�q�p���u����C���� * ��V�6��x�p$��	uv"����#l`�B�U���
�
����arC�Z|�@Au����V���#�_�@a9�=`0�W�|�}�A�h�iI�@�h��n�	4��d&�xx�0"��
�BV�G	��$I*H_`��RL�
�)���
��OG����Dm
a"#�l
��_^��TAp��mT���@������V��x����v��[s���9��!��a�Z�"�W�������=��U��������N0�@�!jIt _�O��P��d22n���R	�<@UB��'�B^�~�C�K:
{��_��z~eFR[�jH��V�q:�Qu6�	���"���67*^
)<��;��"1�Dn@���	P} ���=�'�����A��+O2K�������/�@!��P:�w�}bn`b:�H8��+>$W���aH|P3B�,�.�����l�wM�"DR��0t���f!���N�9<c���R�	bS�KM�9���B�J(s�@��� �����p���{�R�Iv'^��Mh�t,�%����X]�L7�+n?�#x�� ��U�8����qE&���m�Y[���`�Ht$'WS��:9�)�������k������TXx%���"
a?�B!/p\3@"4�������v��;���q$3 YL��g��U5����#������W��jd���r����F�7���w���xi}�Z4�h���E�'����&�����<�����o�5&�3D��/P;�����v����������?@����$[��
\J����1s5Qm(��B����,�t�p}�2�*�������R���*���9�����`�������tx���x�
��XdBq(% 3��E������$:
��O>I�� �)G
��PW�TpC����zx��"QTh�E�Jm���_����q����y����:��,Uv\v�U�����_�I���"F������0W�����v�����WV\ja�4���]��&��ed�������""0�G
?����M�>nv�!���v����&�r��fg�"Y�Eo�������u6>����{�,+�{�J,���������E#�����[[VYV�?;4r�ts���U��_2��t>1�2�������Z���������]�������k`SI�fJ�689��9��cZ�.!��a��Z�"�W��g���GF������Z�=s�>}6�q��=����(�����y�{d��/+x��4w�mFxp�V|	�������EV�2P��O�O���G�2��8u-��.��$D%)�%����0,
���2�-����������6[rv��%J���N�,�0���M�`$(�-K�?��(�
����������O�rw�><������~�d��c'����Pw�T�?#����[�%{��^�^��p�@o{~�~�o~d�5�d6�k�$��9���1�;���A����Q~����p,K��Eb?�i�
��r��w�_�����i��O���<w��Wn�}����8�oh�'�f����Q�s��jL+L��l������hu��p�[&FG�N�Q���Z����LHEDJ�I�S� ��Q�p�h7�����<��<,�R�'�lrVn^�FE�h���9�y����_����|��'�9����w������:���c�s��C���g�+g���*kqm�o�ot[3�=����"oI-����J�g�_��G�����H:O����%=�3!�F#U��L�b�Z�l�����s����G��A]C�iY�Rl�g�7�����w�������e�e{�w����������H������������<ib���l�����]���/xU/�w4�lh��\������>��}k�'w,��w^<Ov��-}"��*g�Nm�4�!#f���,����{48��0N���#�
��-�4ItHt�b�\���1^�A^�j�/;~w�
M�v����8�����2�lo�������m��?������Sm��f}���y����I���;5&#�j����,,�#��x�����(JJCa�����v����7?�����}�M������Kg�����tG1{�w��#���}�}ky��-T��+��13�/AV��41Qz�
��E��HZ�����[)/���d�G����d���LegG�������\�c����[�>���69w�e��3� � ��/���a�0q(mBe��93T�����U�z�
�V���������xc����R�������P��"��f�|Z�.+�
�"{K7niA-[���)1&H�m�y��"D���+��<�T4��<�8frnn^T"�?�������������C]3��
-���;
����e������F/VV]k�in��7���p�//-r7���g�����2��74np�����2.�5.U���,��B��F����K���}������hcc	}"�f�Ny(Z�w&����S�z.����
��W9���fC���,|� M J�7z����������4��{�W���������8	��<K��rf�9��34�	�!eb$��g��I�.������CiW���&[��/���~���xy��AVaE.gV�R������XU���X������H�&���X�EG�r?l��RI��)�-���qbq\�����"�����N"�,!T��LA?w�I������UEM������{z�1���g��{�7��|~��������X4�����o��XKb?�l��e�3����0�R^Q�CJ<��2����(�1jy�M�-��R�����=0�f~�+3�la����[/.n�.n�q��q"���~0�����5�c��y�XBXG	�H�A��r��>	$���d���]������|��N������5��������������??��04|������
���.�o'�H����1!5"
�=�2��-���n�<����x4�]f3g}�/�7^���������=�����Ke�W��#_��ro/[���|��;T-U��i'B<@L��$�C�d�l�2�	�0(,�A�����1���RL��gY�������b�	6"5����|� n^�����ZZ%[4
���t�+s���o~1�T�����'-���*�����[���������5�$G:m��E4~�|V�F�bV����Xgz
Q�������������$X�	���KJpR��6%!"	�UrH����"��t*9[�6`bZX����������M�Ka�[��}�:O�e7���6�Q�������;��J�^����U�(���v{��|����8)��+��_���)mUL�hs��f�]	`H���w9��cZ<��Z��f&�S��Q�1��hTa}r�7��(�('B�A��w.�h�-)	���5�>7������i-}�������&���;A���E����N�H86�k�h��h���O������J�����+���F�R��R(����;�F��g�_]UV�:�r�2m�~�2uk�}c�S-��7�����CF�	cU*9�g�~,z(9N���� g��l,�P�gkvq�e��kX���Ko�����-]��/k��AW?P���a�|���a�0�T�����$!��a�`K�%
[����-m����)� u������:���.���1�:��aQt_��q���
��)�����x� @'a����z�,��D�B)~H>�|��������.�n��K��.��o��r���b�������s�	h|U��JGt�����w�_�)py�|��fGX
�i��~�d��Ep���������P���8���/c��jk��1?�T@}��I*�
?��������ib��??�wek��^��e�*uL����L�a����c`
���cb��,�w�+cea�7�]�[��G��+���P����5p������zf�fK�t�����)�������s�c��h}yo��s�K�;�U�Y�;��5p�YkM�D$���jiZ���})DW)t�����Z�����hd`	�������g����,�I���ab�Ir��C����Q������	�S��]�p���+'�j'����L_��3��V�d���3�����L����z���R9�{�|��z���@�V��g2��G��n5����j�Q>����Xy;�N����}
�E��x��V����(�~FFb�$5z��" �\�0rn��[����Y����[�g����Yz�����?��ubn���d1���;��
�xL/���dL_�dp�'zx��������X59$YY�I:�'�"�CA'�r>�e�Wd�R���������P���s���_'%��~��=�������������~e�eM~�[��|���^�6��*��j���]m10}�	����4O:��"�UmU#�B'���v<�D�ZB9�Q0�"�'������IX-��,O�����g��������g���t�������fE�\nx����a'��3�z�����������������O��L<����0u��w�nJ�N>M�(��"��1��h����2���+���G;��i��z�NmX��3�3G�=��0��������1=8W��q1)���)�1��<�Qa�'%�,���,-08r\yB��[x� E^�����$�	��mr�t�1.����)�W�K��xw�<��	���c�������5_���g���
�[
z
��g�'^��.��+-}v��|\�+���n��t�t�`��C�8��Q��3����c��B�F���04m�U�6X��X�j�h#Q�1	|���(����=b#Wl$�j�C�'�XHn^4D3��B��I��g/��������ol?^���#�;�vX�����7������~8v��
�]���%����I��N;3G��o�������Y��o>[��sd7���O�_A��u�������� �����`��KD��)*�YWT�,��).��.�Y��(��$���p�8�(9{~�XVp�m�C�H�>��P��o��J��{[�a�'�<��JO��P&�E�Q*F%`�e�U��h��k����?����3j��<�������&���0�����:��|
�[����V���G�����q
endstream
endobj
14 0 obj
<< /Title (v20251220_job.csv) /Producer (macOS Version 14.2.1 \(Build 23C71\) Quartz PDFContext)
/Creator (Excel) /CreationDate (D:20251231041342Z00'00') /ModDate (D:20251231041342Z00'00')
>>
endobj
xref
0 15
0000000000 65535 f 
0000010977 00000 n 
0000024067 00000 n 
0000000022 00000 n 
0000011081 00000 n 
0000013890 00000 n 
0000024206 00000 n 
0000011178 00000 n 
0000023864 00000 n 
0000013925 00000 n 
0000023969 00000 n 
0000024156 00000 n 
0000024606 00000 n 
0000024848 00000 n 
0000032518 00000 n 
trailer
<< /Size 15 /Root 11 0 R /Info 14 0 R /ID [ <54d906a95151565e850ef184ba652e9d>
<54d906a95151565e850ef184ba652e9d> ] >>
startxref
32726
%%EOF
v4_job_geqo_range.pdfapplication/pdf; name=v4_job_geqo_range.pdfDownload
%PDF-1.3
%�����������
3 0 obj
<< /Filter /FlateDecode /Length 4756 >>
stream
x�]M��8��W�X}�\��B�&8��������~=/S��,�U*��&�������S������R���R��u�����TvS]6]wm�_~(�X�\~����|�Z�e�?_��v��cS��|���s����
�q9v#��O��:�k�����e�k[���teu�n����S��M�p��:N7]+���=��������|^�w�X
��[�f�8�6W�<Tk�f�j~�Lp���v�c����l��.pt��&��Sl�#��p�d-pt��7���{N�[����:a�,�i�;���~��������4����b._,�����c//�����^� V������	Kl���F9��u�p��y#Vn_>�����	&a���k9D����5`-����+��`�����D�������J�\'7ct,p�4�Ci���bT8�!
G�zy�C�f'#��D3����1bD3F/����m8n����C���L�����c���|1�8��+9[&���%�_2��m�&��3~X?����51��d��-�5�k�wYx���9l�x�	{y��������
<L�l���X'��wRt�G|H\�$-ITC�zY�<����:B�fIVd�8&�-+�y�'�$���FM����1�R���O����O�.����95F�Uz�fle��`X�EMia��X{S��b�7�;�7��x�,�h����o_�q�6����4c���������o��+�RYXcv�:�f����q�����/o����6��{�����W6x||�*;�h��/����N}������7��&��A�(;
G�zy����0tE����f�1:F���L��m8~���TZ6����������2��k��Yf��%�wTU�6Vz���;����]�\�F/+��^VJ�rY����;	+��9	j��e�������O�a���n�iM��QK�oHL�x�	��S���2��J�O�C���#c�)=d��9f�pl�]N�jZ8������p��:vReM��_�	�IC�_�(��|�\|�Z~��U���o%
}?�����|�\~|}�a%^,�T^�������������/�	�.�y)�\�����+�G�m+D���x�\n���	^���K���{0������F��k����*|�~�Qj��_�*P���=~����X^�Kf�0��|��������Q�W�9%��wH��1���p�8��AOa����~v�������|�ot����z�o�����M����iQ<�7���A���.������n����M�LJMq�������������|���"�|D|��|��4PWO:4c��	���L|��_>�`�}yAN���1"�
q��&����=zq1����R`���AO	���:R�#��@�t1aVgjR��~�+�R����*�����-/^+�	��q'<	������8
C|~�D3�� �YZ��33`?1p
�KI���aNel�bP�l^������C�}5|�
����<L{y��UN!E��#N���15��QLCo0��
S��x�`��(�i�f�i<S;l�G�s�����Ab<5:w�t:��������gi#�3u�<�MX���
6f����h������sju|D��s9BM56^9Z�@�n3��'�s�($�^�(q�\�\|���f�$��V��"H�w/������j�OK����C'R4�����Cn���%�����90���#Ha�IM�=?��a��M2e����1�oC:��UP���u�F	I`I�,7�Y���v�>?�Y�=DD"��E��(CX�������o�F��mD�Z��������f�w��x{��5z��*�c-�>7���g26�$����\SD{�s��j
��������rFUc��DMY6�����C�#�S]�T���3�b��0%�vWs�O��l?��f�BK���v��^8���A�"9�[iY�D��'i�e��o��+��L��i,��;�A�`[����O��Cn��ig���wF���d�cDi��y��
H�����udS��<����qX��_��<
�G	j����L�bK��7b����si�k��qh�r�����l���1�S.��P�#������9X�g/I�}���F�R02�{4|\�]���vz��)'�e��8,��;}�K=���l������mD�WRp(X�SC-Dy}�3%Y�&H�V;�R>�����aj�g�9���)��1T��}��l��(����Y{����Y�Y�����A�""�k���iAdk�F���R�����!����g�6�%������8��N�b���C6f5�����1j��� ���1�����e��vf�f�6�*�[r��E{��T��r�p!�\���
)_����o���$�J"Z����*Y�${������F�����
��z�q$���7�����l���>��8:P�U�yE���8��������6p,�H��U��f�Y���!Q���R<���E�=Hx#��M������U��?���01�Qb���D4-������*����Z����h�d3�i�#YY�(}��on�����-[�j��#�[�2���:���G�H'ThuZk����fku�F��o�2t����z��fX-;l����2c�^�tS$?�s
k�X
e��6$����>#�X�#�:�h�CEc��@�EZ���m�����3 �X������@���h �q�+D�c���IP�m�Y;k.����UA4g �Ys�i����4S�A��s�D��?��0��iM�.���7�Lx����|���j������k�D�q~���QLrhs����y�m��Nw�G_2���E<�I�Z>K�6P��E<QD<hN�DV��yM��_gX�k�]�U����:U�����6e���?��������,-Jou�����i�eC���������������}��x,�Lx���4�m��������j��/�,�1L���|��F�
W��F�(G,�G��*"?�6$�E������F���Q:��u0��8��8�r:�d���d���z�?E�Q�n��tS������)c�}V�=�,�hIS/&3x����a��
W�nA��Ls�'�~�`j}�|L��1�Q�64)X�[�m 
6����������$R�S��YI���8����=(>��s'r|����a���a:�W����QLU'1���g>y�((}x����1Q<������|�|����@�d��7�����W��d�H9��q&��kY�}9���h�*+����	�h{'�����v��Ls�W���M-�������Z��D��H#"�E	��3��0����g�����H?���u\��&�;]r����8i�7"��6-���;=��:�~���+E;3����I�*i��~�C-�����M����Q��.�u��^?���^Gmy���>P�X�#���2`�(�^�mz^3{N:`I��Bt�l�^/8l������%Z�09�3B;����X��ukLg8l:c��i)Q��i��.4�x�"��=�r����auX����w����?u���8W��Z���������(���
H��%��,���%E�KD,E��C����2�+v	���U���v[%�DL���s�	v���y��v��ES�f3s�N��A��)����"��o�f5zp�Pmg��G}��1y(��S��-q�h���%s7g�f�g�u�d}��<Q|���Mr��h�����Y��!�n6,��I}����Jj��0v.���/8�9o�]�=w�9�a�}���
���t�����']0�C���y�'���6��������7�h7e�z����e0��B�o����e�.s� ��\�)���@�9�9�<���r�y��y�+w���=��9Oj��bd��#H����)?�.�#���(�q�mT���k
�<������/|;���z����,���"s5�F�j�.�/�!!Jmh�,��}�:���9��&������3�y���79nc��zL^��F[�������HjMn=&e��7����Im�������p�g���U9���7�I����������),�@���{����&'���
i|�iIgd�47���0L��$����W3��Mfn��~�y����O|�)f�^�o�c{���I����R/e5m���H5��|Y���oC�@ �<��o�d���P�ceG�%��L���h">y��J�BJ}�x��e�X�E��r�:�<N�^�9�3������qMi�b8���ZG �Z�.T�2Vk?��^{�$m�iY��l��t*N�����j� ��A�=����<9��m��"�����V�gd���U�P���&x%p�Q���?�3�Y�jl<�[���1�5��^ Y��o�����9�j�B�w���N}�c+�3�����DIF�b��u�5K��?��aV�$�"�Z?���zQ��9���ZG$@9�X�TV��#�����$��
�@�z
�5� �o������_]����s��CD�ku�M�kl!�O�OV�<���	�I�tv�;�����G-��QXu5�����s^%�-o/������e�z��9�������n������5��+68{4������]���rz��w|�vs��C��o����x
���9��(�/6c|�����o\xS[���^���������2�2�/��/�?�(L-
endstream
endobj
1 0 obj
<< /Type /Page /Parent 2 0 R /Resources 4 0 R /Contents 3 0 R /MediaBox [0 0 595 842]
>>
endobj
4 0 obj
<< /ProcSet [ /PDF /Text ] /ColorSpace << /Cs1 5 0 R >> /Font << /TT1 6 0 R
>> >>
endobj
7 0 obj
<< /N 3 /Alternate /DeviceRGB /Length 2612 /Filter /FlateDecode >>
stream
x��wTS����7��" %�z	 �;HQ�I�P��&vDF)VdT�G�"cE��b�	�P��QDE���k	��5�����Y������g�}��P���tX�4�X���\���X��ffG�D���=���H����.�d��,�P&s���"7C$
E�6<~&��S��2����)2�12�	��"���l���+����&��Y��4���P��%����\�%�g�|e�TI���(����L0�_��&�l�2E�����9�r��9h�x�g���Ib���i���f���S�b1+��M��xL����0��o�E%Ym�h�����Y��h����~S�=�z�U�&���A��Y�l��/��$Z����U�m@���O� ������l^���'���ls�k.+�7���o���9�����V;�?�#I3eE����KD����d�����9i���,������UQ��	��h��<�X�.d
���6'~�khu_}�9P�I�o=C#$n?z}�[1
���h���s�2z���\�n�LA"S���dr%�,���l��t�
4�.0,`
�3p� ��H�.Hi@�A>�
A1�v�jp��z�N�6p\W�
p�G@
��K0��i���A����B�ZyCAP8�C���@��&�*���CP=�#t�]���� 4�}���a
�����;G���Dx����J�>����,�_��@��FX�DB�X$!k�"��E�����H�q���a����Y��bVa�bJ0��c�VL�6f3����b���X'�?v	6��-�V`�`[����a�;���p~�\2n5��������
�&�x�*����s�b|!�
����'�	Zk�!� $l$T����4Q��Ot"�y�\b)���A�I&N�I�$R$)���TIj"]&=&�!��:dGrY@^O�$� _%�?P�(&OJEB�N9J�@y@yC�R
�n�X����ZO�D}J}/G�3���������k���{%O���w�_.�'_!J����Q�@�S���V�F���=�IE���b�b�b�b��5�Q%�����O�@���%�!B��y���M�:�e�0G7����������	e%e[�(�����R�0`�3R��������4������6�i^��)��*n*|�"�f����LUo����m�O�0j&jaj�j��.�����w���_4��������z��j���=����U�4�5�n������4��hZ�Z�Z��^0����Tf%��9�����-�>���=�c��Xg�N��]�.[7A�\�SwBOK/X/_�Q��>Q�����G�[��� �`�A�������a�a��c#����*�Z�;�8c�q��>�[&���I�I��MS���T`����k�h&4�5�����YY�F��9�<�|�y��+=�X���_,�,S-�,Y)YXm��������k]c}��j�c��������-�v��};�]���N����"�&�1=�x����tv(��}���������'{'��I���Y�)�
����-r�q��r�.d.�_xp��U���Z���M���v�m���=����+K�G�������^���W�W����b�j��>:>�>�>�v��}/�a��v���������O8�	�
�FV>2	u�����/�_$\�B�Cv�<	5]�s.,4�&�y�Ux~xw-bEDC��H����G��KwF�G�E�GME{E�EK�X,Y��F�Z� �={$vr����K����
��.3\����r�������_�Yq*������L��_�w���������+���]�e�������D��]�cI�II�OA��u�_��������)3����i�����B%a��+]3='�/�4�0C��i��U�@��L(sYf����L�H�$�%�Y�j��gGe��Q������n�����~5f5wug�v����5�k����\��Nw]�������m mH���F��e�n���Q�Q��`h����B�BQ��-�[l�ll��f��j��"^��b����O%����Y}W�����������w�vw�����X�bY^����]��������W��Va[q`i�d��2���J�jG�����������{���������m���>���Pk�Am�a����������g_D�H���G�G����u�;��7�7�6������q�o���C{��P3���8!9������<�y�}��'�����Z�Z�������6i{L{������-?��|�������gK�����9�w~�B������:Wt>�������������^��r�����U��g�9];}�}���������_�~i���m��p�������}��]�/���}�������.�{�^�=�}����^?�z8�h�c���'
O*��?�����f������`���g���C/����O����+F�F�G�G�����z�����������)�������~w��gb���k���?J���9���m�d���wi�������?�����c�����O�O���?w|	��x&mf������
endstream
endobj
5 0 obj
[ /ICCBased 7 0 R ]
endobj
2 0 obj
<< /Type /Pages /MediaBox [0 0 595 842] /Count 1 /Kids [ 1 0 R ] >>
endobj
8 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
6 0 obj
<< /Type /Font /Subtype /TrueType /BaseFont /AAAAAB+Aptos-Narrow /FontDescriptor
9 0 R /Encoding /MacRomanEncoding /FirstChar 46 /LastChar 122 /Widths [ 260
313 507 507 507 507 507 507 507 507 507 507 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 722 0 0 0 0 0 519 0 621 0 0 0 0 0 0 0 0 0 416 0 487 514 479 514 485
0 450 0 224 0 0 243 784 507 505 514 514 309 443 296 510 0 0 0 414 399 ] >>
endobj
9 0 obj
<< /Type /FontDescriptor /FontName /AAAAAB+Aptos-Narrow /Flags 32 /FontBBox
[-457 -275 1092 1010] /ItalicAngle 0 /Ascent 939 /Descent -282 /CapHeight
657 /StemV 0 /XHeight 496 /AvgWidth 519 /MaxWidth 1171 /FontFile2 10 0 R >>
endobj
10 0 obj
<< /Length1 10892 /Length 7481 /Filter /FlateDecode >>
stream
x�z	x����U��,��l�������m�
�h,�/�����dy�� ��1��E������@�^�����������u�d��/=��d���&��6/y����;�JrI��R-w9u��g���e���� 5�A4r�����xD����ol'���|�ww��Tg*���
M�J���~����-��Cx�C�T�k���?�oB�G}��C#�P����������P�vy�{$���o������z�}x������!*K�{�����+�QH���	S>���B�)���g���Bq
���_}@
?�_��C�����QD#�Pb7p@H>��B��������G�3��4w�	�������yskv���4��>2�2���A���������)����4o[47�~�\���������^7���[R��[�\m���R���)�+R��rk�\f}�\��%�As��#�fK����n.�>2o�����y�F.��!�o^�4;�A�:���0�o.H��?2�M����4�&�n^��7ge<e����W�w��0VJ�)��Ov�����6K�Sfn#�I}���U�����9�4������*0�o�w��r,)��m0��D9�z������#�f��iV�w6���dh3<1W�0A��h�Ue���6k�J7��|��b��;��h�T��M�u�v:e�.>���5w��m5���U�'k#�;Z����[Z]��v=u
%�g]7iE�"E�4�������N.R E;��X�����A��@&9��B���T98��T\������A������������oI�TG�a4�q�
?R��v�1��z�(B}@��{� �yQ��&��CS@}��cp��#��F�����]"/PA�p�9�mP�s��xv?����{��.<w���#s��g�>0�rb|lt�^���#���v����t����������k��������u�[j��*+���:eD^T)K��efZT������["��Fa����,5�\e�&��m�-�S`�e��v|�7����]`Q���4�����G|Z��I��G�/T��&�Pn�v�G�W�u ���OtW��yN@��@�"����iZ�bAVr�
3q�B�����`��@jK��J�p	s0wG��������P��%p�^w%P#�*�g���OHe���8N`�|W�+`��7���\�1�5,��sCx��@�y��P�"�O4,:����]g�D��&���K
���r9�VO1i$$����I)Dz�]'B3b/#6�u�Bl���
#�Jj��t�6q '���#�8�hSHm3uZ�Z=:�sQ��b�[<@K`H�R�T8#�j*�[����rh#0������<a�|�,F8MwENR�=<��m��(D�a#Jo�Gh�-�[j��;P�#3�l����_�u�X����p����2�Zp6���>oq�K33�wq.��������u���@	8:���`�^���\q9�h�n=�-m���� �!l���&�v�#ty�P�t���|^B���m]��oB�@o�ZP�=���/^�)BERKz�|�������2n�@��w�:�]}�^�xN�+0|�i�A�]�0L�l��an5��[����D\ P�-:���%�R�} ������
�Q�����2�H��"�x/�
���5�$C��Q�Z\u7��������m�|nS��5��h(3C�%:���"`������<|��@�����'z���6���V��������\�n���p������z7�*�X!���"��n�R�~�8B�����j9t�30�,�W�F<�eM�����D�f�������&�Y�Vx��B��ya�I�{�P

��|�{a�����H�.��#,RqMY���z���<h��`1q��\��8��z�z�~xx��."d��z�=�����^E�����!.�> `�Z���&��*��s������x��G|���C�3��7�PV�w�8��.r���v�6�U08GP�����{ -p:��M�O&J�"570�# b����f���.�~��Va�.+D� �6�PO%�\<���.P����o�TC���U�^'�����	�24������PK�5ha�dM�+�*I^iP����aV0���R��L'�S,���; �+M�0�s�'�	U+�����L�X������&XS�Fz����n2<��v�
�u@bL��Q����UVATd
R�tWZ8aR 3��C@�(/'����w�@s��D��h�qb�P����~��[b�J�*��� �6Z!x�p4��	�vH"����o���	����<*
�	����� ��J���J��I!����G�n��r@{�`^���<��� Q���:�F�T}�����hjr�L�,�(a\2)������mI�T���J'Q��2�6��x�+����P��W�)D��4�)�`}(Z2P5����QM�"ECL>/���5$B�6=�`N��#47���w=d�	��&��
�@tt�@��I���NL�=���w�A
QK��?��C�b`f��q�J���U9�B��
E��	���l�x'���$z~�#�-b5,��F�q:P�z�t6�	����"���4�*^J)<����E����o�����"�/�(���_ �V�\y.�pP���~
������w����C�����Ir�=(^���`F�z�CZb�dk�k!�z��0<e6�LDu��	#v����&�1+�����`�U�a����P+l"�`�3���8Dp��
�R���v����Fi[�K�9���6�n�W�	~�@�
TCA���)�q:=t8l4��$�P/�Agm!*2���@@�#kr5�i%��r�I	2�����U7$��&�+����U��IX,����$BcE�;�t���j�K��.��@Vd�5%����^��	�J ��������a42l <�����/���.���/���B��-�?��d��P�$�%Y � z�#�-����*�?�<���$�����g�s�E_DE�4��N���<��K)�m5	�'Q+����t��G��EE@��7����.+\n�J�����*���X�	���j�z�<��;�%�X�
��xdB	(%!3�����I�<���<�0Hc��4�R�R�$�H���-P_T�P���P�;��D�A�
���LMQ�������37�?���fd?b���q��7����_9���?Ep/*����M�:`��������X�(��:��O��0��%��e%�DEa��~�"������<����XG��=z���l�_[��k��fe��


����d6���YVN,�[��,�9�������x#���vMeMe�������M�FV����N������+�w��igfFU����'�v6x
���v���R����wr
�r,;&��]F��#"i��E,������
��X�l��u��{����<��<=z^�Q�o�}u�r����HV��������}Z���
���Y�FEN>2)1%F���x���5LNF�L����@�8��"@q04�K����x��rs��%�l�yIT^��1[j�$�4��6Q��PL�@�,�����7��c[k��7�?}��}���{��o2g��3�OO�\l��/C��S������*o9���/�����064<�U���O�-�O����������Zg�d$f#uGt�>��29�cb��2��OAo�GXs�����0�h#L@,��So�C�����.=�FM��,���s�^y�=�����N��������LDV*jq�I���d9b����q����Y��a+������8�_���E�(�?��TD���DpE��k�
78��!���J�(��bA�z>�eSs
�Y6&��'j����7�����.TN{
��o��i����?��s�8v:��<���{����h���S����M�I
Nl�?.P�<��-���"���S��~�eJ��G�y��M/��X�	��7���g2���{��4������n;l����N����k={u��_��}p�{��]�R�[v�@�2
����t
�?V�����^Q��.�+�cY�����7���W�bdw��������U����^����E���4ro�b�{��d�]���'B3�uf���#5b�����2M���_�
c�4J$���@�(]X-`IbCb�v�������
�M����[���8����"g~s�L�u��?�G;���o~�������g*v�vV�[M=���B�w4X�����H�Ef"SXYzG����`'��Q����Q
J9�����o~B��c�{;Z���t�������������b���-�{�U5�j���������W��������}�@Q%�G����5��:�t-�[���8�v����$?��b}����I#6��L����H+��(o������	���������Q�f@��"J�h��l</z��8��b�[(�����g�@I-((�If������''?���~r�P�h����}������%k���J��|}���jj�L����������t;���WN�������3G^��W�S�Z�;��ya%�����sp1�h|��R��r[�eO��������M��������>�v��$P�^��������G��4:��B�PN*)%�Y?R��w���A�@���z���������L����W���������;	��<]���Qrf�9�,04���!I���E�y�/����y1�����k�����&���o���C���� �[�����T�v�.�(V�b���+u"z!��	A�-)�b�������T����*���B!$� �HH�{�y�"�����N+��*�II������]�}v�������T�_���[m�i��9�������_��.
u9�Lb��nW���/.5�\s_&s�������*���W���+��p�$f%2������(~'q����A���_9
��tI�����V���~���� ���W �!�����W�F
�
=�=dA �Y	�d��!�'�L�0�F
����;z�-�����5k��m�rrvi�>������~�����u/������9>z�'f��K�[ I(3D�5*\��HC|R�e��aS��+O��������9��]W�Z����J������C)���K���u��_	��ro�\���|��;�.W��m�'B2Fk�h�Q02\1`��`�'*
g����?^�<�L8��5���gY�K����1���6�5����|;!�]�������;�Z������|	��t����o�j������O���;�>��o����OQ;�1�Gk�$G:mDX�bP?�>+^�CL'����X�b�|5I���}�)��K)0B+d�l�K6Jr2��6-)*n���p�..��odQ�y"��K���M�jK��|��?����(����q�w��te^�Te�D[!u���R��=��{���E�y�`���-��%��F��{�R����-E�[�3W��N���n"���������L���I�*T43��b(�`�b�1�F����X�!�F�v@9��d�+���K|~^~^(������9�u����~�^�Q�L/U4����,}��~�N�/}���;m��������Z<��2�>McVKCP+�Z�V�$v)��R:�liU&���ICi�<�������i����K���P���6�>���~�Pqa� �����A=�p4�J%g�����(%�{��|��q���r
�{����[����U���fZb�`������6@��t�C��i8�����#P�S�bD�l�aMBJ����|K���[�L�.�R�������Yu~G]fG*�Af8c�1�`��q���
��l��r���� @'a���r
z�*��d�B)~H�O>����������`7n�����_���Ob9V�O�|����O�9�4�&K�L�#6�j��Y���/����1����,h�4�j?V2b�"8L�������W�����(nq�_�w�6�?�o~n���6S�R^yAS��?�����_+a���V�������U��h�	
�p�&���I���:���!5Z� W����o��0:(������Df���O�>pr�z��<3{��n�a�U��,~��fw��s#����xyO������w$����w�B�a������J����$��2��������'[�Z
����042&��"%�ca%�M���� '����B&���6E�
�X�8����	�S��_�x����'k�g��]��;�������0����s�g���|�{_i���5z!�x#p�{`i+h�3��D�ngT��a�b5�(�S��J���w�MW�E��A����j<ZL�T�a���`�j?##�6��4z��#`5�p����=uni��q���Y��8b�>�p������
�n���dq��nrf�.�0�^��Q%���$���$�O��8V��������UM6-Gn�c�v��|4���Tt2+��,1zE�,����=_���6�M=���]�mJ�A��7�F�3�_�������S9���,��.j}������KA���3P�3U�R1��3�N�Ng�2=Y8��BV�U��
����ho	I;|�)sPz��Xqy*I+�g����80�����1���I���m?�87=5r���Q��W:�����m8�S~��8w�������y��A�K�S������mh[�=�?v�l*�O>K�(���"�2��h����2��H(B���:���WB��P��,�����#���b������hJ�xr��3������(\��R���4�`���8����
����SRP�V�Ok�lW�0�������yaUV���L�����&�I[c&����}u���n�.���{�?��{a��c{�Vw��l���{6�o>��~`s��!��l���	���c�+*��?��������S�G4]8�|� 5E�uW���l���^K|�D���#M[�U��N��>���i��bql��#>�q�GBK
}h�	.RP�L���1�DS,��K����n�o����?}����#�V}�����|���N��g�kW����
o�zc�������u]�>~{�;��.��w�-��������s����������t$|A3����l������������������J�	hvI4R�A�u;�8$�X����2Y��������^�S,B5��r+����N���#�<��JO�S���
�:T��P9�w%�F[�V�C7��5���5����_.��F���o��~�%_X�E�J��[(�fr�7��7�7��������FG��
endstream
endobj
11 0 obj
<< /Title (v20260103_job) /Producer (macOS Version 14.2.1 \(Build 23C71\) Quartz PDFContext)
/Creator (Excel) /CreationDate (D:20260103042350Z00'00') /ModDate (D:20260103042350Z00'00')
>>
endobj
xref
0 12
0000000000 65535 f 
0000004851 00000 n 
0000007799 00000 n 
0000000022 00000 n 
0000004955 00000 n 
0000007764 00000 n 
0000007931 00000 n 
0000005052 00000 n 
0000007882 00000 n 
0000008328 00000 n 
0000008569 00000 n 
0000016139 00000 n 
trailer
<< /Size 12 /Root 8 0 R /Info 11 0 R /ID [ <ee6bad9274602b51eaea997340c8ff22>
<ee6bad9274602b51eaea997340c8ff22> ] >>
startxref
16343
%%EOF
v4_bad_case_analysis.txttext/plain; name=v4_bad_case_analysis.txtDownload
v4_tests.zipapplication/zip; name=v4_tests.zipDownload
PK�b�[	 v4_tests/UT
��Ti��Ti��Tiux�PK�b�[Z v4_tests/12b_plan.txtUT
��Ti��Ti��Tiux��\mo�6��_A�(6R�/z
������6�&��C��J"$���|M�C�
II��7��l���-Z&��!�|f��d���OA6��z���0E�q��X��1"�
��E�N����GF���8����<�G��bD�1�����]|����M���l6�nK�}��}<���?>�������1Z������'���/|~�/���o��������&3���&	n�L:��4;�����\��_y(��LO�3\d�'�y��~����,\'��b�B����>�W������u�Zg�hF������H���,����t}}$�1Jo�	8�m��\���	�-~��� �����������a���N�����16\�=���)nvY�����G(�����(
�9
�����d]��? )]����a��
E������E-S6eL=���|����y�x.�:��?b��	��1������9��m,�D��;��[���!��(�F��
$"u�4�H�gF|����7��C�t_�~(!���!���<���Y��2�p�h����l�FC�Q�a���o��P� ��H����~��@�]-8��'���0#z���{��o�W�c�5`{�a��'���
��
llr`+oKik
���*��tS�i�n�4�<h�}�������
����m��
�e��@�3�����$�R��UT���`P�tAK���Y��+'�*��mF�`|J��{�"��=D��H��p�.�/���G(��j}u�������Q�M&��c0���&�+j��[��B�<�����)���Y��������,^"3�<�{#oL��9��`P��c����)�S.��u}f��
��?
����5��h�ol�1������������q�GJ�}�Ktq��6T>,�Dq6xR��y���]�^K��Q���A
������;xL��Z��f��iBJ��>D�������/vT�<�cA8�)����z&7���x�����VKe"���������	X
(`�R���	�aEc�4�n�X�/Ww�ce�l�5�q%X��3m����p�MAs����E23���rq�#����U���x���0�.�M[y�6��,�/�x!���^^��y�4����(����� 	�T<6���+]/�
�fsYm�(���mV������b���'q_*������0Y����X���sTk��o�?�������zS����A�4�JG)4T����&h��7�����,6�V{��LD��+bQ����u���=_�vJ�
��U�1wVwLS�������R�V�VWl��CBe�T2p��n�W2hu����L�=5��<�������G�9������;��I�9���	[D��[��xJ�����7A66��A�?B;Cf'y�Vk���Y���=?`�r��V�)g���Y�rB��CVf�������o��OK~}Z6%�������#���j�k_�{��aD(�X��n"����\����2��eX�n[��/����4������W*���aPi�� E��E�fIx����l����z~�m�u�C��h�����C~Tq<�Ue�����p)�j���R���fd�/�xe�c�E����\�"��n~��O��o�&��M(�ac�nUt��u��l<8������8����(��8=���B�@Y�|�cZ�3��!�����b8����2�8��}��I�����4�_�C���p��l8z���-�R�Y��F���O?-Z���0���m:5n�����n;D�^��^��q
A�
E�������L��:el�9�k�P���w��-P��)"��|e�������*"i�?:�S������Jn���#Sb^nJ%���4RE*+���Gs�:�����
��rP0��}J�"�1�"�a�me/��>�^�::f�td�a�Z%6��d�b�AyLi�| �z&���Qm��(/B�%���Q&+u=X
�6r8���ID�����3
�f�vT��<�~
��9D=z��R�a���;�rl���94c�p����M���-��#t'e_i�<�p�8�������,)`�t�^4
���Mm�]bI���9����
�?�[��q�`c�B��;Z\*�S��|����gT��`���5D-f�*���p�R�)*E�������S����<o��!<E*��\�|1
��i����.������!U����K��
K(��z\����t{���~.�H.������^�*��3���S,���M97�Cx��<=�S�(n�-��%m�"Ig(�V-��M,��FyL�F u�����R������6� ��5�����[d;N�����5��Ij%��ib�M]�L~�\<4?M����Dz6���`glW���O�1������q���Z���,��du�Rj��F[s��Eq�k9�!������k��P��R�����{(���"�k@���a������������p@Gc���b�j���(��O��c���+�d+�&QS�B#�l*7��v���2p�~h,V@�,&oG�+��f �&�F��Q��4"��~�*X�U��b�FGlMiQY8�)�����1EVgBv�#�`�%3�]o�P��o�wZ;M)�,��M��s,���=Z4����(g����~�u���<lF��)��T�[�{5�<�i^1��tt�N������OR�*�1��Z����J�)x=�J�=�w��)�_����I���x���6���)z�9��]�����[s�����K4�s��#�����p~��"Rb�{��������r�����C5(TZI�G���g=����:2�d��4l�h
J(I�Z��PK�<��%ZPKnb�[ v4_tests/.DS_StoreUT
Q�TiQ�TiQ�Tiux���;�0Dg�K4.)�pn`E�	�W���!��RP%�y��V�iO���_� ��3>����6�!�B�}c�t�vB�2���ts�:vc2]�J7��_�#��L����C�>�+�1�X��W�,��pp���?a5�!~��u���v����K@����nl�+����OPKj�m�PKnb�[x __MACOSX/v4_tests/._.DS_StoreUT
Q�Ti�Ti�Tiux�c`cg`b`�MLV�V�P��'���@�S� ��8��A�0]�PK��85xPKq^�[�� v4_tests/31a_plan.txtUT
FcKiHcKiFcKiux��]{o�F�������!�i��d�3��&��dwf���p0�3lI�D%�;�~���"��T�%{0#J�)vUuuu���77��"�s����"z��=<�����f�s�m��#g�E�~�����/�4���� �p����)����<B$��5A�4��y�!B1�=o����������7?������������:Z<����o?�����?}��_�?~x��T�x����.���>m�OBq��r���7"HJ(��h��mw��������Ut9����C�/W�
�H�)��q���<��WR?~�����:Z-���%X�?n^]�n����O�`=[e�����!Sy���1������l+���2�!4a(�����Eo�].��A��i\���G����<�j8$���#�t����r8W��UT��g����6�i��e/�F��W���f���%����d�j��2W�n������a�&/[p!h�-���H� bv�-u��c�W��V�����M�����a������9Sl���_
81���:���f�0L��)em�k��x�(������8��6�2�)w������H�bP���.��K��l��Z-���������9�oV����t<�d��y�T~�ut.�`B!��$�����.f�B6�P|�X��P|��D�h�4�\��/���E R")<���$�Q-��b�sP�#5��0#)�1Ur���H@S�1jR]��#<yw���c�5�\��e���,~~�_&�^�����I�%�iE,,niqh���(Sc,S>:�F�x4�&�^������n��������L�*y��J�d�!o
0M���p�bR,�'q��J�R�+M��D�*�^3�J��%<M�\���r�z]Mj������|��6��q���r~|$�bTC��b������B���-^P����#�ZTW�U�i�+���4�zu}�g�s�_�����W�������Tl���4}�����w��1��%���Hn���np���n��J{p��7����V�.x�l���$���+�]��g�	�q���`^�����[�#��^��OJ��>��{v�=���.���-�Dl�X��%^sF�]�f/������e�7w,�6�,_�o��E���N��+H��o�]~����v�m�~]n��<��Ytq�i����,�����f����b�?]�mv��|�������~5K���u'N.E��<'��o��j�}���,u���p~uo��8E���pLL��1�N��b�k"�1�\hj��������Y7���`4���w��>�f�^(�nY��F�������^h@�Yp��b��t�E1���*Ut���"�\*��M�uE��>�k�V1{���''^&�0Mz��k�������k���V����Hb���}3�NR�)�w������B���>O���_h���K��B�����
�C_:$��P���������N�Z8�Co����[������SE����Bbec=�!��T:!���A@h}�H�6'�P/�T���B�Tpa`D�P���O%<�W�,Sy��%���w�n��n�W�����l;�'�y`�W���s%��B b�� la��G�C���e#����=c�:p|�_;�;�1h�8>e�m� �O;:*�;9!������l�������j�dj��JK7�+s���$�2���W&3:g0���K���V���G�(����Fm�������F�B�[�j�J���*]��]��^]���.�-����{y�gk�>���.�l��i� ��s#��c���.�\)	����b�z���V'�������Y�m'�@e�_�c����c���2����98��>�=������������-d5�~	U�a�	�:�j�/!%��b�S�S�����"M%$��j���1U����*����>d�8�o��|���Q���j��m���G�������N�Z��~���u��.��U�i���!�?����W?,7��D��G�b�
=���.)>wJ@1�����A.�Q#^�����:��\��1H�����#p!�(FO�V�>�S'�C�W5���>X�v���3�A�����P������=2�Vq�V���S���
"��kbU���
�g+��0�}�~��W�L��{x����(����{qt��x�n�y.����`��\�m5�-?��;�����l&���V���v�V����;���:5�����!B����%:���Z��/��=1gE��O0!1�v�����^r��J�`Q_^B�C��&Ap�ln�����>%�[�����~������n,4�)��:�\�&�R��?���z`2t7�	�:	y��FdE�n��H5��yltwg�Y+2�U�#<�4U(Eo�a3��G~��t@q�f�,���������B%�� ����j��%��P8M�P�Z}���m��6.��L!\3���0�
����vg��6o��iyx��/d�����p=����A$�Q A$w�`����y0���N����r�E������5�o���-�D�,W�R��Y)��<��c����>Hi7�)���GX�����%�b#S1EA��&J�SR,�$7������������W��Ea%��#0q,��X��) �
U�4�8_<\�&�1v�(������`��N�,�'�1��B�G�>:���e�����99������8Z����5�5y�T/8�Q�6t�����BY���M5����C pLFj�_��$�������	����F��$�����`�)X75��3���n���	T��45���������n��b�{�uw����O�����}�R�4q����c��@�4e���?O��=8Ru�)x���hZ6���%�9�|@�����U
��� ������F��I/)i,�NtGu?j�J�UMY�^������e4$��0�1���

���FZ�m��c�}����
�&*g�jZ}�\�I6�x"���N^�Btyu�l�s�V�2B���W�xu������BJ���I��F<�y��~e;�������LAY���,�^:�
�� V�����m��?�����d_*.�@��k@���%$��/�,\�,�XQ���>��d8d�)���'�a,��z��!�k��Orcz@85��)�L��SS�h�����8F{S'GK��R�J:�}��M7��u���Q��c+�d;u�%"�<k�ak9G�A�B1�d
 �iP_��kQn���D��Y�o�K����Hs����8�i��hi`@m�g���I�����.���dr!tEWc�^���[c0�V?tb'Ao��A��&��)����h4�kjo
]������X�����1F`m��r�?UYr��.�?�������|&)���nn3^���h���������I$A�!�m�r����Dw��J^~7����T�$)LK�0��5�$�_
 1��t����L����MNLD���=�J^�N1�����Ro\+D$�����c��C����{�r�L���P���(0�~�J
��OJ|���F����BX���1-��FH~�G�y�A�\����T��v%tU��O�I��-)43/{�o�����ge|r=��Wp��������ve����pp�X��R��f�K���Qp�o���,�B���F��f���\���\�Z�f�r�+������������� x�f��j �{��T�����L#�3X~t�<�
,O8=���`�:
X�]/<1�3V�������*,�^�X�.4V��2���rW���y�^�U��k��i�#u�����o�V�������@��Hb�B�IA�3N���D��h"�G�B>jh���`<MC�N��'Z`3����=�Ez���	P�P�-��N��FI
8p��_��!�av���7l���w;%]�[w�R����/c��otG�!;F��$1�h�s���������5:LE���iX����Rh�5��q
���bPA��E^��C��^ep��RTM<�_���a�������F���|���Ik�J3��d`�'\�$�..���D��S���_6#B���=��;�;�T#HL�8�w�
h8��T�����7L'D�t�i%�Fd��2Q�������WF���!8�c% =�6Y0&���\��%,��vK�orm�V�l�������t7NS;�'w`jXdw��q�R@���s�@�R{O��
Fuy\��a��/�+����LE(a-[wO_�Y��U	v$������A�x�q�u�xO��z���fz6�n�	o�*�!.��6��O���#������{�D��*���ww���6����jJ�����f�Rnv�W�x��
i+O����!7M#I/��:?�����&<8���*��������P?��<������hv�j�{l�
��hst-e���'�]}1C��<G��=��ZS��]�����6U�O���1�����d���|D�,���X�N��:K���L�f]����5�=!����������L�h�����m��i�V��Fh���h��B�I	��M\W��DhGjB���e����7����V�nj,,�����V����S5�&
���M��|�2���#�����3�����G#��/g0s:I���C���MY����i�\�O���w�f���`#����,����������6i�v�M��j�|X8��J#t������,A4������,+�����u�B�U��
 �d���bq{C��WaUAM�W�Q}���h����R 4���Xw���{���=E\���	�T�� 0�K)�T�3�H�WI��J��]q)Iq����Gk0�,��H�c��	:�zVF4+�,b���<�#.�
���s�~�B�N����#+z�b
�zi�]�*��K���K����k+�&G�@LS���PK�'�}���PK�s�[� v4_tests/run_job.shUT
��Hi��Hi��Hiux��X[w�H~�����"b�d�ap���fL8s�8>:�����u��q����%$.��������������:��$���Ox��	sMp	&O"Xx>e��i`Q��:��Y�|�l���Y:�I|�*w�����`��{	l���0YA"xF[��Q�$D3�yU���a���=uhG���%1�^f;^^�7�~��+��c��+��^�N�tm�����ewH�[���H|)P�z����!��������.;�Wvop��������<`�C��f�6���[�?���^gWT$
���X�N:�������7Zopse�����5N��.���zsJ
�_xa"�/�G��w�����?�bO��n��;����c�zW��e��B}E�	�=��������������DzM�����\�^)��&�cO�]��v��d��.��G����y���u���<UkP�M�� 9�m���V���{pk�H�XB1���Y�!mT��lX��~�������Lr3*Jr�#��8�������5���3.�Y�����9��L�C|4t�q�����1�)�.jZ�n��Qg[�1r��wQ��������6E���m�Y��Q"�N�t8;Sk��+����a*@#��sweL{�g+��.���7����c����)��>Hw�T��ol\��P���������th�>!���q�^,�K����M�X�(E�M��0)���`=���>=WiV:r-K�tTW��I����:�n����D%K/��r�"6������uNL�}?� �u��aJ�����R[e�<EZ�[xk�^�q^���|y&��T#����v�wxA���C��o�Ms��&��6���JEi�']e92���9|�#�A��GoBeH�2_,mA�����_?%��g�-�����~]752�������;��`�C1���_�j���"3�R
�`asq����cy�/�}����<g����K��)f>F��5Q��/KzP%�UK3[�����������n�W����K{�Q�����)e5�I�����!�������=v�k�X[{s��`3D���K�8�fs��p��
2�_�!C���g���������Z-�8	�(����GQ��O�
�#���Q�>�W�<?�
T�%1�EV��#;;^�\���V��G����t7:
��:&�?��T�!'�����R��Z��M�*�(�}�S�?9�a.���Xf�8�r��5J�TYbU$l�j����7����3l`hv�*N���(w����������s��Z��c�E)nR�[��zg�cu{�P�S��v����-�2r�`_(���{&���	:T/:W�x\�^(�`o'���������z��IW.o<�:�M
*����ze}�$5�]������i���
�X�G�4U'0��9%9.�2�Q�Ak�8���*|�2_�;�����v+|/�|�#�Q�3%�^,$j���;��	�D��8��T��;E��
dG��y��.|�0gKV%��M��98Q����,_0�d��Rm��*�e���0�a�u�	�Z���M���
��}z��(A��Q�pR�!YL�Q�8=�/���)��sO���r-����;7������`�m����=�Ii��x
�DB��j��e�9h������v.�zW��p������C���������cMLD�!S���S,�DB���M�~B�D2��;�����k������&d�`t1�P�j��� =��*�	L��z@�G��Bd�K����M��v��v��`c�
%�vL���;T{�N�����8����5���i���(���Ru(}q�7d�w������r����&|�G�]��<�A�B6GK�����O�O�)umGG�B�=�Z2Z��V���|���9�f�a-���LV�#��Q���	�$DbiI���p����l-yv+H��qy\?���V��Y���G�I��������Q���/���E�Gm�I�#��s X�In{��PKF�G��PK�s�[� __MACOSX/v4_tests/._run_job.shUT
��Hi��Hi�Tiux�c`cg`b`�MLV�V�P��'�* ��0CB��L��)@����!������XP��������ml�����k��k���
�*��PKVY��Z�PKt�[2 v4_tests/run_analysis.shUT
��Hi��Hi��Hiux��Wms�8��_�5����|�r��$�2C����2������#�m^��~+�6���]���ei������R{q�Iq0����/0���DA+s��<���W2X�������o3"�=��_�������S��|M��<��[/�M��"�3&���o��`��Qw����+���]Nppv�����&������i��C�
(���Ki�"2��D�.�Z&r6��LZ����@A�)��\��=,����eA����P�~�L�Zp=y�@�a��C�� I�o��>�fICB���~?���p^e��9g����w���a����|�D����{����b0���NK��J������{�+�����b�p�%=&3A�L���
*.��O*�t���V
n}
�:8��B�������t��7���}7J]p��!�*Z�}IH���t��Or�������Mxtb���\�k�Q�4~����KZ{�������MM��vQ��K�V����nZ�r�Q�"}<�
]:dQY[#���p��)(���i�������Z�oKGp�uxz�x�O���S�K�p�|>?v���`}��?�2+�W�����
�,�q���46WN���_Q���������j��*�Cq�P_�������W�����DYld� *���0D��"w�����F��A�p�1Zs�En���:I�X����GCXC��*!��H��Q[Y�~h��p�_G�hLs�;����������t�dUI���8��������._����fnd���we0�<���E�x�b�#d�5qc����u�H,�B�L+HS�"0�^f�9�$/�RR�0[4�����'����V��N����n�aej��*��)�5�YE*+&�=8_��F�����\X/�5G<��2�^�3�B_C0�g�3!��>����5�8[��|���)�g���X�e),6ols����I}_��p�4�����\���j��?�8+?���;�V90�(�����1n����B���B�[8���D����^w�Wi1�l��L��XX�{������^}./���T��	���L�������:�'�kp�a�Ft"��<[,M����&����|4�����j}9K��a��P}�Q�D��TI�K4�Xr�HR_�r����c'B`���N�oIQJ��d�����|�����Q��j��0���������v��Rx��#�2��
{if�H��K�J�T6E3?�����?���I6�*f�{����tm���D�r�9Smu+B����DZ���G�?����y:�w��!�k
��<y��S$�5�s�[�]y"
����qggWQ �{�������������T2A�2*�$��7��B;�>��Wv���m��������6����PK�����2PK���[CZ v4_tests/11b_plan.txtUT
��Fi�Hi�Hiux��\���8�=��U��ka�
D���n��w�tw���t:E�03(R ms?��~6�0�[�iG�'�N�������v6G���:~�-���	�����(l�x;}pmb���a�%�|
���}�qR6����L5c�-���=���d�K�&��������������������`�>|�������D���W����y~u�'�����&���]��1�����t��&����`�8�����/���M/����'���fX���f��P�@Ek������&]o�)X�����Yy���oA
?\^N���5���0����~�bs{���$�N����Og����7��+/I��7�y�,���pu�U_4������5�T,#_�3���3���~��0�b�!�?m�R���t���r�O�x
.V\E�}o�/��M�/JOl]� &��I�������n�@������}Y���/9`����j���01��S�h�v��<���#�7�f��{��mu"T��7���.�
h�����ae��F�8L�ZP����~��JhY�����C� �@�c	:#�2�XlY��U���	���0���-+}i��o��)m��n���fJ�W���7��n����*��a���	���
����}@����2�gh�%����+7�'p�:!�B��||w�G�)�!
!�A�M�~������� �C�2d�E��1����x��6
�bO���}�Y������5�J��e��vJ�N��/�n�-"�GC�nEbM]���_Q�C���l��@����q"&,�+�(D&f�@dAb�F��M\�&h������I��Ko�%�`YUtL1��n�I��S&�RS?@��T����~Y�����B/���-6@;�6���l�~�x���neRn���=f�&�����8�_���Y��<����,@��UeA[�0u��Pw[4hk���P��Q�EPIgd�q����$��s�=w	^F�"�qt�����/��]2�y_N3BL�X@����U���������r�Ua������i�A�2����Q
����U����dVy����H$
�Xj<�{3�3���M��w����=�|�8��
�<�6g���D���&�����x�"�g��S.��Q��^��{a���"Q	]����+�d��p�I��V�w�F]�>��%��wV�^�����7V�������|����\
h����m�k�;Fi����qw<���/4x}�>�y3�U+����u��=�I�t�������h�k�o���|�aItp����7^��q��Btp���4lY�bn�I�.��>��&L�mf�e�����4j�����m�J"��$����^����A�9�����-���~O���[����/���9����9���5�����C/�
�l}#����^$��F}"��+����W�*h�0e�qU�44�+H)����g��������GX��b��>[�n�m���]�tl4�w��+vv�����k
� FbT(42vce�]`������e�7�\���8�2���w�������+vt��H<'a�
��]�-�b��l��o�*�����c/���r�e/�}R�niuljd�����EC6H$mk�Cc��{��!���*yE���{&l���J&��W��d����!5,~�"��/O�����y�%� �'���#�vO��=ur��fv���:�4Hy�E|�����.�l�x^W|x��.b����y�bf�gx��X�J��!��eg_����t��9����a��F� A
�P��b�����aI��L�i���mb��������������J2�S�����![��
���@���i@�Z2�����G����)��(5I���x�&%* �p���$�2���X���ko
R����9�N)fx����a7I1Rl������D�h�Vc���h��#C
��s����48jF�Z�1�%��B����{DV����X�e����9^��f��z$g,q����������-���j%�o��L*m��k� �N(r\)���E�m��������>��>B~�!2��K[��:�o��0��*����������QA/������1��9�F&�At��N0l�W	�����+��v\?����X��N�����M�%��rS����^�za:3-��>�����GNubQ�W?IDl�=���g��1�?{�-�m�o\�-��8wl���G�3�e5����"�]���VM%���T%p�j��,�T�Ib�}hT6@Er�J��j��$�TRR�#Cj�j��=/�F��p��� I>A������ld��.�~���Y	"0S�,����������*�S�^I��I9���?J�����x�DQ9%Wa�((m, D�.���*�[����**9��s|i����F'@����0%��*hk�%�
��"��e�
���i[
umB������s�rG�yb�����*��pk-Q��:6C��d6g�yVz�"��S���O�����#Mg�l�5���Z�Fn���������"�z��_��������"������g�ZqP����uE������������kSC4��O~GNLT�"i��+4���
 ���{]�����O���c=�	��k�i�Ht��6g�$���\�[�w�*��%~�(fEC������n�"���-��ex��m�[z��7����������v�"�p���c�t-����<qA��[�)���s�ts�tV�	����9wK����@�NQ�2���9=�ni#����b�s����[��nizD)t��>wK���-}�ni��-�����M%�7��?�;�z�������=��NX5�
E�����R ��h�o�5y�*��%�GeI����jU���	���t145���
�����PK#���gCZPK���[�  __MACOSX/v4_tests/._11b_plan.txtUT
��Fi�Hi�Tiux�c`cg`b`�MLV�V�P��'�* ��0CB��L��)@����!������XP��������ml�����k��k���
�*��PKVY��Z�PK�d�[L� v4_tests/15a_plan.txtUT
�yGi�Hi�Hiux��]mo�F��_A�4z���p���^{/�5i>C����-�����~���r%�\�����Ah��������<^]
���OI6Ko�E�r5�������z��K6�����"z��m�I�-�f?������2���n��GG�\Rv�e����"��xSW)������������?}����hq7��o_�d�E/?�{����?����	�,����&��6�0�(z>_o�+��1�q��h��m{����E��J����<��n�,�M�8'1�p�=8?=F(�Y�����1�v��.��n����4NW��/��?eq�f7�=������f{m?�60�>���Xc��d��"DkeN��WQ�:�fp���[���q���G��7������KcF��G��S�����0;�/���g|�Z%���*�e3?��
��<8'MC������
:V�E���nb�@o��2��m�Y\����G��a�����~�(������e;�f�I�L���Fy<�Y��M;��y��=
i��s�.��n��v������iz\y�P	=U�=�
z`$�tGo������]gP�A��d��v�Y>Q�D	����	w0K�����y<_���V�d�V@#����N����K�0��F��9���&�4��)����S����{B���=%�� �1�.t���*Bi�N��"e�+��������XS�!H�|bPP�M8��~��"I�L�����f���_���P�J0-H�s�s�;�x2�M�W-sPE{z������@:n�E��}�^-.����J�U4_�$4����~�T|�����&�Do��U�^Ew��oR���4�������LjbBo>=$��nB������8:41��U�`M��6����:�^'�t��
h�y~������x����������������Jg@Vz����i#px�Fo<������"�I&�����a%5jov^���5a�_w��C1N�AUr+
��O��
V	�����cP�/�P���f��cb>�����6��������\~=��`M6B�5^�����6�J.��Q�%3!�&�O�?'i��a������*���o����-��/���������W7�1G�w�J�e"s1&��j������w���������������:|6��c�2P,r�����L�l�sg"��v6cS�QyD!;�30�p_�XG!(
�����]�m�;�A~����d�q�pM�~�3M�*;%ur0���X���[&��qS4j�@��u+��!�b��b��2&���gqy�t���:5�1?-�(_S�m���<K���{@�p�����*���u'���.�����}~�6�m�oW��o�O�d������|����m�Y��k�x{�����qG_E�������Cy0~���,����|��^A����2?X�_W�p��mzl��������8�'{�G�]�����	f�e��S����ZYb�+� �>k�BB���t��\+���n�9����|f��>^g�����F���l�(�����1��G���R�%��[��K�����%��S�n�UG�5�=]uE���{G��j;������	z���,)n��(�pAm�h�{�&���j�
���n��7��]^���C��c����w�����o��I��e��K��O��\	W�u���W�*��~�,���f�����i���pK���},X�X�,��b����T����^�+�A�Y�y!���<?����8/���Zg�����*3�U[�\��z�|2A�\��Y����R���>D���V+����.D�AgG?:���X3�n/�W�'��I�_��6S����v(�x�������tB�)�$'d�|N�yD	I\����t��@�P�+Q�G�2���G8G
�<�c��f�����KA��aV�������>���!�J?�X��X���q�v�,w��#5e����>���x�ER_�>�
p��A��X���(��6CD�>�i��M0&��'G���x�em�sz�	���%����we�PH���*t�
Q�V�`��~�5f*
��-B���Fq�&H#�r��<Dn :�S�L �dC�
�����8R�
�
�L�^;Au���M�
��������F�<ip(W���0���)��3B�@�d��#�B�r(����v�|>�������0��[4kC*��3'A�Ard�z��J��\d��rB($drB�@q�rF��(��fhQ��+�� ;9}!`����3}���G�V7{\
3{]�'n��aw��'�Ol>7����A�5qE��D�A��IK�R03���8s%>���L�1'S :�EX,�����	5�Y4'aAS����&>!�aC�����v:��C�������l�iz6�(��0w	�{ }����>#��T���I�II��HuD$���q�
3r�������Q�F����->W�����;�,z�Fl+��e�z>�������ZW�S�.J�R�dv}�������Yu�|jN��Z
q�Q�%�����50�
���~N@����@5yC�	Y�H(��b��sb�r�������Q����RT�)�\�DI!1�"�H��d�������l���&����I�3�LM(n
��G}�:�v
3U}C~0U��Xn
%\����R70Se8�h��W��0����w���������� �9*
��3@����
u���p��wq��C�k%�n�X���*]M��9�n�H��]M:����!�g�P�����
<���b)KI�������t	Y��u2��I���M�����Z<�*&�
�vl	�c[n�TI�������%O����Q�:�����_��a�����e��&-�j%QXD�I��C�v2m���'Tu��I-���w�"�X���*��0����r��hV��>B%
�r���Ul�3�u ���d��G>f�2�����JB{�Bw�\'!���g��M��' ��G+JMU�f�j������u�t;u	�0��Q�L�Q��n.w�Q�I�,���iv;�s[qA�Oio�x��6�hj��R@����6''y��*o���d��,[�|�_��`�(��g��X���f=_�%'���@t`lP'u���s�N
s����������u�&L�����%�[b%���t���IL��)o�Gf��y�o)��>C�p����.��c7"���'���!$6R��i(��+c,	����cK�YL���gSN���Ie6���J��B������kPaN�������%�~��,Q�En����X����?s_��Hu����Y�ws�ix_�d�>�}���qS��
X��Ug�#�<�4c!Bx{�R��dM/jksBTksu2��:]'�\�woL~��u�����<.�{iy}o2���'�T~��l���~�5 �����lI��8�n�n�nPD)�[sRT�i;���09�=�����	AA6�'e�=��+�K��0��G3[�M�-�E<x�����U�xb��3�e�L�o�(ke���#]M���[�D�&.K�.+�-������,�!9�����mc&�hX��N�[�z���oG
&���h�
��vT��)
����QCP1�=k��T}T�n^�L�=�R�N73<��0��{�����j�b���`���=��)��G&���m����:�K	I]������2Q����b&��
+�F)G-+{�K�e�;��;����b��Ph;wHA�r�P
R�F��{<�)���6�E��(��?�4�,�������������s�.����E9�G9�'��[4?�G��
��w�?����sWA��������������I5A�L��"����4AI~YO�	Z��rB�H�y�D��"R�b,Lm���'T�"J��lz�Y��#�"Ds��h�Q3a�\�����O�0B�~M!����+Ou`N����jkKc����d=���,��?i�3�A`��*�PP���1��&0�w��
��%-P����L��h�:��03���}���,��3������f �c)��J�%��v��\�>3�*s
B��>�4,�����nG���$����av@����������2A��S}�q��1�a�:��3��wV&m}b_{�g�8��2�[���}�R�6��g����~(��%L��j_�4e��h�$��y�Q��S	A�6 �W�>���q��GG�rR��G���4d8F��9�FF����=����
<���I�������;y���i9�%D�)_!S�����tux'U�w2��|�y'���N�J�dT��xw�*�N����<��������d�J�����N&jl3���dP����%JU��`�2�j��
 �����$m��������]����^p{�I�I:�8����d��q�O:��fEy$��P�(��u�^�����m�5[��������vx{�����|3�1FM�/�mr�����%|��t>�	��j�n8������ivE�E
����@S<�!,ww�P����<Y�����e�K3�	`��m�~�kj�Y�����
�d:^'��Erpf����0C\����p�t���a,��L�r�WW��=��iM|��C,C�=L;J�@��y%��yS�)iib9:8!/..�PK���gL�PKq^�[�< v4_tests/29c_plan.txtUT
FcKiHcKiFcKiux������6����B�E����(jpY ���]���I��b��%�����������~�(�_$J"%��/�����2��������/��*�c~Zm�����nu���9F����o����u��ut��?�y���x
���:�_�����u�H�k��1��x�m�b�\����WWW�����G_|�������7�����������7�z������"��w_��{����z���_}���U����C��|=[����8e`
�|�F��O��0�is{��2���g���qu�6��%�4&�����?q�����saT�<�O��v�{�����6������	�6�������������au�������`�RJ����!�^���/���o�g���������A�Yq��)��������/R}�Q������_�v�!�n����;����������p<��p=��0��F/��
����oN���m�s�����������~���	L`v�����z����/Aj���L\1���,>�2������0�j��Jx��H�����w�U���(�p�^j+���,<L������ ������2D���k��jw�^/���|�(�����e�Z������Ao��W�f0#��}��2P���x�^��;:Dc����?��j�O�S����a�K?�l����5b���?��=�E�������#����I�������|O�W��U�����f�Oo���U��������-��a	���sUe -\|���V��5E��i*�F�u�.^]�o��}���\�&�nl�/�[[����T��M������e�k���~%�"Z6E�b2�����}����<o��k���$���R%�G�E���$z���_�/%e����
�
Z-�]j�o��E}���z��m���Q����bd�����/����_��`T�J�T��azg�?�J�1F)cEC
����Vw��F��M����n04�z���O}K��5X�����`F ����A!��L�� �`RV#����z�!n$<�a:`1��&S�|J0c��:�&!e2��`���-���)��W�2�Cz�A�� c���2k6]F	]�R>;]�Qx���������$e��e]��1 �a������j��
���J�^�����wp<�N��!C;w�����@��Q2*����������j�w������q��W�S1l�DIW&)���h��h������Bg�,���|p��0G����������|����(��������a�n��~*_V��V���S�e�"	c�]�\zH�J���jH`&}$.+>���(�S�i��R���g������S�)��D����)�+
��*�PcX8���P�nVnu�R-�
5��4�?����J��[��<,ii��VV�n <,,<,,�q�u��[V?[������u��M��JyMf�J��0)g�1���gR�d����Y:����)sU����a������.����p���DP�-���������{�����+����K������Y����^G������f����?��j���N��n���)[�1�����ej��DS�|s���?���IH�PU����� ��)��b�m�$�������9��������}��������.�b��-��:����0�����;n����_�d�l�����h��LW�A|����[��:n����Y�����
T�6�r�~S�����<n�w�������|u���[�� e���e�������rO7�dW1�UF������9���H���1q����o,P�-r��5�#}��}�1��������>f)%�U��Y.T�^�WF�/��n�;j|�dtj�9.�\����a�\�9��<e��#p������7�m�ob��\�{8�o�"���k�|�|���'����?���+�8�+��;4_����&?o{�oo������n5�����������2Bq�;�W��^�w�:�����U�f���P���8F��zz>1�+�96{������	���M��^�DZ,��NI��!J~�0K�`��a��������r��p�c�����w����m�����H��������g������u������������.?�����x�}���5^���57��)�=?}}�{�9~8����3�����n�F@^�g-&�:,3O�f����������wO������Z�����&�i�jQ���A��L6��������k�F�����m���}?���VU�Ll	KCe���i,e���*D�e6_��;mT����AU=�[M��/����J�����������UY^u��."�w�3G���������X��"&Bc
���+��x<��������)��s6bsm�	���E�")�'u�:��X�}���a��A���q����li�[5,��C~<N72�yMX
0��t��������Q;Ho>��iw��^QC]�w9`��
�4��� ����������^��6���7?�
:n��9�}��l���?��du�����B��Vz��[����jW�����k�6{�VE+��+�X��*?�
����Q2�3�]7�����9��^��j�O2��h!W��Qd�N�9��\���������e���?u|<���O
���q��2������jE����]�)���Q�Q��{4��j�G�xS������Ye��H����b����p����������	�shR�D��E�3&���8��
L�o�D�k�{��}���Y���,�4=cC0������Um�`��Z�� g8�262 ?��t���^��!�!��W�<�]�r���:r�U��G�]��2�p��/����I[=��0�N\��*x������ox�x���y��7_�S��O(�����Z��g;�7P4�O^����X�xV�y�L��4���Y-�0���t`��,k�=�)��P��P:��$QT/�OC�l�H�6��a��fek���fZ��I�������v;����l���|Y�-/>z�3'(���/���b��|� �����Tv��������7�"=����Z��'���5d@�q��� (�
�I"��b��x��6��B���
n�xY��?��d�N�"d<~#ay�
�KC�A�)��"]�d�j����W��q�����M����9Ct��
�Ep�nk��+I�����]fH`P/��uVJ���T�zY�N`�T�c7�
7?icT-Ux�}�/��}��J2fAo�-pKW����%�
���K�2d�H3o�+������I�h�V9��il�/�J�����\>���*������a[D����Z��*���$�>bn����r�F�����1���z/�����I���,y���q�����|&�MH�s��	��9B�\%y��m���������1��^LR��GY\O��V�#+��|��:
�Ux#"+��V�
����1{x���y�����]��t�L����&	����a�~�[��,�y��[�>W
���m���� u�i�k����-
%gBjo��^�R�a�Mug��1�����^B���i~�o���	�/]e^7�����;�@�1mD���&oX��W�O1sGa�����mHM�cw�}a������p:)�s_��� 5�!H���;DA���4�hb����&��1�B��4L������$�yG�M�a�O�uE�))S'.Z
��@VVU�2
�����H�H���}G��z��k��3���Odb���9Q����zz��l����V���vO8��=W��T����RDn��������
:�>%|��@I��R�t�:�"}Jx���C�4��������-*S9�y�?���*
������a�T*�\�Z34!��hI�-�	�>�6W�2Re�"�n��_-5�.k){�;��=���|M�e�:�p�e������|�q�}L�P�q9����G���'���p��8�F���#�����?�������F��e����r�k�B�!�iu]�n�
9,q�A	R�|��P5R��k��9�3�5������%�A���Ba��
X,���aXe��dyWj�<V �T
]�������'�Q���MAU��� ���3n%�T�F��7Eg��|� �?4e>9phF����Fyg(������fG�.
�E����l�r�t]P�Q��CD���M1���K�-��B�^
,t9L����y��H����iC�^tA�� �Y(�bKy��J���y��}�&��M��Gl�BQ�M��Mljv��q�B���e	l��l�r�'_z�.	��kVH���I���
�����N��Jk��I�� /���k����yp���t�
O@$�d�]H���x~�o�)����'�R��Kzb���+g�v���J����X4r"38�P�X�t(��,�Nx�01gSFn2/P�$��M���(�p{2���vi@�Z[?=���b�.�;�'�MNl����e1��'R�Re�+&�M���|ybV�L<��2 m�[^G�Z��v�\����`T
�$��E�P�����.\p3���b6p���������U�H��sD
����@P)o P�yq�R6��t�]w)4N�5)�3� <��GF���+ab�m��c803���O7�����t^t)���	�W����i
��WP��5���lA�?��5_�4%�p�le����s5�_��@@D^���Ww��7����&Pz
��Y.R���;�cA���e����� e�E��;�5!aM���Q \]J�!�]32�������G[G��7�,��&T���=���J������S�lY��ivKQ�
L�k�
����g���+�G�F(�g�(<X��Y
}���Lj�v{sy�i�rU���(��y�	I�dqep
�P�����5���%G�#qvup/�?��Hx���bX��3�bf���X�N;w.N)oI���.e������ /�!S&���#�;X�����II�}M�)����)�JT4=��$�Q<��%�l�R�y_�l�j�V�K$������kGL�|B_��V;Z���D��^�hR�Z�6�8�YJ������k�f�E,��J�L�]�����'�?Ts���uz�����$�Q�8�����n�b���K��>M�I]���W'�"�)��2��z�����Q�&�qO2t-[W�"� U��>BCY*2�3X'<��f�^����%�ks�hA����7�E,��V)p���E�C.�!(�����_��y�/�ux���e�1^��7�c������S)��ET���n�����	GI�g���>���/�� Xx=�U)T3!|��,I�)O7)�a}
�v�����q���8�r�
��CJ)G����mB}���s�iF7)�YJ��Lb�?Pg�q�Y�3�������y������`��(+��zEb&D��r�2��peRsC��<��ROA�����y�Cj��T �0�d��m!tIH3�K�I-�7�Zr&5��?�xi��E��.{&��LjA��L �L�pd��K��5�h(���h4�_= M�7�I�Z�&�@�I-N���&5DM��V�:g�����i��3�����SU�wH��T�c���
����ga�I������#���g��<����.@��F��(}2��"��}�~)T��H~����������9�ziSK�J_��0������]�!�
6y�:����&��5�<Q[��N��3q�U4��RFMUO��y��q�'�eV'T�"y����	C`���)�E�[�1��K�������D.������
(r��1f	�n�"=\�?��� ~Y�<p��Px�q�8�/bK��v���ri��f0d��Pg�7���b�� ���P���0��z��6-&8�O
Y�`c�������5��FR�R�XK�"����j�<���j&S���c��%CNc��405����s�U���T�Vq���?�I�) �h0���_&W�\2R��j�<��%���Vc1qXM����RHV�jg�R�F}?d��������b}����D��4F�d|�Rg�`����MY�K�=���b
��Rc��\c�<��fR�Z��>�]��4k��kH%L���I����C-�/�OO�31e�I�AS�xu9�*;�D2����		b�S�z��i������sG�}Ry�v/���G�T���Z^���+��i�L�%"�HR�U�N������lm�V��,�v��u�}����Q��"�9O�[�Q,.�K�Ru)`^]Xm���MA��\m�nnj:�\�8�S��������j�#7�rs@�,�bR���mw��� �*ce��>J���2����������SRR��,~d��}�����Vc�B�Hq�&3^��E�`��������{ZaqY��!dA[vs��N�����'�Z-BPXR,"��.E� 5Y2q�s�+�Y���&��������Ce����,Y�5����E��#Vs�I0���?�!h[Bo�Y�����e����D���h=�B�8��)T�b*N�[�]�Sz(HZ�%���	�M"�gS�����]�h�����w��l&Z�T�9&��/��3+�g����B���D���P���"��s9�q����`\��`5��(�n`a?�	5�	�DB�#F<�����(�mw�GO�(w=���E�b�)�B�'P�YO���~#�(,s�1~Eu��(�	��
�'P���@Q�������,NI��uYI�.
�X��_d���l���A.��q�z
s��DE���"!�%��������%�u�d�������CM���;��]s��VF�D^���/��"�	��lq�����g������0E��&HE1���4��A��"�����l��%��*I%�Dl���'�b��3���$�#j1�����!$��z�%��I�)���m�>����9a��1��@��4%�V[����)B�����=�=P�����H����9�t#�EM���O8�����G��S>i����2!��'s�E�kdB�_&��)L��f��5�)��mS�8~K��x�c4�de����{�|��V2��S���Q���/�q�uL$�^�w�{�3�GQ#�y��6=���������hld�	���
��PK�X.Q�<PK���[�, v4_tests/3b_plan.txtUT
�Fi�Hi�Hiux��Y�n�8}�W(��@K�.��$�v7�6m��a��f�����&��o��.�eI��m!���He��p8�����:����D��q�N�c/FWa���:��"~�:���P��0�<�����	���>0D� J�Dt�Bo�p�dgG�z�N�������t�����������h4����������}�����������y�X[__G����a'=���X�=E���G�wo���8{���a���x��QA���gU���IN�����S�L���|/8Jp�%�=?I��twQ|�F�`n����e���Q����z��3'0�|�����	jW����+��r
����r�����t������Mt�EG��������`�7Z��f���U?��~R@�0��+����3E`8(I-���E����x���R�W�B�3N�@G�k�����(��#����rJ��Z������QGq��U�����bI{P��JsR�sd������M�Y)c�y�Q��oQ�(�4��xC<����h����D�`C�@�B��-w���Ce>����Vcc�q)��No�@'�p0G5�.���MG?~��c
�1y���M�]�R�s��k�����}�rkt��&C8�i���K|w����g���K����� NJ�Ua�fF(��R��Q)�Jsp��=�� �����mu�M=���1z��,YL�L_)D���$�W}���c�`�n�Hk�z���4���]�����,�-�lR�
�!�g�����\��
����u�}�F`"���t�vl��#+j�0PLc/�FYLA�w��d��!���3Z��aF�%
]^�h�D�/�-��r����z��3��Q:L�0�f�����e��Cw^#b��07���w��<g����?�q�7^�|2[N��lQwkz�7���6�k
�����Tf��w-Ia�*����!57*.V�\����=���WQ�[���.FL�	����N�K{�����[����$������Im;�.�J*�����_�w�8I'�n��m�^�uojnX@a�KU�SX�y�����a�0
]�-��z�������aj��|��(��D���|>y��H��$�������	&�=f�����������]��n�8��2� �� �T(&D�~8��j�i8�L�u�S�-a��2q�9^�;�cMe*s�c[���p�� T�b�1�E��R�
HZ�*6avS��|��-��o���cb{q�]������0."d���d��~O��;���_5�4���?�J��
����~$j;��������	A�6�$���r�s�9V,�t�a��.K])+������odD����m�$��k��>�J����w������l	)�U�A}�KCh����u�86�������*-���[��S���#�=P�c��e���������V�,�i�9�%����.�7@�����h���t[�#l�o�z���C93��$����a�q�
C��0�*y+-�eL�����H��E�u�"y��t$o[��,�;�=�y�>[���n�ve�;R5�ke	L`�������Z��O����Q�U@��i\)=H�H���� �p����F[�����f$P`!)�#�V��J��j���2k��r�X��``r$���Wu�� ����Z��K'#��I��������g�*~��:l�iA����A�~��k�a����]YN5�S����]m�k����+�?�[
�i������6%�L�d��X*��PKN%|��,PK���[� __MACOSX/v4_tests/._3b_plan.txtUT
�Fi�Hi�Tiux�c`cg`b`�MLV�V�P��'�* ��0CB��L��)@����!������XP��������ml�����k��k���
�*��PKVY��Z�PKe�[�x v4_tests/17b_plan.txtUT
1zGi�Hi�Hiux���[��J���+Z:Z��~iVvY�9<����ckgH����o��N|M�I2�3n	�q������+�>=�Y���8���2O���}�/���pq}����F�l�Z!z������>8N���*�S�QD�	''���g�#L�n����h���m�z����w������w������'�����C�h�~��?��__�?�����Cl#���b^�pC�i0_&�B�5��op���X�R�#�$�N�x����d5��$���L*b0�
�|�d����|~���Q?���Ur�fQ�4��x>{^|��y���5\,O���x��-JN%#�r��xr�	%��C_����2��~�o��o��Y��=$�=���+�-��.0��@2NT����B�>o����p�>���xn�X��!�o��I�D�^]��E3�:����J�S�������8�>�&�k�n������U�c���t���$�.�|L��S&5�N���J	�M���A�g�?�0qvYx��}�M������u��&���YNk�p��4V�iJlhUS��))A�L*���4�O_���U_��F��h�X����s�
�X�Lw\�e�q��HL-�3���9nyW���x���Tsm:�}�&Y�(�������iQ��F
�
M6��|�U��*���\WP#H?���K�a^�I����i�,����q��1�Z}�F���t������`DQV��U
,�XB�-�{�Ut�����;�6����0���`>��a�Ih.N���	�)z�*A�p��y��(~�D�4|rr��?������!����z����l�sU������gqF~%���W�U���^���e�-(���-���n��dP���CbO�����Ix�6\���c|�K�zO�9��N����N_M��%�(�	Z9�T
����M��0�[����I�sm����e��]�#����bq�5u���9��}����S2��Yk�����X���8�m1�0�:���ZF����y0^&�Q�u^���� �H�uH���q�#��#�x��8gf��V�#��,�����[��t�+�'��X��1�E�";�k'J#����}�W�e��T#���4#�YFB��[Y�hp���
�|a�}(.��{���pmY�Q�#��?6i��>�������X�W����������0N��=�r��<�Z��;���f��1���j��W���)�8(;��|����'��[�`�����0yk�,�m�DXmj�P�6��C<�.�4����t'Jj�N�J�RB���%n!�i���-*03�6�) ��o���~��W����w)G���UJ�������D.k9���YP�T�	d{xix *��4�-U�&i&��2J)�L�����`�F��?(������Z�q\p�9�,#�f��ek������8{����N7"�O���F)�j�YA��<���M�%k����O��N;���QO�(i�����8}��b���	�&�"�BH�7�C�@c`n���-G���0X%���q-�/�w�j����<p1��;C�Hp�B��K�X�ZS��R�q���dG��r��q�|S�`����X�-!�%���j���;�u�b���m�ZD���\ �4��W����c���} �P���*W�P.(���c�=��MbY^�$MK�&
�4ul�A;�@�`V�6��p�F{���� 2�8����P
�I������Dm��V�h�N?�`E��Q
�q�K���m��g��*)RG��V^���qx��'��X��'�J�����!��
<�CB��+�p��14*.zV��f�5G�d*�Q.l{�����laD��U{pEs�Ef�+:P����1�)��o5�4d(&��Ps��=�J�s��J������y���a�=�S;�K6�?���f��]�����Mj=``��X:��iA��GD�b'2tZ9�g����������6jd��F�
����b��)Qm��3�H=r��*]�t�r��?����E���K�w�$�T4[t���u3+�.�Qa���j�{Ul�X���b�i$�����=�Pq�S+V���j�jj��i�Ji�����@3N���t)'(Bj�����n�!�x��\<X���49_F���o����8�k���t�^V����,��@����������m�r�v�jW��(7�`���~U�u�s�����F���@*�)�r-�a���t��I��
0M��K����G�����UG.�7��������7��
��8�O�<�O%L��q�K��o�?s��K��[�5��N���5�O����n�?-]�:P���h\Xj��9`@�[>~'�_�~i7 ����a!~����h�}�'�B��A�0�}��p2�}�7��m1O7M���������2���Gf����y0�8f�?:����&���P���6����>|���
��<U��n��*��b+�����
������
|=�/d��
=�������e#��
|��
|��������?����7��Q�}X,���Y�������$�o"�DkL���nC� �\�,�����?@�8�r7�O����-��9:K�6��0~A��?�h��T��N��"b�Kc�b�s�$R%O�2cI!����m�M���X�rJ^�����|	�<��w���}�+���O���������
@���,����%]k�+`��6��\yKR���w(���"e	�8:�.i5k9@���^p����)�
�~
�]1UB���<�^;rk��CH���R�����H����)�w�f{<�����p��6��SNu�v���c,������o���c��c:3�z_{=z���@%��F���n����/b|�w��T��}��W�����R{����>l"��Z�A=�A��PK6�%t�xPK�b�[	 �Av4_tests/UT
��Ti��Ti��Tiux�PK�b�[�<��%Z ��Gv4_tests/12b_plan.txtUT
��Ti��Ti��Tiux�PKnb�[j�m� ���v4_tests/.DS_StoreUT
Q�TiQ�TiQ�Tiux�PKnb�[��85x ���__MACOSX/v4_tests/._.DS_StoreUT
Q�Ti�Ti�Tiux�PKq^�[�'�}��� ���
v4_tests/31a_plan.txtUT
FcKiHcKiFcKiux�PK�s�[F�G�� ���!v4_tests/run_job.shUT
��Hi��Hi��Hiux�PK�s�[VY��Z� ���)__MACOSX/v4_tests/._run_job.shUT
��Hi��Hi�Tiux�PKt�[�����2 ���*v4_tests/run_analysis.shUT
��Hi��Hi��Hiux�PK���[#���gCZ ���0v4_tests/11b_plan.txtUT
��Fi�Hi�Hiux�PK���[VY��Z�  ��R<__MACOSX/v4_tests/._11b_plan.txtUT
��Fi�Hi�Tiux�PK�d�[���gL� ��=v4_tests/15a_plan.txtUT
�yGi�Hi�Hiux�PKq^�[�X.Q�< ���Ov4_tests/29c_plan.txtUT
FcKiHcKiFcKiux�PK���[N%|��, ���lv4_tests/3b_plan.txtUT
�Fi�Hi�Hiux�PK���[VY��Z� ���s__MACOSX/v4_tests/._3b_plan.txtUT
�Fi�Hi�Tiux�PKe�[6�%t�x ���tv4_tests/17b_plan.txtUT
1zGi�Hi�Hiux�PK�~�
v4-0001-Add-GOO-Greedy-Operator-Ordering-join-sear.patchapplication/octet-stream; name=v4-0001-Add-GOO-Greedy-Operator-Ordering-join-sear.patchDownload
From 79c4d3fa7d83a24b3937ed2e4d5568bcb949e820 Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Wed, 10 Dec 2025 12:52:17 +0800
Subject: [PATCH v4 1/2] Add GOO (Greedy Operator Ordering) join search
 as an alternative to GEQO

Introduce a greedy join search algorithm (GOO) to handle
large join problems. GOO builds join relations iteratively, maintaining
a list of clumps (join components) and committing to the cheapest
legal join at each step until only one clump remains.

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/Makefile           |   1 +
 src/backend/optimizer/path/allpaths.c         |   4 +
 src/backend/optimizer/path/goo.c              | 612 +++++++++++++++
 src/backend/optimizer/path/meson.build        |   1 +
 src/backend/utils/misc/guc_parameters.dat     |   9 +
 src/backend/utils/misc/postgresql.conf.sample |   1 +
 src/include/optimizer/goo.h                   |  23 +
 src/include/optimizer/paths.h                 |   1 +
 src/test/regress/expected/goo.out             | 700 ++++++++++++++++++
 src/test/regress/expected/sysviews.out        |   3 +-
 src/test/regress/parallel_schedule            |   9 +-
 src/test/regress/sql/goo.sql                  | 364 +++++++++
 12 files changed, 1724 insertions(+), 4 deletions(-)
 create mode 100644 src/backend/optimizer/path/goo.c
 create mode 100644 src/include/optimizer/goo.h
 create mode 100644 src/test/regress/expected/goo.out
 create mode 100644 src/test/regress/sql/goo.sql

diff --git a/src/backend/optimizer/path/Makefile b/src/backend/optimizer/path/Makefile
index 1e199ff66f7..3bc825cd845 100644
--- a/src/backend/optimizer/path/Makefile
+++ b/src/backend/optimizer/path/Makefile
@@ -17,6 +17,7 @@ OBJS = \
 	clausesel.o \
 	costsize.o \
 	equivclass.o \
+	goo.o \
 	indxpath.o \
 	joinpath.o \
 	joinrels.o \
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c
index 4c43fd0b19b..4574b1f44cc 100644
--- a/src/backend/optimizer/path/allpaths.c
+++ b/src/backend/optimizer/path/allpaths.c
@@ -35,6 +35,7 @@
 #include "optimizer/clauses.h"
 #include "optimizer/cost.h"
 #include "optimizer/geqo.h"
+#include "optimizer/goo.h"
 #include "optimizer/optimizer.h"
 #include "optimizer/pathnode.h"
 #include "optimizer/paths.h"
@@ -3845,6 +3846,9 @@ make_rel_from_joinlist(PlannerInfo *root, List *joinlist)
 
 		if (join_search_hook)
 			return (*join_search_hook) (root, levels_needed, initial_rels);
+		/* WIP: for now use geqo_threshold for testing */
+		else if (enable_goo_join_search && levels_needed >= geqo_threshold)
+			return goo_join_search(root, levels_needed, initial_rels);
 		else if (enable_geqo && levels_needed >= geqo_threshold)
 			return geqo(root, levels_needed, initial_rels);
 		else
diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
new file mode 100644
index 00000000000..247dbb5f921
--- /dev/null
+++ b/src/backend/optimizer/path/goo.c
@@ -0,0 +1,612 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.c
+ *     Greedy operator ordering (GOO) join search for large join problems
+ *
+ * GOO is a deterministic greedy operator ordering algorithm that constructs
+ * join relations iteratively, always committing to the cheapest legal join at
+ * each step. The algorithm maintains a list of "clumps" (join components),
+ * initially one per base relation. At each iteration, it evaluates all legal
+ * pairs of clumps, selects the pair that produces the cheapest join according
+ * to the planner's cost model, and replaces those two clumps with the
+ * resulting joinrel. This continues until only one clump remains.
+ *
+ * ALGORITHM COMPLEXITY:
+ *
+ * Time Complexity: O(n^3) where n is the number of base relations.
+ * - The algorithm performs (n - 1) iterations, merging two clumps each time.
+ * - At iteration i, there are (n - i + 1) remaining clumps, requiring
+ *   O((n-i)^2) pair evaluations to find the cheapest join.
+ * - Total: Sum of (n-i)^2 for i=1 to n-1 ≈ O(n^3)
+ *
+ * REFERENCES:
+ *
+ * This implementation is based on the algorithm described in:
+ *
+ * Leonidas Fegaras, "A New Heuristic for Optimizing Large Queries",
+ * Proceedings of the 9th International Conference on Database and Expert
+ * Systems Applications (DEXA '98), August 1998, Pages 726-735.
+ * https://dl.acm.org/doi/10.5555/648311.754892
+ *
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/backend/optimizer/path/goo.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include "postgres.h"
+
+#include "miscadmin.h"
+#include "nodes/bitmapset.h"
+#include "nodes/pathnodes.h"
+#include "optimizer/geqo.h"
+#include "optimizer/goo.h"
+#include "optimizer/joininfo.h"
+#include "optimizer/pathnode.h"
+#include "optimizer/paths.h"
+#include "utils/hsearch.h"
+#include "utils/memutils.h"
+
+/*
+ * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
+ */
+bool		enable_goo_join_search = false;
+
+/*
+ * Working state for a single GOO search invocation.
+ *
+ * This structure holds all the state needed during a greedy join order search.
+ * It manages three memory contexts with different lifetimes to avoid memory
+ * bloat during large join searches.
+ *
+ * TODO: Consider using the extension_state mechanism in PlannerInfo (similar
+ * to GEQO's approach) instead of passing GooState separately.
+ */
+typedef struct GooState
+{
+	PlannerInfo *root;			/* global planner state */
+	MemoryContext goo_cxt;		/* long-lived (per-search) allocations */
+	MemoryContext cand_cxt;		/* per-iteration candidate storage */
+	MemoryContext scratch_cxt;	/* per-candidate speculative evaluation */
+	List	   *clumps;			/* remaining join components (RelOptInfo *) */
+
+	/*
+	 * "clumps" are similar to GEQO's concept (see geqo_eval.c): join
+	 * components that haven't been merged yet. Initially one per base
+	 * relation, gradually merged until one remains.
+	 */
+	bool		clause_pair_present;	/* any clause-connected pair exists? */
+}			GooState;
+
+/*
+ * Candidate join between two clumps.
+ *
+ * This structure holds the greedy metrics from a speculative joinrel
+ * evaluation. We create this lightweight structure in cand_cxt after discarding
+ * the actual joinrel from scratch_cxt, allowing us to compare many candidates
+ * without exhausting memory.
+ */
+typedef struct GooCandidate
+{
+	RelOptInfo *left;			/* left input clump */
+	RelOptInfo *right;			/* right input clump */
+	Cost		total_cost;		/* total cost of cheapest path */
+}			GooCandidate;
+
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels);
+static void goo_destroy_state(GooState * state);
+static RelOptInfo *goo_search_internal(GooState * state);
+static void goo_reset_probe_state(GooState * state, int saved_rel_len,
+								  struct HTAB *saved_hash);
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right);
+static RelOptInfo *goo_commit_join(GooState * state, GooCandidate * cand);
+static bool goo_candidate_better(GooCandidate * a, GooCandidate * b);
+static bool goo_candidate_prunable(GooState * state, RelOptInfo *left,
+								   RelOptInfo *right);
+
+/*
+ * goo_join_search
+ *		Entry point for Greedy Operator Ordering join search algorithm.
+ *
+ * This function is called from make_rel_from_joinlist() when
+ * enable_goo_join_search is true and the number of relations meets or
+ * exceeds geqo_threshold.
+ *
+ * Returns the final RelOptInfo representing the join of all base relations,
+ * or errors out if no valid join order can be found.
+ */
+RelOptInfo *
+goo_join_search(PlannerInfo *root, int levels_needed,
+				List *initial_rels)
+{
+	GooState   *state;
+	RelOptInfo *result;
+	int			base_rel_count;
+	struct HTAB *base_hash;
+
+	/* Initialize search state and memory contexts */
+	state = goo_init_state(root, initial_rels);
+
+	/*
+	 * Save initial state of join_rel_list and join_rel_hash so we can restore
+	 * them if the search fails.
+	 */
+	base_rel_count = list_length(root->join_rel_list);
+	base_hash = root->join_rel_hash;
+
+	/* Run the main greedy search loop */
+	result = goo_search_internal(state);
+
+	if (result == NULL)
+	{
+		/* Restore planner state before reporting error */
+		root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+		root->join_rel_hash = base_hash;
+		elog(ERROR, "GOO join search failed to find a valid join order");
+	}
+
+	goo_destroy_state(state);
+	return result;
+}
+
+/*
+ * goo_init_state
+ *		Initialize per-search state and memory contexts.
+ *
+ * Creates the GooState structure and three memory contexts with different
+ * lifetimes:
+ *
+ * - goo_cxt: Lives for the entire search, holds the clumps list and state.
+ * - cand_cxt: Reset after each iteration, holds candidate structures during
+ *   the comparison phase.
+ * - scratch_cxt: Reset after each candidate evaluation, holds speculative
+ *   joinrels that are discarded before committing to a choice.
+ *
+ * The three-context design prevents memory bloat during large join searches
+ * where we may evaluate hundreds or thousands of candidate joins.
+ */
+static GooState * goo_init_state(PlannerInfo *root, List *initial_rels)
+{
+	MemoryContext oldcxt;
+	GooState   *state;
+
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	state = palloc(sizeof(GooState));
+	state->root = root;
+	state->clumps = NIL;
+	state->clause_pair_present = false;
+
+	/* Create the three-level memory context hierarchy */
+	state->goo_cxt = AllocSetContextCreate(root->planner_cxt, "GOOStateContext",
+										   ALLOCSET_DEFAULT_SIZES);
+	state->cand_cxt = AllocSetContextCreate(state->goo_cxt, "GOOCandidateContext",
+											ALLOCSET_SMALL_SIZES);
+	state->scratch_cxt = AllocSetContextCreate(
+											   state->goo_cxt, "GOOScratchContext", ALLOCSET_SMALL_SIZES);
+
+	/*
+	 * Copy the initial_rels list into goo_cxt. This becomes our working
+	 * clumps list that we'll modify throughout the search.
+	 */
+	MemoryContextSwitchTo(state->goo_cxt);
+	state->clumps = list_copy(initial_rels);
+
+	MemoryContextSwitchTo(oldcxt);
+
+	return state;
+}
+
+/*
+ * goo_destroy_state
+ *		Free all memory allocated for the GOO search.
+ *
+ * Deletes the goo_cxt memory context (which recursively deletes cand_cxt
+ * and scratch_cxt as children) and then frees the state structure itself.
+ * This is called after the search completes successfully or fails.
+ */
+static void
+goo_destroy_state(GooState * state)
+{
+	MemoryContextDelete(state->goo_cxt);
+	pfree(state);
+}
+
+/*
+ * goo_search_internal
+ *		Main greedy search loop.
+ *
+ * Implements a two-pass algorithm at each iteration:
+ *
+ * Pass 1: Scan all clump pairs to detect whether any clause-connected pairs
+ *         exist. This sets the clause_pair_present flag.
+ *
+ * Pass 2: Evaluate all viable candidate pairs, keeping track of the best one
+ *         according to our comparison criteria. If clause_pair_present is true,
+ *         we skip Cartesian products entirely to avoid expensive cross joins.
+ *
+ * After selecting the best candidate, we permanently create its joinrel in
+ * planner_cxt and replace the two input clumps with this new joinrel. This
+ * continues until only one clump remains.
+ *
+ * The function runs primarily in goo_cxt, temporarily switching to planner_cxt
+ * when creating permanent joinrels and to scratch_cxt when evaluating
+ * speculative candidates.
+ *
+ * Returns the final joinrel spanning all base relations, or NULL on failure.
+ */
+static RelOptInfo *
+goo_search_internal(GooState * state)
+{
+	PlannerInfo *root = state->root;
+	RelOptInfo *final_rel = NULL;
+	MemoryContext oldcxt;
+
+	/*
+	 * Switch to goo_cxt for the entire search process. This ensures that all
+	 * operations on state->clumps and related structures happen in the
+	 * correct memory context.
+	 */
+	oldcxt = MemoryContextSwitchTo(state->goo_cxt);
+
+	while (list_length(state->clumps) > 1)
+	{
+		ListCell   *lc1;
+		int			i;
+		GooCandidate *best_candidate = NULL;
+
+		/* Allow query cancellation during long join searches */
+		CHECK_FOR_INTERRUPTS();
+
+		/* Reset candidate context for this iteration */
+		MemoryContextReset(state->cand_cxt);
+		state->clause_pair_present = false;
+
+		/*
+		 * Pass 1: Scan all pairs to detect clause-connected joins.
+		 *
+		 * We need to know whether ANY clause-connected pairs exist before we
+		 * can decide whether to skip Cartesian products. This quick scan
+		 * allows us to prefer well-connected joins without completely
+		 * forbidding Cartesian products (which may be necessary for
+		 * disconnected query graphs).
+		 */
+		for (i = 0, lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1), i++)
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+
+				/* Check if this pair has a join clause or order restriction */
+				if (have_relevant_joinclause(root, left, right) ||
+					have_join_order_restriction(root, left, right))
+				{
+					/* Found at least one clause-connected pair */
+					state->clause_pair_present = true;
+					break;
+				}
+			}
+
+			if (state->clause_pair_present)
+				break;
+		}
+
+		/*
+		 * Pass 2: Evaluate all viable candidate pairs and select the best.
+		 *
+		 * For each pair that passes the pruning check, we do a full
+		 * speculative evaluation using make_join_rel() to get accurate costs.
+		 * The candidate with the best cost (according to
+		 * goo_candidate_better) is remembered and will be committed after
+		 * this pass.
+		 *
+		 * TODO: It might be worth caching cost estimates if the same join
+		 * pair appears in multiple iterations.
+		 */
+		for (lc1 = list_head(state->clumps); lc1 != NULL;
+			 lc1 = lnext(state->clumps, lc1))
+		{
+			RelOptInfo *left = lfirst_node(RelOptInfo, lc1);
+			ListCell   *lc2 = lnext(state->clumps, lc1);
+
+			for (; lc2 != NULL; lc2 = lnext(state->clumps, lc2))
+			{
+				RelOptInfo *right = lfirst_node(RelOptInfo, lc2);
+				GooCandidate *cand;
+
+				cand = goo_build_candidate(state, left, right);
+				if (cand == NULL)
+					continue;
+
+				/* Track the best candidate seen so far */
+				if (best_candidate == NULL ||
+					goo_candidate_better(cand, best_candidate))
+					best_candidate = cand;
+			}
+		}
+
+		/* We must have at least one valid join candidate */
+		if (best_candidate == NULL)
+			elog(ERROR, "GOO join search failed to find any valid join candidates");
+
+		/*
+		 * Commit the best candidate: create the joinrel permanently and
+		 * update the clumps list.
+		 */
+		final_rel = goo_commit_join(state, best_candidate);
+
+		if (final_rel == NULL)
+			elog(ERROR, "GOO join search failed to commit join");
+	}
+
+	/* Switch back to the original context before returning */
+	MemoryContextSwitchTo(oldcxt);
+
+	return final_rel;
+}
+
+/*
+ * goo_candidate_prunable
+ *		Determine whether a candidate pair should be skipped.
+ *
+ * We use a two-level pruning strategy:
+ *
+ * 1. Pairs with join clauses or join-order restrictions are never prunable.
+ *    These represent natural joins or required join orders (e.g., from outer
+ *    joins or LATERAL references).
+ *
+ * 2. If clause_pair_present is true (meaning at least one clause-connected
+ *    pair exists in this iteration), we prune Cartesian products to avoid
+ *    evaluating expensive cross joins when better options are available.
+ *
+ * However, if NO clause-connected pairs exist in an iteration, we allow
+ * Cartesian products to be considered. This ensures we can always make
+ * progress even with disconnected query graphs.
+ *
+ * Returns true if the pair should be pruned (skipped), false otherwise.
+ */
+static bool
+goo_candidate_prunable(GooState * state, RelOptInfo *left,
+					   RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	bool		has_clause = have_relevant_joinclause(root, left, right);
+	bool		has_restriction = have_join_order_restriction(root, left, right);
+
+	if (has_clause || has_restriction)
+		return false;			/* never prune clause-connected joins */
+
+	return state->clause_pair_present;
+}
+
+/*
+ * goo_build_candidate
+ *		Evaluate a potential join between two clumps and return a candidate.
+ *
+ * This function performs a speculative join evaluation to extract greedy metrics
+ * without permanently creating the joinrel. The process is:
+ *
+ * 1. Check basic viability (pruning, overlapping relids).
+ * 2. Switch to scratch_cxt and create the joinrel using make_join_rel().
+ * 3. Generate paths (including partitionwise and parallel variants).
+ * 4. Extract the greedy metrics from the cheapest path.
+ * 5. Discard the joinrel by calling goo_reset_probe_state().
+ * 6. Create a lightweight GooCandidate in cand_cxt with the extracted metrics.
+ *
+ * This evaluate-and-discard pattern prevents memory bloat when evaluating
+ * many candidates. The winning candidate will be rebuilt permanently later
+ * by goo_commit_join().
+ *
+ * Returns a GooCandidate structure, or NULL if the join is illegal or
+ * overlapping. Assumes the caller is in goo_cxt.
+ */
+static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
+										  RelOptInfo *right)
+{
+	PlannerInfo *root = state->root;
+	MemoryContext oldcxt;
+	int			saved_rel_len;
+	struct HTAB *saved_hash;
+	RelOptInfo *joinrel;
+	Cost		total_cost;
+	GooCandidate *cand;
+
+	/* Skip if this pair should be pruned */
+	if (goo_candidate_prunable(state, left, right))
+		return NULL;
+
+	/* Sanity check: ensure the clumps don't overlap */
+	if (bms_overlap(left->relids, right->relids))
+		return NULL;
+
+	/*
+	 * Save state before speculative join evaluation. We'll create the joinrel
+	 * in scratch_cxt and then discard it.
+	 */
+	saved_rel_len = list_length(root->join_rel_list);
+	saved_hash = root->join_rel_hash;
+
+	/* Switch to scratch_cxt for speculative joinrel creation */
+	oldcxt = MemoryContextSwitchTo(state->scratch_cxt);
+
+	/*
+	 * Temporarily disable join_rel_hash so make_join_rel() doesn't find or
+	 * cache this speculative joinrel.
+	 */
+	root->join_rel_hash = NULL;
+
+	/*
+	 * Create the joinrel and generate all its paths.
+	 *
+	 * TODO: This is the most expensive part of GOO. Each candidate evaluation
+	 * performs full path generation via make_join_rel().
+	 */
+	joinrel = make_join_rel(root, left, right);
+
+	if (joinrel == NULL)
+	{
+		/* Invalid or illegal join, clean up and return NULL */
+		MemoryContextSwitchTo(oldcxt);
+		goo_reset_probe_state(state, saved_rel_len, saved_hash);
+		return NULL;
+	}
+
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	total_cost = joinrel->cheapest_total_path->total_cost;
+
+	/*
+	 * Switch back to goo_cxt and discard the speculative joinrel.
+	 * goo_reset_probe_state() will clean up join_rel_list, join_rel_hash, and
+	 * reset scratch_cxt to free all the joinrel's memory.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+	goo_reset_probe_state(state, saved_rel_len, saved_hash);
+
+	/*
+	 * Now create the candidate structure in cand_cxt. This will survive until
+	 * the end of this iteration (when cand_cxt is reset).
+	 */
+	oldcxt = MemoryContextSwitchTo(state->cand_cxt);
+	cand = palloc(sizeof(GooCandidate));
+	cand->left = left;
+	cand->right = right;
+	cand->total_cost = total_cost;
+	MemoryContextSwitchTo(oldcxt);
+
+	return cand;
+}
+
+/*
+ * goo_reset_probe_state
+ *		Clean up after a speculative joinrel evaluation.
+ *
+ * Reverts the planner's join_rel_list and join_rel_hash to their saved state,
+ * removing any joinrels that were created during speculative evaluation.
+ * Also resets scratch_cxt to free all memory used by the discarded joinrel
+ * and its paths.
+ *
+ * This function is called after extracting cost metrics from a speculative
+ * joinrel that we don't want to keep.
+ */
+static void
+goo_reset_probe_state(GooState * state, int saved_rel_len,
+					  struct HTAB *saved_hash)
+{
+	PlannerInfo *root = state->root;
+
+	/* Remove speculative joinrels from the planner's lists */
+	root->join_rel_list = list_truncate(root->join_rel_list, saved_rel_len);
+	root->join_rel_hash = saved_hash;
+
+	/* Free all memory used during speculative evaluation */
+	MemoryContextReset(state->scratch_cxt);
+}
+
+/*
+ * goo_commit_join
+ *		Permanently create the chosen join and update the clumps list.
+ *
+ * After selecting the best candidate in an iteration, we need to permanently
+ * create its joinrel (with all paths) and integrate it into the planner state.
+ * This function:
+ *
+ * 1. Switches to planner_cxt and creates the joinrel using make_join_rel().
+ *    Unlike the speculative evaluation, this joinrel is kept permanently.
+ * 2. Generates partitionwise and parallel path variants.
+ * 3. Determines the cheapest paths.
+ * 4. Updates state->clumps by removing the two input clumps and adding the
+ *    new joinrel as a single clump.
+ *
+ * The next iteration will treat this joinrel as an atomic unit that can be
+ * joined with other remaining clumps.
+ *
+ * Returns the newly created joinrel. Assumes the caller is in goo_cxt.
+ */
+static RelOptInfo *
+goo_commit_join(GooState * state, GooCandidate * cand)
+{
+	MemoryContext oldcxt;
+	PlannerInfo *root = state->root;
+	RelOptInfo *joinrel;
+
+	/*
+	 * Create the joinrel permanently in planner_cxt. Unlike the speculative
+	 * evaluation in goo_build_candidate(), this joinrel will be kept and
+	 * added to root->join_rel_list for use by the rest of the planner.
+	 */
+	oldcxt = MemoryContextSwitchTo(root->planner_cxt);
+
+	joinrel = make_join_rel(root, cand->left, cand->right);
+	if (joinrel == NULL)
+	{
+		MemoryContextSwitchTo(oldcxt);
+		elog(ERROR, "GOO join search failed to create join relation");
+	}
+
+	/* Generate additional path variants, just like standard_join_search() */
+	bool		is_top_rel = bms_equal(joinrel->relids, root->all_query_rels);
+
+	generate_partitionwise_join_paths(root, joinrel);
+	if (!is_top_rel)
+		generate_useful_gather_paths(root, joinrel, false);
+	set_cheapest(joinrel);
+
+	if (joinrel->grouped_rel != NULL && !is_top_rel)
+	{
+		RelOptInfo *grouped_rel = joinrel->grouped_rel;
+
+		Assert(IS_GROUPED_REL(grouped_rel));
+
+		generate_grouped_paths(root, grouped_rel, joinrel);
+		set_cheapest(grouped_rel);
+	}
+
+	/*
+	 * Switch back to goo_cxt and update the clumps list. Remove the two input
+	 * clumps and add the new joinrel as a single clump.
+	 */
+	MemoryContextSwitchTo(oldcxt);
+
+	state->clumps = list_delete_ptr(state->clumps, cand->left);
+	state->clumps = list_delete_ptr(state->clumps, cand->right);
+	state->clumps = lappend(state->clumps, joinrel);
+
+	return joinrel;
+}
+
+/*
+ * goo_candidate_better
+ *		Compare two join candidates and determine which is better.
+ *
+ * Returns true if candidate 'a' should be preferred over candidate 'b'.
+ */
+static bool
+goo_candidate_better(GooCandidate * a, GooCandidate * b)
+{
+	return (a->total_cost < b->total_cost);
+}
diff --git a/src/backend/optimizer/path/meson.build b/src/backend/optimizer/path/meson.build
index 12f36d85cb6..e5046365a37 100644
--- a/src/backend/optimizer/path/meson.build
+++ b/src/backend/optimizer/path/meson.build
@@ -5,6 +5,7 @@ backend_sources += files(
   'clausesel.c',
   'costsize.c',
   'equivclass.c',
+  'goo.c',
   'indxpath.c',
   'joinpath.c',
   'joinrels.c',
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index 3b9d8349078..a8ce31ab8a7 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -840,6 +840,15 @@
   boot_val => 'true',
 },
 
+/* WIP: for now keep this in QUERY_TUNING_GEQO group for testing convenience */
+{ name => 'enable_goo_join_search', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Enables the planner\'s use of GOO join search for large join problems.',
+  long_desc => 'Greedy Operator Ordering (GOO) is a deterministic join search algorithm for queries with many relations.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'enable_goo_join_search',
+  boot_val => 'false',
+},
+
 { name => 'enable_group_by_reordering', type => 'bool', context => 'PGC_USERSET', group => 'QUERY_TUNING_METHOD',
   short_desc => 'Enables reordering of GROUP BY keys.',
   flags => 'GUC_EXPLAIN',
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index dc9e2255f8a..8284e8b1da7 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -456,6 +456,7 @@
 # - Genetic Query Optimizer -
 
 #geqo = on
+#enable_goo_join_search = off
 #geqo_threshold = 12
 #geqo_effort = 5                        # range 1-10
 #geqo_pool_size = 0                     # selects default based on effort
diff --git a/src/include/optimizer/goo.h b/src/include/optimizer/goo.h
new file mode 100644
index 00000000000..0080dfa2ac8
--- /dev/null
+++ b/src/include/optimizer/goo.h
@@ -0,0 +1,23 @@
+/*-------------------------------------------------------------------------
+ *
+ * goo.h
+ *     prototype for the greedy operator ordering join search
+ *
+ * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * IDENTIFICATION
+ *     src/include/optimizer/goo.h
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef GOO_H
+#define GOO_H
+
+#include "nodes/pathnodes.h"
+#include "nodes/pg_list.h"
+
+extern RelOptInfo *goo_join_search(PlannerInfo *root, int levels_needed,
+								   List *initial_rels);
+
+#endif							/* GOO_H */
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index f6a62df0b43..5b3ebe5f1d2 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -21,6 +21,7 @@
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
+extern PGDLLIMPORT bool enable_goo_join_search;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
diff --git a/src/test/regress/expected/goo.out b/src/test/regress/expected/goo.out
new file mode 100644
index 00000000000..0b41634c968
--- /dev/null
+++ b/src/test/regress/expected/goo.out
@@ -0,0 +1,700 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+ANALYZE;
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+                              QUERY PLAN                              
+----------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: ("*VALUES*".column1 = "*VALUES*_2".column1)
+         ->  Hash Join
+               Hash Cond: ("*VALUES*".column1 = "*VALUES*_1".column1)
+               ->  Values Scan on "*VALUES*"
+               ->  Hash
+                     ->  Values Scan on "*VALUES*_1"
+         ->  Hash
+               ->  Values Scan on "*VALUES*_2"
+(10 rows)
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+             QUERY PLAN              
+-------------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t5
+               Filter: (f = 3)
+         ->  Nested Loop
+               ->  Seq Scan on t1
+                     Filter: (a = 1)
+               ->  Seq Scan on t2
+                     Filter: (c = 2)
+(9 rows)
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+ count 
+-------
+     1
+(1 row)
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+                                QUERY PLAN                                 
+---------------------------------------------------------------------------
+ Aggregate
+   ->  Nested Loop
+         Join Filter: (fact.dim4_id = dim4.id)
+         ->  Hash Join
+               Hash Cond: (dim3.id = fact.dim3_id)
+               ->  Seq Scan on dim3
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (dim2.id = fact.dim2_id)
+                           ->  Seq Scan on dim2
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (fact.dim1_id = dim1.id)
+                                       ->  Seq Scan on fact
+                                       ->  Hash
+                                             ->  Seq Scan on dim1
+                                                   Filter: (id < 5)
+         ->  Seq Scan on dim4
+(18 rows)
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+                           QUERY PLAN                           
+----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t7.h = t9.h)
+         ->  Hash Join
+               Hash Cond: (t8.i = t10.i)
+               ->  Hash Join
+                     Hash Cond: (t2.c = t4.c)
+                     ->  Hash Join
+                           Hash Cond: (t3.b = t1.b)
+                           ->  Hash Join
+                                 Hash Cond: (t5.f = t7.f)
+                                 ->  Hash Join
+                                       Hash Cond: (t3.d = t5.d)
+                                       ->  Seq Scan on t3
+                                       ->  Hash
+                                             ->  Seq Scan on t5
+                                 ->  Hash
+                                       ->  Seq Scan on t7
+                           ->  Hash
+                                 ->  Hash Join
+                                       Hash Cond: (t1.a = t2.a)
+                                       ->  Seq Scan on t1
+                                       ->  Hash
+                                             ->  Seq Scan on t2
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t6.g = t8.g)
+                                 ->  Hash Join
+                                       Hash Cond: (t4.e = t6.e)
+                                       ->  Seq Scan on t4
+                                       ->  Hash
+                                             ->  Seq Scan on t6
+                                 ->  Hash
+                                       ->  Seq Scan on t8
+               ->  Hash
+                     ->  Hash Join
+                           Hash Cond: (t12.m = t14.m)
+                           ->  Hash Join
+                                 Hash Cond: (t10.k = t12.k)
+                                 ->  Seq Scan on t10
+                                 ->  Hash
+                                       ->  Seq Scan on t12
+                           ->  Hash
+                                 ->  Seq Scan on t14
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t11.l = t13.l)
+                     ->  Hash Join
+                           Hash Cond: (t9.j = t11.j)
+                           ->  Seq Scan on t9
+                           ->  Hash
+                                 ->  Seq Scan on t11
+                     ->  Hash
+                           ->  Hash Join
+                                 Hash Cond: (t13.n = t15.n)
+                                 ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t15
+(58 rows)
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t1.a = t3.b)
+         ->  Hash Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (t3.b = t4.c)
+                     ->  Seq Scan on t3
+                     ->  Hash
+                           ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+-- Results should match
+EXECUTE goo_plan;
+ count 
+-------
+    10
+(1 row)
+
+EXECUTE standard_plan;
+ count 
+-------
+    10
+(1 row)
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+                                                            QUERY PLAN                                                            
+----------------------------------------------------------------------------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t16.q = t18.q)
+         ->  Hash Join
+               Hash Cond: (t15.p = t17.p)
+               ->  Hash Join
+                     Hash Cond: (t14.o = t16.o)
+                     ->  Hash Join
+                           Hash Cond: (t13.n = t15.n)
+                           ->  Hash Join
+                                 Hash Cond: (t12.m = t14.m)
+                                 ->  Hash Join
+                                       Hash Cond: (t11.l = t13.l)
+                                       ->  Hash Join
+                                             Hash Cond: (t10.k = t12.k)
+                                             ->  Hash Join
+                                                   Hash Cond: (t9.j = t11.j)
+                                                   ->  Hash Join
+                                                         Hash Cond: (t8.i = t10.i)
+                                                         ->  Hash Join
+                                                               Hash Cond: (t7.h = t9.h)
+                                                               ->  Hash Join
+                                                                     Hash Cond: (t6.g = t8.g)
+                                                                     ->  Hash Join
+                                                                           Hash Cond: (t5.f = t7.f)
+                                                                           ->  Hash Join
+                                                                                 Hash Cond: (t4.e = t6.e)
+                                                                                 ->  Hash Join
+                                                                                       Hash Cond: (t3.d = t5.d)
+                                                                                       ->  Hash Join
+                                                                                             Hash Cond: (t2.c = t4.c)
+                                                                                             ->  Hash Join
+                                                                                                   Hash Cond: (t1.b = t3.b)
+                                                                                                   ->  Hash Join
+                                                                                                         Hash Cond: (t1.a = t2.a)
+                                                                                                         ->  Seq Scan on t1
+                                                                                                         ->  Hash
+                                                                                                               ->  Seq Scan on t2
+                                                                                                   ->  Hash
+                                                                                                         ->  Seq Scan on t3
+                                                                                             ->  Hash
+                                                                                                   ->  Seq Scan on t4
+                                                                                       ->  Hash
+                                                                                             ->  Seq Scan on t5
+                                                                                 ->  Hash
+                                                                                       ->  Seq Scan on t6
+                                                                           ->  Hash
+                                                                                 ->  Seq Scan on t7
+                                                                     ->  Hash
+                                                                           ->  Seq Scan on t8
+                                                               ->  Hash
+                                                                     ->  Seq Scan on t9
+                                                         ->  Hash
+                                                               ->  Seq Scan on t10
+                                                   ->  Hash
+                                                         ->  Seq Scan on t11
+                                             ->  Hash
+                                                   ->  Seq Scan on t12
+                                       ->  Hash
+                                             ->  Seq Scan on t13
+                                 ->  Hash
+                                       ->  Seq Scan on t14
+                           ->  Hash
+                                 ->  Seq Scan on t15
+                     ->  Hash
+                           ->  Seq Scan on t16
+               ->  Hash
+                     ->  Seq Scan on t17
+         ->  Hash
+               ->  Seq Scan on t18
+(70 rows)
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+                      QUERY PLAN                       
+-------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (t2.a = t1.a)
+         ->  Seq Scan on t2
+         ->  Hash
+               ->  Nested Loop
+                     ->  Hash Join
+                           Hash Cond: (t6.e = t5.f)
+                           ->  Seq Scan on t6
+                           ->  Hash
+                                 ->  Seq Scan on t5
+                                       Filter: (d < 3)
+                     ->  Seq Scan on t1
+                           Filter: (a < 5)
+(14 rows)
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+                  QUERY PLAN                  
+----------------------------------------------
+ Aggregate
+   ->  Hash Left Join
+         Hash Cond: (t3.d = t4.c)
+         ->  Hash Left Join
+               Hash Cond: (t2.a = t3.b)
+               ->  Hash Left Join
+                     Hash Cond: (t1.a = t2.a)
+                     ->  Seq Scan on t1
+                     ->  Hash
+                           ->  Seq Scan on t2
+               ->  Hash
+                     ->  Seq Scan on t3
+         ->  Hash
+               ->  Seq Scan on t4
+(14 rows)
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+            QUERY PLAN            
+----------------------------------
+ Aggregate
+   ->  Nested Loop
+         ->  Seq Scan on t1
+         ->  Materialize
+               ->  Seq Scan on t2
+(5 rows)
+
+SELECT count(*)
+FROM t1, t2;
+ count 
+-------
+   100
+(1 row)
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+               QUERY PLAN               
+----------------------------------------
+ Aggregate
+   ->  Hash Full Join
+         Hash Cond: (t2.a = t3.b)
+         ->  Hash Full Join
+               Hash Cond: (t1.a = t2.a)
+               ->  Seq Scan on t1
+               ->  Hash
+                     ->  Seq Scan on t2
+         ->  Hash
+               ->  Seq Scan on t3
+(10 rows)
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+                QUERY PLAN                
+------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (b.b = c.c)
+         ->  Hash Join
+               Hash Cond: (a.a = b.a)
+               ->  Seq Scan on t1 a
+               ->  Hash
+                     ->  Seq Scan on t1 b
+         ->  Hash
+               ->  Seq Scan on t2 c
+(10 rows)
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+ANALYZE;
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+                           QUERY PLAN                            
+-----------------------------------------------------------------
+ Aggregate
+   ->  Hash Join
+         Hash Cond: (chain1a.val = chain2a.id)
+         ->  Hash Join
+               Hash Cond: (chain1b.val = chain1c.id)
+               ->  Hash Join
+                     Hash Cond: (chain1a.id = chain1b.id)
+                     ->  Seq Scan on chain1a
+                     ->  Hash
+                           ->  Seq Scan on chain1b
+               ->  Hash
+                     ->  Seq Scan on chain1c
+         ->  Hash
+               ->  Hash Join
+                     Hash Cond: (chain2b.val = chain2c.id)
+                     ->  Hash Join
+                           Hash Cond: (chain2a.val = chain2b.id)
+                           ->  Seq Scan on chain2a
+                           ->  Hash
+                                 ->  Seq Scan on chain2b
+                     ->  Hash
+                           ->  Seq Scan on chain2c
+(22 rows)
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+                        QUERY PLAN                        
+----------------------------------------------------------
+ HashAggregate
+   Output: c.id, count(*)
+   Group Key: c.id
+   ->  Hash Join
+         Output: c.id
+         Hash Cond: (c.id = a2.center_id)
+         ->  Hash Join
+               Output: c.id, a1.center_id
+               Inner Unique: true
+               Hash Cond: (a1.center_id = c.id)
+               ->  Seq Scan on pg_temp.arm1_tbl a1
+                     Output: a1.center_id, a1.payload
+               ->  Hash
+                     Output: c.id
+                     ->  Seq Scan on pg_temp.center_tbl c
+                           Output: c.id
+         ->  Hash
+               Output: a2.center_id
+               ->  Seq Scan on pg_temp.arm2_tbl a2
+                     Output: a2.center_id
+(20 rows)
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+ id | count 
+----+-------
+  8 | 10000
+ 10 | 10000
+  9 | 10000
+  7 | 10000
+  1 | 10000
+  5 | 10000
+  4 | 10000
+  2 | 10000
+  6 | 10000
+  3 | 10000
+(10 rows)
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+RESET geqo_threshold;
+RESET enable_goo_join_search;
diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out
index 3b37fafa65b..cb0c84cebff 100644
--- a/src/test/regress/expected/sysviews.out
+++ b/src/test/regress/expected/sysviews.out
@@ -153,6 +153,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_distinct_reordering     | on
  enable_eager_aggregate         | on
  enable_gathermerge             | on
+ enable_goo_join_search         | off
  enable_group_by_reordering     | on
  enable_hashagg                 | on
  enable_hashjoin                | on
@@ -173,7 +174,7 @@ select name, setting from pg_settings where name like 'enable%';
  enable_seqscan                 | on
  enable_sort                    | on
  enable_tidscan                 | on
-(25 rows)
+(26 rows)
 
 -- There are always wait event descriptions for various types.  InjectionPoint
 -- may be present or absent, depending on history since last postmaster start.
diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule
index cc6d799bcea..14e3a475906 100644
--- a/src/test/regress/parallel_schedule
+++ b/src/test/regress/parallel_schedule
@@ -68,6 +68,12 @@ test: select_into select_distinct select_distinct_on select_implicit select_havi
 # ----------
 test: brin gin gist spgist privileges init_privs security_label collate matview lock replica_identity rowsecurity object_address tablesample groupingsets drop_operator password identity generated_stored join_hash
 
+# ----------
+# Additional JOIN ORDER tests
+# WIP: need to find an appropriate group for this test
+# ----------
+test: goo
+
 # ----------
 # Additional BRIN tests
 # ----------
@@ -98,9 +104,6 @@ test: maintain_every
 # no relation related tests can be put in this group
 test: publication subscription
 
-# ----------
-# Another group of parallel tests
-# select_views depends on create_view
 # ----------
 test: select_views portals_p2 foreign_key cluster dependency guc bitmapops combocid tsearch tsdicts foreign_data window xmlmap functional_deps advisory_lock indirect_toast equivclass stats_rewrite
 
diff --git a/src/test/regress/sql/goo.sql b/src/test/regress/sql/goo.sql
new file mode 100644
index 00000000000..ab048d8e34e
--- /dev/null
+++ b/src/test/regress/sql/goo.sql
@@ -0,0 +1,364 @@
+--
+-- GOO (Greedy Operator Ordering) Join Search Tests
+--
+-- This test suite validates the GOO join ordering algorithm and verifies
+-- correct behavior for various query patterns.
+--
+
+-- Create test tables with various sizes and join patterns
+CREATE TEMP TABLE t1 (a int, b int);
+CREATE TEMP TABLE t2 (a int, c int);
+CREATE TEMP TABLE t3 (b int, d int);
+CREATE TEMP TABLE t4 (c int, e int);
+CREATE TEMP TABLE t5 (d int, f int);
+CREATE TEMP TABLE t6 (e int, g int);
+CREATE TEMP TABLE t7 (f int, h int);
+CREATE TEMP TABLE t8 (g int, i int);
+CREATE TEMP TABLE t9 (h int, j int);
+CREATE TEMP TABLE t10 (i int, k int);
+CREATE TEMP TABLE t11 (j int, l int);
+CREATE TEMP TABLE t12 (k int, m int);
+CREATE TEMP TABLE t13 (l int, n int);
+CREATE TEMP TABLE t14 (m int, o int);
+CREATE TEMP TABLE t15 (n int, p int);
+CREATE TEMP TABLE t16 (o int, q int);
+CREATE TEMP TABLE t17 (p int, r int);
+CREATE TEMP TABLE t18 (q int, s int);
+
+-- Populate with small amount of data
+INSERT INTO t1 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t2 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t3 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t4 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t5 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t6 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t7 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t8 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t9 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t10 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t11 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t12 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t13 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t14 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t15 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t16 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t17 SELECT i, i FROM generate_series(1,10) i;
+INSERT INTO t18 SELECT i, i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+--
+-- Basic 3-way join (sanity check)
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+SELECT count(*)
+FROM (VALUES (1),(2)) AS a(x)
+JOIN (VALUES (1),(2)) AS b(x) USING (x)
+JOIN (VALUES (1),(3)) AS c(x) USING (x);
+
+--
+-- Disconnected graph (Cartesian products required)
+--
+-- This tests GOO's ability to handle queries where some relations
+-- have no join clauses connecting them. GOO should allow Cartesian
+-- products when no clause-connected joins are available.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+SELECT count(*)
+FROM t1, t2, t5
+WHERE t1.a = 1 AND t2.c = 2 AND t5.f = 3;
+
+--
+-- Star schema (fact table with multiple dimension tables)
+--
+-- Test GOO with a typical star schema join pattern.
+--
+CREATE TEMP TABLE fact (id int, dim1_id int, dim2_id int, dim3_id int, dim4_id int, value int);
+CREATE TEMP TABLE dim1 (id int, name text);
+CREATE TEMP TABLE dim2 (id int, name text);
+CREATE TEMP TABLE dim3 (id int, name text);
+CREATE TEMP TABLE dim4 (id int, name text);
+
+INSERT INTO fact SELECT i, i, i, i, i, i FROM generate_series(1,100) i;
+INSERT INTO dim1 SELECT i, 'dim1_'||i FROM generate_series(1,10) i;
+INSERT INTO dim2 SELECT i, 'dim2_'||i FROM generate_series(1,10) i;
+INSERT INTO dim3 SELECT i, 'dim3_'||i FROM generate_series(1,10) i;
+INSERT INTO dim4 SELECT i, 'dim4_'||i FROM generate_series(1,10) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM fact
+JOIN dim1 ON fact.dim1_id = dim1.id
+JOIN dim2 ON fact.dim2_id = dim2.id
+JOIN dim3 ON fact.dim3_id = dim3.id
+JOIN dim4 ON fact.dim4_id = dim4.id
+WHERE dim1.id < 5;
+
+--
+-- Long join chain
+--
+-- Tests GOO with a large join involving 15 relations.
+--
+SET geqo_threshold = 8;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+-- Execute to verify correctness
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n;
+
+--
+-- Bushy tree support
+--
+-- Verify that GOO can produce bushy join trees, not just left-deep or right-deep.
+-- With appropriate cost model, GOO should join (t1,t2) and (t3,t4) first,
+-- then join those results (bushy tree).
+--
+SET geqo_threshold = 4;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2, t3, t4
+WHERE t1.a = t2.a
+  AND t3.b = t4.c
+  AND t1.a = t3.b;
+
+--
+-- Compare GOO vs standard join search
+--
+-- Run the same query with GOO and standard join search to verify both
+-- produce valid plans. Results should be identical even if plans differ.
+--
+SET enable_goo_join_search = on;
+PREPARE goo_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE goo_plan;
+
+SET enable_goo_join_search = off;
+SET geqo_threshold = default;
+PREPARE standard_plan AS
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e;
+
+EXECUTE standard_plan;
+
+-- Results should match
+EXECUTE goo_plan;
+EXECUTE standard_plan;
+
+--
+-- Large join (18 relations)
+--
+-- Test GOO with a large number of relations.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 10;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+JOIN t2 ON t1.a = t2.a
+JOIN t3 ON t1.b = t3.b
+JOIN t4 ON t2.c = t4.c
+JOIN t5 ON t3.d = t5.d
+JOIN t6 ON t4.e = t6.e
+JOIN t7 ON t5.f = t7.f
+JOIN t8 ON t6.g = t8.g
+JOIN t9 ON t7.h = t9.h
+JOIN t10 ON t8.i = t10.i
+JOIN t11 ON t9.j = t11.j
+JOIN t12 ON t10.k = t12.k
+JOIN t13 ON t11.l = t13.l
+JOIN t14 ON t12.m = t14.m
+JOIN t15 ON t13.n = t15.n
+JOIN t16 ON t14.o = t16.o
+JOIN t17 ON t15.p = t17.p
+JOIN t18 ON t16.q = t18.q;
+
+--
+-- Mixed connected and disconnected components
+--
+-- Query with two connected components that need a Cartesian product between them.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 JOIN t2 ON t1.a = t2.a,
+     t5 JOIN t6 ON t5.f = t6.e
+WHERE t1.a < 5 AND t5.d < 3;
+
+--
+-- Outer joins
+--
+-- Verify GOO handles outer joins correctly (respects join order restrictions)
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+LEFT JOIN t2 ON t1.a = t2.a
+LEFT JOIN t3 ON t2.a = t3.b
+LEFT JOIN t4 ON t3.d = t4.c;
+
+--
+-- Complete Cartesian products (disconnected graphs)
+--
+-- Test GOO's ability to handle queries with no join clauses at all.
+--
+SET enable_goo_join_search = on;
+SET geqo_threshold = 2;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1, t2;
+
+SELECT count(*)
+FROM t1, t2;
+
+--
+-- Join order restrictions with FULL OUTER JOIN
+--
+-- FULL OUTER JOIN creates strong ordering constraints that GOO must respect
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1
+FULL OUTER JOIN t2 ON t1.a = t2.a
+FULL OUTER JOIN t3 ON t2.a = t3.b;
+
+--
+-- Self-join handling
+--
+-- Test GOO with the same table appearing multiple times. GOO must correctly
+-- handle self-joins that were not removed by Self-Join Elimination.
+--
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM t1 a
+JOIN t1 b ON a.a = b.a
+JOIN t2 c ON b.b = c.c;
+
+--
+-- Complex bushy tree pattern
+--
+-- Create a query that naturally leads to bushy tree: multiple independent
+-- join chains that need to be combined
+--
+CREATE TEMP TABLE chain1a (id int, val int);
+CREATE TEMP TABLE chain1b (id int, val int);
+CREATE TEMP TABLE chain1c (id int, val int);
+CREATE TEMP TABLE chain2a (id int, val int);
+CREATE TEMP TABLE chain2b (id int, val int);
+CREATE TEMP TABLE chain2c (id int, val int);
+
+INSERT INTO chain1a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain1c SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2a SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2b SELECT i, i FROM generate_series(1,100) i;
+INSERT INTO chain2c SELECT i, i FROM generate_series(1,100) i;
+
+ANALYZE;
+
+EXPLAIN (COSTS OFF)
+SELECT count(*)
+FROM chain1a
+JOIN chain1b ON chain1a.id = chain1b.id
+JOIN chain1c ON chain1b.val = chain1c.id
+JOIN chain2a ON chain1a.val = chain2a.id  -- Cross-chain join
+JOIN chain2b ON chain2a.val = chain2b.id
+JOIN chain2c ON chain2b.val = chain2c.id;
+
+--
+-- Eager aggregation with GOO join search
+-- Ensure grouped_rel handling when eager aggregation is enabled.
+--
+SET enable_eager_aggregate = on;
+SET min_eager_agg_group_size = 0;
+
+CREATE TEMP TABLE center_tbl (id int PRIMARY KEY);
+CREATE TEMP TABLE arm1_tbl (center_id int, payload int);
+CREATE TEMP TABLE arm2_tbl (center_id int, payload int);
+
+INSERT INTO center_tbl SELECT i FROM generate_series(1, 10) i;
+INSERT INTO arm1_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+INSERT INTO arm2_tbl SELECT i%10 + 1, i FROM generate_series(1, 1000) i;
+
+ANALYZE center_tbl;
+ANALYZE arm1_tbl;
+ANALYZE arm2_tbl;
+
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+SELECT c.id, count(*)
+FROM center_tbl c
+JOIN arm1_tbl a1 ON c.id = a1.center_id
+JOIN arm2_tbl a2 ON c.id = a2.center_id
+GROUP BY c.id;
+
+RESET min_eager_agg_group_size;
+RESET enable_eager_aggregate;
+
+-- Cleanup
+DEALLOCATE goo_plan;
+DEALLOCATE standard_plan;
+
+RESET geqo_threshold;
+RESET enable_goo_join_search;
-- 
2.39.3 (Apple Git-146)

v4-0002-add-a-GUC-goo_greedy_strategy-to-choose-di.patchapplication/octet-stream; name=v4-0002-add-a-GUC-goo_greedy_strategy-to-choose-di.patchDownload
From 27f806771780a651211912df08b95e26c650f36d Mon Sep 17 00:00:00 2001
From: Chengpeng Yan <chengpeng_yan@outlook.com>
Date: Tue, 16 Dec 2025 20:15:44 +0800
Subject: [PATCH v4 2/2] add a GUC goo_greedy_strategy to choose
 different GOO  greedy strategic to test

Signed-off-by: Chengpeng Yan <chengpeng_yan@outlook.com>
---
 src/backend/optimizer/path/goo.c          | 122 +++++++++++++++++++++-
 src/backend/utils/misc/guc_parameters.dat |  10 ++
 src/backend/utils/misc/guc_tables.c       |   7 ++
 src/include/optimizer/paths.h             |   7 ++
 4 files changed, 145 insertions(+), 1 deletion(-)

diff --git a/src/backend/optimizer/path/goo.c b/src/backend/optimizer/path/goo.c
index 247dbb5f921..bbada782960 100644
--- a/src/backend/optimizer/path/goo.c
+++ b/src/backend/optimizer/path/goo.c
@@ -55,6 +55,7 @@
  * Configuration defaults.  These are exposed as GUCs in guc_tables.c.
  */
 bool		enable_goo_join_search = false;
+int			goo_greedy_strategy = GOO_GREEDY_STRATEGY_RESULT_SIZE;
 
 /*
  * Working state for a single GOO search invocation.
@@ -94,6 +95,7 @@ typedef struct GooCandidate
 {
 	RelOptInfo *left;			/* left input clump */
 	RelOptInfo *right;			/* right input clump */
+	double		result_size;	/* estimated result size in bytes */
 	Cost		total_cost;		/* total cost of cheapest path */
 }			GooCandidate;
 
@@ -129,6 +131,105 @@ goo_join_search(PlannerInfo *root, int levels_needed,
 	int			base_rel_count;
 	struct HTAB *base_hash;
 
+	/* If COMBINED mode, try both strategies and return the better one */
+	if (goo_greedy_strategy == GOO_GREEDY_STRATEGY_COMBINED)
+	{
+		RelOptInfo *result_cost;
+		RelOptInfo *result_size;
+		Cost		cost_result_cost;
+		Cost		size_result_cost;
+		int			saved_strategy;
+		List	   *saved_join_rel_list_cost;
+		struct HTAB *saved_join_rel_hash_cost;
+
+		/* Save the original strategy */
+		saved_strategy = goo_greedy_strategy;
+
+		/*
+		 * First try: COST strategy
+		 */
+		goo_greedy_strategy = GOO_GREEDY_STRATEGY_COST;
+		state = goo_init_state(root, initial_rels);
+		base_rel_count = list_length(root->join_rel_list);
+		base_hash = root->join_rel_hash;
+
+		result_cost = goo_search_internal(state);
+
+		if (result_cost == NULL)
+		{
+			root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+			root->join_rel_hash = base_hash;
+			elog(ERROR, "GOO join search (COST strategy) failed to find a valid join order");
+		}
+
+		cost_result_cost = result_cost->cheapest_total_path->total_cost;
+		goo_destroy_state(state);
+
+		/*
+		 * Save the COST strategy's join_rel_list and join_rel_hash. If COST
+		 * strategy wins, we'll restore these instead of re-running.
+		 */
+		saved_join_rel_list_cost = root->join_rel_list;
+		saved_join_rel_hash_cost = root->join_rel_hash;
+
+		/*
+		 * Second try: RESULT_SIZE strategy
+		 *
+		 * Reset the planner state to start fresh. We need to clear all
+		 * intermediate join relations created by the first search.
+		 */
+		root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+		root->join_rel_hash = base_hash;
+
+		goo_greedy_strategy = GOO_GREEDY_STRATEGY_RESULT_SIZE;
+		state = goo_init_state(root, initial_rels);
+
+		result_size = goo_search_internal(state);
+
+		if (result_size == NULL)
+		{
+			root->join_rel_list = list_truncate(root->join_rel_list, base_rel_count);
+			root->join_rel_hash = base_hash;
+			elog(ERROR, "GOO join search (RESULT_SIZE strategy) failed to find a valid join order");
+		}
+
+		size_result_cost = result_size->cheapest_total_path->total_cost;
+		goo_destroy_state(state);
+
+		/* Restore the original strategy */
+		goo_greedy_strategy = saved_strategy;
+
+		/*
+		 * Compare the two results and return the one with lower cost
+		 */
+		if (cost_result_cost <= size_result_cost)
+		{
+			/*
+			 * COST strategy won. Restore the COST strategy's join relations
+			 * instead of re-running the search.
+			 */
+			root->join_rel_list = saved_join_rel_list_cost;
+			root->join_rel_hash = saved_join_rel_hash_cost;
+
+			elog(DEBUG1, "GOO COMBINED mode: COST strategy chosen (cost: %.2f vs %.2f)",
+				 cost_result_cost, size_result_cost);
+
+			return result_cost;
+		}
+		else
+		{
+			/*
+			 * RESULT_SIZE strategy won. The join relations are already in
+			 * place, so we can return the result directly.
+			 */
+			elog(DEBUG1, "GOO COMBINED mode: RESULT_SIZE strategy chosen (cost: %.2f vs %.2f)",
+				 size_result_cost, cost_result_cost);
+
+			return result_size;
+		}
+	}
+
+	/* Normal single-strategy mode */
 	/* Initialize search state and memory contexts */
 	state = goo_init_state(root, initial_rels);
 
@@ -417,6 +518,8 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 	int			saved_rel_len;
 	struct HTAB *saved_hash;
 	RelOptInfo *joinrel;
+	double		join_rows;
+	double		result_size;
 	Cost		total_cost;
 	GooCandidate *cand;
 
@@ -477,6 +580,9 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 		set_cheapest(grouped_rel);
 	}
 
+	join_rows = joinrel->rows;
+
+	result_size = join_rows * joinrel->reltarget->width;
 	total_cost = joinrel->cheapest_total_path->total_cost;
 
 	/*
@@ -495,6 +601,7 @@ static GooCandidate * goo_build_candidate(GooState * state, RelOptInfo *left,
 	cand = palloc(sizeof(GooCandidate));
 	cand->left = left;
 	cand->right = right;
+	cand->result_size = result_size;
 	cand->total_cost = total_cost;
 	MemoryContextSwitchTo(oldcxt);
 
@@ -608,5 +715,18 @@ goo_commit_join(GooState * state, GooCandidate * cand)
 static bool
 goo_candidate_better(GooCandidate * a, GooCandidate * b)
 {
-	return (a->total_cost < b->total_cost);
+	switch (goo_greedy_strategy)
+	{
+		case GOO_GREEDY_STRATEGY_COMBINED:
+			/* Should not be called in COMBINED mode */
+			elog(ERROR, "goo_candidate_better should not be called in COMBINED mode");
+			return false;
+
+		case GOO_GREEDY_STRATEGY_COST:
+			return a->total_cost < b->total_cost;
+
+		case GOO_GREEDY_STRATEGY_RESULT_SIZE:
+		default:
+			return a->result_size < b->result_size;
+	}
 }
diff --git a/src/backend/utils/misc/guc_parameters.dat b/src/backend/utils/misc/guc_parameters.dat
index a8ce31ab8a7..2a017195820 100644
--- a/src/backend/utils/misc/guc_parameters.dat
+++ b/src/backend/utils/misc/guc_parameters.dat
@@ -1154,6 +1154,16 @@
   max => 'MAX_KILOBYTES',
 },
 
+/* WIP: only for testing */
+{ name => 'goo_greedy_strategy', type => 'enum', context => 'PGC_USERSET', group => 'QUERY_TUNING_GEQO',
+  short_desc => 'Selects the heuristic used by GOO to compare join candidates.',
+  long_desc => 'Valid values are cost, result_size, and combined.',
+  flags => 'GUC_EXPLAIN',
+  variable => 'goo_greedy_strategy',
+  boot_val => 'GOO_GREEDY_STRATEGY_RESULT_SIZE',
+  options => 'goo_greedy_strategy_options',
+},
+
 { name => 'gss_accept_delegation', type => 'bool', context => 'PGC_SIGHUP', group => 'CONN_AUTH_AUTH',
   short_desc => 'Sets whether GSSAPI delegation should be accepted from the client.',
   variable => 'pg_gss_accept_delegation',
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c
index f87b558c2c6..11b299453fa 100644
--- a/src/backend/utils/misc/guc_tables.c
+++ b/src/backend/utils/misc/guc_tables.c
@@ -411,6 +411,13 @@ static const struct config_enum_entry plan_cache_mode_options[] = {
 	{NULL, 0, false}
 };
 
+static const struct config_enum_entry goo_greedy_strategy_options[] = {
+	{"cost", GOO_GREEDY_STRATEGY_COST, false},
+	{"result_size", GOO_GREEDY_STRATEGY_RESULT_SIZE, false},
+	{"combined", GOO_GREEDY_STRATEGY_COMBINED, false},
+	{NULL, 0, false}
+};
+
 static const struct config_enum_entry password_encryption_options[] = {
 	{"md5", PASSWORD_TYPE_MD5, false},
 	{"scram-sha-256", PASSWORD_TYPE_SCRAM_SHA_256, false},
diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h
index 5b3ebe5f1d2..c42610b34b3 100644
--- a/src/include/optimizer/paths.h
+++ b/src/include/optimizer/paths.h
@@ -16,12 +16,19 @@
 
 #include "nodes/pathnodes.h"
 
+typedef enum GooGreedyStrategy
+{
+	GOO_GREEDY_STRATEGY_COST,
+	GOO_GREEDY_STRATEGY_RESULT_SIZE,
+	GOO_GREEDY_STRATEGY_COMBINED
+}			GooGreedyStrategy;
 
 /*
  * allpaths.c
  */
 extern PGDLLIMPORT bool enable_geqo;
 extern PGDLLIMPORT bool enable_goo_join_search;
+extern PGDLLIMPORT int goo_greedy_strategy;
 extern PGDLLIMPORT bool enable_eager_aggregate;
 extern PGDLLIMPORT int geqo_threshold;
 extern PGDLLIMPORT double min_eager_agg_group_size;
-- 
2.39.3 (Apple Git-146)