From e4004d1c78e2b287bed0d44627ea43e55c9c2d1f Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Wed, 20 Mar 2024 10:54:56 +0100 Subject: [PATCH 1/7] Add onboarding Examples Project-01: Done Project-02: WIP Project-03: TBC --- examples/onboarding_team_example/README.md | 33 ++ .../project-01/graph.dot | 26 ++ .../project-01/graph.png | Bin 0 -> 67437 bytes .../project-01/project-01.tf | 354 ++++++++++++++++++ .../project-02/project-02.tf | 158 ++++++++ 5 files changed, 571 insertions(+) create mode 100644 examples/onboarding_team_example/README.md create mode 100644 examples/onboarding_team_example/project-01/graph.dot create mode 100644 examples/onboarding_team_example/project-01/graph.png create mode 100644 examples/onboarding_team_example/project-01/project-01.tf create mode 100644 examples/onboarding_team_example/project-02/project-02.tf diff --git a/examples/onboarding_team_example/README.md b/examples/onboarding_team_example/README.md new file mode 100644 index 0000000..8ed4a65 --- /dev/null +++ b/examples/onboarding_team_example/README.md @@ -0,0 +1,33 @@ +# ONBOARDING EXAMPLE + +- 1 single Business Organization +- 3 independent Web SaaS Projects with their dedicated resources: workers, tools and processes + + +## Software Project project-01 +- Flat Hierarchical structure: there is no management so the team handles itself, and everyone +has full-stack profile so that everyone is working on frontend, backend and devops tasks. + - 1 single role: developer +- They release fast and often, through staging and production environments and +may apply A/B testing on a set of selected features in production to validate them. +- The responsibility is incumbent upon everyone to verify that the cloud resources in any environment are +destroyed when not in use or not needed anymore for the next hours. +- They use StackGuardian for all their Automation tasks, from handling easily-resettable +development environments, short-lived testing and staging environments, and long term production +environment. + + +## Software Project project-02 (TBC) +- Typical Hierarchical structure: Two teams FE & BE, with one team manager & developers for each team. +Additionally one DevOps role is cross-functional and contributes to both teams. +- They release once every 2 weeks on Thursday, through staging and production environments. +- The responsibility is incumbent upon the DevOps role to verify that the cloud resources in any environment are +destroyed when not in use or not needed anymore for the next hours. +- They use StackGuardian for all their Automation tasks, from handling easily-resettable +development environments, short-lived testing and staging environments, and long term production +environment. + + +## Software Project project-03 (TBD) +- Smallest Team possible: one single developer with a full-stack profile working on frontend, backend and devops tasks. +- The developer needs access every resources but requires automation to clean cloud resources diff --git a/examples/onboarding_team_example/project-01/graph.dot b/examples/onboarding_team_example/project-01/graph.dot new file mode 100644 index 0000000..8b7f0a6 --- /dev/null +++ b/examples/onboarding_team_example/project-01/graph.dot @@ -0,0 +1,26 @@ +digraph { + compound = "true" + newrank = "true" + subgraph "root" { + "[root] provider[\"terraform/provider/stackguardian\"]" [label = "provider[\"terraform/provider/stackguardian\"]", shape = "diamond"] + "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" [label = "stackguardian_connector_vcs.ONBOARDING-Project01", shape = "box"] + "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" [label = "stackguardian_policy.ONBOARDING-Project01", shape = "box"] + "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" [label = "stackguardian_role.ONBOARDING-Project01-Developer", shape = "box"] + "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-Backend", shape = "box"] + "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-DevOps", shape = "box"] + "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-Frontend", shape = "box"] + "[root] provider[\"terraform/provider/stackguardian\"] (close)" -> "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" + "[root] provider[\"terraform/provider/stackguardian\"] (close)" -> "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" + "[root] root" -> "[root] provider[\"terraform/provider/stackguardian\"] (close)" + "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" + "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" + "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" + "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" + "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" + "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" + "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" + "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" + "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" + } +} + diff --git a/examples/onboarding_team_example/project-01/graph.png b/examples/onboarding_team_example/project-01/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f46e2892743ea0600a947846bf93f43dc9af09de GIT binary patch literal 67437 zcmeFZc|6tY_ddL<)1<-alm-=b(nJxFlBr1vnP;0yWC&%ywhU#SpX=7Coag)f<9R)Q{$4+yUZ2i!c<=jt-}hSUTGzVPx~_EW@FF%&HVTEZ zNcPA<6$*vTh(ei>HE#~Sv-{4hQ2aILq}<_ylu7cx(Cp}Y6v{e^?7@9%=O2EpcXUx> z)aQTeK2>sR^L(BYjiT$nX6@hT;gh!RpXELp%8xb5YA!NrYIM?Wq^0sct&!AljainM zP@p3{|KyDM{PRxS-Oh7|B5VBQ+QU}%5dTd)7i5oEr?@mEY3iRSmaysWuG{0V>Dl+9 z%w2|_OR$pZU$i%D0`Yv)zk`1^Svb#V=6}CeN!joJ-|tXFp69d3PwCybd9&s0Zl9o_ z#JW1YmM>r8l9QG8?Ac>9vS-a=juk8XOcyLzaLarK80d-$kLK_?BVXPou`Z2>N0H#-o90mk-1tNB9-LnxzHi7 zqFv3{ILg}ET1`t!YjfJ6g9qPQrt|Ue9K3t??u{EaRMgab9)*W~fM z%4d$fVzCRReU$JSY{_H#JPM_>XLr!CwURDc*VwtM?ru12JJM$wBxZMXvtn>%dquR} z$CtAm46LlI9D2$)&Yx*`mig$>qh){n^{A)k?CjaIGcS3sU%&oIZ6_NWo422z-^-UT z3)a+HrWZCgHjaN-8UFtLdm-2F-@p5Wgd{zB^!J{iV@5_sTSY}R9UUF%=f6F&wz0tu z7F<455-icN_|}(}mdrtpKmQEfWl!g|}%bi{| z{ax1akyG>F6LaW#IMCggG(I}Ww`Y$wUP!~*`bqJ_JsV`n#s}`QsHEGO4-RT1>SS`~ zzj?Ejm$%@PvKsZ+vD+#tDpM~m>8i8&*u%4vqs{N`jeH5Ts!LaAU$jWwkDpqZX>;1H zz5I}b^MG22q-*74!+fE1wYk&Qaf>rdoyD{9wOSG`v9YkA~NG26Cv1_lN<`O;;M9=)+QhQ$`oC1!i%uosv5xpR;A@84gU zycVqzkj=@^0Fc$MRn7iPPA)d9!(ULv~G;L(<|kyF*JP zN99-W>)olh)NIUg6*>8O-Xd;Ey;oNksh&C&!Pq$K_Xm5JAKtQ*;t|yxpOjNR(%+GG z;?O*{T$PoTImK*auCjB}KEApZ?>;%fws2u8y;3GRBI4j&cCO0epuN6WXV6{; zUYwD>zCMc)@0WLbZG505U3P#x85^0{*-R5@JcU4DK( zOGx=bYO1hBU52tblg7Z0`}q6Ea!EL~4b)mOzgDL(o*2o+%l+|tuPDAhmVex{tSV8r zpP4(M9(ZfBe714^CwzjE^jgM}yEm)9t?z7BzZ^&dN_64RP>@sw= z{#^cAdViHJ97ZDlbU)^Eh#bS!Z98|WTICE!-RGyqU7E{oh7F;2KCQLwEfS4CbaT0e z-!)Ee*x#bnyV`;r8p=kybCaGwmnKgQkaEwV+jpATIZj(}lkR1q85EO$j)h1jo(^`D zai1J*G)k%N8}D{E=xr_0ba8pchzz?Q86DkWHA>l6{{M3OefPiQs3pzvh z8{Ko^WE1(>m-l@CUha@PN*y0_2(iN-k(c8Q&B^5Amm**82os*9(^uC{unjBhi-y(HuE zx!v^+TwQpA0Y~!di}fe*E3B}-K3j6#tDhJ-wFWt)nlX6O&Qw3i^XkRbD>P2Y%)NN& zlKI%mv=e2I4jHkygiig#*vMF&lau2#_ATGn$A?FjQ~Z3g2d6>7SU*q4M& zPt(3dT;f_d4`M*Z#SgVR^7ZJpv7Um~VnJzc2?0G{Q%VX}ZZPzGmYto*AFWTUPI9De z!>u)YROZj0@6?f)p1_X)_Vdd_#!G1vh0^~P&d3)w^x(lt*OB&UR&`1=W25$_-Mh75 z@5yvePQy3nzuISMBxr?Q<8nFzN6+})QrOWq^z%XZTUbO=V+H=sQCCt5MO@+&5>nxI z>ACRo)vHAQ`L{fZj4M(~B;zk$oLLmKSF@gOr%JA=(e&fk@>qqe=C!J#MC69Ux7)G@ z8#dgz&Y6Dx+ez}?>5Xn#2*&D?7Bige_LQt z)We5s;4tZ4t)ErLXXmW0Js><_lZ__ z5`FO@y3`vyrZ6O-Jd*;St=m5SKm853bzr*vqeeU0ng3mX@ozZ!6>bj7S zP+xm=NP%U#d0$(Z(|A9#ezY&OdxMww--ezSFJ2_hW|iS7&&(*sTC%2i90hSa{RMnU zmBWvxZKequ3Asw_2?n|Ps!{THb8~YUk!mI%UtZx9G4sJ;&SB?D`1I-Ip+kq-%MNoh z@J8WMV;|WAcAt9$!(>Ftt=O*nRQ~bf$4*Tb=GqQ?)s~G@G00POHZBT?L?BAguObNY z-!JI{Q}M>BsUs;@1Fu+vu-m-i52bK^o$FgN=w8YR*X>Dz7wt4fE zjvP6X*|}XO^-f=>MNWKqI=}GKZ)#WK^`k3H&u#qm99&FE;)!DB0&;a2d2}Bg8z1Lb zzC3Dd%w^A-+t#(z^!(e`ug9twtOzX9kn`0{czi2bC^k0MJK{@GpswCDYoXj?pR)4{ zI4~BR!4tYC?`Xqd&SqJibW5uL0Is%0^^-#vE?nRgwbb(+J?f1>ed0ve=s6~h+V7V; z7O9cfO%TbiQ@#q_ds+<9ZFJh3(Q0Q|^r`WB5xT3E8;G1uT`gX1F+I__MU* zFJ>lEvosc8JMiw^I}$;B0s`VT%H7YfYN7h(cvmJFNC7f*RK}`~G~ZLS{rW+W>OS7@ z*~*zcP-7k-Z0bF8=1kVuhv}PR|6_9yC!+xAOyHR`{Qj1$Ni+9DxCRc}C<}Oy&@)gg zC@5Hy?VN6z-LF9c#0^i+%Fun6eD2)~FA5YjZ+Pa&VDZVi553|hu*j~vftp@tee?b{ z?MGepSv!Nxdm5a(+ba~M7`V$S(fPA~uOT!xd6l6j;}E`M+F6qpAny3&{&w9c?G$6i zJHbY`QHvt~ormT8_!)2qx|{P8OeG~HId>fQu& zE}+-g#9%HH(Nn~2?0lkjN>uUfy@)i`XLik=JC|84nDpk+p_`{ts`1CRy?kSQVJ!1l zuy`yY5bM*Mn>x8}u9qBdO}EQ`GFxUOl&MVx6CwN)(d>Fav`;{mt4yu2p*qNPY=Dvr9lCcI8-~CA72Hs8JpO&C_Y`QS@j1L633FHjz@BLC#;W}6!jZkb}cz?Tw-xa5} z*VmT@h*||-UAXGeKmW|@Y|J&dxqQ2KdV2bQ!|)2S=7wJ&6H>~L6E*wG_L zO5fhykmfpSA1`-6;w-CjYf*@l0hMlBmOD9amHjPmH3{&@DbCoL{(3do`<^M}v2J9b zGadkwPf$?V&CQK?JsHoHVMc}bV?#rqv%V|kOAa?LB^ZlUmzh$PWPqI1@el#PczvL$ z1b+745B1nI6=oK_Pd@P~)wE)hYhT&n8`rOwt#zmigW0tG>p>0e9Age0i&k|XE;Oi2 zw=w{rlQ(erc17Q9*k~tne?b{Uym?Q4I4G9j( z3ckGe4_~#@cnd#&G3)!;TfoYx0HBFlkN5Lw($wHyHYo-tWOe80BEW0-O$&{b3G>;+ zUvXZCn|B@hcugnAB~v3wKM|p={_Lwo0eftsHpxFAnVc5&Z}DbZu{5K?25B|Mj!+%yy@tJb?d0V8U3`mrp7%p))gY_1?d#CKhB_V8Cw;LDh zm}uSEOEYK9O5|TUS+X)5X`eZ=m73%em;PG1R9#Om0XdNwUNAt=@ajoJL;Tq9EvM+M znp%Ap+^Q?^QP=av6$UP0z{OKZ&oy=?&O+F>P3g+z%UV>kd&+oRiPWUt_3PJvrWeQq z(oD+sBhE82&V44?h=^4~9ZO}JIeN4bD=)2#h=?#DOUrT1!qV*e+LRrgojd3qw2FV0 zY!E)*bDSi40D<58`_t%kG9Pg`NE^!=vYkn;q$oA6hGSo{WC`c4GY`l$L-HAC)tK|7 z`izF(G^?S+T_aYbK-JL+uZ5WRcUTVi6?d+jZ8c!@!jDZ?9z_6MysiwU(Z1r_Js) zV#w%juiYDU;M(H$o{z7N9y>-dcRYeecE*euMl%y#NBWepU=B`Bvvd8^PBC;j32Btz zJvLuF7q1nIz$*a%e;DsZJ|qM1;mzaj?hcr&lBkoWLI{93bw2X1$TZA;a2a(5{hd{9 zttBCvGBPs$Nl3;z`r0dw%F33#ySLd6Ucu<}>8y~YD^^6)s9E#_akNmgYm3)5BNhK> zGHoFqv#0jKTow0Z>E>f?c!rqc_lUi3&*Kq6;*Kha`9~EMnJrS*m#jCaB@;Z(sOV(%A({TN+T)86ajcy|_B_#pX*L#6T^1XNOvzwlZ%An{4o2>>4fp~zv^<<05;4^IbCwU$T;gHH&{R9sOgq$ z({EkILSl@i>ryRhHO5E!vrg_v$;i;!Y5YFsRot`>rcB(NGL{{dx#RYTA(|OQg@tk; zeKfM{J6TV+O#4xfNfJXT!YfmZi&SJ~Wv|ped-lwBv@@M~j)37`Uz3DH!jA!GGXaSB z^tM;53pvFA07d!w)*dD{#e&CaLc9@QL^61 zc5N#ZM78y%VI_)3v!NYgTc~|Axct!2Pe5$bupN{w;IFi;7rA(w%Rg zrzK?`^b>}@7itecQ_}`I4Ug8Fw<=nRR zAKTfBQ=U9gQ&IW*+N&_wlF*E|HEi%9u-K-&|^hL#2ojq~!2ldxX zrsj(mFSz;>%SgU%4lxPo#zII(;PbVl>UMjlPM>oD=_Gng#M7 zz|uJ{A^0I`z5RIh{IVOiv)5AB^J;n&a0FY=u0EPXX=n4uoOzGqNmJ`X^<@zU#{oaTmRY<|mhxGAUO&g%qMdP4Zmy)^j(Cgk#+Y#I08ZQ>6#LS_I^ez0ouQBIvcSHFzGztof zi#6QbauA8}2a(pt*SAGKh#&MXsL8GzTBs2YAEZ-Z|Mo3gV#?WUH5bg!)CkN{Ir5gn zIN?l7M){0)g$IsOO7CRM45R%y(!w_@Yi4K~$Hl?R9oeGbrS^zAFUz5DmbuV@QT}tU$ zYL3ujzGbWt{gITm@9W%wUiY?z`1wTx`?R#S5^MsN0`;eY;^G{$MI5ttzk2lwh)Ie6 z`Ko2hB0M}O4vo0pSFT>=#iyJ&ae{6Bd}R}pE%8f!Tb{{#cr+7nFvzywJ{^MXl&#%= zP6GbkT(@2Ki+*uhT!i_d$2TTi(>gi&Z{4_I-59r;;z9p1qPJ~)mA2TJc6}#J$@Gw3 z$aPv$dC0xsr&$v{zYmSVS^~F}pb5ycX$^>gSnR~$U^$-#y#}^Wkh&+Rm~F6=?rVSk zdo#oJ^7i6R_&~Fxa5HdyPo6xfb5B0!c&DPj_jSw1 zlJX0ssPS2k4h#-z9z1x^Kh*e;mt4Atd6hgWKi>xio;IENy@nW){=__Z^|2IuB}!j= zf~4H_SFKuQlw;7~HZkT17v)=h&CidierXYhg#B#3sSm~t$EOyIpZjOC*8*Ia&JvDd zPfyQny%J(#^p^u~-yVS{S|GFd*XM*TMiLNk19>QF5_}R8RA6mV3nX|J1Sm+%c9c=O z+)tl6<+Ff$Xmr$XK8LVX!!y0obzqSJO}jjd;AaknBdo;i0qE_z6V>6RtS7ZIlgn@7 zl`m*r9GB2&a`hQfUj-F`;%efD4_b!~AI_Sj(z6MgN0rMY_1BUpv>9RYp<#tZMGS;e ztU}|K|BR)~pASp#S**jKO=El|8xwI)?G+&;pWAVjo*x`oaAzzx5}g!pE&J zNGO=JlRQU3fdRnnyHt|f6EiEluB_!&{4~x(kMbsAxOzuYHxWwa+KZEtX$;(4cvUr?S z!|=~>3W2-KDxz*7AK41@v*0k{5ngz+09Sr!0e%`EBBe(zXi-l#J(#`MOG-`*a!Mv99F$ zKmRBpQ>zR+Fn6%zwx85*KKX1Bu4UR*a0|$083^5VVRB3+iWKSyQSG(5*RwQ)dB+!6 zGX>t&rkO{FhOWDL7=FX!YBL;}(L`J8cd41AINUtaeOy}F1C`v+UVG`as*@@>#g8JC-FtScr zaI-38^-&6|(=6*r{|JyEFM{qLP_9+HRJoWjE29r zkg_W>;QH22g#x*$^o01D$A;IC9U_r6w%eK(#h-MoobzQSfjgshsDl--tXY@Ud&7i+ zpDF5hwANl z=-RRQ*Y1`sgDc`a2QvqmE0a6IND?+J=YgMyN4Ypa(v`07*up`)V7Sb!@{ozX&4hbG z5F^TqRQpby?b=Tc5+0e*!El(`NI*2$qZ_n-mf*ly;f${od>KT1KUeJ1ip7VDWxsu}4sBF%?gHuYPmyi1QPfo^{?N&S+Pj8E|hzs=h{f8m3ut)yaPo!RoqxmIfPf-u9YkeCZ-%B z0K3WYLGz~P7YGf4O|(N|V*bv1BROh7f&{ML?pv%ZPy)bM8JH8tgV=x@hGNX^d{2Dg_qTEC@xmuw{xLixoWQ-4^JTwMy-jUt(zUAz z>)*%6y~S}w$leo1ic{}CIj-TSYKTg53~J5>NFddd^s|L+zR1VR#SH@Mf-8@{eEAQD z+DJJ+QZYeoMls8wy9$PxX5DfWw9V{4{)hpWM{2XAeg&a{$OGRBM8Y3m9&sjGrt?GR ztd($53lz1gA_@h&4h?F?*?p*<5#E{0wNH7`n%zp|!%W zIf7?uhIiba^F5*7_wM!gRVeCGkNPqOJHpn7)J7%bl*GpoW}FlYHwT}8$x<=XL-Euy zXV`eWd9zd*7->$u*C~2LU27D6B>S$Qpd7W`et1t_Tug9AphYW6+y-`{v>juR>o!Gc&Zp3A+r1eZ z)e3PCK%hyGZfH}FhQG?Z!tfL%bxRS#nZ9|WO+A)4gc?~i2cL!sioO9tMmHEO!fZrV zf-1Aqz}MJJo7SV=Kmw?A?6PQhrcH`CeT4=SDu}#WQ9GJ9nnM&w(Edc4BRnRXKO=oc}(josp)}KnRWh7|tR0t53g>J_Fnv+B(mv~Sh zN0Ag^cFh<^iShu_3Lif|&GtQxa3h7;n@mkjTZ)tFEt!a2#I53TWsEi;AUd&PqwBm5 zd#?Q0FbLsNeJ9YC(QRFZdC5KItBT>Xk&f#1^xNE0G_roc9kPCunF)eO!$?FH zG}HaNr=arD`8cpuHEN}-ar4`|#vN6On>KIG|5}q)c;4AL5H9gvK!90Ix|J2Aawn=1 zv<-o#-ve#Dhar0w8Sf-217`#Ec5_cbM0?|*o{ySqFQIC-3Lfb2XB7TK$+z1|!;E3= zdF{3V@TY+&MXZ*Rl1c%Wth0JjLA3r9K+bzatpbJ!sw62;qOf@d`T4b4?sXYTp3lxM ziu%6rYEesJfHs$j;a20XA09`6gU)Mg%zZBj7ReC8KJ%$1ChDF>rZN1zP@o8?Kmm}d z8a~E1&pB=Q({(=FMk<68EsA zEZ#K5z+FWsvgJe9*b6_yDQi47^vxI=31dhH@;;t@plRUBI3mO@(WjIdfY4)3-ULcE zov5IWk2S5Dhgt_{SzSWNtc*YB-P#098xa}lf0)bh^${Urzc!wHRCaa$K$;Er(xrw| z8=R7&fRf8_k(C?Ph&obPy{M#QL+Y98^6`v}j1S^tJ+E*V1i!qzvOrTj*T8K!QufG^ z9Wch0;%?u(id=X1rK?tHcYa%C)6Wc#>kaFZlq-p6Rf!lCEE}{V6~Uz|SDMUOyhe-W zu6}-G_=}U38|t`)7FqW*l}Cny^_aoM<8k^o^H$#T^)=%0hwV1pQ@zG%50WayvDet9 z)*^issFn)U&hPp7oU+sYb?2nj$L=X@;!H$(S`n`)uoQ2EQo2NZq3L(=MMiEtFXnPs zhU|5q-93ffcK0zYDJcanhf z0Y){>17A&f{1IvWOc7YK+W{>z$Dd7%bmSSQ`1|fhbw(>Q z2X(1f>n#-(neAeOg?<78%*m)g%Q)fl4scyNQE%*Ry2Ktp$g7h0uVcY`9g0764sgyl z(rB%T|JonJa@mqyf>khL&EZasYEXVM-tca1Q{rMpsm5UEu00#xJwqwJ<*B-ZrQU># zBF$W})lEI=5L6+?D1NDZ+*KI_hh5{zDN^vqoH+qrQWGDh>jf0Y@74N+mpQ?ZNQnj( zXIA1kqe4wAk2cmI8Z_rDij#xqCTN7HV?{*L z>TJwTj)fogB6^yB_}?~2)Vgv|;(WGzn^sd-AohL=Btp;x;7skR-NlXA z3eZevW$48TiBenLVAL%m?xgUXe0*Q#08%g0o~9Rg?Q#Inx!}hAs`aafZ{5DFfhZ!* zb=WA*xl?_>NzG2O(v}MS!M5HELfxu;6w$8GOE(zo@86!DC}tD>sMXn;>MS-G@4S6v zXz09cmR%*yvYu{=G?-J$?HPa)SA5|wtUwW$*|PK&QQwkcG2#&vHA=JLKwD~l5Ok49 zhe2`r)HWc$msQcx(eWLrdfL;|!&VD8$1e+_LNC*TDdy%EGSRif$a*j4mi$_F-dxv$sjD3V znoQ!`>!n0m3sR{rf3#iEomUnQ@6Q-uy|+>{gQ$6X?*|+u2wteSjcT&9vyuI(L~VzL zm%vP)t*X3rqRa#Rt(r!y11)|ARe&0?sCAn{IR?zmKnQ4FobFgqk?ELbV{rH83IQ{e ziHTraa;)b-_V_@p(NlxYF`0u0)l9c>#CD}=R*%IOxWwF|6OFj|KyUB82y5mki+S_r z-QgibkZDqJT}(l*KrT(ff0Svxeff$Nd^>g|7krj3Lb0I=UeLDr?Gni9b*aBlC8Y^0 zn@MVvy#FHrr}o73h9~r8dK=(3P(~#Q{^D!lbpzl{j*i&3#K-m7f&5NW83Y?;wWtL{RqTeaOeb&}U>S zX+jbaftYjjfWIC)BgDWrNEeDgRIp8O#Ynh)O zsiAy~eyMQCa& z>;0`b@yYKUHTNdgiB?$ym(IjD6a5#=M+w|s6UfR2Pt^~ztdA%=aP(W5dV1WN^Z zIHeaBG?cl*w?6D60p0&onAWBHP9rjjr@C`M=wmR-ZXV z=cf>j5V)_iI=8Uip)nCv0EvmA&m_+v;(~AANX|`o1oF8^O(FBKYkEGTC|DxvrS5=a z@B5vs50As$pxa};VwX}w34mWOBa~p`5zsD)Z*Hz&4zp=$I#E05`e-t_#VK+W*nKL@ z-Mt$|w4C*HbueaTz60t(nM$?D-3gvo2o}#QmxT2M8fflKC-jlzyUM_I@`Zzxo3N-BC zd)D_~=S?YD6*?c1tX*Vba4$I|8@TT2DU46pNxqkP_TxoHi^%-n89~%I!Xk;V+M@H~V3NEiX%NZIS8>AG0AT=u>!RZC));#Zmt>1}^+AD80 zH@6iI))d*wagb!EQ3aPjemry)Sfgq%lZjr9Ezwfrv3E~FAY@=!i&g@Iu8hXXiNX3> z_O)WCqK*ZbfhAKQzk=jN8@2OQz#>_bc<1&mcVxr8xWIu>>Z}A0ymaka3(!*L@P}$G z-!yg^#CnqujwhJOJl6NL8^ zwa=;-#_lgf`uYqq)+o@}@{Iua!No-d#jX$n_=}j|mpyiDSKi8AFZZ$Vx(8@7c*B<8 zA(kImf)rB}`QFajbSqJS6CwMo?79y-ckV2rI@B8>%bnT?!IPJ%0mdLfHKYD)>+J`bMnPUHlo3_P z;ZtqfRqCC)v%z<5|E-a=10xD;7PM1W($BwPh+G{m_Zjk8ucrq}=xD_564_)5^H-!}ooCBMF8CVC;8NFJXN^eocgxxT~f}tTg;8Ok8nW zYo0l#kf4d=^WDd@F~}kb(etG^C|=Ta1nR&mc0)#)*M+(hWvhx{!DE;~s+pRYFVG6rb8oQ4#<{d9-o7%OUWTN%B*XD>i{3 z#z>0~l1d2l?9#cxWRS`M{(XDGVn1lJDgs2z3F`$3fSlAwnO6dTtjwCd_VUPiDj?-P zx-Ml-WK@(Hd@5cErvtU=a3lrmAd#&SS0BWz4%Pb7N1fr)ja#-HITl^<@`iYdN!j0c zm0TMsF7fj__>8J9Top4=5~R)5lSRggE82gFdrTUkAOaf9e&9S7q{>ru3K&N`;--dQ zb(`8?Z&3@#A^PORDCs$o`PN&CRF(k^>P&wIfKbG%YwR7*FU%SNi-ZI#0>8_*apNH{ zTtrWc{~&UXi9Pt&d6jAN-V7$;G~D8c zP$(I+$3_N{1|sw&Qe)@~b*Nk(lbTvuG01zc(j4o#JJ>fw$Ep42CAhsD zdG^>8`o_YD~VQ6+k>ck=dUQEEx8aEAHNY^OZKRoT(8q=(5z>6 z>E6*L`90QlbLF;gN;nm2~u#mzN8ZLj=)`){7@@ipP#E zwwA-=N~w&hDi+8`)WPl`3rWDGX-DCv5)1Lg^RU-C9VA@f`;6Hu^p1}|Yr42V81029 zi_Cre`?5>>VMT2V6%-W2Kp}CIzehhFigUK;upz`M5PcOLBqSlqIm*{SqCaO5XT-l% zOA!%u@PPZykfIy?(a4AsVH;r^>exY2bQ8!OD`(kop*0Ncoyk>RC{=(OOsEC8l-U2^ z4}stLTrLVY^qEZIyHFR92C;nGseb}@E+Rtbfut1uQBx=i=7WTZG(~uYAg4yff&FAW zKK{=wk&%%a24&eLZ8-^O2reors@jF4<8pli#c;=clv=@fRG)de?&)s{MVmcJlC5l3 z2CqXVdZBT*ws+7};IDpx)k$6L@oT+InD&cC-x}xX~b!+)Z zyH3~0_=m@aaWOGHA0&6}B5i%F`mA)uW}C@ufM|^#Ay5HF692&O|M)6hyx;%%aNOg^ zW#(GF_)V_$7x6G;g0Tq+32!7J<#HPA>ReJO4?P|<-*79HpQ1Y)WSa2^s=AR;By0gG z>!b2=6|Y9rrxGN+<3pN9YF&BcWFek^JaU*e+4O0ogumgXAFjoGn=VhND-NC2L=4L(gsYs}u>flCT{L#*9o28F)bs{0ZR-|TI1(43c&?e!OJ zPfIVGqtz1uP@|-cFOh{hLQGQJS`~>4mKsY&wmjW3gDc6PCA*YUt?1;g!i2 z;C9>D*Q!D($nRhqmv zsXrmHzhk(7;+@d*s4v8v#?vvv(y99JAqH<0^78K5>MCxUxe2f}PA|bchVPGdHpRTx zuh0Ln3C!TKRjamU)mu{C71`ynejTRXFT15kKZlaSqxU-BvS!Zu3Jw*xNhKUn;DzG2 zI9?H9VXa#F%dm+vwM%{sC8%noHAVAy-Tk2Vaigq;hpab;zW1rw-aOjjmyZUoFTE`u z+`Nj{F5l$bZl>dcrF8wtF1-zZK+*1e=JUje163-b>VP-xcsP%UsA&ANXLU{snQ3qO z&(o4K`R+7SeYU%7-uDsvPH-1XNuSEjs9PGN0OU$9_oL{(JFF4~fLE z)KO=F?a|X*rPd*H8vH!&3wSv^&6sK@YjdA05)m-*BZZnLA5Y4vy7;7l)xZ4jf#qM}cp1npN$*u>U8X9M zVkKACY38v6Y6{|XemN*1EH)vE}rHM zl^HN;_SFFoTFm3e%J6I$oIyAVGM@ue8^FUM{t~GQ-hi}X82M4{Wj>O=^q*h!c~Js$ zDeFFv9$Z3ox7+eUTZtky^c4)GpLWPaLdq%|r8S9r0LjW1k%{6A^m$wP`Hvaqc`7?O z(ea5<=%|Wu=x%tyPg<6Lez}uYm31pgArPFD_P+NK5j><*%6j)2q!0ID3m2(>pRE!R z5g`LIs;jH3{t18>&CJqL1G*GE*7#P;9;gyv=X0`7{d_9^uGx=!FMv6*8Cq%uFiqx=~f)b&E1zc>OIqk6-WN^Xr z>Qp=yb33*hBi(QE$^!1qrkGD--^OrLwq0Ed48)C?hV?;uk6&3jk@??b2&^MYQ| z|AbSm20|k+9=NUZV2Q84 zX>0qV#78oDz6i%R9GWqjN&5dW;!?+{M+?A6YckG-q?s5X{XZLg)}9=ktviwj9UyKznXnajXTE}60yw+V#>R0_;Sd$jUi$eEDt_B)_tNkgw%!@ng-B+hoQ{EhkJy>^N0k9A|k9P@kTN= z0|L~4eNVu5aR_$7ov}^#Jstz(wmqyRsT))ha^_VDW!JdfV(?33*aFTFe6tdYFgQa> zNTyemKYTp=G3jXMRH$%0Sk%_m_8+_GIS3zlwrdY^RLq%JkHx-!FOLMYAx;q#(F$hY5X@t*w*ufV{WVl51V4O00x(nVNGPT~-gv20K42?f` z0t4E7d4Cs{2QnYn@GYDgCFl{18Ly1e%fH4v($^k7f9WQz4QA-#Z9%@VaQZ$>(EyY- zI%&s*P6q9LypR=D2TP$4){6o4uHICSTb|OyY^?`>($sqEII0rj;|UwReDA!}_qJ6muP@`JXU0y(9GO+t%20uW-k zZ@b-$rfqwnuK`F&SRz6Ko2n`*Oy@~p3;6B=vqZT@bNa>guz@z4BHe0&z=}ay#Fb$@ zg(@Z>RDi`GV_N=tjaPpTM>d+;ikNp-PzKqo#*v-4sVIG`LHC|4_ghZvLAwe=X!?3? zwqOwaflIFfVhdc8!oTN_LLNLLC3F$I7ZR{1QQ{?-=!F!T$eDA;Y3n_a{i6L`Ci)W@wWqF5z^s#8eOt+I{XN+exgvh*R(+-VLU=5uk=>F%i&EXC%$kzYG>S1_9=s z^#?9a_vH^2$OG4^YHCKKD;^gWm0)!obNa;xjYD~&wjZyoAhsoa=WAnb;|~i!2}}LJ zflFkY{|P{*{2!k+^9tVnxx;T4-r(4}7Eqr|a3VK~XnIj}pL*sB5;DM9>HdE=*tU7( zUOh#wV*-s2Y(VGn$ty@jMWEKj&B7nNg#gToQoIjD5TZEn7z9g!td0&sdqT_Cz^QBl z>qYhaKMQvuW>88Z2~_!!DD0S^Zyoeq%Ebq$krTDWC2|=8QGF_dlGj+laROzGHV|fN zKZ0931B(Jnb!Z79tmfuO}BDkQo>tN!B9TP+I-b$!=a?!~7=z zsT(0ZQO-@=T0#Ok$m>6{rlnD&v#vD-Y)dxkV0ifv6#imMOO>du{S1OeMXk6h-pr)X zeGq;+KRkZLW@3zx3;LNW+>|a;xkl9TAqqnmsX{*^F2$pF0c>h_<1!A8cJ%n)14trc zrhfZtGB^sqL+;k|)1>MMG57ywuQ*F#j116ed} z6Ca=4(oOPhrB4Z;3N>rOI%AXr$>=ZKF`~Q#4wyk(PVul&R8_qPZGEE07m~BUfBp)< z(b3W77*_=?;zIj(zqXuGya*;28XuFG$nbLO+du$1hW4qU`mI=tJ2w?H;ro06%E54x zQ7zqJB2=Mm*&KF8{%MTB?hL}%`4TIsIh%l#RZjzpsMVG#VIY=i@)o9>Y2yb)s z>KuZ$FG~;OvmTmTp;jF2`z?Pqv)d}MTI_$8#;tgxKPIC=Z8}$LuB}b z?NfHiA!)oK(mt>=J@jJ`TJUH0sgOxDZi?=pyy^F$z9L$e5h&4#pc+^!CM;}Uw)0>W za`GrraEBblFWt+SbhnwAm6P6V%puwWFgb79RcP7(Ctj)zML1NweT|djjo!_I)J&pJ zgg?+gm_F@;P9rf{Dm4gQiR7cm1SM{_p)erO>My(Scp$FIoh9Pom}FNQq&BUaRf^be zu@W|oNP$=HI@2S@reRLBkq|eGZqq>gzt~BpE(M?eG#|J#uBadW4Y~tZPyeTz0%p+F z2C1$8y*=D}UL7;AhJ*?F@j2luDQ)*j9gqyzLk8+*u>vxq=wPR#*tgTMLZKa*$RsXO zXBHdwU0Sk@Pa{F;z<~o<9hoxKkY9M&VN3@}?BSz;w0!IC6ab$%EGTQq;gNQl|ki%KZ8E)0l>-kEthM?>}E2KRU~&fA7z! zw)N@Xq0IcB10N_PL;KIyy#F~Ic7`cxCAPrdsK z>U#V^rCRDki|q|GlIU36hWEDL^IV&BHPmD99w~}p&J>vdifp1yGk3%nP*c200?Ao_ z4H_3AWkoz?OrVs#W*Qt2uJCtB_ni| zec6RtJ_GCmi5#-(Gka!_H}xiQ*ZG(1aoy3~cByP`M@(_orJ#3vR-9@5Jo+BIQuDA*-}NzK4A?2B1AFM$jmB;5(P#v~y?jbrWZ zv(jFYBQazw;fYsQ9bN7Mmng0>Ob~EPM~@iV$D-f3Q9DRa3B+HR!iS8`JI84eyx9?N zVCKz+o}Pk)asv<&kR7Qmaf`w~Nv#uc?#2A2Bi@qZeX5-e*|i;Fi41K-G3e#t;P!!3 z^W!?-biqE|9OO1yr`-DE4G1BK6r4#0S;8h$vpO*gYsH<<{IVdWh-6L}{bJw+$)G=! zV#<-C_MwVy4wpdGYqroXjr7g7HqVa%gHKeBq^%9rT{DPRI=kY-IXO9no%&4BrrDVw zaaD>eO#!nOa11pmr@aVc3F?%3?hOYSMR&7*u(LLrjID%({tj5VOG<(sPfOVcY$f|H z?d{kT%`U_3DXDdQb~wBJrdGY=Ag^w#e=j>wPV_Y)ko@%be%!6A4Lt(_0~vL7Yrd+K zvgvc@I6}75kI`~0Tr?&b=ZJhy>qpV2910X4AQ?Cm7Um|Qr_AzZ=Y|a%NQIKfE3KY= z%Ui`<%FUgGT&e>@%kJ=G4}H3c5H!!E2nysIljumRKpC88eDj*7c+!rucCQA0>nbjD z9|l{3N{J}4K+4RBR^%pOdUAxB+lN7{dXS&R5rt@o%mHhMP5I+@4|A1~j!81la0Ek9 zlMt|Y#l&hjTUgLfSS~r+HV+VT_JZY87KN>Sc6G(f*qur5ET{%}Upt8LNri|sPm%&M zF4Z{Xx#cKDlP0)$l%EU((QR;$Kmfo3s6O|G&wswhYjC(JjC;+>z8B=u_cmsh&t1^G z=jTMO=fgBzFQ55})gvjscK>xaR z+%Rq^0I3MBXIfoLs zY0lNF)1dIred_xC-DbOLBR^9le>xD<8`RqOWprcS8!>$_R77kN%IL@V(-$5Jn$9i0 znn%6SnbcC@6SZ~;YDr|m7MkTx8%<6OAb`=xjO$kb)53C_D0*d$Mitvwd?$ZeO_^;GpH;5XypaPoHYQf(Nr`6`5Xh zFwU>|ygRiXnoj}Q?@nL!3U^u7wLPwr*p0|MLC)8Fk!$kpjsn-@of54--(z>kY#txt zDkg_RCd)86Y#GiHxgCK4WT+aPH;=5`{cU#v_)yrxw9g-t1I1+=P;9FNEn{0G!X(Xx zHvmvK`sqEI9L=5V6-(1XYjRiip#Gw@Vrm# z*MqizwEgLQhz6b<$_95y2QEy*NS5UmlCB|L1~2VWX%K6ukX#wnO;E-nr;FDhxldwz zZdh&*A~)C%zKcX3!d786+`elaUrn-*4cd}k0dxS|K;JiMQiEg}-5vGa1H<1(+Dt}k z#oTpNH8iR|iG0V+k{e;UoHNLQI4U>zumNp_#c*4=7mqATIHnF%rdWu}_v_42ZZuX> zojcRWz_*Ex+==-5@wBM8xTEC1y7gS*-h$F*Ya1XHctiIFZ;9_`_hq@}rH+$3 zsk_(RMG(cbrGNc(5(%PiohaJYiOTd_Yb^>qy?rnA2f#0aNJ&M&MSMXb6sTAmM0@(Q%FG72sbX#LyK{rB zL&L9hv+=fHa3^*lQ`?2+NMkrpuG-W=I;*Xtay(#-X9vXodgy=ylu6C#M)2O@{XWu9 zzlQZ#UP0mi;q9&Cs!Y4@;bY>csN>iYIv^GysRt1-5e3DfLq)ojkPf>L6oU>6gHkC0 z0TWc<(4eFOQb$09L&v)|>U`(>Jn!dye}Db(@tGOraPD*8*LCf^*IsLFX%HV`YC10Y zbSro%-k~KNKlm~up|rO5W^uTk;gGA18P2@X5>@_hxdmKg3Y6!7VK0fB#10CB(hY~O6;6X(oZBD2422v46OSQH51pSD)U?BQtiJG2(EMhzs!b#B_ zmc&LLKdyxbU^V)-p-Xx72!Xu5UqK~XgClTUzeGiO&%&;7&o>5X$E_||RXpkikRl`@ zQ4}Y3XZ_xCfG`_wifJdj+x~++ZL*=8r>GvA{6+cLC8ec-h(dwQ&8BwHGtDS($sZs+ z37#s_H`i!aFh8LTG{bTpwhkA!%9NL_7%5}%8(4mP{BpYlQBCD;qKEf>I?uWSDJiLh z2XX0RD<_Nd^*dUWrX_%L*BCLa>}k^YaqR~BGE!0j zps)o)a8!b29FL>Z4q_g!QmiL+OMdc^-NBVRE+*=gFU{;ry$MFR&%H}ZeOvBqkX z*Hp@9diq>b2wy&&zRNkS%%Q<$<$E|dJ4I*OHSH33k1ZDYnlq`c>zO!#(PLkqc@pK8 z6#L`D>L9ToUoc9vHTOwl)I`h0)v@256#&zB%1)|9Ynl3@AQx-pP>V>J;41CtQF0ar zS={W2oS4{d0ud=;tg_2rDJ4}>Kk`#}XHh2X`xS{o5rVRtwUWh#Ba&K$-b%4NZfXq-SO+~>K^A+v#1X8K_KJ0a~Y6{dBgV1@o zG9M=)E78XyxJ(5~Y9tAJkRkBQPzo;2aQO><)k`;@Z6@k?22?0)VtjXa^rm^0KF5tE zPtbvi@{GnOu@(clu(7>YI!p;Nc~FofO9WbW02Bo~#nKyGC+xPvnpNJ52GXS#v*9o7 zV~(oTA1kChL6P?t--Zyxm!mK`)HSbIi1gSZNsbEJP{WW{CJ_G6dFA6BW71<~2V@=Q zd$V^U0}y7-9U?KeX7=!Rzs%UgA8pb5(#@T(qOL8Z zt7%<-m$SsI@`pYlT)!Hl*-v+hrfi|7fChWCVL{;ltDy^d*3acpHTQ~IBXp~AnZs>1 zB=08Y6OeiU@>C9R9W%J$@6RUFb^G_r{8y}8`F^18^T=R_KOrOA{m=|J03rynz_POk z6FNXeq|69gsT@T4`;;|-NCXy{x;m<|9l)hTl6LRd@gqv4rmrHS82!d1%`*LT9H;VZ z2LylLOo6}u7NnX^ULh$i-^i6s<`sVSI2t5l;QO(KizuIH4O}@OTT_tWlK$9!orT#D4Am%tH*gxlD z3QB-P0G#d+mU?(!abT-s+4?;c14(He2-cJ! z5;r&u5enS=yr$zRl?i6o1gS{_tg@p(Ue}G;9&6a@V%6UYOe`s**|8e#APOOS(nVwR z{MQf2ZgA%hb#}jcWK!&N_p5F|E|q_*ZkQOdyP0e7tjE#8)K{)Mb;jzQx$bLfL-XV{ zmxP@w&QI~t-Hou|EQALg#ual$U$0{sPUCfV23XzydbV?}s6`?#PtM?oz!QEWa5nOq z_7*4W1`qf^Bxxo~6SW5tjL7xv&o+YveE^U*0L7k9Cd*)rplop2_F!@)NO$*%x@JBd z6cnHt-SDz$_S-312!rM?;`|OwYbkSaO_P$^2%Y_3hvLZs&xLo%W5m9t;Bt2-#&4%(eoh11&3Rl0h-vyiaHJ zhkvFi(3k;O{X8O5A9*V~*>d*V4R4MKNw1ZXYK8y|=C^0dyK<$c?$!~IPC;%_^w(~= zrH0-#s3Nnn9Ngiia8G@|ZY->i9c}4m9nWfEZB1w}+!pg&In64Q>Kqn%vo8tiIe)$3 zclX=3Z}WOnZlYNqU!BchDRrM};R;s`9j+;wM^#$ts)2(h=aTIZ(f=|~*d5m5@aRs{ zMpPl?U6q`gau}p|=_&n2@|t|TPD`L{B~3s}lvzw{O5-9F6d1ptN?NFFB8BrA)PQ=f zOV9?YAOZ@&W^YC21xM=iXfd(ps`rz?a!@XUHV$bP^iabvH|J>117LuKjP?hWtT;Z4 zA%l*2_~7oS%7(_E8HJ>JpnX)Hg!wg^0-Dd_JV8hIH5y6E2N}=xM}snQqW%Qm_&xra zZtjTdp&q+R%gZg$R78zsEq>BUf)bbV(xbxOM6CMEsrs5BF{OHiNYU6y#2xnP) z;^9$>L6+t&je#a(S{pz-B4u5Pp(DCt&!JHdAfFd^EKC<{`t;a+XmgW=5pp*Yyt!Fh z0BNgnVT<5Y(H2PQV?*HZ)HX&g0>=zo%T*WixD`f}M?@4#Rlq=*KoH=kXEOjS; zbfO)rmVF^EeEEc9p{?(n)igAkI{D`cwm?so3>hxbaKJ#B7%l(nuzunECd3#BS5{7) z3{Fc)wB6zXJD}%m0u(Aw%%gLfzpE%5z+bTCCOu9N@S7^iX%Ps?V2X5yWJZEsZ`t9rpOs6c zWe2ceW5Glx?!|`S_WN8t0VCEse+M+8 zmP$1G8%xBh{TdpGUUV5~sfCj0c+vq9N>uF-kfo%d?WP}od;!Z%mHNOzgIhC=qh*^UTgbkdE8f@PLly)4JP$fcGtt!Mzv*eZbT=OYf`5btG`YGJ9`P0j zo3s(+jj{9}X=o#0*5vlpDA#Fnz(Oc$$hU>oI62ce!~5g1pul@rt?01Bq47Y@yTKTg zM;Lcj0W1xGA;2ff;TIU@0t`N6)s(tn@LRkw%59OGp7o1s*T9a%-`@l+VjDDG(aiJ? z1PPFUmfX1-x`*Itq@9o+9i3Z+{DdmqElNtk0D=OsPOgQ8S+@;B%l$pdy{6Tojd?6? zEf7|ffHg0pwc@kr7FDz-Ra#3T?=(%!Guc}{I_QZR0EXJanP1K>9+Ev*;VP=5lW(0I z42D!7=3>AH6FrZLC>s)!D`DE=$!a$G$t%FEdGDi!?aBZ@Ir#zrs@ z($R!eAF;M>j?0&+6R9x5Vu|zh$5YAZ3hfBkcxrMWfMkHqHt46=@Ocg$1H#n!#2S$G zCBr(84a{nU?AP-QRI(uw*pLKYyf@j|!Gv^>!gH($A0E)|0cU{h}R_xmBtV6f(BCV}jfI)30Kp#FG%p61@0 zu;fWCU39r~IQ@+L0{1llqa5PoKL&=_jqoj>Zy>*W;Aw47tiwnMSM0$ioWXf`fUt;p zPS=QZ^t;QD`$MsU@a#W+_sCu_%~J9f7&aI~nyL+<-!2`un#Iu2;v7U@`sG3Y@r-66 z(thFqdz6tu@`{(D%O5m*My&oU*X`r6#;g6T`~pEU_zh820Se*lZ+o@B2Fcd6*iTNG z{VSGu@rNvZ85^;h3F;U&$}MmRe7}-04|dW0sMyq1+iyTra*7%d^rxI&^uI{N_zG>` zvG?$n|HmkS$W*)cK|Qg)1?)?xzYXNDcW;*(kjZ0ZFZFPV2~NCb`8$Mn=vXT)&~9MSiM@MKb!re@gsn>lfVnq5lvo*tF`|v6o|WgZ%IzQ6NO2IYCX;ffNXUL5N);CAA;IhB9y_ ziTzH51#t22VulLFZSZ~jacl;14HzB-T7$WL(EntYE?^Nru_Rmtp5;6wXWIa3c9tP|jK#hkQP3K!qZ6R}z!@duA z4>5#T4iaE1g@h4`qkdT9wD$&x}B z{{DN>4aT+1MWc+kwIF|z{UgT?AL`=e%iPENnwdvS99zleuV zwzI+?mQ~vjrL<-A+o!^ZWrH9i7ZemM;r*xdS^$k^AZpSAbPH}%dyM+c4Of+@5Y!wy zdAadeD_4t%B%btdAD0X0W2YZLc=Ckv{cHqouV_Z!VN$H5xY(PVmN*t`fld^j7h0h}As2M1ZpmkL+7{!L61hHSRkD_r&TG#rOpVpIQ~T6b~k(qyjaSL@q5+PBY_sC&CxeDHeLnv67`Vi8QIclYq+K_h=6!7>NS_!raeNRwNQ^G zS$?W}qG^Yv&$=z8H1nPGxvl6P-v_uNqCaiPI=Q*_WzydUa3CGnv*%0MO|f*lGM?k< z*qY!*CLGNBxoo}Wox82_Vm{GEXnGigT&=JHEF&L=d|uq4#G~EU)#ICXDivNf)T|8J zU?6c$g27)}in;=o;<)KF$H1VFQ+u+lo^99te$gWH1Z97pt zUJa9G9AquR&++tppHWsov>kTR`_8SP&wJr8ub3-x2LAIP70NF{n9N%F$~7;w`6|B^@1a6*Z*+p zM1IQ#31vS@RWcI=@8j|-+`NKSD65GS8q<`6?5Y(}$?ShVp~-dB7X@OkLJa(K_!P73 zfw;i^>012bw|l&_(&s;gtj6fbkrfa|5IG+}7N89B-nw*$i;C^&utyW z=u0WMtzj6XTG5l+`DpyPemfNZvmI`oTRJZ2c~*O<9sKMhvYsWpRT~RjkY0bVjBMl; ziI`gnEm7?AA3N|6$Lz9DF}8dHA2eYd@rO~wR=Z@-T|hk#yy1FSSbNbWP4K-bZA6DV ztM&T{p?suV=+@J)#L`=g2V3(_<^^3lRnPT@^fVb)+#iQOO$A|F;LviW*q{8%P!Gn4 z*h~sdO{B@=KBbB1K)M3}U1` zTT7DUCYX4Qg#E3>xEJL$%&7TpnC*eAG&d$j(Y0y%k@HSJADxuN9Ha42U6M5m%}TAb z$sJKU{;OVaoX#M)O ziIEZIra+&sH|RgsvKwDu-!EC>!dZ!Kt5!nWEK_k4*jUk?srbdMdvMPAkh&5>(+opM zQyYUUN@DfalX(mQ)TN{&b%K>_A}YA#FfsJk?|}ZUoPAM&=Zrr#*71erFrtw1hK4(? zyqu`fKwDxQ^GJG#(4v8;j+L#A9oxH3*aZaV{=$g|pP+3=9u_4zMtLW9*}RUmsZK5J z@BMu|sq0M&4Lhrg^_7l@xcIQ-&-=7QvHSW3_4n4vY;=}N$(e+_M=|5@HuNAdGp6Ct z{I$YC2(FsCX6MeG%apPDp=LeW(*G0zskPwNskem_t~9Uw%gYhWWzllSY;xDe%C_EPns~hBEbtbUR1}k@#yp?)iB+B2!=c-{H{gYof$} zs;o^F1I^)#+Kf9JqxS1qR(DFl$WSZ|QYb?_czoWWbt7$vItoJLg4W^mocOBHPCxHZ zAtX4VTQz)!UKAf~CTk$n{a88?PbSHh3}A)s*V1Y!3%e6hyiY8oCK42h6~f*dQ+{5{ z$jq&Qrg|BpBd&x>BGtaFAOP_1=ZpZT62bszn>uVq#&IU9MnF9;4989SAt;evHYX4+y2!b%W2GET_OhZm8c`T_{c%E{Q$!5 z7!gmGCi^*VN$>(g?LII1Cv`|sZO`=!W#sUh3Q&QD8pv3*4^kgw*m5&2;o~329aJ8Wp8t?3JOGE| z2Pn5Mm5*1nn{C<=LhXmVIDzrJ=INk~xcU5C*s61JQ~J@903O4E38^_SzA-2tgs7<3 z_?|p90CmKoD(m`+<^;9mlw&vSXO84SW`yzpOT|6 zQ{Kt?Y@x8TTj2Yhj=D*ZceM)!QgGG@%Wm+%HD`3QwCvt-&@08ckdinTw+JBH@26vW zcEyJ+Ib`&sXZwB`onT}<8G5|JO#K`xp`ZYyVJ0?vkZAC3c83k+127z{HyGf2(*U1L z{oKrm3%6JNrMOcKANkn!ZmhVmc-N47!+getFmw@5zJZ7bOaRP{JUK9&0IPk&)v*D%i1GvgiaHu@UtUr*z@W7QgmBOcVWY zt>yJ}WS6M|ovM?DatR4Sgml;b$1MQ}8baAI?}D5I4Q0Qa{tM=@CY{<0#m_@+p~ZW? zYiVn@{ytE?FZ?N7W2;@iaPupG!9oxqs0K)fV^nu4j?4MRlq998a94U;K ze>SVJkt^;)#MN=d#?_~k2NStBVzJGOhF1%|M5f~TFf+g#qGcl66k^v6I0R+Dht?~& zt_?iM24Hx4oZT<+GdV>oVIO4tcuqJS_CpmMJ%e9y^|n1ij6TfY(nW8oXPxi>#EKZ( zxXfAfqrFPE$Bc-?AL<2Km5sd@5Om11>>d^p@tJw#?qtN zpmT>s;U6 zJ%~%R_@CqxLbnGPe^>Nm>2lsP{?e}E{iF_?s=$!DTCvgoest- z>fb~s5k|z<@An*8L9b(BnENY5acKhg=m3ZWlPtz4Zl+uD2)b}y8ML5`FM#pT*f0Vh z_p}~NrRj_W?uiwcGWX!kn>Tm(0ZFTxDh7M4I7BN=o(+tN^Kq;f$T_Y4SOp|*Y?oLS zV=I}&1(kZL*@MI!g>Lw~xJitJ87F2WW;k}}mkuowF1S@jPBeUD$NJ}Kcp7rZ*>^z! z5=k>%(dSt6W)6d~5t@g)$aoQ2tkJYaykO~{G4F9x_T9wLmPDY9=wH2hbun!7D59YM z1$M!Xfy9IHjnwwUhC)1HEE(1=(2A#n92I#KT39hL6;ox?|0|2sJbhb5N&yPw82l`9mXJ((w16bM&oX5{+ zxOpXv0qP$&!+h?LlP<$F3n6s_*gLqF)@>*^oZHS6SJGghZ41V>1|3_CFu>Xb`++bz z$}zbFkVf9vW%%K&AP)?rjZvO|gaiaMt2@1)b%{~1278j>v=8^FC@Ql49F3R#U%R6G zP~k%9$qa4LpFx!Gof^AlEFIh+aGOph#bKlujrCNUqI~WK>E;oVJN0uD7+$0k{{N1k zXjR9{x-m@uB%mH*xDQ4(IFfGo`PJFRazn`nB_8;|6(5(5X9Qhn#ikKb7G-+mJ^Y`& z!cd=*;K%}AmYnn}`B6B4k-xO#!r8u4Pz&n8L{k1 zmQDc=*G4l;X#b?61O1=Xw7Zsey2j${T5OMc?I{dZf(Y)0dyagvI7CzxwBAcmd1rCs z%38ra8WY{Re$2(#6f_`~mFhqKggHrPF{w-{069r5s0o!OvG_OG@ilU>=<%JrfGw?u zAwY07Cf@{zPN@{4Z2pDG@7np?BBgQ095MNQKhL)RDVY1}Y2Z87qG(!mdygh4yt|lR z=U^WAtCR0A9Ze5qT$kid4$;s+n((`ef(iAbGta#Ao&KV85-|__^6%Upo7OkH^f@pa znQsGNi_i>|pDCoGL9uX3(FK1l6K&^6C~UNNaX|A?b^iYwj~N9F>eJw`!tjeB(my`ekKaH+29gIjiNSE|2#t4n zVuIy|?N(JW725%D#Lr9gqA*dMfNnBnlrG3|rGanJf|C+AaOd1$$#vy!bI-&3_>29` z>uFP&q?)yW0K=cF&lrHjs#TBn7~(-?pufjPjkgzRO3o0ncG5e-3~}Dp$qdEUQTmTt z%xoXX%PMjn!fiygPRSgx2TQ2iWisRY3Iq+{q;eysVmKBp{wbM+bAQ55YBLc@TUH_- zK#)(4&s4A?lcSSM^$l)r9F^gKqSOE#s=4Srly?ii^W7G!4{`3AAPwCC+(6p}L^CKr zxcO!>BAlI2Hq-10f3X@=*wS#2L|FLv3Jbtg7sn^%+S!NmK+0bqcLTO~eCM|OLg^MS zD}yUcGubzRy+VDoi?`=96i+?WDrm{M!bS|$K&_&qGnUzZR=C^2zCy&nsvqCv@#(j7b<>3d=5UHZLJM*1Zm0?~?l)IB=EITe@5@g=Ch|Mt_mC5=2ch0x+5Ult)+6u)Q7@p52Sr{aP=GqDxOB_0g zH2Mh^+SN|=mv<;DKanL1!UPpsppPrtXf_m0$|DN#GlMVV7;cUzR7s;n3N;waeUY); z4I*88#-KG}e|{dkd~wEKsG=o%2b7^kxiVz2cf#V=(=uH+a zpqmgagm6N|OII*2edxJ{JEp50_i>tq{N*29goX%B2IO{%%~@Yt zGh%>S7l6k2eIO;2V%FCpmn;V3{}IYOr_1m6d<=y3H7vvQ;huw75qdHStu01D9g?)j zFOVD-`z_m<0EQTel~_%BR1VvOx%O9tIftR0J~M6CGIFG%)wt#3<+aKDu|ytE`6%g4Sgv3y|2ExV}{ zkk%ezoCCC7_@)_mcRAuWm3_$mO3Cs0%$ZW=Hx~pj+=TKyf#yhsu8D6$ZCH#b{s8&< zMCTa#5LFnT^{`R+qQs$elvbu_e37?5$@0T*Iz!SU?fj!*i4so190{y{v}?pn+bS)S zA`)>6yc!9y4zu1NGo^hd)^&n@Mq?l_2((=67fVzx_LLo~s|1}tNH?9)`g4j}HOMU{ zFkM>_5!_rdXM$o5iReM1*h(E4JOKrliF8=Cp zvj5(ChSYpY)o|P^+prkg=~)AXGkVX>IuCb_R)iS4N>4cFWr$n?Up^sgXukY>xc8VRSHgU*m02IEuN)#U+up$R-QB>XLYh@$M{6`bK`+s zAnHg#?u3W_u2l`+22ipD34n>i6kxS~@*wIEH3Ea1?m@!v5Qz8~9_6KunqKoZ4o?a= zpip(l>=zk(_1OQFl%xMd23ApHNx^F5jKbpR-%!yEkE$eD6wCkqTD0YSDGI`e@b(b! zmAg$2?$iH0-5uX+Dh|y2aywdqMQ9Rn@QAc|accehi~DStL}4>^#VCP>K#o4)zrPeu z-MX(L^~ff3Se;sY7w4{yp7E=@_UqfcCU4yxXu6*ueeys6Qu5#LauM%hN(K-Jzy>4* zMmy+#eHDDBOKn646Wb?*czk%m|LaQ%sC%I)bUZPjh+vj*#jjic&o`MKMeN-J17~f_ zv$!OhIb<8P+02$Eh5U3Bz_iQvtw$HVg|s?^%`yx8!Tfhu-(4MF`jNSJGtWNmTMwIf8n`Y;J?xnI@`b#*LPJE% zOy&cVhKPoU6XsKy58?)O4IgxLUW~lJbB(9ipdkQ%9cj`K&=5d>9huxhisFc<(%X}y z9oHxd1VEhGg6Xta!RA+bKykCsu4rF>@CAd|iVh1dn}g^CH+3L_xOzk|5C#A) zR-V|zkw`bJyEJ07F*^?I#C1*ZTYo34la$-tQCquR!gHvef3Z|!>j)_G%zBI$>K>5W zeeC9q8-egK4MgHvy`31OCZRb%@Zy1Xbz!1v076{$c8PLbyUR>Otle=fYPD_pT3TjM zRf!T|m<&x}k!6HjQU!g=eoWXTDkj^~^XrEj`jv63Yv9Y%1+fi{3kg8}7Z1D8@QSHh zkPo*YQ(|I?oa$LL(uZBFf<|~C6vZTDL@%Zh;yIEzHln+B%yk5<**s)6mYCLQLqi8~ zlh~XAsIk`I_XCZ^4xk{jLKl~mo2uvr`#u?PDGBL|&qt-0kBO~?bPu9Y|2o$gz$5JH zkujd!*^4eql>Wvqb4~TH+d0h0McVuFnQ~vbGNvB)csG3O<_Vqzk9Qk&xNOz%tKe+u zep@xqo|J>;=j#)nOj@7cAaBy84UpW|FKOf2&FOu7lLPQ$wpE0&c36jTKDM7N%OWEaqsTP zyir+)n{W2}+#a&6ICXb8<;uj?_~{TU$Fy>_bCE)w*Xg<-Q7o zxim*bFc1TRbB*NJt`3&56|@!H{qCxH`F^{*ioOpInzk~PEJQyDa#`^-L~u6GsQ7X9 zl;0_rO*6F98Us!(+BYaaUzq#YbM0Hq`9^+*GBa#*2bN}A_P-N=m zm#u;74VxYQK=^&_FVIXgh$*w7=vI0wV&QoRNPuR5Tuq+5zW`@bgIH-!p zM#GU=F!H_HW5+Qd8jWEfpxW`qmkn~{ku=D{hKf_D#839A9wLjIk5g}rEQ&Cnb<0m3 zCW&%hrhb!0D@0HkqR5SlM?mS;r5JHj%z*ED&u}Nfuy8)c_Ml-}b{-H*Q_+izc_#+g z*lUdm8gSmcfBf|^PkG~KO(?_#AL6a%DUCO{DsWZ6d9%-)XOTey&g&x?Qhc@rpOoxkSS%eMVN)|kgOhE4R=-HD5jp}@I-PdOwg}P`7*H3+d9GWVwcW4wLKL7l*ft6( zQ=LBKQLUIXNCY^PEV9W4h$J{#A6?re`@Z9uxveFC%SYK{dti7eg3eXPeVoJHdjfNY zTK`z@brYhYEk#d)Uz+k!+<3lJX(~SZ)#tqXkdj|LC4+#`5K(jG)a2NQjS+i?dzqfn zC7qy{31nM((7H=snmrva5GSKwjPep`j+>AVSgK$cG)Or996fcQgbNG_6=bjB@Bxeo z2v~rWcNhFnp2!b03s7Ug?^n1dUR;BkWV<}SdX^-W|7 zCsG5Ecj&RKg##3=%2JGjOaD5rSbr_XKjb$TfY{UI6^`yX4Lt*aqYT^bxwYeNp20J4 zzd-p$(B0();+ueb(KRufLhc}CE3-;z?Qlm_N1Z)J*;ds)~kmrpcYCl*9SXPkUXj#vRa&2a7t@5zu+Xoevd3ZtQO^Zef`fxQ>k+!ojhTehTaztL5D$5VqM{GHl6gEfnBH>bK~d#_7C2%8g_5PUr^%-eMOSbFBJ7Or(qqCao;z zEbIz4y!2$-y9QcU1xg)Mq|b!B_U~O$U=bJBztK)<#*Tk}wa%nqnAK<%9%Zo}rAA8V zD0@JENkP5zm97vmrl#FCALW03wam0tu~mtZ>K^>ukyz+&wK6fnHDcV%$Qga65TP_; z{aF>r0PnLHs&bIKNKsTl&dYWJnZyEFu2JgowpMX{rC^}7F^;+bo5X=W ztVIcJjKQozNd80Ie!REN?|thvZh{K*x+EBk&ja@{2y~=iAn#qE_sE8`ojTBi%%hYL zm=6t>UI;TAl8E8Rcd$qs7&NF%`tFb^+wr`M{5weZq?1M?&QNjnJPSj(+2+@eq>No9 zq@jE4OqcsHO=Oc7e0?29Fdn+r9vIzr2^vdhH-gHjsz<@lTMO1SR~wEIEv>)9bF}ia z_+rCcB-oC~5SyO8;pOAAMlwNiweoe@-V5tPG%${WGD9li|N8S!%tq=`4Zj&hi~*Jd z>;3yqvrhw-j-E;33UY60pxu8aiT*~dviJL3EuCf0qJ^jeFGv+|#rk3U653Q4&yvl7 zvMmrTzV+ekeCOv$7THuk3kE_=%4&OpDrKRvF$!Y+WTG$s!OhJXcqS$U!*%>ti<4>n z`+aWc`tqhGJFCVD-EfO8$li|#rs(C9ELGsW3XBDf0LFFY!3rQ`bY{0(omJYR`a$`9 z>FKSNB>{#_X3CAo&StDA8?c^lF!5>r+V1}9aKm>CMt`icd3V+0axl+B5B$@}$Y;(w zaU%!TmweYF-k#+(ia#b8^ab+|TpHX=VS|2U{>`bAmye~ILd-^SszDN$W)B_M_f9-rHLNx9BuBo_#VXoL zM<&@dBC#sm&HuK_M4GZgV+S#=(Q{EkwW4(@h$49*KrgJjcCY&~F;ihyC={vIU2y=5 z|H5;`;DqLortMQVxF21Q3rY7_0?vRGbyZV1WjdFutsS+jG3yNiOaQmKjRY%W^n}zq zuD=b+^8*Za9|d{FRwpvasrTC_L!_v~1B!FD>%zhFXdoTN0`L28z2b-I6nsU{*3xZ^ z(@QJcE`dKd%CdXji#6+$V+X#RD){82F9M;;!K||Uwu(V-6db59znk=XId+8YP)&st zbVKZYft7=JAkVF)E?3$+h()r#sZ?dkW#-MHGw=mLD59jf>3PNM&er!j0B%2_=br*v z%VmsGhoh6@h0F|E(6ElKp4|j1`i066@P>6Rx_{pc>I6O;7iXQ!AQU;Rq30LZ4<7FT zS|4-anPIJ?O5)pgGrg$YXxGrJMoORgYU5H_D@XWr!hCL#qf$LrKTafa00B}{*W;2A zl08B74dlzFf+^3fRYek4T(giYH#QufDZ{_+=nFVr2EfapmKldxMuI}BdjgdFnwQY5m6npy5%4c%f#ut^#u@>Vjzbe4H z*{9?=a%Z2FQFb#tYXl63(t0NQ@%O!|9V#%W;{ThABQ0vHR^Ib&4ga zZ}ME{DG63YDw9+UWth2Oe(f|G)(%Q#)AIqoxRH>iq4zJ{{`@9)Z7`%EAmhzepOy+f zX5=W_bUHI~0@JuU$IsBu&}Cnxhh2_Ha*6i!PX!&P;>xosl8o%qxU_Y~67L5v%0+fV zc$g0FMV7*-8@b=EtvY%t197zJ=s2k1WFba$w>H7JV!m_Xe1H{@KVAyP4Lpu5jy()Iwsnq1?KWhN1lJP}FS$Nm)~4zD*>y?e z6$NRKDISDq7iIuFfQ>PsJLEc_!|u1^>lFmw$d71?$=N(zJo#p-&twMATEv?WKuyBo$U!-XLOW$;gx}*L9>Ox6tP29|)xOZ25mMWQ7F#X~>Haj@*?o)5#8F{W$+Hc!t^B5B^1U6(9ZDPwc&ZA;Oktice_u4(e=DV50%IG=Q=)$;tsH z9P4)rWyoUK96$|uQW2mWXI-m718Jr5s+B9R3Zh1C!BGPS!d}3FyR9(s*&IqoVqwAC zW|T%?+d4l-O+Y$CfOmK_^+|4^KN+y=F2u1l_8~W@e4bj@1}M9r9$Z$(eov&sg20?U zG?mA)D$f)>5d|<1)s+rP!A-#?t|^{My>@Qo?(kSZl5Bb~8h%G{9PaQVeJKurtRc8nQSA%DmV>gfXiCFu z<-HI^Kzn#jwsP0boyEwXZ=rF~46=S1fXL=9mjk`97TE5GjJ7e+sZ1lo(lJ|R7;isp zJ_s_Pz0gOW7G!zR8qa6cuvT(5B=K0GrL|ICzDDGPgXJm2^GWu6y;+@Ks`s6IhPIfp z`7wjzgC{NGZJx=vI+h;LpaEYf4UzB<{QP$oQ-w$?yB4TT%Ly+9jERaerOGOUEcd3 zGBq}xJCI+Bt05v|DHq3wPDuWSh(rM{2c;Pmsdj4b-NUB|&U_ATadpQ0J`ARmqTYMC z`FT60qT*NkvUjO6m%#z zs4EQhO)*)3A`GUM&76&r?f@EifbujfDr?=kE+ezEhY`l=4I8TO_l;thG_faK&^p63 zU*YhZ58po-j`ExmyE_+k2H`6i!#z65N1$mP;_S4_yz)pCXaf1qjTyp5*0MFw28Gv^ zvY$P|4$83Q4pzO?4Fo9yP2yd5cz2#KJ#YAHBp$GseMkked#e`QA)K?LJ_czdYE0Pw zVc}Ns+2umAyd^ZQu;?hIi3aoa?5|Su5lu~!bpQ|xMZYTwpOr>l6Lx@z#zEsuNkh-! zhF!`*{U~;Y$FG{SmP6o0(Hri?;>60M!43paRcgGX!MFtf_L zLKIMXZNb{o0z};qAbk}97_ThGD{}|_XiR+jvJxYqdlgrH*rLXqeI8Nkk^r;k(pB^| zx677scO!j{BG+#ivhaHjJ;|{%JbYN!FB~$?7Ra0SAc>@#@9^#8o?k-dt|MO_u5L!I zr0hplZ9N}xsCGjwS7@YvC+bYLUpV<#b^HF**}*80i#VF=dGk;sjbMX$Pl&G(oKegJsOS~&W~mL0r)*(fn%5{LiVwQeJ^Bs@m?O@=c^dq?Hu z3D%){8BVJPY_ZkmbeSWAwWF(0XZEkw^CV(`pKe+>Rv&WL0&3G2?^>T%Z(FYC7<$(* z^J$lZXE2O2$uJv$r3$E19J7Vz6yO6pfK-%t3>Xnq7-y9J&?2oD%p6G*)_$Cl)Rl^B zTX$CX3EB@jNIw06;w0C4uzNm|js%2t0Pz0hU0F3kLi;YRPDp zn;Y~j^z2`3;huC!Z2YGtc3p?;fXnm)O=AJpZ}nK>m}0(?xi`=7(aHvjt|R8>haysz zP^BV9<$qAzZY)xQ0yG*TVxPC!jWnJBR-cLjA+&ZHhT$qBmf{F zci?Z}gVFs1v_eOgWZQ4`(eiv5?ReF^_NGWH--B@{n^E$}fY`xZgLbvu<;*l2h?bb_ z=y;f>Sg7D^dY_XcIaBVt7wUiKhCltAkmmIZAxwOO;7!;dqw4gTGvqyC=q-*9yVfrk z9=}FF2vh+mkjJDdNa0tHz}cqNa{1b|<@TtA2&o3p6@-H<5Y4i{VC&TPg3Ff&!#HAH z_^-xIi`GLt#qO)@320zmQm3;a(YikLg)Z8w4*IH3ktj{t00 zo?JeH0S-r~CB;A5r_=?=HURV`@Gwm0!A%g0{|F%^6y%etFn&W7^PFNTe;|XA@cS2V zFx!HPE=YNP7hRASLVt08<6)!;3FPEse!2JhzFp#exiGvuU=dR4j*k8|zlE?wM^^JA zRTt}?o;}QBPuM}dUSUCxba!Ret&Ga_r%#Kjkl@p&0~Nn)2=!khI^GaTy@^I~DF;%k z5Tps@3>B7)k6`Yq>j}T`n`Rk%Ox4qZm234%uh_1QamRUaV&pur| zFw~we4jjRmhgl@vusv%b7jth;?$z;33LitxzTTZ36^plfe4ggnwb}ES=XoS4KYx|z zgp^V!ktyXVDR*bp$`vdyL__Wf;5Mp&5v~rz9Gm3g)7d1~w0lP5rGrg@RZW7}tG|Cm zFJ>AS=Zd=*F6cNVUK4jY(JH6$_{@ZxgV#DJ9VVYLh_J7zj0K-mGdT!lO~5;Di%9yS1PN-V3M6~e;?<{kCAEO8q3!P=5IU{3(9q4#?h zO9ttQGzk6DfOQ)aig!tZ&moEEk%Zj*m<~-(mPEdG&Cl;J4o>)qb}c3oB1uejH>vbF zQd-XGniHPfd)MVTWJir~Hn75-?(^YBaDf-0IP` z*=ObwxFt4%rz{B!dko@pDANKYo^j08Bd=E;Cszo%u8l~N?Btt}b@VK-v8sIKKl~_? z(z5LmxJ)~ionRgC1zO7WwyQN_r3i@zVtDDo`SWY=V;k>Y+a*DGH#`b#ovi^m>g1OC zo(X~-f>845HHc^R9w4pIG9!PW6qqiL0d>dSFFOO86pcHE{g;|ZV+fKpVb;7M3(iPK zlD~Swt#%zhXfeebL{0E|9L3bLrJ)vb9xHw%S&?ncVGVAO5EQP| zb)C*HUnTeBoq#b!Df<2~t80)=IJ;*kG|e&a5#h2?{)pZqdHSkgDv>JKXv#ZwNT77K zO-re3;XLQHNz_}B^1o0#V~2)->?_FC)RlZ% zL^YYl06EK>)^-ohYEFC-YxOCl{Y07ib+f_DgI*DuXkxJB2QAUypmq;;8KOc)6!O7K z)#V4kWpjY@B29W~RnxwUJ8KSa530{gZ}qjo9k3kRTj+Bv}@sJ`uS%UG)>9Of-U#Chz1~_MnE`PJ)1JXcRyg z1lhZ0`$W`Lc$b}Z=Q9Py>UHxRTU>i_k8?!-Qm#os{ISWVRv(*AG@j%6EAJ099Umc6 zB9bwL9ZzMi&$|c51)SHVQ04E(FfPv=z9278Oy;3U8z_S~Xr4qp zetgBi{&uMoiUJy;1~%Im0}x#_$XHD$J(IbUcqp7Jh~HK);_DZTk^XsM8*vG2kzW^< zy~Pe}=#v=ZybV2rQpCxa8TZ~ce|&O>rZk|qX~~t$-;V;HYH410fKmoYN}j0Amg<%= zI-&b;`S5{HFwR@l1}Am%4OwN<(6k^TshF9o~tbxOoZp_ClW1f)XCn?db0oqM+lT>XXq7CND?y z^n{NafSE6OtZs{P(Z3hfJrjKpo3>B&0KEcCG_SIiV=D%P#Lt(s+jq0>+*g@cjfPeX zjU@%=^FPT@Qy_o))1GGZB0(X9Drz%c`>(Ghrqo(RN5!nlkgT zP#3eyt^Us&XSxO-yKvd^1 zyqMkf16zK^VK7A#gu#x$Tgai$;ex#V)QBuz?=_+K9R8uE2SyVR3YfAsccED;1~HAL zA=*MgAiAD`bQP@HTw`x>b*^#IU^9ZDvmeYh6ukUI)g(P1h=kN5xtROlg$c2QIp8d%vL8nf;lZoeblKN~Oa}UTyj%mYwP8DkIEkR4vB^$0x zic1=?u7m_I*^aPk;EA-GIB=z;>z64(Alm8iszj4|BAvVDrwK$BX7<+q=+F=p! z#dsm(g#;v~jDsTJbRdN@N7T0_r`<6z`(89oQ7MFkFXIhgjYk|Sy1-8A#&0fwUMftU zO6sJ?F(UfA)O7=cgV~8|bN*5G8(dlqt5gW%Zohf6g~$Q`tA5I*wZ*}oOlW9qY^BLZ z*w5X7-ptXSB66zfNnkvoTZ2lc$s|JtZRm~ih(@*eZ=%u0?S0odzW;?wU zgM?JgHtq16eeuhtDQgq1Z`v{5`9_ZVlm+9Tyc7&Ld3l+RpGeNr9;*b41o_^X?J6cx zl245jyl>_Ya%9EKSPM6F$tjr_``Bl6x!OM1Pb}}0lWIc7;U`XvqX{Q2Sc+toG2Aga zOs-(_*w*71jb1F)E+|N(mOOy=n@HD}y}fB#6V?v*qiC{+xEC3jl{(1qa>fs1F!mW9 zJg5ktuW_FB&Zqq0-ueBE+^b1qC|errWew#(yfyaS{`y9Z`OTV{>-#Pp-*NPQ@%wXs zWB;tF{qw_{ZyaRyusVqIFEyv2n}Ebc)A0|+8YS)-GakXZ^ubeOP`L*N2bU@Dx-a?Q zY2#0Kk@@vC6Bvz)Xi%6+NM+j$t+uBCx7RK{*{$$0=Si`5IQo}v5sMj*KlhzmogF;6 z%G1ossuY}kHJ$o1t6v|8huY4s)co?xceGELCvabqaSJF6k`9biIjtm?Kqxk>7Gb=Q z6PJ^VhU;*|hak|k_B%Qz-`y=bbU7wkYwzAyQjQF-$7J+2YlZIjr!f7(7(YM3OK)$Z z<$Y!Dn79>#Ef)A<`q{&|ZP!0zkn18|UT)LX6_0K}#0{U6^M!o4BaB9oO@RT6$ylj1 z%3$~ravytm__nUE?f1b!b9n4R8jq( zrC4}N&F8Nl&9WdO#@y;<%1^ap5YLp=nxEo3X?8pqYTinqq&Eo7j^)wGdzzlEH(|nr zjaFM1$L8ke`;Off#%YW>wafng{qYFLVDtbrn()K!Q2|cgq40mo{e^LMjwdN)3akhP{l7i zoL?&MS+F1^1n?!klaXLjKf+q6rv-8LlwPzn-QkoMFjH4kFlhyN{fr{go8($ifpH(u#lR(+6Kd|8V;aByh%m8>T`;E z?;R7}VxSBvqySbppbFS}d%MnLoS#g$%CfQ32}3V&W1MiZ+e~JxwEs>|4ksoi+@J3R zNxZAt>C19UCKHbrau`!*7oJ^Tn28xc?Bxpm z7XZsgpjpyFtBbe{u#S40>dIi8K7eF;~GY1wxNi0}~iRB3R5Yj$5>F;UDJti(}EiEius{B+_7(9gO%)Gu|E3bYJHq=Se zS2wU5ZPTi;w%0FvR@{OSnYz=rjoIq{DRBKlKRAWT)FUA0Z7gpyr1}G|=4V7uM+E`+ zNjrAto|fk30!#oKe=-OwlEgXNl$6}(>t?H$>4KFBS<2yRcZTMe*<<9zQLdz+*Z#=b zTie@j3Tnlui)cL+G!5zm-&I5}^?K_;1|$3l9$vB6pjb>y42FkIHD~Yt@IC8#6&JU=X!%S3 zp`oEG`!3I)I~P4Q`7D8PjNI#{_a~zBT?F`CQKwKnCKscp!J+d0X(^QJa$4faQ5a4( zla!cxICObn4h?)WQHX*jbcesL?FHd^JEPO4FkW0=#K#B2R8=*#F0{K_TUxFPBDzjI zP-dT^ixINSeVfK9UZ;mTM5lgIk__$^&VHKQ?Bt~R|1|a$P*tv5*V_*8fTE(PV4xg9 z5kW;s6^kQb5K1eGf|SyY0d}HNQU;wWB`F4?got#BC`dO*?r*LQ-h010zA^rPk2}Wo zoP+H5ePYF2bItWdps^t+cyZ&%Qbt3_Rd=D$h@%OKiD&fmmWM{2e)9la@QsUDVm`T$ z>WmYCBIGZsms7JP*{qK_IfdvAe~G4cZJ;iQtgcycPhxnf^`V7tM;^Y1ute4w69fMMEuU3X+BI(r^b;T)HcP95T zUMFiy^{Y&6V6*Ui%VeFk-Y>#ILcfD39uA2q&JynV5gR^+!8F({5!vMG_B%y4P~aNO z_k5OV)H_!93B-Mxm%EX78irxgZbFr@?31y=ELJZU8*h+8rtbdz*LCcEE=YsKHtG8m zS64?tGix*_VB{*EB^m*xi0XWX-j3$h)~~3?!}H(*pt-j6!-p%l+3}W5U*HlkIrRV* zFfxUMA$ASRm8%_e!IORvjsJW1Ugpm^9*1;IX`<^^;R+xa=-62S)qThigb)f%A_zO4|Pg7G< zkJz9I%Zq2}QWXTF(#8p;FirBMf&xMK}4)t5&*xP%4e(SHln|HC0mGd-A zf^z0ACzQ2`3EBsRaSfV@MSc$ZLq&fQTLTFtu(!9D^@vB0;XFgde8+>$9H3F9e3rJ> z*xNAxnqP?MX4h>r4gPJ(|8YTAEc5)d;J@9ZSLI{Bd8t7`D{u`$rb4=?zK^BdBvOQ{ zRQRiAgZmhQ8cH*Va(xpUxVWQLKC_W939 zi))tpttf+Jq^;$~3FAJA;Tnox6}`>F*>nOc^F{=-0o<^fJ5-UJ^auWRAfPX=tXgr&b~; zP!YQtXey=-6A$?%4H|~@0G8^8l{(Bx-}LFzEm0`IbwFzc+~7fEm#8H1s2sI`hObK0 zbWSe#QN8b}e7Um{ZMXU5W8IJtYQO<)Tnd95xi9O%Sn)b(UgZOtg-Wy9EhVsD+!IHQ zwF3sMWpf(PCPFqrDg7vgBAUnd86xc?KBpzP-pyziq}bNV29L$%?(S}hQ7w2Z^wSAP_iC@!ZP=i$tbCgvwC1qDz~!fX&U$`&hE_$S)hpgVVYq(SCAr!b^NQc=_*_je zf&i;krWFc$EXgVj9A>p1XFN(2f2xpvD zjB28X~;#oWkHirT0Rl%N8HTrzX#Ft*>9kdOe59_JcpfIx_3oN+a3Eq(Nb z&X76+ym4H+jO$T|xg)L}Pt$g=d_)uaC2&ITZgTGY^7Gs~+xd)zqKTE#bzzyS{N_nj zQRD{JFuXVW9+t0Q7|eyG(-Ot~N6vj3z;XIdV6o)YK}$zq#xg57W1-KL` z?w2pC9zM)9|ErYwH&=Umdw!>RCl+ZQE&6%R5DikP98-FhVnbOWue)&Cb$&XxsHm(E z(vF_EvAokg_(?xs)O z3{Ef&>biS(Ztd5{xB?K?I&Zl9{80oXu2(5EFflRt@a^OuGyzQ+D`sfZ< ztn2>=P=H5kV26vzI%8(a=ewkV%&a|sbGc@~kR$(?rpQXMpmO^=cwpHE+op5L zWO@&;#j*GG@!2FH!Sh)SIVa=>2V=*Vi)C?_pEFI=M9zWOOdT*4paaLm8Plip%cH(H zX+<8zg7D?%lC>Otcp0wpodF-eW;|~|e*i+h^-UfJvdcdDU=vloOb&kSnclmaqMAu9 z_%(oW;?e3>D*-%%xKjwx#Hx2Q#4_8gFGpG*9Zv^84R?q$zdd6*^cjZu1*60buw(nv ze_;#N157cOLU*BUiLC8qcv<1Rd1+7pt}2^)>~3?jQLVsW8h6mhhV5tP&StpgSfo@> z+M(D{ijfWShd|1}`Y!I2LFyI>0^)(yGp>A*9jljZ?ig$DP_oOwwE%#Xzx_5t!L#dv zC-`kFWDeQZrW4OT5hWL|2G_uOt+LJkGnqHUy|4inD`qc~KaSvcq zWRJZTr=_JKsiMFa#HNk4r2wbGFf)_849QS2S|6zYh^ABli0)jEg{DxOVc{XZOLR+Y z)9B|*z_idKf~*l=uYr?`;;DYMlb)L7+3%Ooh8Nv6_A=qfx}j{Bk-gO*D2SDbF$(EQ zD{n>h({OIP*n>#w{DJO$mB?uK0IT@g~SvZ`> z&0y-W1Uru9;bJtCsb9MEK0k6B;!h*gR42Y(DOd(vJdoDf`QPx!RF&aw4&!Lu3>iHQ z1HB*`_BMtQ!ji@!V#2~o_{BIBKIOM2%@iGn#O^#0z75w?Q==n)4{cdHcI^0Ylot`w z9ydcho}1j!OC_^!F7{I&d7{$Lgha_w6GC4Up4E;E9;G`lm_8)}ji0~0^BcNI|!0TlP9}r0R&*ev1 zn`C5k5MhU70=+xyMKP7XsiA%!$KXm z%h%U;v#992um0j%cHxGZqn<#r-~-<4^^QL^%cgr(!gDyTQ0zFQt=*_+cx`|?M3fv3yd?e&N9L%C%3GCNUWw5E z|7j@!G>zxwdO)xAMrfCBSk%kzm4PS|Q;oRCV_Qtat7EfrW7Fy0FO1B&Q?2Ro(gvw^d-%mT={ z&wMkEzqso^RSrI{9f!i~0dkCh_{poaON-bM(~(fh>8b-H^6cc4M)2fUF}-#K>aeO5 z%3-Kl_t^e3turR4zW#&?%T12jNzB?Z^OH%mo+Tw}fMuq|TZNmS3^jU)Nze_CCPp2x zQ7px#i3o4QQ%IJ`>mKRB8KyBW*gGfg<&Y{Mn}lR-!NP^%fq~mm;Gtq2Xk17~525-! zuWBkIQyGaTWdWRD*Fi;x$nz2sg5#Jhycp2ZgFph1u_}}ixB@nXOrVAV+CIS}2nLq1 z*N5vH{-zU2+BhfA=ESvFPjX= z`rptu!a5`~{5hCvqgo;bjgZi-SB{27MC=D)3%9yA>iX^5rBILw0*a9}V1ezTNR>##RUMx?oel~)QmjQ^qLhNN8`Sl`2S zM<3&+9E~bjbc>zg>McG2ng=!zs#sLCs>#F92%yC*cEhHd1X#pyjZHa1If zN_z&}&eRc?OreRWY_*Wkb>@DO#M!tDQ=EmN zctB0Hi4P7@njw@BouL)b&7OJb+**^E?Y<;af{cJ;jHf8yTVJXAGMhXH9^FtOnLl!=Sq zymc!a_$r`3T4|suG2abfEpU`@xB}ta?WA~X3y!W^NOF0|<&3B0W6_}|jh57RtQXQb zbt(j%*gULjtcu762A@_IRuxyG3W}yT)G+6>EfKt_Qv`R3^?P~A=nj4H>;(-=5L%81 zBOe_;R&o}W37|g6f^Ox{lrMM!QPhn$S`ee|wFTH7Zo^#lC}UI863{XaIE>YO?4mpu z?c^upjvODyukmI*Q|TCW0P0gdYWD(zsqkj$AH@%u_vM*$KPL+WrYGz8&tte={a4UO zAm0DRqabl__Hoz(<7%2nsAeF2K$;}grtWC)N>7)uvbM&0?Z*`+f=+s0lv$Hlz~GHB z%y`xTCQYIx8X7zcrgC3F%N60BP`SNwly4{MZU}-=x4U)gFZlpRJ#bV019ZzBx}Cg% z3Ku*)7b=eb^M{dO!H##z6o8$f2{U)I$fgIfpCD}{EKS1Bp0r>WoS zan2YorR?rY0`5Y;8_Y2>9WFy5E_8X4Lo46BU8GO7ll=UA*8|UNfWIHuyLWGJm>8D6O_K0ZW+w+T5M294l6CL(2pBn` z!B>Egb^P`X_@MHDy}CDn{K0SJ=bZf~DCgb4rMM~WP8!hB(LR-xvm6VB)>4V{W4kUFrVe$b>*@QiX#<3Hy8wIDWYz}{*f9h~2Mi6*W zh|Ctl!qjo-7joh*yLuOvlmz2w=swHCjP%-p_3PJTWKXYCZAAso{Ck~hRWud@JUSW+ zF-{5?Oy?VZa7~cm+SK5;($-k-#j95uPo6wU7qlANK@nT+*GzD#{Lxxn6=;oNhVU+t zq_55#DPTr|awInWi7)S1UEtN}f7`orHvi!Q$eFOcGfmt(-=96+L@+o7t;PP&I}e6B zappL)smCeJX1Ct+q80^uNOy;vcw|8b*BRnAEi}@3;~G6#l8sJC=)Z5m{$I6*--2Ip}LmL_%5+cX)jumRsb;JxU`$@v^Njo6d8eNjuf_LfDGf+(Sw7!z zp9p9gY7tiM10SlsRWm(iy;eF^4AI}JvqB&9x8PAooP_9WsBMb;*tiViaL2}+0inY9 zg2lcL#g_1JL0wnP*~?f(4bV)Z0a$zUt_ePvbacjh&8#$McZXXy{m#3V?w>I4UaaZs zJ$s*Wi^H72d0woTWp&IV^|}x8>cfXr*-&nxFa}r~>2rXTN&ShCg_1+qvUH#^Rh2s? zrCp*LqA{q?T>W)cV97^cw&JxLN7rb^TRaY`>bm7^UWsy;RGaD-2YY+gP%t{+h<~%x zmiG}y1}jXJN}4nB854@*DH%ic=GU1+hrYb*cX%Yu6h7ldrup>bHif>VjC4mB&tES|ENJUvyaQ-BMKP zsm?GIkuek@f7>d71`ra_Px2kIj3+JA**YwTXV!9wdu5!dIc zU5gkyy;?Wr!G|4_(;7P;gKFmtW5mJ8m{T|K1GvSsl&6S5{lHQt(0A+`$Jlnn)kWzX zu7ml^ZA+R5VXvcrfQ4b27lOrR6oG&J3PseqW_~b0tsOy4`?87<0K?vj#R{y+U-Sgx zJ8~q{;tY-`R$!`MfX2Fo(w&)8UZIe%%2f7`_q}HQPv?Q+Lx1+|3Zuw#3bM3Ef>I(i zqJ>Ro1m-PTlp-S}bVf%hdzM~%Q%A?`zoix%Y3l3imt_{82;QBKu^+7Bx~zBXH{gkM zA6T0HB;5;ieT#8fAPS(`G`JJF_!j-)zcPOl>WPMG0+&Gx{R~bSdWOOgmLh!o8+G61 zH_`w~X`^i{#Bu#>^{9ihM}4?*=C>VIO^ZuO(L__=OH$+}fmwiu#|nf1e5H5YH2Z~W z=40%o(}Hz!PO|;|Wuu&^G!cc$z+h-0v$8H7dSXAS{z&<83ei0~vM+T9!|Z2XbaZs! z>aRoX?WW1qrXUiz&6)EwI2e_~^?EsYNxt@A^m6v9~c+X*Hzhvwn8soBT8H)u3nI&bSlpt#eiJWHyt^ybwr$J2KG5VpP zz_Y07k$Ley%;l03Hj!aL(IJD=yQZebHPZl>4zbFrzii#>&9_d@@`3C@_q46!JhksB zejuws+8XAhHUa-nWV6+)-Db;Mcx~JRCrKEomAc5J!w3CPtCGjRSy36V{=s*K-b%u{ zv28e)P2kk~#bx`omwvyBF5gmYH0g@c05;^rR7j0Sd4=_fJpcrN!HAnH_;#`2w{nzu zVP~vtY$6g9)nTP@v=1QR?y%kphl7Gt`W*w5$uV~9C&g50LCPH_W{bWq>F%vjl9xXS z`^w%Psl|3b%CDLh0Z%=f*u{-X-PJU*3eYJgVD^yU<=ox~VJ+DWB9 z3_j3=$jfu|#5_gfj-1KR)^_W+bOM)jz~PloQ^v4&cRxYtiogt;B}I?_yh-p}IuWjM zsG2$k<(aEWq^-!0QtW!Ou9fB&<51xxxdCi`Kvspp%znKS=_ro8UE?PlM^ zP>Z!rsaDS`S~B)%!})@W3JqW$L#6`!{OIt-n>y98>3*g+Kw0-~>}3zJ!sh!S6$`Ho z*m^7Iy=$^Oulbk-i@6@BS?ql5>n1?8+2O|A=ZHL@ek0_<`FJI=V z9Lzmq{A<;hJNwksN*>MmKAF)FjnrclZFQwUMuO3+brc?-P{YWS)lDuni2^+T+)b3moCu}9sjr*?m}?K(2HhM_p?Y{{tKWX>TD=?0{TGQgiCVGQ1}*#l+$W05Ih>kYaGznKZQR-&0N`xUz4SIbYEHZ43V>gL(o!LyQ zEh%)|4&wPW4kDY=Cv&MBohU}gk2xzLjJRw5o-6#0pTB&0ObJ6mLU>%aDY8R4#CTnEMdCt^HxyYNdlLYRPEGXb`OK_duz7m@2+g5NnIn|8&dAYOJ ziq9%)Z8v_5n68Pimhe-8QQa+#L2#_kmDNZ&0k`CqHN9RnOU*vf#?tb`BChA7Ia+!H z(=p^lx=ohZBYSbDHvle_Ua!58EyFT|JimJ&CM zjW*xgDGXD-)laGZT(SZ<6(|W@F9+qT9D{9=e?HV?{SNdCpClq;4@57#a3^15LI6ws z^J{T2;hc*rIb=N6Dn@FC;_;750+|nw(ld>A11+{mX;|AE*%KC20xM zSG=hcAs(L{7+5zqzNZ4Peh>8;qbC_|B6iGWG={mLw@m-`8${Q>$YrXYK6~a3$7E4s z*XWH&3tkX%<^gMSQ-4E)K~Jg6XsH2S{QdDbFW^NMKOd<3aLA5`eD9JO{NVw`C`=t* z(eN7%4YEe{ISN|}Yfhl$t z;CoLW6}FYx#dMq*Z-#fR@AB$!Y?L(UYc8g>!?pFIJtZ9ub`B2Z--9BB`eI+ZPQ_~| zLYkfQqU^vTR7CFB;S7y`ahT2Y%9_S_=9kZ(IbXV}=Q4A!10ryF=z&`)!Hh3A_K;wX)^WI;#wso79!X3~tG;pT z)_Z#pA6XwSO@G3&7$VbvYb!W7IBXC6!aUy1;qv>9E8E90ZVwP{&r0~Ab$;wV_x;fg zYjknXcbxyH)KFOJ)!JSHdQ1904@IP^QL%S53XLq?$+P#mC>D zmnGl^5zjYAqSSi8_nlV7ME4w8@WGGMbMEo2^#U5*gK?SOh_H%KC0T2ILid&flW7fybQc|e!hn;to|CpS=0c&AK)%aKs@d~aR)7YP9B zIJ9jps;)Kxwc)f(k9UC=x?KV}H2^~&MZ+XDX;Wy|)ZV^@I^n6iDXy}uq1vYQ=IK9M6!aYH z&Q=d~a)8DJ^{MtC(Dw#vS5#JZntal#oRJ3cj9Iofy8JorF7>T(3h?wiMMtZsxcDSc zT&H6>P_L}Dsf`QDMI2-Sc-&XnWvD1PEzPNF)PV#K(ah`N=eJC>m&a6UiMT2I?2~(j ztJnsHuk_k>niVmVt|jQwvv%0^qB&!DXQT%T5%u0}jo%$ZCw#?`0~Dn*6cQv>7uyBb zXtCYRSEZAGZ*ute#rh;Yc#|KpYD2DlHL-cP_%3e79SBCA-#tNn!LEJ0x3hmVHu^$^ zo?h$5Mgy=E(e;i33Xgd$cw;^U@h_Val(m!OQXn_bhgl|7iP6#dWyT4Cp9=#<%LAap zMvf_S2&Dx57v;H74Ozw0VR>0JH%*-y86%q~0jbTONATFIL!LR68|9qt?cT?Wp7O*p|MttrA6Z(rB1bZ3Cjm z+{>Z@_Qv)DqrgT!1rF;%+wGW~w`pRfmSfkuhBLauJ~7uq)RRUltE!Aq`48d0zc|lg zLsiGBFZHi8@~}0hhx*V*I6abCBs*FZ7#@Ci<^8MPoGsyf^`qJ%9;z)9cU9q|*i|gF z*Ioc#y*LR}{{u1s#t$mNo`_8yYaKF>4~30;Ivct|sUg zNguW~J9XkjZs)JY+i!O%9X>^LXn+NrvF&KmMg=FGSbJDal+#_?kl!eMNMH#CeL3l= zy)d>0N}^~&AnHDg?n-r*moR5UoEu7X85VcyaHuW%{_gr}d6N6bgxQi=%cf8`%HM=n z{p&~oL`}g(2?OM;H;TR^raCe)FrOVVhf-6ekg5NohEQYK&c~N=`EH zLq;HAp~k2Fx!-(P90@iRknwf9>K6-DH0mVP?tPm5MrEJ{zwNIi?ITD2mItX(9ofhw z-X&MuaK^y^adW)w6$(pOTgy|EAw9xexOjMApPbx9Ai?uu(_>;boTx+_|A5Wj(2T<) z8Kmhf(-)?^TY8*=$6yrJ8;Ro>sMokKoe*$XaizNe%0l|~66Fizg+>7T&;o%#-ycK+ zunQ*(J60Gc7`94_^nhjdp%2v-dMf0%2WGCv1N|BU_k)OIP?&kV`}&21#)gJ}?vedy zAqGVY&RVgub2pb$qh#$t2z0O-lX3(Cq)ujlTJ#mfA>`XYzwe9=a4fSM7LdmQJ64HG z5c}*PH(W#C_A&PqW!P=F02%6HMIr${_}p+ga9L^(!0wdkDc1xB*#{6;|+eItAAT4qF7LV zM}fSa48llNBctX^7yPJB@j2K=47Sr$an5p zWC-cAaVG`(xk6OYhGRv7OiWPJWM5vY><8%d3tZTPE-o49B+HsU0|MV@FPi)i5;J#N zh``^rUu$Z3EnNV|-~gf&S>V(7t!%V? zLB!Y?as2`KKAFL5yPfhQv@N2Ob}Q+Clm5|-jUmRXeDse6ry^o%?&zQq(!A#+3oie1 zt4sv)NrM?l>ljfQZoB4C*KLFvp}tf*SywzjlHqIQSIe>DBFUK4mB@rj4Udl z2R)7OD&6RINJU0n)P?tE^8<`PtRz9@Cp`7qToDWvs7XFY0f2>M!`K$vOo|&rd4S zEEK)5Vw%p0n?JsX+vMct;^^PDH+J9nukW`0kR3co%P!GP0#Ehj7Ke} z&C1MPWv3S4D{@LVQ!&tUv?XIK0zvXJZD{&Ws&wvs!qxMxyD(clMAI~RwVtMni_0#P-S+Ep@59#V2z%~_X=Y3IYkVW{cw2f_ znh8Pag(0$|hB$t9P{=Aoq`s8%Bm02k?~m%~^9tjdz|cdF-!rtTN$6El zT1|yGQp7T=hGkGWaA3K-Jx0}7_LrY(xh53-8L_5QMvwV$VqDxt<6`-cqA);Qu2uk9 zQ171=`di{bfppBi+m{dEhGiPpxhV1FT}}o>yjetq^SMb!vO{Q(EfD^o9vsPyrU#ad zZ(wFCn2@ORv704X2ww2JtJT`aVQnwPi(x0cC%%PovQIV~H;E?57zJ!+F)2#YR(Un-TIB2QUW% zgdoR2^-$-bqJTYL)iz~kSuR<&te9ju00Lb<*72ri#jE-jmErziU(+velc9hFK!{I$&4&5Ej@*3 zCKuYKxky=ZNuZlV>{)p)scfaRzxq^#sbdB}x(uM#W`J6f0rI5aq@*(B(3G1#y>q?V zR9q>f2&U2(lf8W?-=-W5z2!c*An&TMI|dN2X+X>UW*T^JhZD^DI()5ywzglFtyEl% z^cCXNQxXSUSd3)#kG?#8m!xJW6)1Q z4AkTX%;*po_WX2Y-9iNBCag?_Qmy~Yjo;T6)^7!(vJG&CA_BLy5MD<9Y@XR4*4(ix z8`aR`1SXRD*1Cn)DYelZ>-NkO&lps!EdU9A_U@Gf*cZ}f3I^2)T0AI4E!z|f3oHA>Hf^}fg$Y!Y zC3c3}R7to5w4An`ZbjXNHP!`x83B_w@W+Bw)IklPYMh?HY%m*J^SEnwCfD|824i}b z{H`4;=SCEJZ5MSU`6y&itgu91;qwsTUng9YS3_jMvH5VowdPYBC4UDLv_l!nMoF^Y zv7Z!8{fdSH3M$(A&la2#6BTuAe5qe>ioW3e_>VxpIT(osnw#GKJ7wnczbdvyp?oz? za;{LJN*nv;-40vp1TBdfB5a@${}a zqn|QHt|I{0spk4)kTdOYTjiiBsM+LNG3nws;3*<~k}L$E9PXCrb^C(yIkF|qmZqeQ zcSEnJA1ulLZ-x=wpNuGW#j)S@_LwWr)aF|RP`Z;s^+P{6Yr?c!s0 zU0|Q1l;{>~hQ4LesliPKnpZo78xMD_fCR~e-C@Qh?g);b0DolePn0n9Ui)OIqlUo{ zS)W>$k2cZJ%Fc{V*}^+SG5(xzpw-&p?J*QxySuyR^YQWZ{f>>Ta_q^YdMD{Ipt^Cy zX2vo2tn628JtaHK69Jslh>~k5-XQDdnx=> z`gaM8u}(q1wq=#H_~|oez(v;kkdPgrwC%3N#qqA~#WkxY-ote!HSwdteP>eU`(0C( z-BoG3u_^a1tNBp$jl)#1af)hdWy3z+N3n$njcC&S(7(!Q18<7-cxQ)Ls`|w5Vr)bg zIR5Ol-r%uB>4|V_a9nabc_*RCB9%Gu28;&u_uywT9d|wxL6zt6p-q4O_9Rx4&zQM| zOZC&^C@oAuM5CSzJwpRGv$XAW*2n~rw7g$MCB$;;QZ(84)}>9v!;H+Q<8LA&ow~w5 zN2R?Lg~lY=qmSnd*(MTQY{iOW?gO(K3NZydnO zXMJ4l&~1c2xel5MhFia?ZjWu-%XOi}FiaOy}1Bjb1q*|s}v zdxugM{U0ZcVKAS{oRE!a-F?V!hraE=GR8isD(sF7a ziiZL}^ue#t9oFY7VxEN^-x)n%`ls~D$h^TqII-8IADCxKZyjV@I>xv*{p{M_G0)DG zyaL>ukM2Jf-Wl|FhhostosAhLr=-f=J=&_;qYs`k*kiCKs&C;xyk~zNmMU+*HE`%7 z2@28Y+p>eKy<`2u_8Ffx4gEQ#_$FD-Kbau@v*mKuC1(8~/" : { + "name" : "GetWorkflowGroup", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ] + } + }, + + // WF + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "GetWorkflow", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs/" : { + "name" : "CreateWorkflow", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ] + } + }, + "PATCH/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "UpdateWorkflow", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "DELETE/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "DeleteWorkflow", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + + // WF-RUN + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//" : { + "name" : "GetWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns/" : { + "name" : "CreateWorkflowRun", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "DELETE/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//" : { + "name" : "UpdateWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//resume/" : { + "name" : "ResumeWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//logs/" : { + "name" : "GetWorkflowRunLogs", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + + // WF-RUN-FACTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//wfrunfacts//" : { + "name" : "GetWorkflowRunFact", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ], + "" : [ + ".*" + ], + "" : [ + ".*" + ] + } + }, + + // WF-ARTIFACTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//listall_artifacts/" : { + "name" : "ListWorkflowArtifacts", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + + // WF-OUTPUTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//outputs/" : { + "name" : "GetWorkflowOutputs", + "paths" : { + "" : [ + "ONBOARDING-Project01-Frontend", + "ONBOARDING-Project01-Backend", + "ONBOARDING-Project01-DevOps" + ], + "" : [ + ".*" + ] + } + }, + + // AUDIT + "GET/api/v1/orgs/wicked-hop/audit_logs/" : { + "name" : "GetAuditLogs", + "paths" : {} + }, + + // POLICY + "GET/api/v1/orgs/wicked-hop/policies//" : { + "name" : "GetPolicy", + "paths" : { + "" : [ + "ONBOARDING-Project01" + ] + } + } + + // SECRET + "GET/api/v1/orgs/wicked-hop/secrets/listall/" : { + "name" : "ListSecrets", + "paths" : {} + }, + "POST/api/v1/orgs/wicked-hop/secrets/" : { + "name" : "CreateSecret", + "paths" : {} + }, + "PATCH/api/v1/orgs/wicked-hop/secrets//" : { + "name" : "UpdateSecret", + "paths" : {} + }, + "DELETE/api/v1/orgs/wicked-hop/secrets//" : { + "name" : "DeleteSecret", + "paths" : {} + }, + + // INTEGRATION + "GET/api/v1/orgs/wicked-hop/integrationgroups//" : { + "name" : "GetIntegrationGroup", + "paths" : { + "" : [ + ".*" + ] + } + }, + "GET/api/v1/orgs/wicked-hop/integrationgroups//integrations//" : { + "name" : "GetIntegrationGroupChild", + "paths" : { + "" : [ + "ONBOARDING-Project01" + ], + "" : [ + ".*" + ] + } + }, + + }, + }) + + depends_on = [ + stackguardian_workflow_group.ONBOARDING-Project01-Frontend, + stackguardian_workflow_group.ONBOARDING-Project01-Backend, + stackguardian_workflow_group.ONBOARDING-Project01-DevOps, + stackguardian_policy.ONBOARDING-Project01, + ] +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project01-Backend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01-Backend", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project01-Frontend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01-Frontend", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project01-DevOps" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01-DevOps", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_policy" "ONBOARDING-Project01" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01", + "Description" : "Onboarding example of terraform-provider-stackguardian for Policy", + "Tags" : ["tf-provider-example", "onboarding"] + }) +} + +/* +resource "stackguardian_connector_cloud" "ONBOARDING-Project01" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01", + "Tags" : ["tf-provider-example", "onboarding"] + "Description" : "Onboarding example of terraform-provider-stackguardian for ConnectorCloud", + "Settings" : { + "kind" : "AWS_STATIC", + "config" : [ + { + "awsAccessKeyId" : "REPLACEME-aws-key", + "awsSecretAccessKey" : "REPLACEME-aws-key", + "awsDefaultRegion" : "REPLACEME-us-west-2" + } + ] + } + }) +} +*/ + +resource "stackguardian_connector_vcs" "ONBOARDING-Project01" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project01", + "ResourceType" : "INTEGRATION.GITLAB_COM", + "Tags" : ["tf-provider-example", "onboarding"] + "Description" : "Onboarding example of terraform-provider-stackguardian for ConnectorVcs", + "Settings" : { + "kind" : "GITLAB_COM", + "config" : [ + { + "gitlabCreds" : "REPLACEME-example-user:REPLACEME-example-token" + } + ] + }, + }) +} diff --git a/examples/onboarding_team_example/project-02/project-02.tf b/examples/onboarding_team_example/project-02/project-02.tf new file mode 100644 index 0000000..17b1780 --- /dev/null +++ b/examples/onboarding_team_example/project-02/project-02.tf @@ -0,0 +1,158 @@ +// Project-02 + +terraform { + required_providers { + stackguardian = { + source = "terraform/provider/stackguardian" + version = "0.0.0-dev" + } + } +} + +provider "stackguardian" {} + + +resource "stackguardian_role" "ONBOARDING-Project02-Manager-Frontend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Manager-Frontend", + "Description" : "Onboarding example of terraform-provider-stackguardian for Role Manager of Frontend team" , + "Tags" : ["tf-provider-example", "onboarding"], + "Actions" : [ + "REPLACEME-Action-1" + ], + "AllowedPermissions" : { + "REPLACEME-Permission-key-1" : "REPLACEME-Permission-val-1", + "REPLACEME-Permission-key-2" : "REPLACEME-Permission-val-2" + } + }) +} + +resource "stackguardian_role" "ONBOARDING-Project02-Developer-Frontend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Developer-Frontend", + "Description" : "Onboarding example of terraform-provider-stackguardian for Role Developer of Frontend team" , + "Tags" : ["tf-provider-example", "onboarding"], + "Actions" : [ + "REPLACEME-Action-1" + ], + "AllowedPermissions" : { + "REPLACEME-Permission-key-1" : "REPLACEME-Permission-val-1", + "REPLACEME-Permission-key-2" : "REPLACEME-Permission-val-2" + } + }) +} + +resource "stackguardian_role" "ONBOARDING-Project02-Manager-Backend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Manager-Backend", + "Description" : "Onboarding example of terraform-provider-stackguardian for Role Manager of Backend team" , + "Tags" : ["tf-provider-example", "onboarding"], + "Actions" : [ + "REPLACEME-Action-1" + ], + "AllowedPermissions" : { + "REPLACEME-Permission-key-1" : "REPLACEME-Permission-val-1", + "REPLACEME-Permission-key-2" : "REPLACEME-Permission-val-2" + } + }) +} + +resource "stackguardian_role" "ONBOARDING-Project02-Developer-Backend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Developer-Backend", + "Description" : "Onboarding example of terraform-provider-stackguardian for Role Developer of Backend team" , + "Tags" : ["tf-provider-example", "onboarding"], + "Actions" : [ + "REPLACEME-Action-1" + ], + "AllowedPermissions" : { + "REPLACEME-Permission-key-1" : "REPLACEME-Permission-val-1", + "REPLACEME-Permission-key-2" : "REPLACEME-Permission-val-2" + } + }) +} + +resource "stackguardian_role" "ONBOARDING-Project02-Developer-DevOps" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Developer-DevOps", + "Description" : "Onboarding example of terraform-provider-stackguardian for Role Developer of DevOps team" , + "Tags" : ["tf-provider-example", "onboarding"], + "Actions" : [ + "REPLACEME-Action-1" + ], + "AllowedPermissions" : { + "REPLACEME-Permission-key-1" : "REPLACEME-Permission-val-1", + "REPLACEME-Permission-key-2" : "REPLACEME-Permission-val-2" + } + }) +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project02-Backend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Backend", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup for Backend team", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project02-Frontend" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Frontend", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup for Frontend team", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "ONBOARDING-Project02-DevOps" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-DevOps", + "Description" : "Onboarding example of terraform-provider-stackguardian for WorkflowGroup for DevOps team", + "Tags" : ["tf-provider-example", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_policy" "ONBOARDING-Project02" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02-Policy", + "Description" : "Onboarding example of terraform-provider-stackguardian for Policy", + "Tags" : ["tf-provider-example", "onboarding"] + }) +} + +resource "stackguardian_connector_cloud" "ONBOARDING-Project02" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02", + "Tags" : ["tf-provider-example", "onboarding"] + "Description" : "Onboarding example of terraform-provider-stackguardian for ConnectorCloud", + "Settings" : { + "kind" : "AWS_STATIC", + "config" : [ + { + "awsAccessKeyId" : "REPLACEME-aws-key", + "awsSecretAccessKey" : "REPLACEME-aws-key", + "awsDefaultRegion" : "REPLACEME-us-west-2" + } + ] + } + }) +} + +resource "stackguardian_connector_vcs" "ONBOARDING-Project02" { + data = jsonencode({ + "ResourceName" : "ONBOARDING-Project02", + "ResourceType" : "INTEGRATION.GITLAB_COM", + "Tags" : ["tf-provider-example", "onboarding"] + "Description" : "Onboarding example of terraform-provider-stackguardian for ConnectorVcs", + "Settings" : { + "kind" : "GITLAB_COM", + "config" : [ + { + "gitlabCreds" : "REPLACEME-example-user:REPLACEME-example-token" + } + ] + }, + }) +} From 42bb1a8e4fe4d87ddacf2a1127e6d3f22637f3fc Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Thu, 28 Mar 2024 14:59:43 +0100 Subject: [PATCH 2/7] Improve and Fix onboarding public Examples --- .../project-01/import.sh | 20 ++++++++ .../project-01/project-01.tf | 50 +++++++++++++++++-- .../project-02/project-02.tf | 3 ++ 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 examples/onboarding_team_example/project-01/import.sh diff --git a/examples/onboarding_team_example/project-01/import.sh b/examples/onboarding_team_example/project-01/import.sh new file mode 100644 index 0000000..40729dd --- /dev/null +++ b/examples/onboarding_team_example/project-01/import.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e -u -o pipefail -x + + +# --- Clean all Terraform state files +find . -type f -regextype posix-extended -regex '.+.tfstate(.[[:digit:]]+)?(.backup)?' -exec rm -v {} \+ + + +# --- Import resources +set +e + +terraform import stackguardian_workflow_group.ONBOARDING-Project01-Frontend /api/v1/orgs/wicked-hop/wfgrps/ONBOARDING-Project01-Frontend/ +terraform import stackguardian_workflow_group.ONBOARDING-Project01-Backend /api/v1/orgs/wicked-hop/wfgrps/ONBOARDING-Project01-Backend/ +terraform import stackguardian_workflow_group.ONBOARDING-Project01-DevOps /api/v1/orgs/wicked-hop/wfgrps/ONBOARDING-Project01-DevOps/ + +terraform import stackguardian_policy.ONBOARDING-Project01 /api/v1/orgs/wicked-hop/policies/ONBOARDING-Project01/ +terraform import stackguardian_connector_vcs.ONBOARDING-Project01 /api/v1/orgs/wicked-hop/integrations/ONBOARDING-Project01/ + +terraform import stackguardian_role.ONBOARDING-Project01-Developer /api/v1/orgs/wicked-hop/roles/ONBOARDING-Project01-Develop/ diff --git a/examples/onboarding_team_example/project-01/project-01.tf b/examples/onboarding_team_example/project-01/project-01.tf index 57bc188..16215fc 100644 --- a/examples/onboarding_team_example/project-01/project-01.tf +++ b/examples/onboarding_team_example/project-01/project-01.tf @@ -4,6 +4,9 @@ terraform { required_providers { stackguardian = { source = "terraform/provider/stackguardian" + + # https://developer.hashicorp.com/terraform/language/expressions/version-constraints#version-constraint-behavior + # NOTE: A prerelease version can be selected only by an exact version constraint. version = "0.0.0-dev" } } @@ -15,7 +18,7 @@ provider "stackguardian" {} resource "stackguardian_role" "ONBOARDING-Project01-Developer" { data = jsonencode({ "ResourceName" : "ONBOARDING-Project01-Developer", - "Description" : "Onboarding example of terraform-provider-stackguardian for Role Developer", + //"Description" : "Onboarding example of terraform-provider-stackguardian for Role Developer", "Tags" : ["tf-provider-example", "onboarding"], "Actions" : [ "wicked-hop", @@ -316,7 +319,7 @@ resource "stackguardian_policy" "ONBOARDING-Project01" { }) } -/* + resource "stackguardian_connector_cloud" "ONBOARDING-Project01" { data = jsonencode({ "ResourceName" : "ONBOARDING-Project01", @@ -334,7 +337,7 @@ resource "stackguardian_connector_cloud" "ONBOARDING-Project01" { } }) } -*/ + resource "stackguardian_connector_vcs" "ONBOARDING-Project01" { data = jsonencode({ @@ -352,3 +355,44 @@ resource "stackguardian_connector_vcs" "ONBOARDING-Project01" { }, }) } + + +// --- Non-onboarding resources: + +resource "stackguardian_workflow" "ONBOARDING-Project01-DevOps-Wf01" { + wfgrp = stackguardian_workflow_group.ONBOARDING-Project01-DevOps.id + + data = jsonencode({ + "ResourceName": "ONBOARDING-Project01-DevOps-Wf01", + "Description": "Example of StackGuardian Workflow: Deploy a website from AWS S3", + "Tags": ["tf-provider-test", "onboarding"], + "EnvironmentVariables": [], + "DeploymentPlatformConfig": [{ + "kind": "AWS_RBAC", + "config": { + "integrationId": "/integrations/aws" + } + }], + "VCSConfig": { + "iacVCSConfig": { + "useMarketplaceTemplate": true, + "iacTemplate": "/stackguardian/aws-s3-demo-website", + "iacTemplateId": "/stackguardian/aws-s3-demo-website:4" + }, + "iacInputData": { + "schemaType": "FORM_JSONSCHEMA", + "data": { + "shop_name": "StackGuardian", + "bucket_region": "eu-central-1" + } + } + }, + "Approvers": [], + "TerraformConfig": { + "managedTerraformState": true, + "terraformVersion": "1.4.6" + }, + "WfType": "TERRAFORM", + "UserSchedules": [] + }) +} diff --git a/examples/onboarding_team_example/project-02/project-02.tf b/examples/onboarding_team_example/project-02/project-02.tf index 17b1780..892ffa5 100644 --- a/examples/onboarding_team_example/project-02/project-02.tf +++ b/examples/onboarding_team_example/project-02/project-02.tf @@ -4,6 +4,9 @@ terraform { required_providers { stackguardian = { source = "terraform/provider/stackguardian" + + # https://developer.hashicorp.com/terraform/language/expressions/version-constraints#version-constraint-behavior + # NOTE: A prerelease version can be selected only by an exact version constraint. version = "0.0.0-dev" } } From c6493f0aaec0b146abfe455eaa5b111e125dd59d Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Thu, 28 Mar 2024 15:00:01 +0100 Subject: [PATCH 3/7] Improve and Fix onboarding test Example --- .../project-test/import.sh | 24 ++ .../project-test/project.tf | 398 ++++++++++++++++++ .../project-test/test-onboarding.sh | 139 ++++++ 3 files changed, 561 insertions(+) create mode 100644 examples/onboarding_team_example/project-test/import.sh create mode 100644 examples/onboarding_team_example/project-test/project.tf create mode 100644 examples/onboarding_team_example/project-test/test-onboarding.sh diff --git a/examples/onboarding_team_example/project-test/import.sh b/examples/onboarding_team_example/project-test/import.sh new file mode 100644 index 0000000..a1cb12c --- /dev/null +++ b/examples/onboarding_team_example/project-test/import.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e -u -o pipefail -x + +res_suffix='' # '-T000000' + + +# --- Clean all Terraform state files +find . -type f -regextype posix-extended -regex '.+.tfstate(.[[:digit:]]+)?(.backup)?' -exec rm -v {} \+ + + +# --- Import resources +set +e + +terraform import stackguardian_workflow_group.TPS-OBT-Frontend${res_suffix} /api/v1/orgs/wicked-hop/wfgrps/TPS-OBT-Frontend${res_suffix}/ +terraform import stackguardian_workflow_group.TPS-OBT-Backend${res_suffix} /api/v1/orgs/wicked-hop/wfgrps/TPS-OBT-Backend${res_suffix}/ +terraform import stackguardian_workflow_group.TPS-OBT-DevOps${res_suffix} /api/v1/orgs/wicked-hop/wfgrps/TPS-OBT-DevOps${res_suffix}/ + +terraform import stackguardian_policy.TPS-OBT${res_suffix} /api/v1/orgs/wicked-hop/policies/TPS-OBT${res_suffix}/ +terraform import stackguardian_connector_vcs.TPS-OBT${res_suffix} /api/v1/orgs/wicked-hop/integrations/TPS-OBT${res_suffix}/ + +terraform import stackguardian_role.TPS-OBT-Dv${res_suffix} /api/v1/orgs/wicked-hop/roles/TPS-OBT-Dv${res_suffix}/ + +terraform import stackguardian_workflow.TPS-OBT-DevOps${res_suffix} /api/v1/orgs/wicked-hop/wfgrps/TPS-OBT-DevOps${res_suffix}/ diff --git a/examples/onboarding_team_example/project-test/project.tf b/examples/onboarding_team_example/project-test/project.tf new file mode 100644 index 0000000..146f02d --- /dev/null +++ b/examples/onboarding_team_example/project-test/project.tf @@ -0,0 +1,398 @@ +// project-test + +terraform { + required_providers { + stackguardian = { + source = "terraform/provider/stackguardian" + + # https://developer.hashicorp.com/terraform/language/expressions/version-constraints#version-constraint-behavior + # NOTE: A prerelease version can be selected only by an exact version constraint. + version = "0.0.0-dev" #provider-version + } + } +} + +provider "stackguardian" {} + +# Dv: Developer +resource "stackguardian_role" "TPS-OBT-Dv-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-Dv-T000000", + //"Description" : "Onboarding test of terraform-provider-stackguardian for Role Developer", + "Tags" : ["tf-provider-test", "onboarding"], + "Actions" : [ + "wicked-hop", + ], + "AllowedPermissions" : { + + // WF-GROUP + "GET/api/v1/orgs/wicked-hop/wfgrps//" : { + "name" : "GetWorkflowGroup", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ] + } + }, + + // WF + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "GetWorkflow", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs/" : { + "name" : "CreateWorkflow", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ] + } + }, + "PATCH/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "UpdateWorkflow", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "DELETE/api/v1/orgs/wicked-hop/wfgrps//wfs//" : { + "name" : "DeleteWorkflow", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + + // WF-RUN + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//" : { + "name" : "GetWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns/" : { + "name" : "CreateWorkflowRun", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "DELETE/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//" : { + "name" : "UpdateWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "POST/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//resume/" : { + "name" : "ResumeWorkflowRun", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//logs/" : { + "name" : "GetWorkflowRunLogs", + "paths" : { + "" : [ + ".*" + ], + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + + // WF-RUN-FACTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//wfruns//wfrunfacts//" : { + "name" : "GetWorkflowRunFact", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ], + "" : [ + ".*" + ], + "" : [ + ".*" + ] + } + }, + + // WF-ARTIFACTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//listall_artifacts/" : { + "name" : "ListWorkflowArtifacts", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + + // WF-OUTPUTS + "GET/api/v1/orgs/wicked-hop/wfgrps//wfs//outputs/" : { + "name" : "GetWorkflowOutputs", + "paths" : { + "" : [ + "TPS-OBT-Frontend-T000000", + "TPS-OBT-Backend-T000000", + "TPS-OBT-DevOps-T000000" + ], + "" : [ + ".*" + ] + } + }, + + // AUDIT + "GET/api/v1/orgs/wicked-hop/audit_logs/" : { + "name" : "GetAuditLogs", + "paths" : {} + }, + + // POLICY + "GET/api/v1/orgs/wicked-hop/policies//" : { + "name" : "GetPolicy", + "paths" : { + "" : [ + "TPS-OBT-T000000" + ] + } + } + + // SECRET + "GET/api/v1/orgs/wicked-hop/secrets/listall/" : { + "name" : "ListSecrets", + "paths" : {} + }, + "POST/api/v1/orgs/wicked-hop/secrets/" : { + "name" : "CreateSecret", + "paths" : {} + }, + "PATCH/api/v1/orgs/wicked-hop/secrets//" : { + "name" : "UpdateSecret", + "paths" : {} + }, + "DELETE/api/v1/orgs/wicked-hop/secrets//" : { + "name" : "DeleteSecret", + "paths" : {} + }, + + // INTEGRATION + "GET/api/v1/orgs/wicked-hop/integrationgroups//" : { + "name" : "GetIntegrationGroup", + "paths" : { + "" : [ + ".*" + ] + } + }, + "GET/api/v1/orgs/wicked-hop/integrationgroups//integrations//" : { + "name" : "GetIntegrationGroupChild", + "paths" : { + "" : [ + "TPS-OBT-T000000" + ], + "" : [ + ".*" + ] + } + }, + + }, + }) + + depends_on = [ + stackguardian_workflow_group.TPS-OBT-Frontend-T000000, + stackguardian_workflow_group.TPS-OBT-Backend-T000000, + stackguardian_workflow_group.TPS-OBT-DevOps-T000000, + stackguardian_policy.TPS-OBT-T000000, + ] +} + +resource "stackguardian_workflow_group" "TPS-OBT-Backend-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-Backend-T000000", + "Description" : "Onboarding test of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-test", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "TPS-OBT-Frontend-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-Frontend-T000000", + "Description" : "Onboarding test of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-test", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_workflow_group" "TPS-OBT-DevOps-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-DevOps-T000000", + "Description" : "Onboarding test of terraform-provider-stackguardian for WorkflowGroup", + "Tags" : ["tf-provider-test", "onboarding"], + "IsActive" : 1, + }) +} + +resource "stackguardian_policy" "TPS-OBT-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-T000000", + "Description" : "Onboarding test of terraform-provider-stackguardian for Policy", + "Tags" : ["tf-provider-test", "onboarding"] + }) +} + +// +resource "stackguardian_connector_cloud" "TPS-OBT-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-T000000", + "Tags" : ["tf-provider-test", "onboarding"] + "Description" : "Onboarding test of terraform-provider-stackguardian for ConnectorCloud", + "Settings" : { + "kind" : "AWS_STATIC", + "config" : [ + { + "awsAccessKeyId" : "REPLACEME-aws-key", + "awsSecretAccessKey" : "REPLACEME-aws-key", + "awsDefaultRegion" : "REPLACEME-us-west-2" + } + ] + } + }) +} +// + +resource "stackguardian_connector_vcs" "TPS-OBT-T000000" { + data = jsonencode({ + "ResourceName" : "TPS-OBT-T000000", + "ResourceType" : "INTEGRATION.GITLAB_COM", + "Tags" : ["tf-provider-test", "onboarding"] + "Description" : "Onboarding test of terraform-provider-stackguardian for ConnectorVcs", + "Settings" : { + "kind" : "GITLAB_COM", + "config" : [ + { + "gitlabCreds" : "REPLACEME-test-user:REPLACEME-test-token" + } + ] + }, + }) +} + + +// --- Non-onboarding resources: + +resource "stackguardian_workflow" "TPS-OBT-DevOps-T000000" { + wfgrp = stackguardian_workflow_group.TPS-OBT-DevOps-T000000.id + + data = jsonencode({ + "ResourceName": "TPS-OBT-DevOps-T000000", + "Description": "Example of StackGuardian Workflow: Deploy a website from AWS S3", + "Tags": ["tf-provider-test", "onboarding"], + "EnvironmentVariables": [], + "DeploymentPlatformConfig": [{ + "kind": "AWS_RBAC", + "config": { + "integrationId": "/integrations/aws" + } + }], + "VCSConfig": { + "iacVCSConfig": { + "useMarketplaceTemplate": true, + "iacTemplate": "/stackguardian/aws-s3-demo-website", + "iacTemplateId": "/stackguardian/aws-s3-demo-website:4" + }, + "iacInputData": { + "schemaType": "FORM_JSONSCHEMA", + "data": { + "shop_name": "StackGuardian", + "bucket_region": "eu-central-1" + } + } + }, + "Approvers": [], + "TerraformConfig": { + "managedTerraformState": true, + "terraformVersion": "1.4.6" + }, + "WfType": "TERRAFORM", + "UserSchedules": [] + }) +} diff --git a/examples/onboarding_team_example/project-test/test-onboarding.sh b/examples/onboarding_team_example/project-test/test-onboarding.sh new file mode 100644 index 0000000..78c9a0e --- /dev/null +++ b/examples/onboarding_team_example/project-test/test-onboarding.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# TODO: refactor with test-quickstart to have a single test entrypoint not dependent from +# the location as the directory of the script. + +usage() { + echo "Usage: $0 [-p ] [-a ] [-v ] [-f github-release-public|github-release-draft|local-build]" 1>&2; + exit 1; +} + +while getopts ":p:a:v:f:" o +do + case "${o}" in + p) + p=${OPTARG} + ;; + a) + a=${OPTARG} + ;; + v) + v=${OPTARG} + ;; + f) + f=${OPTARG} + ;; + *) + usage + ;; + esac +done +shift $((OPTIND-1)) + +if [[ ! -z "$f" ]] +then + if [[ "$f" != "github-release-public" && "$f" != "github-release-draft" && "$f" != "local-build" ]] + then + usage + fi +fi + +# echo "Args: provider=$p arch=$a version=$v from-origin=$f" + +TFSG_VERSION_DEFAULT_GITHUB_RELEASE="0.1.0-rc1" +TFSG_VERSION_DEFAULT_LOCAL_BUILD="0.0.0-dev" + +export TFSG_PROVIDER="${p:-terraform/provider/stackguardian}" +export TFSG_OSARCH="${a:-linux_amd64}" +export TFSG_ORIGIN="${f:github-release-draft}" +if [[ "${TFSG_ORIGIN}" == "local-build" ]] +then + export TFSG_VERSION="${v:-${TFSG_VERSION_DEFAULT_LOCAL_BUILD}}" +else + export TFSG_VERSION="${v:-${TFSG_VERSION_DEFAULT_GITHUB_RELEASE}}" +fi + +echo "Running Example with arguments:" +printenv | grep -E '^TFSG_.*' + +SCRIPT_DIRPATH=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) + +set -eu -o pipefail +set -x + +## Provider Installation + +# --- Installation inside project depending on origin +case "${TFSG_ORIGIN}" in + + github-release-*) + rm -rfv $HOME/.terraform.d/plugins/${TFSG_PROVIDER}/${TFSG_VERSION}/${TFSG_OSARCH} + mkdir -p $HOME/.terraform.d/plugins/${TFSG_PROVIDER}/${TFSG_VERSION}/${TFSG_OSARCH} + cd $HOME/.terraform.d/plugins/${TFSG_PROVIDER}/${TFSG_VERSION}/${TFSG_OSARCH} + + # Fetch the plugin binary from Github depending on release status + case "${TFSG_ORIGIN}" in + github-release-public) + wget https://github.com/StackGuardian/terraform-provider-stackguardian/releases/download/v${TFSG_VERSION}/terraform-provider-stackguardian_${TFSG_VERSION}_${TFSG_OSARCH}.zip + ### If downloading releases manually: ### cp ~/Downloads/terraform-provider-stackguardian_${TFSG_VERSION}_${TFSG_OSARCH}.zip . + ;; + github-release-draft) + pushd ${SCRIPT_DIRPATH}/../../ + gh release download --pattern "terraform-provider-stackguardian_${TFSG_VERSION}_${TFSG_OSARCH}.zip" --dir $HOME/.terraform.d/plugins/${TFSG_PROVIDER}/${TFSG_VERSION}/${TFSG_OSARCH} v${TFSG_VERSION} + popd + ;; + esac + + unzip terraform-provider-stackguardian_${TFSG_VERSION}_${TFSG_OSARCH}.zip + rm -v terraform-provider-stackguardian_${TFSG_VERSION}_${TFSG_OSARCH}.zip + ls -l terraform-provider-stackguardian_v${TFSG_VERSION} + ;; + + local-build) + cd $HOME/.terraform.d/plugins/${TFSG_PROVIDER}/${TFSG_VERSION}/${TFSG_OSARCH} + ls -l terraform-provider-stackguardian + ;; + + *) + usage + ;; + +esac + +# --- Bootstrap & Configuration +rm -rfv ~/tmp/terraform-stackguardian-iac-project +mkdir -p ~/tmp/terraform-stackguardian-iac-project +cp -v ${SCRIPT_DIRPATH}/project.tf -t ~/tmp/terraform-stackguardian-iac-project/ +cd ~/tmp/terraform-stackguardian-iac-project + +# Set the version of the provider inside the terraform config exactly to the version of the downloaded provider. +sed -E -i "s/version = \"[[:alnum:]\.\+\_\-]+\" #provider-version/version = \"${TFSG_VERSION}\" #provider-version/" project.tf + +# Randomize the workflow resource id in the config file in order to isolate the test +tf_test_id="T$(date +%s)-R$(printf '%05d' $RANDOM)" +sed -E -i "s/T000000/${tf_test_id}/" project.tf + + +## Provider Execution Test + +# --- The provider configuration should be passed from external environment variables: +# $ export STACKGUARDIAN_ORG_NAME="YOUR_SG_ORG" +# $ export STACKGUARDIAN_API_KEY="YOUR_SG_KEY" + +terraform providers +terraform init +terraform version + +terraform validate + +terraform plan + +terraform state list || true + +terraform apply -auto-approve +terraform state list + +sleep 10 + +terraform destroy -auto-approve +terraform state list From 2cf5b16c5a15062a7a564ce3b86012ec0f24d7c3 Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Thu, 28 Mar 2024 15:11:34 +0100 Subject: [PATCH 4/7] Clean graph Files in onboarding public Examples --- .../project-01/graph.dot | 26 ------------------ .../project-01/graph.png | Bin 67437 -> 0 bytes 2 files changed, 26 deletions(-) delete mode 100644 examples/onboarding_team_example/project-01/graph.dot delete mode 100644 examples/onboarding_team_example/project-01/graph.png diff --git a/examples/onboarding_team_example/project-01/graph.dot b/examples/onboarding_team_example/project-01/graph.dot deleted file mode 100644 index 8b7f0a6..0000000 --- a/examples/onboarding_team_example/project-01/graph.dot +++ /dev/null @@ -1,26 +0,0 @@ -digraph { - compound = "true" - newrank = "true" - subgraph "root" { - "[root] provider[\"terraform/provider/stackguardian\"]" [label = "provider[\"terraform/provider/stackguardian\"]", shape = "diamond"] - "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" [label = "stackguardian_connector_vcs.ONBOARDING-Project01", shape = "box"] - "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" [label = "stackguardian_policy.ONBOARDING-Project01", shape = "box"] - "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" [label = "stackguardian_role.ONBOARDING-Project01-Developer", shape = "box"] - "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-Backend", shape = "box"] - "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-DevOps", shape = "box"] - "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" [label = "stackguardian_workflow_group.ONBOARDING-Project01-Frontend", shape = "box"] - "[root] provider[\"terraform/provider/stackguardian\"] (close)" -> "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" - "[root] provider[\"terraform/provider/stackguardian\"] (close)" -> "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" - "[root] root" -> "[root] provider[\"terraform/provider/stackguardian\"] (close)" - "[root] stackguardian_connector_vcs.ONBOARDING-Project01 (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" - "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" - "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_policy.ONBOARDING-Project01 (expand)" - "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" - "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" - "[root] stackguardian_role.ONBOARDING-Project01-Developer (expand)" -> "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" - "[root] stackguardian_workflow_group.ONBOARDING-Project01-Backend (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" - "[root] stackguardian_workflow_group.ONBOARDING-Project01-DevOps (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" - "[root] stackguardian_workflow_group.ONBOARDING-Project01-Frontend (expand)" -> "[root] provider[\"terraform/provider/stackguardian\"]" - } -} - diff --git a/examples/onboarding_team_example/project-01/graph.png b/examples/onboarding_team_example/project-01/graph.png deleted file mode 100644 index f46e2892743ea0600a947846bf93f43dc9af09de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67437 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 Date: Fri, 29 Mar 2024 11:28:36 +0100 Subject: [PATCH 5/7] Adapt onboarding Examples to new docs structure --- docs-guides-assets/onboarding/.gitkeep | 0 .../onboarding}/README.md | 4 ++-- .../onboarding}/project-01/import.sh | 0 .../onboarding}/project-01/project-01.tf | 0 .../onboarding}/project-02/project-02.tf | 0 .../onboarding}/project-test/import.sh | 0 .../onboarding}/project-test/project.tf | 0 .../onboarding}/project-test/test-onboarding.sh | 0 8 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 docs-guides-assets/onboarding/.gitkeep rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/README.md (95%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-01/import.sh (100%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-01/project-01.tf (100%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-02/project-02.tf (100%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-test/import.sh (100%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-test/project.tf (100%) rename {examples/onboarding_team_example => docs-guides-assets/onboarding}/project-test/test-onboarding.sh (100%) diff --git a/docs-guides-assets/onboarding/.gitkeep b/docs-guides-assets/onboarding/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/examples/onboarding_team_example/README.md b/docs-guides-assets/onboarding/README.md similarity index 95% rename from examples/onboarding_team_example/README.md rename to docs-guides-assets/onboarding/README.md index 8ed4a65..adfed16 100644 --- a/examples/onboarding_team_example/README.md +++ b/docs-guides-assets/onboarding/README.md @@ -17,7 +17,7 @@ development environments, short-lived testing and staging environments, and long environment. -## Software Project project-02 (TBC) +## Software Project project-02 (WIP/TBC) - Typical Hierarchical structure: Two teams FE & BE, with one team manager & developers for each team. Additionally one DevOps role is cross-functional and contributes to both teams. - They release once every 2 weeks on Thursday, through staging and production environments. @@ -28,6 +28,6 @@ development environments, short-lived testing and staging environments, and long environment. -## Software Project project-03 (TBD) +## Software Project project-03 (WIP/TBD) - Smallest Team possible: one single developer with a full-stack profile working on frontend, backend and devops tasks. - The developer needs access every resources but requires automation to clean cloud resources diff --git a/examples/onboarding_team_example/project-01/import.sh b/docs-guides-assets/onboarding/project-01/import.sh similarity index 100% rename from examples/onboarding_team_example/project-01/import.sh rename to docs-guides-assets/onboarding/project-01/import.sh diff --git a/examples/onboarding_team_example/project-01/project-01.tf b/docs-guides-assets/onboarding/project-01/project-01.tf similarity index 100% rename from examples/onboarding_team_example/project-01/project-01.tf rename to docs-guides-assets/onboarding/project-01/project-01.tf diff --git a/examples/onboarding_team_example/project-02/project-02.tf b/docs-guides-assets/onboarding/project-02/project-02.tf similarity index 100% rename from examples/onboarding_team_example/project-02/project-02.tf rename to docs-guides-assets/onboarding/project-02/project-02.tf diff --git a/examples/onboarding_team_example/project-test/import.sh b/docs-guides-assets/onboarding/project-test/import.sh similarity index 100% rename from examples/onboarding_team_example/project-test/import.sh rename to docs-guides-assets/onboarding/project-test/import.sh diff --git a/examples/onboarding_team_example/project-test/project.tf b/docs-guides-assets/onboarding/project-test/project.tf similarity index 100% rename from examples/onboarding_team_example/project-test/project.tf rename to docs-guides-assets/onboarding/project-test/project.tf diff --git a/examples/onboarding_team_example/project-test/test-onboarding.sh b/docs-guides-assets/onboarding/project-test/test-onboarding.sh similarity index 100% rename from examples/onboarding_team_example/project-test/test-onboarding.sh rename to docs-guides-assets/onboarding/project-test/test-onboarding.sh From 6d7f20a2419dd9ac1642f5bfcb8ea6dbc906139f Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Fri, 29 Mar 2024 11:30:19 +0100 Subject: [PATCH 6/7] Disable connector_cloud Example temporarily in onboarding/project-test --- docs-guides-assets/onboarding/project-test/project.tf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs-guides-assets/onboarding/project-test/project.tf b/docs-guides-assets/onboarding/project-test/project.tf index 146f02d..efaa20b 100644 --- a/docs-guides-assets/onboarding/project-test/project.tf +++ b/docs-guides-assets/onboarding/project-test/project.tf @@ -319,7 +319,9 @@ resource "stackguardian_policy" "TPS-OBT-T000000" { }) } -// +/* +// Disabled because API returns "Request Timed-Out Error" (504) +// Issue: https://www.notion.so/stackguardian/Bug-some-TF-resource-requests-are-failing-with-504-status-code-64d6ec02438b4475abd1d5807d9a6d74 resource "stackguardian_connector_cloud" "TPS-OBT-T000000" { data = jsonencode({ "ResourceName" : "TPS-OBT-T000000", @@ -337,7 +339,7 @@ resource "stackguardian_connector_cloud" "TPS-OBT-T000000" { } }) } -// +*/ resource "stackguardian_connector_vcs" "TPS-OBT-T000000" { data = jsonencode({ From 313a24798122a3df2ff528a35ce8691693431bc5 Mon Sep 17 00:00:00 2001 From: piroux-sg Date: Tue, 2 Apr 2024 18:07:17 +0200 Subject: [PATCH 7/7] Update Makefile --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5c9c2f9..506b41f 100644 --- a/Makefile +++ b/Makefile @@ -35,9 +35,8 @@ test-acc: test-examples-quickstart: bash docs-guides-assets/quickstart/test-quickstart.sh $(ARGS) -# bash docs-guides-assets/onboarding/project-test/test-onboarding.sh $(ARGS) test-examples-onboarding: - echo "Implemented in next PR - Dummy Test" + bash docs-guides-assets/onboarding/project-test/test-onboarding.sh $(ARGS) docs-generate: tfplugindocs generate \