Skip to main content

Decision Tables SQL Server

1. What this document is about

This document explains how decision tables implemented in SQL Server can be used to externalize and evaluate business decision in enterprise systems

It focuses on:

  • modeling decision tables in a relational database
  • evaluating decisions at runtime
  • integrating decision evaluation with application code
  • understaing operational and architectural trade-offs

This approach applies to systems where decision logic must evolve independently from application deployments and where auditability and controlled flexibility matter.

It does not apply to:

  • core domain invariants that must remain strongly enforced in code
  • highly dynamic, user-authored rule systems without governance
  • scenarios where rule evaluation latency in extremely constrained and cannot tolerate database access

2. Why this matters in real systems

Decision tables tend to appear when systems reach a point where hardcoded conditional logic becomes a bottleneck to change.

Common pressures include:

  • business rules changing faster than deployment cycles
  • Multiple variations of the same decision based on context (region, product, risk level, tenant)
  • The need to explain why a decision was made months later
  • Regulatory or audit requirements demanding tracebility

In early stages, these rules usually live as if/else blocks or configuration flags. Over time, this leads to:

  • scattered logic across services
  • duplicated conditions
  • fragile refactoring when rules change
  • limited visibility into which rules are active

At scale, the problem is not complexity itself, but change velocity combined with accountability. Design tables emerge as a response to that pressure.


3. Core concept (mental model)

The mental model is simple:

A decision is data. Evaluation is deterministic. Execution is separate.

A decision table represents:

  • a set of conditions (inputs)
  • mapped to a result (output)
  • evaluated according to explicit rules (priority, specificity, version, validity window)

Instead of asking:

"Which code path should I take?"

The system asks:

"Which row in this table applies to the current context?"

The database becomes a source of decision truth, not business behavior. The application remains reponsible for acting on the decision, not defining it.


4. How it works (step-by-step)

  1. Model the decision space Identify which inputs influence the decision and which outputs are produced.

  2. Persist rules as rows Each row represents one possible decision outcome under specific conditions.

  3. Define evaluation rules Decide how conflicts are resolved:

    • priority
    • specificity
    • first-match vs best-match
  4. Query deterministically At runtime, query the table using the current context and ordering rules.

  5. Return a single decision result The query must either return exactly one result or fail explicity.

  6. Execute behavior in code The application uses the result but does not re-evaluate the logic.

Key invariants:

  • decision evaluation must be deterministic
  • rule precedence must be explicit
  • ambiguity must be treated as a defect

5. Minimal concrete example

Decision table schema (simplified)


CREATE TABLE PricingDecision (
Id INT IDENTITY PRIMARY KEY,
CustomerType VARCHAR(50) NOT NULL,
Region VARCHAR(50) NOT NULL,
DiscountPercent DECIMAL(5, 2) NOT NULL,
Priority INT NOT NULL,
EffectiveFrom DATETIME2 NOT NULL,
EffectiveTo DATETIME2 NULL
);

CREATE INDEX IX_PricingDecision_Eval
ON PricingDecision (CustomerType, Region, Priority, EffectiveFrom);

Runtime evaluation query


SELECT TOP 1 DiscountPercent
FROM PricingDecision
WHERE CustomerType = @customerType
AND Region = @region
AND EffectiveFrom <= SYSUTCDATETIME()
AND (EffectiveTo IS NULL OR EffectiveTo > SYSUTCDATETIME())
ORDER BY Priority DESC;

.NET integration (conceptual)


var discount = await connection.QuerySingleAsync<decimal>(sql, new { customerType, region });

This example shows:

  • rules stored as data
  • deterministic ordering via priority
  • temporal versioning
  • a clear contract between database and application

6. Design trade-offs

AspectDecision TablesHardcoded Logic
Change speedHighLow
Deploy requiredNo (rules only)Yes
TraceabilityStrongWeak
Type safeLowerStrong
Complexity locationData layerCodebase
Operational riskHigherLower

What you gain:

  • flexibility
  • auditability
  • controlled evolution

What you give up:

  • compile-time guarantees
  • simpler mental models
  • easier local reasoning

What you implicitly accept:

  • governance overhead
  • operational discipline
  • stricter validation requirements

7. Common mistakes and misconceptions

Treating decision tables as "business logic in the database This leads to uncontrolled growth and poor ownership.

Missing explicit priority or conflict rules Ambiguous decisions surface only in production.

Overloading tables with unrelated decisions Different decisions require different invariants.

No versioning or validity window Rules become impossible to reason about over time.

Assuming non-technical users will manage rules safely Without tooling and validation, this fails quickly.


8. Operational and production considerations

In production, decision tables introduce new concerns:

  • Performance: indexing and query shape matter early
  • Observability: log which rule was applied and why
  • Validation: prevent overlapping or contradictory rules
  • Testing: treat rules as testable artifacts
  • Change control: rule updates are production changes

What degrades first is usually confidence, not latency. If you cannot explain a decision, the system becomes untrustworthy.


9. When NOT to use this

Do not use decision tables when:

  • the rule is a core domain invariant
  • the decision changes rarely
  • evaluation latency must be near-zero
  • rule correctness depends on complex procedural logic
  • the organization lacks operational discipline

Decision tables are a tool, not a default.


10. Key takeaways

  • Decision tables externalize decisions, not behavior
  • Determinism and precedence must be explicit
  • Flexibility introduces governance costs
  • Auditability is often the real driver
  • Versioning is not optional
  • Ambiguity is a production defect
  • Use them deliberately, not defensively

11. High-Level Overview

Visual representation of decision tables in SQL Server, highlighting deterministic rule evaluation, versioned validity windows, audit-backed governance, and application-side execution of outcomes.

Scroll to zoom • Drag to pan
Decision Tables in SQL Server — End-to-End Decisioning (Data + Runtime + Governance)Decision Tables in SQL Server — End-to-End Decisioning (Data + Runtime + Governance)Enterprise SystemApplication Layer (.NET)Data Layer (SQL Server)Ops / GovernanceCommon Failure Modes(and the guardrails)API/WorkerDecisioningService(DecisionEvaluator)Domain/Orchestration(Executesbehavior)Telemetry(Logs,Metrics,Traces)DecisionStore(SQLServer)DecisionTable(s)RulesasrowsMetadata(name,owner,scope)Versioning(effective_from/to,revision,status)ValidationConstraints(unique,no-overlap,requiredkeys)AuditTrail(changes,who,when,reason)RuleReviewWorkflow(draft->approved->published)ReleaseDiscipline(changemgmt,rollback)Monitoring(alerts,dashboards)TestFixtures(goldencases)NoMatch->explicitdefaultorhardfailMultipleMatches->ambiguitydefect(blockpublish)StaleRules->validitywindows+deprecationPerformanceRegression->indexing+queryshape+cachingUncontrolledChanges->workflow+audit+testsRuleAuthor(Product/Ops/Engineer)Approver(TechLead/Governance)Auditor(Compliance/Support)Invariant-Evaluationreturnsexactlyoneresult-AmbiguityisadefectDecisionselectionrules1)Filterbyinputs(dimensions)\ne.g.,CustomerType,Region,Tenant2)Filterbytimewindow\neffective_from<=now<effective_to3)Resolveconflicts\nORDERBYPriorityDESC,\nSpecificityDESC4)TOP(1)enforcesasingleoutcomeRecommendedsignals-decision_eval_latency_ms-decision_eval_errors_total-decision_rule_selected{ruleId}-decision_ambiguous_total-decision_no_match_totalOptionalCache(per-decisionkey)TTL+invalidationCacheruleCachemustinclude\nruleversioninvalue.\nInvalidateonpublish.\nNeverhideambiguity.JoinprovenanceandeffectivewindowsProposerulechange(newrow/update)+changereasonRequestapproval(policy,risk,impact)Approve/Reject(ownership+accountability)Publishchange(writerules+versiondata)Recordchange(who/when/why)Runruletests(goldenscenarios)Pass/Fail(blockpublishonfail)Changerecord(rollbackplan)EvaluateDecision(context)(customerType,region,tenant,time...)Querydecisiontable(usingdeterministicprecedence)DecisionResult(discount=10%,ruleId=42,version=v2026.02.01,reason=...)Returndecision(result+provenance)Executebehavior(appremainsincontrol)Emitsignals(ruleId,version,latency,cache-hit,outcome)Emitexecutionspans(decision->actionpath)Dashboards+alerts(error/latencyspikes,unmatched/ambiguous)Investigatedecision(ruleId,version,timestamps)Explainoutcome(whatrulematched+why)DetectDetectMitigatewithindexesandselectivepredicatesEnforcegovernanceManagelifecyclePreventoverlap(unique/no-overlapchecks)Tryget(key)contexthashHit/MissSet(result)withversionstampKey ideas- Decision isdata; evaluation isdeterministic; execution is incode- Rows represent rules; conflicts resolved bypriorityandspecificity- Operational rigor:versioning,auditability,validation,observabilityplantuml-src XLZXJYCv4lxVJs6DT3gY2M66MzsFtM4a9eIPt0R29CsEq792JhUJ-EYsUsmt8RSQwHxYdl2UvBwotPqEQ84VaDXLvNBLLrMVST8LWfs9J5gf5KlveX2MISNcNoTiBio3CEn___al6wdyqEb3_6c5fLgnWpFkE7lBPhLoiXJuz5b3HN6LYLwIs7kfAcvuoHOykryPNQjyg0jjc3DSMMm9vJfITirplI73IrvOqTdngfas2lwyF-viv6B9wyATQ-KkEJnuCnShBTZr-4r7ADDbfHNEchijhcj4vhXQ5Tq3DePNtsJkrkpu-5rdlUIF5y9QlX9p-M_XDvE_ifC_-y7UPFHvT7d6ZjYleviNHGkn4eXd8POk-R3u-AlOCfaBRZySBJucXxkaICkmdIFIjFCB4m-ygBdhR0adJ2cLj4vcKUPHP7KZWdH2AjEvYAPdUcCHXSe8Yw0mKoFflo1AQbd8pD6MrSM3oDbYIvgLaTf8joLjnk4orcm5zvOoYyimEgs4yLxnWXcvqkPdaWCQ8bX8h4zBlCwbumjPH5s_Y3l9tAktItfX0S2EO89mXQ2zbeFJOJgTpP63-Sqy7LtCNnJdcGCYtymG1NPQkxKsj-hWokYypXnCJ2kBtoEraae8qtl3k8rYZUPfLHc2FTHIaQtPHF0SAfrI24fHh5MZEFZ3Xi1d8KcINAwhIXlN7EHbagJ5B7ipKaWtSc85cs-j4wMNn4VsHv8mLg7K05Vl5j8PW3BXMrJEmU1obBREG9pXv_VJgp6E_QRDlJ3_37iox7HBdPg1p0IyRLP70OVQzBmMVOrgkkJ0749dihMmBi02cYEFIZIOXLZp1zbgOZbefg8GfN1c2-69Nja-ky0tcU53QdWcR5206EH_xDtMTw9upLtp2fSzMyIxKX4jk2Nnfhhck03TwgdE_7kn7uJG70zixrOHL2m96HIIzyYl17bupEaSs5JeI7scD-XQVMOpNOdWFua4uT_Qye2uM2wHPVaWxfP6bqTEzs-L4G_-TEWxxkeO05AB1jgwOKEjADPIEGjZjPBVQvokz261hk2Lj_QzbWQ5VI-sZIao4850OAD0om86iZNm9X3vpLhJBw6y0Mwr2ffU_5aUGhdiiE-3YQyDsdoPpN0hiV6OMnPwWzDomvUE7QA_X2h9wNDLBmffro8F1pRYqH2mGgayapQJGBeIhTEiN9MkZ-mK1GsUe3qJCQ4NY3UI7cBE2s4SBfbpkrveRl8O5WWraBIEdSj7LwChGc6bYrmebk7e5etMMH-77zIN9bBTixDFwBgEGb3ifezD02fsY16dSBa0cUwAXqLtmQTvRy4dgxiIal1QExnElqnduylFx7mo_SOE9gFpjFUYJcXmx10dD55dFpCqnKeZv3GmM0WreHoPH24WwtK5A0eKoDkuom9UajO66Mpw80pEW4UARqWw9zXL6arhY-H9UzzdiWImN2zfTPvu5DTnzapy2yK30xxSx5fMO2Cyoq0Scc7Js_U3meWx1OpjhhF1g0jNjB0GvvVl74_qGxdG9K1Cyew1jJwYSi6lfqTwg91AhK8G7ItiK6KpeJYchUqbGVHf0hYbwZeF5ReeT7RV50c3aqkiFpaHg8VUiCa6UGhDfZ9OLN3LUmq-i-lBT7mnYk0PZYxJqUmL-5JIdqup0SV7II6QLde0gk74e-jHnTRMwLAOT5kXMncnyitE8GuA9KoiSZ0Oz19lQPUrhxKmMv2_s9eTjMPgUfP6rHuVOc0vcK1mYP4gJQcLgxLZUXac5eZ6M3qWw3WlCfdHZc0PWRfNdcM9Ho2ns2BEdaOHIGBnXFXfkP2h6lWYhiK38QD6tb0MHgTIZ0__x0TxPwFXU3wUNhAlrwFP3PjCFu-7BwhiNuMc5GvkPvL5Syp23GZ8tfNtFVIn0g4XMWT-MmDV1pa2h4Y5vXhwdHYi1dqst4lAB2ObzKb9ZhjsFEq7PS-fYvF-tWnZ7qvm-mtxq5btElbR3pOznToHJgyzdPsDPkpJ3JfDe9o8otpOztlp7UFqgybFFPPEhmvmBQ6MscGqaXa107MbQuUsAphXzqrp1yacKZEVHHf062FKAqxUl_jBtqTjd9_yT8opOmiuUJX-T_ptmRlZmRlt_TZOJlQnIKJ6DmG2JOjEgZT_2jg9xrRnUUIbGqEKL2I17BNSY8OJI9eHHAOyYQUgGUM-Mg_JJ_FHxBVJJ-F9EBrX1xFnvo-ljFls1gbl5wCIZStA5QONDQSGZ7xJ2n6I0iMig4jd70plS2rHgZ7adNjrZEtU8tZrAJBQrYxD_03LYhirDRxW2YOmvQcTozJE_R0cfcICDaVH2vYKzo0gjwfM9NTmA3_YlYOr-58IAcMX7H1DfKBa4QL2NRi4zdDGZNZLMFwDPtVqqBgBXzoLzjcMzy82q0vzfBD9yReB5IZoFqBqVdG5Mk-Uwofzv-yGTxhju-K9VpPEwV5mVNKrdQM-LRyouFt3Oc-GeGzYwCWLRhm7tYVfzpKFDbfMY6xGtJNcVsW0TOVoMqNlnRRuOwUm7RN64Ie0J2DeHo3vISh3wvJ5l083VgY-4etpq_7aUZPY5rCq2aoiqyc4JQ_J-Sj5q59OFCTAW8-cB4WVW9XxvaStSMl1LZNWI2JPXfS2oNbs-_kbPXVaw2qnC_58po_SClwBubRXbcke-Z7jcUEbzkAaUW49i5WH3D1vL1VjP0aJvUdCZrILL5j3Sy1617BfRVY7DPc8eITobjFJFxmClGMlGyfNmg2JblubYgwFjXKm03lG5eyqNT-oxtxusZMlXATww07Oy9R801cwLh5P5KXQO1_1dKr3Jb3Db7aou4cGLm-InADzHneCFZOnyYtR8GQxdTszTvi4GjeZFx1w8IESDzAjmnN83yfad93096AHqpiPRBobJcGZaYO0CumNjceVDGanSoyKmesJk2Bi519vscQ8fgVgp_symeEE_kSItsJjG-rezqu3anJPlNszpL-b80od4z2xq-4NOlUJqvlHx4MjzYr23xNupveXzN1Yti8SjbqP3qGGWZIT855IxVuxun7lDNQ9y5znjnIeM0bt47GZnmFaxJe98YGSv-yNwOukfBNFhSnX8SnB6F5vQpYuxpd94-OJV4533_hKBNmV3rzB41dudnLrZYj2odUJQD3JE3GSedjYSAl6pJq5aUbOOrY_5FJoMCjSx2foqBRc_mC0?>Decision Tables in SQL Server — End-to-End Decisioning (Data + Runtime + Governance)Decision Tables in SQL Server — End-to-End Decisioning (Data + Runtime + Governance)Enterprise SystemApplication Layer (.NET)Data Layer (SQL Server)Ops / GovernanceCommon Failure Modes(and the guardrails)API/WorkerDecisioningService(DecisionEvaluator)Domain/Orchestration(Executesbehavior)Telemetry(Logs,Metrics,Traces)DecisionStore(SQLServer)DecisionTable(s)RulesasrowsMetadata(name,owner,scope)Versioning(effective_from/to,revision,status)ValidationConstraints(unique,no-overlap,requiredkeys)AuditTrail(changes,who,when,reason)RuleReviewWorkflow(draft->approved->published)ReleaseDiscipline(changemgmt,rollback)Monitoring(alerts,dashboards)TestFixtures(goldencases)NoMatch->explicitdefaultorhardfailMultipleMatches->ambiguitydefect(blockpublish)StaleRules->validitywindows+deprecationPerformanceRegression->indexing+queryshape+cachingUncontrolledChanges->workflow+audit+testsRuleAuthor(Product/Ops/Engineer)Approver(TechLead/Governance)Auditor(Compliance/Support)Invariant-Evaluationreturnsexactlyoneresult-AmbiguityisadefectDecisionselectionrules1)Filterbyinputs(dimensions)\ne.g.,CustomerType,Region,Tenant2)Filterbytimewindow\neffective_from<=now<effective_to3)Resolveconflicts\nORDERBYPriorityDESC,\nSpecificityDESC4)TOP(1)enforcesasingleoutcomeRecommendedsignals-decision_eval_latency_ms-decision_eval_errors_total-decision_rule_selected{ruleId}-decision_ambiguous_total-decision_no_match_totalOptionalCache(per-decisionkey)TTL+invalidationCacheruleCachemustinclude\nruleversioninvalue.\nInvalidateonpublish.\nNeverhideambiguity.JoinprovenanceandeffectivewindowsProposerulechange(newrow/update)+changereasonRequestapproval(policy,risk,impact)Approve/Reject(ownership+accountability)Publishchange(writerules+versiondata)Recordchange(who/when/why)Runruletests(goldenscenarios)Pass/Fail(blockpublishonfail)Changerecord(rollbackplan)EvaluateDecision(context)(customerType,region,tenant,time...)Querydecisiontable(usingdeterministicprecedence)DecisionResult(discount=10%,ruleId=42,version=v2026.02.01,reason=...)Returndecision(result+provenance)Executebehavior(appremainsincontrol)Emitsignals(ruleId,version,latency,cache-hit,outcome)Emitexecutionspans(decision->actionpath)Dashboards+alerts(error/latencyspikes,unmatched/ambiguous)Investigatedecision(ruleId,version,timestamps)Explainoutcome(whatrulematched+why)DetectDetectMitigatewithindexesandselectivepredicatesEnforcegovernanceManagelifecyclePreventoverlap(unique/no-overlapchecks)Tryget(key)contexthashHit/MissSet(result)withversionstampKey ideas- Decision isdata; evaluation isdeterministic; execution is incode- Rows represent rules; conflicts resolved bypriorityandspecificity- Operational rigor:versioning,auditability,validation,observabilityplantuml-src XLZXJYCv4lxVJs6DT3gY2M66MzsFtM4a9eIPt0R29CsEq792JhUJ-EYsUsmt8RSQwHxYdl2UvBwotPqEQ84VaDXLvNBLLrMVST8LWfs9J5gf5KlveX2MISNcNoTiBio3CEn___al6wdyqEb3_6c5fLgnWpFkE7lBPhLoiXJuz5b3HN6LYLwIs7kfAcvuoHOykryPNQjyg0jjc3DSMMm9vJfITirplI73IrvOqTdngfas2lwyF-viv6B9wyATQ-KkEJnuCnShBTZr-4r7ADDbfHNEchijhcj4vhXQ5Tq3DePNtsJkrkpu-5rdlUIF5y9QlX9p-M_XDvE_ifC_-y7UPFHvT7d6ZjYleviNHGkn4eXd8POk-R3u-AlOCfaBRZySBJucXxkaICkmdIFIjFCB4m-ygBdhR0adJ2cLj4vcKUPHP7KZWdH2AjEvYAPdUcCHXSe8Yw0mKoFflo1AQbd8pD6MrSM3oDbYIvgLaTf8joLjnk4orcm5zvOoYyimEgs4yLxnWXcvqkPdaWCQ8bX8h4zBlCwbumjPH5s_Y3l9tAktItfX0S2EO89mXQ2zbeFJOJgTpP63-Sqy7LtCNnJdcGCYtymG1NPQkxKsj-hWokYypXnCJ2kBtoEraae8qtl3k8rYZUPfLHc2FTHIaQtPHF0SAfrI24fHh5MZEFZ3Xi1d8KcINAwhIXlN7EHbagJ5B7ipKaWtSc85cs-j4wMNn4VsHv8mLg7K05Vl5j8PW3BXMrJEmU1obBREG9pXv_VJgp6E_QRDlJ3_37iox7HBdPg1p0IyRLP70OVQzBmMVOrgkkJ0749dihMmBi02cYEFIZIOXLZp1zbgOZbefg8GfN1c2-69Nja-ky0tcU53QdWcR5206EH_xDtMTw9upLtp2fSzMyIxKX4jk2Nnfhhck03TwgdE_7kn7uJG70zixrOHL2m96HIIzyYl17bupEaSs5JeI7scD-XQVMOpNOdWFua4uT_Qye2uM2wHPVaWxfP6bqTEzs-L4G_-TEWxxkeO05AB1jgwOKEjADPIEGjZjPBVQvokz261hk2Lj_QzbWQ5VI-sZIao4850OAD0om86iZNm9X3vpLhJBw6y0Mwr2ffU_5aUGhdiiE-3YQyDsdoPpN0hiV6OMnPwWzDomvUE7QA_X2h9wNDLBmffro8F1pRYqH2mGgayapQJGBeIhTEiN9MkZ-mK1GsUe3qJCQ4NY3UI7cBE2s4SBfbpkrveRl8O5WWraBIEdSj7LwChGc6bYrmebk7e5etMMH-77zIN9bBTixDFwBgEGb3ifezD02fsY16dSBa0cUwAXqLtmQTvRy4dgxiIal1QExnElqnduylFx7mo_SOE9gFpjFUYJcXmx10dD55dFpCqnKeZv3GmM0WreHoPH24WwtK5A0eKoDkuom9UajO66Mpw80pEW4UARqWw9zXL6arhY-H9UzzdiWImN2zfTPvu5DTnzapy2yK30xxSx5fMO2Cyoq0Scc7Js_U3meWx1OpjhhF1g0jNjB0GvvVl74_qGxdG9K1Cyew1jJwYSi6lfqTwg91AhK8G7ItiK6KpeJYchUqbGVHf0hYbwZeF5ReeT7RV50c3aqkiFpaHg8VUiCa6UGhDfZ9OLN3LUmq-i-lBT7mnYk0PZYxJqUmL-5JIdqup0SV7II6QLde0gk74e-jHnTRMwLAOT5kXMncnyitE8GuA9KoiSZ0Oz19lQPUrhxKmMv2_s9eTjMPgUfP6rHuVOc0vcK1mYP4gJQcLgxLZUXac5eZ6M3qWw3WlCfdHZc0PWRfNdcM9Ho2ns2BEdaOHIGBnXFXfkP2h6lWYhiK38QD6tb0MHgTIZ0__x0TxPwFXU3wUNhAlrwFP3PjCFu-7BwhiNuMc5GvkPvL5Syp23GZ8tfNtFVIn0g4XMWT-MmDV1pa2h4Y5vXhwdHYi1dqst4lAB2ObzKb9ZhjsFEq7PS-fYvF-tWnZ7qvm-mtxq5btElbR3pOznToHJgyzdPsDPkpJ3JfDe9o8otpOztlp7UFqgybFFPPEhmvmBQ6MscGqaXa107MbQuUsAphXzqrp1yacKZEVHHf062FKAqxUl_jBtqTjd9_yT8opOmiuUJX-T_ptmRlZmRlt_TZOJlQnIKJ6DmG2JOjEgZT_2jg9xrRnUUIbGqEKL2I17BNSY8OJI9eHHAOyYQUgGUM-Mg_JJ_FHxBVJJ-F9EBrX1xFnvo-ljFls1gbl5wCIZStA5QONDQSGZ7xJ2n6I0iMig4jd70plS2rHgZ7adNjrZEtU8tZrAJBQrYxD_03LYhirDRxW2YOmvQcTozJE_R0cfcICDaVH2vYKzo0gjwfM9NTmA3_YlYOr-58IAcMX7H1DfKBa4QL2NRi4zdDGZNZLMFwDPtVqqBgBXzoLzjcMzy82q0vzfBD9yReB5IZoFqBqVdG5Mk-Uwofzv-yGTxhju-K9VpPEwV5mVNKrdQM-LRyouFt3Oc-GeGzYwCWLRhm7tYVfzpKFDbfMY6xGtJNcVsW0TOVoMqNlnRRuOwUm7RN64Ie0J2DeHo3vISh3wvJ5l083VgY-4etpq_7aUZPY5rCq2aoiqyc4JQ_J-Sj5q59OFCTAW8-cB4WVW9XxvaStSMl1LZNWI2JPXfS2oNbs-_kbPXVaw2qnC_58po_SClwBubRXbcke-Z7jcUEbzkAaUW49i5WH3D1vL1VjP0aJvUdCZrILL5j3Sy1617BfRVY7DPc8eITobjFJFxmClGMlGyfNmg2JblubYgwFjXKm03lG5eyqNT-oxtxusZMlXATww07Oy9R801cwLh5P5KXQO1_1dKr3Jb3Db7aou4cGLm-InADzHneCFZOnyYtR8GQxdTszTvi4GjeZFx1w8IESDzAjmnN83yfad93096AHqpiPRBobJcGZaYO0CumNjceVDGanSoyKmesJk2Bi519vscQ8fgVgp_symeEE_kSItsJjG-rezqu3anJPlNszpL-b80od4z2xq-4NOlUJqvlHx4MjzYr23xNupveXzN1Yti8SjbqP3qGGWZIT855IxVuxun7lDNQ9y5znjnIeM0bt47GZnmFaxJe98YGSv-yNwOukfBNFhSnX8SnB6F5vQpYuxpd94-OJV4533_hKBNmV3rzB41dudnLrZYj2odUJQD3JE3GSedjYSAl6pJq5aUbOOrY_5FJoMCjSx2foqBRc_mC0?>