mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-07-16 17:47:22 +00:00
1 line
142 KiB
XML
1 line
142 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="ACTIVITY" height="6467px" preserveAspectRatio="none" style="width:4431px;height:6467px;background:#FCFCF7;" version="1.1" viewBox="0 0 4431 6467" width="4431px" zoomAndPan="magnify"><?plantuml 1.2026.3?><defs/><g><rect fill="#FCFCF7" height="6467" style="stroke:none;stroke-width:1;" width="4431" x="0" y="0"/><g class="title" data-source-line="5"><text fill="#14180C" font-family="'Volkhov'" font-size="20" font-weight="700" lengthAdjust="spacing" textLength="486.14" x="1971.6997" y="39.42">The Biergarten Data Pipeline — Activity Diagram</text></g><rect fill="none" height="16.926" style="stroke:none;stroke-width:1;" width="4384.5394" x="20" y="64.33"/><ellipse cx="179.6112" cy="96.256" fill="#EBECE3" rx="10" ry="10" style="stroke:#222222;stroke-width:1;"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="187.59" x="85.8162" y="126.256"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="167.59" x="95.8162" y="149.152">ParseArguments(argc, argv)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="95.4522" x="131.8851" y="233.645"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="75.4522" x="141.8851" y="256.541">spdlog::error</text><ellipse cx="179.6112" cy="308.608" fill="none" rx="11" ry="11" style="stroke:#4A5837;stroke-width:1;"/><ellipse cx="179.6112" cy="308.608" fill="#222222" rx="6" ry="6" style="stroke:#4A5837;stroke-width:1;"/><polygon fill="#CBD2B5" points="142.3595,183.182,216.8628,183.182,228.8628,195.182,216.8628,207.182,142.3595,207.182,130.3595,195.182,142.3595,183.182" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="183.6112" y="220.078">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="74.5032" x="142.3595" y="199.615">Invalid args?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="228.8628" y="191.152">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="307.2223" x="26" y="361.608"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="287.2223" x="36" y="384.504">Init OpenSSL global state & LlamaBackendState</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="114.5036" x="122.3594" y="418.534"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="94.5036" x="132.3594" y="441.43">Build DI injector</text><path d="M294.5891,465.46 L294.5891,491.849 L274.5891,495.849 L294.5891,499.849 L294.5891,526.238 A0,0 0 0 0 294.5891,526.238 L508.7045,526.238 A0,0 0 0 0 508.7045,526.238 L508.7045,475.46 L498.7045,465.46 L294.5891,465.46 A0,0 0 0 0 294.5891,465.46" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M498.7045,465.46 L498.7045,475.46 L508.7045,475.46 L498.7045,465.46" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="157.3748" x="300.5891" y="483.356">Opens SQLite connection.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.1154" x="300.5891" y="500.282">(Transactions are now managed</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.3823" x="300.5891" y="517.208">per-phase via batching).</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="189.9558" x="84.6332" y="477.386"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="169.9558" x="94.6332" y="500.282">Initialize SqliteExportService</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="280.5918" x="39.3153" y="546.238"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5918" x="49.3153" y="569.134">Create BoundedChannel<LogEntry> log_ch</text><path d="M287.6812,593.164 L287.6812,628.016 L267.6812,632.016 L287.6812,636.016 L287.6812,670.868 A0,0 0 0 0 287.6812,670.868 L568.6329,670.868 A0,0 0 0 0 568.6329,670.868 L568.6329,603.164 L558.6329,593.164 L287.6812,593.164 A0,0 0 0 0 287.6812,593.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M558.6329,593.164 L558.6329,603.164 L568.6329,603.164 L558.6329,593.164" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="195.644" x="293.6812" y="611.06">Log worker drains log_ch for the</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="137.3777" x="293.6812" y="627.986">entire pipeline lifetime.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="199.83" x="293.6812" y="644.912">All workers emit LogEntry structs</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="259.9517" x="293.6812" y="661.838">via PipelineLogger -- never spdlog directly.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.1401" x="91.5411" y="613.553"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="156.1401" x="101.5411" y="636.449">Spawn Log Worker thread</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="245.1019" x="57.0602" y="690.868"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="67.0602" y="713.764">BiergartenPipelineOrchestrator::Run()</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="254.6731" x="52.2746" y="6306.7811"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="234.6731" x="62.2746" y="6329.6771">spdlog::info "Pipeline complete in X ms"</text><path d="M258.2946,6360.2441 L258.2946,6378.1701 L238.2946,6382.1701 L258.2946,6386.1701 L258.2946,6404.0961 A0,0 0 0 0 258.2946,6404.0961 L470.5868,6404.0961 A0,0 0 0 0 470.5868,6404.0961 L470.5868,6370.2441 L460.5868,6360.2441 L258.2946,6360.2441 A0,0 0 0 0 258.2946,6360.2441" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M460.5868,6360.2441 L460.5868,6370.2441 L470.5868,6370.2441 L460.5868,6360.2441" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="191.2921" x="264.2946" y="6378.1401">Drain guarantees no LogEntry is</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.9327" x="264.2946" y="6395.0661">dropped at shutdown.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="117.3669" x="120.9277" y="6363.7071"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.3669" x="130.9277" y="6386.6031">Join Log Worker</text><ellipse cx="179.6112" cy="6435.0961" fill="none" rx="11" ry="11" style="stroke:#4A5837;stroke-width:1;"/><ellipse cx="179.6112" cy="6435.0961" fill="#222222" rx="6" ry="6" style="stroke:#4A5837;stroke-width:1;"/><line style="stroke:#4A5837;stroke-width:1;" x1="20" x2="20" y1="64.33" y2="6446.0961"/><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="839.4839" x="597.7363" y="747.794"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="304.4079" x="645.8369" y="773.794"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="284.4079" x="655.8369" y="796.69">JsonLoader::LoadBeerStyles("beer-styles.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="372.6092" x="611.7363" y="830.72"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="352.6092" x="621.7363" y="853.616">EnrichmentService::PreWarmBeerStyleCache(beer_styles)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="283.8713" x="1075.8472" y="773.794"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="263.8713" x="1085.8472" y="796.69">JsonLoader::LoadLocations("locations.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="410.8747" x="1012.3454" y="830.72"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="390.8747" x="1022.3454" y="853.616">EnrichmentService::PreWarmLocationCache(sampled_locations)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="839.4839" x="597.7363" y="887.646"/><path d="M1465.3235,927.72 L1465.3235,1005.424 L1775.5802,1005.424 L1775.5802,937.72 L1765.5802,927.72 L1465.3235,927.72" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M1765.5802,927.72 L1765.5802,937.72 L1775.5802,937.72 L1765.5802,927.72" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="247.7773" x="1471.3235" y="945.616">Each call is memoized after its first parse</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="289.2567" x="1471.3235" y="962.542">(implemented today). MockCuratedDataService</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.5326" x="1471.3235" y="979.468">returns a fixed in-memory dataset instead</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="261.9925" x="1471.3235" y="996.394">under --mocked, skipping these JSON files.</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="875.6906" x="579.6329" y="913.646"/><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="261.0983" x="591.6329" y="939.646"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.0983" x="601.6329" y="962.542">JsonLoader::LoadForenamesByCountry(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="180.8044" x="608.5489" y="979.468">"forenames-by-country.json")</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="254.0328" x="880.7312" y="939.646"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="234.0328" x="890.7312" y="962.542">JsonLoader::LoadSurnamesByCountry(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.2663" x="897.6472" y="979.468">"surnames-by-country.json")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="280.5595" x="1162.764" y="948.109"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="260.5595" x="1172.764" y="971.005">JsonLoader::LoadPersonas("personas.json")</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="875.6906" x="579.6329" y="1013.498"/><line style="stroke:#4A5837;stroke-width:1;" x1="573.6329" x2="573.6329" y1="64.33" y2="6446.0961"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="230.9414" x="2404.9822" y="1039.498"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="210.9414" x="2414.9822" y="1062.394">RunUserPhase(sampled_locations)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2433.3158" y="1096.424"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2443.3158" y="1119.32">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="102.505" x="2443.3158" y="1136.246">(loc_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1386.3356" x="1786.5802" y="1170.276"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.0816" x="1798.5802" y="1540.532"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.0816" x="1808.5802" y="1563.428">Loop: Send Locations -> loc_ch</text><path d="M1974.0403,1612.458 L1974.0403,1638.847 L1954.0403,1642.847 L1974.0403,1646.847 L1974.0403,1673.236 A0,0 0 0 0 1974.0403,1673.236 L2178.841,1673.236 A0,0 0 0 0 2178.841,1673.236 L2178.841,1622.458 L2168.841,1612.458 L1974.0403,1612.458 A0,0 0 0 0 1974.0403,1612.458" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2168.841,1612.458 L2168.841,1622.458 L2178.841,1622.458 L2168.841,1612.458" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="144.8039" x="1980.0403" y="1630.354">Producer closes loc_ch.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="136.1004" x="1980.0403" y="1647.28">LLM Worker while loop</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="183.8007" x="1980.0403" y="1664.206">terminates on empty + closed.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.8385" x="1855.2018" y="1624.384"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1865.2018" y="1647.28">Close loc_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2413.7702" y="2059.292"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2423.7702" y="2082.188">Join LLM Worker, SQLite Worker</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="253.0675" x="2393.9192" y="2116.218"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.0675" x="2403.9192" y="2139.114">RunBreweryPhase(sampled_locations)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2433.3158" y="2173.144"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2443.3158" y="2196.04">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="102.505" x="2443.3158" y="2212.966">(loc_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1289.0075" x="1871.9083" y="2246.996"/><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="237.0742" x="1911.6891" y="2495.781"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="217.0742" x="1921.6891" y="2518.677">Loop: Sample User from user_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="134.222" x="1921.6891" y="2535.603">and pair with Location</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="288.6356" x="1885.9083" y="2584.633"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="268.6356" x="1895.9083" y="2607.529">Send BreweryTask(Location, User) -> loc_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.8385" x="1980.8069" y="2656.559"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.8385" x="1990.8069" y="2679.455">Close loc_ch</text><path d="M2647.1357,2961.8 L2647.1357,2979.726 L2627.1357,2983.726 L2647.1357,2987.726 L2647.1357,3005.652 A0,0 0 0 0 2647.1357,3005.652 L2899.5392,3005.652 A0,0 0 0 0 2899.5392,3005.652 L2899.5392,2971.8 L2889.5392,2961.8 L2647.1357,2961.8 A0,0 0 0 0 2647.1357,2961.8" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2889.5392,2961.8 L2889.5392,2971.8 L2899.5392,2971.8 L2889.5392,2961.8" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="231.4035" x="2653.1357" y="2979.696">brewery_pool_ is now fully populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="120.3964" x="2653.1357" y="2996.622">Phase 1b may begin.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2413.7702" y="2965.263"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2423.7702" y="2988.159">Join LLM Worker, SQLite Worker</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="115.7419" x="2462.582" y="3025.652"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="95.7419" x="2472.582" y="3048.548">RunBeerPhase()</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="174.2744" x="2433.3158" y="3082.578"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="154.2744" x="2443.3158" y="3105.474">Create BoundedChannels</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="114.712" x="2443.3158" y="3122.4">(brew_ch, exp_ch)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1171.9389" x="1934.4835" y="3156.43"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="224.4902" x="1948.4835" y="3552.289"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="204.4902" x="1958.4835" y="3575.185">Loop: Send Breweries -> brew_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="111.0456" x="2005.2058" y="3624.215"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="91.0456" x="2015.2058" y="3647.111">Close brew_ch</text><path d="M2647.1357,4062.993 L2647.1357,4097.845 L2627.1357,4101.845 L2647.1357,4105.845 L2647.1357,4140.697 A0,0 0 0 0 2647.1357,4140.697 L2893.975,4140.697 A0,0 0 0 0 2893.975,4140.697 L2893.975,4072.993 L2883.975,4062.993 L2647.1357,4062.993 A0,0 0 0 0 2647.1357,4062.993" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2883.975,4062.993 L2883.975,4072.993 L2893.975,4072.993 L2883.975,4062.993" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.8393" x="2653.1357" y="4080.889">Both brewery_pool_ and beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="187.1287" x="2653.1357" y="4097.815">are now completely populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.3677" x="2653.1357" y="4114.741">Checkin and Follow phases may</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="111.5013" x="2653.1357" y="4131.667">now run in parallel.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="213.3655" x="2413.7702" y="4083.382"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="193.3655" x="2423.7702" y="4106.278">Join LLM Worker, SQLite Worker</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1258.9257" x="1889.9901" y="4160.697"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="137.0586" x="2027.4471" y="4186.697"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="117.0586" x="2037.4471" y="4209.593">RunCheckinPhase()</text><path d="M2233.4719,4240.16 L2233.4719,4266.549 L2213.4719,4270.549 L2233.4719,4274.549 L2233.4719,4300.938 A0,0 0 0 0 2233.4719,4300.938 L2497.2636,4300.938 A0,0 0 0 0 2497.2636,4300.938 L2497.2636,4250.16 L2487.2636,4240.16 L2233.4719,4240.16 A0,0 0 0 0 2233.4719,4240.16" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2487.2636,4240.16 L2487.2636,4250.16 L2497.2636,4250.16 L2487.2636,4240.16" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="200.899" x="2239.4719" y="4258.056">Weights seeded from each user's</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="242.7917" x="2239.4719" y="4274.982">persona.checkin_weight. J-curve profile</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="212.6934" x="2239.4719" y="4291.908">emerges from persona distribution.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="234.991" x="1978.4809" y="4243.623"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="179.0656" x="1988.4809" y="4266.519">ICheckinDistributionStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.991" x="1988.4809" y="4283.445">AssignActivityWeights(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="2021.9676" y="4335.938"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="2031.9676" y="4358.834">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="292.2334" x="1949.8597" y="4471.605"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="272.2334" x="1959.8597" y="4494.501">CheckinsForUser(user, brewery_pool_.size())</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="181.5219" x="2005.2155" y="4608.457"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="161.5219" x="2015.2155" y="4631.353">TimestampFor(user, index)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="239.6223" x="1976.1653" y="4680.383"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.6223" x="1986.1653" y="4703.279">Select brewery from brewery_pool_</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="287.9727" x="1951.9901" y="4752.3091"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.9727" x="1961.9901" y="4775.2051">GenerateCheckin(user, brewery, timestamp)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="1961.9901" y="4792.1311">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="173.2084" x="2009.3722" y="4841.1611"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="153.2084" x="2019.3722" y="4864.0571">ProcessCheckin(checkin)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="287.0855" x="1952.4337" y="4913.0871"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="267.0855" x="1962.4337" y="4935.9831">PipelineLogger::Log(Info, CheckinGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.565" x="1969.3497" y="4952.9091">nullopt, checkin_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="179.4969" x="2006.2279" y="5001.9391"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="159.4969" x="2016.2279" y="5024.8351">Append -> checkin_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="2033.4223" y="5117.8651"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="2043.4223" y="5140.7611">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="2035.3134,5067.4021,2156.6394,5067.4021,2168.6394,5079.4021,2156.6394,5091.4021,2035.3134,5091.4021,2023.3134,5079.4021,2035.3134,5067.4021" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2099.9764" y="5104.2981">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="2035.3134" y="5083.8351">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2168.6394" y="5075.3721">no</text><polygon fill="#CBD2B5" points="2095.9764,5181.2541,2107.9764,5193.2541,2095.9764,5205.2541,2083.9764,5193.2541,2095.9764,5181.2541" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="2023.2641,4543.531,2168.6887,4543.531,2180.6887,4555.531,2168.6887,4567.531,2023.2641,4567.531,2011.2641,4555.531,2023.2641,4543.531" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2099.9764" y="4580.427">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.4247" x="2023.2641" y="4559.964">For each checkin index?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1980.5581" y="4551.501">done</text><polygon fill="#CBD2B5" points="1975.125,4406.679,2216.8278,4406.679,2228.8278,4418.679,2216.8278,4430.679,1975.125,4430.679,1963.125,4418.679,1975.125,4406.679" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2099.9764" y="4443.575">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.7028" x="1975.125" y="4423.112">For each GeneratedUser in user_pool_?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="1932.419" y="4414.649">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="2039.8541" y="5269.2541"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="2049.8541" y="5292.1501">COMMIT (Final)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="126.4149" x="2624.277" y="4312.123"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.4149" x="2634.277" y="4335.019">RunFollowPhase()</text><path d="M2820.7469,4382.864 L2820.7469,4417.716 L2800.7469,4421.716 L2820.7469,4425.716 L2820.7469,4460.568 A0,0 0 0 0 2820.7469,4460.568 L3136.9158,4460.568 A0,0 0 0 0 3136.9158,4460.568 L3136.9158,4392.864 L3126.9158,4382.864 L2820.7469,4382.864 A0,0 0 0 0 2820.7469,4382.864" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3126.9158,4382.864 L3126.9158,4392.864 L3136.9158,4392.864 L3126.9158,4382.864" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.7865" x="2826.7469" y="4400.76">For RandomFollowStrategy, weights</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="295.1689" x="2826.7469" y="4417.686">are uniform. For ActivityWeightedFollowStrategy,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="254.0563" x="2826.7469" y="4434.612">weights derived from user.activity_weight</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="271.5837" x="2826.7469" y="4451.538">so high-activity users attract more followers.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="226.5247" x="2574.2221" y="4394.79"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.1947" x="2584.2221" y="4417.686">IFollowGenerationStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="206.5247" x="2584.2221" y="4434.612">AssignFollowWeights(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="2613.4757" y="4495.568"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="2623.4757" y="4518.464">BEGIN TRANSACTION</text><path d="M2807.7679,4572.494 L2807.7679,4590.42 L2787.7679,4594.42 L2807.7679,4598.42 L2807.7679,4616.346 A0,0 0 0 0 2807.7679,4616.346 L3127.8205,4616.346 A0,0 0 0 0 3127.8205,4616.346 L3127.8205,4582.494 L3117.8205,4572.494 L2807.7679,4572.494 A0,0 0 0 0 2807.7679,4572.494" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3117.8205,4572.494 L3117.8205,4582.494 L3127.8205,4582.494 L3117.8205,4572.494" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="299.0526" x="2813.7679" y="4590.39">Self-follow constraint (follower_id != followed_id)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="255.0636" x="2813.7679" y="4607.316">enforced here and at the DB schema level.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="200.5669" x="2587.201" y="4567.494"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.1947" x="2597.201" y="4590.39">IFollowGenerationStrategy::</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="180.5669" x="2597.201" y="4607.316">GenerateFollows(user_pool_)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="151.2743" x="2611.8473" y="4721.2721"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="131.2743" x="2621.8473" y="4744.1681">ProcessFollow(follow)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="276.4418" x="2549.2636" y="4793.1981"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.4418" x="2559.2636" y="4816.0941">PipelineLogger::Log(Info, FollowGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="166.4686" x="2566.1796" y="4833.0201">nullopt, follower_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="168.2065" x="2603.3812" y="4882.0501"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.2065" x="2613.3812" y="4904.9461">Append -> follow_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="2624.9304" y="5004.4391"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="2634.9304" y="5027.3351">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="2626.8215,4953.9761,2748.1475,4953.9761,2760.1475,4965.9761,2748.1475,4977.9761,2626.8215,4977.9761,2614.8215,4965.9761,2626.8215,4953.9761" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2691.4845" y="4990.8721">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="2626.8215" y="4970.4091">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2760.1475" y="4961.9461">no</text><polygon fill="#CBD2B5" points="2687.4845,5061.3651,2699.4845,5073.3651,2687.4845,5085.3651,2675.4845,5073.3651,2687.4845,5061.3651" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="2604.8563,4656.346,2770.1127,4656.346,2782.1127,4668.346,2770.1127,4680.346,2604.8563,4680.346,2592.8563,4668.346,2604.8563,4656.346" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2691.4845" y="4693.2421">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.2563" x="2604.8563" y="4672.779">For each GeneratedFollow?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2562.1503" y="4664.316">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="2631.3622" y="5144.3651"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="2641.3622" y="5167.2611">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="1258.9257" x="1889.9901" y="5326.1801"/><path d="M2646.9098,5342.1801 L2646.9098,5368.5691 L2626.9098,5372.5691 L2646.9098,5376.5691 L2646.9098,5402.9581 A0,0 0 0 0 2646.9098,5402.9581 L2867.1771,5402.9581 A0,0 0 0 0 2867.1771,5402.9581 L2867.1771,5352.1801 L2857.1771,5342.1801 L2646.9098,5342.1801 A0,0 0 0 0 2646.9098,5342.1801" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2857.1771,5342.1801 L2857.1771,5352.1801 L2867.1771,5352.1801 L2857.1771,5342.1801" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="199.2672" x="2652.9098" y="5360.0761">checkin_pool_ and follow_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="144.2613" x="2652.9098" y="5377.0021">are now fully populated.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.5102" x="2652.9098" y="5393.9281">Rating phase may begin.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.9138" x="2413.996" y="5354.1061"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.9138" x="2423.996" y="5377.0021">Join CheckinPhase, FollowPhase</text><path d="M2603.4703,5412.9581 L2603.4703,5439.3471 L2583.4703,5443.3471 L2603.4703,5447.3471 L2603.4703,5473.7361 A0,0 0 0 0 2603.4703,5473.7361 L2891.156,5473.7361 A0,0 0 0 0 2891.156,5473.7361 L2891.156,5422.9581 L2881.156,5412.9581 L2603.4703,5412.9581 A0,0 0 0 0 2603.4703,5412.9581" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2881.156,5412.9581 L2881.156,5422.9581 L2891.156,5422.9581 L2881.156,5412.9581" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.5804" x="2609.4703" y="5430.8541">Beer selection biased by</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="266.6857" x="2609.4703" y="5447.7801">user.persona.style_affinities and abv_range.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="219.4598" x="2609.4703" y="5464.7061">Rating skew modulated per persona.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="126.0347" x="2457.4356" y="5424.8841"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="106.0347" x="2467.4356" y="5447.7801">RunRatingPhase()</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="2446.4442" y="5493.7361"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="2456.4442" y="5516.6321">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="311.5252" x="2364.6903" y="5609.0581"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="291.5252" x="2374.6903" y="5631.9541">Match brewery_id, select beer from beer_pool_</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="288.0478" x="2374.6903" y="5648.8801">(same brewery_id, biased by persona affinities)</text><polygon fill="#CBD2B5" points="2447.2936,5682.9101,2593.6122,5682.9101,2605.6122,5694.9101,2593.6122,5706.9101,2447.2936,5706.9101,2435.2936,5694.9101,2447.2936,5682.9101" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="146.3186" x="2447.2936" y="5699.3431">Beer exists for brewery?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2414.1459" y="5690.8801">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2605.6122" y="5690.8801">no</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="256.0901" x="2242.0534" y="5716.9101"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="236.0901" x="2252.0534" y="5739.8061">GenerateRating(user, beer, checkin_id)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="2252.0534" y="5756.7321">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="150.1336" x="2295.0316" y="5790.7621"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.1336" x="2305.0316" y="5813.6581">ProcessRating(rating)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="276.0616" x="2232.0676" y="5858.7621"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="256.0616" x="2242.0676" y="5881.6581">PipelineLogger::Log(Info, RatingGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="153.5141" x="2248.9836" y="5898.5841">nullopt, rating_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="2307.5443" y="5983.0771"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="2317.5443" y="6005.9731">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="2309.4354,5932.6141,2430.7614,5932.6141,2442.7614,5944.6141,2430.7614,5956.6141,2309.4354,5956.6141,2297.4354,5944.6141,2309.4354,5932.6141" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="2374.0984" y="5969.5101">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="2309.4354" y="5949.0471">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="2442.7614" y="5940.5841">no</text><polygon fill="#CBD2B5" points="2370.0984,6040.0031,2382.0984,6052.0031,2370.0984,6064.0031,2358.0984,6052.0031,2370.0984,6040.0031" style="stroke:#4A5837;stroke-width:0.5;"/><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="285.3566" x="2528.1292" y="5716.9101"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="265.3566" x="2538.1292" y="5739.8061">PipelineLogger::Log(Warn, RatingGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="168.3958" x="2545.0452" y="5756.7321">nullopt, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="196.8815" x="2572.3667" y="5790.7621"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="176.8815" x="2582.3667" y="5813.6581">Skip -- brewery has no beers</text><polygon fill="#CBD2B5" points="2520.4529,6070.0031,2532.4529,6082.0031,2520.4529,6094.0031,2508.4529,6082.0031,2520.4529,6070.0031" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="2378.5205,5550.6621,2662.3854,5550.6621,2674.3854,5562.6621,2662.3854,5574.6621,2378.5205,5574.6621,2366.5205,5562.6621,2378.5205,5550.6621" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="2524.4529" y="5587.5581">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="283.865" x="2378.5205" y="5567.0951">For each GeneratedCheckin in checkin_pool_?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="2335.8145" y="5558.6321">done</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="2464.3306" y="6136.0031"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="2474.3306" y="6158.8991">COMMIT (Final)</text><path d="M2633.2891,6197.9291 L2633.2891,6207.3921 L2613.2891,6211.3921 L2633.2891,6215.3921 L2633.2891,6224.8551 A0,0 0 0 0 2633.2891,6224.8551 L2850.7226,6224.8551 A0,0 0 0 0 2850.7226,6224.8551 L2850.7226,6207.9291 L2840.7226,6197.9291 L2633.2891,6197.9291 A0,0 0 0 0 2633.2891,6197.9291" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M2840.7226,6197.9291 L2840.7226,6207.9291 L2850.7226,6207.9291 L2840.7226,6197.9291" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="196.4335" x="2639.2891" y="6215.8251">Safely closes the DB connection.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="185.6723" x="2427.6168" y="6192.9291"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="165.6723" x="2437.6168" y="6215.8251">Finalize SqliteExportService</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="98.6565" x="2471.1247" y="6249.8551"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.6565" x="2481.1247" y="6272.7511">Close log_ch</text><line style="stroke:#4A5837;stroke-width:1;" x1="1780.5802" x2="1780.5802" y1="64.33" y2="6446.0961"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="123.1779" x="3328.5179" y="1254.672"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="103.1779" x="3338.5179" y="1277.568">Receive Location</text><path d="M3545.7162,1331.598 L3545.7162,1341.061 L3525.7162,1345.061 L3545.7162,1349.061 L3545.7162,1358.524 A0,0 0 0 0 3545.7162,1358.524 L3780.0532,1358.524 A0,0 0 0 0 3780.0532,1358.524 L3780.0532,1341.598 L3770.0532,1331.598 L3545.7162,1331.598 A0,0 0 0 0 3545.7162,1331.598" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3770.0532,1331.598 L3770.0532,1341.598 L3780.0532,1341.598 L3770.0532,1331.598" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3551.7162" y="1349.494">Guaranteed cache hit from startup.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="271.2188" x="3254.4974" y="1326.598"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="251.2188" x="3264.4974" y="1349.494">GetLocationContextFromCache(location)</text><path d="M3547.7963,1394.05 L3547.7963,1428.902 L3527.7963,1432.902 L3547.7963,1436.902 L3547.7963,1471.754 A0,0 0 0 0 3547.7963,1471.754 L3782.1333,1471.754 A0,0 0 0 0 3782.1333,1471.754 L3782.1333,1404.05 L3772.1333,1394.05 L3547.7963,1394.05 A0,0 0 0 0 3547.7963,1394.05" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3772.1333,1394.05 L3772.1333,1404.05 L3782.1333,1404.05 L3772.1333,1394.05" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3553.7963" y="1411.946">Guaranteed cache hit from startup.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="201.4453" x="3553.7963" y="1428.872">Returns a Persona struct carrying</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="162.2598" x="3553.7963" y="1445.798">style_affinities, abv_range,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="197.9643" x="3553.7963" y="1462.724">ibu_preference, checkin_weight.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="275.379" x="3252.4173" y="1405.976"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="255.379" x="3262.4173" y="1428.872">IPersonaSelectionStrategy::SelectPersona(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="120.7278" x="3269.3333" y="1445.798">personas_palette_)</text><path d="M3565.408,1506.754 L3565.408,1566.995 L3545.408,1570.995 L3565.408,1574.995 L3565.408,1635.236 A0,0 0 0 0 3565.408,1635.236 L3832.079,1635.236 A0,0 0 0 0 3832.079,1635.236 L3832.079,1516.754 L3822.079,1506.754 L3565.408,1506.754 A0,0 0 0 0 3565.408,1506.754" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3822.079,1506.754 L3822.079,1516.754 L3832.079,1516.754 L3822.079,1506.754" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.671" x="3571.408" y="1524.65">Deterministic lookup -- no LLM involved.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="221.3642" x="3571.408" y="1541.576">Free function (implemented today in</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="241.3876" x="3571.408" y="1558.502">generate_users.cc), not a class method.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="227.0581" x="3571.408" y="1575.428">Name selected from pre-keyed maps</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="239.9088" x="3571.408" y="1592.354">and passed into the generation prompt.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="204.7406" x="3571.408" y="1609.28">Skips the city if either map has no</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="116.4738" x="3571.408" y="1626.206">entry for iso3166_1.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="310.6024" x="3234.8056" y="1544.069"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="230.9418" x="3244.8056" y="1566.965">SampleName(forenames_by_country,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="283.6864" x="3251.7216" y="1583.891">surnames_by_country, location.iso3166_1, rng)</text><path d="M3586.4306,1670.236 L3586.4306,1705.088 L3566.4306,1709.088 L3586.4306,1713.088 L3586.4306,1747.94 A0,0 0 0 0 3586.4306,1747.94 L3883.6744,1747.94 A0,0 0 0 0 3883.6744,1747.94 L3883.6744,1680.236 L3873.6744,1670.236 L3586.4306,1670.236 A0,0 0 0 0 3586.4306,1670.236" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3873.6744,1670.236 L3873.6744,1680.236 L3883.6744,1680.236 L3873.6744,1670.236" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="276.2438" x="3592.4306" y="1688.132">LLM receives: EnrichedCity context + persona</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="240.7473" x="3592.4306" y="1705.058">description + sampled name. Generates</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="221.3189" x="3592.4306" y="1721.984">bio and preference signals grounded</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="130.7184" x="3592.4306" y="1738.91">in locale and persona.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="352.6475" x="3213.7831" y="1682.162"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="332.6475" x="3223.7831" y="1705.058">GenerateUser(enriched_city, persona, sampled_name)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="3223.7831" y="1721.984">via DataGenerator</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="265.5933" x="3257.3102" y="1782.94"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="3267.3102" y="1805.836">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.3182" x="3274.2262" y="1822.762">city, user_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="212.4033" x="3283.9052" y="1869.792"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="192.4033" x="3293.9052" y="1892.688">Send GeneratedUser -> exp_ch</text><polygon fill="#CBD2B5" points="3335.0924,1196.276,3445.1213,1196.276,3457.1213,1208.276,3445.1213,1220.276,3335.0924,1220.276,3323.0924,1208.276,3335.0924,1196.276" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3394.1068" y="1233.172">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="3335.0924" y="1212.709">loc_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3307.9246" y="1204.246">no</text><path d="M3461.4956,1952.514 L3461.4956,1978.903 L3441.4956,1982.903 L3461.4956,1986.903 L3461.4956,2013.292 A0,0 0 0 0 3461.4956,2013.292 L3666.2963,2013.292 A0,0 0 0 0 3666.2963,2013.292 L3666.2963,1962.514 L3656.2963,1952.514 L3461.4956,1952.514 A0,0 0 0 0 3461.4956,1952.514" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3656.2963,1952.514 L3656.2963,1962.514 L3666.2963,1962.514 L3656.2963,1952.514" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="148.7429" x="3467.4956" y="1970.41">Producer closes exp_ch.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="151.5184" x="3467.4956" y="1987.336">SQLite Worker while loop</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="183.8007" x="3467.4956" y="2004.262">terminates on empty + closed.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="3338.7181" y="1964.44"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="3348.7181" y="1987.336">Close exp_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="242.7554" x="3254.3279" y="2400.392"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.7554" x="3264.3279" y="2423.288">Receive BreweryTask(Location, User)</text><path d="M3545.23,2468.355 L3545.23,2477.818 L3525.23,2481.818 L3545.23,2485.818 L3545.23,2495.281 A0,0 0 0 0 3545.23,2495.281 L3779.5669,2495.281 A0,0 0 0 0 3779.5669,2495.281 L3779.5669,2478.355 L3769.5669,2468.355 L3545.23,2468.355 A0,0 0 0 0 3545.23,2468.355" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3769.5669,2468.355 L3769.5669,2478.355 L3779.5669,2478.355 L3769.5669,2468.355" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3551.23" y="2486.251">Guaranteed cache hit from startup.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="299.0486" x="3226.1813" y="2463.355"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="279.0486" x="3236.1813" y="2486.251">GetLocationContextFromCache(task.location)</text><path d="M3561.9253,2540.281 L3561.9253,2558.207 L3541.9253,2562.207 L3561.9253,2566.207 L3561.9253,2584.133 A0,0 0 0 0 3561.9253,2584.133 L3877.2294,2584.133 A0,0 0 0 0 3877.2294,2584.133 L3877.2294,2550.281 L3867.2294,2540.281 L3561.9253,2540.281 A0,0 0 0 0 3561.9253,2540.281" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3867.2294,2540.281 L3867.2294,2550.281 L3877.2294,2550.281 L3867.2294,2540.281" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="131.8658" x="3567.9253" y="2558.177">KV cache stays warm.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="294.3041" x="3567.9253" y="2575.103">Brewery is linked to the sampled owner_user_id.</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="332.4393" x="3209.486" y="2535.281"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="312.4393" x="3219.486" y="2558.177">GenerateBrewery(enriched_city, context, task.user)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="3219.486" y="2575.103">via DataGenerator</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="165.1811" x="3293.1151" y="2624.133"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3303.1151" y="2647.029">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="119.0803" x="3310.0311" y="2663.955">BreweryGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.819" x="3310.0311" y="2680.881">city, brewery_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="234.5294" x="3258.4409" y="2729.911"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="214.5294" x="3268.4409" y="2752.807">Send GeneratedBrewery -> exp_ch</text><polygon fill="#CBD2B5" points="3320.6912,2335.959,3430.7201,2335.959,3442.7201,2347.959,3430.7201,2359.959,3320.6912,2359.959,3308.6912,2347.959,3320.6912,2335.959" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3379.7056" y="2372.855">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.0289" x="3320.6912" y="2352.392">loc_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3293.5234" y="2343.929">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="3324.3169" y="2819.374"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="3334.3169" y="2842.27">Close exp_ch</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="184.7103" x="3266.2618" y="3260.122"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="164.7103" x="3276.2618" y="3283.018">Receive GeneratedBrewery</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="242.4597" x="3237.3871" y="3330.196"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="222.4597" x="3247.3871" y="3353.092">IBeerSelectionStrategy::SelectStyles(</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="186.0366" x="3254.3031" y="3370.018">brewery, beer_style_palette_)</text><path d="M3493.4052,3483.974 L3493.4052,3518.826 L3473.4052,3522.826 L3493.4052,3526.826 L3493.4052,3561.678 A0,0 0 0 0 3493.4052,3561.678 L3731.1317,3561.678 A0,0 0 0 0 3731.1317,3561.678 L3731.1317,3493.974 L3721.1317,3483.974 L3493.4052,3483.974 A0,0 0 0 0 3493.4052,3483.974" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><path d="M3721.1317,3483.974 L3721.1317,3493.974 L3731.1317,3493.974 L3721.1317,3483.974" fill="#DBEEDD" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="213.3369" x="3499.4052" y="3501.87">Guaranteed cache hit from startup.</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="189.1634" x="3499.4052" y="3518.796">KV cache stays warm across all</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="216.7265" x="3499.4052" y="3535.722">beer generations -- system prompt</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="208.9429" x="3499.4052" y="3552.648">does not change within this phase.</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="229.5765" x="3243.8287" y="3504.363"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="209.5765" x="3253.8287" y="3527.259">GetStyleContextFromCache(style)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="253.4023" x="3231.9158" y="3596.678"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="233.4023" x="3241.9158" y="3619.574">GenerateBeer(brewery, style_context)</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="110.263" x="3241.9158" y="3636.5">via DataGenerator</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="217.4865" x="3249.8737" y="3681.141"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="197.4865" x="3259.8737" y="3704.037">Attach GeneratedBeer to bundle</text><polygon fill="#CBD2B5" points="3270.6881,3419.048,3446.5458,3419.048,3458.5458,3431.048,3446.5458,3443.048,3270.6881,3443.048,3258.6881,3431.048,3270.6881,3419.048" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="3362.617" y="3455.944">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.8578" x="3270.6881" y="3435.481">For each selected BeerStyle?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="3227.9821" y="3427.018">done</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="165.1811" x="3276.0264" y="3777.067"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="3286.0264" y="3799.963">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.1297" x="3292.9424" y="3816.889">BeerGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="133.819" x="3292.9424" y="3833.815">city, brewery_id, "llm")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="195.6918" x="3260.7711" y="3882.845"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="175.6918" x="3270.7711" y="3905.741">Send BeersBundle -> exp_ch</text><polygon fill="#CBD2B5" points="3297.499,3195.578,3419.7349,3195.578,3431.7349,3207.578,3419.7349,3219.578,3297.499,3219.578,3285.499,3207.578,3297.499,3195.578" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="3362.617" y="3232.474">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="122.2359" x="3297.499" y="3212.011">brew_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="3270.3312" y="3203.548">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="102.7775" x="3307.2282" y="3976.919"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="82.7775" x="3317.2282" y="3999.815">Close exp_ch</text><line style="stroke:#4A5837;stroke-width:1;" x1="3176.9158" x2="3176.9158" y1="64.33" y2="6446.0961"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="4166.005" y="1273.728"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="4176.005" y="1296.624">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="162.5842" x="4158.7217" y="1406.106"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="142.5842" x="4168.7217" y="1429.002">Receive GeneratedUser</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="131.0462" x="4174.4907" y="1478.032"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="111.0462" x="4184.4907" y="1500.928">ProcessUser(user)</text><rect fill="#EBECE3" height="53.852" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="265.5933" x="4107.2171" y="1549.958"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="245.5933" x="4117.2171" y="1572.854">PipelineLogger::Log(Info, UserGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="126.11" x="4124.1331" y="1589.78">city, user_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="158.8269" x="4160.6003" y="1638.81"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="138.8269" x="4170.6003" y="1661.706">Append -> user_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="4177.4597" y="1761.199"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="4187.4597" y="1784.095">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="4179.3508,1710.736,4300.6768,1710.736,4312.6768,1722.736,4300.6768,1734.736,4179.3508,1734.736,4167.3508,1722.736,4179.3508,1710.736" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4244.0138" y="1747.632">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="4179.3508" y="1727.169">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4312.6768" y="1718.706">no</text><polygon fill="#CBD2B5" points="4240.0138,1824.588,4252.0138,1836.588,4240.0138,1848.588,4228.0138,1836.588,4240.0138,1824.588" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="4183.0299,1345.654,4296.9977,1345.654,4308.9977,1357.654,4296.9977,1369.654,4183.0299,1369.654,4171.0299,1357.654,4183.0299,1345.654" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4244.0138" y="1382.55">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="4183.0299" y="1362.087">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4155.8621" y="1353.624">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="4183.8914" y="1905.588"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="4193.8914" y="1928.484">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="478.136" x="3920.6744" y="2033.292"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="4119.1184" y="2272.996"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="4129.1184" y="2295.892">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="184.7103" x="4100.7721" y="2394.355"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="164.7103" x="4110.7721" y="2417.251">Receive GeneratedBrewery</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.6731" x="4104.7906" y="2457.318"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="156.6731" x="4114.7906" y="2480.214">ProcessBrewery(brewery)</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.5268" x="4104.8638" y="2529.244"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="4114.8638" y="2552.14">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="119.0803" x="4121.7798" y="2569.066">BreweryGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.6108" x="4121.7798" y="2585.992">city, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="182.3278" x="4101.9633" y="2635.022"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="162.3278" x="4111.9633" y="2657.918">Append -> brewery_pool_</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="4130.5731" y="2757.411"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="4140.5731" y="2780.307">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="4132.4642,2706.948,4253.7902,2706.948,4265.7902,2718.948,4253.7902,2730.948,4132.4642,2730.948,4120.4642,2718.948,4132.4642,2706.948" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4197.1272" y="2743.844">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="4132.4642" y="2723.381">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4265.7902" y="2714.918">no</text><polygon fill="#CBD2B5" points="4193.1272,2814.337,4205.1272,2826.337,4193.1272,2838.337,4181.1272,2826.337,4193.1272,2814.337" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="4136.1433,2329.922,4250.1111,2329.922,4262.1111,2341.922,4250.1111,2353.922,4136.1433,2353.922,4124.1433,2341.922,4136.1433,2329.922" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4197.1272" y="2366.818">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="4136.1433" y="2346.355">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4108.9755" y="2337.892">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="4137.0048" y="2882.337"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="4147.0048" y="2905.233">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="378.8079" x="3932.6744" y="2939.263"/><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="148.0175" x="4026.782" y="3182.43"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="128.0175" x="4036.782" y="3205.326">BEGIN TRANSACTION</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="145.8726" x="4027.8545" y="3317.048"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="125.8726" x="4037.8545" y="3339.944">Receive BeersBundle</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="220.2327" x="3990.6744" y="3453.9"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="200.2327" x="4000.6744" y="3476.796">Set beer.brewery_id from bundle</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="132.7719" x="4034.4048" y="3525.826"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="112.7719" x="4044.4048" y="3548.722">ProcessBeer(beer)</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="160.3772" x="4020.6022" y="3597.752"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="140.3772" x="4030.6022" y="3620.648">Append -> beer_pool_</text><polygon fill="#CBD2B5" points="4026.1593,3388.974,4175.4223,3388.974,4187.4223,3400.974,4175.4223,3412.974,4026.1593,3412.974,4014.1593,3400.974,4026.1593,3388.974" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="59.2411" x="4104.7908" y="3425.87">remaining</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.263" x="4026.1593" y="3405.407">For each beer in bundle?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="30.706" x="3983.4533" y="3396.944">done</text><rect fill="#EBECE3" height="70.778" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="176.5268" x="4012.5274" y="3689.289"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="145.1811" x="4022.5274" y="3712.185">PipelineLogger::Log(Info,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="97.1297" x="4029.4434" y="3729.111">BeerGeneration,</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="149.6108" x="4029.4434" y="3746.037">city, brewery_id, "sqlite")</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="125.1082" x="4038.2367" y="3845.53"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="105.1082" x="4048.2367" y="3868.426">COMMIT & BEGIN</text><polygon fill="#CBD2B5" points="4040.1278,3795.067,4161.4538,3795.067,4173.4538,3807.067,4161.4538,3819.067,4040.1278,3819.067,4028.1278,3807.067,4040.1278,3795.067" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4104.7908" y="3831.963">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="121.326" x="4040.1278" y="3811.5">Batch size reached?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4173.4538" y="3803.037">no</text><polygon fill="#CBD2B5" points="4100.7908,3908.919,4112.7908,3920.919,4100.7908,3932.919,4088.7908,3920.919,4100.7908,3908.919" style="stroke:#4A5837;stroke-width:0.5;"/><polygon fill="#CBD2B5" points="4043.8069,3253.974,4157.7747,3253.974,4169.7747,3265.974,4157.7747,3277.974,4043.8069,3277.974,4031.8069,3265.974,4043.8069,3253.974" style="stroke:#4A5837;stroke-width:0.5;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="21.1478" x="4104.7908" y="3290.87">yes</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="113.9678" x="4043.8069" y="3270.407">exp_ch has items?</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="15.1678" x="4016.6391" y="3261.944">no</text><rect fill="#EBECE3" height="36.926" rx="12.5" ry="12.5" style="stroke:#4A5837;stroke-width:0.5;" width="112.2447" x="4044.6684" y="3990.067"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="92.2447" x="4054.6684" y="4012.963">COMMIT (Final)</text><rect fill="#555555" height="6" rx="2.5" ry="2.5" style="stroke:#555555;stroke-width:1;" width="304.2327" x="3944.6744" y="4046.993"/><line style="stroke:#4A5837;stroke-width:1;" x1="3914.6744" x2="3914.6744" y1="64.33" y2="6446.0961"/><line style="stroke:#4A5837;stroke-width:1;" x1="4403.8104" x2="4403.8104" y1="64.33" y2="6446.0961"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="106.256" y2="126.256"/><polygon fill="#656F33" points="175.6112,116.256,179.6112,126.256,183.6112,116.256,179.6112,120.256" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="270.571" y2="297.608"/><polygon fill="#656F33" points="175.6112,287.608,179.6112,297.608,183.6112,287.608,179.6112,291.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="207.182" y2="233.645"/><polygon fill="#656F33" points="175.6112,223.645,179.6112,233.645,183.6112,223.645,179.6112,227.645" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="228.8628" x2="240.8628" y1="195.182" y2="195.182"/><polygon fill="#656F33" points="236.8628,267.608,240.8628,277.608,244.8628,267.608,240.8628,271.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="240.8628" x2="240.8628" y1="195.182" y2="341.608"/><line style="stroke:#656F33;stroke-width:1;" x1="240.8628" x2="179.6112" y1="341.608" y2="341.608"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="341.608" y2="361.608"/><polygon fill="#656F33" points="175.6112,351.608,179.6112,361.608,183.6112,351.608,179.6112,355.608" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="163.182" y2="183.182"/><polygon fill="#656F33" points="175.6112,173.182,179.6112,183.182,183.6112,173.182,179.6112,177.182" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="398.534" y2="418.534"/><polygon fill="#656F33" points="175.6112,408.534,179.6112,418.534,183.6112,408.534,179.6112,412.534" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="455.46" y2="477.386"/><polygon fill="#656F33" points="175.6112,467.386,179.6112,477.386,183.6112,467.386,179.6112,471.386" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="514.312" y2="546.238"/><polygon fill="#656F33" points="175.6112,536.238,179.6112,546.238,183.6112,536.238,179.6112,540.238" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="583.164" y2="613.553"/><polygon fill="#656F33" points="175.6112,603.553,179.6112,613.553,183.6112,603.553,179.6112,607.553" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="650.479" y2="690.868"/><polygon fill="#656F33" points="175.6112,680.868,179.6112,690.868,183.6112,680.868,179.6112,684.868" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6343.7071" y2="6363.7071"/><polygon fill="#656F33" points="175.6112,6353.7071,179.6112,6363.7071,183.6112,6353.7071,179.6112,6357.7071" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6400.6331" y2="6424.0961"/><polygon fill="#656F33" points="175.6112,6414.0961,179.6112,6424.0961,183.6112,6414.0961,179.6112,6418.0961" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="798.0409" x2="798.0409" y1="810.72" y2="830.72"/><polygon fill="#656F33" points="794.0409,820.72,798.0409,830.72,802.0409,820.72,798.0409,824.72" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1217.7828" x2="1217.7828" y1="810.72" y2="830.72"/><polygon fill="#656F33" points="1213.7828,820.72,1217.7828,830.72,1221.7828,820.72,1217.7828,824.72" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="798.0409" x2="798.0409" y1="753.794" y2="773.794"/><polygon fill="#656F33" points="794.0409,763.794,798.0409,773.794,802.0409,763.794,798.0409,767.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1217.7828" x2="1217.7828" y1="753.794" y2="773.794"/><polygon fill="#656F33" points="1213.7828,763.794,1217.7828,773.794,1221.7828,763.794,1217.7828,767.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="798.0409" x2="798.0409" y1="867.646" y2="887.646"/><polygon fill="#656F33" points="794.0409,877.646,798.0409,887.646,802.0409,877.646,798.0409,881.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1217.7828" x2="1217.7828" y1="867.646" y2="887.646"/><polygon fill="#656F33" points="1213.7828,877.646,1217.7828,887.646,1221.7828,877.646,1217.7828,881.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="722.1821" x2="722.1821" y1="919.646" y2="939.646"/><polygon fill="#656F33" points="718.1821,929.646,722.1821,939.646,726.1821,929.646,722.1821,933.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1007.7476" x2="1007.7476" y1="919.646" y2="939.646"/><polygon fill="#656F33" points="1003.7476,929.646,1007.7476,939.646,1011.7476,929.646,1007.7476,933.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1303.0438" x2="1303.0438" y1="919.646" y2="948.109"/><polygon fill="#656F33" points="1299.0438,938.109,1303.0438,948.109,1307.0438,938.109,1303.0438,942.109" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="722.1821" x2="722.1821" y1="993.498" y2="1013.498"/><polygon fill="#656F33" points="718.1821,1003.498,722.1821,1013.498,726.1821,1003.498,722.1821,1007.498" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1007.7476" x2="1007.7476" y1="993.498" y2="1013.498"/><polygon fill="#656F33" points="1003.7476,1003.498,1007.7476,1013.498,1011.7476,1003.498,1007.7476,1007.498" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1303.0438" x2="1303.0438" y1="985.035" y2="1013.498"/><polygon fill="#656F33" points="1299.0438,1003.498,1303.0438,1013.498,1307.0438,1003.498,1303.0438,1007.498" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1017.4782" x2="1017.4782" y1="893.646" y2="913.646"/><polygon fill="#656F33" points="1013.4782,903.646,1017.4782,913.646,1021.4782,903.646,1017.4782,907.646" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="1076.424" y2="1096.424"/><polygon fill="#656F33" points="2516.4529,1086.424,2520.4529,1096.424,2524.4529,1086.424,2520.4529,1090.424" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1904.6211" x2="1904.6211" y1="1577.458" y2="1624.384"/><polygon fill="#656F33" points="1900.6211,1614.384,1904.6211,1624.384,1908.6211,1614.384,1904.6211,1618.384" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1904.6211" x2="1904.6211" y1="1176.276" y2="1540.532"/><polygon fill="#656F33" points="1900.6211,1530.532,1904.6211,1540.532,1908.6211,1530.532,1904.6211,1534.532" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="1150.276" y2="1170.276"/><polygon fill="#656F33" points="2516.4529,1160.276,2520.4529,1170.276,2524.4529,1160.276,2520.4529,1164.276" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="2096.218" y2="2116.218"/><polygon fill="#656F33" points="2516.4529,2106.218,2520.4529,2116.218,2524.4529,2106.218,2520.4529,2110.218" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="2153.144" y2="2173.144"/><polygon fill="#656F33" points="2516.4529,2163.144,2520.4529,2173.144,2524.4529,2163.144,2520.4529,2167.144" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.2261" x2="2030.2261" y1="2549.633" y2="2584.633"/><polygon fill="#656F33" points="2026.2261,2574.633,2030.2261,2584.633,2034.2261,2574.633,2030.2261,2578.633" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.2261" x2="2030.2261" y1="2621.559" y2="2656.559"/><polygon fill="#656F33" points="2026.2261,2646.559,2030.2261,2656.559,2034.2261,2646.559,2030.2261,2650.559" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.2261" x2="2030.2261" y1="2252.996" y2="2495.781"/><polygon fill="#656F33" points="2026.2261,2485.781,2030.2261,2495.781,2034.2261,2485.781,2030.2261,2489.781" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="2226.996" y2="2246.996"/><polygon fill="#656F33" points="2516.4529,2236.996,2520.4529,2246.996,2524.4529,2236.996,2520.4529,2240.996" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="3002.189" y2="3025.652"/><polygon fill="#656F33" points="2516.4529,3015.652,2520.4529,3025.652,2524.4529,3015.652,2520.4529,3019.652" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="3062.578" y2="3082.578"/><polygon fill="#656F33" points="2516.4529,3072.578,2520.4529,3082.578,2524.4529,3072.578,2520.4529,3076.578" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2060.7286" x2="2060.7286" y1="3589.215" y2="3624.215"/><polygon fill="#656F33" points="2056.7286,3614.215,2060.7286,3624.215,2064.7286,3614.215,2060.7286,3618.215" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2060.7286" x2="2060.7286" y1="3162.43" y2="3552.289"/><polygon fill="#656F33" points="2056.7286,3542.289,2060.7286,3552.289,2064.7286,3542.289,2060.7286,3546.289" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="3136.43" y2="3156.43"/><polygon fill="#656F33" points="2516.4529,3146.43,2520.4529,3156.43,2524.4529,3146.43,2520.4529,3150.43" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4223.623" y2="4243.623"/><polygon fill="#656F33" points="2091.9764,4233.623,2095.9764,4243.623,2099.9764,4233.623,2095.9764,4237.623" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4297.475" y2="4335.938"/><polygon fill="#656F33" points="2091.9764,4325.938,2095.9764,4335.938,2099.9764,4325.938,2095.9764,4329.938" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4645.383" y2="4680.383"/><polygon fill="#656F33" points="2091.9764,4670.383,2095.9764,4680.383,2099.9764,4670.383,2095.9764,4674.383" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4717.3091" y2="4752.3091"/><polygon fill="#656F33" points="2091.9764,4742.3091,2095.9764,4752.3091,2099.9764,4742.3091,2095.9764,4746.3091" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4806.1611" y2="4841.1611"/><polygon fill="#656F33" points="2091.9764,4831.1611,2095.9764,4841.1611,2099.9764,4831.1611,2095.9764,4835.1611" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4878.0871" y2="4913.0871"/><polygon fill="#656F33" points="2091.9764,4903.0871,2095.9764,4913.0871,2099.9764,4903.0871,2095.9764,4907.0871" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4966.9391" y2="5001.9391"/><polygon fill="#656F33" points="2091.9764,4991.9391,2095.9764,5001.9391,2099.9764,4991.9391,2095.9764,4995.9391" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5091.4021" y2="5117.8651"/><polygon fill="#656F33" points="2091.9764,5107.8651,2095.9764,5117.8651,2099.9764,5107.8651,2095.9764,5111.8651" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2168.6394" x2="2180.6394" y1="5079.4021" y2="5079.4021"/><polygon fill="#656F33" points="2176.6394,5126.3281,2180.6394,5136.3281,2184.6394,5126.3281,2180.6394,5130.3281" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2180.6394" x2="2180.6394" y1="5079.4021" y2="5193.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2180.6394" x2="2107.9764" y1="5193.2541" y2="5193.2541"/><polygon fill="#656F33" points="2117.9764,5189.2541,2107.9764,5193.2541,2117.9764,5197.2541,2113.9764,5193.2541" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5154.7911" y2="5181.2541"/><polygon fill="#656F33" points="2091.9764,5171.2541,2095.9764,5181.2541,2099.9764,5171.2541,2095.9764,5175.2541" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5038.8651" y2="5067.4021"/><polygon fill="#656F33" points="2091.9764,5057.4021,2095.9764,5067.4021,2099.9764,5057.4021,2095.9764,5061.4021" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4567.531" y2="4608.457"/><polygon fill="#656F33" points="2091.9764,4598.457,2095.9764,4608.457,2099.9764,4598.457,2095.9764,4602.457" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5205.2541" y2="5215.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2251.9627" y1="5215.2541" y2="5215.2541"/><polygon fill="#656F33" points="2247.9627,4899.6241,2251.9627,4889.6241,2255.9627,4899.6241,2251.9627,4895.6241" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2251.9627" x2="2251.9627" y1="4555.531" y2="5215.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2251.9627" x2="2180.6887" y1="4555.531" y2="4555.531"/><polygon fill="#656F33" points="2190.6887,4551.531,2180.6887,4555.531,2190.6887,4559.531,2186.6887,4555.531" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2011.2641" x2="1939.9901" y1="4555.531" y2="4555.531"/><polygon fill="#656F33" points="1935.9901,4885.6241,1939.9901,4895.6241,1943.9901,4885.6241,1939.9901,4889.6241" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1939.9901" x2="1939.9901" y1="4555.531" y2="5227.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="1939.9901" x2="2263.9627" y1="5227.2541" y2="5227.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2263.9627" x2="2263.9627" y1="4418.679" y2="5227.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2263.9627" x2="2228.8278" y1="4418.679" y2="4418.679"/><polygon fill="#656F33" points="2238.8278,4414.679,2228.8278,4418.679,2238.8278,4422.679,2234.8278,4418.679" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4508.531" y2="4543.531"/><polygon fill="#656F33" points="2091.9764,4533.531,2095.9764,4543.531,2099.9764,4533.531,2095.9764,4537.531" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4430.679" y2="4471.605"/><polygon fill="#656F33" points="2091.9764,4461.605,2095.9764,4471.605,2099.9764,4461.605,2095.9764,4465.605" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1963.125" x2="1915.9901" y1="4418.679" y2="4418.679"/><polygon fill="#656F33" points="1911.9901,4829.1981,1915.9901,4839.1981,1919.9901,4829.1981,1915.9901,4833.1981" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1915.9901" x2="1915.9901" y1="4418.679" y2="5249.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="1915.9901" x2="2095.9764" y1="5249.2541" y2="5249.2541"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5249.2541" y2="5269.2541"/><polygon fill="#656F33" points="2091.9764,5259.2541,2095.9764,5269.2541,2099.9764,5259.2541,2095.9764,5263.2541" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4372.864" y2="4406.679"/><polygon fill="#656F33" points="2091.9764,4396.679,2095.9764,4406.679,2099.9764,4396.679,2095.9764,4400.679" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4349.049" y2="4394.79"/><polygon fill="#656F33" points="2683.4845,4384.79,2687.4845,4394.79,2691.4845,4384.79,2687.4845,4388.79" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4448.642" y2="4495.568"/><polygon fill="#656F33" points="2683.4845,4485.568,2687.4845,4495.568,2691.4845,4485.568,2687.4845,4489.568" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4532.494" y2="4567.494"/><polygon fill="#656F33" points="2683.4845,4557.494,2687.4845,4567.494,2691.4845,4557.494,2687.4845,4561.494" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4758.1981" y2="4793.1981"/><polygon fill="#656F33" points="2683.4845,4783.1981,2687.4845,4793.1981,2691.4845,4783.1981,2687.4845,4787.1981" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4847.0501" y2="4882.0501"/><polygon fill="#656F33" points="2683.4845,4872.0501,2687.4845,4882.0501,2691.4845,4872.0501,2687.4845,4876.0501" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4977.9761" y2="5004.4391"/><polygon fill="#656F33" points="2683.4845,4994.4391,2687.4845,5004.4391,2691.4845,4994.4391,2687.4845,4998.4391" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2760.1475" x2="2772.1475" y1="4965.9761" y2="4965.9761"/><polygon fill="#656F33" points="2768.1475,5012.9021,2772.1475,5022.9021,2776.1475,5012.9021,2772.1475,5016.9021" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2772.1475" x2="2772.1475" y1="4965.9761" y2="5073.3651"/><line style="stroke:#656F33;stroke-width:1;" x1="2772.1475" x2="2699.4845" y1="5073.3651" y2="5073.3651"/><polygon fill="#656F33" points="2709.4845,5069.3651,2699.4845,5073.3651,2709.4845,5077.3651,2705.4845,5073.3651" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="5041.3651" y2="5061.3651"/><polygon fill="#656F33" points="2683.4845,5051.3651,2687.4845,5061.3651,2691.4845,5051.3651,2687.4845,5055.3651" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4918.9761" y2="4953.9761"/><polygon fill="#656F33" points="2683.4845,4943.9761,2687.4845,4953.9761,2691.4845,4943.9761,2687.4845,4947.9761" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4680.346" y2="4721.2721"/><polygon fill="#656F33" points="2683.4845,4711.2721,2687.4845,4721.2721,2691.4845,4711.2721,2687.4845,4715.2721" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="5085.3651" y2="5097.3651"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2837.7054" y1="5097.3651" y2="5097.3651"/><polygon fill="#656F33" points="2833.7054,4896.0871,2837.7054,4886.0871,2841.7054,4896.0871,2837.7054,4892.0871" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2837.7054" x2="2837.7054" y1="4668.346" y2="5097.3651"/><line style="stroke:#656F33;stroke-width:1;" x1="2837.7054" x2="2782.1127" y1="4668.346" y2="4668.346"/><polygon fill="#656F33" points="2792.1127,4664.346,2782.1127,4668.346,2792.1127,4672.346,2788.1127,4668.346" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2592.8563" x2="2537.2636" y1="4668.346" y2="4668.346"/><polygon fill="#656F33" points="2533.2636,4882.0871,2537.2636,4892.0871,2541.2636,4882.0871,2537.2636,4886.0871" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2537.2636" x2="2537.2636" y1="4668.346" y2="5109.3651"/><line style="stroke:#656F33;stroke-width:1;" x1="2537.2636" x2="2687.4845" y1="5109.3651" y2="5109.3651"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="5109.3651" y2="5144.3651"/><polygon fill="#656F33" points="2683.4845,5134.3651,2687.4845,5144.3651,2691.4845,5134.3651,2687.4845,5138.3651" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4621.346" y2="4656.346"/><polygon fill="#656F33" points="2683.4845,4646.346,2687.4845,4656.346,2691.4845,4646.346,2687.4845,4650.346" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="4166.697" y2="4186.697"/><polygon fill="#656F33" points="2091.9764,4176.697,2095.9764,4186.697,2099.9764,4176.697,2095.9764,4180.697" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="4166.697" y2="4312.123"/><polygon fill="#656F33" points="2683.4845,4302.123,2687.4845,4312.123,2691.4845,4302.123,2687.4845,4306.123" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2095.9764" x2="2095.9764" y1="5306.1801" y2="5326.1801"/><polygon fill="#656F33" points="2091.9764,5316.1801,2095.9764,5326.1801,2099.9764,5316.1801,2095.9764,5320.1801" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2687.4845" x2="2687.4845" y1="5181.2911" y2="5326.1801"/><polygon fill="#656F33" points="2683.4845,5316.1801,2687.4845,5326.1801,2691.4845,5316.1801,2687.4845,5320.1801" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="4120.308" y2="4160.697"/><polygon fill="#656F33" points="2516.4529,4150.697,2520.4529,4160.697,2524.4529,4150.697,2520.4529,4154.697" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5332.1801" y2="5354.1061"/><polygon fill="#656F33" points="2516.4529,5344.1061,2520.4529,5354.1061,2524.4529,5344.1061,2520.4529,5348.1061" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5391.0321" y2="5424.8841"/><polygon fill="#656F33" points="2516.4529,5414.8841,2520.4529,5424.8841,2524.4529,5414.8841,2520.4529,5418.8841" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5461.8101" y2="5493.7361"/><polygon fill="#656F33" points="2516.4529,5483.7361,2520.4529,5493.7361,2524.4529,5483.7361,2520.4529,5487.7361" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="5770.7621" y2="5790.7621"/><polygon fill="#656F33" points="2366.0984,5780.7621,2370.0984,5790.7621,2374.0984,5780.7621,2370.0984,5784.7621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="5827.6881" y2="5858.7621"/><polygon fill="#656F33" points="2366.0984,5848.7621,2370.0984,5858.7621,2374.0984,5848.7621,2370.0984,5852.7621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="5956.6141" y2="5983.0771"/><polygon fill="#656F33" points="2366.0984,5973.0771,2370.0984,5983.0771,2374.0984,5973.0771,2370.0984,5977.0771" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2442.7614" x2="2454.7614" y1="5944.6141" y2="5944.6141"/><polygon fill="#656F33" points="2450.7614,5991.5401,2454.7614,6001.5401,2458.7614,5991.5401,2454.7614,5995.5401" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2454.7614" x2="2454.7614" y1="5944.6141" y2="6052.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2454.7614" x2="2382.0984" y1="6052.0031" y2="6052.0031"/><polygon fill="#656F33" points="2392.0984,6048.0031,2382.0984,6052.0031,2392.0984,6056.0031,2388.0984,6052.0031" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="6020.0031" y2="6040.0031"/><polygon fill="#656F33" points="2366.0984,6030.0031,2370.0984,6040.0031,2374.0984,6030.0031,2370.0984,6034.0031" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="5912.6141" y2="5932.6141"/><polygon fill="#656F33" points="2366.0984,5922.6141,2370.0984,5932.6141,2374.0984,5922.6141,2370.0984,5926.6141" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2670.8075" x2="2670.8075" y1="5770.7621" y2="5790.7621"/><polygon fill="#656F33" points="2666.8075,5780.7621,2670.8075,5790.7621,2674.8075,5780.7621,2670.8075,5784.7621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2435.2936" x2="2370.0984" y1="5694.9101" y2="5694.9101"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="5694.9101" y2="5716.9101"/><polygon fill="#656F33" points="2366.0984,5706.9101,2370.0984,5716.9101,2374.0984,5706.9101,2370.0984,5710.9101" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2605.6122" x2="2670.8075" y1="5694.9101" y2="5694.9101"/><line style="stroke:#656F33;stroke-width:1;" x1="2670.8075" x2="2670.8075" y1="5694.9101" y2="5716.9101"/><polygon fill="#656F33" points="2666.8075,5706.9101,2670.8075,5716.9101,2674.8075,5706.9101,2670.8075,5710.9101" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2370.0984" y1="6064.0031" y2="6082.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2370.0984" x2="2508.4529" y1="6082.0031" y2="6082.0031"/><polygon fill="#656F33" points="2498.4529,6078.0031,2508.4529,6082.0031,2498.4529,6086.0031,2502.4529,6082.0031" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2670.8075" x2="2670.8075" y1="5827.6881" y2="6082.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2670.8075" x2="2532.4529" y1="6082.0031" y2="6082.0031"/><polygon fill="#656F33" points="2542.4529,6078.0031,2532.4529,6082.0031,2542.4529,6086.0031,2538.4529,6082.0031" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5662.9101" y2="5682.9101"/><polygon fill="#656F33" points="2516.4529,5672.9101,2520.4529,5682.9101,2524.4529,5672.9101,2520.4529,5676.9101" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5574.6621" y2="5609.0581"/><polygon fill="#656F33" points="2516.4529,5599.0581,2520.4529,5609.0581,2524.4529,5599.0581,2520.4529,5603.0581" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="6094.0031" y2="6104.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2835.4858" y1="6104.0031" y2="6104.0031"/><polygon fill="#656F33" points="2831.4858,5838.7621,2835.4858,5828.7621,2839.4858,5838.7621,2835.4858,5834.7621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2835.4858" x2="2835.4858" y1="5562.6621" y2="6104.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2835.4858" x2="2674.3854" y1="5562.6621" y2="5562.6621"/><polygon fill="#656F33" points="2684.3854,5558.6621,2674.3854,5562.6621,2684.3854,5566.6621,2680.3854,5562.6621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2366.5205" x2="2210.0676" y1="5562.6621" y2="5562.6621"/><polygon fill="#656F33" points="2206.0676,5824.7621,2210.0676,5834.7621,2214.0676,5824.7621,2210.0676,5828.7621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2210.0676" x2="2210.0676" y1="5562.6621" y2="6116.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2210.0676" x2="2520.4529" y1="6116.0031" y2="6116.0031"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="6116.0031" y2="6136.0031"/><polygon fill="#656F33" points="2516.4529,6126.0031,2520.4529,6136.0031,2524.4529,6126.0031,2520.4529,6130.0031" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="5530.6621" y2="5550.6621"/><polygon fill="#656F33" points="2516.4529,5540.6621,2520.4529,5550.6621,2524.4529,5540.6621,2520.4529,5544.6621" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="6172.9291" y2="6192.9291"/><polygon fill="#656F33" points="2516.4529,6182.9291,2520.4529,6192.9291,2524.4529,6182.9291,2520.4529,6186.9291" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="6229.8551" y2="6249.8551"/><polygon fill="#656F33" points="2516.4529,6239.8551,2520.4529,6249.8551,2524.4529,6239.8551,2520.4529,6243.8551" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1291.598" y2="1326.598"/><polygon fill="#656F33" points="3386.1068,1316.598,3390.1068,1326.598,3394.1068,1316.598,3390.1068,1320.598" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1363.524" y2="1405.976"/><polygon fill="#656F33" points="3386.1068,1395.976,3390.1068,1405.976,3394.1068,1395.976,3390.1068,1399.976" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1459.828" y2="1544.069"/><polygon fill="#656F33" points="3386.1068,1534.069,3390.1068,1544.069,3394.1068,1534.069,3390.1068,1538.069" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1597.921" y2="1682.162"/><polygon fill="#656F33" points="3386.1068,1672.162,3390.1068,1682.162,3394.1068,1672.162,3390.1068,1676.162" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1736.014" y2="1782.94"/><polygon fill="#656F33" points="3386.1068,1772.94,3390.1068,1782.94,3394.1068,1772.94,3390.1068,1776.94" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1836.792" y2="1869.792"/><polygon fill="#656F33" points="3386.1068,1859.792,3390.1068,1869.792,3394.1068,1859.792,3390.1068,1863.792" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1220.276" y2="1254.672"/><polygon fill="#656F33" points="3386.1068,1244.672,3390.1068,1254.672,3394.1068,1244.672,3390.1068,1248.672" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1906.718" y2="1918.718"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3895.6744" y1="1918.718" y2="1918.718"/><polygon fill="#656F33" points="3891.6744,1568.995,3895.6744,1558.995,3899.6744,1568.995,3895.6744,1564.995" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3895.6744" x2="3895.6744" y1="1208.276" y2="1918.718"/><line style="stroke:#656F33;stroke-width:1;" x1="3895.6744" x2="3457.1213" y1="1208.276" y2="1208.276"/><polygon fill="#656F33" points="3467.1213,1204.276,3457.1213,1208.276,3467.1213,1212.276,3463.1213,1208.276" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3323.0924" x2="3201.7831" y1="1208.276" y2="1208.276"/><polygon fill="#656F33" points="3197.7831,1554.995,3201.7831,1564.995,3205.7831,1554.995,3201.7831,1558.995" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3201.7831" x2="3201.7831" y1="1208.276" y2="1930.718"/><line style="stroke:#656F33;stroke-width:1;" x1="3201.7831" x2="3390.1068" y1="1930.718" y2="1930.718"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1930.718" y2="1964.44"/><polygon fill="#656F33" points="3386.1068,1954.44,3390.1068,1964.44,3394.1068,1954.44,3390.1068,1958.44" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2437.318" y2="2463.355"/><polygon fill="#656F33" points="3371.7056,2453.355,3375.7056,2463.355,3379.7056,2453.355,3375.7056,2457.355" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2500.281" y2="2535.281"/><polygon fill="#656F33" points="3371.7056,2525.281,3375.7056,2535.281,3379.7056,2525.281,3375.7056,2529.281" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2589.133" y2="2624.133"/><polygon fill="#656F33" points="3371.7056,2614.133,3375.7056,2624.133,3379.7056,2614.133,3375.7056,2618.133" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2694.911" y2="2729.911"/><polygon fill="#656F33" points="3371.7056,2719.911,3375.7056,2729.911,3379.7056,2719.911,3375.7056,2723.911" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2359.959" y2="2400.392"/><polygon fill="#656F33" points="3371.7056,2390.392,3375.7056,2400.392,3379.7056,2390.392,3375.7056,2394.392" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2766.837" y2="2778.837"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3889.2294" y1="2778.837" y2="2778.837"/><polygon fill="#656F33" points="3885.2294,2568.67,3889.2294,2558.67,3893.2294,2568.67,3889.2294,2564.67" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3889.2294" x2="3889.2294" y1="2347.959" y2="2778.837"/><line style="stroke:#656F33;stroke-width:1;" x1="3889.2294" x2="3442.7201" y1="2347.959" y2="2347.959"/><polygon fill="#656F33" points="3452.7201,2343.959,3442.7201,2347.959,3452.7201,2351.959,3448.7201,2347.959" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3308.6912" x2="3197.486" y1="2347.959" y2="2347.959"/><polygon fill="#656F33" points="3193.486,2554.67,3197.486,2564.67,3201.486,2554.67,3197.486,2558.67" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3197.486" x2="3197.486" y1="2347.959" y2="2790.837"/><line style="stroke:#656F33;stroke-width:1;" x1="3197.486" x2="3375.7056" y1="2790.837" y2="2790.837"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2790.837" y2="2819.374"/><polygon fill="#656F33" points="3371.7056,2809.374,3375.7056,2819.374,3379.7056,2809.374,3375.7056,2813.374" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3297.048" y2="3330.196"/><polygon fill="#656F33" points="3354.617,3320.196,3358.617,3330.196,3362.617,3320.196,3358.617,3324.196" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3541.289" y2="3596.678"/><polygon fill="#656F33" points="3354.617,3586.678,3358.617,3596.678,3362.617,3586.678,3358.617,3590.678" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3650.53" y2="3681.141"/><polygon fill="#656F33" points="3354.617,3671.141,3358.617,3681.141,3362.617,3671.141,3358.617,3675.141" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3443.048" y2="3504.363"/><polygon fill="#656F33" points="3354.617,3494.363,3358.617,3504.363,3362.617,3494.363,3358.617,3498.363" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3718.067" y2="3730.067"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3743.1317" y1="3730.067" y2="3730.067"/><polygon fill="#656F33" points="3739.1317,3592.752,3743.1317,3582.752,3747.1317,3592.752,3743.1317,3588.752" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3743.1317" x2="3743.1317" y1="3431.048" y2="3730.067"/><line style="stroke:#656F33;stroke-width:1;" x1="3743.1317" x2="3458.5458" y1="3431.048" y2="3431.048"/><polygon fill="#656F33" points="3468.5458,3427.048,3458.5458,3431.048,3468.5458,3435.048,3464.5458,3431.048" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3258.6881" x2="3219.9158" y1="3431.048" y2="3431.048"/><polygon fill="#656F33" points="3215.9158,3578.752,3219.9158,3588.752,3223.9158,3578.752,3219.9158,3582.752" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3219.9158" x2="3219.9158" y1="3431.048" y2="3742.067"/><line style="stroke:#656F33;stroke-width:1;" x1="3219.9158" x2="3358.617" y1="3742.067" y2="3742.067"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3742.067" y2="3777.067"/><polygon fill="#656F33" points="3354.617,3767.067,3358.617,3777.067,3362.617,3767.067,3358.617,3771.067" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3384.048" y2="3419.048"/><polygon fill="#656F33" points="3354.617,3409.048,3358.617,3419.048,3362.617,3409.048,3358.617,3413.048" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3847.845" y2="3882.845"/><polygon fill="#656F33" points="3354.617,3872.845,3358.617,3882.845,3362.617,3872.845,3358.617,3876.845" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3219.578" y2="3260.122"/><polygon fill="#656F33" points="3354.617,3250.122,3358.617,3260.122,3362.617,3250.122,3358.617,3254.122" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3919.771" y2="3931.771"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3755.1317" y1="3931.771" y2="3931.771"/><polygon fill="#656F33" points="3751.1317,3580.752,3755.1317,3570.752,3759.1317,3580.752,3755.1317,3576.752" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3755.1317" x2="3755.1317" y1="3207.578" y2="3931.771"/><line style="stroke:#656F33;stroke-width:1;" x1="3755.1317" x2="3431.7349" y1="3207.578" y2="3207.578"/><polygon fill="#656F33" points="3441.7349,3203.578,3431.7349,3207.578,3441.7349,3211.578,3437.7349,3207.578" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3285.499" x2="3195.9158" y1="3207.578" y2="3207.578"/><polygon fill="#656F33" points="3191.9158,3566.752,3195.9158,3576.752,3199.9158,3566.752,3195.9158,3570.752" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3195.9158" x2="3195.9158" y1="3207.578" y2="3943.771"/><line style="stroke:#656F33;stroke-width:1;" x1="3195.9158" x2="3358.617" y1="3943.771" y2="3943.771"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3943.771" y2="3976.919"/><polygon fill="#656F33" points="3354.617,3966.919,3358.617,3976.919,3362.617,3966.919,3358.617,3970.919" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1443.032" y2="1478.032"/><polygon fill="#656F33" points="4236.0138,1468.032,4240.0138,1478.032,4244.0138,1468.032,4240.0138,1472.032" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1514.958" y2="1549.958"/><polygon fill="#656F33" points="4236.0138,1539.958,4240.0138,1549.958,4244.0138,1539.958,4240.0138,1543.958" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1603.81" y2="1638.81"/><polygon fill="#656F33" points="4236.0138,1628.81,4240.0138,1638.81,4244.0138,1628.81,4240.0138,1632.81" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1734.736" y2="1761.199"/><polygon fill="#656F33" points="4236.0138,1751.199,4240.0138,1761.199,4244.0138,1751.199,4240.0138,1755.199" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4312.6768" x2="4324.6768" y1="1722.736" y2="1722.736"/><polygon fill="#656F33" points="4320.6768,1769.662,4324.6768,1779.662,4328.6768,1769.662,4324.6768,1773.662" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4324.6768" x2="4324.6768" y1="1722.736" y2="1836.588"/><line style="stroke:#656F33;stroke-width:1;" x1="4324.6768" x2="4252.0138" y1="1836.588" y2="1836.588"/><polygon fill="#656F33" points="4262.0138,1832.588,4252.0138,1836.588,4262.0138,1840.588,4258.0138,1836.588" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1798.125" y2="1824.588"/><polygon fill="#656F33" points="4236.0138,1814.588,4240.0138,1824.588,4244.0138,1814.588,4240.0138,1818.588" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1675.736" y2="1710.736"/><polygon fill="#656F33" points="4236.0138,1700.736,4240.0138,1710.736,4244.0138,1700.736,4240.0138,1704.736" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1369.654" y2="1406.106"/><polygon fill="#656F33" points="4236.0138,1396.106,4240.0138,1406.106,4244.0138,1396.106,4240.0138,1400.106" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1848.588" y2="1858.588"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4384.8104" y1="1858.588" y2="1858.588"/><polygon fill="#656F33" points="4380.8104,1616.884,4384.8104,1606.884,4388.8104,1616.884,4384.8104,1612.884" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4384.8104" x2="4384.8104" y1="1357.654" y2="1858.588"/><line style="stroke:#656F33;stroke-width:1;" x1="4384.8104" x2="4308.9977" y1="1357.654" y2="1357.654"/><polygon fill="#656F33" points="4318.9977,1353.654,4308.9977,1357.654,4318.9977,1361.654,4314.9977,1357.654" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4171.0299" x2="4095.2171" y1="1357.654" y2="1357.654"/><polygon fill="#656F33" points="4091.2171,1602.884,4095.2171,1612.884,4099.2171,1602.884,4095.2171,1606.884" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4095.2171" x2="4095.2171" y1="1357.654" y2="1870.588"/><line style="stroke:#656F33;stroke-width:1;" x1="4095.2171" x2="4240.0138" y1="1870.588" y2="1870.588"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1870.588" y2="1905.588"/><polygon fill="#656F33" points="4236.0138,1895.588,4240.0138,1905.588,4244.0138,1895.588,4240.0138,1899.588" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1310.654" y2="1345.654"/><polygon fill="#656F33" points="4236.0138,1335.654,4240.0138,1345.654,4244.0138,1335.654,4240.0138,1339.654" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1942.514" y2="2033.292"/><polygon fill="#656F33" points="4236.0138,2023.292,4240.0138,2033.292,4244.0138,2023.292,4240.0138,2027.292" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2431.281" y2="2457.318"/><polygon fill="#656F33" points="4189.1272,2447.318,4193.1272,2457.318,4197.1272,2447.318,4193.1272,2451.318" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2494.244" y2="2529.244"/><polygon fill="#656F33" points="4189.1272,2519.244,4193.1272,2529.244,4197.1272,2519.244,4193.1272,2523.244" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2600.022" y2="2635.022"/><polygon fill="#656F33" points="4189.1272,2625.022,4193.1272,2635.022,4197.1272,2625.022,4193.1272,2629.022" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2730.948" y2="2757.411"/><polygon fill="#656F33" points="4189.1272,2747.411,4193.1272,2757.411,4197.1272,2747.411,4193.1272,2751.411" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4265.7902" x2="4277.7902" y1="2718.948" y2="2718.948"/><polygon fill="#656F33" points="4273.7902,2765.874,4277.7902,2775.874,4281.7902,2765.874,4277.7902,2769.874" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4277.7902" x2="4277.7902" y1="2718.948" y2="2826.337"/><line style="stroke:#656F33;stroke-width:1;" x1="4277.7902" x2="4205.1272" y1="2826.337" y2="2826.337"/><polygon fill="#656F33" points="4215.1272,2822.337,4205.1272,2826.337,4215.1272,2830.337,4211.1272,2826.337" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2794.337" y2="2814.337"/><polygon fill="#656F33" points="4189.1272,2804.337,4193.1272,2814.337,4197.1272,2804.337,4193.1272,2808.337" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2671.948" y2="2706.948"/><polygon fill="#656F33" points="4189.1272,2696.948,4193.1272,2706.948,4197.1272,2696.948,4193.1272,2700.948" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2353.922" y2="2394.355"/><polygon fill="#656F33" points="4189.1272,2384.355,4193.1272,2394.355,4197.1272,2384.355,4193.1272,2388.355" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2838.337" y2="2850.337"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4297.4823" y1="2850.337" y2="2850.337"/><polygon fill="#656F33" points="4293.4823,2604.633,4297.4823,2594.633,4301.4823,2604.633,4297.4823,2600.633" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4297.4823" x2="4297.4823" y1="2341.922" y2="2850.337"/><line style="stroke:#656F33;stroke-width:1;" x1="4297.4823" x2="4262.1111" y1="2341.922" y2="2341.922"/><polygon fill="#656F33" points="4272.1111,2337.922,4262.1111,2341.922,4272.1111,2345.922,4268.1111,2341.922" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4124.1433" x2="4088.7721" y1="2341.922" y2="2341.922"/><polygon fill="#656F33" points="4084.7721,2590.633,4088.7721,2600.633,4092.7721,2590.633,4088.7721,2594.633" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4088.7721" x2="4088.7721" y1="2341.922" y2="2862.337"/><line style="stroke:#656F33;stroke-width:1;" x1="4088.7721" x2="4193.1272" y1="2862.337" y2="2862.337"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2862.337" y2="2882.337"/><polygon fill="#656F33" points="4189.1272,2872.337,4193.1272,2882.337,4197.1272,2872.337,4193.1272,2876.337" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2309.922" y2="2329.922"/><polygon fill="#656F33" points="4189.1272,2319.922,4193.1272,2329.922,4197.1272,2319.922,4193.1272,2323.922" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2919.263" y2="2939.263"/><polygon fill="#656F33" points="4189.1272,2929.263,4193.1272,2939.263,4197.1272,2929.263,4193.1272,2933.263" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3490.826" y2="3525.826"/><polygon fill="#656F33" points="4096.7908,3515.826,4100.7908,3525.826,4104.7908,3515.826,4100.7908,3519.826" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3562.752" y2="3597.752"/><polygon fill="#656F33" points="4096.7908,3587.752,4100.7908,3597.752,4104.7908,3587.752,4100.7908,3591.752" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3412.974" y2="3453.9"/><polygon fill="#656F33" points="4096.7908,3443.9,4100.7908,3453.9,4104.7908,3443.9,4100.7908,3447.9" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3634.678" y2="3646.678"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4222.9072" y1="3646.678" y2="3646.678"/><polygon fill="#656F33" points="4218.9072,3533.826,4222.9072,3523.826,4226.9072,3533.826,4222.9072,3529.826" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4222.9072" x2="4222.9072" y1="3400.974" y2="3646.678"/><line style="stroke:#656F33;stroke-width:1;" x1="4222.9072" x2="4187.4223" y1="3400.974" y2="3400.974"/><polygon fill="#656F33" points="4197.4223,3396.974,4187.4223,3400.974,4197.4223,3404.974,4193.4223,3400.974" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4014.1593" x2="3978.6744" y1="3400.974" y2="3400.974"/><polygon fill="#656F33" points="3974.6744,3519.826,3978.6744,3529.826,3982.6744,3519.826,3978.6744,3523.826" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3978.6744" x2="3978.6744" y1="3400.974" y2="3658.678"/><line style="stroke:#656F33;stroke-width:1;" x1="3978.6744" x2="4100.7908" y1="3658.678" y2="3658.678"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3658.678" y2="3689.289"/><polygon fill="#656F33" points="4096.7908,3679.289,4100.7908,3689.289,4104.7908,3679.289,4100.7908,3683.289" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3353.974" y2="3388.974"/><polygon fill="#656F33" points="4096.7908,3378.974,4100.7908,3388.974,4104.7908,3378.974,4100.7908,3382.974" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3819.067" y2="3845.53"/><polygon fill="#656F33" points="4096.7908,3835.53,4100.7908,3845.53,4104.7908,3835.53,4100.7908,3839.53" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4173.4538" x2="4185.4538" y1="3807.067" y2="3807.067"/><polygon fill="#656F33" points="4181.4538,3853.993,4185.4538,3863.993,4189.4538,3853.993,4185.4538,3857.993" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4185.4538" x2="4185.4538" y1="3807.067" y2="3920.919"/><line style="stroke:#656F33;stroke-width:1;" x1="4185.4538" x2="4112.7908" y1="3920.919" y2="3920.919"/><polygon fill="#656F33" points="4122.7908,3916.919,4112.7908,3920.919,4122.7908,3924.919,4118.7908,3920.919" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3882.456" y2="3908.919"/><polygon fill="#656F33" points="4096.7908,3898.919,4100.7908,3908.919,4104.7908,3898.919,4100.7908,3902.919" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3760.067" y2="3795.067"/><polygon fill="#656F33" points="4096.7908,3785.067,4100.7908,3795.067,4104.7908,3785.067,4100.7908,3789.067" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3277.974" y2="3317.048"/><polygon fill="#656F33" points="4096.7908,3307.048,4100.7908,3317.048,4104.7908,3307.048,4100.7908,3311.048" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3932.919" y2="3944.919"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4234.9072" y1="3944.919" y2="3944.919"/><polygon fill="#656F33" points="4230.9072,3616.715,4234.9072,3606.715,4238.9072,3616.715,4234.9072,3612.715" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4234.9072" x2="4234.9072" y1="3265.974" y2="3944.919"/><line style="stroke:#656F33;stroke-width:1;" x1="4234.9072" x2="4169.7747" y1="3265.974" y2="3265.974"/><polygon fill="#656F33" points="4179.7747,3261.974,4169.7747,3265.974,4179.7747,3269.974,4175.7747,3265.974" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4031.8069" x2="3960.6744" y1="3265.974" y2="3265.974"/><polygon fill="#656F33" points="3956.6744,3602.715,3960.6744,3612.715,3964.6744,3602.715,3960.6744,3606.715" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3960.6744" x2="3960.6744" y1="3265.974" y2="3956.919"/><line style="stroke:#656F33;stroke-width:1;" x1="3960.6744" x2="4100.7908" y1="3956.919" y2="3956.919"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3956.919" y2="3990.067"/><polygon fill="#656F33" points="4096.7908,3980.067,4100.7908,3990.067,4104.7908,3980.067,4100.7908,3984.067" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3219.356" y2="3253.974"/><polygon fill="#656F33" points="4096.7908,3243.974,4100.7908,3253.974,4104.7908,3243.974,4100.7908,3247.974" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="4026.993" y2="4046.993"/><polygon fill="#656F33" points="4096.7908,4036.993,4100.7908,4046.993,4104.7908,4036.993,4100.7908,4040.993" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="727.794" y2="732.794"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="1017.4782" y1="732.794" y2="732.794"/><line style="stroke:#656F33;stroke-width:1;" x1="1017.4782" x2="1017.4782" y1="732.794" y2="747.794"/><polygon fill="#656F33" points="1013.4782,737.794,1017.4782,747.794,1021.4782,737.794,1017.4782,741.794" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1017.4782" x2="1017.4782" y1="1019.498" y2="1024.498"/><line style="stroke:#656F33;stroke-width:1;" x1="1017.4782" x2="2520.4529" y1="1024.498" y2="1024.498"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="1024.498" y2="1039.498"/><polygon fill="#656F33" points="2516.4529,1029.498,2520.4529,1039.498,2524.4529,1029.498,2520.4529,1033.498" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2407.1648" x2="2407.1648" y1="1176.276" y2="1180.276"/><line style="stroke:#656F33;stroke-width:1;" x1="2407.1648" x2="3390.1068" y1="1180.276" y2="1180.276"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="1180.276" y2="1196.276"/><polygon fill="#656F33" points="3386.1068,1186.276,3390.1068,1196.276,3394.1068,1186.276,3390.1068,1190.276" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3097.529" x2="3097.529" y1="1176.276" y2="1180.276"/><line style="stroke:#656F33;stroke-width:1;" x1="3097.529" x2="4240.0138" y1="1180.276" y2="1180.276"/><line style="stroke:#656F33;stroke-width:1;" x1="4240.0138" x2="4240.0138" y1="1180.276" y2="1273.728"/><polygon fill="#656F33" points="4236.0138,1263.728,4240.0138,1273.728,4244.0138,1263.728,4240.0138,1267.728" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="1904.6211" x2="1904.6211" y1="1661.31" y2="2019.292"/><line style="stroke:#656F33;stroke-width:1;" x1="1904.6211" x2="3939.6744" y1="2019.292" y2="2019.292"/><line style="stroke:#656F33;stroke-width:1;" x1="3939.6744" x2="3939.6744" y1="2019.292" y2="2033.292"/><polygon fill="#656F33" points="3935.6744,2023.292,3939.6744,2033.292,3943.6744,2023.292,3939.6744,2027.292" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3390.1068" y1="2001.366" y2="2019.292"/><line style="stroke:#656F33;stroke-width:1;" x1="3390.1068" x2="3951.6744" y1="2019.292" y2="2019.292"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="2019.292" y2="2033.292"/><polygon fill="#656F33" points="3947.6744,2023.292,3951.6744,2033.292,3955.6744,2023.292,3951.6744,2027.292" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="2039.292" y2="2044.292"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="2520.4529" y1="2044.292" y2="2044.292"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="2044.292" y2="2059.292"/><polygon fill="#656F33" points="2516.4529,2049.292,2520.4529,2059.292,2524.4529,2049.292,2520.4529,2053.292" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2392.7636" x2="2392.7636" y1="2252.996" y2="2256.996"/><line style="stroke:#656F33;stroke-width:1;" x1="2392.7636" x2="3375.7056" y1="2256.996" y2="2256.996"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2256.996" y2="2335.959"/><polygon fill="#656F33" points="3371.7056,2325.959,3375.7056,2335.959,3379.7056,2325.959,3375.7056,2329.959" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3050.6424" x2="3050.6424" y1="2252.996" y2="2256.996"/><line style="stroke:#656F33;stroke-width:1;" x1="3050.6424" x2="4193.1272" y1="2256.996" y2="2256.996"/><line style="stroke:#656F33;stroke-width:1;" x1="4193.1272" x2="4193.1272" y1="2256.996" y2="2272.996"/><polygon fill="#656F33" points="4189.1272,2262.996,4193.1272,2272.996,4197.1272,2262.996,4193.1272,2266.996" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.2261" x2="2030.2261" y1="2693.485" y2="2925.263"/><line style="stroke:#656F33;stroke-width:1;" x1="2030.2261" x2="3951.6744" y1="2925.263" y2="2925.263"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="2925.263" y2="2939.263"/><polygon fill="#656F33" points="3947.6744,2929.263,3951.6744,2939.263,3955.6744,2929.263,3951.6744,2933.263" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3375.7056" y1="2856.3" y2="2925.263"/><line style="stroke:#656F33;stroke-width:1;" x1="3375.7056" x2="3951.6744" y1="2925.263" y2="2925.263"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="2925.263" y2="2939.263"/><polygon fill="#656F33" points="3947.6744,2929.263,3951.6744,2939.263,3955.6744,2929.263,3951.6744,2933.263" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="2945.263" y2="2950.263"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="2520.4529" y1="2950.263" y2="2950.263"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="2950.263" y2="2965.263"/><polygon fill="#656F33" points="2516.4529,2955.263,2520.4529,2965.263,2524.4529,2955.263,2520.4529,2959.263" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2375.6749" x2="2375.6749" y1="3162.43" y2="3166.43"/><line style="stroke:#656F33;stroke-width:1;" x1="2375.6749" x2="3358.617" y1="3166.43" y2="3166.43"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="3166.43" y2="3195.578"/><polygon fill="#656F33" points="3354.617,3185.578,3358.617,3195.578,3362.617,3185.578,3358.617,3189.578" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2958.306" x2="2958.306" y1="3162.43" y2="3166.43"/><line style="stroke:#656F33;stroke-width:1;" x1="2958.306" x2="4100.7908" y1="3166.43" y2="3166.43"/><line style="stroke:#656F33;stroke-width:1;" x1="4100.7908" x2="4100.7908" y1="3166.43" y2="3182.43"/><polygon fill="#656F33" points="4096.7908,3172.43,4100.7908,3182.43,4104.7908,3172.43,4100.7908,3176.43" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2060.7286" x2="2060.7286" y1="3661.141" y2="4032.993"/><line style="stroke:#656F33;stroke-width:1;" x1="2060.7286" x2="3951.6744" y1="4032.993" y2="4032.993"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="4032.993" y2="4046.993"/><polygon fill="#656F33" points="3947.6744,4036.993,3951.6744,4046.993,3955.6744,4036.993,3951.6744,4040.993" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3358.617" y1="4013.845" y2="4032.993"/><line style="stroke:#656F33;stroke-width:1;" x1="3358.617" x2="3951.6744" y1="4032.993" y2="4032.993"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="4032.993" y2="4046.993"/><polygon fill="#656F33" points="3947.6744,4036.993,3951.6744,4046.993,3955.6744,4036.993,3951.6744,4040.993" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="3951.6744" y1="4052.993" y2="4057.993"/><line style="stroke:#656F33;stroke-width:1;" x1="3951.6744" x2="2520.4529" y1="4057.993" y2="4057.993"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="4057.993" y2="4083.382"/><polygon fill="#656F33" points="2516.4529,4073.382,2520.4529,4083.382,2524.4529,4073.382,2520.4529,4077.382" style="stroke:#656F33;stroke-width:1;"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="2520.4529" y1="6286.7811" y2="6291.7811"/><line style="stroke:#656F33;stroke-width:1;" x1="2520.4529" x2="179.6112" y1="6291.7811" y2="6291.7811"/><line style="stroke:#656F33;stroke-width:1;" x1="179.6112" x2="179.6112" y1="6291.7811" y2="6306.7811"/><polygon fill="#656F33" points="175.6112,6296.7811,179.6112,6306.7811,183.6112,6296.7811,179.6112,6300.7811" style="stroke:#656F33;stroke-width:1;"/><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="28.5837" x="282.5246" y="77.226">Main</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="225.1019" x="1064.5556" y="77.226">BiergartenPipelineOrchestrator::Run()</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="78.2797" x="2439.6082" y="77.226">Orchestrator</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="71.9356" x="3509.8273" y="77.226">LLM Worker</text><text fill="#14180C" font-family="'DM Sans'" font-size="13" lengthAdjust="spacing" textLength="87.3536" x="4115.5656" y="77.226">SQLite Worker</text><?plantuml-src rLhRSkEs6RxNKo2-QAI9h6QJcLp8FOmbouutNjkrdBgTsHaDH48IOX9W0CfUTNpHH-X5-u9vadu_3XGfIxOtIRVEpeubaJ-0__Zz1_8pgP9icGhMw_r-AeMPSrCAjNylv3_mKIv4Bdh5CizQzbQgWXkUirJC-38hZxKgnw1YRxwktInbcOdgrbTVjbhk2hjU23QezcT7lEJiKXOYaqgmd_xvRtQObF9EbYjs9FaSExLQ3--uL0yjMs99gt_9ZHM7PhxCXIfjcvjvqcNuUzSvQCaPQv-gEvx9b2xPFtSOE5UilHAsqsAiRuiqq_D-NnYZpG6ks58NBP5PmTfATrf2fNBMwfygMRABGgZn-8pDCptb6IXvATZls5d6SpxWoIrentJjeDKVB6MMigDJ9jKF8YbfQx-912iGV_nZ9ain-b1eKuw5kPC9LYcD_OoSBqhmGOTPDlxB6UXOefN2DbAh7cwrhmrNbhlV5c89flGzoxdYSv7YVY7CVh7W4E5ESZRbPRAGQjxfaJ2C3W4lGoE8-u5UgbIammN70TaVplHyf4gp-XE3KYR90fAC2twl66wm6srkXO7-i3JTu9Rkt_lxgO5nRDY0pJIj4221SIHOBQ9fCpaJfOGJuTvXbeNbbeaSgewCGCbccPGMD2HBz0lSdkEe_Nscn1s-U2ko50SaPRPgIBhshRZwmYGBWOqvxDBlNorL6vxoy2AwXrOB4jsIvxorMfrfdWhSey-146PShZ9XstjJVD-txaVl1z3jTSYr-YDbPB8WDmqsx_SlZRZX9gyM3pdERDFwYL-FbNGYutEeTTkvPphXpXFQUrdy-h93uqf_fkLvaObqKcs2vQH69-ykeO-r4OhdmWvMGxWIBDP-hnZRcyNh-zFLVkBlL4mzBSzuQRRjQCFbZz_m4bwb5OT-Yl2jMbZ9rt3c4VJ14WwVb9Rb8jU8MC37h8IdoTAocJIsP0N13aMZ9BsHVa5KwfIlEZtsJYUtmoKyHwG4Q47pe3QYX228Mkpo0GkasgSJuEafwAmeSSMM233GKcYIa-VOJAHT1Ymj2aGo1HI2--tuuXoxa8_L_FrpzjD__lN__GyUBhyz78_Obmw_ln-FhjZ9w7nqTNXzUd7-AZXygCVsGuk2-tihp2MXvjP8s0wOzhrgWmf0rsNYGu5FaCPWsJW3ddccTT5dOp9M5RLidy0sSM0Bac6cOThrXOPZCdPfTBfCu1K9qTb0s7FtpixUHOo-Ny0jS1EfZEx0SNEfmBvbMW5W2oJJB_mMQSz1S_2UHY0zh3SaxlsUGLm6HI4MH4uP5L4Iyoaak1A9a7UYaX0ASTTFH5a13ge0yQ4yDZhts1CrxH3haT2CdInHGc0D0YQX1Mo17373SkPgW6NXDR2E0dVYQOZyiSXyyXoJBSHyrU_xI-6-0vY83PE2Pw8inUGNyiBOLHNguPoGpB3Cc1NYED0vd9_msKnIVI0iYfVftGHdp4KtaCZfSb8OCHD0rKHq6OvDK5XDK8o1iQt2ZvqJdmCosnKOJwQhIS3EBiaSCRL-dKLRzAJLNx_vvfl9coupA1zsgED8UE-IjfG9kTpjid29MJk7bEfEPtVUpUZViH62pPRAsMCBTZBdUlHlBfGWSqsM24pRIv9Ebqw7EfECMmBcSg6hVKbGPfrLiPKp1nIsVojM-9dpmWOw3YqLMEwWjzG4fV4aOgZ0mgACcuu1kDQH95H_efWK4hyCRUWYGEb0ALonGiLEfRMjLZa9GX7Oj8NBp00QshqRFH0u7_27RDDvhwZmeIGIrleoTOibIDt61v_jir7OV4YS9pxW4FJXaB0a5JOnid2YVn7FPNHkZqLMe-QcKdljLNx8h9mhdbasDnuLexSgvqH02qVlJzogZcOzH-bwZd9zfhkC57HIsSLvgzSIUSD48XlkPLc-5xooxp0rSfpIOi9L3ya77k42Vb5HN-7ick0PdFM4NePGa_-gKDlOq-MAmUZaz9nTNnsUZm-7b3SFrXZikNa11ZSq4bG5qH9XhVD0KcPKuI-oXNNzJ6MEmw8WGM42Hr9edKtyBMh81jIHm7dG1o6fafDkjcLka-75ktUdrsYmd2hyydLZ5hm9pTasw_gbxMEO8glNUOyI_riDRrqdkcxJkWUlgvvwmrr1DRWQtOok_lxQQYegeWP6t0kp-ZHrbDlUUQS7_BMljIBGImGe8BjMZ4Im29nUStlRZdUzgtUUBCb-pHBf2HvUKZMXNxZj_MzAfmWSWSFDL1NoIPSv5XoAl3nFVVVNm0aOM5bsZquq9jnm7AaBK7JhYWANVsDgqlVOUn9mPuFpfr6CK2jilnNBflxUSwabSlWnsUNJGdtWi8dsqOv1ocSn_wEqjHFy8zLl6FyRtjkGX-n0SxVPCijMhD35CYFrarCw-6DlfgWJLsmgvbAzrWuTFBgCCdfzBRfB9oBsv4-c3hBBp-Z1lOEZuug-saJywieB83_G_lmuFNKJm5sDQfWhKlm57qG8LZF2UilgTWjC7QCTeVXQzqNLc36mPqGEgMWu78CE-SRF8JUJZJifXFWMKF-8ldXh1c0yCHfT7S-oYemah3LdbjfAkx9GR-ZJAifK2-kQmsH1RRFB-OXh_B7CJS9xLPzMInRrF8UZsfLglLP3ajkTsGZhof8Kl3OgiOoSDOMBPk8WebGmIAgLwBHU0hrYHyNzT9QYPNRWZdvz2Qh6tC5MBtNcXjMyxdPww5YKZhItreLtixhEQvdFMLPKVKupGObcTx9fgb_BKiqC-PlEWGEDShgP2AdKNckIQk_mI2hHLBMLOZC_3ltuoYqyrba6KXUbbXAcQyRlcLagSWPwTfXb8dkj2VGhbp-7tuw6to54lc375sTd5pVDNDgEGZZQAIam5Su5jO9gjAftBf_xrgMfuQcWiVz6fT5v5OhOcMYHleETgmnEUIvSEvAWbTDbCzkzLuUMXahnaU-Dcs_Qzbe_dIt3ca25D2VIEFnpY4BBFlVpgpY5sfYSihVxoT80dP1Gw56A3wbSc3cSqKyHm-mshJ7S6EGy1v0LlZN7Kx9kzUrWrm-wijYY6jTqcwxH8mXfTphR8JL8YyDIyM4debxB79P3XuLruGotO8sOlWg99mUuVLpSrn9gOBt9Clh5UDIJMJL0TzmZIB5cP_UeAYpPG6I5mD55kPwRRm7bHbw8T0tPNWxREu1x4xhNuBqjypo-yWZIDnBtjX3qyDg8G7zfhQB7uUSfNXPyv6jNG2oT-rLnjoxp8UR3ZpB2Kadmc_VSacQ4YtHZiVVc4DSfYlIx6DZ4JO-7rI6C7RNLg3ZdY_rupr6Ye2on9tmtrs1XvawXnmalYk2dTHLTtTCyfoU4q6pVdq_Z4pAJL2LhHvQeZFdiZv7353zZVeVI4aY_4COFr7dfHY970sPXxvopJDnHWcnKjpl1ntEx0t12u7cQmDhpy-5D9JLZhYRWKxC2J_O9HmMxe-gPIgcUrQBmxiT6fTG04MUvkeorCcdB1E4AYaJ6zs_nlFefmjUkiA5wv_paDOuHl3Oh46pMizHrsDXuiwdaz6nmIcMeWvfOE6m-fVMX61_KrcncRyKzq2RrngJwOVq8hFvQqcF0sHcpmogDDvrgMnJttxcGgRSVDcHl4GVbwsBzlQ8flMYGLogeQf-rr2vkNM3IPk83YYBh7dk63Hv7PrKHUFN4Wa3GttKwtbqEH4mAoutxU1wJFFakJFAxVBhUh75rAzSttAZdk7vgw4gFgca-4aiq_tJQwTc62G1OsKI_nzZtEc3bUdHuTNHnyphV5NAwUjbBd6C-e-OtF4GEMRl-CcS52DLJ9l_QPNp5jNe_LSAhsLxrNcpih0aI_iPoktSGs_ZgHSqDLewetc3pEAHptb6zPIcfIakDHZPszOLTBCjKtzSPTE_5_XS0?></g></svg> |