mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-04-05 10:09:03 +00:00
1 line
21 KiB
XML
1 line
21 KiB
XML
<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="DESCRIPTION" height="693px" preserveAspectRatio="none" style="width:1203px;height:693px;background:#FFFFFF;" version="1.1" viewBox="0 0 1203 693" width="1203px" zoomAndPan="magnify"><title>The Biergarten App - Layered Architecture</title><defs/><g><g class="title" data-source-line="6"><text fill="#000000" font-family="Arial" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="443.7705" x="375.1415" y="35.6357">The Biergarten App - Layered Architecture</text></g><!--cluster API Layer--><g class="cluster" data-qualified-name="API Layer" data-source-line="8" id="ent0002"><rect fill="#E3F2FD" height="120.79" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="426" x="267" y="58.2979"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="64.5859" x="447.707" y="73.4297">API Layer</text></g><!--cluster Service Layer--><g class="cluster" data-qualified-name="Service Layer" data-source-line="18" id="ent0007"><rect fill="#F3E5F5" height="105.85" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="540" x="165" y="203.0879"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="91.0684" x="389.4658" y="218.2197">Service Layer</text></g><!--cluster Infrastructure Layer--><g class="cluster" data-qualified-name="Infrastructure Layer" data-source-line="28" id="ent0013"><rect fill="#FFF3E0" height="97.1" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="878" x="169" y="332.9379"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="132.2686" x="541.8657" y="348.0697">Infrastructure Layer</text></g><!--cluster Domain Layer--><g class="cluster" data-qualified-name="Domain Layer" data-source-line="35" id="ent0018"><rect fill="#E8F5E9" height="105.84" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="325" x="12" y="464.6679"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="92.5859" x="128.207" y="479.7997">Domain Layer</text></g><!--cluster SQL Server--><g class="cluster" data-qualified-name="SQL Server" data-source-line="44" id="ent0023"><path d="M361,464.0379 C361,454.0379 455,454.0379 455,454.0379 C455,454.0379 549,454.0379 549,464.0379 L549,666.6079 C549,676.6079 455,676.6079 455,676.6079 C455,676.6079 361,676.6079 361,666.6079 L361,464.0379" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M361,464.0379 C361,474.0379 455,474.0379 455,474.0379 C455,474.0379 549,474.0379 549,464.0379" fill="none" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="76.2617" x="416.8691" y="489.1697">SQL Server</text></g><!--entity API--><g class="entity" data-qualified-name="API Layer.API" data-source-line="9" id="ent0003"><rect fill="#FFFFFF" height="62.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="193.2686" x="283.37" y="97.0979"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="456.6386" y="102.0979"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="454.6386" y="104.0979"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="454.6386" y="108.0979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="56.7998" x="298.37" y="130.2297">API.Core</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="153.2686" x="298.37" y="146.3283">ASP.NET Core Web API</text></g><g class="entity" data-qualified-name="API Layer.GMN4" data-source-line="11" id="ent0005"><path d="M511.26,93.2979 L511.26,124.1979 L476.97,128.1979 L511.26,132.1979 L511.26,163.0928 A0,0 0 0 0 511.26,163.0928 L676.739,163.0928 A0,0 0 0 0 676.739,163.0928 L676.739,103.2979 L666.739,93.2979 L511.26,93.2979 A0,0 0 0 0 511.26,93.2979" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M666.739,93.2979 L666.739,103.2979 L676.739,103.2979 L666.739,93.2979" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="144.479" x="517.26" y="110.4917">- Controllers (Auth, User)</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="115.6162" x="517.26" y="125.4404">- Swagger/OpenAPI</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4136" x="517.26" y="140.3892">- Middleware</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="92.479" x="517.26" y="155.3379">- Health Checks</text></g><!--entity AuthSvc--><g class="entity" data-qualified-name="Service Layer.AuthSvc" data-source-line="19" id="ent0008"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="119.3721" x="418.31" y="242.4679"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="517.6821" y="247.4679"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="515.6821" y="249.4679"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="515.6821" y="253.4679"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="79.3721" x="433.31" y="275.5997">Service.Auth</text></g><!--entity UserSvc--><g class="entity" data-qualified-name="Service Layer.UserSvc" data-source-line="20" id="ent0009"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="201.8477" x="181.08" y="242.4679"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="362.9277" y="247.4679"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="360.9277" y="249.4679"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="360.9277" y="253.4679"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="161.8477" x="196.08" y="275.5997">Service.UserManagement</text></g><g class="entity" data-qualified-name="Service Layer.GMN10" data-source-line="22" id="ent0011"><path d="M572.81,238.0879 L572.81,261.5179 L538.06,265.5179 L572.81,269.5179 L572.81,292.934 A0,0 0 0 0 572.81,292.934 L689.1899,292.934 A0,0 0 0 0 689.1899,292.934 L689.1899,248.0879 L679.1899,238.0879 L572.81,238.0879 A0,0 0 0 0 572.81,238.0879" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M679.1899,238.0879 L679.1899,248.0879 L689.1899,248.0879 L679.1899,238.0879" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="95.3799" x="578.81" y="255.2817">- Business Logic</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="65.0381" x="578.81" y="270.2304">- Validation</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="85.9727" x="578.81" y="285.1792">- Orchestration</text></g><!--entity Repo--><g class="entity" data-qualified-name="Infrastructure Layer.Repo" data-source-line="29" id="ent0014"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="193.2822" x="185.36" y="367.9379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="358.6422" y="372.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="356.6422" y="374.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="356.6422" y="378.9379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="153.2822" x="200.36" y="401.0697">Infrastructure.Repository</text></g><!--entity JWT--><g class="entity" data-qualified-name="Infrastructure Layer.JWT" data-source-line="30" id="ent0015"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="147.3652" x="413.32" y="367.9379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="540.6852" y="372.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="538.6852" y="374.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="538.6852" y="378.9379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="107.3652" x="428.32" y="401.0697">Infrastructure.Jwt</text></g><!--entity PwdHash--><g class="entity" data-qualified-name="Infrastructure Layer.PwdHash" data-source-line="31" id="ent0016"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="239.1992" x="595.4" y="367.9379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="814.5992" y="372.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="812.5992" y="374.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="812.5992" y="378.9379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="199.1992" x="610.4" y="401.0697">Infrastructure.PasswordHashing</text></g><!--entity Email--><g class="entity" data-qualified-name="Infrastructure Layer.Email" data-source-line="32" id="ent0017"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="161.3721" x="869.31" y="367.9379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="1010.6821" y="372.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="1008.6821" y="374.9379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="1008.6821" y="378.9379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="121.3721" x="884.31" y="401.0697">Infrastructure.Email</text></g><!--entity Domain--><g class="entity" data-qualified-name="Domain Layer.Domain" data-source-line="36" id="ent0019"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="138.041" x="27.98" y="504.0379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="146.021" y="509.0379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="144.021" y="511.0379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="144.021" y="515.0379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="98.041" x="42.98" y="537.1697">Domain.Entities</text></g><g class="entity" data-qualified-name="Domain Layer.GMN20" data-source-line="38" id="ent0021"><path d="M200.65,499.6679 L200.65,523.0879 L166.51,527.0879 L200.65,531.0879 L200.65,554.514 A0,0 0 0 0 200.65,554.514 L321.3463,554.514 A0,0 0 0 0 321.3463,554.514 L321.3463,509.6679 L311.3463,499.6679 L200.65,499.6679 A0,0 0 0 0 200.65,499.6679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M311.3463,499.6679 L311.3463,509.6679 L321.3463,509.6679 L311.3463,499.6679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="82.3608" x="206.65" y="516.8617">- UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="94.6436" x="206.65" y="531.8104">- UserCredential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="99.6963" x="206.65" y="546.7592">- UserVerification</text></g><!--entity SP--><g class="entity" data-qualified-name="SQL Server.SP" data-source-line="45" id="ent0024"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="156.7305" x="376.63" y="504.0379"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="513.3605" y="509.0379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="511.3605" y="511.0379"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="511.3605" y="515.0379"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="116.7305" x="391.63" y="537.1697">Stored Procedures</text></g><!--entity Tables--><g class="entity" data-qualified-name="SQL Server.Tables" data-source-line="46" id="ent0025"><rect fill="#FFFFFF" height="46.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="82.0205" x="413.99" y="614.5079"/><rect fill="#FFFFFF" height="10" style="stroke:#000000;stroke-width:1;" width="15" x="476.0105" y="619.5079"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="474.0105" y="621.5079"/><rect fill="#FFFFFF" height="2" style="stroke:#000000;stroke-width:1;" width="4" x="474.0105" y="625.5079"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="42.0205" x="428.99" y="647.6397">Tables</text></g><g class="entity" data-qualified-name="GMN38" data-source-line="69" id="ent0039"><path d="M1065.95,363.5679 L1065.95,418.414 L1196.0535,418.414 L1196.0535,373.5679 L1186.0535,363.5679 L1065.95,363.5679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1186.0535,363.5679 L1186.0535,373.5679 L1196.0535,373.5679 L1186.0535,363.5679" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="109.1035" x="1071.95" y="380.7617">SQL-first approach</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.9263" x="1071.95" y="395.7104">All queries via</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="104.7808" x="1071.95" y="410.6592">stored procedures</text></g><!--link API to AuthSvc--><g class="link" data-entity-1="ent0003" data-entity-2="ent0008" data-link-type="dependency" data-source-line="50" id="lnk26"><path d="M401.99,159.5679 C420.16,184.6579 442.0208,214.8383 458.3508,237.3883" fill="none" id="API-to-AuthSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="461.87,242.2479,459.831,232.6124,458.9374,238.1982,453.3515,237.3046,461.87,242.2479" style="stroke:#000000;stroke-width:1;"/></g><!--link API to UserSvc--><g class="link" data-entity-1="ent0003" data-entity-2="ent0009" data-link-type="dependency" data-source-line="51" id="lnk27"><path d="M358.01,159.5679 C339.84,184.6579 317.9792,214.8383 301.6492,237.3883" fill="none" id="API-to-UserSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="298.13,242.2479,306.6485,237.3046,301.0626,238.1982,300.169,232.6124,298.13,242.2479" style="stroke:#000000;stroke-width:1;"/></g><!--link AuthSvc to Repo--><g class="link" data-entity-1="ent0008" data-entity-2="ent0014" data-link-type="dependency" data-source-line="53" id="lnk28"><path d="M443.54,288.9979 C430,297.7779 414.31,307.8879 400,316.9379 C372.92,334.0679 347.2412,349.9753 323.9012,364.3253" fill="none" id="AuthSvc-to-Repo" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="318.79,367.4679,328.5518,366.1616,323.0494,364.8491,324.3618,359.3466,318.79,367.4679" style="stroke:#000000;stroke-width:1;"/></g><!--link AuthSvc to JWT--><g class="link" data-entity-1="ent0008" data-entity-2="ent0015" data-link-type="dependency" data-source-line="54" id="lnk29"><path d="M479.63,288.8779 C481.26,311.2479 483.3257,339.4936 484.9457,361.8136" fill="none" id="AuthSvc-to-JWT" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="485.38,367.7979,488.718,358.5319,485.018,362.811,480.739,359.111,485.38,367.7979" style="stroke:#000000;stroke-width:1;"/></g><!--link AuthSvc to PwdHash--><g class="link" data-entity-1="ent0008" data-entity-2="ent0016" data-link-type="dependency" data-source-line="55" id="lnk30"><path d="M508.44,288.9279 C522.2,298.3979 538.94,309.0379 555,316.9379 C564.71,321.7179 567.99,320.8379 578,324.9379 C609.55,337.8679 638.8617,351.7081 665.4317,364.8481" fill="none" id="AuthSvc-to-PwdHash" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="670.81,367.5079,664.5158,359.9327,666.3281,365.2914,660.9694,367.1037,670.81,367.5079" style="stroke:#000000;stroke-width:1;"/></g><!--link AuthSvc to Email--><g class="link" data-entity-1="ent0008" data-entity-2="ent0017" data-link-type="dependency" data-source-line="56" id="lnk31"><path d="M504.26,288.9779 C518.34,299.5779 536.55,311.1579 555,316.9379 C618.01,336.6579 789.05,305.0179 852,324.9379 C879.45,333.6279 901.7346,348.6927 920.4046,363.8727" fill="none" id="AuthSvc-to-Email" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="925.06,367.6579,920.6004,358.8765,921.1805,364.5036,915.5535,365.0837,925.06,367.6579" style="stroke:#000000;stroke-width:1;"/></g><!--link UserSvc to Repo--><g class="link" data-entity-1="ent0009" data-entity-2="ent0014" data-link-type="dependency" data-source-line="58" id="lnk32"><path d="M282,288.8779 C282,311.2479 282,339.4779 282,361.7979" fill="none" id="UserSvc-to-Repo" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="282,367.7979,286,358.7979,282,362.7979,278,358.7979,282,367.7979" style="stroke:#000000;stroke-width:1;"/></g><!--link Repo to SP--><g class="link" data-entity-1="ent0014" data-entity-2="ent0024" data-link-type="dependency" data-source-line="60" id="lnk33"><path d="M310.96,414.4279 C342.89,439.1879 389.2377,475.1121 421.2077,499.8921" fill="none" id="Repo-to-SP" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="425.95,503.5679,421.2871,494.8928,421.9981,500.5047,416.3861,501.2158,425.95,503.5679" style="stroke:#000000;stroke-width:1;"/></g><!--link Repo to Domain--><g class="link" data-entity-1="ent0014" data-entity-2="ent0019" data-link-type="dependency" data-source-line="61" id="lnk34"><path d="M235.21,414.4479 C218.21,423.3979 199.2,434.3579 183,446.0379 C159.01,463.3379 138.7945,482.4276 122.1445,499.4576" fill="none" id="Repo-to-Domain" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="117.95,503.7479,127.1019,500.1088,121.4454,500.1727,121.3816,494.5162,117.95,503.7479" style="stroke:#000000;stroke-width:1;"/></g><!--link SP to Tables--><g class="link" data-entity-1="ent0024" data-entity-2="ent0025" data-link-type="dependency" data-source-line="62" id="lnk35"><path d="M455,550.5579 C455,569.1779 455,589.5079 455,608.1079" fill="none" id="SP-to-Tables" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="455,614.1079,459,605.1079,455,609.1079,451,605.1079,455,614.1079" style="stroke:#000000;stroke-width:1;"/></g><!--link AuthSvc to Domain--><g class="link" data-entity-1="ent0008" data-entity-2="ent0019" data-link-type="dependency" data-source-line="64" id="lnk36"><path d="M451.33,288.9179 C437.06,299.5079 418.61,311.0979 400,316.9379 C375.5,324.6279 189.74,309.7879 169,324.9379 C139.2,346.7079 113.5142,450.3191 102.9842,497.9891" fill="none" id="AuthSvc-to-Domain" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="101.69,503.8479,107.5371,495.9225,102.7685,498.9655,99.7254,494.1969,101.69,503.8479" style="stroke:#000000;stroke-width:1;"/></g><!--link UserSvc to Domain--><g class="link" data-entity-1="ent0009" data-entity-2="ent0019" data-link-type="dependency" data-source-line="65" id="lnk37"><path d="M180.77,278.3679 C152.23,286.8179 124.06,301.0579 106,324.9379 C65.83,378.0479 78.997,457.679 89.117,497.929" fill="none" id="UserSvc-to-Domain" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="90.58,503.7479,92.2647,494.0442,89.3608,498.8988,84.5062,495.9949,90.58,503.7479" style="stroke:#000000;stroke-width:1;"/></g><!--link GMN38 to Repo--><g class="link" data-entity-1="ent0039" data-entity-2="ent0014" data-link-type="association" data-source-line="69" id="lnk40"><path d="M1106.12,363.3279 C1087.24,345.2279 1059.5,324.3279 1029.5,320.9379 C995.49,317.0979 447.51,317.0979 413.5,320.9379 C374.69,325.3179 335.91,348.8979 310.63,367.5079" fill="none" id="GMN38-Repo" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><?plantuml-src RLDDRzim3BtxLt3jOHkmPCEA0jjbW9l6Q8j-U7FM7hOT69knXIgI9ya9YcB_VPJaEEwM7bBnyOb-VAHUkORM1Ar4eHBxA5IB1jUmnFAnDhfJrKnBRU0u2tyZHaKhxAJBj7Ato1LI8r2EyYrNm9eAzoG939KELIqfIPnm32mQWZD1faRZI47QjZ21QtmYGnMNAXlX-4fd-49V28xI_39IZk1uVf9zpCxXEG7umVXqfWtzL6cHJs_d2_0HFD0IEFKBqFh_p5JQiHHHDmxqgiU0lplZ7eoMaeo5DsddcdVmtP9vswUBBTOrcVTtBQdzfHjHLPAso18ZS44eNGEpXif7onYfAdmn-JFgeI2p4IKDVMGdyzFiDFRHvwPUGLJDXs9JZdDUrmqghhKcvGBBGv7rJt_3RQ_khBD2aRLmhMkn0-zHYWgTqAe7xjXviixii8CzNAgLGIPrOK3xLZ9kvaDivILb-erQRONJvYaezk41rjKsDdJri3YGpT7QhJRL1Tf6g3emysq83x3dQnGoSCBfXVvppP3QhzAdx7J-EUgEgUbSyPOAig50nFwpTu2zRtu6QLdoUt4ZPCRBp5Foxs8FtfCHAr4USfX7WKkqVas-NeCVkHSOTuFDuvUH6rrInGr6QKNkSmjSoXw8Hr_hDRiimqVOhjOc_l5C9b-6hTZ5k-r9-aG0mu36W1_9EDuPFyQYqKbVS5ydyRyXPBd3kRUlo4FKwtvHhsUCw_KGDtVBbjaaJ4JIAWoatogsRh8InZh0jZKQIxyUgPJmksFdoS9682Cs6jeEXYR39Fu2?></g></svg> |