From 4d08323d3f2afd6ecd0924228ec230f9596c5edd Mon Sep 17 00:00:00 2001 From: Jan Hommes Date: Mon, 21 Oct 2024 12:03:05 +0200 Subject: [PATCH 1/2] feat: advanced simulators added as plugin (#52) Allows you to use Claude AI to generate simulators for demo purposes. --- README.md | 9 + cumulocity.config.ts | 6 + package-lock.json | 88 +- package.json | 1 + screenshots/advanced-simulator-screenshot.png | Bin 0 -> 128117 bytes .../advanced-simulator.module.ts | 12 + .../new-simulator-action-factory.ts | 21 + .../new-simulator-button.component.ts | 37 + .../simulator-modal/prompt.ts | 906 ++++++++++++++++++ .../simulator-modal.component.html | 87 ++ .../simulator-modal.component.ts | 145 +++ 11 files changed, 1310 insertions(+), 2 deletions(-) create mode 100644 screenshots/advanced-simulator-screenshot.png create mode 100644 src/app/advanced-simulator/advanced-simulator.module.ts create mode 100644 src/app/advanced-simulator/new-simulator-button/new-simulator-action-factory.ts create mode 100644 src/app/advanced-simulator/new-simulator-button/new-simulator-button.component.ts create mode 100644 src/app/advanced-simulator/simulator-modal/prompt.ts create mode 100644 src/app/advanced-simulator/simulator-modal/simulator-modal.component.html create mode 100644 src/app/advanced-simulator/simulator-modal/simulator-modal.component.ts diff --git a/README.md b/README.md index 5ae61f55..c2675e6f 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,15 @@ A sample plugin for orientation purposes when developing your own plugin. ![Example widget plugin](screenshots/example-widget-plugin-screenshot.png?raw=true "Data points graph screenshot") +## `Advanced simulator plugin` + +A feature that allows you to create simulators with the help of Claude AI. You only need to go to the Devicemanagement > Simulators and see a new tab called "Add advanced simulator". If you provide then an Claude API Key and a short use-case of your simulator, the AI will generate a set of instructions that fit your simulation use-case. + + > **Important**: You need a Anthropic Claude API Key to use this feature. + +![Advanced simulator](screenshots/advanced-simulator-screenshot.png?raw=true "Advanced simulator screenshot") + + ## Contributing We follow the [Angular guidelines for commit messages](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit). A linting rule is ensuring that your commit messages follow these rules. You can also run `npm commit` for a helper tool to write your commit messages. diff --git a/cumulocity.config.ts b/cumulocity.config.ts index 6a804958..d1614611 100644 --- a/cumulocity.config.ts +++ b/cumulocity.config.ts @@ -36,6 +36,12 @@ export default { path: './src/app/datapoints-graph/datapoints-graph-widget.module.ts', description: 'Adds data points graph widget to the shell application', }, + { + name: 'Advanced simulator', + module: 'AdvancedSimulatorModule', + path: './src/app/advanced-simulator/advanced-simulator.module.ts', + description: 'Allows to generate simulators with the help of Ai.', + }, ], versioningMatrix, }, diff --git a/package-lock.json b/package-lock.json index 92f99837..3b89c8d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "@angular/platform-browser-dynamic": "^17.3.9", "@angular/router": "^17.3.9", "@angular/upgrade": "^17.3.9", + "@anthropic-ai/sdk": "^0.27.3", "@c8y/bootstrap": "1020.2.12", "@c8y/client": "1020.2.12", "@c8y/ngx-components": "1020.2.12", @@ -852,6 +853,20 @@ "@angular/platform-browser-dynamic": "17.3.11" } }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.27.3.tgz", + "integrity": "sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "abort-controller": "^3.0.0", + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7" + } + }, "node_modules/@babel/cli": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.9.tgz", @@ -7729,6 +7744,15 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" + } + }, "node_modules/@types/node-forge": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", @@ -8470,7 +8494,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, "dependencies": { "event-target-shim": "^5.0.0" }, @@ -8590,6 +8613,17 @@ "node": ">= 14" } }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -13676,7 +13710,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, "engines": { "node": ">=6" } @@ -14355,6 +14388,23 @@ "node": ">= 6" } }, + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + }, + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -15504,6 +15554,14 @@ "node": ">=16.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/husky": { "version": "9.0.11", "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", @@ -20532,6 +20590,24 @@ "dev": true, "optional": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-emoji": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", @@ -30274,6 +30350,14 @@ "defaults": "^1.0.3" } }, + "node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 245e55c7..b6814230 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "@angular/platform-browser-dynamic": "^17.3.9", "@angular/router": "^17.3.9", "@angular/upgrade": "^17.3.9", + "@anthropic-ai/sdk": "^0.27.3", "@c8y/bootstrap": "1020.2.12", "@c8y/client": "1020.2.12", "@c8y/ngx-components": "1020.2.12", diff --git a/screenshots/advanced-simulator-screenshot.png b/screenshots/advanced-simulator-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0baab7b85a161f0af336ecd99a35a33128951655 GIT binary patch literal 128117 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

#R+8B*$?Zm$83JGGr~3&+nuN*-&C>NxXrFy|Q1= zk9{{s7)8t@Qw=*qj__-+N$75|RoUrOogEkczNlMWL!qAq8;G-2@M+vI46@3=@EZ6! z5~VM~#Q8Dnl@G`?)x^G}fczm(zMR~lAKIIW9i}Q4blKgZrc&8U!IluISVk@ntvg|M zj6VMxF(v6}f~5>FlkqYwk25fEF4Qabot6zQt$2rQ_zDHBid7w@flzQs&GY4b@B;_D z%-l~w`dCg`$g-VG9-oXS+1_W5>U*eqc!PcVNqUQ<@!>jsnZhgeO_>a_7)?lVh^ zOIv-u*rD2RIHn+nOC{3a6t@^Q55c$dn9*lXD@YeEkWD)%=HU#&+J#k;4$gWHw+JC6 zVVFHDU7q%LdRl)}4vZHg-f(GE941j$tV;@U`FL(s_X`Xd=09G>0>STc`%<8U8jumr z3#+T!5Wf&F-lecs{d_E!a@PG>@@&zZlnn+wtvZmiu%T)@x0TOnD3`NLQ5D+!3i10k zD(UO~r0@|c$?nh(DK_U~Ky7i9!P_=EmAoq;5VIM?PA@$Vfdbo>#XmG}qr<8Lnq_%= zWx-5h{NVG38#PknVT?ViIydQgdSBHZgT#4yFDXYoL-fUN&s&XXDfFFaTeoe+Zu+Fi z7ghZ3?Q!InkO!7QU`_I_~kk zZbvmqD;@Ag*%PX{8!_q8iRW=xZtl7j5pL%^OOA>Aj@1lH_nm{iEKd^NhaY;QrlE1? zMrn2J&kbzDyTgW{@4)V6IDhK5ojW5H2PciU8&31s2tTCQI!sX z;oa@eVu9!1A+WdiiCyC}zn#up;2Tgwo`RQ-X>s%gGwqv6O0jIu-f|QexZqt)Aeq}2 zxKC*+Oz?4Gu#8s@eqGfdNQT78a^Bt(Sf6yMI$e$2Y49r zzuXw{h-5sj$LXAXQMFUc&u$;=H|%+S&gbLnSz_W*VpRlA#5xfl#+94zpA2KB;*C?k z|LPyXrG`z^`Q$Q}Cy_U~al9)C+FEnFUoQ*jCCjpjc6(2*QvI~h$<%Vm__YW~gNC}8J@k&#j-u8P-$**$2U5RPVWVl)~8<3H*h<0PV) zw~NvTpPx|kn?Vym`^+_Y{}i%|+@Xo4#z<=p5Mt1mbRxQc@MyKO(m}Da6CCP4Hg{+) zU8G*~JH1noacv(tfAVRo%-lZABNyH#C2Yu8238u-lTO835WAc#w1w0$uYMYd&j&o^ zed1_LK2-9+IyxsEbV(#LKF+R{f>+WLcJ2RQY%=>>UFI&VTRin7-uoVdKbF*dd`Fzi z=Sj!fx_T<-=B#72e$ch*VFu!*^~$qluUDn;5~lNY`n42zis3n6po%ywN^Hjr4iRT-9ou%L0>`5C=2+w1M>3-Pc_2q-rwHMzSqh4i4S?20X+r4g%=GNYVpv<77@Y} z_jbu24{v#S#9_q2+eQB~9|_CuW4FmEb(_u!=I<=>wF4M3PE&P z;FtrVb?%8MZJjdXu=LsV=>w_aXkG=?wU_usPM7K5ogMB11C{)6n}{_t5CIh_QKg7e zn=UL#wHf}3?_;|PgpDzV+UvOM;%1h#NuMa43|(6nqynQ>V$?^5%WgXw62D%chHa!j^pd59E5x~F z7@7{Hs}^`d%H#29FB$k(rJMv3aw&vSI?o|1H|RE<-K^|#flJzFFe1DR?<$mWZof?)3qZGvx_Rl?jh)WvXi*|%pLqGja>|#n*X=q|ioS5q! zh0JADmY%tuC&+d z6Po~-m#mPak4gg7n1mli#YBupNe%u{s^Bh+-vhJ#3!~x@60fSN#HWmuJyaaXfVi+I zSyO#WN)b|xWtnl^AG?N3%}H_`je&xe)T2Si9_RM6v(!Em%}=kpFqyP_&Ywv3nfa8S zEW@&5hI*RA&J1aU4L_9b&t89iHB03uDQf*84l}MfAh9lrnnAZMDn?;m|NY_{zBy3A z*mL86h5$z1U;rys6csOhzpWZ0uP4sG3V%w)oQ>HWe_lexGP#)rV?>6>%387%3EcMK3k?VI%6Qg>oqJ&Os-{|bezB>a2tI_U`Qj9m70IsVM;-0|GLE4BCIFIY**BRT^vxx^jf; z)Ya=;-d&x{zHPEtn|N5y%z{g4g+Y_;EB!ta87uo#COd`dIU%!s$e=&Uy{SZpfc(RJ z^VxKZ2E}bQhscWOQjnRL6RZ73pNkp|)bqTR$QyaG+7_NyPB=y8?Z5j-l*KlQynpNy zaRnn9-zXVNvZzP&uo!?y3^(^{Wro>Fql=a` z&0(Xw{=IDQB-G}< zYde$lpkXY}xL3UTz`_=0)*;i=6No@uN-(m=hMK|JT)H43`(9Dbd)w*i+oaw ze-M!;F(DXMF_3!jvdgEKa^;J{E6Orgm7^ZDFZi5mHgdRFFc(LxN9h#hPa0dDR|h1` zO2F{lHctAufUwqA78MhUP=r~`gZ;>**?@lIf`)?cwPv$3v=o|d^9;tKc~Ydu6Mrg% zf;phzRSvg241;6!7C)s6_{D0_1F^`k`mx2{lM@=WsiBssv&*}^iL@uu{JB*5qF~{vghqrlrj@|AUQ3$NKgM;Qkkj4nCdy z{ts6Ee~~gLFg_y2D zqmYDDhy?0HrP<)ciOmueG_VA3xJ!)8aI}snJ2=ZHVWn<|@%DHDS|YBX)%; zJ8&v~$~k#l+}6jZ$-;d3SN${(N1QIE9t9d{=iMRK4an3!+<(;?7T^Y>9M zcyJsyhWhi>ddukoK^_ww-GKf2Za`rzfAYRPPtNwy!#|DNntOQg%sV0&Q=#*My^enY ze>8+B>7QV(JyGFS-y)I>^>tcZ#Fxp=!I=|hl)Vq0Nnihy(*P!=`2Xvs|0fL<4Yojo zGp=Gto=^S2E&4}yw)Ah8Vgv@@cQ8#nDwMA*o-TO)INn(5mc-;u}7zMVfqk+W1Vp zPW8fRlWs*0_m(5%5B)T3#0xbK^sQ6*_)fAg?b8cq&A$(UM4r~{AVUm>5~@!{C$r1t zBrJd%0_UP+N-%+ax?S*ERLSXLLbGe;ki-<|zyH2>CwNyn>AIJJWMZZOr|ANWe1gPq z2*XOjiFLR6IA`E0!#lzb*Wf0-bQ>;*whB@wi~Z2LbH{+iwXnsN;ZL&kG)IKVSeW90 zoo}JKe`i7{fB#VQu3j=fKdYOoV|9MQw#)4p3PNIbCb}M2kbRbEL+c)QtnN0_$loi! zzYSN=IP-WBqW6}-PJVGPwkhA0x z?T%&!;>a!=u^8_^sQmK%t9F&EP``tqga(ScJ9+rF3m-O0&F= zN*E2vAtASA?|t1ncg(p|V%NiyiXT8LF9hd4N1@VbGh%ac8Z|7pT5RHSazZ2GDxi{d z2>#WE13Z41aOOa7kf|QT=Qs`+=g8eOe!ikFoGLRjEA&t2BlT3-G-u8fE#{fpK2BP; zmcfWNs)T4|sS-tlEN&%2qM?lSjRAT{F%;Ea??d$AI9A?2D4~8dvYknT&2=q zzbcv=Vd+?|*@er=`iaSr5K=e$rb`1$*jbeA8Vh>o_HPxsGad@IM6};El-6uApU!V9 zq1)Tu-CTX(r2PranY3#1z!V%Q598&9#xSPc!$?A)JxIB>L8`$8e z0YwHS@2`&fTxL>uvpN(KCe2#6BNtn13djVsFk?b%D24x0fXZLAK0@kTQm z)Q9qv`+?F7BYL&-$KctxsY@)G%LDJpM;oHde=QBxfQUX#!D;*LYVQK_F#)jK!(b+c z-D9iz>3+oobSZ8QIFjXUbIC?tW&}OM#cOYwQ?d$ZLU|bPM2s3{8YBmFO)B_YUUcc8 zs9V89Bsx71b3epY^940Kz!?|*s<9QJjHA&-ua71q%^6g;Ze&#_e6>`sttjQoOo z{DtA;j&n%Bn3_`xj?H^l88%Q^vV@Y@$9{<}+Z}gXPRg*RYv{yi`t)mf2GNpwnR`&ACLV=s%p?Ce$05Q`_J49 z4KphnyprvqZXLYR8_UQ@KaDA$XHG!thJ1yAz0Zr5-dcNLwXcq-ol85p$@aj?NEdIL zIYOuS5-)0wYJIw~%MR$LlE@4?D)IbHg;nTacs|mh5)6YS16d!58X8GX{wuWY%9D-a zhR3p`Scy=RV9|ijh(?W*5gk)8-7b1uWVpQ6&3(Sd8PG_R=p^Y5?aslDT0Yi) zlD`5-7qP$_4uGV^LDXfMk3<`MDPMEegOId3UV#({4!lxlzl?*^8PJv%?xHNJn>>P% zebpDNqr4iCUx)i^pHP2~Asj_ZRL*(N%i>Q_@1m>4U$|mTs_dduuMnQd#$eO68}xkU z{{x=PK)4RGOXlq9TnXJ3O>yF~kj{cAP5!bh!*s`9nq(XiCF~lv*0lwd(>$ui zA7f2ZuA7SePC8E7pe8ifD08FCd|&9!WPD-Br+Ouuv1_vDFo>6!XFhaRc65fob8Il; zn^0Y1aDZ5oPCtnmb`J`wB~s0>>#u6TQ@&%BNcar(GS`c{I~cy|1>%KBuxr;?Bui|Y zFWsLEft9aDQA7C@c|hG3rdN0Cv0Q&Sp!W>I4ro<#r+WYOWkqPIOf!Qd{q>$v!N9Af z0qn{}E*^ECq0dUsg=*L%ffOPMlP)%$;Mm}1a$>M^%TOhDfxlA40526d(Ypt>4H<$x zL`(}+47NAya)Z?^cbiX$W4nR0lza2q5VCNe?QL5&B2kr-a}Em2LJmu z-|oA|A65J?s5zK`zoGPG+E{1O4PPlT;ajf}Z|`{rIBWOg+6y0af3s&QG*OQ|LfXh~ zI{-XJz*?v8XFo59+>tVoJNO`qh*_5&-TMlb%~XAvCB*a@izgP6=$H<cSIOD+Tkp^RcuX3zH< zH?H4jcRMz}!#`=YN7H5oR+Iri=Qd&oDmtfHjxr1|^5O4=5t2f@UH%=F1(z&|Xa}UD z^xs!#TANdQ2PaH8$4pA#@cXX(j;gTdCc^sAek;mQKAJKOP_M8bE9EF=4qkoag9wa8 zAzqu53W5%Nl;&x()mf8J$YRIJX!sHQdCfm6ID9PKuhjZ?qx?#W1k2b)HkVL1qhzFJ z`Ua2Nw{jQmYKUJ`(Z7P7qzOGYd@uNjhK5V~aO2021^nUR+J&&|3@;U_iX}ymbi8Qv zHGH$M!BKd~!6;l~w*#%&b8H(QTnV3Azkhlmwlqns5}YM#dk&M4rYbK3Lr>%vVtzE_jjSn{x#^xMIy`rs8)1?mC3dF9Y18gReKuOWz4?Ro<}n-Xs>8F)ab`{o3u|FWK=Ncq8KTD{AEkd7h`q}!Sox1 zCA8D@&GWSs?sF{GHiima)m< zaG$zjmoe@3C~SZdsQJ1*OwXHJ(XB)&+W6Dn<%D86Y2qiR$~F-9vNepS7n=74XR3{c zrA9M6M28Pq8>#9yxh!A_4_Otrld%DLgTFBK$8Ha#ZM1(!XzC?LV&_#x+q%Drhf)a8 z)IMyQ-#NrNU{i`C6J6W) zJHpQDJvLWsW@sw+r$>`ex!uV+m|W`HcR5}Jn$1jDohGov{7T>Zb3};IDF} zZRC)@n=pPcuH^1-2v>xmpJVI>NeM1`$y9&j#Ltb@5_+>#*DxHxB)uJ?X=RDFc|e^J zd=-~Z0lw4*DM5d})~K4Gh~9<`;W2Z_zMID2rVkp!PBG@Eo*{*9^QZjjR*p_~ZdC5C zwl>AL11W4Kd(Kza&CRo}H$I2v!ukyB+@qwkT6GRCYgMkyy{ftvGbs_E7H4 zX|d1RT5=yf&A-E-edt~rKXm*&^V>cj$1Mv^Zy5I(%lxO~8JPRJ51mVF^cRGm>OK=n z@%i8VgPb@8XCj&PC!NC4PoI5!+=w(DIlhofGo(0Xf}-Ppdir5%>%A9=^1f0aKnVRj zsjDuPIT@g_gKqb`Tp5mCK%}?SgO_-AjB;&IZuru;BwesC+EJsgkL_wWUEh;!j={uM z$`5NW7~SnhF{CyJX>UwL5kxSQQ(?vnPC}3%ed|@MSIkNUw_jukJi-#WX?+QlbcRv( zwl0PR;|4)y-?P*{`V-SXJJ`NH_BoRW@MX#Tr+P5}SVA{Y|3x%3&G2jORwY47Fd5k2@W(~UEn`3ySUXOAr#8Rh$Pe~^rYq>W@=NnE62!#N z;`pqe>N0^E-4~PSc&AN8bCd&=A!&z^(I`ZYqo+MM-|xR_g^lj^~}`UIa&^LwLI<&jZ;bdeml0Krj?cNvbnp8*n$X#z+aV37!yIpn_hP_nGi_JCQnu2^kG9qYQ!}EDQtv)%GeYWF*>UKU$8)FAmRNOdIfKu) zb`GaiAmMAP|7#4mHN_B&a)176Nkv7OeBj?<^3c=bIfmN$Bi zVz_!m?%qnXr}$E4>7DOPo!p3%CG-UmT;4~z4E8lq|MO5CfRGnb}2r)BbEr#YBb@Eq1n2pmM;#bQ~{vcWlgGe_0%XAc#X_c8byKdwzO#MoKd}gfF1#n-$-MnjE8|GM>(&9>w+q(KfEhu$% zD;M9SdRC+PgLIz`lB^z{Tu@N_!78}~2?AgF>F+cR?f7oPPzjMVnh`v2#ZalVQL2u$ zbu4!COIq%ja1@Dr<&RSbUqu5BihFd|(dDK2k>A;8dB25E>R*2ha-|N*sDXnS^12hl z`n3VMxSjHe<~s+SCS{Kknfltv3URL3vIbP&=MasQ>n=QL%}Yv<^`jtvt)lb!x(5qh zZ%<@fhk(^WrJm~{+xK9ihkgV7&V1Limz7SejssRpOCm2Dp;SLO@c&l*KHv%stiX5n zRc88Owf0VyqOHI7BfT`d9BBB8?rbUEE!|xU*$q_LQ@p*VY1kI8|6ONyRwuyTGKs)H zzAxkS<(pH3>q5Ua#iKf&Oz(RpuyBIcM?;K!A)~v-%N1fTq_yq} zZ0q+Yz23L%Xc)MdeRldwJ>aKb7gRKI(`2o`*$~ynZas8sWHu#K{PkLs_ci_DoBxJC z=xUy2xE|x(adF??_8e|^^}_5M>z4I~(ara!Gm%Kdcz(tgA)51^S{K;biVE@?+u|Jt zyV}vN?Xvvh-CnQ6Vz=_{r-jxFr_b=G>cJiHFyi+L=@-cie3_rWy!bf_W_m?Yo;R=?5E60C-~!KHmRWSweE*o}fJ3vp9WtQm69ShWKJ3^8{6L z-iGtKQ|KNOBQB^Fl%U(zmuK(*uA(Z`yCvBN z2JfTy*KGKPFaO8+8|qM&yA-OO|3Q~*#p)?Z=mmoL^_l3!Jkw`$alLxG%b}y=tAN4d zjE{E}h!*$?G=O($FXyj$cv)W~Cm-lC0WqDUQtLbLoO7ggT+@pNLEq0!M;p8GxNjNw zMOAk+uir7L&M2vB4=jy2&zToM>$;WLDBea=LqOHX!OhzF8$9p2MB$|GrYKgJ+-@zd zE~m+r1D^BAKAV;8r)7D4`*ly-@idC}aNmV+rqhh>uNShSlBk$Ym*2lK(6W2|-_2or zlX^!!z$)8{V?f3nKhn(%@%%72hfy@kLPLe&Uq%5-JR%@at_9BdaI*HoAXt@kT7HYY-F*Av3p&ArpWUa=?Y;d52YWFw5oF!OACwS21wl*42))r!n049+ z1eI%cRT_AQBjIqKj1OCA>r!5R{!Xr^^ViczE)o9EDnT5Mj6}X~$~s$*(q6FCQL}4; zC_8e$$jyDryFa~t4?A9t`}(x3h=s?SV)uN)jGa}AKXVHXKW37a9G_{>{+ZKuSudiM zr;i(5f`hnOrP(`MR1mlVSM~Z&4X1!U?kwM5Pat@8X5-bGhoV`T+#b;sLb5O!-us02 z;Mis5%bgcbhJrfalCk4@ow??`-e7ZodzA#n=aze2WSXMr@Ob<6p(EkUaBc7OiI(Bx zwgI;d{*BAOOhv|Z!>NC297L6m*n@8cYOKV~t*X;`$VzIk&#n3eO!WZwaeA}T@X}aw znRdE_t}6Z=DUMO4=}Nu!Qp>VqbNcGj_J>{`uT4zULa(&)Jhyrj-((Mgl9=`T8wWI+Y;6zq z(!TU|6o*!GE+rW4yGsM`eM1~6iFm$V6|jETMoSj5(ylaFUv)_i9qtA+Z&v6pNAKWW zZxNBXDEg7u8n{0T{!uQyj_bv5z3@Mi=6SdN)cbfJ=ybP5g^lQb85w==7ri<<&s`4R zQgf~E9^O>MQqcb?N~-hUwcMCT>Q789!bB!NP{Z%qCe!nt$x#9K`YMh8;`VZ@vhx|& zDske}sZFMMr$5UlXtz$V5Z&y2FC%oRVS}_x>sT|l75*EwH8=!f0l;OOZm$+uk+@byK}N*aITweVE*`0p>Vgo17C)w z4aw^9k4TL_Xn;}J8%ESku&t4O00um_H1cL>6ehR$ss9tWYp+4U2G0x-86J-w6EP}H zB>)r>(`;m{+TQxa0(^ctU$`6rCbM$7mbHR8M_)W5D78Z-AJZOE z0X$Q|v7KPq$$GAe|3V0ay8J;1(C-PlR(%@$KW6YB{<92I9)okXad44{K9W((jRWTEt@fIASFQGVNi=|e zgU-FZQ|6x*oyGydx$~(WKVIj?RCF_(3l3_{^`i#{7gIefXNMFLiT)ES1jkH`g(=hw zO`0NHAR}U2OMZFxRsOSVvtqMj=1JE12pOF7mp}|i5&oZxL?fIi1PuS#w&F89NzQhM=R(Qty$kx~TdM zIAZ$ZEue3*`sqJ6CAXclK_5HD0Ml7;#w1O{6#WK{{1pDL5Mh&z+{M?1d6+BDtErfH zaO&cJu61}y?n?1cXVPc>32#_xu^zHmG;hvAufz#Ra^{M;zLPYacYCQ&-Q2IF5d6xO zQY_L)%HvEp?0L8ae=51eVlxj z=3s%Odadnuxa}|>YayHF+kymbV+%Qok6+LO08St6+S)SG2huvzUqrb&U-lj7()EZq z;-sa+1~)dS^esms85lvAnB3Lg9oSVMD`Ta1T5dm`OS0cS?%2)cp25uv`hg zugcbj4(sP zw&+UB3(bV`{EUp2yjYfxTD|Y+YaV*+kL967$>e zL~rnFXCbvjjr-ie+Utc935YQxSQK19%z%vxlb834(je)C(BS^-b-q#iYpa$AN9vgO zZCvT+kCJZg-09Kzqp&zhM4>bATRH00Mz;WPX9_ad{IjE20rO{b=;%Nf(j`zH=?py< zK|GD&tgy4kp_o?h7GcP0d{5CP>P_{+jgop_$&4cs@M>R85{FeMQ>9C144PD?lOu75 z{lsRsscRnW{Aoy=Ii_AHTBZK9s19x__x*V~HyVHs4|?{*myu{WSF)J~_X~Hd(*=)5 z0^@=zAu>X7SqdJCh3nN-x95p)e_G{dz%f&1s+sYzP`Hxfq!C@|fS?PfV*Zno-cQN7 zL(2$Ucwh3EF`e{@viG!W^}(n6BoJ+v-n_+D-1bQZkbZuRnOa$z-N*+13MEKUaV}t- zYb)aE&KEY^{FrRDfKw=)H!Zo}&-e@$G9SMlb=f&Wl_nNq(5Lu-aWaL|{fVoCTD7#n zCv8)LPj=X2L}L#sxi_meV3oR`oIN~m-mZFYPU5T%mg)ao+1Cx}4Xe({e_Ck-rEdg5 zKLDN{;6stnnv0j0vr3kzRb{9ivoBi}gssvN*v&Yfua2|c-%;DPP9KUE69-7mFgC^R zaw++b9XdNSugx6uCZp$*ZD!u)UxQ3;d*U&^woWY!Jrg(t@imm34RqfgAD;96UNYYu z<QPPMQM|4G|sgkKdAxrZwAwr;EA{4aTD|gfiBL`|)+5o+;Z_#sbuT6pS1ahBa18 zF#O6Ap3aA}xJGxQvaPg#wh3KxvT|k|-d18b*N~r{LXOnYMh<9GQv(t`3qKgJwhO(+i2} zK8f*DCKNK!l$3TuKvR+RtMgb0JZYv_8J@j7n}W%vU_+)dtK0DEO5W+O56mGXWEow@ z-OjlXUp8k_aM|!oYlLU}E`1~y63F_ek>Hb3z(^fI_$!%%6X%PCRip)n18fv(c9Esh z^)I?5HpYu9UmKlY>$OaMJM^8MmmGM&=0QgC*y#%#t>sY~_)z@7<%Gxi$2=IeyR2Al zqHV1SV$E=c_w##0hj#>mom@?RT7+l}Y4W?f5*@Flepki}cY42+K z(03Qpcxx2ra=Z{(_lQcAtGOB&q!3Vnhz*fA%tDz&0)%|m@a5hgyM?vrZ z2MciZrM`}xnJS7IPy>bLa&AUi6P2|I(o@0cycMdv?y6bzK3e-U!&!ed#s9?Xa)ue_ z-R|+68EopjI$w@UulTY7JI9zZ9MFbI+G#;fKV1m2Y^>`ULb9{?{CT>oZh)R>g=s1iEM~i9;NsQj z0rkV>;S(-9GjGFj^EDH~q$gKJ3eaF}NjAKhq;* z+7@GUp9=Brwh}M z4GR2+!_|Q6Aw+P=K}GL3<^{f$>1m|uOt9ftibr{UFA%Oo3kM>; zzgHqx$)j--YOHjd5C%@S5B~6Q+Gk}r<-#48$-Z)gzE;_4W_FtMZxoO!J-pV`udo}K z`&u|@y7|@t`g)YA?Xh{vfCyB>I5;2NpR-_NXT|j2o8x-D*(3e)D{dK;02Qht8fQ+x z+2GpXXql3s+zFmBfd6hKzT^O^YB+`l5CI+r?z6TkS+EO?ka%d zmm^f?R@;C6`Ybn6HG^G!UI+UUj}MiA%9KghPn;xSZj7#79`%j4n39+7W4VK{2|>Th z>zH1=glMQx4hBM*9J?+}?oz<;mN1s_d%CV@;a(1PrnJ$r_kSV`t#Ip>XlOGUq@VK9 z*v$)L&%l4st|fl zJ~4z|NtU7*OAP47>Y5QV*SeDIh$(yWu_NUT z1>Svb?&cI+=;APU)Moj4cyoT8&h;d@UiR~rQ?tPma^Dl_xVtA@Tk?pAy&A?=nms{pvDGo}+MhuC4dASrwLY{gkDttTy5q}U3O@~$A-mug zVXc>w2HB$-_6rR>lHY)9K7;i>>tSSmU;SaAV2t1Ot@XNZ_t96A&_t2YOeoZ*MeQtE zd7iqg+M4$?srnJ&45&0Q1`qg_5Jc|M~mzg`AwL z0n0k*1)KuEu*ENwbq=DxeCfD-^%g|gLj{`)T()HMj3fJ(t?DK}qBkGT{SrfLwIu91 zgX{n=Y#5u`nUBxy0QXTg->c_V4!Bf4ZrG^f?B(80zdeP-@lk^MaRnW+^@myWDNK`x zwf!^mhiBcj6(0u8v!y+**JC#w%}#Hox9eT_P;T+7F?xOpo2UB}^N!~OPtq1M0>8zE ztTkaJn-WjXMwiLiWkr4M4{tBgWE6sYKh6bfQ|xVM-<}fSA65o!cbXZ!zBFhy+ss0B zJP&z(=&1+1y#Q;B`T)H}$;*$#h&v1uFTXcCH`p z*VxmfBf|GOJKf2wDjByVfj0eu8^|Yvgew-c`Qb+rNXLmd*JN3p@Rjp}^L|&DKG3Kg zw{C7##v-Jht8GY)gIEkESINg>ScIZwf|yp(Bv1bAng#1^Epa1{wcgiZ%N|G9Ajg`4 zF)w&JCE5+p`UA(IbTy#iD^=&i9nIy#20XB%|M0u|>uy}*)ve;{$b?ve^{UfzTLq*) zT9i6?w|#LFHkWebON`%$Bv;knz@I1Sh3#lUXctqAWh0xPY= zFHcKOa%a#@bZO(C%~Id2<(|b}B=Qc*C8~1kn}ELc%vPwhg;{PVf|aN(+?|S~yORML zs%RLeS#|c%H(zb5!<^kNTwm;ij{Z{=s%CfI#<55!&niv$YL|p7=h;xT71AlVwvB2N zl|$AjcT#nELWSASJlsJ)^v*B%W$Cm&QiDsxrx3Bu`jgV(v+9tLe&5z4V9u=m&BgLg z-`;)u!kuPaRLKu55t5_;<}?&#!01Pib}0(m^OH*SJD3tRx(g3#Qax~>VDg056;5Ye zxGK!bQ4~3{JcEHw4nBK)DSY%ag(KOm;x+`zCCuT~PG*G^&5Y*Q!)6de&}W{m>kWde zG&;Fz`vp8!yt{z_Ydhsca z8L-l1qpQ4qnWRmi!og*C=M;!ihA+G2@+=IN#~*Q={)|fq(hf7;<-7Fk+=;Qal^F*! zjsusxk#*~8N07E(qPB||ePg+{)c223$XEc6x5xvE9*35dXR~A9j?4Q3LzP}mSwvp- z*&z}u33%cJ8QAiS)n9}rfo3buuSUkXJr7S$bGb^wmbn2W@bvc^nw(#ytLrq&lDG0a zwkl?^xJ*`SuJNTECcV#0tRROJYDaBbeIef-Z$@AFbjtb$ z#jo;1>?HE9xD|c(5|lk3;ohNqR@ACA4^JRU#IEt}*XolAK<)z|~%W3I(N&Z*50BvGs!rl5S)~ z>SMjwWW6@?$CKYmEde7g72#%iHgc2>~Tlx+SH%Q$SL>q*J=3ySoIW8>BlA-Q6MGdFVQH z-mTwX{qJ+%+!w$@?LB*D)y!V&vj7-O7>l?z@pIO+tu3tpC5=nk)jR#qq5;r9^uuyn zOAv6HRNW%gwGKC#t1!LzOe zjU5j-jya}Vui7PD4TG!Co9>`2HCjVBod}VLwx|yUIvYJKr=_s4@1hTBPYFr6Nm9gZ zG@(CD4Vmh=xC=&_@K#-2OAc*Tys^bt^nS5Ngm)?-)NGUkj2UkArWv{7e#KMKV%BL@%@*ss~-s4wV ziwb8Ihm!kAJoMo?VT)5=$6_5mHCupBU7Dcv3D-+8%z*+Ls?OQ{3%c+KvH)?*<%y8B zIyah3q2Sy2w6`MuuD7kL%f=L+%ScJynl_wWJ;6#nc6;+9_$+NvXyFg}gXoapLsJU& z;wl=;!i5r3HC4yJpJiAXTUs-11gfaH+K-g^uc1F?;xT{l89qjZCsag7sdbvKyq;gM zuT6Qm-}FR3>0e%DU*@Y@6LQQAY;QJ^u>}s)$Q28EXL$v>O)NA0R8!Nv`acZ%j{E|w z*!jbplfumW&=8y}9ojb`!V>c?f%WaB_FGL`?dbmDw4=~eSPso5F?I;Q)?~+`MYtH8 zSq@qEKI+dZV1y1z%fFr`3Cqm4gF3jOyeIOfXTO9^c4Q5YhO&+-|4zO;D*UXD5UtNEen@dlx)-ik#SEi2toxF6nGt6sRbG?41g&}@v^pW|=Qpf3rE~DYk)_xEGOk0+Wp+ICffS>BR;4MUla6&%^6%;4Gwy zx#5^;6uJR9B>0OC@3NmGxTpkftpaZM1fLJaPFMdX1#Fr#<@&o?mjvdYyn%5QBI2PZ zymZN}B%D7)+lDrqv)(Qr`0jP?#E&{`R!_uq5qd~zG3K@rBvunhr8-iv5gj~KG~5s* zE%WN0YOj`i;vf>a7j4BF&73_ensjz0AP<2BR+1uPuo!%>dCQFS4i4_y?kEX;h0k)U z&Bf+EWrFc;4zCHdc5T|RP-0sTz{$4N{xqxQg3-ssyX%C21H(CCO>0cslYbzDH;u?l zcEsxyl&?y=d(EQbdHQzU`<4)s%j}Spn!&9rYH!^6>GGFa+vR{;$J(~lH*YtQVQKc* zdCm8sdOu|lW3>No7h z{Wvs?$<-O&;^omYRSyC0PxU1Q#L;uZ-h8f{@5uZpMCOEm_$942K%xHw4-0{IlJSt+ zorl24@k)}|(aq?}PD}mPYh4c)!bUSOnnTUIYepRuWBZh)CN)Jq(wdU8@ZX=9%Ja&Q z0)>64y||X91l_(La36BTRPZ(VhVigI3|rjJ73gkGJC_@%NJ5WVY2%d0ZkJ;Fw)LDussTJ-CRFU!#N-Xa(cB&OXd%dF1nMQ%Z}@d4h43# zXyU`xU5OWOazSOUb*4o&4M|;hT1B>2$LX!KmtDIz*H5ixiI$1vY>9DO?g}G|dq~~r?+^*f+C>(jPET3*- z{f}mwk>2$>d2LRpcM8AqaF`F23q^97@_J%Qzv`FRWbKpIJ^jX}Gw{vNSm|%JMHjYK zz-sCvv*ezVP6c9NZSIN|<)KNP4?O-|0Yp(A^0JQZXjY>$mV)LPTpjr^?uOi_C%iI- zAVN*Bdhrs%#J2DXiWJ9Bhd8XP+%I=DJqf>L;aZ42T?b8MMYKpn zWRk0yNz<*8x4*QUjRnL64*{@BKx5PzN5!gw2t*dOB#N~tBxa?SM{C?aLigfz2kmv6 z_i(q7cmfVbE6dGmwQ$hYMSmsW(FV~Kq^0oP4#0^;HyESE;fMuHC*0k0=`X;UVHkac zbS*vjLmc%r?h(>}we=Tdb|ci+cnS6f!Vh@+k4x7XuQ}WaOX|9V#=&IVZ_{wiS4|J` zUo+IaxS(t-%735kUu(R%M2Q%RDCPtK8w;^)`O1oxpw=A|re1OTxyAPa&Mz8L!!%Du zXme8*&Tom)xr>j;KasrvJhUq+Qeor{CA@ttAGPB2Me{4uI-5#s-*pUp<%0w!CnID22eLQu zijqc8>Jjj*?GJE$(W{G=Rq!=Lsr0H5RSKPy4Tj=v>BUioRzO4mTp5v7hR^B2(Xz!0 zniuWiq16<(Zk!>as(T0G(pu|u`6HIe!+L~lXxWhXQ=T%se-2SJr#!;T#j`Z~%c18E zJH|Kis^VWh6K~nsWvm+byGNHttyakU#S#2%3@e}k&276#(PN#l*M=pk_;{;>%i@$? zG-i_2*IvHD>=A)K=Jcv!+J46Ks8O20P7B&WA8*-O&bIwc5S2kL8L&4Eun@Lu3_A5I zt)KKng8>{`Xn0iG89&hZ2;A@6*y%UAlU*|tW;GFRI3b&whX5LuH53W{MIG|y($+-| z4r^|QA-Lhg7=t;UyKU3Gsaeg2t(z@Zlc^bg&&r&T%9phrhK<_f$z<2{oSHiSlQ%iq zO|^l`o=VVf%=J2iGLdS{AdNPTQhK4>%XN0BRz{k)-Bm*OT3Ts~#fIwDRPkZj;#@J_ zut?Grz)RuY>+Xj;h(20MAy-&AbvD=gPyK!>!&S#TU9)qtxnUg4a~Q!*Mt;XMhH7rp z-RkfgqR!z`GC=-kG z2|<`_svR#B|Bs~6t^n;L_Xk2Z>jr;E!;EnhNQGe>C}Jwzre>)~IP+)k;uYkPY%L1q z`3(s}c+K(3;}SXu!T&21vqDn`tTQ%lK9>faHU{`tgyzlq;37oV`|kECxPhN&5ymqo za>ne?uwx%D{t7bCxAQps@&N1=G^mDTjd!}V+RmpFU0?Lz0+T6M8B5lcBa=_PP8gsR zBdd~@o}fFAeh1h+KzV0sAO`wThR2U=y8xn#$P(-FT;|E=Fw6o_m0ho|&|JQ4UD)N0 zz~JPNaRFgX7+j+=r<%*%3JVrIOQ@yi)8kdTKd@s6eLa1)TW+}hYN+Z1BW9p*XHA87 z2R$uVLESq+u)Qw&RDhOSYieG%Z($ed?;R)E#{EB*w zqt5g6K!E$%-0Tq5n4#~03J6SbP;M+~%1&iVN zM=vC&`1f_g_|m^j=Rtv)1TY}+FO!QXmVD6xaPD8=nxlTpPcwhIM!BgLI8G}GS;!w3 zz8hpsGq2a%$N6*|vOdk(Gi`-SK8xeHN&;sBN{%ZiraG0|@x`x6uGeYr!Qf*fSRDM) ze=i?gY>Nh8oz%jC+H#Hf` z?SO!wrNw2riLq7FY3wQv-N5wlfP~)cLeH|PnM6c}N_=cshV}dLvSo(1yWrZ> zvi5e~$BX&=_{aUxR%9-C>M_ZU!3P^;24b6#&)Gii)>$aMIKF zO)YezWq6_|E_M4ovb9|nwhvZOvIPLaR)%i7#!!9hM~N?CJN7pfgxCYH-cZyGJS_8^ zBpt1s^x4e?ncfczw5Gx$YBj%pJlM2xxE%Q?$O!ej*>)>>ojq{g&5r9DSzFTp=MuRv zhMA4dD1x5)yt+^A?Rpc34OjPfBcn2JE{XdK^Q-BBmN&l#Bxlo3rk0C;#HC&*<^7_r|tqnQlaGi`U!xW6H#j4G3E=I}lPxMtk0> z$vLc~9r8Rq!g8M1V1xd|C&Sp=IY@J_{C&a256a;8>-8!~rpLACneDFWZ{x!-k?j3* z6)G60*Ok+g86R&lB|<{UKaPe_do_IV0d{c@(Q{|N1($ivo`6nzQmYJ6L}r~Qa4kB^ zF>mO!lY&E?qKJ58tcZR5m4a#1Vyk`xP%oA(915%l-q7vsj(}$^wnF1(U%nD(t_bMR zm-VA(jxKWte$F)OujRswtO+GM_4*_NG>Zb1W2>jN=(dsWXr(?Hb{G10_Ik*dbOU|n zGE0@CvNMy_Mg)G-xQhmBFVe*mp6dkm$qo4BvLk-WeA5~7mC9ah`xi3N-2OK>mfK}> z#Z37lX`hIEHm~M%Z{kmuT^om)`;tDb7UMTihzCO~xi#eit1s_i-uJcmE~2)MW)3&m z!kT^I{O=uC};2l(`~X<0Pc z4qhARbNC1%l}$_?_qe(7xNgI5$mcpFuoxryDnck22AosKJuX$;je-Q(&2%HN4LXbyEZ z9pJT-d4*s;tksv{hgyu4t|z21LEb};OEj(tb7Ap#Z=R6^_q*h-g@$PGYTb`Y4-|aF z9Qm!zW5sNu`{{$q%A1vR0@V@l28!!5G}FgTCj0ems6GJxTd=y>7-f*LOqJ}K7}mPO zRMDm_gcNFdJFl@T3gu!t4}oVSI3(k7e{)khNOlcloqY5W1UWP(Lt9fAxy@*19C2t{ zGqE<#K;S!g9aauOxPW4lgv|eBJKubRRI#<2aWk(mBfix}|M&_Dv&xlXx!RWU)diFT zM#A=_x>Gn!^lX`U%ep=F8m<@#IDmjQ?}ao; z!Trk+EG-IK*J>?q9x^UrqVMNVhLB=*<7$V}Bt$3`@}5-5UOgelx6?^reoj(RlBiQC z<6)%5c|`VlbGd_RR$xpuZQas?IeZht#hsT+V42Tlg#u5pk&SY&wcd(?H|B+XMN zAL(Xe{)7)GH_$NB6Zu}buq$V9G>qaN@sQ6k|KOm?zIb*db9K3UPS9~_hhZ$jzB)fp zu;m>3PxO%oqch)>*^nfGg{i~cxmJ=LMXX{Pk`j*uq2gEO)`vd{G`BqdT&AcWF_Y=O z5x%D^gOnF63-R}EdHEwYcFC8Zn)XE@H#>N04JhJ-VnjN-yAjp~vkIGChhX#yxkv_v zP&oCN0GVp)I))%MdY`b6cMIouRyZU+8YTUOy#1pq3p~YIK)M8Lt8a^XrwO=6h;;*E zKlnX)!RxoItR%y}FT_B=k-+{@OKNjP&HR8{AGae{J~y0GAvQPn>KjEo|GFL8rf{Tc z*{jx2c2Rg?TY1;Y*ppg=a(4JJ--<*s_k*+T(QNWn!OFc60TI51&z~78{$vdxeerTpT&8DWpp@lUIt#!X82Zv%$XKbEj$_#AaJL7BpQz{ux``PM>tKX6DGs&Tme%T~pGf5b>wmE@Nn4%MG$| zAR1WDBVyrnPTY6vi1P0!6pD2&@T0T4fpBwqTVYN(a&mB=AUw-#l1<^ zJl))>1g$6%bj9r;<#vrM$@}j!fL3%?rS@)$V2>Lygd9fB# zqlHrDoA&C>B#Cv2%^!rd7(B6LlMK}o`0gL5HAP@$^!Jy!z6MXtbjNg~q)mcrY|Yr# zbFNLn#Nk-0-`mZh?JA||-y#Oq7-YeB z=T7Qe3;3O}y$hc=yF8i_(5<-XB-7UIhnGYbmQEGS;caaX_9VX>?&{_Edx{_IU&HK@ zJ?_&tn22=#8nv_{)V>t$(_3hb)Q(goz=L%SPpGCmr9nPvbmvxCiYzj{^sEO>k1%VJ z4=3!tFS4ET$Vtg93)JE*NOH&mmHTxM(W&M|H<*Al&8`YZ~EEZz5@kHgc?a1)3p* zh{`C(WmT~>M)1xf=Ypp5vZw2fQ&{&fC@$A&BkT1tv;#<-b}JsR?d639HG8=xW}aMe z1o+Mf{TABa=+eZSX2op`G2O=l><#r94ySy|DeKvTs*JtTUbr6Im}$w9y=73TX>2vj zsmrX%T*olHU);wOXA6Is+A;UNMLSlB|2ZRG&Ea0{Id4X+0U959cH_K50_!6>>KB#o zezL*=KtY<=_Yp~~3YTr5pgG+&@jUd75nmDG*u*4xXO*hMpO~C_-1iKOR2AT7iav;;P9vnd^~Z+w{&%ei9sHY&Vf&VVj|x9tQ%9B=sUWR5WJ>nHR1rqF3j!9Me$YTce0QuR6^ZW@WyBZKtQW!8&K8QcR!EYbpfY)Q5qlwvRtI z+zj9s3y&jz>3!So-Rdks70rF+kxg#&>+NQ$C7D9fW?iACRs*y<#P0cV+3tn!^i1mA zxt*b(Snd@!yd8*h@<&4mJ|{z`l|Wx}vs2Ejjb7yW!M&d(?mH2W%w(z5jLjIyWoxvI z9}}N+&+w!d%mSpHq6sIKjLFz20_SH@=@?+CMWSEABouQj32Y)vRQf_bgbj-+>5_BX z*FKvBopB*5rCp-Q)+3<#6H%ndzYMB~;U;J9>skKnoLYsGGtJ=a{kKi zE{hcdB8S%w3!Q($(ja)nBEVQR7!}$7vYdkgE&tX`%Bb!5u{~+JN9>(C=cj0!3n_Ja zRbiPsUjbN^o&w6)-@Bb~TT%OJ9A7xI^DU+EeBMSRzxhp6J(XNW7G~xq_Pf_GLf&p@ z7n-k@z%{cVnz`wPSGfn*aE$dWhlG_8|2JK^S!BzPo_B3dn8I4=UFb>pf}ccNJ%5AE zJ={pm?b-7RM%Wy9-b{)czD{?bT|e3_{TNH`@B6BW2`wV20Qn;$EzFn5z}0u0&I|?k z@f;4f{&MfcG@O9WUr3zvDwr+0s+|u;@oBa9AJ|e#8=z^14!LKhWGWaV8cZWSY=MmD zx58SMQuN718xCv^dc<~u1#CTW`&K*t=%Z<7huwLR9+^AaQzv)%kK^F6orPchy+8PEsE6M_6au}r`Vhz857}PS zIH-+9w2iCweT+S1hCIi>(`dTendLHxNn`FE6%;8&G7I1-)rKdaj-Sy5`t^)_t}Pp7 z;}S33B=J#UF6 zZ2)kPUm^94btbHv$``5T`m(_6fU`9>I;Z(lc06}&|#zh}f7~&XX z_^D!QsL^|2tw{_3C&=`ZT`@h0g^!yq$|7;Es@`#GLSDuwJjTd=>*G>arz zLX@fvhgh5!eo&I|Sr3(+JjSGaQ@O;q7D6-kYShw`#$eiB4Qp+9q279Ecqw#LnoQi= z(G&J>LA)Jzz#jU5c|~3|f6#hT)({g5csuUfVNT=BNX9M`Vz?4hq?Hr6a+)Kn>#fzd zou9^ zcKNS{jShKJ0?~Zg>sbdwoFS+*wux=dwq$zK&1v=A)Bfc}$>a05G})2eCghdE4__@; zJrZtVZf;VzrZ!cS>myz>(1=LNp(5*A5@$urlQNi;42MRc&}`NqsmIOBOfR4g4bkC1 zAXHK5n~eY<_1ym>*N)wWJbr_d5JAdDP}LUoM%u>>kq6W9kg-*Udklr1K5Y9Xo)>Yd?G~eRbDZ2Qk|PH7}(8k*e^f4{P7B%q$jT+Du;?c zAc&Rlw*B@(&*C(D4%?4}IVLdtV(?t8@HoX1RyJkvVNXzVnD;@p`t<0-ik0fUI77~B z5(?Uk&OR(UhL>M&Bk`i`ZEu%|)}SKm2 z&9d{k9HP+45HPPSb;mfb>RTMYqE`Q8sfD~a=A_|&o-TCM>i;<)SliK;ufsbtov>jX zbs2}(N_CMCu?yuK0~7PRRhqw){mZY^O7*7wy39O>wKw%D4jYw@hD7#pgvqgfMdQ+W z^tSIsL?)Wj$XM7t)lx^<Q0)E@bNOdM?<#=4)kaT;CmT#`T-a$a+}i84w11ZqPD%SQm>q5- z3BOD_`BP!Ux06_dS$atdB1R(2Eaj}rI~>Olk1R#1i69!Fn^gBS;fgZH)#j!a#$K)Y zJ%ZTJzT;oI?}Tp$^cI7?#4aZ)y=fT*CZ)ZinMf2%i0~u&7ao?9P zM6Vs>br!_G>rf^-OH>X@0+qUU>ZY-Z0~ZeVv->X=%S*EZZ)&=UO(6}o4MOY-D>1qF z;r#u{CT^_((${ct1<@&s z96Yez*;@WYFT@Seigtgi8SI|B45*p7xbbhVXDm)Pl|?vVpHsyM7{<5#uNy3rG{>gq z32v({*KOVHnhEFWjPX)o1?dUr^Ft&GS;MFhi@+=CDzy$b6W{MYxTlg)4W(yO^Ck+r zz}RmQvN=AChZlh2E;MML$i~9IS3@=r3wrT{&tqLnH8n<>@*rvnTp^8yBa-q51LKI@ zi^ewyiNZO|fmh#mEk96g?`2gtdS9R}VK8V|q!gaK3CP!CSf-MXY`g(Ea7|bs*jbQ1 zCTrXyTQ?o*wB4RJyIxc^H+UDlA@te7VI-`4pRTuFjTX#wJ>TG7RBD;W|MqQb7C2!- zEo>9M(Avp|hM+YE+kQQ%(XGk!Yrs1~7TVu-0RlA9r$zcG;O z=)H0s~K_I;R+f=LZpZZ-T(Pnrp4G>lM_{h#;pT; zUR9Bfz{>sy=Rt;)khB{M_3_oSAk=~B?k+EvN0Xm(tIovdn9RgaTmnrnp1Y1TPotJ^ zqK(c8$RN_AXql^ER#xzJ^?8Tu=9$0oF1yE4N&6)15Z`8Q7 zN(tv|CJU--j;&(Vx3BQIrPwToXIb@0K-X7@ZTBi+zRn zt{G7NLP+$1k2_LWoXq`(bF0%^2P;qd{pz=o&M>rT*hX5J?49q>(79GoW}f5oI;i7-GXF12hrz>Pj{FIc^QwA zCOn0FD*-(2DC&uK1ahM1_lFe^QqCtW%R6s{JzigXAt<~9-$A?iw&*aTfFNaeBo*x7+?`4_)76DCmjT^a}Z z?IQT4za5z@-`Aik0r%Mm6Meje>K=i>ls!Anq{>sGW=F@1(k_F)^YAo1i-J5RM+?1g zK>qib03EQgckHn}O#dR8+1W|R43PmpXtVq&f)C==nXzpQ|M1r#^kB-wDUa~qm`up4 zi;60t@6^FIVCsMF&#N|;iF$R>6G8f?oIRi?JWIr9GhQa%&@FXgl5{{FamoeLj2BWnuX1m6 zpfr2kA0OktFOvVD{?FCyM3WbiU0KyMt`d}U3So;_jcWp4Uw+jp1ZpAw z^~akBPH;i)%GiRHyT>`jV?wHS98J4!2Wi;u!PsI}5(U4Quts+nLjE&30ZFQ?)Y+Cv zEK#wkstSDOIf!LKa6?qPI_+V#%w?K&lNvAKJ=~UyNdm_H`ZxuwmJ2#^S3WU$keW%( zldPOUQESHPorf;2k)!rJ2G7(5xTc=GH**GDr}R~|FG>oD0~9vDt)GaZ4}10vdv=wr36 zrSvSZdLb0fgQUA+@P4tYvQb2*q@L$>bWEbzoJndLv4QoC8Da%dBM~?}sU!1H@N~cH z_6J5Ha6#CbR+x2*TB?b^e!MLrBe7vF33He)bJ{DlRUh22X8|BpUWS53Et->HKrJ7FWRXcdlp=o|aJJ=IO?rbWNXx@dNf^ycz#!7@6*46pOOLqMZ z%YOwa|B-upCjLA)F?B$eJtjHX&esv+zw$Y4W(*H8rbF9JF}56ou7A0^+ki^KF0|^( z$P7P$0Trgub?m``So|7GzA6~VqsVFMioEQUQMMzpCGWOrGRSvW!)n z3O}e(pD|-b=J#!Ox;jE)O}$`v*XTR_;zvhr`oog)jUb*E-iUTq;2xesXtKpqzrqWuDq z)VPDe;c@o48nw5_7WwR_7oYn}g^0{C*u3XDm+G$HxQiDQW+Uq6fDRfxP^7$D<7YS@ZpZ_)If_`iYUe^fCs zZTqXXPre2#(X?=NSKo+yUu^2Tz8FBZdmF*6{EkBg){NX8vr}_a_JIb{awOaufn-dA z`WxmaIT2H^OWd2v+0k-&+f6MS&!?m^+Z4r>{RJ{pJy@^hz`KtAKTqhl#`_USNTV8u zzgBhqf^isW)o0IW4PLkz!>V`hX3EF5g}{)Rf3O;)vA#~II$Z%R2owt2NE;oaKq%J| z|7XPuF)G@hn<^Z@W5e1}%zRuA+6`7JE!Vq}YL!tkcRar}=<$HIu>@QzGM3&&$X~`B zmqARZR(eF%*iOL+nmedEe25gFQsZo$KuW&Pq=}nhhNsSNG2eM9)E{5D*>NGfK}%im z&$#{jeljabPiH;Q;PN8twJgNVUql~4hxTbn`4+^>_WvE0eQbYXtFT-d4FzQYi;bJ6 zV>|tEP(pJ1c)d6ID*s zc9m%m(tRMV zZ}Il&KWz`>ohw^Mt7z%I@jma$GMMg##i7Bm!r+fu zwcPH?wmk)kGtTJ0|7TbswEu9e5}J*!*dLD?=Ne8SFP)BG!W#7#gay2Act{=f(@M(` z*6aJ*xy{q_YmT?-m9*FVH1cw&J`zHeQT~LjK#iW&OiJ%V^SUCH^LjAjDdp!%^WW>L z1JiY%RHH+AobC&rw-&sxnP+-F!2$<8GD}te((Mr1^uN3u`02nqf1@#>ueK@U;O-5F zcRAPI0UzJ%i%AY1btq^=Lq!JgYn>3l!3&|dkRbwyzypa-G`AUI&FC-^VBJmf8!jqaQ=d?kP}j4 zkUKgrq&QX@kbMjbEC5j%7-WJzTVAUNiVG8L1n!tJ8^FdoZWh=tXX%;M4-=9XtV&RO z$A{n`BP1v;?WNCR)ppBm-=}1NJVDtxHie|Pprx%1*0o#aVQkE*{l1;Fa;r`Bo6@a5 zOeARAX8umc0vZvWEM)pJLM_%c;*rCX{oLlcD2==(oZx>4N#$yPIY_uiZIN@3OJYvQ z&dVbO!VvAGxv;CK+uek5u#amRnr1=^nN@6)RJ`$ke?f|ALK`GZRpKzvv3g`!`6lJGc7E zz%eHS_)BI}>I5@b6+3??>&QVf_8vR=@`U%tvmn$k zb|5tLkyO+1ws#9&*onf~pYjyps~s5nu1)&?OqzfAxmV&JDvdC}n8Gv16G3 zd`E14&!f+}1bMxC=kMq{*Qu9b!4+UXy)mo~eF1y4D?dff16fM)7*PT*_GY~3&m zTOZXHgK^#ccP@bK5XBLJ`kxzYn!jrSr`SS8#N2%A?rd4$hU&{R8*?wZrU*zHx@<$B z_;b|3I)6@sYxS4R&N{r@ayhL13V;n2|2bPGG3IL2|5HrfBTb^qhDg%0Q^0pa`j3zJ z`v4)ypZ-rrmH)qIEyiHedL3-lnq({sVp-wIUfe;c2w}2p$$vX`pkEJMs$(Z#!5z7# zbNa91C06sM*&jnwhZT7}INy_{{^?Kf_qd>^m%ZfsLfWWNOGBN9)(5l>eJg|h)FmqR zW(JYL|C~MmPj+i8$24xFe{*6^=TDYTEyQ09@6S)L?1)_RpolH|nuH;f(}`#&qk@m{ z(e;tHeG4ediSFip(zOOMKkr6vyyTQh9J}uP88~met_sr3YNa3AdS{Nc=2pe81~|QX zH^PF#tB>vN8u=eD@^0=f+g}o1?zWZ^^N|0}o56Jwdncc>Jv(Oo#+o4{5i;0Mv>qO9 zwY}RCvT@zTkCJAJo7o5~%hzI{2o*?wJm2zm3n6})7V+5VOyyEH+;vWMmU(EaO?hkG z>IH4b{0@E0# zBnl(+gS~7RqY%_7vpU@jVL%>?CZ=XZo2V21DHWjt@?w3j=Bgh|uNsUz1zyI3^W>?3 z+)}szGvSYEYcBQv4SOMyVBKSl#bycFq*h|07mq_a^!ya~2kfUoJQd^7%VMOrofm|;(T zm?l0Bd4hj<(6(I|=5Di3Z}NfhpJY%TJ zn_y9;864{8NL&q2h*WOI$Yvf!;F_phoXMJH^y$1!-z1xiVhe}RR zA!}I86QZILRBYPdJH;7?7`#+Tc|Eiuy!m~1ai8zGjjf^w;#K3}O&?$3!48BWazCJG z^LiN_k%&al8(u|k0p

^m>5+Uqf=H@VxFLo1p;=!EUeP9b0{h1n1}MtJ$}N9I-34 zMyGbGOA4QzZ3G)}-*_CaQndBQ}X*c(d<5)nQ&orTuUdrBlTx+|_x0^cNpgB3L@SDbkOBEiS&X0-R%?|MR&t{y$NbPiH^B|=bl zQqiK)mL~5J;O`FIo4M3H@ZuFa!&>N0v{R5enllNU+OM6kRnB&2VWl(i`p3GBfIe|V znypYkrG+3THc;m`?1xLu=XE0t6*gpkcf7_4S)A5&JUzs3cZq*U7&F)y!8nMZH0Xj^ z20tlA+Z?u`x3t&1j%!RT-NyMdWge~UU_S5eMV@BYO%rd}_4pg-n&v`3U9X2WNE<_w zJHqW|wC=Z=N3$cE;&pq_*v789nMu3eKlaaL)-f)*VD3cYs0F2AoA93&Hy!0D+lR#!S%z$+Epx-d;?%S-2 z$Qa_|I};M#Z~^tKp@_JHY9+*Vnb9|ifSf7(5&y?ae2YRebHkPXVCb)B;QsM)G8%H9 zm%Fj2(zL|EQ{5%MUN32q?i0|52#&1dSq40|qnDB%H-6H@C_c}2|gS#%j&ZPM*IddXelI6e5- z3ZbabjHt#Y5Ju;2FcHAtY)jj=*T$ zLH#Jz-%X3m2kZ)K23_-$qTfOUgLh;fWtGBvX&T5!A6SqDkFz*xqcgzvd?u-vh0r(}PgHqp(miX;X z-{0SB6T_$85PhWiohfeZe8q~zJf6uZuq5AK4k1><4z*@cyauVTnyIsbV>^~ zUK#d>b;$PDwYKQW4`1umj17?8qnn0)@;14d9UkceOCLi5z1;RGTI|@jd*fG5esXLv ze8y8J_SuvR%#Rox8A%ngLAwpZDBvw=PGf6$(%A<-ELxc!W#kpCc_G19H9i}?N-9&!dG*`LK|#+X;IN> zYA`v1apS7-BW?sRyB^>T%)Po*^1gtJ0|a-|!y`&+j)=JKv z_8cemjy|yTWL7MFjG2G zPPgoi;EYkKQIE%uJavp?r4C4vxDpWp**qPvLs>c@2^1g zEl1xj@;^2%**E-38EV23xbbgqn5#q9u;U^yyjD=0@kv~qCLDlmpq}oKNe;@c=T>ia z6wFhJyu8$`)Hps_m;IqLd_)H;=yk1)H72b;8G)g?YXn_M(w?&Fg%ll$_q)ryCh`qA zss-nb9&T-uzZ7;8s^OyUf=@wk7;ceLUm9q`!me<8`4|{B;ON8^k0flX>S}`ZypKgI z@QHDcGMwA&;U?zI4OZnBZn9?j0LS_h(9$w11n95%xla*?td=`1bULoy*qC*rBdHl9 z%VuQiCb`j|wmg3$dls?uB^^@X$4LvIw3?$i{iF>V=Fwy2(3m1p>%q+sLFhiFjqosn zaM=+O@kO9*>*JwS)g%087slV$Mm9AQ#_>n)?=3Yu;Zo%E%0wlOYg1fuBySux)ySux) zyX)ZkP4YbNd++z-o;3>=iQbWZRD`Ji3n#r%zQ0-jiG5~W#-0?P-O5Z?o2R426zAJ#j!E9* z0rt<`_1BI>Y*oqrUl2DLK}sN%DExkR#CaZE8Pb0}A#Os#yyYclS={^JqV%JyjZlgU z(5I!BGv98AsIOT9myK>+2PphiF1KKKEXpgqNykt`xcu#9%3iAM{0O=XZ)x!YX!A9!r# zcL&V@<9o~w_btp7lPuabw|hoQj83ZGyIvkVj_Wsh?$=)!Q`EQI^hpbfa8|s^V+r^G zY=2!0oKfNQ=8Dwjo&Kd3o7p&9ke|5TR1Hjo>;8-SF<1Da=_wf#i?$?45zzk?=bR4! z8uBKWeFSqj&QuW|shx8i62t?z0RX|HQHP7xjjpuTmuhZYp7(w1dOpod3nZ;G=89DQ zi1T<3SRjIq-pa~obsn?R@hXw!8E-6a_+B&0-Pm;U)g`twH{hfn}IqOc2e9oM!-0v-}!?%c`gaFr@t0~vKko@L4 zzX2dwfXZ&?QLh6A+e4=LJa6*rpK;Df-i_-w=F6o?w^ugCN5{~zJA?`SW+imNaEF4; zt0g%GBo-T$ec{EM8O~Zjd+uBco`-{kIjA`zee73XN{Wg?1J!Ri;@l2J*fj$a-~Slk zHsr?+pOf;G!~D2HKo)Zp1PP*&v_}ym^d^fvH_@q-Y!9|SEcgR>Dd8G7p;TY70SRbk zkuE}Q+wigTwKSz$90nGNc%f}P(udZJ`StQz*h4N|7e@o%QPkV85%Ub2jtGSq1RjKn zo6g;KtZHh^7=w)GI*B5$#?^{dzd8s3XWzM*>?ZsI4(x0++%o+Yb)`ZDdu0$0aKH9W z7XqM9xkT(`skh(erBXi5lhbR6c;l@!vm}>23X4j@29nJKH>S`q*Fpuh1=vVQc$p<- zMP8EM=A;wQm5k!u9<_@3JL6YB}eU4O^rASM=R0#J9h8S9pJu+hnC*Ob#>>2fZ|I zy>s`!-Vym*zFkrW7p`>b+W6(tc)%h8((GQ2ZH1cVoc*TV!n&bjLKWf{#0I`f0YbFU z81KcFNtvD+@pO)qxP;*i_9+rdy7VHgYQe zLvZ|BOJ+;!b61nI;Ki2a4p4$;5tW2yqTZ2uJwgRs zXKxWjodZ8N>q#E3FkCf&9be7CevrNf6f2klYwH7rwa)D>vEG>DT=(IG5-&Qd`?aG8 z&x^?|8wsmUIR$+f;o^*+%K8DQH(Mz~SI3D0`$Cm)8+rwBZArq|6}Bbax?1|pfaE?h zES6hb6aK)QmBVW6W~`H4?en9CX_`$;B#M)-Wl!15q0+^V6pQ)Xkm zzfF!?#jex1(qjpwf!S!+4*~{$FS{AA0_sZHfQ~x8W8XT4MP5dYGj0bm%Ixa`tFHHj z(wZaigHz*3m~oP?ssS=DB)nzjC|zr7)+Z_{6=Y*rYp7)o_4z=H-L|6eQGYLyk;w$ql|H1Ft9HK7-6(Wxr1_w$OZyfKyz_O6cn7Kg$R?dU(( z)qi+rA&uPZ>=V$5T$I=vrA&-TAHHY&A{h+aIjaDYZNmkJK_B{{vq!9m{IR8(>TJlU zc$JP$!0l`F7&xb*I*RY@^<+P zc(h)2+efo2#0q@K>W})kLtH~jjO8MYy$BMgEHSr_df;9K`poPJK9**Y?Jre*#tM6V zCYD$Fz+*YdKwyof8xin0<<#YSWG3PfW+J&gwyZN~*wp6df}!eUpS?UJVYg|=YTS?` zOHs`1$UsU3p=E_IS2TFrg!FLzqycwwezI5K!0lpwFUS-J#28HQdbBrO5V}?%saheV zIpUErlHHXrX$pnGXjx4pgIEJMYigF*SThYd4R(@kes`)5_`D&~XA_mZwy+XrPovmM zg!Puj+6V!=vr+VJrZiJsb$)-N2$%IF4|v?adS(>fcGVtRR~-hQai)%MbvQm>?STGD z<56x&0T}uZ<58pn(!GcWfE9oNY14uH=}IKhKJq0z#J~_}>ecSYGZ*wBf~tjjg?;?l zj;3ZX&PalLmzL9&c~mg`A?f0^=D@O5@4eW{exQ1uFvrCQazngPy z!9ViwSz4??Mq6(XVGF_!^U9vL_ifX~BI4S6#D0uFgCZ%P%dHqAMy_AqN;%&?uGF4p z73gCy_eK$M@fj8K9`@a$%C`p`xK~=QAZkzq-1mIareOC$$1@T|fy>6<4fRimvk+K> z?6xUZU1#&3$XZ=iFjkh_KZ074DCLO$9!Azze4FUgrR~~MfOL_dG6|vW=OmY^v384m zcdAyMufwpKE>`SS?Okd1LL^;piylwTC1RlndiT3n?e%0*Ya+)gho`4v>26w5#VZj9fWAco`TNxxS4bTo_eJn2{=c}?;zS)GcTX} zdKP5d+&@2#E86SnvYHz4NQk)ni#i=Kfc?Ff*~RRT>~=zci95Fl=%AxIQw14}mjtpQ zH+O1GyjlR4KV93F*ekJtKm?q0;5MUb8L}$mGOqn~lBhJ0IB>Xad=gV9HEyGXki_fVx-TOdjUrFu9u!>_+v(f4B06(th!_d4|u;##3 zF8|ZcY6PW47FU*)a+G>FI*#+(kXy0!dK56Fo&kMGZYXLUSqwDcz?n8{mJ{>D?AB`aSq%20UX-CT&s(x{(3yQFl$T4nqI^x#@=8UuZ?#RDzq9CV|J{ zJr1V|yXbU1IuDN-2RL2$O5L0srF_U8$lIQBGfm_?IF3t0bE>KtZi$f-x4la|=(wgG zLEQ$bV*g>qp_VW`DrekK7sqXxi0s#Chz6d;{2wJ*#l-+6 zW2P7-uIT?8yb96A=j(Eu++t6e+WQ?b0WUZI7&px2OjNWj{0rEbF;wlcp7g3 z4uChA_c*7-@OZ=Q%xY*2aKG#$@FO57iQV-RtGP zowfS{bBF-ACSmv<+Z`NY`F}w&k(U|1V{vPF~r?q(;s$ybEdAbT_lQE>Knz{^+PUZJKuc?Z41ry3h?lrL>sANHV@n zPjB5iy<9btegpwqU^o@ETincnbVz!^w$uS+?0SEZsSy`prw0qPxHXmHav|>Pj-ToG zG^+pf0A}Cp9|@fklhL$s`<0-g#%jGS%I}HfsK*QnDtm;w;vjtTp49#5M>kua?_1~N zQ(4E3K%Eja58CrJH~-#6&~xu7y5y1`aV}HUV+2W^=XwyuA7;N936c=48JJQI*hx`$ zSZ5G`kuhMGurmeq!FUUT!VVx{=hQkWcs56CBpAMcBs3A+5P@o!7OZ|7&E*V%pz7XK zA9;AcUzW&AVJDBf`!N+_+0v}|V7k~<8)Pd2EkU3x9J%$A{dg7Ivx_<*4!B$bQ7FM? zgPXs{M7X15H^KRO6q4gIB*m*C6Y3&7{CxCY#sLvb(VObRHhNfBp7VX71Du%d{2QJV zLrpigosQx7dUC2uZA~Iy~Za)O8+cHyAD{Te~BGWL&Xw( zt^E$sWDK@Ej&^WmkTerIN}jxaaLcyzFOm4Wj9Uz%EPh=5%4oM zF;hUg{oxjj)RA~?(eq~xR^6A!LF8MEqe+sNU`nfNNvRbmp@BF_=Vn~h%`A5T^6qLiOO4(U%BWksKgq;l zjvA8~(qgl?F?!E<3NZ2pmlaL9-tJCR_Vq2hEfWb4X3`4wesaI4XzOa-&Iz7gYKleq z{2#>?LHLtA_bTe>Bh=XO4eBE%a_J~x(CmH&VyE+MjLsbWDXrm-y6@8~6KEHlKVqI0 zE>$ZA`F}`Qdw=tyM+d*Ch{r&`UVVisX$enrqOUMZ>v6SeKYzzGqh9GWU_J|L<9ind zRn*BJFatHNDk*p`{{mT3!pH>T{BuyR86VsQgo?HEL)F(W@Z)4bNI({S)mv`vz2iE1 zcn+QXpHXy+-|y_9J^skn`Q|hQe^7qKHYnkv@TA>rLPu@Ry`ro(G9=RLY;AabaGwK2 zIhbT5fF6II*= zBO`+lxGp)nhA6N8Tl{AJS>I#y1KZutUi);{-T<#71V)dKgPY3CxK=05L+#&M(|<2iB8!ZU%`h{OjQPNZh}NVd zcap+?H2x#guTqnl)Z^WrGo3;@bzbLxumA~}{;$Vk4-47&s^1x0Anj85cJ>D6aEnuV zOP|Kz0!;6Ea4Q%)?F37Ygl8-R63!k8&#;{F}u_5SbF9nM+Rl%5WQgfSG;Ruk(<=I;)Kj(U4e-3Et9zg(=K0q9Tb)%_Xj5Kz#x3Sl?QCqzdlZd_pQ9^tOT)&NG+DV55P$O5$pTizxgz^^wh+G zB1A?4_jSkWDsNhO2+@w+;Tv3G4=DD_I9fehb>5nLLDM9TYvWDrv{4)XU@i@>0|^5yB9gJRx_@{(-=4&}8gX6FYb*eB+!FRN2gp&;L|dJe>oB zw2JKY@*C5kEp1o5)b4@HX{MYDP<%Bd`Vl8o)502V;Avcviiq&jT*f^d(|t3M!fZ{C z(|elILawefKH}61Mc6HGbw)#mPP~-P#et|GkQ6I5A?%Jy@+$@+IN2g*tO_n~gjVLw z!?x;e9>rdK==efu4OmgPgD<@2yek4xMTra zvX{fmyv0TZfQ@2iva=9-mF*A}hcVuq2cUL7rp#?#*4Qs;O(oeQ}hGdTnhdCzd)gS?I4SW*jFcW(C=1iXsaFGnno@n>zWH z>mOzGu^u3L0|Jh}5qxKHgv=R08c+Mo`B#wm_Ur96b@h1| z6*qn9rZ!=V+Uy8kpjNs)?!|16cQhT9*0Be95EiE%U*@@^X}(~?SMCgky409l*X~xI zxWQf;vEsLh2B&pw*Dbtx4!Yc*VRgD)Sd)iQK$KT-P9H71|Eg5VIIc3;#q$8N)#+wy zcmN8-HC#TnON&BerYGbF8HfN+6`9ugvF40$?OnGZuw zB=}28gS;WaLvpFa#GFkBR50(aeE|1=HhHpC8tmDjV(D`B2P!AW_#g%hM4)+gK9D7s zc$nnT?BgLdRY`Oi*m&N(QL-IhUEPk4LBZ%dzcdC4X1X<6pZ_dKEjFoB!L5QkpI2GS_i#DRQ*NbLK-WJlFUVa$ zJf$!^_}MBUb3ZaS!Y4Q6sK<C zd_!GPOzdFJyM7SDg~%`2TAyOS3PtQRlSUk9{87PrhX#48$ewJaowW2JR2#=10m3jG zip7fF2FQ6c{-g{b5mesKWmg7?c#4^(*2%@ir`?5$ahVC?%d$$l_$VQg2vh^htHKsI zn1b{l*cvQSBr7UCm5tK6u)>>HaS49`wn|AGp;9|y*_vTj$6Y~<0Ux;EWK*kAfAhbqI!Sl>7zCRpPe4VXl>1XU(LoQIfL2jSFCQnuQSMS~G^ ztTJL64T(2GHs>3Z1q#Tib`|U!{{!T!+*2+rLH#BOpR0N=%F^l)*gM@uI-r-A(KHY@dX=Y!`0lcnkAiXjFod`uYw& zm>r{_1#7BE$v7bylKV%v;@`}g%(%9$u9)EWAL0$nE`$wZ<7+gINw$GcpFv}zR?VTH zC$BF?bGQj$re-;7#O$T}K62SySv;t5V8FfF)w%iY*x#A%Q}&ki;4(U&kzUT#(D`3b}pX1TxQ~ zU?hny&NJKrci=*4SV}+a_Hc~8u;gTA0!TI1LEaoX_0Py2r%C?8`P4N|mH$+P@Vd3m zg3Eld&h*X{&%s5nvt!r>0fxu29@22z@NhawNCRt%YC>iegll`H?MexNI!?*EFnDZA zT3C6X9HzP7L;m2Dm|NsG3P|jM6od5z&0hU;JN*&eJJuV`RA|}FIul%N|VJ^Roki zjh>lXY>-?*a2TY{m`ez}k>7KUdZ)JDvq9Zs6qYmO zM$r!SDS~#SucPuIWAk8}$M5sqgcpT$+9cdlhNspB9VZRPQ}^&YScByzJGf(3g@?y5 zrm;qCzW%DTuB3PNX~s>0$=u8}VUBUssMA|lU@K~?%Co(2B_-_go`Mo>Fw;YExQwUz zrVUS2IjB}&Z2`krk8jH-7R)myN;wf@+BUj@XU<`dw}Y3ER7eT3DO@;y4Pk+k0@v^) ze)px7ix`m*#*9S=p~p;?Kh9$lF0GNW3YXkOmJ4)`#cIt^gu8QNWNr9|I%w{ z)Ro%`nM*+}@@`#rnJ&^)2LR>jkYGpq7iz^f5QGv?SFp*OoYMnz(a5UVj20skaZ839mXlz`22PAKC5%>J~<^S|F&JQ)pPj@5c zDi8Z;je(+)%UUp4L3Oh6qcuA(T4f=ABB$yeCj$dt9W#%E_&EDm<*Qm!Jq(2Qu3v_9p}}Yn za4DFWc#zGl4s1eIL9eW1^QM05a*xCL5#iDg5u%GwF>nz&i_^&Et>s32=Y+sCKhzdD z5Phy~2-D+ss=l}b(Jr{%7HNODBx6g*#2=QCl2r!j+!hzL2E!|Q(tiJ@x#pf6>XS22 z-{XIxaZ%5Sn+;D!^an0dfC?6_#2$&8N3^fTeesHbbJ474_K%2|0ZxYyR%l{mP1hrK z8D$BZ#vGdlQsv$_54FcTm3uoWK4t&DVL|0exW}}BhXPJ#jEz2mhj$r^!1~u+v7DAT z)3AyAgD82aa4Qf_SFL*Qj%N-W8S0s2wd!plRrl?pQ#vaebVi_p1bPtzH{mR@MDbVL zBeA5Vp99DTE0PO@*+_N?%bM9!{QtH_H!DDx2sF|I)Q>af=UV&9!pcOpaYyQhKg8G? z5GQ;>4HZ;cwnD_ysazCT)ePGZXjEYBcjM64MPgiQ15E4owT%r7d6h*cvzu8{m z;cFwUil)^kI&0x~nHr1>CG~20h6Cde%spRu5h0z0oS-Z`wo&58Y3KZ=x@K|+cWO2& z=5e_Nq(;qmc^vi+4P;wxAP{~L+^GL16v%wXkV!A}u?@qE zca23bYWyW4y~$F_hF@@~4@%FLPB<>}%c>|v8t#c(^(5n~km?_%fQSMX+~s}=haG>{ z6%#8{$1l*RMaUIk-(yoy)kY3aP1)KPeyJzZ<9k>rvLX07ahNEm7c|SQ)TR7x$^f@W zXzyr@sRpq+X4gBf-9sra;3N-kHbXJBVX5`d;}dyRl2Fp?-@M)%CEs^QY2JU)q~@5v^2vhWbnV+lkpWzK1f6`D z_V+3^*@I5@XaWaPrq*aB(oo=tKZ_jXW+=S@cT4>5yVgP+cl33W^$ZB$fwdJAo?@PL^lx`N!E zaGM_iUO#zEROW^wx`xH^szhgX7vi&U{kJh^2eC$$h)Mk1{+O*e85{GHO`rCTj7(@- zx+YV<(oqFLSnqPzQIp6H)D-C<2PqOss%SEHgT-*FPL*Xclhn_%_8QPMedn>D*upGgtQG zL_)ckUDMI37mP9G}2M z3xk^%`NBd3OH-4A!kl1`2nAfyq1X?Z_2_d)D6WfN?s#{U9Jq*(G=5LcZW^0`kmD=} zFDRyE+Z$0-#`32l8VpICIhhzOpl}0gO*b}m;EI|*`^jpI577hzEx)HrlLOQFOCY;? zoI%V-Xn92lwA?Hcj8u42_jR)kQUPXdeRJB;dITQBmxcs}bXt;$n;{#Qz`#LPOa9!y ziA*$kHB-eCB3|&fv_sMRZ;6NEE>)QI->O3jG>Y`l93Ki?A%Mm@Kexsw7PIoe^!v`! zo>FsSN1~q^kWp#7KrYJUGr@Y`@}OpV71D=`xvlY=b@^J{(}|r*LTT5rX-Z^l#v7m* zt4&@^TNc;OQhaEeeCld<(C%--S;lZvo18QtXvM2GPLrFsh-cNBm(|=|^NMS!3%Ti48~ zG8J#l%ZJKR9a~TmzH11D4=UIHN=(}LFHX7(nN383Nf`g^a$@f;FL@uM(Y}^3FfpeG z!(((C>sM(>&Bc%4!&pLdEB6%zMRGghcMeVeZ#xeNKx^sB!;Q}9M0OZcbQ12=JT%l0 zA77w|G(K}5PtS~4l|l4NDR{YsrOrt#7G}PeD-jvGMz8thAAFs?9Mw@cCpizMQO#ylm#qvB_V9_%V2~ zJN^^Q&Vnfg0e7O4yPdhz9i@)CR@ER4d{X{O3=T8%vRzQi%rNa&(vYA~WX8F0@N056 zU>pX9bi*oFjlSP#Y#-_He!j-yOlS1fBZbR}O(OO^Xx617e_~3g2v596;U%ua9&4r` zXvMua)nct%?*M+6j=c=1nDy&qx5!RQ7Bk?N0UBGq&ABqp(4d;^iP+C@0({g=P@^H; zn%r9$ZE0kPhI5{u zf6Ostw#JCy8^s49WcsZR!Lt}dVFYmz!_9VXlxMcm-f&x+m7ttgGL9%}=qONYCj!pq zqWJCmum-Y#bXCZyD{;idhP_JpvRv-X11SSX^3yT2Aej)uCb`e=M^Z3YTp-?L>t~bL ze*%*sxr@xKZgdKBZ6#G!Ih7NVBA+0RL0=PA!@9kHe9!$Jyd<%uB&bds$CYeULVYNk zm(d-MMT3Pm3~Xs`vu~&{bBDByeNK&jAvrQH3qvHG%{REz#@c6lte{j~6=a)&PMG5Y z5-*G_7Qvr_V9f8`idsT5nRv{TpqON>ME^;(1WV*S5OeiJ9sB>yv9M=~;f~kI+m*&>PRUx1!ee1k7Ime( zReZr^jtGxiUtN?out1eaJVZcfI1eEj`|;BO2x?6o4hwEQj&YnUD~p*e6mUm1taII* zW}6d~>u3rJt>uyop@blrG?dy+SWfxh1dl(mp46sxW?sh2H*WkK#(uXpa(M-NXGy}T zilP)=sIuTrQcyf^zR>1w-PG_37S7z@PG5r;wy-a7&7)4dLMa`_pd*g-?%sz&1h|Gl%U&cO?9eUJ14C#UMCtsd>RzX+JrK|1ksqBoePMXMiv;sEIpH#U?EjOHvzd_E9Oo$rJSG88rPzuwnG~RD1eEVp>k_bP z9qgQ1&+$or-zv%@a_RZb;qLDn=YV!zn)hQbjK~8Lu1;{0b6R+N9*brI1|m1xgZj%x z%sy>uWDhD0-^Tp;W%dF@5|@0Cl|C7@Uk7y5tqAx}cosRY`h-KeV8qDps#<|iRByd` z!HX&soU$TGWPu6nQ{CB+U)^iU`G1J1fHM>8s^k3r64PYPm(mIHhpH9w2QZ8*&I8Hn z|9Vo)Vn)^jo%f%a@ozcG9Kjg}MCu-%7uU=wen7kmwcOyIJ-whZ#14vVd85Z?8qX_L zYf$mW8cmRMmZhbx&c(<7kyB|7;`;`)6R)@5Xniozrb=q_rtU#pH*?OVAlwf!F(-$6 zS78Unj0CvGMS9(#8-_!N^Ex>6(}%~o6?2gyvJ5DFM}5@M$Arb_EIPLEUjXr%Pt798 z_at(nbF}t@@1?^AShv7ZPlWbA1l!&Zg0{W@~q6 zBG^*{r2$I#yd&ifL8XM;zhCxedUJaOX!fvReYE5e-|p8F%rZ>m127OJZ&pbE32nu z3-pa;P$@;WvLmeEYy5^{;i36;o(Q)hadcQZ>tXdr%*^8Z1~)*Vj=*+`!7T3 zvuTjpWKuJOL$Gj^^%bf1NeS^3!ZHxIS17C_qsyp_w0ud=JO+Eewkb+;5dx66dzd0C zen`sTcHQ02P4|<}JAM+Q9}O!gC|BB>6%Akv!gjW+lX)KXjBH8efJXsSJZj<7$_?cdwq6Fh~aSe=a zG6#i2eFu)hwyfM2QbQT|mAV#M^60Uu!-eQX=8Ss6VtU#=XXgHa=PcsgQX*RRq;qI= zseu995~Y}E%upzB`^V;77rq-x$*AjoMK!TsuY{?|=9XDjg!xsG??I!*^$@Wggi-CH zQ+AEyE{^zcdpst5HvSfFW5)NPIy<>ExmB_!z$nIUKH1>yW@85~mnP%o8~w-7Cvw-e z&f`^(OgahB-rK7kQ9-DiD4rq*N#^zrsJD!%5lhCoO8 z?aSdhfcE2MG3XNTaCWo>p?yNUb%aFU1=rnL;ih~y{TQru%>cOiM7;8^161b zwS0%2`q%^i``cu!Yn(pIt&i7h+VnuA%Pk;0Au6u+PJ-vdZ%fbo%zkRC^^8G+@6n2c z?isAf^CSojm$E~f`@alhy36|$<8y&=y7A|Sb`B9jl$woYv0Uf z!>}{B8FI7^L+66CDiIE|g(?xIuph*@%stih8C7nNr1W(aSbz3W<{g?2tG5P@&rtVI z9EOO9yjMmUjg&ekhNrT)U0%!FtUp-44Z~ZYxk%&<<8+)KJC+C~cetb1iAcdFGi9t5 zN)j|(1U{F!+>VEw{$M(y`)+sXYzCYH30HiMNS`ltM$b0{ng@OuUN0q$HD}v4m+D+e zB1<%T0}W{|w0Z$ymztxAZ$fXoE9}XM zy4pSEk{{Q%z{0uSG#=X}`P^PV=Z~y3=kwPtJ%Co0W7X?mARbK`zu$O?!lda~)kke2 z&|)$dBml{&$P;j8>^Iw8Z|QIBoUtrUQr@I@pZO^;BKtKq>~az&*yd3zsBV5c|YO*1?qa8pKrU2{{{Rk%PrL77peQn>t|nk3f8*U z+V{<8YmBVVN%|GQ;pgr}0iO|f5`D6ZPu_ppq5AXw7r9(Aqc?Y#}*RI?b6M# zhD3_X(bDq~)LIHRam3Nq@-VQkpQ@}p5rI*eRD#c)-=n3c>t}rL9rU(a6>w9gL)i}uzxU!T9?ppT|jefooojI9GH5afHfy*}veRkdp85P0tByS9~8&`-o}+TR|&CDJF4 zRDJH*fV8ukW_szNlG(9OHN;dC{SOx4Ll4}?l|S?Kr0E6-r;~Q1qV9YGXS1Z=E?qzzrB|t<_!||hlpH@Obz_z`U=%-@*;X@yBTf|5}B0Mxxa_K z@h3pgX7C0+nvpegWlrJw9$ZhNxP=`_7|FvwNKODATRQ?r43B z_dpO&V`E1epR26{d<>HTdC3W052|rNsG%(~QA!j}2smqyFg{~@^`-V)JS&t_uSBQ{Yl*`@YRnmr$iVyK8EJ?S!!=mx(@FjA8K4)K|QYlOD=~kO3y1z zom?c@%T{x3ZqK(%T|){{l}B42w5L}fxQ2tM6n4pcf z^`DB8P35G*ezyg*Ts;(&D=YV3#^x-<>E-5KKfmAIy;KV;A0MB0io@#7t*;8$`ep3>9f4gW($w=z?Y`-HzbfY0?yK0m>aHBb|Ve`Bl{WdzaaN93( zxjh^L3la*b1F0KXoW(L9Jl+7i<=Y}RV$|4bra@^Yl(Uw?uG@%(HsLr@(j^L*8F z0&HNg-(Y;+63fToxjzm_jgP1L^x=;Ycp8FVUGVnmd0or!+)U%8SKVLlR&DJZe15e3 zZwH`_qoSlZ9-`?3mOYvPbzAM+3>P6$>peZSbLJZ=y(6KfeDA{=?t5wL5+hT*C@`!9JJB2!ENvN$Ren9hIJ|8cx;m09NYm=*2%C*V=Xrnfc$@R;61@*-m9w~- z@_O6@8l;N>0MXThZ;?)`o8RM^5+sqHV*gd^Q}5$lg#ISt>OFmaAL8RMOa^hj9fvaO z`@ah$a7ojR_AbWC-E6p@o`xzj|2%kD83L>a<_wA$6MpyNgw!>@CuM|b#p96o_1%cf zaOkfAS;}X*yo9m;&T@%a3?_OeK$^_k??RQ2u+xmf*b)N`8P;Pv@`L$#}@{S5^rrbG}4``1shtW@CJ|9eTI z8hX=LDRZnmBgY_R*Nt(ns38C68)MEySpk1r`|m1*`SSn#Bf^mSd)%p_1a$%)-n^6B z$=xeVfS{fX2^tu@5E&LcvPEq)E|!>KdIVUThdUF^zsKw5NH_@6VZf|TnIIAQ6^oAA zSMHo}@C#A_IJ3wGN)rDd&a+SN0Hj1;a**wxJnZeCIF?o>dtQVs#iU92=_~~s$^YKR zwl4Xp);$<8D+>6sv$()5w$iq-jrDc??g4!8m@~_xUr0l#sa0oe+;4o18qK0YO-bm| zM-Cf}f1iIiLRWtDmXF}7g?@VbzLx2?feQ-oG51@sAL&13gE7NWzKejRFtVMapn%jr zJjgF>imBK!<9UAmpkA*%{MOwaIv;;C)`wQ@a3s(PSf^KE>Wb$7d_#@P!28>WEud0A z3F!xQbCywL49($hJPe)_H#JLFxhc#nvE*N?yw+fkM<%3!!`fmg-B2I-n)GQNl#w7! zF5EYL`Ud6CAqmIw$&GbwfrID|dP=HT_t)R4>yT>8T_$jDsUU*d^~iXrGJiZ7 z$6$Ah<^urJHMW^geN}P?586yvDzfSfD=NTHJxUDDw151;-bHz4Oy~?l{pT4(Spx9o z5(3liwWHfivvs7bz$_LML(JAvv3>)~&%Mffy@_ikpvaeeS5Wo9q-^JaSG-~cYmHCcww7Dx?rDnrK2{cl|TQiE&X zu$RJ7l7Jo>d<>p$jG)-6+3?flF#MUPlPXTMdrN-olGp9&S5?T=W=zDr(2-}ptp&AgGL~t>yA5lE{Lz3h;TG%H~I?7%xfB>kB$*rRKukYw&BbQP^DgOZAx9-&Ndn3 z_*SVRI_V#{^-G@wIAQjZRfBi^ox>sff*WojnX%!~ICoc+ln4-yvEUUOouVneRTGLkXE(#&zW z#x8S`ZhKd{^S(0#L57BW40`)u+RF3SN%-s2IIYe6rAtCq!=a5;dCr4I zTNrNgiS|~Nr_is}ud}JrvZ`}F{A>vYWmX0Q;n2{nF0TO>&Pu$Kew^yWw1m@xHyLiu zpOUDWWf>}V8TRLo(GS-h<)WB}ml>;)uu#F(VLw=%hZ2h_E9t70ler?yfBju?$TsIG#)g=lI6ssD`&Z|MaTMiw z=I^IfR7cGX-cb0hX$W@Ti7aN2@nmvVFjfP%7=KT*yIf9Hw3o>w12aDRuR}Rtv`tb5}9v!mX25aVM_@U<#KG} zj8n;d9ZmY%lGf4eRo*nJH}K(~I=w3G{te7=qLS9N#mm3+?NB3>N`Bfe)cXQe$xaB( zc5MIXbBRh$Y7bNdC9;h1gKCtoAIo*_qgtq*dP<`B7T3%KkKe`&hDaDVREiOWG9yBB=0N4zxVnH@hL@ zuJ?Z^6R$V@hK}cTs~` z1+RtT`Tyh4(n=H)ue`{taB6_`%k>{K=5CyAdm7^AF!|C8AGV69GK0pdnM@x)K&+;w z3B0Uv%ic95s#9+5G;NReb;>xWS~AV5Y%OB+zfF)CfeE+Q7)=-oyj)|9#vF!(7ws3{ z@J>;!4e}M5-y58fXykz~GNfAQev=5(YjM8g_}#JNLWYX0Xq5hMVcAQAHFzFdYB9`& z6t0ufJ*fpNM;BQ>I-%~ukxB*!eFH~2c@H;|*p&;bj>BAtDDss3^b$x8FCV^RqV;o$ ztNh?8YRlN4nj&WJ?F%{WBuDEpbZoDWi5P z9S^g*T`Xzrg!|!*s>XKfw~?tM-@#IKzr5xS2mn{SZ>-rX$hzI@z~Jn-H^^L(ANf&U z+vcm3>5dAnXTVB&8v1Mi&DqA)N}!9n)=M;0qP;wk**6mzQ>!k z=8c(tx2t%0rwXLft-i?#Hy~M5p9q0Ra?zqeU&)3!uN|fFahI%6h8{kF%Q4+0efaKq z<>QJ1|BFX0#zqeYe`oY~Fh`=5bG!_l7%B4*%%y4RORftq#(Fa?-L1ynv`F^4z2U%G zNKLp1vn@C#y#3Rgc~vR?y()L9S#QSvgU9obGR^+lo^Y3n!vDwHTL!fiwe7+rbUImcsGyBt;6P(Rhk(Qk*fxXOr3+BEEl7W z{`Op5%y{~0w}nZOtd&VbYPt{9qj>K05|Nd&SSP*V_A6C}goqXy-nsp)u25Q}?iWPO zORSQNQMKi)o<$bUSd`3?2#eQ3Yy|(WwA97{&tIUtRF}E5l&&thR39D^e*%s44okkjeZFBQ;<39sa znHRY7FsenoPkD9NQ=<(b{Y*0zDU-y=n;`$D!N6BGsHAGJl6VUM6XF9P&-*$E3yqsh zWc)AI51L|LUT%F;?npzH?wCDG6~Q_q?ld&2t)+xaps`o5IX2zSllair_^W8dE;IYS;oVpB(#;U3t;Ev>GN_wa0h%HuwB0@wl43 z7p;yr-KpYK_e#s{I-pYPmag_v5RO@@#_WBdyGowt_^ldad0ob@0Hu_ zN`3u)Vr(ogM?0R}xXu2n#?s@KZ9FMaXpi6}B6y1_w_=#&hD$^3$fZg=@A!8RUtmDL zO=j5{ubT#gFmHcl7Sy>kwo_eb3mfP8bWqi5+tE%LgAjExfw>SQ~J-GiO*Q<{~LKO)`1d_TQLC)Tv3m(?jt-W8zqnD#RG!L6}NC6=sxP7AFMb0|<) zi*_@UVn=qq)37C^6fgZjTl~vtYVT(4URjWLe7etvQKI7}6^xN=5B4k<)b*;C5NNJ$ z2#V?aEM5x*Yb^pzctX3 zV$CeBn;Qx@!<;qZD*&F>i*^LNNXny>n_HGZ4qvKg-TCnw(Bw||^W=F#3(CFZm zuH8L-N6p2q!?eHvZDnQ;4;_I*u`?|^0$WRR*sVvci$GjLL+S}1GIb5{e1$0o1~7Nn z+kZUz)8r>rQ&s%ph|F0Igg4EShW3+-uZ20-5VH6Mu8dS;ZpI!BtJwmZ#}F^6dDmPx z7>vam72-0M2i2JY69BNFuG`-&l4FIOXtoTH9HEWMyJy}$#5iN4VWA

cnq5xnT& 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

SFX8V8Vp{~5L*?q5$m79}%>q7tJ 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 PKG9UwyZ8F8b?AQpM7-8x literal 0 HcmV?d00001 diff --git a/src/app/advanced-simulator/advanced-simulator.module.ts b/src/app/advanced-simulator/advanced-simulator.module.ts new file mode 100644 index 00000000..5ceebcf8 --- /dev/null +++ b/src/app/advanced-simulator/advanced-simulator.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { NewSimulatorButtonComponent } from './new-simulator-button/new-simulator-button.component'; +import { SimulatorModalComponent } from './simulator-modal/simulator-modal.component'; +import { CoreModule, hookActionBar } from '@c8y/ngx-components'; +import { NewSimulatorActionBarFactory } from './new-simulator-button/new-simulator-action-factory'; + +@NgModule({ + declarations: [NewSimulatorButtonComponent, SimulatorModalComponent], + imports: [CoreModule], + providers: [hookActionBar(NewSimulatorActionBarFactory)], +}) +export class AdvancedSimulatorModule {} diff --git a/src/app/advanced-simulator/new-simulator-button/new-simulator-action-factory.ts b/src/app/advanced-simulator/new-simulator-button/new-simulator-action-factory.ts new file mode 100644 index 00000000..bd73e7d9 --- /dev/null +++ b/src/app/advanced-simulator/new-simulator-button/new-simulator-action-factory.ts @@ -0,0 +1,21 @@ +import { inject, Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { ActionBarFactory, ActionBarItem } from '@c8y/ngx-components'; +import { NewSimulatorButtonComponent } from './new-simulator-button.component'; + +@Injectable() +export class NewSimulatorActionBarFactory implements ActionBarFactory { + router = inject(Router); + + get() { + if (this.router.url.includes(`/simulators`)) { + const action: ActionBarItem = { + placement: 'right', + priority: -10, + component: NewSimulatorButtonComponent, + }; + return [action]; + } + return []; + } +} diff --git a/src/app/advanced-simulator/new-simulator-button/new-simulator-button.component.ts b/src/app/advanced-simulator/new-simulator-button/new-simulator-button.component.ts new file mode 100644 index 00000000..42b0550f --- /dev/null +++ b/src/app/advanced-simulator/new-simulator-button/new-simulator-button.component.ts @@ -0,0 +1,37 @@ +import { Component, inject } from '@angular/core'; +import { BsModalService } from 'ngx-bootstrap/modal'; +import { ActivatedRoute } from '@angular/router'; +import { SimulatorModalComponent } from '../simulator-modal/simulator-modal.component'; + +@Component({ + selector: 'c8y-new-subscription-button', + template: ` + + + + `, +}) +export class NewSimulatorButtonComponent { + modalService = inject(BsModalService); + route = inject(ActivatedRoute); + + async addSimulator() { + try { + const modalRef = this.modalService.show(SimulatorModalComponent, { + ariaDescribedby: 'modal-body', + ariaLabelledBy: 'modal-title', + ignoreBackdropClick: true, + }).content as SimulatorModalComponent; + await modalRef.result; + } catch (_) { + return; + } + } +} diff --git a/src/app/advanced-simulator/simulator-modal/prompt.ts b/src/app/advanced-simulator/simulator-modal/prompt.ts new file mode 100644 index 00000000..2aebd6d1 --- /dev/null +++ b/src/app/advanced-simulator/simulator-modal/prompt.ts @@ -0,0 +1,906 @@ +export const PROMPT = ` +You'll provide me multiple Cumulocity IoT simulators configuration for a +creating devices that will be used to create a digital twin of use case +scenario, based on this info: + +-- Start info -- + +### Publish templates {#publish-templates} + +The following templates can be used to publish data on the topics s/us as well as t/us. Refer to [Processing mode](/smartrest/smartrest-one/#processing-mode) for more information about the t/ topic for transient data processing. + +#### Inventory templates (1xx) {#inventory-templates} + +##### Device creation (100) {#100} + +Create a new device for the serial number in the inventory if not yet existing. An externalId for the device with type \`c8y_Serial\` and the device identifier of the MQTT clientId as value will be created. + +|Position|Parameter |Mandatory|Type |Default value| +|:-------|:----------|:--------|:-----|:------------| +|1|device name|NO|String|MQTT Device | +|2|device type|NO|String|c8y_MQTTDevice| + +**Example** + +\`\`\`text +100,myDevice,myType +\`\`\` + +##### Child device creation (101) {#101} + +Create a new child device for the current device. The newly created object will be added as child device. Additionally, an externaId for the child will be created with type \`c8y_Serial\` and the value a combination of the serial of the root device and the unique child ID. + +|Position|Parameter|Mandatory|Type |Default value| +|:-------|:--------|:--------|:-------|:------------| +|1|unique child ID|YES|String|   | +|2|device name|NO|String|MQTT Device | +|3|device type|NO|String|c8y_MQTTChildDevice| + +**Example** + +\`\`\`text +101,uniqueChildId,myChildDevice,myChildType +\`\`\` + +##### Service creation (102) {#102} + +Create a new software service for given device. + +|Position|Parameter |Mandatory|Type | +|:-------|:----------|:--------|:-----| +|1|service unique external id|YES|String| +|2|service type|YES|String| +|3|service name|YES|String| +|4|service status|YES|String| + +**Example** + +\`\`\`text +102,myDatabaseDevice,systemd,DatabaseService,up +\`\`\` + +##### Service status update (104) {#104} + +Set a status for given software service. + +|Position|Parameter |Mandatory|Type | +|:-------|:----------|:--------|:-----| +|1|service status|YES|String| + +**Example** + +\`\`\`text +104,up +\`\`\` + +##### Get child devices (105) {#105} + +Trigger the sending of child devices of the device. + +**Example** + +\`\`\`text +105 +\`\`\` + +##### Clear device's fragment (107) {#107} + +Remove one or more fragments from a device. + +|Position|Parameter|Mandatory|Type | +|:-------|:--------|:--------|:----| +|1...|fragmentName|YES|String| + +**Example** + +\`\`\`text +107,c8y_Position,c8y_Configuration +\`\`\` + +##### Configure Hardware (110) {#110} + +Update the hardware properties of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|serialNumber|NO|String| +|2|model|NO|String| +|3|revision|NO|String| + +**Example** + +\`\`\`text +110,1234567890,myModel,1.2.3 +\`\`\` + +##### Configure Mobile (111) {#111} + +Update the mobile properties of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:----| +|1|imei|NO|String| +|2|iccid|NO|String| +|3|imsi|NO|String| +|4|mcc|NO|String| +|5|mnc|NO|String| +|6|lac|NO|String| +|7|cellId|NO|String| + +**Example** + +\`\`\`text +111,1234567890,,54353 +\`\`\` + +##### Configure Position (112) {#112} + +Update the position properties of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|latitude|NO|Number| +|2|longitude|NO|Number| +|3|altitude|NO|Number| +|4|accuracy|NO|Integer| + +**Example** + +\`\`\`text +112,50.323423,6.423423 +\`\`\` + +##### Set Configuration (113) {#113} + +Update the configuration properties of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|configuration|NO|String| + +Example + +\`\`\`text +113,"val1=1\\nval2=2" +\`\`\` + +##### Set supported operations (114) {#114} + +Set the supported operations of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of supported operations|NO|String| + +**Example** + +\`\`\`text +114,c8y_Restart,c8y_Configuration,c8y_SoftwareList +\`\`\` + +{{< c8y-admon-info >}} +If you want to remove an item from the supported operations list, send a new 114 request with the updated list, for example, \`114, c8y_Restart,c8y_Configuration\` in order to remove \`c8y_SoftwareList\` after the request from the example above. +{{< /c8y-admon-info >}} + +##### Set firmware (115) {#115} + +Set the firmware installed on the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|name|NO|String| +|2|version|NO|String| +|3|url|NO|String| + +**Example** + +\`\`\`text +115,firmwareName,firmwareVersion,firmwareUrl +\`\`\` + +##### Set software list (116) {#116} + +Set the list of software installed on the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of 3 values per software|NO|(n/a)| +|1.1|name|NO|String| +|1.2|version|NO|String| +|1.3|url|NO|String| + +**Example** + +\`\`\`text +116,software1,version1,url1,software2,,url2,software3,version3 +\`\`\` + +##### Set required availability (117) {#117} + +Set the required interval for availability monitoring as an integer value representing minutes. +For more information, see *c8y_RequiredAvailability* in [Device availability](/device-integration/fragment-library/#device-availability). +This will only set the value if it does not exist. Values entered, for example, through the UI, are not overwritten. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|Required interval|NO|Integer| + +**Example** + +\`\`\`text +117,60 +\`\`\` + +##### Set supported logs (118) {#118} + +Set the supported logs of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of supported logs|NO|String| + +**Example** + +\`\`\`text +118,ntcagent,dmesg,logread +\`\`\` + +##### Set supported configurations (119) {#119} + +Set the supported configurations of the device. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of supported configurations|NO|String| + +**Example** + +\`\`\`text +119,modbus,system +\`\`\` + +##### Set currently installed configuration (120) {#120} + +Set currently installed configuration of the device. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|Configuration type|YES|String|  | +|2|Configuration file download URL|YES|String|  | +|3|File name|NO|String|Configuration type| +|4|Date and time when the configuration was applied|NO|Date|Current date and time| + +**Example** + +\`\`\`text +120,myType,http://www.my.url,config.bin,2020-07-22T17:03:14.000+02:00 +\`\`\` + +##### Set device profile that is being applied (121) {#121} + +Set device profile that is being applied to the device. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|Profile executed|YES|String|  | +|2|Profile ID|NO|String|Profile ID from the oldest EXECUTING device profile operation| + +**Example** + +\`\`\`text +121,true,8473 +\`\`\` + +##### Set device agent information (122) {#122} + +Allows a device to provide information about the agent running on it. + +| Position | Parameter | Mandatory | Type | Default value | +|:---------|:-----------------------|:----------|:-------|:--------------| +| 1 | Name of the agent | YES | String | | +| 2 | Version of the agent | YES | String | | +| 3 | The agent URL | NO | String | | +| 4 | Maintainer of the agent| YES | String | | + +**Example** + +\`\`\`text +122,thin-edge.io,0.6,https://thin-edge.io,Software AG +\`\`\` + +##### Send heartbeat (125) {#125} + +Sends a heartbeat from the device to update its availability status. + +**Example** + +\`\`\`text +125 +\`\`\` + +##### Set advanced software list (140) {#140} + +Sets the list of advanced software installed on the device. Any existing list will be overwritten. + +| Position | Parameter | Mandatory | Type | Default value | +|:---------|:------------------------|:----------|:-------|:--------------| +| 1 | Name of the software | YES | String | | +| 2 | Version of the software | YES | String | | +| 3 | Type of the software | NO | String | | +| 4 | URL of the software | NO | String | | + +**Example** + +\`\`\`text +140,docker,3.2.1,systemd,https://www.docker.com/,nginx,1.6,container,https://www.nginx.com/ +\`\`\` + +##### Get the device managed object ID (123) {#123} + +Retrieve the ID of the device managed object. + +**Example** + +\`\`\`text +123 +\`\`\` + +##### Append advanced software items (141) {#141} + +Appends advanced software items to the list that exists for the device. + +| Position | Parameter | Mandatory | Type | Default value | +|:---------|:------------------------|:----------|:-------|:--------------| +| 1 | Name of the software | YES | String | | +| 2 | Version of the software | YES | String | | +| 3 | Type of the software | NO | String | | +| 4 | URL of the software | NO | String | | + +**Example** + +\`\`\`text +141,docker,3.2.1,systemd,https://www.docker.com/,nginx,1.6,container,https://www.nginx.com/ +\`\`\` + +##### Remove advanced software items (142) {#142} + +Removes advanced software items from the list that exists for the device. + +| Position | Parameter | Mandatory | Type | Default value | +|:---------|:------------------------|:----------|:-------|:--------------| +| 1 | Name of the software | YES | String | | +| 2 | Version of the software | YES | String | | + +**Example** + +\`\`\`text +142,docker,3.2.1,nginx,1.6 +\`\`\` + +##### Set supported software types (143) {#143} + +Sets the supported software types of the device. Ignores empty elements. An empty list removes the \`c8y_SupportedSoftwareTypes\` fragment entirely. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of supported software types|NO|String| + +**Example** + +\`\`\`text +143,yum,docker +\`\`\` + +##### Set supported software types (150) {#150} + +Sets the list of Cloud Remote Access protocols supported by the device. Possible values are \`SSH\`,\`TELNET\`,\`VNC\` and \`PASSTHROUGH\`. Empty elements are ignored. An empty list removes the \`c8y_RemoteAccessSupportedProtocols\` fragment entirely. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1...|List of supported protocols|NO|String| + +**Examples** + +\`\`\`text +150,ssh,vnc +\`\`\` + +#### Measurement templates (2xx) {#measurement-templates} + +##### Create custom measurement (200) {#200} + +Create a measurement with a given fragment and series. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|fragment|YES|String|  | +|2|series|YES|String|  | +|3|value|YES|Number|  | +|4|unit|NO|String|  | +|5|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +200,c8y_Temperature,T,25 +\`\`\` + +##### Create a custom measurement with multiple fragments and series (201) {#201} + +Create a measurement with multiple fragments and series. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String|  | +|2|time|NO|Date|  | +|3|List of 4 values per fragment-series combination|YES|(n/a)|  | +|3.1|fragment|YES|String|  | +|3.2|series|YES|String|  | +|3.3|value|YES|Number|  | +|3.4|unit|NO|String|  | + +**Example** + +\`\`\`text +201,KamstrupA220Reading,2022-03-19T12:03:27.845Z,c8y_SinglePhaseEnergyMeasurement,A+:1,1234,kWh,c8y_SinglePhaseEnergyMeasurement,A-:1,2345,kWh,c8y_ThreePhaseEnergyMeasurement,A+:1,123,kWh,c8y_ThreePhaseEnergyMeasurement,A+:2,234,kWh,c8y_ThreePhaseEnergyMeasurement,A+:3,345,kWh +\`\`\` + +##### Create signal strength measurement (210) {#210} + +Create a measurement of type \`c8y_SignalStrength\`. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|rssi value|YES, if 2 not set|Number|  | +|2|ber value|YES, if 1 not set|Number|  | +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +210,-90,23,2016-06-22T17:03:14.000+02:00 +\`\`\` + +##### Create temperature measurement (211) {#211} + +Create a measurement of type \`c8y_TemperatureMeasurement\`. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|temperature value|YES|Number|  | +|2|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +211,25,2016-06-22T17:03:14.000+02:00 +\`\`\` + +##### Create battery measurement (212) {#212} + +Create a measurement of type \`c8y_Battery\`. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|battery value|YES|Number|  | +|2|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +212,95,2016-06-22T17:03:14.000+02:00 +\`\`\` + +#### Alarm templates (3xx) {#alarm-templates} + +##### Create CRITICAL alarm (301) {#301} + +Create a CRITICAL alarm. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String|  | +|2|text|NO|String|Alarm of type **alarmType** raised| +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +301,c8y_TemperatureAlarm +\`\`\` + +##### Create MAJOR alarm (302) {#302} + +Create a MAJOR alarm. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String|  | +|2|text|NO|String|Alarm of type **alarmType** raised| +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +302,c8y_TemperatureAlarm,"This is an alarm" +\`\`\` + +##### Create MINOR alarm (303) {#303} + +Create a MINOR alarm. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String|  | +|2|text|NO|String|Alarm of type **alarmType** raised| +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +303,c8y_TemperatureAlarm +\`\`\` + +##### Create WARNING alarm (304) {#304} + +Create a WARNING alarm. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String|  | +|2|text|NO|String|Alarm of type **alarmType** raised| +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +304,c8y_TemperatureAlarm,,2013-06-22T17:03:14.000+02:00 +\`\`\` + +##### Update severity of existing alarm (305) {#305} + +Change the severity of an existing alarm. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|type|YES|String| +|2|severity|YES|String| + +**Example** + +\`\`\`text +305,c8y_TemperatureAlarm,CRITICAL +\`\`\` + +##### Clear existing alarm (306) {#306} + +Clear an existing alarm. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|type|YES|String| + +**Example** + +\`\`\`text +306,c8y_TemperatureAlarm +\`\`\` + +##### Clear alarm's fragment (307) {#307} + +Remove one or more fragments from an alarm of a specific type. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|alarmType|YES|String| +|2...|fragmentName|YES|String| + +**Example** + +\`\`\`text +307,c8y_TemperatureAlarm,c8y_Position,c8y_Configuration +\`\`\` + +#### Event templates (4xx) {#event-templates} + +##### Create basic event (400) {#400} + +Create an event of given type and text. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|type|YES|String| | +|2|text|YES|String| | +|3|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +400,c8y_MyEvent,"Something was triggered" +\`\`\` + +##### Create location update event (401) {#401} + +Create typical location update event containing \`c8y_Position\`. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|latitude|NO|Number| | +|2|longitude|NO|Number| | +|3|altitude|NO|Number| | +|4|accuracy|NO|Number| | +|5|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +401,51.151977,6.95173,67 +\`\`\` + +##### Create location update event with device update (402) {#402} + +Create typical location update event containing \`c8y_Position\`. Additionally the device will be updated with the same \`c8y_Position\` fragment. + +|Position|Parameter|Mandatory|Type|Default value| +|:-------|:-------|:-------|:-------|:---| +|1|latitude|NO|Number| | +|2|longitude|NO|Number| | +|3|altitude|NO|Number| | +|4|accuracy|NO|Number| | +|5|time|NO|Date|Current server time| + +**Example** + +\`\`\`text +402,51.151977,6.95173,67 +\`\`\` + +##### Clear event's fragment (407) {#407} + +Remove one or more fragments from an event of a specific type. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|eventType|YES|String| +|2...|fragmentName|NO|String| + +**Example** + +\`\`\`text +407,c8y_MyEvent,c8y_Position,c8y_Configuration +\`\`\` + +#### Operation templates (5xx) {#operation-templates} + +##### Get PENDING operations (500) {#500} + +Trigger the sending of all PENDING operations for the agent. + +**Example** + +\`\`\`text +500 +\`\`\` + +##### Set operation to EXECUTING (501) {#501} + +Set the oldest PENDING operation with given fragment to EXECUTING. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|fragment|YES|String| + +**Example** + +\`\`\`text +501,c8y_Restart +\`\`\` + +##### Set operation to FAILED (502) {#502} + +Set the oldest EXECUTING operation with given fragment to FAILED. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|fragment|YES|String| +|2|failureReason|NO|String| + +**Example** + +\`\`\`text +502,c8y_Restart,"Could not restart" +\`\`\` + +##### Set operation to SUCCESSFUL (503) {#503} + +Set the oldest EXECUTING operation with given fragment to SUCCESSFUL. + +It enables the device to send additional parameters that trigger additional steps based on the type of operation sent as fragment (see Section [Updating operations](#updating-operations)). + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|fragment|YES|String| +|2...|parameters|NO|String| + +**Example** + +\`\`\`text +503,c8y_Restart +\`\`\` + +##### Set operation to EXECUTING (504) {#504} + +Set the operation with the given ID to EXECUTING. The operation must exist and must have the requesting device as the source. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|operationId|YES|String| + +**Example** + +\`\`\`text +504,123 +\`\`\` + +##### Set operation to FAILED (505) {#505} + +Set the operation with the given ID to FAILED. The operation must exist and must have the requesting device as the source. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|operationId|YES|String| +|2|failureReason|NO|String| + +**Example** + +\`\`\`text +505,123,"Could not restart" +\`\`\` + +##### Set operation to SUCCESSFUL (506) {#506} + +Set the operation with given ID to SUCCESSFUL. The operation must exist and must have the requesting device as the source. + +This may let the device send additional parameters that trigger further steps based on the type of the operation, also see [Updating operations](#updating-operations). + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|operationId|YES|String| +|2...|parameters|NO|String| + +**Example** + +\`\`\`text +506,c8y_Restart +\`\`\` + +##### Set EXECUTING operations to FAILED (507) {#507} + +Set EXECUTING operations with a given fragment to FAILED. +If the fragment parameter is empty, all EXECUTING operations are set to FAILED. + +|Position|Parameter|Mandatory|Type| +|:-------|:-------|:-------|:---| +|1|fragment|NO|String| +|2|failureReason|NO|String| + +**Example** + +\`\`\`text +507,c8y_Restart,"Unexpected device restart" +\`\`\` +-- End info -- + + +Use the message IDs described in the information between "-- Start Info --" and "-- End info --" provide above + +Please include: + +- A descriptive name for the simulator +- always include a meaningful custom operation in the supportedOperations array +- 30 to 50 relevant measurements or events for each simulator +- 5 to 10 appropriate alarms for each simulator +- Position updates if applicable to the use case +- Random sleep intervals between 5 and 60 seconds +- the commandQueue for each simulator must contain 50 items with the type \`sleep\` +- ensure that commandQueue items with the type \`sleep\` are not consecutive +- ensure that each measurement has multiple updates with realistic values and in sync with related measurements +- Note that the commands in the commandQueue are sent in a loop, so try to send values where the last measurement matches with the first one. +- Ensure temperature units are in 'C' (not 'ºC') +- For alarms, use an empty string as the last item in the values array + +this is an example of the expected output + +\`\`\`json +{ + "name": "Electric Car", + "state": "RUNNING", + "instances": 1, + "supportedOperations": ["c8y_Restart", "c8y_Configuration", "c8y_SoftwareList", "c8y_Firmware"], + "commandQueue": [ + { + "type": "builtin", + "messageId": "200", + "values": [ + "c8y_Speed", + "speed", + "80", + "km/h" + ] + }, + { + "type": "builtin", + "messageId": "402", + "values": [ + "48.8566", + "2.3522", + "30", + "6" + ] + }, + { + "type": "sleep", + "seconds": 28 + }, + { + "type": "builtin", + "messageId": "200", + "values": [ + "c8y_BatteryLevel", + "battery", + "15", + "%" + ] + }, + { + "type": "builtin", + "messageId": "301", + "values": [ + "c8y_LowBatteryAlarm", + "Low battery level!", + "" + ] + }, + { + "type": "builtin", + "messageId": "402", + "values": [ + "48.8570", + "2.3530", + "32", + "6" + ] + }, + { + "type": "sleep", + "seconds": 39 + }, + { + "type": "builtin", + "messageId": "200", + "values": [ + "c8y_TirePressure", + "pressure", + "28", + "psi" + ] + }, + { + "type": "builtin", + "messageId": "301", + "values": [ + "c8y_LowTirePressureAlarm", + "Low tire pressure detected!", + "" + ] + }, + { + "type": "sleep", + "seconds": 47 + } + ] +}\`\`\` + +All i need to provide you is the number of simulators and the specific use case, in return you should +provide me a single json file with an array of simulators, but only the plain JSON, nothing else +`; diff --git a/src/app/advanced-simulator/simulator-modal/simulator-modal.component.html b/src/app/advanced-simulator/simulator-modal/simulator-modal.component.html new file mode 100644 index 00000000..2afe26d6 --- /dev/null +++ b/src/app/advanced-simulator/simulator-modal/simulator-modal.component.html @@ -0,0 +1,87 @@ + + + + + +

+ + +
+ + +
+
+ + + + + + + + + + + + + + + +
+ + + diff --git a/src/app/advanced-simulator/simulator-modal/simulator-modal.component.ts b/src/app/advanced-simulator/simulator-modal/simulator-modal.component.ts new file mode 100644 index 00000000..f9f08327 --- /dev/null +++ b/src/app/advanced-simulator/simulator-modal/simulator-modal.component.ts @@ -0,0 +1,145 @@ +import { Component, inject } from '@angular/core'; +import { AlertService, gettext } from '@c8y/ngx-components'; +import { BsModalRef } from 'ngx-bootstrap/modal'; +import { PROMPT } from './prompt'; +import { FetchClient } from '@c8y/client'; +import Anthropic from '@anthropic-ai/sdk'; +import { Router } from '@angular/router'; + +const AI_MODEL = 'claude-3-5-sonnet-20240620'; + +@Component({ + selector: 'c8y-simulator-modal', + templateUrl: './simulator-modal.component.html', +}) +export class SimulatorModalComponent { + title = gettext('Add advanced simulator'); + useCase = ''; + apiKey = window.localStorage.getItem('anthropicApiKey') || ''; + result: Promise = new Promise((resolve, reject) => { + this._close = resolve; + this._reject = reject; + }); + pending = false; + isStoreApiKey = true; + instances = 1; + details = ''; + private _close: ((_) => void) | undefined; + private _reject: (reason?: any) => void; + + private modalRef = inject(BsModalRef); + private client = inject(FetchClient); + private alertService = inject(AlertService); + private router = inject(Router); + + cancel() { + this._reject(); + this.modalRef.hide(); + } + + async create() { + try { + this.pending = true; + const message = this.instances + ' ' + this.useCase + '; ' + this.details; + const { simulatorBody, usage } = await this.getSimulatorBodyForUsecase( + message, + this.apiKey + ); + + if (this.isStoreApiKey) { + window.localStorage.setItem('anthropicApiKey', this.apiKey); + } + + const promises = simulatorBody.map((body) => + this.createSimulator(this.client, body) + ); + await Promise.all(promises); + const inputTokensCost = + Math.round((usage.input_tokens / 1_000_000) * 3 * 100) / 100; + const outputTokensCost = + Math.round((usage.output_tokens / 1_000_000) * 15 * 100) / 100; + const detailedData = ` + Model used: ${AI_MODEL} + Input tokens used: ${usage.input_tokens} (${inputTokensCost.toFixed(2)}$) + Output tokens used: ${usage.output_tokens} (${outputTokensCost.toFixed(2)}$) + Price: ${(Math.round((inputTokensCost + outputTokensCost) * 100) / 100).toFixed(2)}$ + `; + this.alertService.add({ + text: 'Simulators created successfully', + type: 'success', + detailedData, + }); + this._close!(null); + this.modalRef.hide(); + const currentUrl = this.router.url; + this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => { + this.router.navigate([currentUrl]); + }); + } catch (e) { + this.pending = false; + this.alertService.addServerFailure(e); + } + } + + async getSimulatorBodyForUsecase( + usecase: string, + apiKey: string + ): Promise<{ + simulatorBody: Array; + usage: { input_tokens: number; output_tokens: number }; + }> { + const anthropic = new Anthropic({ + apiKey, + dangerouslyAllowBrowser: true, + }); + + const msg = await anthropic.messages.create({ + model: AI_MODEL, + max_tokens: 8192, + temperature: 0.3, + system: PROMPT, + messages: [ + { + role: 'user', + content: [ + { + type: 'text', + text: usecase, + }, + ], + }, + ], + }); + + const content: any = msg.content[0]; + const bodyAsString: string = content.text; + + return { + simulatorBody: JSON.parse(bodyAsString), + usage: msg.usage as { input_tokens: number; output_tokens: number }, + }; + } + + async createSimulator( + client: FetchClient, + body: any + ): Promise<{ id: string; [key: string]: any }> { + const response = await client.fetch( + '/service/device-simulator/simulators', + { + method: 'POST', + body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + }, + } + ); + + if (!response.ok) { + throw new Error(`Failed to create simulator: ${response.statusText}`); + } + + return response.json(); + } +} From 96f6f8179a5929eac8db977d21111f3b31763673 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 21 Oct 2024 10:06:16 +0000 Subject: [PATCH 2/2] ci(release): 3.3.0 [skip ci] # [3.3.0](https://github.com/SoftwareAG/cumulocity-community-plugins/compare/v3.2.2...v3.3.0) (2024-10-21) ### Features * advanced simulators added as plugin ([#52](https://github.com/SoftwareAG/cumulocity-community-plugins/issues/52)) ([4d08323](https://github.com/SoftwareAG/cumulocity-community-plugins/commit/4d08323d3f2afd6ecd0924228ec230f9596c5edd)) --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24dcd985..96b72478 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [3.3.0](https://github.com/SoftwareAG/cumulocity-community-plugins/compare/v3.2.2...v3.3.0) (2024-10-21) + + +### Features + +* advanced simulators added as plugin ([#52](https://github.com/SoftwareAG/cumulocity-community-plugins/issues/52)) ([4d08323](https://github.com/SoftwareAG/cumulocity-community-plugins/commit/4d08323d3f2afd6ecd0924228ec230f9596c5edd)) + ## [3.2.2](https://github.com/SoftwareAG/cumulocity-community-plugins/compare/v3.2.1...v3.2.2) (2024-09-24) diff --git a/package-lock.json b/package-lock.json index 3b89c8d1..72d35a46 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cumulocity-community-plugins", - "version": "3.2.2", + "version": "3.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cumulocity-community-plugins", - "version": "3.2.2", + "version": "3.3.0", "license": "Apache-2.0", "dependencies": { "@angular-eslint/eslint-plugin": "^17.0.0", diff --git a/package.json b/package.json index b6814230..4cadac23 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cumulocity-community-plugins", - "version": "3.2.2", + "version": "3.3.0", "description": "This is a set of plugins developed and maintained by the community.", "scripts": { "ng": "ng",