From 0f8fdb8475527b46e85f64cfe169debad2350a7e Mon Sep 17 00:00:00 2001 From: 100xoo <98.prmj@gmail.com> Date: Thu, 4 Jul 2024 18:09:46 +0900 Subject: [PATCH] =?UTF-8?q?edit=20post=20=EB=8D=B0=EB=B8=8C=EC=98=B5?= =?UTF-8?q?=EC=8A=A4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add image --- _posts/2023/2023-12-11-DevOps-Definition.md | 103 +++++++++++++++++--- images/2023/12/Devops.png | Bin 0 -> 10873 bytes 2 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 images/2023/12/Devops.png diff --git a/_posts/2023/2023-12-11-DevOps-Definition.md b/_posts/2023/2023-12-11-DevOps-Definition.md index 6d295f1737d4..95d92994f08e 100644 --- a/_posts/2023/2023-12-11-DevOps-Definition.md +++ b/_posts/2023/2023-12-11-DevOps-Definition.md @@ -3,9 +3,91 @@ layout: single title: "데브옵스 정의" categories: DevOps tag: [DevOps] +toc: true --- -#### 데브옵스란.. +## DevOps 정의 + +### DevOps 모델 + +애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합 + +기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선 + +빠른 속도를 통해 조직은 고객을 더 잘 지원하고 시장에서 좀 더 효과적으로 경쟁 + +![DevOps](/images/2023/12/Devops.png) + +### 작동 방식 + +- 개발팀과 운영팀이 더 이상 "사일로"에 묶여 있지 않음 +- 때로는 이 두 팀이 단일팀으로 병합되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명 주기에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발 + +- 일부 DevOps 모델에서 품질 보증팀과 보안팀 또한 애플리케이션 수명 주기에 걸쳐 개발 및 운영과 좀 더 긴밀하게 통합 +- DevOps 팀 전체가 보안을 중점으로 두는 경우 때때로 DevSecOps라고 불림 + +- DevOps 방식을 사용하여 속도가 느리고 수동으로 수행되던 프로세스를 자동화 +- 애플리케이션을 안정적으로 빠르게 운영하고 개선하는 데 도움이 되는 기술 스택과 도구를 사용 + +→ 다른 팀의 도움이 필요했을 코드 배포 또는 인프라 프로비저닝과 같이 작업을 독립적으로 수행할 수 있으며, 따라서 팀의 작업 속도가 더욱 빨라짐 + +### DevOps의 이점 + +- **속도** + - 작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하고, 좀 더 효율적으로 비즈니스 성과를 창출할 수 있음 + - ex) 마이크로 서비스와 지속적 전달을 사용하면 팀에서 서비스를 주도적으로 운영하여 + 업데이트를 좀 더 빠르게 릴리스 가능 +- **신속한 제공** + - 릴리스의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선 + - 새로운 기능의 릴리스와 버그 수정 속도가 빨라질수록 고객의 요구에 더 빠르게 대응하여 + 경쟁 우위를 강화 + - 지속적 통합과 지속적 전달은 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하는 방식 +- **안정성** + - 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장 + - 지속적 통합 및 지속적 전달과 같은 방식을 사용하여 각 변경 사항이 제대로 작동하며 + 안전한지 테스트 + - 모니터링과 로깅 방식을 통해 실시간으로 성능에 대한 정보를 얻음 +- **확장** + - 규모에 따라 인프라와 개발 프로세스를 운영 및 관리 + - 자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리(휴먼 에러 방지) + - ex) 코드형 인프라를 사용하면 개발, 테스트 및 프로덕션 환경을 반복 가능하고 좀 더 효율적인 방식으로 관리 +- **협업 강화** + - 주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축 + - 개발자와 운영팀은 긴밀하게 협력하고, 많은 책임을 공유하며, 워크플로를 결합 + → 비효율성을 줄이고 시간을 절약 + ex) 개발자와 운영팀 간의 인도 기간 단축, 실행되는 환경을 고려한 코드 작성 등 +- **보안** + - 제어를 유지하고 규정을 준수하면서 신속하게 진행 + - 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 그대로 유지하면서 DevOps 모델을 도입할 수 있음 + - ex) 코드형 인프라와 코드형 정책을 사용하면 규모에 따라 규정 준수를 정의하고 추적 가능 + + +### DevOps가 중요한 이유 + +20세기에 실제 상품을 제조하는 기업이 산업 자동화를 통해 제품의 설계, 생산 및 전달 방법을 혁신한 것과 마찬가지로, 오늘날의 기업은 소프트웨어를 구축하고 제공하는 방법을 혁신해야 함 + +## DevOps 모델을 도입하는 방법 + +**DevOps 문화 철학** + +- DevOps는 기존에 사일로에 묶여 있던 개발과 운영이라는 두 팀 간의 장벽을 없애줌 +일부 조직에서는 개발팀과 운영팀이 나뉘어 있지 않고 엔지니어가 두 업무를 모두 수행할 수도 +- DevOps에서는 두 팀이 함께 작업하여 개발자의 생산성과 운영의 안정성을 모두 최적화 +- DevOps 모델을 사용하는 조직은 어떻게 구성되어 있든, 전체 개발 및 인프라 수명 주기를 스스로의 책임으로 간주하는 팀들로 구성 + +**DevOps 방식 설명** + +개발과 인프라 관리 프로세스의 자동화 및 간소화를 통해 더 빠르게 혁신할 수 있도록 → 적절한 도구 + +- 기본 방식 중 하나는 *소규모 업데이트*를 자주 수행하는 것 + - 기존 릴리스 방식에서 수행되는 낮은 빈도의 업데이트보다 일반적으로 좀 더 증분적인 특성 + - 소규모로 자주 업데이트하면 각 배포의 위험이 줄어듬 + - 팀에서 오류의 원인이 되는 최근 배포를 확인할 수 있으므로 더 빠르게 버그를 해결 가능 + - 기존 소프트웨어 개발 방식을 사용하는 조직보다 훨씬 더 자주 업데이트를 배포 +- *마이크로 서비스 아키텍처*를 사용하여 애플리케이션의 유연성과 혁신의 속도를 높일 수 있음 + + +### 기업에서의 정의 Red Hat : 신속한 고품질 서비스 제공을 통해 비즈니스 가치를 높이고 대응 능력을 개선할 목적으로 기업 문화, 자동화, 플랫폼 설계에 접근하는 방식 AWS : 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합 @@ -25,21 +107,10 @@ AWS : 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도 * 위의 기술과 도구를 이용해 코드 배포 또는 인프라 프로비저닝과 같은 작업을 독립적으로 수행 -#### DevOps의 이점 -* 속도 -작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하고, 좀 더 효율적으로 비즈니스 성과를 창출 -* 신속한 제공(CI/CD) -릴리스의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선 -* 안정성 -최종 사용자에게 지속적으로 긍정적인 경험을 제공하는 한편 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장 -* 확장(IaC) -규모에 따라 인프라와 개발 프로세스를 운영 및 관리합니다. 자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리 -* 협업 강화 -주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축 -* 보안 -제어를 유지하고 규정을 준수하면서 신속하게 진행할 수 있습니다. 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 그대로 유지하면서 DevOps 모델을 도입 - 세상은 빠르게 변화하고 있고 고객은 이러한 변화의 니즈를 충족시켜 주길 원한다. 기업은 이 니즈를 충족시키기 위해 고객의 피드백이나 새로운 서비스를 더 빠르게 개발하고 배포해야 하며 이러한 프로세스에 데브옵스가 안성맞춤인 것 같다. -참고 : https://aws.amazon.com/ko/devops/what-is-devops/ \ No newline at end of file + +## ***Reference*** +https://aws.amazon.com/ko/devops/what-is-devops/
+[Stephen Orban - 엔터프라이즈 기업의 클라우드 도입 모범 사례](https://aws.amazon.com/ko/blogs/korea/stepen-orban-an-e-book-of-cloud-best-practices-for-your-enterprise/) \ No newline at end of file diff --git a/images/2023/12/Devops.png b/images/2023/12/Devops.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4c07f4c249f4c6fec70e6db80e962f320e4672 GIT binary patch literal 10873 zcmb`tc|26#A3r|!ElZXpdq|5&LUyAfR4Qa&qKL6H3^LXbvM?UTc6UJ`%-tqoCevilRzwaO4`^S0Qd+xdCy!O}gbw0}uxUjsw_iR`t-C6GiDtZ*}BltR=8U&)pr_g{} zg&_MXeWHu(!cDz1^}S8`J_Z`hSu|U`r9-U6eK_t7Z?8p%{7~Uq53SQ!e&y^ zWc^1s3Fa-|;spY!s{;*RuTalgey?Q6%)R0tq5qDaMSK{$Z1SQ<&OV+m+oGU1_tmBX z%c=2ed*R0JE@Ll|sJ$PZ2Ut|@h0m3Sg@mSu_G)|2%kpLw^*|uGkM}^J)}XxNA1Qq0 z;gi+-ZHoT{+l?zq2_u5qicIZcw@q3tU&V2L-f5j)IWcS9=zvU_JruCPyNoXTpf*2f z7FqeuEO}D`gwcVl-Pf+yGTBOpcRtN{%?KX3x0-uyCVo$v>G#W%TP`TGInTV&oQDKi zjA>R&YMfnGjTZr9l(yC%kw50GLkS8DWC67%8yCSm{d|&EBDropgHFkmb_V)>ew!x;OY;!Bv#vUAlxp{k^ot zyfxo`L_xr(jt1O1H!a_R()RPWI4rH+DAN12dzQ)--1Am{~|QIHAOfzlwmN zRzn7Q8V81EQns-YQZ3@S= ziYaV!GmcW}4y$cXt$3(;!5HsC`hYMu_bQfrUTkPVDs}hQdOlrVTAK0Vnc6hLU+~pY zGu*pp);4Hr#cAU~OsCpKIl9yY8cq8xcV-a6Ahg&kqV55gt$W90lAe;Jv~yIP^(@cZ zj`Y+WjI_hi%(bFG&}{hSdf8hgnf_xlb^qf)9 z+N*OCMq2IN)!XyN+#7B(_|;#7^HJ;j!36r0VzlfapzXJj(pu{F_Os$8pfSy(bu}nck@bvKM zvI$Izv^qDV@aAZEfMLU{Vaa0d8Bo))~re6kT`^&1smQ?hUeS=>2jAw0Y+270(W(oe;zeD{9qAq&7hcR`Ns;GTe@^@5xs+{h_Z zyX;|RunniuD}!l%FddLjoPu&zn-iV8d4a)&pyyNizwHLV(h>aE6JXSS)|zx>JeNVd zl=YOmG;1+0jnpBRtmxEVzg|SFtgHn8{w?c6>8bThUw_0zKk-OW@`-_=p|hk^xiLJT8E>n>TF1JP7!lv8Hx zxawK-XBR>b7xkh|4WfK%8Q;52N&jo|uUp-(A!uJ;tiNPnNlA$pefKaG}y@O)*r4)3SmztS46i>L$3Kk-hJJ94tcx-_k`jBFiZMnPy| zE2E6dRIMeC;&Ogs|BdoS8w>{1++OdoddL5Mdgt%-V(vz}Cr)pUB;Ci;pxD@7k4rP0 zlbg2eP6?E)3HGMMIz0EkYdFLx?uryvuLKEI`4C68FD>+W*z+lEsGedLKUhi`bVM0t zOhhMopKiNM)E64fIZxT@DQA`RUk*%C^WMFxJzM3F*n@OvNrH9gHQ@`FMroFmGVcWF zx8&=oZi;RbQK|)2xA{CCmu0x$Z{ATzgSXxAR?{jpuTv9U#=-$<5LmA2-VnKo_hH$& zugp>d6BtYeWK4gEQOOYVK6Lc?qV+K+`W{*(@|W0CHWsj;H)uD+emL)hgH`tsh$%rA zzcTL66GxUN?iO^*(|jsm zqi%W&7^7lP^HD~*Pl1_Lb+uo$zM9sTTK36@P`W@bKT*H7g)6pLM57~xO{!@eEEl%t zJ9$DnYDpquOl68UcK`68d-U~g@0Iy7m;~nSpX{iuoi;vJwf~?h@16Fp^Ck%j-mFcb z>K)dEQ(I_YY-g6yducR)c(tKMk=2Oy!Arz!mvucFhYPR*8$DT6cTI95uHT(TTK+SZ$W=fj3#Ry*~D{8P=I7hB$5 z8mNROz{+{h8ajtepHF^@-QKNs_K_7hN-cG%>l?M2${_`N`{&|%c>`uE%Xj=kUA_N7 z8>DV;EOg%Ru|=ipyGok9OWb8Xlr7L67F)o8^GbFeU8*?fqM^_(-{tAZsM`n-2FaLX&f8VO* zU0SCFU&WsP<6>|?ErWLb$@j!P_k4r>@A-6Au}oKWsT??nDzj$>Gk8u>2A^Nc%@=;2 zb?B}}kPB^&h_ykeSksWs;U|4P`GIe|+b4wx(o1dEqkoD0y)%(gEf;R|j7!ua%B?5d zRiPTQW^H3pb$0DL=IP+^RJ+00#k#in068McSNB(wXp?7enq>mQWMsZkIQB?>{86ov zJO6vTA`;E?$H+sG_ab;j%X}v@(e-&KsSG={^H-+nCkYL4WnGXhcs^Wx=cn%Q@6T#C zn}*L5HOP^izTULVyZWjU@iEdy=5c}_S~eM^s0u`$un*n_Z|s_EMS+PkE?`=&VwX4E z`}%IcgUS=$N@1HAAOlZNm)Nc|JkFO>XXZN<0XXOvZ2?vl}O#Xi3Y>h3*bSTzQ?A~=2oY*qfQM@?82Uur1*`JP4 z6u)77omxd%MnE;CYxYD)2fgEWg~p<2f$YgW9*&dTlY`|~BImrA+=+&$=((^dt21ul8S6OrT9$CD#HZJus3Xq;^J%{ynF+5QxHlA2h zBR6?tS_i&%t|*Ckr$0wGx&53WddC+^v%txbEsI+h|Lh1tTfoiIO7VN4?`E^6IEY! zQkKK^%mlp^lOSlZHg>G&cuqs*EF#YAWlEG%*YC3W-7dcIBiVvPtks0zg#=}BCD%xn}=oSOuH%eX`cMfVEXUKUEylqJEU$ZN&Q9CgT8LuV;iOz)nD0j<0iq*&sQj)!2NDfT5|dMU>V5RST};VGa*WV( zcuo0udVg0l#gr10*G9i|gfn&8@$7@A!WniRw zCk>g)^2x1GlLq_BkCS9D*kQ->d}@T6uM~z^8*yt>d}UNTR1@$Say(B+chtz)1d{WZi|!imt;?3W~XyqtiUtCcMxab z$mg68p3Ov5(uUSAengNoPUR*Hb&XAO!fmqT(T4M4GxcqEk8+NX#!3gDMiv$`FGDX& z;5?JfWtMc@k$&iEsUIzMEjjI6Mi$r+I*ZkzCetz?tvzTv%4rCan6LJ0^;%wyhC3~t z(IGaRJ`zHBN^op$$N9Z63LE#6Ac3BXv9&LRb#PC%;K|?-6VsCxJ0S&D?vSGoN$%85f91|{ z)o-e42kEah5R8=pK9lJtKA_^nf1B=Gq^+2#bcD(UHrV&|Q9eaV(<~E5FV7}f&Pk^Z z4ESi0%71#o{_-1E{z5U0e(u-CgJzTqf6XC7T>2$$k_L@8b#i1m1g_1v%*$)nN3?5W zb}pJNTa3%|Paf5^9f)-Dkl6D_cYHIRPq(|N0_dXqvgJ#KlyEMMebMUln_l*j-}Xbh z)(&B@5rjkkoE5xcvR_Q?U9)(V>&!F!NL-1>vYf0X7A{$snz;wjp&6e=PL-NA+`cvC zxPFZiEVUMT2B{D+O-t(bDU;jgN0E$K+qay`z;uDt6q@F41I(6g{)>i8&&6JY1bwT9 z9;My>tu<&UF{m||RKj-+2QpnjpDHN2e*{eN?=gwMcsr=MytM0>6tnTtwyRkH>q5sW zAi-GQ&~P56#&!lE$N#XQ6^ZfOFwh@?j>kxL~_Kh0yjbKWkp>q;;E;omML zAKUT(oDc+U0>pSSPXE?Nc(z$H3Y}gs3za%6=0MMd@#!i?Yr(v%6|`BhK+(r2+@V4f zbb@tuP1W*joID~ytbB_;=b`TgWt)=APBtPZQ0J1-im0m@PLgA0Y-1ub{qh?C9B0jb zF1K=gZK0->3#C@ML>_(SrvSeeZq0jW3XT~$uXX8hXKxX%d=oTkvbI-Z|9EkRU_>}h zJ42c92=Yhj|08%=4{C4AOs>;`;{OBPS%O`kM7E6la&A!Ey)HMxSDJI9i4?`GS9i2- zJS>DaA@64XXVT=_sK3MwKr5YdPzWO{h+MFa6JAQDm~nr<5>a7$18HPn zu*M=#DY=w7N#!|F+YbWeomqw!nvNm}F=4U8E7im4MF+r$>^ZxZ+$$-oJ&SIgDRa_r zXBt`%u>rTObg5f`zzv%En8O;I(^6k)G#vH|P`fsi%)K3Ygw=40NfP&XH}s@@<%!(s z#{7ZzK^_5hTh0YO{b(C~Locms3?az|dP^wb(qh;zpN0F+%>F+8v2UZV>RHxwlKT2_ z-($dWTH5vX%5QUVk)R8kfxV9?K(E`Wg0iV~Rh2`?a)g`GSlk?|Z(z;%=UH2*MGjc* zTfBZ~CSe@=zW`zXUSku_7{Yv$`5Puwrl3@1sAmJEX~x-+ki=k=p!HzyR4cPTeLbwBeWW#%ERt*P*dE zni7~}w_KOH^2Mia#O|iEfsv8xR-AjZFiwQNm4s4-f66>H-Cpz#FghJch>T6xM$R}7 z_+uZKijr7^7Y(R+~Oiv(|D%-69o?;1tfIAx;6hV;wIa%WHoIS-7#FkTOFsf9-SN1z0b!aM4@Sl-t*XbI2;zu ze*}L>RzL9$Lp?laa%bEMwmyW4FXA`bMN*IDC;{6+*?+Kh+GxXK(tdLi8TS#Gp>rG1KQa`i+6Qf<<6mzqUMNsDRANdxN&FMbt1xqf4 z}w}(I;(hZztrz4r$mz9#TWDbZ2AVJ3kHvVmTU`1Cv}wy1vl& zys4HRJh{*?n=4`+#lb7U%O#!MS6Qy=%OZV;Wufs)%%sa{D(C@2kmWuz+3Sd$^z|;C zqO+<=7_lvS`2CFP_fMm2R4Td#qJaG-h@+z-cI>+jr6^TIhVKIBHo8wwSXV@A>T#7_ zxh=Jd|L)WRW6O>Ch4}Fo!g!jwAH0ZBf^}Ku=}e;xEc#>8b}6^HJ@%KtU*C%~DyG?8 ze*n>~@=KrWG}~71twW;Y-c}HeX{L3&&W+FpSW0dvPzd3#&727sCI>iXNmt!pWf$hs z-LS=DaWx1ySu^U*@>u`gg18`F&}Wx)s&W-P9#xwaJ#JJ`+Qm?B!$$nsQ}>Payg1It zvRdee+{5<91Gy(o*SkIFz}(R;hjlmbF}LKEHb*onS_E$XytK^?3xn_ZhQciex1)xk z=DBq0X#Ey)<_SUw;2oN;N_Dg4hUF<#LSm#f*n#V6Elk4pE*Is~)c&ll9 zyv@_g;NoTqpJj0pm3FJ}SJ$vIcz9!yOT*aoV|OnxbD(nQw7>=Cux4bIzROF=Eba2n z&bUxe-{5xguB{xLUz>r(tZLe~gmb^~>Yv6%xFrN_1X%XxPz3>7F>4I}i`%N_-25w1 zmtK5(V06yS@;L-;A)NBv>>!2{wg;t$yFJQQ?D)my${AoWIomL$y!&e;UIte;b(dE> zozb6J1N|)ySz9^8zzCPLj!&9}(Zla>Mo>{V70ErHA}1^rbe6z^W5ZWcv50dJVsuAF zPMIrhEc@025qynlgI#CdU-LhX>-tYJBQgsu&>Tez8~I4c?)0?yCP2VZrJn$`O708C zO^0>If~CYU#0y72%~y|i=)kOn@0HlIbdAwkAO5ze(gZzue^(t{S#hS*=2F{o1@y%0 zpOd++^?+PCM=rsl#U4TF>nnH7W$*$Jlx%SJa5av;-mX?`=t3-P|ElP2MC9Mj4x|=i z{W{WR1bd!HELYJQ*1C^&ZgInQJ4v?5;uXaGnpMOgXy=YS2YN*zd>L3u@hqhQyfO(b zPYe8>G*pjSSzopc&Ng;3E)%iCiO@`EIcuR4ZCz}GQ}R!T4n`V9Nnh$xo(j3VqVbEW zyfWP>`mAF*$?^uSxMX4Q(4CyLEn#OkY<0Yxj&)G=D0617bn|QJfGxzRFeVh@AEyeA z#RnjQ-l~#NpWkgyT;}4Z23Fy|zOuxKY-a7cIz7GYwZT~bpmL4=@D|c|WQ*hT39kOy z&RRfoX$}c>9yYYruYqG<3(j^gPQ_6hVp#!CKud?f+Xk1A1MW8D>D%+U%6oyn3PY( ze%ohkZAHwiJ^~If;uHMaqa&R%@%M+BuH$VUg?wMi_~yBc#;QBk@{SF_=Ko>-1><8={O zm({;Wq>Y_J>N$PNT)oH+V?h2=e7-*o{a7mi`JfVIH^BuNFB3oa0V}#JEh}npS5jix zwQ2H_;oZR`qV`8it5(E-iGBTi|@COWy0r^iM_ou ztB;-6-&tuB7*fwar3F2u-e-i@{DBgVHOW699r=7?$!9<%J8<8L&eEQIG=yqcLKrRH`9 zmO+mqq$g;hlX7RD9sBBXWINt`YjXEQ>Bb!h{0R=ehLyZt!kgCL4|5Vzj z3Q|#uri(2vEanpI6y$RwP$2uy zaKL?Xou!5Fw}djZG|+kqiw2U{$savs%$%DXOReb$1kPY}l%(P^8v=Hel-db5$!}YG zw7njij#ViKTf~FFVZERMJ8px)tX(!QJCYx{Q~*WXo`r4SY<~u;yQxIr5W)*7yoh)N zUYv4Ztx#wuNS#fx0vdqp!xRL702d%>B3YFaiNS1|SOLeKz=ckR4T$3`;jqmXt-zf2 z36c1j4Nhb?T+6C_f!%t<4Jf2-l`-C-&I`|DiMK*->H1NQ|GDD|MJ-ho1ws`u~> z^Tj*@$E#=R*f~K~5Xdvy`;zwQB@cD<%c{qf#Tl}bNlWn(7sB$X)GMqz#_m?peG+@9 z`!G8|r4iXI z-Sgh?fjB8PWl%jR7kSz$QI9q7!++hGhoY7REa9w#pE;PH2w;)#G z%B5$${I2JdiosOB%$SzZcz@nX7@N%ciyy05GFj*=t8Q_*j~pAW7CVxJ$LP=Ji<~H4VVtMK#9-g=sp#2tE1;b z0((E*R$M0tf&%X!oK|{iJwRNy;Opq3yzo8ngK?{dgthPm8w#fX?gUwnav@yy_Pf5t zFI^l}jyDv-XzR5li%EJ^3|4F@1^P3calA{$ooF9Uw70{4Q(A$gm(f}V_Vp}`_2AwT z+m8wPu4vsgW_-fQ$jMv3^QtC=}PY+vy|#h-1q{D z1?)BT?UW50{E(S20YidT*mJiDJPo|4;-ERs+=n} z>NCDXzu=>@uu=1pDCg^w?S$%%)oH2OZkc-R>=^(v78Z?Hd8=e0nTrAhHwjEgJy=2d zB@d?&ZV&0~B}H{Jdzbo9|PK7&iRC{KD)?l_3};f z5Qg}WpMR>gAphjgf|G1OEX((I(vx>!4>884 z!-1FNWJoz*{lCZ+@Ink?!ftKMKUg2Y91MDxZ1)BFhvvOizS2gD;HZq{z`x%qp~&jH z%KWM4Pv_D->>!6qr{6~p@fdmYVe2SXDn1{(Co!aC8sb|NC462bNmP4yVnx=c0!Fbcg{Mz;XEoj5RtYKch|Q9z+AFrcVU}5Xm#ez+9KNtlUi>1JfIZ6INy%+@ z@AMo#bJJq$Xp9;5PV@7Y+_c0_SmWdF*rxWdvA_z~cdU2@5>#EPsSuE(qFK|| zZ?v$nuXT;F@W)vwgp9eB4z^P@VX+f3WXUTvUK zd@Cr@Vjc%fT3;+wu6{+j|n-+q31f`hewR zErg^e@0piZIQasnIJ~RNN{;JBDYbe%R0}0Cc>Y75wWY7IQaor>*r^G0;n-3g6)jFj zWROAgCUX(e|F9EJ3vQmuzk{RNIF)PU=Hob4N`hwO@Dkk3qJWIll*Hi)2k5TGPTVevxa$ z4sRW#P#)577@*KxREMEEKP2KGKaG}-;h8j+;YFi9eSRuF6+9F6@knJyfQao2Mi`4X z@rfTOFz9?9joDQF^WvSJn05j&cQ1$A6-tWsK}$7kzVkeC-pkp0*>SSk; z6xOO;ymJ8CG$L(@Pd)LEP|}-SG6#P6ie$>ZGu+!>57j^j@qX0Tmr+BihAkvknv?Ok)S|fkTqNoP@Do6`+ z;jpDY-j!s<=K*0)blKLx5z`f!o{Thfsc^cx@3&K6c`w<~ajb;n=$o>rBy9HLYOnv> z(v?4>vohlRr$7Xu;7@*4<8^ocg5!XI=CjPYfbZXK)$EG$CWL87Xve9ZjIG;KkV0+Y z2kQ>(Ke@>fXSlE%Vmg-N@GUxw*8b?`XxxW%#c#G@zFEe}yo`x{+z8#&kVFcS9^Q*L zNci#Ne=|1Is@}JcnP>k^ds^hq3On>2_I8eGO^*47KR*3~6CoVE%~D9Na8*^qSuCexp1khhh^8&>RcaVxJQ_4l*d6=$TWZX zrrVtfno~#%%R@3kp(X`P$FjW*Is2>VtU3FA=&T7O|HpLJ0KXdnW6zrZ>w%5I|Nn2; YDBB`W#(wR5BrmJ|;K_Z2hIP>Y0SrtYC;$Ke literal 0 HcmV?d00001