From ed5d88bd9bb492c6284749ca2d90e3c2db0dc197 Mon Sep 17 00:00:00 2001 From: Vitaliy Zarubin Date: Fri, 23 Jun 2023 19:04:37 +0300 Subject: [PATCH] [device_info_plus] Implement device_info_plus plugin. OMP#OS-17020 --- .../device_info_plus_aurora/.gitignore | 30 ++ .../device_info_plus_aurora/README.md | 55 +++ .../analysis_options.yaml | 4 + .../device_info_plus_aurora/data/preview.png | Bin 0 -> 95971 bytes .../data/ru.omp.deviceinfo.Features.xml | 59 +++ .../data/ru.omp.deviceinfo.SIM.xml | 21 + .../data/ru.omp.deviceinfo.Storages.xml | 21 + .../example/.gitignore | 47 +++ .../device_info_plus_aurora/example/README.md | 21 + .../example/analysis_options.yaml | 4 + .../example/aurora/.gitignore | 1 + .../example/aurora/CMakeLists.txt | 50 +++ ...le.device_info_plus_aurora_example.desktop | 12 + .../example/aurora/icons/108x108.png | Bin 0 -> 9954 bytes .../example/aurora/icons/128x128.png | Bin 0 -> 13645 bytes .../example/aurora/icons/172x172.png | Bin 0 -> 23377 bytes .../example/aurora/icons/86x86.png | Bin 0 -> 6632 bytes .../example/aurora/main.cpp | 13 + ...ample.device_info_plus_aurora_example.spec | 31 ++ .../example/lib/main.dart | 389 ++++++++++++++++++ .../example/pubspec.lock | 257 ++++++++++++ .../example/pubspec.yaml | 26 ++ .../lib/aurora_device_info.dart | 110 +++++ .../lib/device_info_plus_aurora.dart | 98 +++++ .../lib/ru_omp_deviceinfo_features.dart | 237 +++++++++++ .../lib/ru_omp_deviceinfo_sim.dart | 105 +++++ .../lib/ru_omp_deviceinfo_storages.dart | 72 ++++ .../device_info_plus_aurora/pubspec.yaml | 29 ++ 28 files changed, 1692 insertions(+) create mode 100644 packages/device_info_plus/device_info_plus_aurora/.gitignore create mode 100644 packages/device_info_plus/device_info_plus_aurora/README.md create mode 100644 packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml create mode 100644 packages/device_info_plus/device_info_plus_aurora/data/preview.png create mode 100644 packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Features.xml create mode 100644 packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml create mode 100644 packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/.gitignore create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/README.md create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/108x108.png create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/128x128.png create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/172x172.png create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/86x86.png create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/main.cpp create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/pubspec.lock create mode 100644 packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml create mode 100644 packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart create mode 100644 packages/device_info_plus/device_info_plus_aurora/pubspec.yaml diff --git a/packages/device_info_plus/device_info_plus_aurora/.gitignore b/packages/device_info_plus/device_info_plus_aurora/.gitignore new file mode 100644 index 0000000..96486fd --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/.gitignore @@ -0,0 +1,30 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/packages/device_info_plus/device_info_plus_aurora/README.md b/packages/device_info_plus/device_info_plus_aurora/README.md new file mode 100644 index 0000000..b85db91 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/README.md @@ -0,0 +1,55 @@ +# device_info_plus_aurora + +The Aurora implementation of [`device_info_plus`](https://pub.dev/packages/device_info_plus). + +Permission: `DeviceInfo`. + +Information available: + +- `id` - Target platform. +- `name` - Name OS. +- `version` - Versions OS. +- `prettyName` - Name and version OS. +- `hasGNSS` - The presence of GNSS in the device. +- `hasNFC` - The presence of NFC in the device. +- `hasBluetooth` - The presence of bluetooth in the device. +- `hasWlan` - The presence of wlan in the device. +- `maxCpuClockSpeed` - Max CPU clock speed. +- `numberCpuCores` - Number CPU cores. +- `batteryChargePercentage` - Device battery charge percentage. +- `mainCameraResolution` - Device main camera resolution. +- `frontalCameraResolution` - Device frontal camera resolution. +- `ramTotalSize` - Size total ram. +- `ramFreeSize` - Size free ram. +- `screenResolution` - Device screen resolution. +- `osVersion` - Name and version OS. +- `deviceModel` - Device name model. +- `internalStorage` - Map with information on internal storage. +- `internalStorage` - Map with information on internal storage. +- `simCards` - Array with information about SIM cards. + +## Usage + +This package is not an _endorsed_ implementation of `device_info_plus`. +Therefore, you have to include `device_info_plus_aurora` alongside `device_info_plus` as dependencies in your `pubspec.yaml` file. + +**pubspec.yaml** + +```yaml +dependencies: + device_info_plus: ^9.0.1 + device_info_plus_aurora: + path: # path to folder with plugin +``` + +***.dart** + +```dart +import 'package:device_info_plus/device_info_plus.dart'; + +final deviceInfoPlugin = DeviceInfoPlugin(); +final deviceInfo = await deviceInfoPlugin.linuxInfo as AuroraDeviceInfo; + +debutPrint(deviceInfo.data); +``` + diff --git a/packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml b/packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml new file mode 100644 index 0000000..566c597 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/analysis_options.yaml @@ -0,0 +1,4 @@ +# Copyright (c) 2023. Open Mobile Platform LLC. +# License: Proprietary. + +include: package:flutter_lints/flutter.yaml diff --git a/packages/device_info_plus/device_info_plus_aurora/data/preview.png b/packages/device_info_plus/device_info_plus_aurora/data/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d356e15e3eb668903870b1cf494c2e8cd7ceb5 GIT binary patch literal 95971 zcma&MV{~TS4>(%enA&*CsqOZuZB1?4wr$(C?Wt{dYP(b2`Mv*pKim&@t-H=TA9j+p zlau6RCp(EykP}CQ!-WF@0YQ|M04jlifSQAVfce8f{ev{%9+dq91X+lPC`gKk5ZgQ2 znOazzfPhdX_$2U23<=_o=qXE!(hzJ26^n$P8)IQQRI5@6hbYiCpX)oGVX<0BD*eKT zTn!8&ic*EfGSeaW1u1k3KD<04IWH>pp{HbydN|-9u(R#8)dL>v8e?%Rh&JauIbN!4 z*jrBnrH3jAVK9u6kg=YgRE)qow#w)2-6MTVcjM$2YtUlO+z&tlXb#nfbA+3**Fc^4 z98gt_)7)|01q)%3`yO>3+~b`z4uQ=^<91x~IwWh*y)-P0RU4WQFAh7XE>i1_cU3#? z98@o7R(r{R4Js(=X&!S=V=rh7qmhRz%mFdkG$iIKlMG3v->H$m%Ma7WOX92G#9|?r z3WQug_WW+Uw3}Gj&L~5a1ouW-1xEe%e$H8}Kfg5CxXFQhv)Grsd_1u;zDs&mm5s#t z-?G~~Y%eDB?KwhYdsvQ#UP}083RggM=go6q`j68yHXlE)Y>%CR#~0NybMz08FzS|G zy2QC5KfgTRWZ3!%I5Ikx`l_^2|Fa5|p|m&<KwAd7C0b?TkYK#~Vj;i9O(ZGJEKH1QCkkhoeU z%7OY*Rq|*9m4sXC?zRwH^NOE!leoP~Hh0q?BIgK$cD}ZkK98TbOPsH@X1ZD*zEe97 zDMp?NckO+ym`-v&w;p!Cfbkgf6J*;@BTcL1VALd6=vLn{S6rl#Qj z(l0|6@9WM*A#?oSOEE9&i;#-`=b>L)FY(VErx+V{Q6!N&g!@j1j@L;}MaeT+VS(f` z@4s5}%8G+Yn`c#mgE#o)-+#@-BA#r^zkJN{Ja4(UiRW^(7CWtOPG4TvuYJC2YE$(Z z^a8keOi$v9oM&kZ?zUT64%cQLf+Z1!&ySn3U%DJ^t9KbsI(g7tcIvWo%;38z=ugRs zrS?VoO(C@`l*}XKt;H1J=84f@Nc62k;Tv+gwF0E5U^QU(2&9Oq2TFiI6qE1@p9qm~ zbJS{xVfE9a_&I&@M5RH4il9OBpkWCeRShd4K^)mzB*n;l=1eMMwWRJLfb0SeRrq`h zGC2il06D6mFo`(YBKv(12-ADs4$6ElA*M|6tyr+ z@hORiiWHTFp3G`bwG?%shPTREb-pVS5!!EK;z;uR=8{SR_Sptaxht?@i3FNRPEkNy zOQ_~DajBq;oJ^ox0-c9UHRD8qv$(eusu3_TaQxXt6qI34G+Zia7%gek7-z?;nF;}x zz!YO6300w2=vRmuN=qrKs0vPDqbnk%>k{htVK%QCIffiFuIipjD3vS%A~z&Clp)%% z#xI!kDYPKKBs~eGH-ZKkwq)^K^F;!-u+-YxoI0UJDK@VZF{KcW^dXp}3Xh(Wps09k zm}evkPoX-wVorj+>wu-?qIgIH1$BU00tQ|+({TEnmISr`>GSJpc*Cgqdhd6t3?zN# z9&dOdY7n}t6et;}EGdv=EjkjP0+y_nLJQTK55N(*$44U6k1~Hk-yA_6NespCg8@g# zS$yrEbz!vt^4G27Rmup1P_Dj-LimfwS7w?$0kDX*l~j}2dwAiXR&2651*-24F)wS4 z#YhS15LQjDQYC8%ITR5CW5HII_fy2&;@0cEdtjs3Kn!Y#=>7%!ac}mJB_F_SI1`%W z8eLHZP2^VM8L<2Wg;%PDAyNs>3Xxh=fe~wZltD0bFDN#mduHFBk zcY8jZ(lC5ME2+kWNRis0un3Eit|C*0*Q1mPSLqhJBtzCTykV*emp*}cHhtQv&|GGx z%mGv~HvtwQGpU@VuD;atv813DZ}^gwH%?WppEt?4IQwYE5l0#zw6pO8AA1>+ahZefBN}()- zG>n}eH6~T?tbvNTrMZb2*&Cwd7X{H2=(F9HYmtz~d`kA_6e_CIBXyC?h2iw@4{q zqZ*YU#y*wA`K(&J9+gxF(eFDxs9q~@u>|Xal3=6>5>lu|7#(QVEG4uCOUdXq)wY zT$ssP{S&dG3>^rodgY)<6$wfy_RE}@Lgrp&5vOOF!m}ul1rL+};C<>Ut9r9nHJdAV z5}MD}0uMYHuMtuiR#grM)st1+U_MP@EzFoYK0T#+2*d!BGE2@ViG@oEerq0#ESiJE z0@KWVxXzNU?NqpX9EhIo90&uZni!9w1e8`tQZ;tRLGyAQ@xfhHTx6o4i|%MO@4TyN zgu}|nk>?iySVD!VcU+Q=jdNbF-3p+ZZLl&af!R*sRE}8&O@X7vDymi#G!)f&xn!ht zaeq}7BeBswdCOQ6Mj?-TDGRlU1jSvi(DG3u$}!rWRALUn-K^O0M%4S#PUBY0v&Yt= zlg!w$qf_r>Md}!XJB6%*+F;NiLo_x2vO0Khn^EV2z;P z^_uTse?4e@ZlS=rKIvn80@_%GvQDwxPw`#{$=Fn9=OBm$>&Q;ikSKmFoO%Z*0(1M9 z5lJXy)C}*{knEdqHVvY62qwI;>rjm5-9ta4=QxFLUr)ztOqg>Tm@kVKviAsF z2wXsdY2&od!jJ>_5$cJw1+GKSVj%GJ=@V7-;w{x(p<))puvv?xwE zw~nlIlV(r|OB@NR2Cbxe9FEf=IL0`|9^rS$k;~EwOr21{7Av&e`!^bkuA^C@NTgcQ z<|D508nO;cNmK%Xs9Vv(#Lyqzl!}eZz~;!ub9!>9Mr%Q(P}9x;_8*P>7uqaP9fK0X zrckKqGp1Df9&2X2IcPR{`5P22TT^$axx6SDGH6a%x2^e>Xo?icE#^$GAcy7gSY-Ty zHDT6Mtn9QID*=W!&@<3~OA0b#a2}yqw`WKeBZTyZMoDZty@x46ZubJlZ$9sw6k<8~ z?oM}TDhUq@htTJ>lB`6~X%uiKG$5kdCp?hUx6fuH{YfIAsv@)!v_l>WvYH4>5Oe$c z&AnC8izsMBLgKv)G~i^D#>pA)oESTw=BYMuxf)6pa8JPbq0Z0J=g(=B88`u#I_neG zR^aOIt_7*VQEX3J3C^LU1`lX@(4@Yb353JWa^5{x*gAXkQge}lyZ+Ml-)*_ZWV@ou z>c&!3Eeg;hyxJuk*!z{#Pp_;zQ4)$6){wGSw8fdsGzeBDrp$SJHhH?X^NTJr*5kiX znWon{Ju*xFV3x*=8H;3|GQxVYCr-=7kKtAYZvYN{omx#_PT_=_APW#Kt_H>;RRE}L z92yZS^N}iJ$TM;c(`gU9Bd1x8*{)ooaq* z;U-kFPv_1T9^3@oL1HX~fgp!ak~;Dj=#E{ZGc%#GCh$pVQ53TUZ@LR^JS{2%OdPUd z=jT~0(J3AMKtI7)RK}oT&a*3sp;!&zHa8_PbP}l?d#oX@9iR|x@CI$FEX=j7PsGXQ z0hdw?6EwgC$9VZZgMX!DoD#Q&!{`uYf$oclB_zX*2*oy-5H82HESYaG00w2|n(izi zyn`z>x36)RC2F8Wa0AILsudyh^03khW=3qo{mBX2za0YMIe!{+VjF%$ckURMa2PZ5 z4N)l*u{F-PcPmM6L!Co z%*uZa&3fO<)&9av4WPbd_`Y@N_45vrZIP*@^#03-^-$Di(ff6quEX=bWnUr;uIYrT z=kbW}{d}h^V=1l+gtMskXPe`c=NdQY9ze_T-aGE;zOdoZAcTQ}AtdxPjAG#R4F>;r zl%5%;ZG8Uv~z#?dB`=hsyJQt}$z}2{9Ei68fys68H9iHG^_b;T)O%2K$r2 z()SP6&0Yu19fQC(ga`hEz{h=8hFXN*bJi}&&5a3j?YiQW``8oKL#=jNyJ1OB8(00e z^FiD9Bc^VxbbY9DC z?-f5x-nNnZ{GqDP9ZwzJd=Kkp`fb9?&II9O!Hzd#J`z3+p5ON-<(E^%T+<+i`=`Xw z*G=|OR$UHM7ka1tSa={rXlU?Y6otMZovmk}eDAvmf}__|zzyz!V= zQ-;9b3nss}OUdNvc4yARG68SI)oaD0oVIUZiu=C%KNY=d@=hKNgVpZqyj)EgYx`GM3H}GJ;Ez*T7Zn>SL zY_(H%zd9Zzh!YNYjV&z1XW1%DmE9g4UVJpzE*B?I*>RRu#@MsXLVe(9Rch(q4zyUxiK%@-WF-|-XGzJ_0N7Em0ZrysPLJ- zloR6%4AR)|@`V2K4Y<9!vA&&ai`7T>ehph`zsaT5WWn_GjU-jA5u>pom(I4SXL0j> z+{t=9LcTFJ-@k}c^FAAJsgyhjyTQF{c+r`*ly7SBg*pKr#cuY8L!|x0&pJMRljMIt zRDbxw!?-9z_xp?)>b^BR*lD}jyO$O>?ssmS$VW+anSR3h`2hcYhWRh;SjQqm{+L$O z_3k+4k=l^6C7Zyn{IjT4wa=SEw;k}=Z^zD-mH4~id zmFA+-Yp^o!xUpHiXSvZizQ^2e0I-GF@lJ|10g~htuf$S|UJ_hW#p%eLu2V@O` z@ACGi^?uPvm)usknfy~eCY@Qs@{uxW+m9SAHjeO7T1Yg-VAm)@0&sm;6b{kB>;=1e zh)eoCqR%xp>ueeCvkUPGK*VHfNZ$9b%jGyOr8b`T+m{jV-z8Lp+oPA2w|jM@J8`{? z`KG~I(pz`|mw!%Jksh~S*XI#<(nr+(Bs@~)=Zw{Mr7bcm*BaaGB=ow;G;79Y4vW|Y zh0{d#t_jZn=sFaW1{){f8yQCA8RMDlzA76j-~EE-dP<#(g@B zb3X8U{~XgmhODjNGERLxjmhMxU7JoYTe(vnbL?2sswTP1@_WUvvk6QXUd`hh7kCTl zdb{IclNWGIF5)kXhf}i3cuE0`&_6%%5_O6^c&5DS`Mx{Eb`Y{pzEzFs9yJNPu-kS? z-PMdCIPvT)(KRgS8S>}Fdj~CG`lPg}cnM z8nGN-XkRuW=6&2Q1NS(5PjGZ|G^}+Ei9C|!eQyc6zkf{gt?G{F@ixuShQ+ev)HrOK zL`sX_o*N6J^JcJhU;S0}>|d-SG+{wpFYuZI(H35IwZ*pG#ws^xgZTImZ>wRfE-Ij|!s*Qwd zZU{CX{1f-^7mD_lTp5z-O({`bd%LGRlFEN;Wch*91BWL{6$WNNSu zj~Z8p?dxBsG0kP^EfDV$nVGaaPfRmfPs6u@EQaHQ-rE>;Qoma>`8~zta~E9!M^qxe zZ^)0O_f*b%o;s#j;Sw(i%bYMpIw4jeIvPk%mD4j=SH#uZ?ZVHxuc0VjuSW#Y^}|Vd z-?Z7Utt;VwB*5Go~%l)4iE9PjA#!0D9w~&;-(v1y6Tvs2`n^T zzl?*ibaU?B`n+Q!wk1E*#ReA`H`18|_g`XefZpyQMb=P-6?iBuT#+yi` zZhyJLa=6)+?tZ8ZeBWtG!n3=)8|Z?*+-U&nOv6$Fp3>e1)%zwBEDpwYeMkg83oaV^ zZ@%uTtc&@_N@0mGhxWsjFYqveP}Oxk5IMG-Y2RymA{;qMrR@(XB2$D0j*rFgBtc~S z0lnXFWjdo!;Fdgw-wDA`xjv=>Wu>tZnu82FgHdA}*!wL)al=_K|e zBUmWEWK&J7ZDs34C3lEgH&4&F-FB@N`-kNF#_t#ntGdI7R42%03G(4=fFU5XL;M_i ztzkWC?)P4(SZFO#Q+V<_ME5av-bo1UPn|jK>9?In8EKRlxV63J&_k@I=J;4Q>jU`= zyq{9}&%y-35wV+_$ zPy0dmPd@BTI@afyy-&jrD*c#b1veZh2d=3mz{6p*;Z_EDICAv_?GbPGA?L;oX@IFp zku>KF?wH1(fH5*0`-c*q37gSo*z{lNGiWoS+3?s!4ck4V7@Oo+CNQ!=%gvcCrWvX% zxavjzDJh9MR#i5ESb=MS`A(xQz_g*Cv`v%VvNl>V#SbhjSngIzuc;xo)DSxRCWgpfnl zo81uS5$X@jw=gxk3>$%w_i(zfX8OzD0c}e zK5G!oGQNSxj8=1x%*nQ&g9(8PJO^yH1A-J_9%vfM+S5&tk+7>{*W3-@Q(hD_g$~cz zYdKpcsA*iN_uUhlqe^+y1wh8l{SlD?H1ay8#85?uV{u+fY&eraXqfV(Qe>J!Adv`L z-oh$;nd|8VFqHiXWa8s#wZj>NcuD>BzxH1p5+*80KcxM_a z254gzeT3B*!E?9rG?2Msf~qf@xYiGDGhibrTyHjF77=$ifdlm@sVpOTR<#5yZH1)-vv|f=AcV7=2$ElNxyxxjw$Xs{jD+!?(jzZ!BeP#$3+d zbVGCc%0ZF)h!%Ti-73$JJAn|03tC#Za$|&9Z*qx^<;fDgP^2?BxU2Q7=SH~V*l``l zm3W(1#P<8w6iO^c78WT_6F5+%N5^=zN9Z?m(Pj|>uNxQH8`%$k6NaKyM*3b$;^t@# zcykV+MGS92SW&I*!kM|Gn2#6z)7Y07HVC;N!WUGQqj|M$TxPKyma;>mVOHd!C7&Pmt8r;bp>*C_jE8$GtTNg1Z)DeBN*QJA`LX9LH zW3x#fapo31BN6)76+i)xiF=GL4Hssxi#Tck=nd59%p^>Qmh|p>9ZKR|B_Xqz(j|y;VpG}pOVZg=0GVi80!d_qr)-c<1uc_LPZn=NRl+@HEdmojH@iWO z)1Th@3q))D0iOsh1oQVmxJVM$!cBsSPw6tw=mYz)hpsA63<5#R8>?>nCy~u`8i*82 z1-@?R>vhaIGIViqx_s$lbOFa{fq50)lumzo_5|xZZSW~UBD44T=uTi_u$r)rSD^bn zdqe65NBDfZ!hK!uEkvAdZ`R9}0}0j@ito`gC>ywKw++_!!;NnqeVHb1^&G1XgjA$X zPm~Stir^N$c>cKKuSEr8NJN~{`laRQ?)9TyEA`h~#7JD%{nFgZXY7QzdbC;%)mD$^&9OWP(R;qc;46F_-S?dP-*##7SVyGa6S9})5%)M zYzh?io%%l@>JY^=W!5d-WEWI+_G=)On^RfhwPVbs2}075Vf!74N&(36^g4kWBr8Tz z%cI0)mhdUO)SPhrF#keTL+a;PTl;aLNiHYnallw!83(rFd+>#D+c`)lw*GID9mwOK zhS8;Z$x9C`oJkFu1NF%7YU0^j>4}=sxj5%Wc$eBX6VNs36r8@E;Iquov7BF*0XK{j zE9s^9OrieyGO_YTxO5%U<(hx+;>2ow+KzYdewsQN<*4pS&x*$!pRS->Ik$?H@)EV8P82;63b-#i2oa-R`s? zsamBkmr1_CsK_1S2l>LvilPlri^j7W%~grM1Z**Vr&JpF|K`b>+(OD>9QNnc*g#t)iWuteQh8$#i8> zXDZ*LRO#1A0J4%QEEV@yK570gu??O18<8MJm?|Tq!i;=lnC$a8)1Oxqulvw;7Yw{o zV*@!gyT-P`FmriT7_geFeH;TryX;V`AA1ul5~-`Cn0 zX>q(GM<`YM2=8J6+Ox`)>nKTYG??gNe}lJY&? z*3#+sYBwF9t7AGbY=fq~+KFGu|5fo(dpaU2sVBPpf{5J@u|8W)56jqlJiFRujnc0W ziM+w=)ZhX6PQv^LYo2&YZnFewO@J!wY2^7V{JjI+7y=?gb1)^kyJ6Y@So_WGHvcNB z+dVwTD%e`#s$lYgF2U%8&e|FJN8o8Bw2e4^{(MfrNe@{l)FM<{0Xk5AX!EeB0%f!A$okr0egJpirJVhP(b3JptI!#6rMqFdcd{ z8@UaP>#(Q9ko^-v}DYlQl-+!@9m=5*^aNbN-+iwiDWz8gZo%Nmka@w9KViQns5d%8HfXPC7ThrN*tZ6w!@HA>=`a zP36K-F~KTw>xJ_IFnzzoZIABE^vW!7cYMd#el^j3On;5Pa4=i45SJCk#`8Wp8&4kb zzTP|7@_3R6I0qc43%s#^o&T$AY{5im>FTcbHh5BBU-UNiB7)EjcMg|EgTM3zw^htH zjYtRG@&v{|_|)$THl-JwV^-sGN`Gk`2HosPtI$ivTFL%a_vqO;h$G5=$ncW>%9`C8 zNb7ZoC%aIttRLA>#j=06BI|wkKB|iAn^}WZ6e1|?ZWg$o@rhiPhU)IlUGp=H=Abq9 zP2!cAucXbU*-JV;!q0X8L(ZVv7q$69<@*G3|CKRVQo&rEm+!a*?HyeBxt$7WM2w%!VIE_B7BDG!0N&%bD*Hyr6#}P8m zx9gauX)vh{-^60=aFJ+39Q83BC&*Ri05$>1URmqljz(EB|#0_E8(ndT7OQz^V1RTGU>R6hpB=qi1zgRBapM`f^i;jEab_TGn{bFwTUvTyMUZHk;at;6jzS>!{z>YD@VZkfot_-H7jnOIybPFia-4AR`O=z2X)kF%VTTT7_rqzOn$XV|g7hFWX+! z3DOq+WxBEWtr1ZSst`QH5<_a2cP#+j(#Nj1dAF+r@m)XI2f0<`e#tyeA4l{Pa1XA3 zXA+HO@8<{i>Wy|0#_NicGNll@jCLw>WGNGPX}`*lO3GuZtD|M(%+1Gy^3qLTNLQ`G z<)#z;Lo8>T|9f8#>|3~lv-j7xXQsU0DWz=((BVpyLt&`3^z%SWSg9(-Zuy~AOCKw$ zYNpC}M53 zlU;V_jR?xh-TjMPcc=F`%)jGtB6r>G1OQPDekbA{;mGBb(b1jz`9p_-GsUnf(hW%j zMa7)TMH`C(bl3e7B~7m*E$?e$(_#CyuRi0o&CenFuoj}`3=6ze^g@5^7~5*Cl0ffo z*5_9JJ9BN1ZA4U^_8k@pE9nwR}{yB(OGFV*c4 z?bxj;X5Ngb{Vmj02V$494%!TupC5_3ukR;xY+FM`DG@u<1S->JMR5gf^e!clhQz`O zzMMlBRhKeO{J6b@J+X~ajeOu}QzC^}Pj=ML^^s$>p$wLb=rQzeI~bZGC7(ibYphw1 z>uxia1zt)nXUCdR>bGat<+gpp$Me1em$h7F+KMzMpCzR*nm+=s!C(mcL ztE&-VP~~!S9nK%Q7b#I>Bu~%5tiae;t~5|?6Pc9By0QO_Nxj8}FR&Y^YeWZ$4d6mu{!Wa*qRh(i&ThQi{Tm9X!uDb<;Q(?Jknux%m1*<|AuV^6x<>c*@JF zpD?`KZisLGEXABWt?H7ENT9`}MRRcp8&bs4J<)kFtcActk2%HS3yh3TB{UKWrK#|f z{Fv~*7w(=BAJMV$%@RCM*%o1NMD|G5Nrx?bTEU4kj)|6gk4aSzNpzy8H4x3y5 z`#dRdf+O>><~J2Bn1Byk$m8D$zWe zQ^gX#zYIHkr|ruDH5skCh4UnWxAWdKiKkvF@-HW6xFc>7v(HkcjT8b)&?{2g+xbBN+ax zhYAsAqBz}y_+BaDzNo-9)UQ6xqv8VLBa%sJpj51>oV$qI6!EO}%=+__%3!n~iw|b- z>W+U$Ln% zPf%-(VnQ?0-lAs7H038@flA)<=3xM4)KYp_(n9^LKJshFeau2!M5ic@pTTTak4z`s z31g>=OdU_Y)(qyZ-IFyy;M@=**Ct_TrFw)OOP;AMOBt;$3X9mj;V@w7Bo-zW*y^ zD!aCFZ8HxbA9vbLL1_t}(K6GI1Wvhbww>yDacl>sDsAMxXl1nu35RdGJf$cVL+n5s z-kO&;hnTOo;?CI48AjKr&Y^ZG zd3wSB4bq&miEE{?)aC3PQO_l;|9*u^k*BhmXsn*bm#9feQaZ1G3s!=q(246J-`v)6 zHbabBz%J27i%CG)6ctatCKcOw(A;!=kZ7o}O#><{oF$pvG?6`~Z-mg51XC^hu8i6g z6vs%alLPa}{=9}lMfqJEe}8Lam=V|vKKD>!6k?QGwdT*g!Z5WEC?~Tye@t}4KE8{X zkIGQuRVPCdxyPBtu($A=iCfXTX1ZQ}ea+E=>vEajo_$;g)Qr$2wzgbwSP?@&$i%AJ z@Le1c?5qMQsA}FKUjASl8Rz7B*A@|}^mE^0?RG@3>Tyq{<-v73&nb$MP?G%hU)H?n zRQkF^3ow<*bQj)>ze{v2Jvp=hYOqg#j(z_x)MXych$!lkdUnlz0r zaj+e5gpW9!Mrn5bvEQLqMSw+2${NFCW)azJQ!`_0-&M1VY)ueJnE_S-pi>XSd17W) zo?z9={;icEs3rW^+(No>jggZiv0+mTbK<#NvQ}za<~q+b>fa3XPz#NhE480#GyYlg zOUR6%tZ7@{ydbS=&MskryH8J2(Q?@Z+vr)N}PmWPNO(?g~;28th7(fPb7O+04ZXEpG#mD zG({Y9T^MX+gVcl-HjhZmvLb0hHgxqjd>so}$!|$qck0=p*ggFS_j~U~Fi^W+{7y>v zx;R5nI)83m*$U@j-Qw|V`|^~(K?lEp);zVQRwU=UWZl}UNdrb|+0^_`chgZdR+B}M z7ACO7SZr{sugFNTOEwT>wcf_h@Kacu#P)rLvESQ%-26Ob%(*hJ_0#9+oK7|NLJFCg zCE+F$8{+khZrvnUp5=m7U5!@_FDRH|i)pLQ%P@qlTH_rm3y;&E{qZJ$^)bI~x8P!D z(c;p?_w91x#rbZV?Im!82=9LG%0@}csD-NRS|NKxvye)Wl3KdJbT(C4?vm5NW$R2OZQJ3guD14^X#1>EE=8FdaOH}x z?P@*QNT(QNqu2y=NQIF*KnR3@Me83SnBnr$5c$^dx^emm5{My0QR>6LLgDW<%V#Ek zp>y-%yZCscY)X!{y@##uxR@ugL?dg+&G+CEVi&@R(u%|LquUB%z-#a#^quT)EQ!Fk6^U;5z2vCUNepJys*u@ z+$VdBKt&KpbSS&xvd#A}2EO*}(#s`xQTTX_H=r4j-#mCK28J-j!gh={b^(3buH`+3 zp}pN<64>Ow%oN^AbR)^@E(D<%TG?uD#HghxzcR5g z3UA#ck$iE&gJ3*3!|@`?<eZ5E~sl52D)zaR_Pb2sMn7LInof(jHUlz)4@H zznDu^M_j(LV;ApQbg@v-O4j^(*}8j#Z5Eg{&>-}e+tR05;KKDdgKfd*7(f36L#>+*6G8r(L>9=e8lzm_zyc?M6(U zU(GxZmuV6gs;DeLl zysgidZI|rxbr!*m2^wn*O`r>3mBlf}4D;Vwt}ll;`A)L$2DWMB2h!_~;X9*sX5Bw# z`!SzX18kaTEVZWQIp;7?LW7~gA+68!KV>{1ty9#+c(~>{{;&m2`c;7_paXc14`WU1 zgi5zsvlyrlt3#-bt58lpLQqhq;+%08T{9GeeT&#He>|4W;l!dP3%gA~T7Z=nfSavm zi%+H5{@s~&SGVDMa&AgmZ71pLC2&ESaq|E2(zn@IX~sOH+f725?IdudJQFifKAE!z_X9Z8@uYxTc=91VZXIV%gT3NL>@i|^bkp3o>5(# zqB^#d2qzoDxW>-)t{!9J8>~f>D`a)OCno4@%GfqE4bY4|yla-(FsP@=sF-@dn<2MV zM}qaGRCPEv=q|{e#`E4ic}6D89}=rwDYocI+;rXA<)S`cV#enHhpT)q|LId}uwr9x zIRySi#+;g(@LSRId^E%@d(v?V&8k2_S0E_U^I@#}yMe(*iIhWv+i~mNfp>*(63@hS z5te|BZ$$)V(MFja0?Nd*5D>%EC{&%XjUtT4$BT5BlcG}^Fg5qoe%q)>7MBv*dLeHKYMk9C`fb@!2JWll&Ci*b9+J+J(S9R%8`ec`#z8THcTM2XCVYm zNEZN~@h51k^LA`kV$dPo+4!$rKh5Ut7eM!PY$q?q+d(bzG`OI&q#S8lVQti?p>jF@ z4<@_qdjFpGSW!@W67P$9Hhoa(L~DYWa&Bt67rQAQ=&8ck4l(DiaL^5Qvki`b;b$(3 ztV13q2W+7%HLRWdb^kFPBK#&fIqbuXP5gX4*y155Rb^f3;Z~tH-gTuL?BRJ-PVZ&! zS?8SJ0e})w^s{Zs*xWwZi2A}MR=IU_RU84gG@IJ z;*d%r@rM$m%mghfGAGvm?02N^V+%uP?di3q6dxgDpq5Pr|; zdXn}q;vN`)6MsVZ8S&k=YaYiXzPx{u$wLr0f+_Gb9c6b%{>Y5=sx-lrt!T09?4!Qh z*1C8!HzbK^e%stXedYsfu*wa~$gjYAP~?979&>X3Jf2rqitVx>^x4i@s-yho@+4Jm z{Sj#S>vNpSf>k?VE_uT)I4Ne#;qfVxdHc|gOyDonRVG-rYvL=b@-W9{coq$#!MS2f z^(u$XF^#0*zC?NY@nls7VA>57xQkGjW4QugK>a6gU3V?J<>!NST;C$d=Pnm)X063g zH7V_wuszDzUr3^qEf*zwEYssA(K+)0tJpB4tLdXHL0;58cI;6~ef4@|vOnc^5R{ z)6%|jDC5o6&MS|$oa;4|vOVk$Q?(U$vXwpBq05E~%OO52E?erit*=@TXXO?S?GE-$ z|5Ib>3O$>fG@Ro{salUTEMoDlMZiU|B*1`E(v)@k?2SiJ+@WbJyyR;Bv?DTXDJelJ!ub#mqf;d($RqU!>rPqRS z(e*ZauYAL{SF_KUSsNvQ63GmGzfbgfn0A+g>sgigWKO`9##3cLJ*sV{<9gR-`Lx*x zkbd>G7m79ATc8A|z4^ABv$=K5-o}BFZ^qPG_0fzU)OTz)i&gnsdDZ1o1O$Qz1rv3r z>#e)7W7@{niHF)>O_)>8>3Y5K<41Z7Q?Z3qD$Wt~EIxvXrV@teD%Taz<=ZLizb%tE zZhRIe9LTKX5`+H@g!S!?(Va*BUV2m#m)Jv;`pWo^$nTb&mS9#2uR+JYzYOo)Cv1;V z>@*`Yx0bO2j*5(2R{!uce~)*Nr|p02>xlBTF%4T;%3cVq{$NMj@F<&#NvQUd_kdcK z{xNumw*#_#{3qsnm~GR#LrwI4wg{U~UtFu&vBUyK687RF@o_r?Z$^gS{}It_Zjpc2 zhC9cpHiM5wToS(k9s{?ADI?TWZQ)LKHYoT%s%Ou2CywkP3Gg-HIov;SIaRpAEQk|S z%}_q02V05xzcWSePSb`L=E@Wl8 z<7jXDKdf&zN{>NpyuV$R-GsIHKt1SSN_VJhkyC`xe`vWG)1Z*6KC^HB_s;daj5FXL zb@xLL)&2k2=Ro+`n%+rlO6&f+2`^orl#!p+2qKk0fe5j9XOd=79OSq{IfOSa#hP`! z+~%w*$noB%*h?9cB&OQ!-kje~isRU`{Ey2{^&Z}L9SA15uZK`zsA+N*av+r`452)a z4HZ&YdW~|%RnU?z4lLXT)Dg{I3TZx*Tmcw1#ZoIojiMC#xoIU#z!J8%W>It@bFP$> z<)3ngXdI?z^khp)@hMjE7na3*wugzq|9$O__i+H6bX+tEbp=cWOolO4+P+nY9Lq-R z^a`}6MPLnp94;EJd0JSsl*J)grcY+lu*7KIa!8}IlWr~|5NKo-1`)CXhgvQo%FHTr zj+)|dsppqqcheEXCoeEOEZ^_n(x9CLhgOyx9tpCoVD<<6K`H%z*0kgH|Dg~;!a1uz z@yq+!wzlsG*Y#O`q+GDB4XEmstd=jBjS@IU6*Is>122=97oRJo8j2$Rs^Si-qQ!xr zRm6w=N01kj@P>p!1fseUCj>QxTEiq~v+sqi*XP^KK&U7zbJ-9xX;df^%@nkA9j>#~ zV=POU_dh51Ym*HW4uR0)`tbnjtAe^hzpD2vXWMyf`s0zbQfk~K4#>KLX7 z=&1omibYaXn%BE*XzdltBrgZ~JxiV`vE>s>;K%x(40eS6t|s~p_2cF?KpI%>Fl{QN zST3uFjE{pFfmv!#XbXvam?Lfx;rv!iNmHt-#ElMgu;z7`q=Y|GW%Ur1jUce;bVFVK zE^O=?XlQDhC$o0n|N4atj0=!Og@!V)5ekPA?>Gg|EQ?u(01sH@h$4fv|MRaMH~OCe zR4Vgl=t8P0&Ot1QqhB7%^xjzeKECvfyQ~Mi;Dv%DC1fHIV--~sPtnyKvos?L5Vu_X zr0{)0B0YgNR?Io^$c|#s?I#Uh9tR<2-A4JgB;vlcW{91sjZtB|_$PChZa`F_gVsZ$(f$;fHSg) z!dhO?0=4{m3_Y#KDyGwQRt}5iF!r+|M>bWR#Yv|H6@wn5OYv$9+U{;&6anX@Ua{u< zXwr5K`XUr-6Q;tlIR+9(v%B!-#xQ&{){p-pz$XFpDM)MWoR$GO)N->@@LqWk1rs&& zDw3nIV=(=Y?Bl0D`DBGiexr#BIZzHelx2$Xw14#XfM7L_`~n@NiWi7{s_~`Ahfpy< z!{%;O&aYr1<3R|8>=otz0*gR&zZrBOa`~t~dk{a^Df8*n!7WhMHRHrp~+t=IQSd)CMLV z)1X_4BLcNFuUB(?p4;5!_GTl{2u=wEh4u$Yx!m@ z#)~7YrWChnpcH%)lY4b?dRzuANA;VND7K)XYmpZkOb<*o#0GNGwq0J2W_gR zyE!QWPJ~JewG)g#ahaa!V6p?r2+5`mg5OiB~GVT973;G>xZnW)4 znZq&3eJ635x=fR9vj~C?@tnL&H-mOl2?#2vrhq0Mzi%>8l#k~;8_;a~W7A}|9OZB{ z8`o3@nvt5ia}#_g>%?o(#&G?Ho$p8Kl^vM2Y7IyIhML`MWwyLtW0{D?J@cGmNDCySGx7I@&32Z`RwIy*Kq50$2Ah$32#W?>N2d_$EH2s z>G8Fz&B67%&d{-dI>Xkx>=)4fldPG?$l)}C(Inv z^f;wCw`QG%*;I&=Md;8yf9)|&pPsk|d}wv%rpI#w+_C?L=G8O~r@19X|(nru@hel z!cM@e78C{JW232n;6&j`2_ZBfw+5%Crxp@tEl@LM-!E{+b5?tKu zI%d*rFQOXxEfz^>Kl9bZJ-h-d3MUE`6xzk;yY_-{@wEhn7ll)rS}AHRxJ0Of0|F)} zjEjJ0jBbG2qZ)U&Hl9j@Q!S7LbcnmQ7u~(LYrB|rL?S*fRumqM@+KZ%pd(1319}y& zF>%d;@9upIq*e#4o@%4o#|(qoII8A81r*|i#3VQ$HB7H9MVKIcMM>Q~OHMVpj|gQe~QnF|&NDWuCJ%cv{5M0yncv zC2VB1t&7vLwU`ecudUz^Q3Qz(o@yDVY-DipThcMYaLkpP;Q?J6SJeS~{4Bb~-yV~M z2w*MyaMojtA-FMUA3Y~gh|(A>7#HwPm{b;%WaN2HRTg;TNwbVF3EeqQSrc6}yY_YL z=c09!OCMQ<3y$Cdsuq-J5KZ3e5qzMoE3`@R-qTH;mw;+{RiN1@RRq5o#_Lh7q zo!hyAl?R+mSz62BRG9j8qGM&4NetR6y!9BJV0}SVT2ifNggt4zxT!naI$;VS1e(vA zp(i0U>uTc$8w2w*>?}mN(a(5`G84mTKQk7E1p;ovrmg~A>tAUYw0MQqf~{jKVTHoG zfH4WR^%#>N)pQe?%AjpZK*Nwjg8}XR6~T)qsDO19+9YU|QdJhC61=Y|oyDs_FVC42 zC4<3`ax!6D77P{!tgo$+X%ju+PDY*aR-}FArYQ$rLUV4-{gW9oD6?LDvnD%lMqVfS zG;43_r_C^U)exz6EwP(9K0`T{Vw*-IS?2kSW8Jrb}OyG!Kr zK@j@J;6sf^FeYbGLxMq!W_5L)Ja~rvg$VTClBEh?#|N+;mjs=3Y(hfIVLe_&)>XAk zGYDb>b#RTF9g~w1o#P#hM`P05AfZOPE-&pe*G&jCy^8pj}24JHR}4zD2sxUm`>zEWObq=q$Frm(3FLx-y1T} zia;IVHh5f7p~b}ND-}9`h;b3Mf%Ve#cL_6NgBqu#xvtXnAD1o-v<2?Su5?pmV8T?7 zR?P$;5sj@Xbdrz{3_(1Vt#M^RPxm6&tN5YX(^Zjq@z|JE6-#!R(zy0kw>bdu-uUj> z_6lqZOdb2$c>FD6?y3};!59)+_81y+Fg-pRNv+kYEgoeO@E&J9ndE4%BLl7*o-VV3 zz?9W@Prl4BNeLUGB1UWcq$YSvt_&tbi+3e12snq+hRS)o zGLXcD?wuzD!KkRa*S;c{2F%)MYFFppGT?SGwJgnd-T7iLQ8j{4WXkO#GrnCMA+jrF znvk50s+#u=3u!7VXJiW%0?N+>9%q7Gtri&F&4#-+ffdy}aH`{Qp>d~ZG%-PN4LHU8 z^JJK^T&!YJLnb|_6EdZk7|WrRRkkDpCPjr$6xm{qNJUjTY*mq&9DL(}pc`J|n#Js* zhAIm0g*pU+itI*(KvIE55FMe*SfQvY^gv^hlrR>w$_U;Q#C9&cQ_|e4826CiHw13G zklw65J(KR)>ACGSY&OJcVFBI5A18uykm&?La7B&en$lJnqZsrvs-lSAgCvMoBt9}X zt8KjZN^qhZeOyPl2mw#5E(>ZJ)Kz|Z9G#{tap)+tmA5`>%1uiJ6?Er+sQ`%!jmH!> zAEyFA1zdB9oTyF$08cOht7^)sCdH5^J<3Um&J<2LJh7F7)h$zKoI-`D2O0lH?NC9Le*&BuIqOq9b@hS ztDR^Tx(C!9r9}skF60q)TIk}n5@_cL8y}CWjpDZfAHh*uOEwr%tyvaBA4g!~EyJvb zTdCN(xQWBnDpfH7M1}}nDQ-%wnsUeUiqX=|2 zn=?uTwQhpB-Y~5i@G+Q=pYh^Cw;|CT2cQ(b&02~Abf>#U55yzl@!o+5iBTk8VXVSg zO&My^VTyHQf@*@lZGqa+StnfvlWd4V2}1CYn-p(Bsz4SZNb6pLSC9=7T;Va5qAW{7 zzozz<#l8mmEci+CaAa}`Kp=S zs2W|=NA{;0>7pf#G25n<6~Z(XEgTgX^fBNPv~678_`nBSu{2y@yk4>(1AhBw{xt{d zL;TKXeisSwf$QJTrDt8l=fD4D_B{O%qpCtMq~73cz-6idKpg{N;&Cc8*)P&$(`dB! zr~nR&^AJo*-dke#uJhRc{EHl3K19G^CnGkg9{>E-Ut%fW#{d2&|E^(g1|0&aHO+m9 zo`7zuTvc<x43AP*a|E85)LDM6GOzrr^azj0Gad^}S}jZy}!6B4J`nr&j&ThC_C-bYw- zYtsOEn>iHPq|sTqMw*d!8?!xxm_g%E7#rBRX&bxFcpE=>{1Fat1ed~EJ!Vrf;I}{i zuetZB`}mtjZwJw=uZ~$vhNvQ*Ol>ql;<2kXRwPjiY6(&F5T=3FAfBLH^jv*YR3~9J zv2jD|i8(;O!KS_D#>;Qu6xqQVYj_+A-SC5gmpR0jzV~(Z9ej}k)j_-jQk9^b!&QP- zio`|$k=P%Qq;WGn(`dI2(gCE=@n_mA600ySN(HqE&4b~h%-}UbOv%y+iH*$98q=la zb;3rQ$0u9-Y-fpNB212q z$QE;I>#!qBDoON?LP|h)j8z2%A)uXxV6Zw~lQa^#M*EIwVu_9HRfWj9MO>3{p-F6l zb{dfyk)|l34L}m*i>Q6;CV=NVNh<)}$JePQJ4IZ)j*0itvok5K4tQr#wc+fYyZGp( zAEmU8`yRg!lW1HJRFh7o8s_S{RCkZ|LgHfl!Kr}NP^*|_;|P?sC)YW<&wd*>U+|M0 zd3lB9myb}ZIOwAqRSfAP6IfYZLl!lIe1UScWI@t~j3|^+4e1C3)kr;Fqh0h6k$_cA zKt5=^ayV+Fk@=>4I&?DToI(E>O$8yTH6eBUUw`y(87C85@GRv+EvU?iqnqLS**1T`aP6)lx4xf;*hGg(QQPab`0{AwDd78 zC`p?KT~m993JDVlFwnT#p(ct%48~ddS&APyvLvOj2~{eT##4zS&oaiN5xrg?>OkLQ zRBHu^Q)EfTYB6SUxImapFnLPlErqYhlLYOAyvWcftnuhfQ4|yMJg2N3wf0e~tstND z$-Ke^O@(D*6}q3YHeRN`w7{scR2~!=p;kBqNm3qs=n3}x;NMX#MSZ`T)C}?kL^Rqf z7DGa@zD}NJgha7gj7fTiJ_bsU2^w)R-&S&st7{aBg*2l-(QKj5w()=+cEI74gUBX@ zTFCi7|Kq<$CmD8&Fs=#)k|I`Oalx(*JRSD9&1HK(n}Ge znN;ialAN^62~HscO<7Fnkznx@u8Ko2tin%XhKk8^ycQ;Y9D%+T2Chd~uSrsa(i-b6 zDl@Ft6}p!ot|S$WE*07ZvMgmZUT1MQq^N4B17w=g7igVeN@1XLs$w0Jrf8tDHEEV( zoMFK)(4&VLY5KND89ZVX!6q2Vuw_M-XRH@vRHhK)P~KzK9m6!I@->xsLY}hjYw9GS z_7+JqtPL0fo2!IPtC3lksiv+x|IhFL4qhqpyoV=Xi$JFPgxWGlGm6m|ou!N5u6Pd*tUSqDwSrxnux0B`KJt-|vnAUaSs$KfihX?kw$C%JR@pq< z$~kA8%dJ=4$~PYU2D^8k&uMIDoe|69HNNzvFSB*~CT_anMuzk-WZd`C!+iR$|B5QL zh!+OrTz&C7xbl*Bkdm;8CB}^T(l@@y1J68!-K25BGARnOG{akuMswug3U52}Tt0Er zM;J0BVSuHg970+KXKE|1R%xmzzci$`ZvDC z#MZ2b3D;eIEkAeO$N1LWU*-HO&LUGeIa_#a@-%nc|7{+8@?lIrB~b|pDXC-x7w}5B z?2>oz!FT*5|LHrwOZC#z^n&0g@UAPb;~nQ-%ociRgb@X|@A(#^Cm*D?CGUCH4P3SJ za&i`$WH85FPu|Pl-1T)NHEi9yjeq*?UnWCy>y_{4hAXe7py1O_eU2a8{{a8zul@gP;1~C)mk$gpw6jxckuux$D9Ese+>(*Zkx=Z{fOgui|U> z-_AvsU&10=@d!uC!`$}e&#@d})sI7-J|$1&f0PCI?qJV{s=RxaAgh3{JxW z3d5aW|85LqV#tz=sw&8A#zk+vfLpG*fguZ6QbyE#>w#}`-<~^3RAj!t{`0?1p9OCF z?rr?!J8z*!LP^d2&pgCezxj1;x%quuy7LlpGR9Q=e_#AVCTpHVsyN-b(){#?KF&Ei zcH*%pG>@!3$=AMn2m22lU^p0%qWNEc?zgz(@$V8A;L1}kC&6%tWxjd$cewwDd$3uC zIK{OWU&ZwoU(1jIf>2ViFFem5{_!7k#l=_hq02suA>pTP_-Q`GtyHY@r3e3p`|o&| zfAi1&7oI)x3d$5(PDf8S(80?&hAyAHbWG z3opEwo6f(5oIXGOfuG`|e25Vve)pTd&!KvSfBCcjlDi+dpU*vX8?~!RD#MkRyo2j6 zx{@5tkUndS`NFrq%AThmMHUUVs`=P0ALG(37xJmU{sZ3s{##gL6Bc-OWj~+)^5G_Z}`ddpB2a zy@u=x!ONGV!Pd$IspLQ+(s;@AAT-7dZEoA}&!zQ`cY2_wrU2HbG@^*nL#8NUDWBkb66 z3hz4QD&Bp?JNe7+{uNcINs<(;4Yu);LhaZ#*uqDD;#STYoXK|%+{<$Z4sh0%bGYHX z?*j~3f53P=L3H5yi?87yUHSnYD<0>o4}T9QhRZI#j1OP(e$u+)`;Xm)vI@1Ha>{Tg zKl{#~=k`5cL0iQ&mt4sQcHPMN*;~*%Q@;N2H^?OC$_uXMpMLP4@b5qKA2=|6iBubY z<>!By)6EVZIB+jd?t7e_J5T5G)30RP`%mYOKK;k6k5|~--^3y*KXKl>dCc$SZy)(O zYR&PHt8e9}uKE}+KKnBJ+(FJg`)uBS@y)DND}3$IJ2*UACL5+)eDOt8!SUELPjS!S zey%+4O1}2s*V%jIX)3kO!2<``v9J|`aQ>#VIb~@xe|ztjaGB@Gp=Ab(OZY73zQ-Tq z@R65T><@YSIT!HpOFqEL!NWX%@CEigxtBZgySec#@8RqBew!!Po}lWLymVxlEa|bx z5Ie3TFl*PeG3AG_#Qo?{<({P25-Pq_AiYxt$>e~$lZ|BP=wdna4BZDT;6oQzMt z{};LQ**n>P_(je=>pb4E`D)g#T;X%~ekOWR5@yn6!<(kf@tYc;0j#q)Vi|gp8?5!z zwkAytA;6vo9^_q@y_eIroJzH_#yc;%iX{g8;b;DU=U+ZRmKsb@YzafIyXaa@-LZog zo_i5fX%Z6lzW6Mk`{Hf5zU7fUk8#e&&gb%7SMaCz{#WjK@?Mrl%RKt{ll)H~{U5n( z*F}8q>AM*W`n>bvYe`7>lh6DqE9EM#2<&}gFaPFazrp+8c{BGNe2nEIE94?Lgv4m7 zqCzU+kp~~)`A7ERY+y{lI5=?cqx_3s{1;sC*4-Ssdl}|I^%d`+{e4pEH{~}{uQ2C05d_d&`-Ul+B@<)I6 z#~7=a6qW_kQ_t~RpZE>lw)3t0AD{WZd8t??wJE9ec+c+l zaOURISb6av=f34E-eOMU?#J%t_WQrWdcDT|dmf~|QF!;R8@O=SZti;YE)0e~eb&R6 zKmUu*vRocvlg~*j!^f}x1n2D7#ew}R46;5s3E#Z)UhaPA0rVin>YDo>{65(*XSG=6 z$!DMBiu11E@cJPhfA(=|wN5S>ZQahi&q}6V_?I3kE#M0nuU;{ z)=I8>>m_6!uDkFWMxnyn38@77T9aaV%NaX4bl@P>dVxXl!>4{om0DK9m_(&af@6Z` zt9$Nb+@Fwc$yv9tfMc^+U>Fh>bk26R@bEK_vR)KaS-|88hsMk7J@_0uw(TGlL!vc0 z(bUcnM3b3>TqmTZ;w{^Ea`sv0vibDWIAySvY&1awTQ_eb%lp`Bl~G+%V7dR9hjE(| zme-H4so&#?=bq-u(=KD{_ATfY&Da){I3C>l7|VK0(X$kF;GQS;@WHp=%=zc+=9~NO zA!q?HG0B=)xlR$_frs`$FCj?`p%R|myO%RAIE5sO zafhm?0q#xH001BWNkltr?QC!M(eBGbmfh#`7z1}n+6Ni%d70%yo01m^%4Zbqlcbib+KZ(E|`=h%dGO^ zk^Q_dItW8exl*&fx<-oP%%vSX^0ehGJ5B`xd-w0-h@YSqQ|xNZ_r7;0H|)Be%g(=u z?>&AO6S34N?tSnfR_g+r3x|)aa(KLg!?As7D`uZ(a^wgG&kgT>C%vTwp4z{Ur(bvm zt1a{uRxGL~R1}n^AoLv$OKAg}Ht#?IFV!!x_oZjB14|(lwH5qi%w@YS;oMWtlU`Ni94UXm$hn4 zm3lHW^9h*ATqT$GBjl^jrXcp21axn}{ zMo!Mk@)|XsQY@vdF|NnqgGbo4?QB$2nmw9~$nzXq+n66*JKlBGySe538!4!HZghwT zAKt^3N;u`R9pq_FSyUL}d0Q;2>#H2(2>D{4x^S#d#t4c;8$xJn6%}J!Q7cDC!8yl~ zwN+|7n>TI4HB)jN4i{XL$`{Df6iZE6m569kNpW~4wxm>+QBjfg6V{6nDoM#qkJA=+ z^6T&WBtqb2x6a;u`$)$Ql_V?-Pa)5GID}#{Mxm&^rIZ?r~alUVSO8p@(z z6GILahY5*Lh{cIxR1}zCFlb!u>Gk?lMTNs5nPKcJ*2|J5J)|g00-iKaIZ__Ms1&0# zgQW$^QAtr1pcE4-4ll1@O<=tolOs*0geUJM6y=1?Tejc{Y+c&Uxtle%?^#(tOfO3) z>WXLFb5xl}S&R3UiZN^TDwBLdwvaPg8RG~XDc0~gjOr1mF79A`eI0|sO)7?2PSO-_ zkBTt`6;)NUZE*{uLt|15nHWTS$Y4yxx-F1gQHGMmEjjCq0Yz;qf~|P+sUPx}gTLas zcU;F+mt4iWFS(Hk6Yk!3H-Gt!&$5^e8^RM16F9QIj2XtUcjIzGLB+~s4Qm{$ZXGj7 z7=)Cw&fLW(-}Uo2Y7UH_W#9h&s8!g!c^k&0hzOIq#085&FsWv;Hm1%iycY)f087ne zypEDUo@9VfO)8wXxL_&Df}}PadU=Iio6kfMr;Pia^Z# zkhY4eYd6_+t?crl=K%f212h6pZ`5r%s6uJ2n&N8r3==p5iAY}S{NrK1rtVQjnI!B{;Fa`mU%KP!HpS@CiMC} z>`Kh-RgzGb72ZbHIoz~`kQlrQXy@qXDW~l`jSA1|+8Sz`Vle0-Kv~piNztj{((^B4 zl{J3%_kNE$F-Yk+D_!Ku%dRF*GmI!q5K^xgpxKcxQAwb1F+e%&FT`upwAyoZKu}~V zBSGWJnxW)u&KDRkWbcuEO}~qn7c1VyG%N!3>Kc6vOZ@>aT2HlF&?84@2{wh0rL6gq z{!&g=)C5~|_St8XlJn^=f0{k}pCrpNhL!NKQ+Ke1lu21qg%Q2QAwt5asPMU_G&Lbr z<4`M zzQ3d#6qsBnT}6e*ilfqFw(2GDB|UoN%3+nmjn>%IKLsC!IdrD5WzAZ#PH%D0bSVU9 zYn-i61p2*{uwuak){1pD=Zi5PA$Yu-Q2P-9u!-l$+RK=2hP85y^<*;zmQvLuy%?MM z<`3`Uo~IwCuNOIc`!3#l+4a2l%y;qfB`$Z{s{~NF1z>=isdyH^8qR-TnWSeCTa_H z2qc4?k`kQ=!CP>#&_HxxopthlhDi*itspjI!{hO_=g^_U93lo~hV;nCDch3Gq>`|> zw8#t93z$5?TaPU*lTkr0>yu?URXt%q#`^jysa43tk(03dtrw8d0~;tO1!5H5dvX$P zxaeB+N`OO-CBMLh=UhaAW#7v$fGB!Nj|9yX7hJ}m9?%n=rTbH%|Q3@rA2~;U}Jw91y4QqG)u`Q&e(ni z!!SgzD6%T$?Qh?W;CSZQCn@U!l^8sb^?RV8D8~3uH(gI?N}h$Xn2;u#G&ckTUI+HQ z@EjJ$uAOJIC_{Qx%A)kS?7R!fNiarZz2mt9`#H=J&VR=R43`$Vo-lP~K_z5^1@y2- z;cK)8s4yY6Gfj2MWITzv%UUrRPZ$n{I0;PZGWt5HrWDKm7}6)3BrJp> z@4otaJdXPwxfiX4G%*A`wJ%v%?Bi?&0wzhQsOc{Z7>&kw2mNeFHLu_)utiP4)9VjeT^&JpG7=EKIk*53l5EzaRdgvA?d`>uX56mkmv-1W_e{9tAr!vnCHVwoPX|a7Q>MK zC}mr+L`K4v#m&4_y@bvU)>}eoCTAD%p{h#yS8Z~7iLh4x*eeVX#!;7jrV?>q0EtWrP{*tUHOZ+pvm z3>osY-_K{idmAJL6KlEsp*z`i#)bUcl3R;x88 z>l0EkWCV*0P}KO+L7Gyd8P@^nXAmkz^$3Nf@?#_e3a#^W*D7II#w_j1MXQf|HWCSE*zkR97k<=Ts` zVMNIw8KPB8E3Az}qq%PPHPlY?!l8qlvvU_0ZoQEEN8jhM<-LefNa@K4oV9cspM38p zdE}{w*|vEzS6y-qhd9JNPu_>h6yA9(B~C1mVN5K5@mT5*s1jk%p(psx^LKLn=~uGl z#sQB#^E9Js%-L6;#mlQN^R0WnL$SO*smiXI{_tZvW*R zZjvaHqIQYeNbRz$&9Yo?@|xIn>%{0_n#6896QC`S7MaOR(GLR*W-vjfK-)|w%`)RS zUg9NQWXYB-*|JP)qa>0NB}$@5iaQU_`7iJCtn=YLlaR zIDhkn{Kmb%&I3o#vgplGcnGX;~b;oC1f$osba zEq>!;|1~?GdK~L(gi>67#dd0A`GW`l0D(nm2*F`QA6afX&p03TkBbz^f+0DDE^@lq zV*q^e*a~(Zeu>wvKg@NTt|NO#!Jg;$a`C3ixaE=?IK(ULe&e~GMrUP@k4llY?kL73 z(h77dF=%Y-D6%0p?YM#M7hKE!J^QKamSHhu`(@VP$2Ax4AP+;l zYB_xPbynOm+3KpH44RP{Q@1NDd&lAFNv<7j;aBhbIQw3Ck@aiWbIaAY_Ppw-NHHNZ z!K9heVYzABEv&89FcC9$oqU1X);I#H%!yLbM#~TOJjMsEc`yIq!=K^FC!VI2k-Kky z2OTpW+WA2L;86uafI?wYq6_`1s*#4+bqp!qM9nJt1f~kBJaUL$3HKzH535hT~Oan$1`z9CzP#7ZHi0rK9D@ z=_5RTtO$}1N@)g{A1p8_1n1V>T9`%%K^naI$l3@lzB75OABK` zi^U9bnzke9NS5WyWlcvQuPV+=j-zu$Rh3Mca7LUVTVFACGk&~pC(;P+z4|`xzy19* zI1X`u$DVzN-G}y)q$0Y2Hj>tN=n%>Coa4)<`1TLJOLgOb8@As>OUsOwfA{r2PfbiBCqBLDsye}o!o(!3{$MJ!J|^ApawbQABp z`$H%q`)9B4rSE)=TFsfZD-2DE2fAURjus^(HuH3}48{fR@j11GuRs1Rnr$n*{p#D; zv|$Sx!!i>NpE`n1foEUb&B9=jTQ9zucinX_3d#4L{XQyF+_LR9T;^D6SJ=321K-*E zFgIUyGw;0l9$F&beeDr;EuUeDY0vQ10+}gZIQ}x9d-RLk_V%~&&KvG!k&=cf5AJ)2 zhn{#C7Btp7>dZ06GxrUHVMP-fd~lfcC376sN1TnUT^O-4J40TTEG?a3SS?^h$2WfP z4Z2$zuG)45JGhRTny)_cRX%d}{pd9XE4!y;qmmyy^8-$uI>G&SzMng9yn`G?AhOg> z*}eC9NZ<`D=_zZ(m}ys242MYNna!tI0&VUoMkS}}Wt4Q3>kDSg=uAh@5gR@K{!4$% z2ky9^9b2yD+IL<}M6v7Wvpn?7*E!WKk+eh=nkANyLqRdjnAtg%EOE)<@%St-ZKoVP zew14;znOR4cwZl%#$mC1?(r}1@*A%r29noKAK;P0k8;Q6d%0}=6*yYH8o$h>Tj2!9 zXiW=+psD8!7Kg|YeEyqXX7T+Sxa@+9x#WT^OqsEB*W+BX<2qVe25X0$Sb3FK55LO( z%U|J=O&4?VrmX}bhaWr1@oW}aOTSD`X}RWmmYfAZw#_|dCBrqh-v!++EVKg+f4qs;x;+p7NX&BEE`a``6U zgtQvzT!pr%l+blYDNCTj`GCqICYN-!B`Ii=C(8_WI-|%dbU9)+pCCm|W)vZ4a$Vuu zgiW3{a|k0zHlYwiZyA;a(OG0vpse#Kl(MEIJBEuSwiwXkY7Mh4mWT# zoki3+N*dGvlJkswLFybqS=7KV@f|S;HWcfbPiDv>;iD&dKx&d!J=8u)23d|IGMO$j zS{yK$&&Z0BASHEjMDJOYIiayEF07??mTBxj2!^7dt!t7AWK~Yv^h7&RD6pQY6X*br zgeWsQBWOEEiAD*5jh3h)vXFi2p@u;*#wS2Wy10Tepk+?mT8gshW8N!{GRui3(%Ke@ zL`wy+j~M3*6-!IYl%k@_DrU0@P+1tWY&FqF*v6iY)j z8Zeu-Xl=-~q;2L1CCSJrT~9XjW>wJ8_JdoQ8yZ?tl?W~{asy0K1lbRT8(_G z-o(lFzSN#DC|27}GX4K=alBP@pM_w(#U$^GPT4b7oZ#-u-_Eb>_&bbjwR$5>2n=o0 zy@hgJO|zzy`hb$w{mU;p3HYWFWc3S|t9!U0Ed45WlLTuFr<;bVD6pLe zX>q0g^P|*2$D4Yf!tZNj5r*1 zYLK}>rkqd*l8@-DpX6KRNx48JgX;ptC}+~nNJbD#K~msb4>n>{M5&&PCIR7ldS1{H zmm)Fu=t{EUR!AmMlnUQP434(-jL4B%F{2?aNL(37#?v+(F*vGWiES(~1RB>+)6!** ziI^eA8LjmcS;l;2%HnXyWVVdR4EeeNwhN@tB1K{)*5rjk5t&TSpce+XBskG7k&kkM z?5LYLini%cxkhE0GxY@LTJ%sd%R4NQCeFz6lHmI`$8tBv3I~rwCl}5NoCJn811E`ra6U?B*ia@6v*`Q<|TWsO`1Jd@u{SXt@#s-4e6{SbsFsZ{-wDFy}e=^P{!;{lzsSmzO<-$szC=ROMwnJQ2yy4I3{Wncyb z-z&R>7X1x}UW#C(WFQxauIEL|Ofc;la+47YNm34hMum(xhY-P3dEX{TJxW%gY3Hu5 z(tSe|iNRpVY+CnHhoDfZ-*c8yfeDIis7ysS?WoETO+ClRuu3QIhl3{cL_4c^bGzf`p2GiM zW%GY2TO4QkQb`1Y?E6AJ^Y$&*uY@;QyJsEg-x0mXsMajb2<^Q3dnoYMX-)6GbpWzfgZ>%1x8AYfMhKx zda6Om>7^w)>seg0p4q&``@ncmVP|tnp~!WPvmPNN*7g;DrWM{cWJVH+)J=nJ8%nJh zni7r1heX|Vxai3$!>Of{L;^yBcaFvJ0x}6!mX^tMzYmT~6jg@Of@VHvP?it^Z8OJq z9o~Bqfjl=9rXYIICSx+2LW+o#aL!RwdH=xHktjSWQ*_ZIiyT$ubTJTpV!k}L^J;;5vtQo{$o)wbZj2N(zcRqq7~wr~)JL($mEj7dniV z6b303^R_`~g*G{D=a5DtOy3_z_1AarJSfn)0U_x+i<0z=aGmfX z;(VZOI+6sDOHwXrLVrUdX@rpY;OT6?og+lVd5bPHx)=yakQXKMdbX-iJ6j5#{oczr zrLuoj-23MXVt;n8Ed8f4ga7ATLHCNN*y96{Z(5K=l5gs!&U)@t>`{kj_j9G}w>uON z`c7mIgm)g-T09L!nG>3pyvpg6B-nrv{rmC`q6__%PW0^(=K@(?qNN0(a4urVnM@nZ zhDB;OBX}6)112Y1hM6H-$eGqNs(eg6X%R}YW;9|lTcIclnzkm_hPZnix*5`F%1k3d1ZOFXrdy4z2kQ_j(T0{{UB*hi!ecKy#=6mvm39S_m4wdq zKQme~_Z{Q{r{+wXnm2xQltN{+sbR2C_P+!v;6or~kyI#%iLRcLaCANpNL0fLCj%}f zYAiw}@?3+~OlCF1VM#roB1NJ!1`!guQY0;?>nT~46M#uOLzfv+dfKL@kP0mn^La~A zR?KHB42C5t%b3hoSQz9q-JB2&)vzQJ5!X3d8_-!!UKLo|5mF!s7;G4mq(r2iAu^jZ z2qCD-5vxvVkWh!VPZz5G!K9FsWlj(h8#`p|32@Fu%B&!&NIuX6SCf1qN{y6;lv;dn z_$1M$!aE2)u2!dttg0|c5PiUPfn+2xc~sOWp@~tUv|?f1kk&SYI$@B=(BDcr(IGNL zp#@DlMP)fbfNkfLxkj7B%H#}LR-vLI6AGCkBFlRSzqfd6doePiZ$%)E=iZOi@tkAzeGi`#@0{ zk_b3!QA#3J#>6_5F?bRLi!LRe074PzE$Tr4BCf_$6lWRX{~@b(Nr*Q?hd8B9f#HmXr%pDG4TFO2hJG1))~&chO^v zV%jxyc(P2A8A%9%GA{|8CA4oGC%VuP zVq!L{Ng`AN=k&2G;Iqit(v_B zS&?C#rR!QUqfknci0Is4y@d$5$!XiRH-v#4d@;t}I zh|E;qZb`O(pHd*D#92#Wa>~4*Zs(YyudiZ^JzjNHHx^?g(-}tTpOP9&a#N6D@N-A# zBHnuD%?wj&0G>c$zajw_12I8S4u}D)b>yX{3k@-PN|Td0O`JsBEU;LuLHNE^(KVJl z&&ji*_k=2q_Z}%EDMSc~Os_fymBf1A4;XVph>DJEV|k z49WI``CRob(zu$IRat*i607pfF4$f z646?mpMy^1W=wPiU=T{ug>F?hACbz?`G7PUn=EbUkVc_oPG}4|4$(62TQ@dQM2&KS zT;*6H=z9M$vFn+;A|+57>l2yK;361xNPNNy!#Sz^3K1w-mUd&3$vLe+^pX;hLZVekQh)^w{= za)f~($%H{8u=5TTHRItL=8Z#|yifiqMborY!yzsyk}ip|#QO{pN(co?4~ZCT=ndO~ z2+{Qt-WbtIGtd>%21FZJWK2;P6m7vs42YdYi~eU$OG8S5m>g~BP(}Z65lNH964@HE zu0q=qiRtMLQi9Z27tkh03PW72DrE}9&>>Ys#DEB%LJ5rM1-pVkl^KK&2=B-Q2=6f{ zlGkWe^%fD^!MJ3uB5ia?rBJ3K`3#ft{-NO&whM$55k}x~BpE2i8CG;yIz$F8_519} z^s^9^Nv!L7D~ph1s&5yVtiXndTXke6p@~7^n#3RDqu61(_ORn|{79DoSK)$y^}w zfh+|?>Mcad8%$R)4r9u$K)K#hUuZ#SXH-Uj>%e=A(LK4aR2Vw6uPKa#6p$(sVz)Z~ zQe-;AT1RFwymP%UL5QEb|IAON#{atisNepb|NejMMWy0RD{lXkkeu~;omIb|wc$GD zdG5$=4xKsNujTzmex_%6&ckZNtg%R;7#2BKUUE6VdiSR|?apv=dWzb%6sAB5h&Zxg zjuVl2Ge=6uO2f%Br&+sx9V#iDOQ@p18bu$m)-xOp>DmTTpFUDr5q+Z26-H&OOwN#t zjDPZpf6DFKZ|8^4K8lqVkt@82nieFAG9yOUZ)PY>@S*Rc zD?wIhlV+QDd&V>}sad6=VY6Mq-R~zM~ivC}Rk#gHrDtQ`%ka~-ZHoc|Ar-;dNZ08sahO8_vQxqA4 zs_0jyR%Q%`1DyAy1X3%af|>2mc|i;T5dvjaBFPBW6N2sI+PVi!b*>@HG+IieP)uhX zYsc%5U0{8&mQQ`;@A0l1-pxC9+`~CnY~aOL_tH6wkU7>_vQiLJKq^U$ATeYjLwdM; z%N2b3{r?CG$!n)yLzskb9YleU2Io9dL1qjh35?0w)}e$=r1$CD5vmBD=1CNGqZ6&JknkTLeT>OyoMp zb{*5%glbfh1X$Z4L_!;d^%j#Gnzls?g+}q|kN*bSuH428FTX(DHk6~P=dh%HZX;0? zB3s?aksu@@C`yKG$j;&KeB_h7ZTs7}>zX^c@Igl5iYSW(xGgo4yp^uF``Ep_!Kl2Srz-EW+D z|1*cQ_^F`yUoN}F|Es)yO9gh}x(m4OylcsW`6=aAKQw;x|Nr#I5&exxO8Ei%*hVX_P-B6?W#)v2|}QnB1lS!rhs*Dn&Zp^cK^+6|mqo@1?~=^{=@ z&a`uEAxHzwysh7ydS|*I&0r`N2yM>1hS8ceXj9;WLQrCbq|0F@EKz}ca&0-q9e~0^>j+TGC?`0OpeHbfncSr5m`XjJa%QtB^}Hs)fsm1=p3&L{%8aSCv`s*hv1a``jvhOXbeh|*e>W_Ip*k}v(} zEBs{VQ*?8O5DE%~GpVN?20>>%#uzfC2%RMc!LVAuU~topvMk4_ z4DUdRK15xX1@lltDX4}8_{i9dpiYP;uuu*eR70HeC=y2YLpc`%s_2a-h0%x@(HJ^B z21#r^MLA$zcZ4odD1&nyTEToWWzBGb;1VfGYyhPTZolC!Hk(a6`}#9{b z30WzWP_P_Wqemp?NG`EZtz~|yrO*|2?oe8Co;e>?!$M|Q_BBbvte$hucn#@HOCd^< zj4(?q=mqA>j zp7m;xupBw3+JN_-F!z+&(41;nSFEKRmCVje2_n)^BZnEi?^=_^j6!IX^R%{QoDZ;P zJh{$6M{Mjkec}`w%qF^7WHcVrbPZ*a6xv{C{bXNcIeuap#tMUCF^v(ENM2;jPS21< zWFa4*MNVuzS%}zEE$c=L*w!P9aqr0s894<-Dp^;oVLG3#66O?N`{Fk!t)k2-TDL;3 zGfbx`FgPrt78K54OxCw`29jBt_v~dkfC&s_iC+l}M21!wwQE?jFs7?##1v2hq*5e7 zA1p#r2t%P1DGF>C$zsKj4BrN3zGlP18rJ(UTi0$O5&6-hk77$pBj=1qBWhuphYq12 z)SgO}E6~zFofwc)CCxx;lrBhhwWiRcs}N`}RN zc~@hUA~wA)%Mnql?HCayO7^Xe6rdW92tFVqj8w_M7PO}u&RaN-`AQ8sv94H4G7)br z-UrsL*+3f|eiA55NvR^T>6KTV@&pp~tf9&)+)~S8HNvjUQ87cgoY=ug43RcqgGDMy zNU?`DWxC(_Slxz-DgM-Mhxj?K|Bc>*j)Y*zR)0!m@Yvamd#}HPk6-mMzP|H89)0CW zQVsv&Q~w+pBHw@Nd)#x&JFr9|l5hX`AzpfUKkvEcy=*`48VU?2-AR7`+ke2(?gWE; z%%C&;i%uM$_?{24 zWxNrIr={cN0|)s2kAKKF&vW5X3&y&ZW=S$!H8g68WA(72XEY8I7x9^o{yG_k`!0Sb_g#E9 z8u-?(huF1mAHV#|pJ1I@!~g!rzlX_lQWvLF+xy^c1?qP*Bb! z_uYCYw_bKL9RWkek=bFs{_r>1KR--n694#@{}Ckx2E+gGnct$J=4-pZ#`Alh$F((b ztfOLPyT|v`*tIi8-DBWe};{6Gyl_{{Vo%2nXb&(pi4$7=O3@y(tr0)f0u2SUe2d~ z=`%dE>$`k+?{~ww{kOb>w_o}; za)uOC9ON(${P-cB+rO8}R3Kds(aNiy9kROBA%!B#3rubJ^-uj8g22E1lYfl_uHSks zAG`j;?A-NZ&bfFao5mX%GT=mag3o{V3+y@k65|bv{PwT@Gd6J^2F1Vp zZT$1k{tlrG$e~2cJpb*7e~t4-=kPy&{(m7?0v(6E>+buwZR0i^HIBrTnx~KL;^FUq zj}#I*GawW5rtUX>#9v;9KARC2f9=)vFSZBW(^^qdmA$ln&dr-|V6=Y3 zzQZqb=EMpEJK%!zw({NG5A*1rAM*6U=XmwCS5YKx-f<%*kDubX7oO*}BL_hUZrHqo zg@q9Zjvb_#x14%oi5o82!R{lwdGyIg*!%ik4jwv8-E>^F?P^AP#1qdy!L(W7{B;}o z_4_}~+F~7#?R$(D4(y{+LvGx9BWurH?`AfgdjV%A%RK({PA0Pn zS8lw5^EaK#zI}V~+B5fEZ-f?-lxYlxY?AoMz3=Dk7v0M41H0Mt;$Bu}6Rth~8g97a zMxH;ko7u{Yda35z4d(_Dp zMc1=3J;Uh}M+vQG`_>&S&n6t4A0aOddg{6U((PQo>3V+n)MG3+XBe6RZ@cL296WlE z1E*ghSj&Ce@8zSneS{za4?p%W&+L7g)AkhWE?8jCi+hna<9&C$m)kD7k>f{>@xq>$ z+4aJ+TyW6^T)pKQPOmJnyu3`(385uKiF2MHA}DBWi%A)k8*tZ-yYN_c?Rf@7V#~Ts z+_LdT&fld-Kicy+FCN@SS(Lo(qFV^Ljvu_Cr_Rt#K3GmLkK}pWW?BSg@{%Dym+f={PXiI|A~9hzgSpOlE{={>qs#iQP&Og z&J(5X$zx^4N@~c*B~xk^RmH#h%D>^{>@>+sj?7N*t9Skiiwk4^)#rW>mugHGXx1)q z{l&L1&MW97qUpb_4K@Gnfj{JwTcMIU&mMk`fA-OT!tGby#NnNhLx#|>P3$wlmb;aSSXk_O9Dr=R6pKmInUsWH1H zzxDTji^autd~NT8JofYtFsWnT$-VsA2R_41+pcHtvE85}cipfZnDT#o?q3tMz{HB( zFTKR@!;9Rt?JgdD>N|{!A&c1%X!!B&hj?u7PFzepyMMriTQ1M<*YTsl zV}!=BMlB%G>_4=RKY8f0pAn)luFer~${ZG7v&2iSY~Rc^iGE;1YkP8?>I%?QK96h};+ zh#<=(mvg_4ncfL0Vkh4j^7`dHyu}vF6E9b_p<-Q zUcT`4&*Sq*o)_%;quu=GfAyQ(b>kiEf9+*vArMr8)>4%v)>sC&9MRE;$UVniP-}E6)>lGe9_6)vo=mhV% z`8_BEUwH5f>_4?18$5eo*v+qe;*;EY`5o-tznjyiPoZ^=mYOD7y37&{7?IJOi-o7?%Um)fKs3uR|vHlCR=TJ{M8NGzu`d@ zgy`d=MM2kf7-bO2BUMI6Bnr^E?gI-%Cd_$beiWbgfs)g+(+J?j7hhl!rueL5Xf&t0 zGk823*PX}8%4_JnSKaSF^cwRp#pagUHt481|9=Gei*c^t}}H>|sa&F63CwSy;6%FwnB zljV%_0nN&cD=ytmNx{yaJju*;WThsG#7hTWQQ_MOzn&XGsFr<8yz7e z$P_j>a*<<%rfym;+jcn~&&!8jVL8mvg=EdRVE4-}ut&iXY=(ep#f ztRgwMVCz;YM*QT}Cpp=kp;%XNVCfLUwG|yT9JF?Y{pcE25_468sKnhKsl_Uh7#0v*rW+G-V5DZPpk)`A8 z*mNBWg9TnceVjo#U}~onWkDFiEOb;(vuR-yH8rmueT9jhlT{hhlGzqq6M2UQ={veWJmOy7Y4E(C!fpiz!mw>;G4C}qyoTb8f%jn}_GUwZGg$||IeXkEE_ ztMFVA143v-z{G$ihV&sJ?aoeiviEA9W_F{wFUFkndDhxH!RCMj$G1|Iwby#uF~|Ik zU;F*0ymE4v+$yHFMdvA1+hUBv>u>>-Oh{}>wJ6E+P*9vOK?%X-$1Y{gf(tT*bx`=6 zN83j^UG0L_n8qVXz;sFtDU{^`Pj*yCTjvPf$uvMJL8*|HC zl%z)|SSN58zReRfz9q{?G~Q9;IK9}#jle69u{Ll@ldx!O(llXSF3@OF3baW`rH9tD zF4y^$5B)L)IVU*D3)`>o%67?GaUn;JZX&e8YKJH!4GpPMn6eIRWWr-xNM+GU4mrG& zWF(=JLu;IORCR?;53@U+V(A7SybDD?JPR|YRV^|TP*&txVi7d0CzlhN)**zYbqjEk zLS^JSCqa`}2@?vY?HrXT7WEu~XF`FRdB&rJajFS2qzzIEoCWO_6QK|Wgfrx+WLzY8 zY8Jb@=p=AOcrPfcs%tP3IP1x>6pdqJz2HX8ogxbOHs zaNQMG^44Sj6SKz_+<5bkB2YZ?!~?jr##={Y8Z;Vj92q$yJ;9=Q@#WKO=uKwR8R>e? z+?Jtd*a}8Tg2Zy+p$i#r6r5L_OGCq$F{hf-yx?kV=17%hQ7y>wJQy;maaHJ7pCn@{ zUs2N{P-vUbR37CMJf70dK(%B=!D6pOctuXaSd39Br)n*Q&dJftcBhQbo8X$3gn~VG zn8^ipqS>hy93G7*>lqTq=46xRq{5(4+CpNP)pL}DR0@=LIP0kKOz~{f&>E0dg}pUz zXeik_ypB#auCnC7sFBDvaL<_5An=UxjGbzVQkuezSaYKwiAErD`pmcfnyOfE?IkyG z<<=EsZ^}6BPx1f$)t~Xw{3MA^u!*B~4I~0*U6=md&(80^Pg;im?vhtkTL;;wvIQ&H zTHinkMMZ;36yFy|0k#o z&2&-Wm7YV0Ujyi$QupCQ}xeK$0kPyb%~} zgCMGcxtnvLJcp(#@u}g+#v$g4ys6KL`zMD^$n?(p+{G0oDHunlQfVz zRdbALn5<1$%xgxY5xaYPSUhXR8n!l!&JCY&QcM8PqMfl;jM$s*Qq~JLl6AZag&ZXW ztuY8C5H1jLN#WVuJxy}X8%d>NeZ0o0z0+6(8^r`mgKsRRHbG4W&%+OXi!c4dH_#ge ztte^g1=1-fD*Sz6c{!#oRH{b9UcG%&mqsAKPG>tK+Tw zjA6XKfoddMqs>lBN8lvvmb-lU?l1G%&)>-#j=qr}Ir>I!`O#ar{bz3H|NQg+i``}q zQgFi2wiYde;8~b>-p}jb|NOnQ)&K6J-l8K-@qkV>i?YPY5DM46CP@>@x}=pYR$AtZ z1*SE@csC0ihUt6y7yO`o6h*V-+ z%jTgCq*Cn8rqt44aGfx$Knp=#&Vd#URPzOkKK<%@Rl2IWYkFX zp5e%7ol7sekd~SgyD!qHmRdA;96~sf#*rBj_!P1Pi(}p_XiQB}WE6SEVll@%$8`eEu@1#3rvw%UDyXx#j=uJ( zXPyBB?|j=WEKcunWW0$k4cA`sM#f}}(}MME!ZY7~8js_KYp*BODbv%tWH2}EUStKeu@9}LxabB$J5M6Qs9LXS0J zzA$)%UJ_DY7#hH{b9!W>mbicaqZ2DD6C44+m5dUrN$^f>WWtK2I`I1Xo{lj15x6wB}Gg z=BDdzV2?RZzjT~*oKyN1nHJ0llZ&YcV!aa0wO3xtdOAkcu%1ph_nh<4B&0Gywu0Pe zWIkwtzkKQy{_Y!h@x&`n;&ALOrleVhR0<&#Nsho9u-?UzVUyyv~|;@86{Q=>^AMJju(??qR$`pqMumMq3_#_S>Ak`V_al z<^9MF%g){oH(q`dS8rX({VzYjQ!hPDRg|bnLQM_YlS@t68kE+QrVG0>Ow!}Jv z)(VHfTR1h};jU-C$#s|B$j^WHKl9MD51>-byDobVyX^7McOGW$N>X&V4tQE&G2Wtt zz;!&w-UkKv)>^*v+%vrL=3Q>O@=cu5Q}*_Dxb|I_bL_}58fs?qJ<75qD>U~!buYJE zb_@UYfBR+b{nowI??u5I*XHzq9`b5 zI}u#(9Zg#!ir~}j%y!VZrmkwf{`X(!>i_g3 z{I4IpojdRSD%1I#xBlpx*y0dheg13gwtLvjAO%5!%_d|%#Y@HM(|eq|bq>wRDQ#7g z09T*$27c}XKgpBNKS`nz-h1u4nNsqtCm*4vCC_tSW{NEoS}K~l;XB8lW_sg-AA8$7 zQDcGE8Mj>ZPE1gu3qHt2xriAOI;HD1mdH z(I}^K6)lFTol)Bgr!6{35xHc>g4(yFX^NH#hvSjQ9-%o>bL+LYA}M%@SGeQrpXQnE z=V-?*&Iyo$iW;LVUU{rCeC(5d$ooF*_-c@WI2x=f1Hnh@&D$nKlY=%Dc@(g?&#H= zf8`bm#R*>Fb6>cV=Z-(ixknB&o6p#FQ!+WC@hwg{M8}wDyDGnz0-*$_=DU3SGk?ZU zy!U;)`|`JAF`QzX&pq@NK6veIr0XeYM`Q;evu{4lEpL7&@4Vq1C@eJ#PH~!V z{nG>NPWQ+sV-PT_<~%xooU6u{^E}6S`lY84qc9emG|6uD+?CPSnyc=B#XABvMryx>+|fE+x*ydZ|7ZadKU`KoR(AU^3Wp>AtdBk zh8CJ?UQwhu)x2bLZ3A0b_V)JJ$k)+GDi#>s1}abu6%}%%0!M~(q@x6K8RVq2Lnwik znz>srBc+%W%zcGPTV7hc$e(`cPr3CSKhFE#{2n}l9k%)FZ-0TW{?pf(i}`RsHpbz* zDM=|3Cixm|9ptL=G)LmO`~JH)_lhH2`{vv5z%%YSKK1!K+4B{(Z!nd?qnJ|Cwhd{P z^6e8(@cDnbllR>8W`63r5AZTGo;dLYugG;SIqy;&Ek#!F{PAab^JO<7NCAbx@MQBH zKJ&#pShOV~3+XUr6ywnZQ=86%7H6d-{a)MYe^<#X0HriS3Kq=*46La&s9|Gco$cMz zBoj?jHjK@L*0;>^P-XRV&qR(93&&)0!pZg(jC7S=NDED4 zO3Hf9`qqTT8)|E@4l>oTtVzdC^$Ic%G>`SPVPta>owC#JqNS#2613KoX&{jw>4Zci zv~^Ip5RO3WC<&b_jbd8Ov4^0M7Vk8amQ9u6nhKG5yizPmiINFXfLs?N0E_9 zjkYzj*_3oVAt6OigVOhOyufCH%oV6sh3P&eNi&$&Ge&D8cIH!xjR{R_sb@8lWW<^* zs23GZSSSPw)i7^MHrCd$GsDPa7}sJpU~e|%NV-MZCS*RLZfb1OJ%p8eJP*!7{C0#FA_>#F_Fy0zb zRg1uNO@cxroW^+(iqdt%8VNVQ@diG8^MB?qzW5hBa^ewon!TXLo@&}Gp%Mm>wMZ-2 zaEEBCibm~)!eL!ds1#T2U~NNEtl_Mr5E->=m}MnW3PzQto>in9V-|HqrZZHcXndyw zDOyyfXl)x<7ljV}&t47;NxsuH48kJvhgb3n!VG+48dRnbGNe4LG@PEFqE#(T-H_^p zMY}*~L7JsBt|iSgtaXTyWV@YV706WMqyVAWs}^XjNb;1Ksc5id=Z={@R#PiWkqM@Y zDI)VA9JA>j9XIYpkLHWb^{HdcXm zA}CI1XcI@0r))2F(0K+zGF!|!JQ=fSD(3Y9nI_cUhVkvDrnWVsje`eD?N+2`MqH4i5LHbJsB^HOpiWVgr zgjA?4MJ?vEI2!BO++1fqo0H^VMT?gjy*a@c%U-iUXeic3K?`srqjgZ57KfwNZQw8w zU<`tuCgpeb;Y#WuUX`CS+=a7a1tq~3>BnZJP^Hb#G43R3Dsw5xhh}7}& z_9>Dy!y{3NVy~Vd1*~nYF>Mzlxn^%Zqgcy=+WcaQkcv7pG|nM}##EM~O)-@q$%;TN z+;L@V1kOqD4wY(3TI@)&>ng;0h7yhz%R;nx4JjV1W!CJXlt7IXi?+n4AQFcX4n@#| ztX)kbYD6LMsbyYPWW@%>c*4vqK!d@sXcp*9V`U&wv(C{rfeIJbb#RFNp7VbQE)EFF z5lSg^s;L%LFutj#@Ds;L?0BdqjPra@<##u-dgQluk{^EhjQ zn#bWoR5Uz4eE~m~I3a@a??~fRixZAi}ep-|-oI#ui~W@sf4fddnp7;4qf`i5+r z;kBbNE$Jwsu`PA$NU{v40{feB1|=0~qOr~~Ys$cpog^rgaJt+f-w4AqjWvw&Botnq z!CMPm0mR^ODyZ575mB(FWwNo(-gJ-kQO=^O&%$t@R=kk!Fh-EHWYk(;1KWWXmu*c#tHLT327+! zR%VV!G-;}tRwxpPhXzRe0QDYdNw?^4Cw2fu7QP4ImTIsHU9t`QCE)ia`cEJ|g(_NJE z6r(_@l%Toz+>1#`@r@70MF=bw5|34u$De*2s{&_-!=aKiv_KXLBOPtk;PK3>1&NU4 zlavr!ds@?wjWiy|-h7Hk6=hYEjSCia#iA+MnB+Kb*{v5OSrItgTg6pJFAK%yEM?I& zNUhLXfi*ZAl+G8nqQ$dAi5+Y9>RoiIXoQ6#$JrLwwq#O47CJ4AYakU^3^QvOX@~W& zXcwg8g1T);Gey;wWRr|}S>u}uD-Al)G)+sfR?wJ+))_E?14iov4k)hp?_=)y2d2%g zcj?=v2^Y*j;|)#)Qf=u2k%{vSA_eC|<|pX}4?=sE41B&qptPp3ElMenAs@R}P5IoD zck*)iGBZC9UQKJzI)s9F5SBncC_L5&a&_+=m8pW~)=_FYX~Ous3LMYUyTG*PnogH8 zNb1n9%v6G!9Q~D|8CpIurt7S`s1gKBNGxw}?bwg{Sp~OomWbD2Wvor+tVz5)q23 z9`Y=wZCkwb$Xrp`1|?P4e~DmW7kDKQg`lz(QU)qifeIRZ(xEbi6EJOOs8o_VhbkM2 zMDwH9-@tn>zcuix11U+@V&<_JYHI$E7k-afGwWzS)i7P@lTXAMq!ZDox+X4;b@S+olpG@ zPdxb)pMUl%oHV<=!F{^!2|hzKNY?| zxbOpkw(rRQgSUg3G3wW??I8R({&TF zZ`^m`Q0$sRgCu=txb`V@`V|87UQNe!*TJv6LwJv%>fROjJb2l)YW4eopaL(DXSg}S z9}p<={i`oyR^>rC@KWLk5tb)hZ{!c}2>4})0`9*19v-^y5o~2?<_)8K6h6BM>MSCcG=$bw zYaQ15uI=z_6LZ~nkzw!k%Nh*+aMum{tKYMJ<-Qg`mSvoH@dSVH|9y$mUigu(}h1|9`vy3da|bB#$BD-Sw2o2=y8#~k@R9P zko`?7ydc#XR<`Udb`Tmyqa;kg$>0@qcgt{*rQd&S3_XvclhP5Z+TyXu-4rH;snxl%JQh;nn~}`Rt^UQfObI((?|irb?e`)liY8l zmOe$;M|O3%p*OzW+Nf~$51yrPA{Z~0#zJ(W$^Ci=FG3MD%|NA;jiGT1L;`YC;u1?$ zRis%;YaL}hXXDTYvuY81|uC#2&7kop!6!C zTS#Ylr1N1935gTI8GvxTg%DU_SGL_!cd)--IjE|#@{PYAe)Ye9ievTU7RwDT_E{-^ zpm(}oBER&td{}tl{E$u%fHjsh%R&(%5ut!l*WhFb(NRl}t*gfR)pzxB-v(VhBE-IJ z-5IJbED8o#gwU|NiGBC`-stxpxad^NeYZ2b-@ggO;5CICwBLlC^x8g?vpf>QztrGH zbbfH}@pLy^@ZeT%{1t;CIv(L*r29yP6{X}=FIDXK)P3je4xV5C{++SuA1Ri!GlMN) z>HW|dPO)-8`L6Id7_Jq+ZNK;Y8n=;Ho~oXZs<1*Jyy~74A}}Y^%7NTP68(%y5JzT@=wDU2ZU*tVB$*_v8UoLhF5qTr!R61eLA#ESed5 zq-hC7Q=J#=H6>C9!CEIg-LY|oHyHlCaxe6et?#ei%5`12hdnCnhweKVUz1I88c{;wCW+FRwq=xM2vZJgj2HM${55=@5Ftt@hkfouzmEN0 zT{;z=xOunFyU0bj5G}3j;MKJ_(|cYG-2Vf4(7i|DRzp9(48;X!mq=e4w56exeTeM? zp{Y`uvYOF2OO{Bqm!J~7m&0og7tRTU@Iz`Mcm}=E7u`Xy5<2@O^`KZeGRe;}3*ou5(T0%3&7_)zVP* zrbYVINFe+)c-CSWt>9G%(^pnwnU1n6sgZ++#7Y{d_wR-5UN@|Ya^W%k=XIiwm{z~P z+<##1^LYF|Q|*_0U04A|gcOdpVo1Lj3AT^2I_}?Abq8&C*aXk5PidUFpT$0ZeR+WP zN0JkLlpsU&(zSE->+7T)9D^Y=@1i}Az_>twBxE>*t+faTNs=J4kPd2^7Jxz*%*%?R z7y;0>En16xDZb^NWF-n*3F{A}k-RiZH)$oJ8Jwq7u<(HbVCE~-C|z9qAQ&G{xDe{49nuV4B@`-4~Y<P%Sx=?kw zI%i34_%nXz_c=h}y7W0_?ZTRP71$KJ_Wv%$;=9z43~S?8Z`kg5?GN(d!0oR8Y6LLk z^j9MjIg}nkpRFB=V7}Y`(ybgoK0H536wZYLr<5{$&W?&v0CiOcV~xbLHASA{Y>SYR zqR41X-8sRs^C#R&^bvN(a0nkbbV9z$E%W7lbm0Z6yH3tHjB81YjHankolaw8OxPzK zU4j;bZWe3NTA_u+ON|$HNCkNzaVT78Xys6IS@s~it_C1+LoH~C;)EYkd!8=O@5Rc! zxc_ip)(Tb*`fh^?I8Yb(Vf3JTk7F5uFTI6n@V(LYpB7ltam6*ch_&cszo} zI9h2@NrJE**9M_dV{FJ_$*y88#bBw$&~PpgPIW~%JLIavX10T28*;gWpS0SW(-U`x zI941ejrNa`PIg5Yvp=0Pcw^mot_z3OYJO1mH-`v}b6yNSUg-M;tXv5d0NWMzWM=^B zA_gOaG0@Jf7-_LgoQN=$*Q)TB#CfFaH1>qVbiY?!Bolb*EMD4hllefB)4#uVCK#~6 zNQ(ohihd1Tp8*TSLa{Hw^(w}B<)-s~s0l0!c3s*^xWPM>ebLpM&bzi)A#lnfy(2Xs zoa+pyzzY@jU2mX$@P3U521N{evX556;o_w1(p@$fG7>;`2b{ym(EixxzLo28;a(y7 z$4N(P%Fun`1wtuOsgXW(tvKUYOLBx4wANsp4a8*5(3+OEZM(=|nOa#Ew7azv`=b#t zM3HXa@U!3l2$T)q8>vG3r%6ei#8u#pB=wq9r8ptTQbkkEaBYj0ibP1-szE2J+v|bw z%F~HBAW+T*7Ch-f(HM;rqT5#v;cXba>rzzVt2mUmo#Phr(Q-AS+m}lc`%-GlRI1ol zGy7hvs_4NB>vE#f_XcmZLMQv+8z)0cOMhyLf36)~&Ep-Ekl9yk5C;^_hYvV-D*g=l zf|dB#i)BS0L7r!nP1A+P!Dwl%vCbofSk~hG@`e3M`@~>Ky;$uxS%%f(Yz3*V8)2n! zVKo2{gW+DLA@{F*mk0BmBW?lt0rbpOF(?@lM6CF5;{!ceXsCA5s+u)~fSxmmMB%D6WdG z6|#RV;XU#!sghxF#q#re&Q?%c*|C1#8Qraa-+>UiX~fd`TT$&;hV4oUQk{YinuFFD zgpepCiB?$ShIYjw%P1F%PF=n$1b2DbSFrZcG|tpy5^((;Eildv8>u)4 zJ_iwQ5F?jGy49Oabj88J!(9!Wy>(QTYx^y{q`OPHL_kuJk`4)JK|&A-g{2@ZAl)U6 zqJX3<6qRo26p<1n1W6GDrKRIskNe$Ye7|qJ=ZtZVe=zpgEY^CS`@UjcbI$u&96sb# z#CFO(Sxbjp2k}k)k*|exNqdI1*6j^$qx6g+ z4oA&pf|UMWFMzer&BkrXP`!}Fsff;dCUWEXQmsvglVz@NzYlk4em#F=d8MgX_WIlH zDrOnH8(gSTnfra~WrxKKjCDyZ?7aA&-*D)z9ki)M!lTJJQgP2U$*>;w&xG$}_YLd~ z^sqkas9U-Ca;??xRcQO};Y18=g#Ghd)H-1~DRF^Ko>IQXKU4&J(f66n&RJ}#li`ld zu3MPSb7W1OwVeGD6#VC&)T8{Gah8t{7HBr9#HgGmW^cQG%QtR|OAy0L(Q@w0sbDsc zZ(BL@G5t=?Gm6A_bo-Sn*KMp#na1t17ZPNy42haVIT|~(jdNDW;V#$XuThx1q;X5e{je5LP z>XdeHOfX1V;#Plt^S$o<`wJA($@bqB9@GkpN0ryI+mTv-Gd-4eSr4Vcf6qeZMT9Ru zaW-q^i(G_!%wp-M*Tr-#?WPCKH-wW+8Ytd0S^ONND>hJ;oA$3OtiHRK*X>rfEB#@| zFlN-NX^rvW;iai2c@f(H`K;OP!}3XLyEUwvg4UT0FaA`@{Ww`95Z04c^bRWZU_f1S zPuQg*tQ+*ApYvY9rq?)CeCILkAy^?fKvcoV@9tP>#j6Al>hQuhyLVM1sDjhbs=TO% z8_UISrLCLEfbhZd_mozecF(n!qWPyN;ortVFo{kfp$E>n>oPp+k1OQ#Sl(v{kPe!> z(T+5GS#aj@edXV+O;3Zak_}0{nF_Q-7jO7`>+l!byD-bT(^&c>Y1#O(bS73_<=3_t zm0Z-*V8@s`suFXoU2OSTI=#EU6AAxLDJhh0zw5ZB`_#TZWW*$e{-s>dN9PkMwGxwz z0R~zF4!ZbcI`qQ*8=DpD)|MipLqGovx%qXSlN*+)90;5p^G>~}&-D`P+O_+nMd?GM z79R({KAcwHyhm9g{G+z<8$Tx}=iDD0VS9_1fgsCz4>}uxR>F%^JZ0>ZNj8g?lTz;s zSEPwEWHz&ApD%wQDzfa|CHa!)k2m6p{etKY?c!avnxo*Jz0R%az|wqm>c`bV%{=10ph zuDC$B^Q2NmLi$_5wvm>+nu8 z_zd~kvkYf3vMdC+t*F;ty_rl6g+&X-cSltvJo!VLO+%7`*o^pMFOdmi>+ky%`^(d{ z$nN?j@B1o>>QEM8_?R{w9+zSk&zPru_h0q9O&BA!1hFtmA4>mNMe&LgpSw=(#mPxm z$t$fB#ePg{O|xB;1XStl1MDDx_D~qa^vwY>PU0;ODz>?iL~88Q=iZ2+Bz40+f{9pLE<8SI|W<9iGkjR zf8L&{i#D}Bad+zILD4r~uGiF$&Es4NZ!L-3T2&+ts?ak!cVj$m^4G7l(A)>32lDzZ_C}3(ZsvFU03+j;ZbqXvR?v8z!w7HSa;oq>Sfhy!UGq> zKF?L&&bZ^1XfQ&1>t30ylFiBjb^B)p;n<4Djt}ALi?0yKq~Ci{_fCW$iCdYyB(~+O zZs8Vtoyg-S_-BEyM29UNe#!R9kHfAvvU|yL6#Zblnf#m#cc1~mil`B>X2J@|A`8Z$ z+v6d|c&g{~+odEG_*dU(z|4C6i>>szCsfz3WNdL8B-*0wgGGK5bu)!DHx~+#7NfI$ z8dysWcT64);(N?L(v>XnmYRL_<}5lXw=9lk@_qB~oRu z4OmaOi!KT4OJt{zRwS@be>x&&Yx?yy|Da2^4|id*RPyv?@9chz-ZJ?`$H5`7)kU!_ ztTO$$gy7C9llzJflXh5OE)FsCOTB@s9tuu5!jDILs&U#BShxbbiTC#Z@cz^_;rwWsa9*dsc9%=nq z_>yH!CJhnjfp}RF2QNrX_D}4Q^{NOX(>&tLtY{_Owe9p~hUGTcCcbR%1n9WhJdR{U7v5oWSHb&W3~fS7|q2_E#s zpq#{wI=t0p#zZgq_nHI#;5|vgped9RxWQvqQe7>EyR^bN_>yTx*xyj%bFP$$d(t>=gJS@y}whuzbiO1Q5Tiw14N)mx$r( ztL6BeQ;89{_O{ae(a-#&S+)}nw&NwW{om6kjt?65?>_YO-2Y>F>d|*)O{Q_b*NHQf z;TC?j<3vp}rToBv3n8a}wuHT1s875^zuVpNvm<7YMc=-AXZ4t)=OXf@ttb*!x6H*! zk5P-GR^cNowu6C)nicpSshMD6Jx!~3`MlBgFS&B@StvJ(RgH`uciFtH9QM#QGJ0EF zoL9-y@AgVnlhPxRAeM#A{7oQXN=&du(tud+z|Wi%c-N0*%ykk;+_TGXihtBD zX4;gRka+(dyGu_=>aNn>bjERlOtwcOX{MpeM>h?le9c0ihJb^&hbn(~z-+Yo$7Sud zkrBEPGrAaDgOBzZTu5l{Ra=WOil+DKY0hRS^Ii7pq4>I9SlBAn)!ErOgT9deYK8H> zAUe(UU>lvp4Nw33ES6tb2%ort9sevOZZGJnQ;P9((qMlT1PEC%Qdi4A-7QtQgJD3i;!zwn&uzC3E) z#&*=g<_wpUTlr)7^>z3wQP%i~(Z~O}9D@8|k+)?H4WtS~Vik@(winN2^AfGTUz2;# zbo?;G4GC_DDYxFsqw8t`+iJcu*lf4&-;WXKv7dPA)+ZIwVJ-T-jEmD>k0TAU;c^!K zW6;xz!6tl1dQH~Ih;)+KFSCw~aP1ItnEA8uT=A(NoK?)2P%~zv+>pIg@oj2riX7** zAIpM6z*3{y}|DnXq;X8(CXbg$*=A*(-ec0?j zq+=BC#~MUeIS!i5XDDk%iQd)w9ezwSEn85u%WCt9o#%ZaYHDlw=^c$EZm%_$KGNc$ zfX2+`X|pT7t0#*mmmh7OX3jJPtVKqyoy+}h)V@p8$pCv@KJG9;?z_=J@6zY8TD$1_ zYfSX9sL6f4=-}VK9pQhlPMz#jmp3-by~>0QUaeaZn%c_T&93b9>6hJ|Y@2P1sGW?l6|TAa8jMXg=wh&@6S<9uB$ukq8{?KG(@0 zx8JS1+2`4qOzyuP0-szlB6IkwoLSyKBlXs!sPma#!Q2`(uo|yc(&7V-<{g}z+#r~( z-z~tmYjWPadGqLF@evWq^y#1&DLSn)h8fCA`wI0P(~Hlwczcq_{g#w70#5cr8gCmJ z`EKX2EnKrapsN1%kO_rOBeO0U`O0w&<+SKNDv7(r?Anl+%=Un??_L|*kB=9MUl!em zb+FuPrT5w%RNIf8-XlfIc_;<)qN5GAQ&A=+rpZSu?;z_O#OJ%uXMLZG5&mHu@W&Yc zIR~_utxNK4s`M5r7NflRW8c0l=$?Gn#S@;A>arJ$E}Ws9zTVF44&ecH=DwhTrntDc zNM}iTd7Ha*KAKUe>Bu!R;KVzWg2CohVRV_m>lNw9yF{Wg0b-0Cp$zr+@@bsB+L&q} zCh(rD?fdpgG;WYSsQby&C$-4DTz6M4%kB8j=-S@R9HrDSVOdK`V7X)@R$)`64*8DxX4F$FW?&Q~0N#gAu#& zS%1LER)yoW%tbNnwnQ#9kxuB7r6l~j&#bWBCc9bMaxB{UT1JIo6UdE z3ihsM;pxq>u`!0|;C}hjBR%^ev+}Ac@t3sFP#LW}J?U*ow1?R9nO)l&&VOS<^PNjI zcO?Wj8K;pEM<~1Y^_M9~Xm2m+L#Ipb4#lAH;wPolhQyS2BPySIHXVM0K0&~N6VnmA z@2g{E)OKdjXYikt6&hq3=3eNktOTovT&+<)*VDo>rQrwg| zXfMW$^7FB@7*%fcfyBn3CA~Mfjf|iW^vfLzz#C8Nt^dk`Ip#VuWw8(W0VK|MB+YjN zPIsjqZS&4=Jfl9Zd^(yNf&(NJyup$WZ;{PCLc~X`fes? zy)5J>W04LO4KEXj7`~c@3BfVAJ}I~H>*;lio5kfVpG4Y9LV_JQm7237 z1A}v07+M5hW$Wj0-pl2|v)sHI`G_jdN&WHFkZWYCgA5vm1nC4=ik$2dB_y9vSZx9g z#zw}YYvc_QU#M-4!YDc>`=yw}pD(W#X8zcpderE-zurbJ>bYvZ{d*5nl4h9m}4NYxr(!#<*5#)ud-w33jVxUS3`v7#kyK z6B&5#>GaZo@9nJyM!PIOabxBOVL~m-oZs7F-fwuBUgby5d;&;I{OyUk`!A%q=aYtgNhL z5Vgip%AxrDQ_S5W)v|28KkSBn%|S}x?eg(o@<&qnzR?QAT`A^5U7SDagp4=NC2RC~ zVhkLiGHCHwG2oH3-M+w;+T&8O?9F;AklMpRL7-q{6lagNNr=m@zdIyG%uo0FNalqO z7hO#06UB!yRtz6(FA{_))$_p(P)4bs0vqg0rEnPEiv!O z3be+Y@Udj54c|bS1~2m#L0YcO^6N9c!=aG^xSFwU%=keH@R|H(9HQH5167V~9v06q zQC>2ACzt#NG(H5y`#KvLnJ(oG^4=6KS}9`~^46=+El$-bnDu5A=m|!r!IFw-UvD>+ z{1FLDLqla8{ZNDX=X8n`W$aZcgZw7#p-^<1o)K+yuCvuO&O`-virYCnF6Z8a2IbMy#m&B->rGTxCjStzB)78aHnx1 zq4@6${_Cs$dBMN0+6z`3GJNII7{J33`#87Mq_A*v*fFh4yK7+gDBx8<5eAKtOPiXL zBs5i6v|=Z zuHvq)Y7XCQh4TP6Z5>@2k@6*4+}US%lACk{U1C@SI0-rhR%tx$7Ha%Yl(?yaa(M+Z z-7_pn&d`wf=Mz%X%>LN&rt2{g2samsu)WwlRCgRtjDuC;n7+u8RC5rYr&xZHXj-(g zX;P%X-b`7Y%NrnZs0XVTHa{}Q{w6SYN`*7XL;$aUiz2>@k}M(z%~&?>(DGKXjB9gW z29gY=FzP{PT&Bz1r6|e#W1gkUO0j>zRp2dmbCqNHUQ&Z%UZi@3Mhc(nt}ru-f&`Da zQJ8>ppw%U8rH&w??Zbkr7eGZlW8;YB<$GGsFNQ@_B#ku!7Bs1KJ%_-%iu9s0MMQA+=k=? z2@URbTP^BJi_r!3X96)QoM(o_PKBf&GDn1siID76YJ_UM?Uv5ry*VWIatICiz0=Ic zD4|`h@D>+>P;zyhSa2K*gPzOuS)C>L;$guX-AWg>=&fEbHLSLxT|@% zBY3j(judr8F$(OcE|&yQL6tZzgou-LlXcr(jJ%q6WFBq>rRSEjZL%IkjI!h^M}Q<$ zTQP0q;xF0twX=9m23^;Y3JVi@qFHLs6y7p7IXoQNn=UaQLM{iTl0oD)>fp~x#OKcj zCQosp!*$!1-07jK-}!pK1`vn7zJ8GW@lV}XZ{D=cw1kM-53q-}S=nAZ>i~6mWwcn$ z)bwm;97~M7*vIrJn*8(08q9LO3{FkQ;;>AQ{w#+9f`=m5QuRC7P!`F$xNE$@e+u4e zr;C#!6X)H&jHuCDKJRXC#a$HQowKNZz;ZR7mDI>+u-eH|OhUqDqRLTnHk5k3lgTN& zurNArIXoQiXa-+iVY<=JWk_41MNFF;J``ZWG)xkrc74o~?nBypfMX*1UR<$R8F{z# zwerGKA&cm=w6x%gh6$%8maQMX%HG~mg>T+$O!=(k*!5>3@g;J*83mZrLHq)zU}Oge za~E5Q0_wG4v|Hl!*EIYWE{MAQ(5gp*uGAVgMuJevyRB#?_vK5RYfl9fEi71`3f>GC zyjgV{-dv9cS7Oo`TWje1FN)0wr`iR&Pw5imH>(_w*I{(C;?&suXs#FNsJ?&rdjPuG z?sNd#n;Y+1VXZ`cb{zWfqPpgv$@+-@=+BDZ-&(Zk&y+Q(ayYxZvZ8r z;G8@$q)6&_@!vMO3@GD$3;+FvrNKOWWQGzFg6KdspQT3)H28RuFiTS8=jS`zLHgyT zyPukKRb!lIn$PG|=kXo^LDBh4)TV~u$NTAHA@fmHM@PXQpPpk+ROPHl9kirRF} zz*KD&AoW6LJ|}{;)xz^z*v5QUTa_b3f=ZtLrx#b~Jv=;2%I}g269u!=ML16;^)EuX zDH|6s9}R=ncefm}_}L{pG9KN`$8baQpRWnui3y5U_z)rIyC=fx^Go#CSSdDCxhh94 z)_CYmu=9D!5oGX}10F0@jyB&vBno7|HY9>>j{=rRhGEv3;ir2Vee~w0tAIsa3a)!Vo2Qw=_eJqtB7vM+SnAZu?{k+emSt7&Ku+C>lq6I3`)Du!{MxQmxvGq{<8`fNekx$v z+93I%2b0pM&W+W-Wit7<&OO+u-g9ThuPbuf!9{&~ehDAJedYaf#Hh(5UJ8Plc52=B zXxa-2n)wtl9Z;o9AO1Fz`7?YSbu!`-N2LCW_!j?@;Gz{~mjVMm2sR=7^Y1y+dpWcE z%k@0hrdVvc;yQHwH>r>Q6bIa4%ZRq#S^X9hf=>=Fh-u(Ja`<%c(x1ufCXI^MyB$!z zHe#K8v4tD9sctgS5Kg=H2-d)1R%iI0Z+ih6f% zPi{M*m=&uX6JD-J)2J#!1J&23^xsOKp2>|7YK^4iLYC3}_gC5|6)fl$&9DolcY7HP z4Gl}|iCasRUP!t95b$OSwZV-Nbo~BjWt3bwoP_Vgh=?}z@!_u8;m&W-yPp^yGl*h^ zTQ!T2WIS4a%^>3?vh#ZaUsZpg^1d;$MdoL{I?vi=*VHfsDWD)veos_)eMsb@gjQ)5 zvRv0^eQk#*3gG&;T1}Dk-duQ{vAGMbj`UA%F>&$S*RKgNXzS*{GYF3|*c1?e9uqza zm_2v27y)R3YT2W`CqDOLR$Nu3taD#xv> zc^GuYbH(G!>XCvy03>Edd1f*5ug8;`PVv0Q#vSMYa>LvJ$r(2ftzCsPF_?sUGc%+m z`{g)cmTC4eX`M{JvUvJ&gnYrt;+!IJ*HMUuR3|{wj$|{>yXB@;^0|Y&hDKpUE4Ur} zwdQe`WR7+SqCCXY?|ZYc)SsQg?lg9nxUTuhw^5izy+1Yp zG3YQYw-Xw+Z;M2ZjNI7A1;7eW``LVa3Lp7%2fTnrSJ+1WCvziNH0bNKl8yuhhFa;K z!{0x+FhjeZO4-)EufdZ%xt{fa?Weca5DqHt7O(u*Do1G3lyZNj0L#O8(b3Vd*+U!W z7{~=BPk`f!(x^vViUv0yHD_}7x+4qWIq&wA0IjZ}@N8JLovYeU4PMhgMyC2lC~?F+ zJ#M)4wTj_Szs7bo@41PPyZi=D=(HT({Hb6Q=2jOr+3Tz2(`D>A4;&p;d1>Z8Jd5KB zkfI@Ksd9vF2bXc@YYM-b_u%la$TWdO_4h@@J!O*CnDNk)r#UB`$0>u*#(~lVA}dBl zb=bB*UEW@i6NZh>Eg2zc=nVp$6&wVCO_-njhRkzptD3TDfc#PHtnqG_{GuH+hS4%l z`(Wddl|y2h#uIKsJ*-p&L3?s;4^N?t@I>hTappIuy(50 zAa7qsWJK|Ke{g?jW1G2I%_zRGP-#evl~aK>@nkD!io=jX*^>D5+rVPkZ@VBf^1YiB z701t^#t-jxY$q2kzZy)KmyA^5gy99UTNQdhs(rHaXE!~yD^%KrC)myT<6@QR2O8JC zy<}J;Fld<2)OnKOr$Cul)kiUH2nM=`0jf4o?4)1(s46hLw|bh{G%IiMzUdk(iq1iC z@8zw5ESh%T&!SM)^*1!;v}pC4)nt>?)6&-4*iI+_frYNr@$&P}^||KgMP7UTI_uJ( zI35m&RvG++P_t2wOfL1`3K}x6NAY^ky)=y&HjMJWo5n*Plwan`h?lOJU&9Sr&x6aF z4XQ_;q$fX4PpDiK_ry3(UM`smkj+k?v~baE3lx;uC75a3{qRXN^N zjOmA>u52FC!Y*+k*9NLIv9xOI@Eb11*v;GUNEVfVH-*t&GGtvYdIknqD0ObC$>KH_ z=G9{@?Ie3%lpxB#C7+d<`y>tHqEXbOY&r3s81DDO_;gnoR$5i?Z|}@c+%zYCY%&K4 z`*~q7IUwj~X&^_^c?LD|)->eg_|T18Gq~1yRtYCWG4r;8fkALu8Y2xoy_@m-uV2lE zM@Mb8mj=fw@6*HhuV-%l82)0b-Dyb7TPYfY9;@@XK*lEb_`$cj9Do9ohTSgAl5rsm zJ*hThCGbEewBogE!~#7^)epYu-MSSAw;G(KnGb_bsa-$oSXC^H3d6(0>+EMv^~|Xr z)Lm8FQ}cXr>Oe^kp?J_XvJ;|~_;S&Etn3ak07K``8s~GMej=3T;N;|EsJ`X#832V{ z7c{qjjZ?$$3Xp58-un_6t4t)*gPJpm>Ntb;G!xZMU7fK^gI~W!H~8%4zI{t_;l|r$ zCa3x!ghhf=P35KzUn~AHUeX@Rq0qn2U3;1hpb?%bM+>D6>H*TTK&qk!-nwCTN*N%b z^U?rEMMcHTW{B({J;b>Ih!6HAN*OGs20}L)J*7EfK3iIdUL~SvIYz(Lp*cMLD-_s zGYa-;;m|SX!su@`7aF~BhUe|NB%g4p#jz)M&(y6HDMRRAeEt`ncyIlfy)wN|21vuq z%&Y{k3DUIkuEx&AHX`bn*UA2(%bzdC^kei);ttK#jei8&twjMc)gNv4ctMjL%u&Wq zNloR->bGePCA1$cV!6rb?hivm7Xm=>FFP_Mv2ck;%$%OiR*Um8bvrrjb==ga*~kvd ztCo~QCnwZ@eRs1uH{kR{X5V(EISAQ1iLV7T;>(p!1DF7sD`UCQv=8PAZSBES*xKl1uD)xgx-+ly)*=PY>fkTE(s z`u2o4RTNHVJR5ocR*B<;c;7`nVc|vlrktEJ(0A2fau9zoX;NaUJ|#vrMah)fBF%T@U3H1i?t={HRzhY)$UTph5i4l_ zu%ofDu}j0Rsjog}&=K@V!j2A!t*wZsB zNk$c=qIlx2s)|b>K|{4) z8ZBl+VC?<}r}_;%gj|PDS(}KSrDZ%MvSJ8c=?A-uXPKp3 zLmjC!2e*t_q5*LV0;)Ns6ONU+^YNBRnJpngls=f0e9S7#xR~i9gv`pwLVCDa>- ziK{%xR#vA#h?c^X&#HdyNvN&cK=3&NDn;Tfrjty1TR}(=q%=d3g+>_JH7}x_d_1ns z9Sqgk=J(f1hRgS8lDfGCdRha}7=VHZqgkjDhs@qg z$g85Ft1wn-4YjB6U55&-52YwKm(zEiX}TGvff&eYPR7{Wq9QU_^_tC(7si<$pwU5& z6AWVZ6s#aLxc?fXj38&bYGcENC`54YFgn3_p9eSRw%Dgypz~s;P6+C_2vjsk==7d0 z;LSAEKT1;qCsK$~5AP&W!}cz&I9tF=WOnl=GG`!DBz&B}4M3kgWqepLTJl2jufyUi z4vFm)U$}5#u-45E!SMy}p@%t4)=(nK2u$HFd+SyV;X%|ol1LkXkiwuhHvs*@6f6na zU){ss(Lgo35}EVTDEaxx`tSEx&SBCYz$EkP-8+DDO2A1Y#0v1sU3Y;>`Bq2UZA(Q< zOS?2y%0rn8Jq!+EMJLPP;dv+oy_mK`Jt<&X^3V&UF!e-LnYh_iZlu( z!3Z&?1XamS1u4iFblKQ-B34sY_>Ts_fYJ{EBc?IFDkSPD1O7;|C**A+EIx=$5#?Hc z=W}3ff#!HaXk?@c<%0Mf@KD@TumDs(yuh@v}6Rv*9hOoF{T0Q<{EF6TCE(4PYA7UB>>sW}>FFB&nl_ zo7Y5+Cp*QqkcNp;;cP(%fX!iOOWj%Hh>ssLn!S=8)*R629(R(-9qcRy_u!kuVVQQI z)HUzI5Z-c}cRJ3KAx|B8U^_6UV6o9UD*^#uO`AWuB}^8~PFcZT(IP+Fz9mCLOY1VM z$&{SM7*v6NszXPFdWPwKN;rOTj)@rZsnssj*PKe{gkU>4`uG+OiA0PS5#i zx~Iu-u*@5UfaMHcM^`_RV@t=p4sDz5r`hl~U@|;l-T#6*DM~H>E=p|eLeN^E(3>jL zKOgrnZhrl3OF!qY6n({XfBzM(=UT2R@6e1fWhwXmexm$g-~op7y6_Ko>0UPy`JQ>c zdk@l!wfTY^&&MT)S(}d7`Lie{5SZ;1=e?sOq2c6H6&!6& zQktE}rw=@k=_!?NqDtS;uw7r2&=taIwGBH{hr64J8|2*$(%)_O^n=Oep}PV)d3zWc8b6| zrcfTC*g{)_sTUIHyc^p}N61^+Cf=c8=d&*7U~w#$m!69s9JQGSH969Kt?HE%)9%IG z$U1#ZAfDAf510#u(n=H45XTRj$J$RJQWNy$E&~M%zyh|UX7Az_v|Lo69xqP+*1*6( zAY`pMkbI|!-T^e{(lJp0$gHO7y+yRko0BLJE$JGe>Dj`GbyqOK@x; z8avTl@}$T^u6xpK2d3ib3mO-;$Dn4#=ZqF`pz4ZxcwPeAw~o7q@-u&CJt5A>$cS*L zzQ6BV+Hl-3s#N%XHI6w7Ob-+{s~?0F77E5HR(u$E5xVFN!hi@# z2tEDZh@RxMXVm!e##s3A*-Lmxu6?GeMu*v&}f*7smt*yqOBHVmXiwh)- zBGgR8H*j>cD6b~{0>FbnpXWCZdXPyt6Pw?fmLu{cTqaN`tuD+6&1v_-gYMqFdjq95 zYDlR?6lCVEpgX2;A>6i^5x5jb8296l0;Sib{Y?7B7ynn9UnDBWa%gE-^wn8 z8^I}hzbf56?^1tqu=1A|1r8R~4A!SJsAuAij5MmSh7%(9hIs{U)iZ#RgfG+k$Jq>* z&a-SgMXyhG9Fn9&uKpiU<&*CLSm^`5&(@<;BA@ z-1kWv0R-AC_PqegLm;DQ1*i?kRp@=ba`E6~!9_??7!Q!Ox<4WS)Wl;pdDi0kO`@B^ z+*R7z+6W>*DCnc@0{MLAc+ih2ec94CO7W{`Nm%-q!i zr1*>^*~RB12RpxG08I;+*HA!WqY~7)MIQb#`8D0d2Gd?dE-&&Ya=wyNe!CU|CM75s zfUFOH1mUwbgJCHIgy~!iCj2-3DPAGFI*y>P(BLK1l=~%Z>SP}6*0MW2B_1m`U__}Y z`aAR;?yhw~yk?^r5m*iO0OC<|H&O^ORG#7gh;WgwKApK9cQPk|B-edLel?mVww}A zoGlrIqJ8!1RWry9RukglPE#aCMjKu7CzRAYTFoytk`dzD`e<+CnHZW1J`8jKG3}6C zUf`J_YGr+PRD@E21XSgwQj~ttiO300pVE;qiV@_g#dm_#5C!9fKUoz&~gl z8=oxnj;X)^==m`CLDhu`6NPH*6tbwJv5ifLXCc9Zi$wt*a@MFt+EP}Q+Kvlj`W;gM zFCYh=&v3>9R{SwQa5C^KjJ@|1p7Pz&*2<8i1Ox{Nuv`L}&xdrbkoq0&r~;9Sm>v+} z1c7`2+I#ec^K100pf{=TBrA$Aw8Qv}Op}v7YYn^?F0?rX9Nx@u{m6&hGQ^P2_Y@b! zV@0_6)5oFdt2iGT*VWc-TLxZWFLGv79SkMDQ$tFyoc8BBRO?GBdAb+bIb*|-A zRHBD4R$nX7UQi)QV1`6BlS)iB>)(qYV?m+X!bxo=g4Ir_vG!{X`P6T;?`_QM15JYv0bu)TFR^MH zD7KVe#kK%%1*EJEG$Vml+p~InHS(j+L!aGBzNi9Di52MDtyPY|``B!L?}lj?B2f)A z)xmfb&Lf$E3|AtOwq~&H+?b(BqI5@*BZVi%=!;3vZ>^2ce1CXN;b0Lhoy0_s?pxli$_(=F4&9f=%(>!L9 zh`T@t4u?CYKo6nzObBZ8D#yIaO4?BiPZp$J10i#vxIQUN z=C5fc19}BAMmFv?tXV-y34jPX_qMzbIy&tHC60H~NvSE&?bVa6#7+i}G7*9N=wP&| z6E>IlZ6b(80LI0;k)#4k0o&hAT&`$+FYRuNfKqg!MmBa3%9tqW1K7S08x3$`P=JI=m|hvCw}Jt37LmHugpOY~Cr^&2#}Pw#A~Fns0ZCYMR>KC-~SA}t*7Fy`-P+{DqoffJRF zPGkOQAR!g)icXIGg+;aGEcuDgA!Sf8QBbvY+v}qZ20a^YwH`{hoUW*}8t;xy{%rYl zwV2?g`g2ZCDi6*6yd%dtIx`jCLQL$nkCm8Rm4BQojkb}BJpVgD{x2&32evaay>dwB z|9NB-c*02)eT`Df{1$@_KJW!l1lL!}0#qx|27^<3v>TI~)_&xP@~4l2w&?Y5cCqzwomfXKs>xs9n-$WcR?_YLtiQ%5w^4blxF8$$aN@{a!l4QHP;OH3e zcyTlBfXh8?d5&K5;On$K-(PMA7>`YqS#%&;LC~WmuOqbR@)OORSFa+^WA-MplLnIg z6c=>|rBr)q#;YrX5bF{g0GJSmAdF*{3P$KUAUA;{5K!PQqKP{2QS!-*0BZ!WQ8-{r zxIbECKiwz`ofpVKArG3Uq}>UiWH1;Wpmy?re+HQV>L!1Q%m=ERRqrU3VAVQc$Dk{~ z1w(6BfCL6I#A}mC_17>18u$tzf}nXLPCS5J@&uLwv3hR|F__%~Ez=yCw0gRcf5YQT1}0m|}=uq?B;N#~TU1qn_G&U&9?rY%~r2Htk8*6lnD z8Ig5$b-^S=X*ZM-fh-0?K)SeN>++X3E?d14d1Yl(pu7TD^#b?09<)hV^C=VV#C*&l z?11E2{g%lXC~sh#jOt`1oXLs^JQ_Uc8fmZPh_8 zpad#+FwNyI7hoXA%YOqGq$9U)3*-%K12+{RvOR#zRsH<@T5cOtUH$lpS4gN6^znfr ziz{)fT!{ogZwCQk35qPBUmz4?nIv)>8(EDl{VwzK^N-y<6F4_#T_tqy{(VZKFl3Sh zm`*nZrWhNzoO2b)1zlu3S&xuMzyeT=KRzUI-e<&mgJuK( z7SQiu@e3@Wpk#bk2NxFXIO6^+DvINBO4Cpu350Rf%0r z)Py(#rvD1ULBsCgkuW@KADjKx3lIqAioXseaC(3XvDEMIAw#&nNNq-$_z|uM!egxq zD|`2Wji|6Nx1xfkXk{)|VyYRS>|>o5(xnW5225bYdIvB^tsRbqQAIVoFz?(R`YC3- zW%{&Zu-b|N_ATS{RaMTESjCfv+*B?2Y`%er?~LKfLjlkMyG+@{zJCc|rSV&-ivwx3 ze`|fxtv?6078xS~q}s(w|ULh!DHCSgbJu>$5Med~q=GTbw*t1Z zHIjLdZ}SRo;j=>o)RA{LUBF}S7RK_#8Z3pt!O-=9-eLu%P!f2o@n}h~ja5NL!O=c0 zu%tT?N5A4@!bX9PED~_yo8d8HDmnl7(%9V`!dXMSRZGba07;O^0@y}`0ZWa)ei!%H zZ?pTn&7b8j$eRh1WiDDlTY=JV?l%UlQk}as-qFz!OqnK4{<0t^1;f=t7uv~2D;olb z84xb*_T!W3rZ_YOetpd6yV^syP3bhRT^odQ2f+%}28LxT=xNYVC6Bj9&vI6Hp zB2z8>&q7^7reI(@LAyZ4Jg~+iT@*1$-7jtk2QMyYW3E=jD8%fDLLmmDx*{8x|GnTa z)gXjUhVN!KAS*=NgzhDbWBdG5mVA~3iZAORQH>RG*E@r$5oRw0t3%8qty7Zust5y2 zF-Q+b2nQfWQhVORHO4^avjPv^(og|8WUUxu2b`rKh1djl;=#eAdeCG*i=5u;lpqpd z=f9k)se}NaS2+&&n}M$@c~#$3M5zyoU)Is&NzV9zDddMMa(bLtefZAFk2r=-uodiW zgchTN1-fh*-anq>-kGD>FetR-Np1kQ|?WO7mSQo z#llj}fEf-I2+qMRi!)J+aI|YM{~A41IUs6*KPBu*74Dkrh=EZ?-^?ufns5UR$WjYp zAgCd|N5HfU2dF3n4U)soAgctnvEoK+qYw3rR6sYDc8L!N){*^i*@KLSQp#pv7$hC*|7`j~G zJx)PS8LNVg-9KXPn%y!mq6N-7t6zE4!(SVPTl^Z$m_=AMinPP4F3`9*T9KWR&rd}~%ogt!<;+TaC11VSrl1wsXh50nB_HZjIKgD~F% z1q|HHUt4G!5Wy5wIuljUETPr>({lhOfZPb@F=C!uCV&e*2OG%pP@>Ygy5;_pN43UV0}aY+%TLfG;daN zO5+je;ipigvS^y2f(gwn>DlLfco&E}IUYFLQ3Ikha903;YKn+qSW)Lje2h8;uzJKb zz&(+K6c3)hr$vnNh8d)73OvcP#cbZ+DG@#nU@72RaDBjympC#Z2cr-pELaBUEUDW*AwM?%F zXAs~dM;&Gq8;s_A2cVyJAx8^oRmZj)^|mK>yzO1GM+@emr-11Otbe;|h~GSpqjX3t zRu#$&C+Lz0I4H7sk8qsBU%t$y-7jhZ-a8PV)hnBwGggHY$hf$9=a)cOf$>GH+15K@ zZ(+;3@%N}0@L$fuYOQddMr#O|eSvx!Q6PhW7*M(<9=_-eoGVNpAOJnlq@CP+Q~0re zv05L{=|&#gF##yUz$YVG32I2}34QNA-aHdP#boim;zf1LIWcHmr`K;eNPXk;haTl8@c>rsG=-@`VjRSaW)tl z8{0sYb(0UaQiCOm%iw z=+bkN3F^9{d7wV+@7+^M6|w-4!%kBMh)(3>$Ih?u5MbLsWk^xOQ2Y6%26D~=qn!@a zE}k!#g-sfLrNkY^0W_tOxrTIu4kmRaJ2-A(>S8(pH{he2#nzs_IBi?GZ%uKEbd3AV*3a`pkF z5&N{x^e8C$kjLRx+2F~!j?q$t=&W)WM+|JUkXP-yjk~hQb0Wa!$RwZnHWok~3(QTR zGj@P=Z)0b|$p)ct~}dhe})e+C&Xo)9>agFAgVwYv_4bBQ0| zA28{SnGuF5K~QGAP|z=inir;&@dZpyf2G5InJp5)@<2qvA!0;E0$-ZB_req0*NzoS z19+U?t=|`J+_*6ZThRqYCl)L}<%`;xB`bA6+(3Ilp6md~3Lt=8h412(X+=20nd!T! z(RVvX;7M88#ZQ^COkciyfnE%e%?~Xj0=z?WaNI))){&9`M-PA%oK?sJD>-ERBJSLx z{HYY^REX@C^5n_J)nDWRd&(pXA}Dg%ZHkHODVXzTng7Nj?Bri<1I1f&`Q)Q<<7PE^ zYu7mS^ub8A^WpDmw>VK037Z^qVWF#7X3xTUf&4Kc;2+q0C`xn8v(V5V{{9Le@k;Jl>3M;hD%-0)E8^j&3KAirxdK#;mpkBvsRwyFKuNq#V!0Iq z>g1`BVzJ^`E~M?jULYTC(-MqZPr0lcwIxFizI6ntBH-KhB4JM%7>a>Ih<9tt8Dxcx!< z6t>Y3Cwc@3=)F812knOfIzPy{hWo9u7#c)hII}1NV5y~2!!|EW0i7?)A0vUG(06xjUH~C4fye&tL6(LD6 zeZ1-^KO`uZ|1Qze94tp`kdZYoK_kTy!4ny#pqu?K(%w8A%e8$QzKIf|WU7QvAwnrb z<{>JxtWqJRq7sTSg))UGp#hoawN@gjWGE_1g|w2CSxAK_Wcv2QdY$~|1yd7bBR?9&0f3~S5hh28A$CTcBE;Q&0id#ow#!GjwD(l3Nlk8`|ePkG73 zNc^UAX5-A1Q*9xZEMOMfvp=mslwNN0;qmt_?ezlW^LfkCB}V}Md5+!Ih+5yzpH$id zZLnL{vyNCxla9*EaJf{wy*EKu#CVkJP?Rdj#t}&C_6CCAx{C zpb&sIZZUf>G4BUJqzS5fD|(Oi4c}1rEYv_vGe@4ng8aC3fHQko>mCq2b4pL`5RuI=Zz ztn~KCjBtIjC7P^qxh5vh!^QZzFs7c-?ijVX4wS>26A+Ho^$ru33jJRdFp~?wgHWhK zyy4Y^eqA!>*}%sK8#g@HzDoDO4PzQ)nR|Sb-$B+s#Bl>7ode0 z;=-D<{63+#B96zSVg~?VUvqht=Xgh`%EPDfoOpF8)E3~XuG@91yORg1$Uu>)09JS) z3Y@_MDBE00^Uiz1@@SBwXN%?C11MJ>_P4ZQ$UDlcsqVF!9T!^LG#vn3vkI$EG|rhS z*4NK`?1fG|VK3vo#n82-maF$l#~tv0-)1mxJZHlohJ`;Nu<6bbQvwi3vFB`}QZ>_(Noyb5(3Nd}4q)4t72XL%X14!KeQi)-1w?aA+<9p^hG9cbWGl zLYkq2FKh?OgF}*}XBj&pBXfRVdQt3D@Z#_tR^cr@Id({{AzAeIvN2m~+DQtFryD|( z+n&P*V4Y=!*H9DxMNYNynurICes{W^$A5Izu?_hY9C7!@zcTq^?ijUXS#^|h9C2;4Z zrlp--JcDufUr#7HJj7RAS;D56_q}fUwd83U_mDv0x93|=s{#F z6IFh8^5iA1A8&zThXWWn>2Az%2pm2bf!F<^uou3~F;~XMiM^GGAVUc=YwNHrgQZJJ zjDhb2f7<(~Xtv)KqK~c|-e&iMZ@kMeGVS08nbFAOR5n z;-z6M=O6Fao;07$5@Vbg)x8HFmh<22Uw&_$Ddb3Ed791ZfRbzmh<2Ba+dLhDV3duBI}l~ zb6rG|?q)Xq6xI&S16AWbTVwtP<^0EAyU(Gn`-t}L`i4X7!k+C+*wlXoul~mfR-B+Z z?G&3PeLRz>Cn!9m1M(Fuly30s;=k-wo)h|28zwSM-2}%rXgTOms1FucVC;_Xw|p8h5uWUn^YN>M}PVoj}opD z{@DjbWjiMR8oV^5GTV09xUy@-(O6UCkepM?e>RO5cHPr8Omtkn&?9E@2#1i>@We=d zu2s&g`Y6YSva5FEA3mR&T&MK>>MDiIgZ(N~95J(d46jdH?#%g=5rwnXZZ_9eXhtiW>xvz9pLH_J*8I|EaOnMv<5j)J zHsOCXJ+G;l^dVg;2r<@+ojeP_B*qJ(m%7LUlcFVxT*BhcKD3+sKKjb z_g*5Ns|`~OC8qwC+$LH6a(u;fV+Q}8`%}iFny)%jgau|C-^m?!{+n}l3@&}`ONXUz zIZe(?ZejmjeZV|9)^v{{RDgCx)72KHam5@9Y$7!GoTxqWjZG4-Yhdq&mNCi9*fPKMK`!+ z4CDBvnmjaPxJ`u%G|yh*SE{HRxa6?SQ|ikam-~Mk7>j*6-StKU(GCujN^6< z72DqSkNbCTX{?)i7v9D$woY%H*}u3)R=GTNcxO_t+n|Gg>yUrME8VougVxj5r!uzH zZ|mOX>oo73T$DpP6auFNrupZ4G>`0+ka#`Q#u525t-79vlDf@@4K!l{}Go@{?G%_3dT!;n`b%s<>uR2Sz+e} ztwR*Xe;wx(XOQsQfBBX(-=D;9I(GY5(|VZDvC|(IAL;<~z}mcQrt>=Fb|odM$6JaQ z!4HopZ4Q8NgRNz5Uvjh4Ab^+2nAxdxbo4EXJ}NpBlw6(>unN-;HnPWo3(_I_0kX~7 z_!zA%weaYpQc=n?>cKq_;IEH%HG3t3h6oQQo0Foku7}4aa!3ORUy)wma!94qdYeaaFzuPP!K=d6efz%$P-9rDr^EuM|*bL`Uzk8`_(ANk2~S zYDggrt>kMbhZ8XC0*B{3aHOS_l*GG4d)QRtz6@Whm|{iKs*hZN_=E)OKF+H4Ma3xa z;DS%j%9@YJfX9Fa(6XEMX7!2}96f&g3H-$k_4SX`6P)}~^YX_1zm|Dj=k57t#{bN& zGqPnbpFNV{oX1%kP{YN{exar_gd=VL#UIaBJ6?RY`nO+tgCJ|y^04LUf}_Ur;hp>k zcADuqm@l^9{gRDSbW(M%i`73?pQb0P5=Z`s(L1Z~z|b$T&ckb=uIU*Myz&Wcd~D9XD1M8BR^q`Gb;pg4*jM+PqYlmxwin7PB7S3)pkIC+If~PVNDGL7+Uy2Luj1CA%1FU_hp$GK=opl9ikmjszlz^P z*lEQeI^(Xfidl7_93i*`a6`_i7gRlTfI2Vn2WwAmzCZKJNw0tpvz253XzvdKG3slp z&=k>l6Rmwb&O1S8pYj9<@v^9*bR@F zEB-F7*h%*m2>&S5f_4D_SP5&t*d}k`2^)HHO5Yr>U-JhC16RG^QDYhcl=iM|t~l-%L4AqUu!r0Xl&$N0GARGLjcnf{-BVf_${C;f|{=OV?aGai8YAz;q?>o;u1x6cgP5`MCJ_3FgWXEHW*VXv5Z4Q*tw4*C^XTJ^zd zf+!jHhMAUhy6+EO0<#UH!@=6Cvas$wz1w8VQ6&$kk;pTwUAJ>wD|Mcc6XqPOGY{n$ zYN6(;%xHXlIoxe}?PPv%%hpyxt#YxlQil>nfVX1XB!vWomC8rcXVLCKV-78h$4zlJ zE31yN$>tH5vbF$^X?{aNUMT))o${A#I`(cq%nl?t0_y`h5M5S7uH{;g2L*E5Cu-0_ zLN^TXAK!-BR*C=uFpy>xc+|NCs@yI0-~kC#hc4DjeVxiv`TuGG)=KUO4z~b+)9Tr^ zhBXh02}6Fy@aHJA1L74h z_dMH2BAMditM^_*)n%HjF%Ecu{Dl0c;&los9>ni`g}>(dhhH~9UwbD&B`Oe$6nqp+ ze8pBU3Eu_;KNs}H1u_>~>aPqB8#pz|vWez4!X9QcbRo*&#%p3qdw}=DKv+6Nvi4-( z9}5xuWiJSL3&u5s=p1WhTB|Oge*tVOnp@?G?wE-QC%2Ta53S5gew0e>`rsz?zWC;~ zJ4OrQyP148O3k!BK)w)OkiI=McCMd1ntJqWTj!Y!j>6<^-FFROH|dffKhlP%22v7a zz+E_hp82&NphoUF@{Sy*#6KLWy;?AI2CI$K4KOLMEJZHi(Bw3+1S-9Wfq48D008!@ zNESHkZ7cPY{~UigD{rQ`i3=3lxKGIYWCB+Lgc&*n;IB}|fXr7^R7^qn=GbXD@jAGyIqgwI4*2Kpqh8(lT>i`i0eij6~4 zHq>Ask_z=W9D}oGQSS&Xf`$_jrp!dkx z(zYMGD&f@ul(Rs%4kklGOBlRR>J_s=P*WhndBQ+=Qz3=FOL-|?wWfRBc_a!g`WP<@ zWw6)*K(9i<1f2trW)B-EPk>CIlt{gO`?3I!%ep_{ti|32(=N0OltD;wGqeL?H;-Yx z%+*=bD$1>N)1(W4KuBKReXuOe8&(Yj$Sliq&oElt*pd9J|;I99#zgEQJJKU$-f!i{qo)%zNd~_|>{XbHB0Q~#o58EC} zW4mB|b6#8qh<^~B&<>*KDP-GT3EOR&@w9~!bW4IpaIHnsg~F1XB8$fv@0D(Wp}D+D zmslelRiJKHgExORRC8eECQba4F0&U25!ueB(M39vV3`) zTN*J`yexCxD{KNVdeIN0_aO{y5j-DN2>-N!q%iF7IB_2vZX9s5nn+fOmItI4ae64} zl>0Mc-g|G$ZlpX2pgYPfhhgQ$ReJ&u?Z?SaQVDt|Q}t7VT^4#>d^_lcp8yL8Xtqm+ z*(K>DI1oH0L=3@_?fR?w%;+5 zm3~Ph{9lq1#-aHj{>GniTvzgl`o7@RdWjuJaI#?sMk$zxPK=pB&LeUNlUfuxmj8*t zpi>B}?CaMcdpyBws5GhkYvv~t15R7&ZEjbCcBc;nSy`Y!40V9FZ!ZSbdp<9ZToJgo z=(Gx8kSaHM@r&$iI6mITB*V}$GhVGptBg(!?4{I4;RyP57j*y;%FyNU^74|61k~@G z;|u7eZHAM8cJA5AiV3bg+skIlQthC1CT|i%Xo-Hm`;Ra5{PUf!h6ul$?M18>N*ty1 zB$&D(#}x=Da&F&V1VcZ_KoHXB;x=IB2lAVu{yA3E31Y;ha5q3{L1ciU^^ zFbuS%Xp=boQAXw8mI{qS=O5nH|E(2G`{!!JyL$(gDRv(Oy}j9Q>l0IZVH@MYb>fJ#B1N=@-(!J&LkL34Q*brJ-ZRF0eJom zJ(6A4a0J4{qgsVwr3b!8hV&1&p7e4Vuuy&U%3;Hl{|5#0qz!Rb8>drpnp);1>Rmg| zp*k8_-Ib_g7#cr%#wDM-qiuZ5?!;sN`4Wz!wK;jxNXt_@;-YArrZ;hGG{Ur*ue;a# zRHhWW_(M@%_SCy~<4%Rh)^--UxabS(d$w{0LoR_Jw9r$rZ}cy%UbQy5K~Z+_?EB(Z zvu9&ghMXzl)lZYCY|Z*Ps^OHaeKtM!%bS+&*_vnLt>Id#Y7#y*2^I!DJ*`Rg2EXiz zof8^a`-QIzH8O8K|Mk;K$X>>hxrCT*XB(Y;?A)^T*s*okCj941mJJRX2UB8adQi~2 z7PXn0Mo*V0S^c!ukS)AFEfS3K64Pbo@kk%dTFS=aI@GSs%gZiE3|1#eChu71~{5Qqz8dv;mR2LgK zpLV#m@P}>k_a$L>@3BXxxwwQZiUxxR{*+`# zJ7mxRn;WWT)Gz|`2hXmPlx)}4@?KP!)3@I`?Fjsq{?EAk^P`Hgq1Zv(OZy9Rw{WB%#-^x4u%WaV-s)bby68S&xSE* z-e&!sf_gV(isa`9YNH6B*~oYGa&Y%uOUGUM$%_gf*Z4VMH^)O}@OxCarZpuwnKKe; zCFPmQF*)^ed<&(*WW%!Wt(4S{l=#Xk8`Jk@#GK{Jr(bX6R5EKD1}h+n4f1)Wjc z3g>2~p&D6lo8Ma&-c>TVE@oV)SNd(+tejB)pWfnoUub4ErH&04x1~R=UNLNWiQDCr z1dmBcsJp4uE_LusnR@(OWl8r~*L@?dS1zYpyK$4(;KMWbzeS%~P_{%}*4^FEu&Fb0 z23`jU2RkIA5AFP4^??8XLT2Y)OIaf&SK_S%#xe}Kb1fHYzv*Kb+1_8*I^owUwVGv9 z$(V_C>a2fE){j;dA9r;{(WaKa+O}wS*C_06&D{uN(qDSsE{ZP$mVayXNofvfU1FhF z7Hr$*lV2J*&+)^3!io(d&+sQZx2QEmJ(FXa-J*oDGRZ_|seV);fqSwH-Pnw@XhCs6AJW+ujp7`olykHQEYwn(!rLA`jo*JE(X9Sqg#HPSRnw z28Jel)mDdm--Wa_|MW5AN+XV&PVshIUhg3NZ$6(EL#V@|d)vG{+k71}cwTKRa!wF` zhE2wNeHg!fQ!87-nv<5X+w&(pI1G_!^1x3cSrPPiI=rlhGzDmB!yIYE1Em6|HtEiCpmBHfykKl(HX;OTRDITm} z@i)Y2urdIZXi%_OYRxygsmTK<7YP6n6^!hm1qMA9qmCF`2m5i-L2 z1&TQSpfl}xXBc_*f^CkSMFS-S0X;o%A44=0P>qlR3e}4NOx&alqttjHze0aQsYqHC zC>U^(;vKvi%b^WI1HueE3K=qmc3(@@BiCt;jC^uo$sByPeLIqT|=(G;A_iPVg`$ahhDkp@=A)-!BF>a?Yby=i9Z9smX&%)&sC7I0D5Ysq&%~ zoA6Q{X#s5?e5=>Pg&7vJuBh3N6xn()WUHgWS_N_C3EARL_+Vg@qOx4ltg& zx=*QdBfMbPUevkaxvl82b3r#sj}{8MQ%5cH9XMaAwFHlS0$lmn`F{*diEGS^AKZ7k z`4E|<6I{x}fZi4JVs{320 zSyLCXll_*@Vz3V6eh`_1=VWgw1{(OJm>6mz_lU3_?-H4<3B8!*R5>^XLus6ViZ&@U zzpyQ@sq0L+V9}@uWtGl1V-=vv%aDa|o@w6v6j0mb1HM)AMH})E58vtg^ib(m#f-OxXU3-h zR8i!HN85X2wp|(WCU@mU~<4IG(k(mw+@Y% z{Sh%2;`Ftj{GhHoFUx8#<9c+hT&{=RGRSxtcWmx3@&m*mH-n@13B-$TWHv`}O85|^ z+G^~F*&aQ{8h+V5LGV&{Kr8VWS^_wHsI0$Je?`>dE&Sr-o4^fNL3$@rZN0YC*r0Sn zZ1(u(glmC7=4d5A48)Hi1cN9pKUd7|_|eo?frvNo%MEGzU#%>Eg+U$4!t6`YkhM!R z7OKdeE;=^8M))COF+``jxD7=a$N_`Wh9W$LtU#1hwAH0;6IN_yqU_@%X5-U-0B3*` zQK;ERwA1RBRSaR34_L3 zWy6YK4@O)7j?CUAmOBlX3B|6t2UZJJ?DfBcVc1V8FHd?}j6g7`6bCD2HGtf*WA`N2 zr~nhBLEb5nDlyMfh@Jv=5pln+mypzN_u8W1z6zdh|4)csVd0fC^LF;{LLzc91Rpf3 z;x;Zd(F@#~QrTOCxS$;pq*ju86cQwo;yeIVFZ7&USjV~uJL)ykgr0y@61HAFe3WZI zj1v$`1xRu~`b~Z#fLtYypAsr&H%d5AtTW1cd_8Ky&?rLxZ~$n9*F<%pb_`dG zRHK(FfD(J|?!li#<{r}RBC!p=5kNq|s7NkI9ws!Y`_VYhDOCV8%|+Wn(!5qgo^(Op zk{dGFt`}}7otA^<>)KwNC3vzS=^_s*I2iJvAfV!qHJNj8@!&OLflUz6Y!oAcuS!pR z1Z9rn(VgQ{@Xtc$_MeZW?v(&hg5D3RXMCu{Kk?wv0wg{4eT1zOWXZs(t_6J$cl;B; z38IJ%UaL8=kd#lr9j@=VD|IHmRr3?6lHs|hV72P0i4lqhC#^4``f!;ayHKbF0EU7* z)TV~2Ji+n+ZluQY#R5`9L-Huh4q zoF~zlZk~&_BR+u?`-DU~Iy!0rXCFr9=jG}BJV(NP&uWMO?;wh7FY05qeUv0qN>Nd4Md*{TLUqY9 zXOOz|c*3UW$2&TB^$^AH=&afay(sL6)nGWSwYH_?vOO6b!*nk)Cs1??j1f3&aKlBo zEXp@Eujl3SseSc)!@|%i;I8+lf3*x_kr75-yF~)PIz<%PnQCh@p^^Le9q=~4X<^bcMD?&QXer((H6cA%gQe)!Vpd_WR z5fbAt0zfS8(b!K%+o;)-FD2_EP{)1ry&$X`dJ44}cC0&xUscjq#r7eJC}%)PB#ImU za4g>*o6GTCC@l^&7aqcC@p<;dz?2^_1TOqcXJ5<^|LgjWZiL_*G-;az0a4cgu@Obe zy;dLFH`QmL35K)hT^iC(9@aICpn?SuOUF4xX6<<>xv6H547(5m{XJbp5Du$sa$iN}bH&@`Z7VmwotLno>+4*G%6r zhlgg#+=aS1b_;*j{4()Ko%HVhuC@3{=i(Vtv*aW3mv#6Tcx0q=xl8<2^zDq$0w85x zY5nRuCFHKF9r|*`AoOJHreWih;~Xw3n+`c%4zT>a(t3qog$N<%C^-rL;9j5Gz;jkk zR_$%XlP#~qpTx6#m@IKm*`_ZS+uD2cyBH}@3|Otcn{S$w}fD2zM>B7A?{;3oS?6)qjfDCcCk})cU-^ zdKTVqJ_*0(wT~G<7p?U+F)ZkYKNECj(Dt_M7LwTAdh%GfmWNH<9UjBQWlu$UR~m>d zdCj_BMyC71ji9Tamt3*>VJrhjj*5QNn=!-P+m1gkAL9D^=Vlo(CMC|mBV69u1@)C( z>bo;~)2iPjOZ{`{^n%f8hXAKO8(%^2+Y$#TI|=4FA3DW$ru?^(g*WagN=6ze_8>{(Mk2c8-68 zOEP!Knjc?tU4ywqotSv%oPt5K8H{Zw&dmkn{Ts#ce+ulNXd9P^dxAmi>ZN}h<=&gm zS7qk3`DYcQ{A+fHth~xeW)8jz&xaoxPI;~SU79a@=soQs`?~&ql>VllPNsDhF2VK? z1?Fva@jt9@o-*Lw+U>&d`dhs$-{7o1xX`h{EFR~0L0uhLHZtBsoY7I99>aL5E?Cfn znk{aqY?AxIb@HdlZ_F`iiL+=@wzBf#QCYMw#So+nWVw>w@0m z<@83wogktazRgDh4~xBd!hh6T@6|O3GB}i`lb6e{=2?iHHYzq(0F6BF*5rA{3UM*Y*q*{xJ2X`z}M^Y_RK(^ zhwF8@J75%$LQ;4_l6VoKM9t|PepD?@df)akR>`3A{oCM4a!nKL%pjaPR)zSUt?Bx#q&Z(5i%1 z0aw7Lf^I1gne+u6e4bx^8d+K!_8B+o0e=R)z5swWBnhQI-|baf6wJlNEu{RYENxrH z>KI)rllDs1BIX_)ittMPMZcsp<4<0LiX8VE)&AZk60ch?VCdC|1Rqa_ry5tg|AP5u z@kxNaL86nXO6Bca2fMj-!(X^w(jw~Vf#V)#5=N&3$F!ok1|8olY!(I6iinuSY_7l1 zQv1{iJ{?yJu~Q2ont88>2~Qtm4&2fyp< zQ;>6k)(r*G|GFJr*%OGqBk?Cd$kNg1`3BqvSwZd#>h%FvARUcnXIc3fRx0SyjLE^P zEuuo}ay~9+;1Glq&)$BO#^l$H#3hLMPbt85auJ^g&=EQc_knkj!7)?4=qA2?dMJQt zG>;+Np?Fzx%!BWv5M9Ux5x9opi@I7O8&TR+f{6evk8{yPZCKBw#nLLy$A_&_p~ZfC zYPhRRs^1D=sN3$<^>!iMB*2*Od}}^adw+*}z2WLs_@8!Q_z{M?p!0*|2B_7(KTQ0J z@7XUkp8RDp#E-qNV|1us*m5iaoQQM;JRTs^jyb*zNxN8@9~if^->a(^JotF+TP2En+%}~r_hcg0#@6fc9t}vw#2G0K_0WNmkMbf6Q-g_O zvns#%c%3F~|6k=M@coWycirk6bpLzwZ0oViUMMX<#zL*IVybaJqr?;r>*?{Vu|MXH zq%{Zt|5^^h9sDjR4!e8K2}h<_1GPaN!o5)0xAM`Kk%@5y#RFejaP#o++3kRx5(uu1 zev=1E+N8e_oCbThlPpfpUJ-!o{5DMe*%<=U~mPSHizL=9RflA zc&nbl7hv6tzO*Ufat+$%0d zB-KepWAoC15`@5fTNGZ}KXhe-ykSv)O7sQ`!>|1w+b%#objZ4NKa<_>;SSevmqMG; zWy0=uEFB{AMNe`BAb2o_$!G*92MEC-DsK)j#-N6_p)Be>tPD(s55)XcZ#amxRITm9d0>D;3_ch zG2(A7?~iXXcMt-YW`_YjP<)nn41^HAlbfCNqLz7hy(f=4M_b>B>^-e|QsAxmy zL*uM1!(RnG07XP~Q3MSoT=^x(GU<+4&<^0gtb1dOW23!T^9uLN*O7L>9{m1KE33FW z>Ub=dyo5uv$%q5V33KVg=eeg*+WC~*J%y7TDn2*lMjm(?&L{I(;#c>wgskV*q6oS{ zj^Jaou2?P5@C9nVNCjd`PGa&mV^oDOyv)5TnVYwuPO5@o{C)m{N4dcUA6C*luOZXW zlYTfi4p|F1`<(4RzPZ-vII0M;G9!19LK|YQUL`%mb&a#C1fHm7=J@u%$sEUk<3MOU zDZ>>TW@ug8+OoE-l~^dL-vRv4iBSG$R>$0>arGHcZ@Y z5(v{HwH@b*&78PGM^*&NEK|KLQ5$T*CiNlnA}`NLz+A|x0M3UJu)o-FXxmR`zQKKgp{H7C|5x#O|$55ME$X5*9 zBc@;<0;rXHVl7F|g4}5_jF3evAjDkYTo6fx+8BA(fLv*s9%)HQ_eg13)FeSo3$2`Q z`mv0uuc!u%lGK)w0tDdm%h1#AhHRqw%x31iFl|5JhA@(x z8M5IXoft@aAo}iE$#ccb6jnouQ^06R`dSn+LC!;^jX(GsJU5Ehw5@J{xSPglV#A<* zZu(Vf)>xT^0(*}`V^>X<3OvjV20gaDhb^h-{r|)^N?+9(O za5p^g*}3t?a|c&|)9tXZS3)+|0Pv0?s_0Beo*7;Huje325zQg-nnX(D>QWa@5cy(K zyCZ%!si`sWw~^&elLa0?_ZFDM`9bDHBl(p56VwiWP(Ue}d#XFvvTd<T@D z*{jQj0i}@>QiZFvGXjgS2S9#^jysyeCZ~FSGftAfg3A%H7g@5Vs&HRg?q9jof& zxhU1aXicNDf0mWW=O`xJQi(Q9Nl6Jvck*7pJtBP|V^XKH0yBOnO#~2MqL^VTHCC8e7-*l;d&NUYOSO=GS?Q8e0L_LWR)8jFHF_fZdS$DY5LNYJY zE41~yhr3|^&%08cneHkslP0QfGc+3|;&9j-C)DiKIGLxU{%&&G-C5$V*06Qm!Htho z21YA&364`clX*v6ZJDXkE`Po1juH`jfoVB;-9(Uhw@Sw`Q{_{;S9*~08 z{MYnj;&k#432wDLX3nE8U7a)6l3ZuQ43Mvn^4x5(XTyVs&*&2o(am=*P( zw%F7qAX2dG%r5Q0&{oaNR8UzxV%1ZT_c#t{H2QM-_jxdHul#PfMav7yfKv$50XbpjVu1v7PPh4(D_z9^#;dwYK))A0H)Y~9vS`WT%Z%ok86(NRb0Bq-=9Iv!3n?4Aq; z#$H^6Bdrss33EWHE)X7MyuqIJ>XaZW5zyaL_Bp(;$?^)t6(LU~Dvu$`=Yd*!KhsT| zk06SkoMJ-!o#_vZRs?+Ti00ek(~=q+7-}U75OW)wNQyt1QiVBzW_6U7=4mfC+|ewy z;jI-mk*H%4RS9CfH|LjQIuzlr&{xY`he!b&jJPv+3}+K7E8)!?2)wi+-xO{VxpnC) zq4d>(Ac6wP0QIdxYcA0#!=g?PcJ)c~TZdE@z$wrBo3-hnsD8pf)e=&ClgGOT1ZSK^661Y1KggQ!?7RiHckq$*Mw;d zFVeq-90gO(FD6O|r}=B&10GmHL_H8;oZf%Ky?UEUUPOQ&_dJ&EmKJY3Kj%`S5=VUHl&o zkpKC${`X_%zkjPE$1h+;&OZnT1q>Hhpy+J@?9F0thTj2g29D6Sgxa1T!U@kE+Q%kS z37cbL;LpHe&)gX(nJUE^!w=zrp^00-Xka*zWUu%GTQYofAY1{W0WY&bSyFLLShubp z=-=$9ASNMK_Kpmns!uL!GZ+iDy>zRo*cm$`UbcL5iITfIK82l9%=2#bdu@YtK5Eks z2TE{Xy~b)MPyLvj_LX(FL$vL`x86?RlR*jB;B@*x%0PN@@K`yNNnqJ0SSPrvubE`` zWRHs&A)goL(&0M*F7aKlRZ!vwB6tHJ1kr9RQY)B0=So1X5l!@K8w5Bj!y+Lq@fxvx z*J=xHU(Nv!gb#WdUC0?0@08&IC$GQc#OQ&OF|{S*hXh2FH*QAtiYg^cXQct+fW_}O`!s@--w816IlG!&9lm9SrvY9hg7W)&yigajtq5_RCK zG4RF;p=J}0z%Vo}G&vPF6aMq`34mD)+!Q2e6(yTwkEEFZlwf1|F>}jlIdqp1)*ve+ zc%DZDUj!|t*opcZM zSAnB+_<7uGT$kFy-FoOja9*=>aHx2XO-|#A39#^Nvd71aaQd&2Z28Q0Yp>>p@$?}-LvP# z%!7dvO0}ZsuRm{%d>ZZu6@jvaY9i7~YKAtM?y};ej0q}CAOwT^hJ-#sJs?u2J}Xsd zgZ{$v`~7|wm#rr%BX6LiNTgyQi7l#jaY6fFgF#7aU0#)o1~6U|Hk zX{2z0KPD$F#nDw!6C)2(%@krErc9Vq6A8cK!oIjz9bnC;?q1a;GV+h*WqKm5-(Z`4(gcr!;ozosn~JbF^&mEH_n&nA%A53n(9gpi?N? z%>Vdf{=aT@@tY=u!r{k>(RC(_0Po&gA;hiX5SdQgHsy3? z6_~DS2G0Q(UPo(wgPZQZp}@fwhOPEr%P4;LNx^!j-kPXvsNf1rw;)oRz$EzQs-VdN zNPip9>0FeTssC?FYQDifQPBk%7FJ*7X^w>)6Ir~hpcFpatk9oDc|({9G3YcFC)V1= z=H|7Z5bz*-u42BdA#ABI)We0yz2mtKjX|S3+75uX8i5`lR!Kfd&?Rm8f85#^W+-tU zS^;v2lHH0%01T;TJw1SM1XMekw4nJE#B2Q9i zkqaKP1xQvvGD|vqAiZDjDLo&3Vq^Bnx?;6vj zi+Bcb9{)J6_fT+&BPJFfd{F7Fc5u)hWAmO;0wf+n=vEOS{_A{1L`3u8>W9#=jeh?` zIdNSt=RxmIXbPOrkAcR&ZWzRsgu{|%5Q84#3dMy27*UU-&sMRtK|%i+#x?k9ZSG&af`Bt&jl4B!S+ykDieVXh=Q&Qtj8QRWT9b1=6)fEz#c zJBbR5daYk|Pkx^A}sLP(&;yR&ONV9DLc>EMR-2 zL{SpUD!_CAOD=q#G%psnWcS^pe26vWO0Gj6wj@js6a<6BiFY>PcmOd3cRY^D1`O^) zjy1y2FvE(8L3+9JU9G$t!zruJ^G7Mf&gd_Z&aA>XZL-?MtTjFC#=*iY(@8OpN8B%8 z$jb}Izp^3Gq6%+oEsr3G3fdk@gW<;&^C@a&FnE=>>1prWLgqz$#Hlg=StT0Ai*E8Y z_pc99-O~u^DSWyC8Oc=p&)HcH!Y@igp4?z0Y)4GQk<^Uii+PMctg4^PzPNzr5YOg4 zX73Q5j^3L#c|4F`Uo}oM2T+VC&gZGb*k=Y;!x7SgJr+!nynQ80xn0o?+Oy_Hbs^2K zN-8_?JYjKgcvD``u@Ei?h!y8C$Z+9`WjdmxBV00Owh@b~&J!_gQ>}rIMbVdft<}=p zRrz5C10`q|NAaT&;Ru6jky@Ufi z$Yzo&pfLj*M}`Mz10W6o^h=I=>Llq2gM%Dr5UCVsjnnw3L~E@GX6Ju&Qx|7nWO_u% zImD3s!vv*cRKerb*Y=%JVBroU#l88y{+XL)m@hs9#y|#shA&%`L8W10cX~eS2gss4N5-yYZ$iH#aQW65F(bFFkfZjQDed`qXu-;y69gZeEJ#* z%pGR}O7{-DnRdQy*$?(zef#5{T=MlDtkjA=jkIdi{4jRl8u*|$2(jdRKInqG!Vu+; z7*5-^!J;B=b%@?9)&DPKJt6h9Y>hSDRw&) zh=FR`?}(pUy~-ScEQbmNzk_^DPADGRd0kuVXgm$0Mu2 z!R}WX%rW6-9(1F&$8#8)tCy2kQA^6PZ$K?jy^}`+c3xXa%&vq{2byf6+YqILLVq3u zAiFHM;Pqb=IOidXmpNcIzw8e8--R=i;mFD&fY!)^0FDi7NFsBRhY&45Ct7R!jHOUO?JnW-v+SK*n^&t1O zZ;44o!uQGVAwCuFds&yfK84NqwXeTs+t}Dh!1wPb)-SrW%k|CrbFY_n+G^Zf2B*sQ zOe!M=6UF*Gy-Gm18x=g&R$p$oQ>yO9lSr;5HcdVI4uAM!U=HyrIis{1i}L1W%X1DR zDWL;|waiv@Pf8~~KB}oxG%&I z)naFC(7*w@z{cG78Cwq>coY6d(6Mspg<%889Chn?!AA)}Ha0f2i$N<4-_dz&|DA|jI8+-P6qDD{SB`b$+lGQ`%llSA z5s~V?K3YvUMx#(5ySXoOVb+hZz?nw|tnzXVs?Jg42`*cv&8tuOtoZs1+im?Lz$C(N z#Yu%N1uTQdq*!cR7L4wBhNmO|91Zbt(T4lcm5k%CtZ!|Nii+ZTeE}vXE{&-nU23XG zfCV>SDC)w|v9a{sGQ^dlK`k|;?CZX7-=1PrMFHr&*2s$&FSg@zZiQx({W&Cjd;|hw zeKa&TFKip5&?y|h#hHe&xjb(QWpLjC)gcKE(w8)&I@MO89pek;?+5Z{lB^cuKg2Kj z?)X~U>t^e(6=3o&E-(T@dp>q2XyEWBdUbBrw-~E{)DYxjMnF-bxLx?KoV-`^oalf>*@j4gSx_ykd*sMkJh!35 zt5bpgb?I%yw$MN{ zNJY_Nwr@4&b!)8LksECvlUn0-1|`kYRjGX{C)Qqe*)HXtX_5OPhO26E zvGb{4^H***f6He&Atn-^rlh(rqjFK9y5kODeabp(eF8SD>|8n2X%#8)tf>C}t-W#8 zMhgzOn~sjW5!2F;Z%q1?>zyXbvI9Q zJEYcc%oupavAu8Os{9*CDgplMA};L}a1YTs4Jpo>$0jU9f{gpOtg03Nf5EK(JK8lP z9;P&woyP0*L!52wvaL{MERV~L8_?6AjLHfn+nuP9Jqu~=BiYUeB*<)QE+i?Oo=yob9fuY~1#bw@DSuYR{f>!tJd`RLP@;prb_3 z1WBFW>h|DP?Fa`)FtbeU6~AYA4>e|c=~V0Uit)!zp5(DR`;#vuB&0h4>bAM+nGuLS+M|6aGiobbGrf1h=5;pFMjfudI9lyAJTEM2)k{ zak_Mh31GVz`)&ih#e7-~%^`~Yhdez6)6>&0q_N>8)K;QQVbO-|OUhaT-$4GAKht0x z(_cHK*{T+6FHYGhow`$c*mJE-6XGM_R0&22)edqLTn-LCY@PENiOO!w*v!DBChnaE zRDN*(e#WOypAcA%1G%fKi=0#;p`l2igC)+byJiXPDDZ~$sC~7_4Z<6XT&Ck@kZt*W zr8{--TBx+9iOhWbe;Cjf!r+zFJczBY0dCbV&90^%W`~tQtE@p;|UNR$)oK zskd%%MRm=MLj^8tX9w|HP?{uCf-6xx)5ss-(zt$jyUn5UJr@?p8c8V*#p?Yd&&eC1 zFPyQRS(t?heFRDr)h%1#1fIv3@^4g}xVv-ofZ%-7$4S?(KZ15yK~3#qYpX3|Y)$e4 z?Epxo1gTnoovc}xmRQ@PasciV<^wfq~j2(!+|+DdD6%t z43-SX)D15;d>ov`xWh2kde{`GkQJ~$veyg28+Vi?zgY3ILU+iiYmz&UfzWs_;k}~q zS#Hv{1-rZ5x8QYad*09BhY!29`?=9szTr8e(SK+rxqtuufTu}cqeqT-}@X5mu+0}ViQ-@W!Z3?PPF89<=Y~ALI?`x;%gZ|e?oX1JUD@ZCOcJKV;o*#`Sr^9+OeMI@Z!+?ZGLHI+EQ{Pn zg)+B{hybwP!*eO=dBi)#$Q6?26L(RLTR~*FJ(EYKwzEpBO8)-+)fhhPVFTr+O_NIF zy!&S^UpJIcHjUTYi-~$_eIGXbqksLVgxcaPUW~#uT4T+LDZhi0zMh80u{Ez#T9-?7 z#-3R4aSQaYF?W;=-}awXoW1OQ#%vWwkG+9;(1C)QP9gnhUoCoi&r*ewtfaK&oLSVV57Ls>n z>Zbo;O$wAjlKhv>_%DkB+6|}4+;9IfAOH6w<$t4Df}O(CBtJ4{>+I6Aekr!x-yinRypB*v@pAhJ^^*hA#`UZ2B_zQ;k-jwI` z%HaES(AR=v(Vv;kp~Ii26+8A4RQxQ)2F(|!lT-DRc{8b>l7H*yvO4U!KcxBl-r7Zz z!LufbPNT8NJyOfx&Zv^_PW@Bjs6;%F;Bp9@GsRKc%YcmX@5K)U1MM0=q0hNF#2%^M5 z#0As@k^)<|N>D(H1KK@j{n$_K|8m~JeIB~4hJ=QC0wy{QLK_YL)RrqVNSEWpyZ(b(m^wj&H-bqzbT#?s%U96{Fl+VR&p zn=6>nvY)&bFI6>hTpmyIu~(q-^}LdX(O?|;J#B7*EvH3)fO>@r13=XH@k@mv>h(j- z((e;AdZCM2Z}wWVW;En%qluR5+PINf%w6vBGpV{(PgW!=bjRQwaqZol(BehHft<8J zr)5+LYj3jXSyx5G`Na>qt7FwgzB1eW9?_Ut@g0zRe<>vVDih^-7q+11zPZ%o|;2>emVfg6$k}afhaSJvHeso~Z`9DekdFP92HNc4kMSac*a( z4ab7e19lq4TgyZ8u~MRvK`H$3R-7#;bEL|Xe}uL){Aa0jmrPo_4{Imh+QPi`CkzA| z27@A6`XcDdFl+)I2H%<`C?FsYeKiTXbI6j(>@LRO(j10_h5$>-tBCEX2|oG3iwMjQ z^}Wr=k-~&RDK#hv4`PEW|3b`0+%T@(-5%e6JXIH0uHMcgP#rNUYC)8}+tHHtaW`Hgw`z48A_;crHtw9_iQ;)$ilS zSAA7#b1`2IskqtMGfQW;-Hhi<9b^7#@*~yEw)*A%YdwEh7V2W{QE2;b$8)TggRtkz zoRdfz-dP=aPgEya>5PnDw9f}om>O0X4#7$(%1ljt3U2=C!N0oon9WB7x?6SJqyeEDMNLv4nJgb+YfusIz++7O=ajo>n@3*cZ?x_#^1Eq5pR zTIdh`1B_haZ?~;dCkSGlJoc;8e2v#L+G|oDD!* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml b/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml new file mode 100644 index 0000000..0b2bc14 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.SIM.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml b/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml new file mode 100644 index 0000000..d7fbd32 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/data/ru.omp.deviceinfo.Storages.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/device_info_plus/device_info_plus_aurora/example/.gitignore b/packages/device_info_plus/device_info_plus_aurora/example/.gitignore new file mode 100644 index 0000000..3db3823 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/.gitignore @@ -0,0 +1,47 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Aurora generated +/aurora/flutter diff --git a/packages/device_info_plus/device_info_plus_aurora/example/README.md b/packages/device_info_plus/device_info_plus_aurora/example/README.md new file mode 100644 index 0000000..ae0d7d1 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/README.md @@ -0,0 +1,21 @@ +# device_info_plus_aurora + +Demonstrates how to use the device_info_plus plugin. + +## Build + +```shell +# Add an alias if it doesn't already exist +alias flutter-aurora=$HOME/.local/opt/flutter-sdk/bin/flutter +# Get dependencies +flutter-aurora pub get +# Run build +flutter-aurora build aurora --release # [--release|--debug|--profile] +``` + +You can collect, sign, run an example on the device with a script located in the `script/build_example.sh` +More information in `build_example.sh`. + +### Preview example + +![preview.png](../data/preview.png) diff --git a/packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml b/packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml new file mode 100644 index 0000000..566c597 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/analysis_options.yaml @@ -0,0 +1,4 @@ +# Copyright (c) 2023. Open Mobile Platform LLC. +# License: Proprietary. + +include: package:flutter_lints/flutter.yaml diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore b/packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/aurora/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt b/packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt new file mode 100644 index 0000000..ef6d32e --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/aurora/CMakeLists.txt @@ -0,0 +1,50 @@ +# Copyright (c) 2023. Open Mobile Platform LLC. +# License: Proprietary. + +cmake_minimum_required(VERSION 3.10) +project(com.example.device_info_plus_aurora_example LANGUAGES CXX) + +include(GNUInstallDirs) + +set(BINARY_NAME ${CMAKE_PROJECT_NAME}) +set(FLUTTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/flutter) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS "-Wall -Wextra") +set(CMAKE_CXX_FLAGS_RELEASE "-O3") + +set(CMAKE_SKIP_RPATH OFF) +set(CMAKE_INSTALL_RPATH "\$ORIGIN/../share/${BINARY_NAME}/lib") + +find_package(PkgConfig REQUIRED) +pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder) + +add_executable(${BINARY_NAME} main.cpp ${FLUTTER_DIR}/generated_plugin_registrant.cpp) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::FlutterEmbedder) +target_include_directories(${BINARY_NAME} PRIVATE ${FLUTTER_DIR}) + +include(flutter/generated_plugins.cmake) + +set(PACKAGE_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME}) +set(DESKTOP_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications) +set(ICONS_INSTALL_ROOT_DIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor) + +add_custom_command(TARGET ${BINARY_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libflutter-embedder.so + ${PROJECT_BINARY_DIR}/bundle/lib/libflutter-embedder.so) + +install(FILES ${PROJECT_BINARY_DIR}/bundle/icudtl.dat DESTINATION ${PACKAGE_INSTALL_DIR}) +install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/flutter_assets DESTINATION ${PACKAGE_INSTALL_DIR}) +install(DIRECTORY ${PROJECT_BINARY_DIR}/bundle/lib DESTINATION ${PACKAGE_INSTALL_DIR}) + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(FILES desktop/${BINARY_NAME}.desktop DESTINATION ${DESKTOP_INSTALL_DIR}) + +foreach(ICONS_SIZE 86x86 108x108 128x128 172x172) + install(FILES icons/${ICONS_SIZE}.png + RENAME ${BINARY_NAME}.png + DESTINATION ${ICONS_INSTALL_ROOT_DIR}/${ICONS_SIZE}/apps/) +endforeach(ICONS_SIZE) diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop b/packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop new file mode 100644 index 0000000..88c8b51 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/aurora/desktop/com.example.device_info_plus_aurora_example.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Name=device_info_plus_aurora_example +Comment=Demonstrates how to use the device_info_plus_aurora plugin. +Icon=com.example.device_info_plus_aurora_example +Exec=/usr/bin/com.example.device_info_plus_aurora_example +X-Nemo-Application-Type=silica-qt5 + +[X-Application] +Permissions=DeviceInfo +OrganizationName=com.example +ApplicationName=device_info_plus_aurora_example diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/108x108.png b/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/108x108.png new file mode 100644 index 0000000000000000000000000000000000000000..984893df6c30793313b2b3d3912a6e95977e2333 GIT binary patch literal 9954 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�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φ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 literal 0 HcmV?d00001 diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/172x172.png b/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/172x172.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc271ba73a05054cdcb09780a4cc56cc05d5ea7 GIT binary patch literal 23377 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 literal 0 HcmV?d00001 diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/86x86.png b/packages/device_info_plus/device_info_plus_aurora/example/aurora/icons/86x86.png new file mode 100644 index 0000000000000000000000000000000000000000..5923bb1113acac37ae5d280245b152cc4a1b242d GIT binary patch literal 6632 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 mdnuQ%0#85i!0Z3VDE}Y+awRoL1wwQH0000 +#include "generated_plugin_registrant.h" + +int main(int argc, char *argv[]) { + Application::Initialize(argc, argv); + RegisterPlugins(); + Application::Launch(); + return 0; +} diff --git a/packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec b/packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec new file mode 100644 index 0000000..8706033 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/aurora/rpm/com.example.device_info_plus_aurora_example.spec @@ -0,0 +1,31 @@ +%global __provides_exclude_from ^%{_datadir}/%{name}/lib/.*$ +%global __requires_exclude ^lib(dconf|flutter-embedder|maliit-glib|appmanifest-.+|.+_platform_plugin)\\.so.*$ + +Name: com.example.device_info_plus_aurora_example +Summary: Demonstrates how to use the device_info_plus_aurora plugin. +Version: 0.1.0 +Release: 1 +License: Proprietary +Source0: %{name}-%{version}.tar.zst + +BuildRequires: cmake +BuildRequires: pkgconfig(flutter-embedder) + +%description +%{summary}. + +%prep +%autosetup + +%build +%cmake -DCMAKE_BUILD_TYPE=%{_flutter_build_type} +%make_build + +%install +%make_install + +%files +%{_bindir}/%{name} +%{_datadir}/%{name}/* +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/*/apps/%{name}.png diff --git a/packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart b/packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart new file mode 100644 index 0000000..26c9b63 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/lib/main.dart @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:device_info_plus_aurora/aurora_device_info.dart'; +import 'package:flutter/material.dart'; +import 'dart:async'; + +import 'package:device_info_plus/device_info_plus.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatefulWidget { + const MyApp({super.key}); + + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + String? _error; + String? _id; + String? _name; + String? _version; + String? _prettyName; + bool? _hasGNSS; + bool? _hasNFC; + bool? _hasBluetooth; + bool? _hasWlan; + int? _maxCpuClockSpeed; + int? _numberCpuCores; + int? _batteryChargePercentage; + double? _mainCameraResolution; + double? _frontalCameraResolution; + int? _ramTotalSize; + int? _ramFreeSize; + String? _screenResolution; + String? _osVersion; + String? _deviceModel; + Map? _externalStorage; + Map? _internalStorage; + List>? _simCards; + + @override + void initState() { + super.initState(); + initPlatformState(); + } + + // Platform messages are asynchronous, so we initialize in an async method. + Future initPlatformState() async { + final deviceInfoPlugin = DeviceInfoPlugin(); + + try { + final deviceInfo = await deviceInfoPlugin.linuxInfo as AuroraDeviceInfo; + setState(() { + _id = deviceInfo.id; + _name = deviceInfo.name; + _version = deviceInfo.version; + _prettyName = deviceInfo.prettyName; + _hasGNSS = deviceInfo.hasGNSS; + _hasNFC = deviceInfo.hasNFC; + _hasBluetooth = deviceInfo.hasBluetooth; + _hasWlan = deviceInfo.hasWlan; + _maxCpuClockSpeed = deviceInfo.maxCpuClockSpeed; + _numberCpuCores = deviceInfo.numberCpuCores; + _batteryChargePercentage = deviceInfo.batteryChargePercentage; + _mainCameraResolution = deviceInfo.mainCameraResolution; + _frontalCameraResolution = deviceInfo.frontalCameraResolution; + _ramTotalSize = deviceInfo.ramTotalSize; + _ramFreeSize = deviceInfo.ramFreeSize; + _screenResolution = deviceInfo.screenResolution; + _osVersion = deviceInfo.osVersion; + _deviceModel = deviceInfo.deviceModel; + _externalStorage = deviceInfo.externalStorage; + _internalStorage = deviceInfo.internalStorage; + _simCards = deviceInfo.simCards; + }); + } on Exception catch (e) { + setState(() { + _error = e.toString(); + }); + } + } + + @override + Widget build(BuildContext context) { + const textStyleWhite = TextStyle(fontSize: 18, color: Colors.white); + const textStyleTitle = TextStyle(fontSize: 20, color: Colors.black); + const textStylePath = TextStyle(fontSize: 18, color: Colors.black54); + + const spaceMedium = SizedBox(height: 20); + const spaceSmall = SizedBox(height: 10); + + return MaterialApp( + home: Scaffold( + appBar: AppBar( + title: const Text('Example device_info_plus'), + ), + body: Stack( + children: [ + // Error message + Visibility( + visible: _error != null, + child: Center( + child: Padding( + padding: const EdgeInsets.all(16), + child: Container( + padding: const EdgeInsets.all(20), + decoration: const BoxDecoration( + color: Colors.redAccent, + borderRadius: BorderRadius.all(Radius.circular(10.0)), + ), + child: Text( + _error ?? '', + style: textStyleWhite, + ), + ), + ), + ), + ), + // List directories path + Visibility( + visible: _error == null, + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.all(16), + child: Center( + child: Column( + children: [ + // Info + Container( + padding: const EdgeInsets.all(20), + decoration: const BoxDecoration( + color: Colors.green, + borderRadius: + BorderRadius.all(Radius.circular(10.0)), + ), + child: const Text( + 'Demo application demonstration implementation of device_info_plus', + style: textStyleWhite, + textAlign: TextAlign.center, + ), + ), + const SizedBox(height: 30), + + const Text( + 'ID', + style: textStyleTitle, + ), + spaceSmall, + Text( + _id.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Name', + style: textStyleTitle, + ), + spaceSmall, + Text( + _name.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Version', + style: textStyleTitle, + ), + spaceSmall, + Text( + _version.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Pretty Name', + style: textStyleTitle, + ), + spaceSmall, + Text( + _prettyName.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Has GNSS', + style: textStyleTitle, + ), + spaceSmall, + Text( + _hasGNSS.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Has NFC', + style: textStyleTitle, + ), + spaceSmall, + Text( + _hasNFC.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Has Bluetooth', + style: textStyleTitle, + ), + spaceSmall, + Text( + _hasBluetooth.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Has Wlan', + style: textStyleTitle, + ), + spaceSmall, + Text( + _hasWlan.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Max Cpu Clock Speed', + style: textStyleTitle, + ), + spaceSmall, + Text( + _maxCpuClockSpeed.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Number Cpu Cores', + style: textStyleTitle, + ), + spaceSmall, + Text( + _numberCpuCores.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Battery Charge Percentage', + style: textStyleTitle, + ), + spaceSmall, + Text( + _batteryChargePercentage.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Main Camera Resolution', + style: textStyleTitle, + ), + spaceSmall, + Text( + _mainCameraResolution.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Frontal Camera Resolution', + style: textStyleTitle, + ), + spaceSmall, + Text( + _frontalCameraResolution.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Ram Total Size', + style: textStyleTitle, + ), + spaceSmall, + Text( + _ramTotalSize.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Ram Free Size', + style: textStyleTitle, + ), + spaceSmall, + Text( + _ramFreeSize.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Screen Resolution', + style: textStyleTitle, + ), + spaceSmall, + Text( + _screenResolution.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'OS Version', + style: textStyleTitle, + ), + spaceSmall, + Text( + _osVersion.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Device Model', + style: textStyleTitle, + ), + spaceSmall, + Text( + _deviceModel.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'External Storage Info', + style: textStyleTitle, + ), + spaceSmall, + Text( + _externalStorage.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'Internal Storage Info', + style: textStyleTitle, + ), + spaceSmall, + Text( + _internalStorage.toString(), + style: textStylePath, + ), + + spaceMedium, + const Text( + 'SIM Cards Info', + style: textStyleTitle, + ), + spaceSmall, + Text( + _simCards.toString(), + style: textStylePath, + ), + ], + ), + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/example/pubspec.lock b/packages/device_info_plus/device_info_plus_aurora/example/pubspec.lock new file mode 100644 index 0000000..98de599 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/pubspec.lock @@ -0,0 +1,257 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.1" + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.9.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.16.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" + dbus: + dependency: transitive + description: + name: dbus + url: "https://pub.dartlang.org" + source: hosted + version: "0.7.8" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + url: "https://pub.dartlang.org" + source: hosted + version: "9.0.2" + device_info_plus_aurora: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.0.1" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "7.0.0" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.2" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.4" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.4" + lints: + dependency: transitive + description: + name: lints + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.1" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.12" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.5" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.2" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "5.1.0" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.9.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.12" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.2" + win32: + dependency: transitive + description: + name: win32 + url: "https://pub.dartlang.org" + source: hosted + version: "4.1.4" + win32_registry: + dependency: transitive + description: + name: win32_registry + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "6.1.0" +sdks: + dart: ">=2.18.6 <3.0.0" + flutter: ">=3.3.0" diff --git a/packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml b/packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml new file mode 100644 index 0000000..4ccd339 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/example/pubspec.yaml @@ -0,0 +1,26 @@ +# Copyright (c) 2023. Open Mobile Platform LLC. +# License: Proprietary. + +name: device_info_plus_aurora_example +description: Demonstrates how to use the device_info_plus_aurora plugin. + +publish_to: 'none' + +environment: + sdk: '>=2.18.6 <3.0.0' + +dependencies: + flutter: + sdk: flutter + device_info_plus: ^9.0.1 + device_info_plus_aurora: + path: ../ + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + uses-material-design: true diff --git a/packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart b/packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart new file mode 100644 index 0000000..687524c --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/lib/aurora_device_info.dart @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:device_info_plus/device_info_plus.dart'; + +class AuroraDeviceInfo implements LinuxDeviceInfo { + /// Constructs a AuroraDeviceInfo. + AuroraDeviceInfo({ + required this.hasGNSS, + required this.hasNFC, + required this.hasBluetooth, + required this.hasWlan, + required this.maxCpuClockSpeed, + required this.numberCpuCores, + required this.batteryChargePercentage, + required this.mainCameraResolution, + required this.frontalCameraResolution, + required this.ramTotalSize, + required this.ramFreeSize, + required this.screenResolution, + required this.osVersion, + required this.deviceModel, + required this.externalStorage, + required this.internalStorage, + required this.simCards, + }); + + @override + String get id => 'aurora'; + + @override + String get name => osVersion.split(' ').first; + + @override + String? get version => osVersion.split(' ').last; + + @override + String get prettyName => osVersion; + + final bool hasGNSS; + final bool hasNFC; + final bool hasBluetooth; + final bool hasWlan; + final int maxCpuClockSpeed; + final int numberCpuCores; + final int batteryChargePercentage; + final double mainCameraResolution; + final double frontalCameraResolution; + final int ramTotalSize; + final int ramFreeSize; + final String screenResolution; + final String osVersion; + final String deviceModel; + final Map externalStorage; + final Map internalStorage; + final List> simCards; + + @override + Map get data => { + 'id': id, + 'name': name, + 'version': version, + 'prettyName': prettyName, + 'hasGNSS': hasGNSS, + 'hasNFC': hasNFC, + 'hasBluetooth': hasBluetooth, + 'hasWlan': hasWlan, + 'maxCpuClockSpeed': maxCpuClockSpeed, + 'numberCpuCores': numberCpuCores, + 'batteryChargePercentage': batteryChargePercentage, + 'mainCameraResolution': mainCameraResolution, + 'frontalCameraResolution': frontalCameraResolution, + 'ramTotalSize': ramTotalSize, + 'ramFreeSize': ramFreeSize, + 'screenResolution': screenResolution, + 'osVersion': osVersion, + 'deviceModel': deviceModel, + 'externalStorage': externalStorage, + 'internalStorage': internalStorage, + 'simCards': simCards, + }; + + @override + String? get buildId => null; + + @override + List? get idLike => null; + + @override + String? get machineId => null; + + @override + String? get variant => null; + + @override + String? get variantId => null; + + @override + String? get versionCodename => null; + + @override + String? get versionId => null; + + @Deprecated('Use [data] getter instead') + @override + Map toMap() { + return data; + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart b/packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart new file mode 100644 index 0000000..df96320 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/lib/device_info_plus_aurora.dart @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:dbus/dbus.dart'; +import 'package:device_info_plus/device_info_plus.dart'; +import 'package:device_info_plus_aurora/ru_omp_deviceinfo_features.dart'; +import 'package:device_info_plus_aurora/ru_omp_deviceinfo_sim.dart'; +import 'package:device_info_plus_aurora/ru_omp_deviceinfo_storages.dart'; +import 'package:device_info_plus_platform_interface/device_info_plus_platform_interface.dart'; +import 'package:flutter/foundation.dart'; +import 'aurora_device_info.dart'; + +class DeviceInfoPlusAurora extends DeviceInfoPlatform { + /// Register this dart class as the platform implementation for aurora + static void registerWith() { + if (TargetPlatform.aurora == defaultTargetPlatform) { + DeviceInfoPlatform.instance = DeviceInfoPlusAurora(); + } else { + DeviceInfoPlatform.instance = DeviceInfoPlusLinuxPlugin(); + } + } + + @override + Future deviceInfo() async { + final client = DBusClient.session(); + + // Features + final features = RuOmpDeviceinfoFeatures(client, 'ru.omp.deviceinfo', + DBusObjectPath('/ru/omp/deviceinfo/Features')); + + final hasGNSS = await features.callhasGNSS(); + final hasNFC = await features.callhasNFC(); + final hasBluetooth = await features.callhasBluetooth(); + final hasWlan = await features.callhasWlan(); + final maxCpuClockSpeed = await features.callgetMaxCpuClockSpeed(); + final numberCpuCores = await features.callgetNumberCpuCores(); + final batteryChargePercentage = + await features.callgetBatteryChargePercentage(); + final mainCameraResolution = await features.callgetMainCameraResolution(); + final frontalCameraResolution = + await features.callgetFrontalCameraResolution(); + final ramTotalSize = await features.callgetRamTotalSize(); + final ramFreeSize = await features.callgetRamFreeSize(); + final screenResolution = await features.callgetScreenResolution(); + final osVersion = await features.callgetOsVersion(); + final deviceModel = await features.callgetDeviceModel(); + + // Storages + final storages = RuOmpDeviceinfoStorages(client, 'ru.omp.deviceinfo', + DBusObjectPath('/ru/omp/deviceinfo/Storages')); + + final Map internalStorage = {}; + (await storages.callgetInternalStorageInfo()).forEach((key, value) { + internalStorage[key] = value.toNative(); + }); + + final Map externalStorage = {}; + (await storages.callgetExternalStorageInfo()).forEach((key, value) { + externalStorage[key] = value.toNative(); + }); + + // SIM + final infoSIM = RuOmpDeviceinfoSIM( + client, 'ru.omp.deviceinfo', DBusObjectPath('/ru/omp/deviceinfo/SIM')); + + final List> simCards = []; + for (var element in await infoSIM.callgetSimCardsInfo()) { + final Map simCard = {}; + element.forEach((key, value) { + simCard[key] = value.toNative(); + }); + simCards.add(simCard); + } + + await client.close(); + + return AuroraDeviceInfo( + hasGNSS: hasGNSS, + hasNFC: hasNFC, + hasBluetooth: hasBluetooth, + hasWlan: hasWlan, + maxCpuClockSpeed: maxCpuClockSpeed, + numberCpuCores: numberCpuCores, + batteryChargePercentage: batteryChargePercentage, + mainCameraResolution: mainCameraResolution, + frontalCameraResolution: frontalCameraResolution, + ramTotalSize: ramTotalSize, + ramFreeSize: ramFreeSize, + screenResolution: screenResolution, + osVersion: osVersion, + deviceModel: deviceModel, + externalStorage: externalStorage, + internalStorage: internalStorage, + simCards: simCards, + ); + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart new file mode 100644 index 0000000..dd1def9 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_features.dart @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:dbus/dbus.dart'; + +/// Signal data for ru.omp.deviceinfo.Features.cameraEnabledChanged. +class RuOmpDeviceinfoFeaturescameraEnabledChanged extends DBusSignal { + bool get enabled => values[0].asBoolean(); + + RuOmpDeviceinfoFeaturescameraEnabledChanged(DBusSignal signal) + : super( + sender: signal.sender, + path: signal.path, + interface: signal.interface, + name: signal.name, + values: signal.values); +} + +class RuOmpDeviceinfoFeatures extends DBusRemoteObject { + /// Stream of ru.omp.deviceinfo.Features.cameraEnabledChanged signals. + late final Stream + cameraEnabledChanged; + + RuOmpDeviceinfoFeatures( + DBusClient client, String destination, DBusObjectPath path) + : super(client, name: destination, path: path) { + cameraEnabledChanged = DBusRemoteObjectSignalStream( + object: this, + interface: 'ru.omp.deviceinfo.Features', + name: 'cameraEnabledChanged', + signature: DBusSignature('b')) + .asBroadcastStream() + .map((signal) => RuOmpDeviceinfoFeaturescameraEnabledChanged(signal)); + } + + /// Invokes ru.omp.deviceinfo.Features.hasGNSS() + Future callhasGNSS( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod('ru.omp.deviceinfo.Features', 'hasGNSS', [], + replySignature: DBusSignature('b'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asBoolean(); + } + + /// Invokes ru.omp.deviceinfo.Features.hasNFC() + Future callhasNFC( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod('ru.omp.deviceinfo.Features', 'hasNFC', [], + replySignature: DBusSignature('b'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asBoolean(); + } + + /// Invokes ru.omp.deviceinfo.Features.hasBluetooth() + Future callhasBluetooth( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'hasBluetooth', [], + replySignature: DBusSignature('b'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asBoolean(); + } + + /// Invokes ru.omp.deviceinfo.Features.hasWlan() + Future callhasWlan( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod('ru.omp.deviceinfo.Features', 'hasWlan', [], + replySignature: DBusSignature('b'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asBoolean(); + } + + /// Invokes ru.omp.deviceinfo.Features.getMaxCpuClockSpeed() + Future callgetMaxCpuClockSpeed( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getMaxCpuClockSpeed', [], + replySignature: DBusSignature('u'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asUint32(); + } + + /// Invokes ru.omp.deviceinfo.Features.getNumberCpuCores() + Future callgetNumberCpuCores( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getNumberCpuCores', [], + replySignature: DBusSignature('u'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asUint32(); + } + + /// Invokes ru.omp.deviceinfo.Features.getCpuModel() + Future callgetCpuModel( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getCpuModel', [], + replySignature: DBusSignature('s'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asString(); + } + + /// Invokes ru.omp.deviceinfo.Features.getMaxCpuCoresClockSpeed() + Future> callgetMaxCpuCoresClockSpeed( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getMaxCpuCoresClockSpeed', [], + replySignature: DBusSignature('av'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asVariantArray().toList(); + } + + /// Invokes ru.omp.deviceinfo.Features.getBatteryChargePercentage() + Future callgetBatteryChargePercentage( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getBatteryChargePercentage', [], + replySignature: DBusSignature('u'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asUint32(); + } + + /// Invokes ru.omp.deviceinfo.Features.getMainCameraResolution() + Future callgetMainCameraResolution( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getMainCameraResolution', [], + replySignature: DBusSignature('d'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asDouble(); + } + + /// Invokes ru.omp.deviceinfo.Features.getFrontalCameraResolution() + Future callgetFrontalCameraResolution( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getFrontalCameraResolution', [], + replySignature: DBusSignature('d'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asDouble(); + } + + /// Invokes ru.omp.deviceinfo.Features.getRamTotalSize() + Future callgetRamTotalSize( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getRamTotalSize', [], + replySignature: DBusSignature('t'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asUint64(); + } + + /// Invokes ru.omp.deviceinfo.Features.getRamFreeSize() + Future callgetRamFreeSize( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getRamFreeSize', [], + replySignature: DBusSignature('t'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asUint64(); + } + + /// Invokes ru.omp.deviceinfo.Features.getScreenResolution() + Future callgetScreenResolution( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getScreenResolution', [], + replySignature: DBusSignature('s'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asString(); + } + + /// Invokes ru.omp.deviceinfo.Features.getOsVersion() + Future callgetOsVersion( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getOsVersion', [], + replySignature: DBusSignature('s'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asString(); + } + + /// Invokes ru.omp.deviceinfo.Features.getDeviceModel() + Future callgetDeviceModel( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getDeviceModel', [], + replySignature: DBusSignature('s'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asString(); + } + + /// Invokes ru.omp.deviceinfo.Features.getSerialNumber() + Future callgetSerialNumber( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Features', 'getSerialNumber', [], + replySignature: DBusSignature('s'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asString(); + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart new file mode 100644 index 0000000..96ef17d --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_sim.dart @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:dbus/dbus.dart'; + +/// Signal data for ru.omp.deviceinfo.SIM.simCardsEnabledChanged. +class RuOmpDeviceinfoSIMsimCardsEnabledChanged extends DBusSignal { + List> get updatedSimCards => + values[0].asArray().map((child) => child.asStringVariantDict()).toList(); + + RuOmpDeviceinfoSIMsimCardsEnabledChanged(DBusSignal signal) + : super( + sender: signal.sender, + path: signal.path, + interface: signal.interface, + name: signal.name, + values: signal.values); +} + +/// Signal data for ru.omp.deviceinfo.SIM.preferredDataTransferSimChanged. +class RuOmpDeviceinfoSIMpreferredDataTransferSimChanged extends DBusSignal { + List> get updatedSimCards => + values[0].asArray().map((child) => child.asStringVariantDict()).toList(); + + RuOmpDeviceinfoSIMpreferredDataTransferSimChanged(DBusSignal signal) + : super( + sender: signal.sender, + path: signal.path, + interface: signal.interface, + name: signal.name, + values: signal.values); +} + +/// Signal data for ru.omp.deviceinfo.SIM.preferredVoiceCallSimChanged. +class RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged extends DBusSignal { + List> get updatedSimCards => + values[0].asArray().map((child) => child.asStringVariantDict()).toList(); + + RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged(DBusSignal signal) + : super( + sender: signal.sender, + path: signal.path, + interface: signal.interface, + name: signal.name, + values: signal.values); +} + +class RuOmpDeviceinfoSIM extends DBusRemoteObject { + /// Stream of ru.omp.deviceinfo.SIM.simCardsEnabledChanged signals. + late final Stream + simCardsEnabledChanged; + + /// Stream of ru.omp.deviceinfo.SIM.preferredDataTransferSimChanged signals. + late final Stream + preferredDataTransferSimChanged; + + /// Stream of ru.omp.deviceinfo.SIM.preferredVoiceCallSimChanged signals. + late final Stream + preferredVoiceCallSimChanged; + + RuOmpDeviceinfoSIM(DBusClient client, String destination, DBusObjectPath path) + : super(client, name: destination, path: path) { + simCardsEnabledChanged = DBusRemoteObjectSignalStream( + object: this, + interface: 'ru.omp.deviceinfo.SIM', + name: 'simCardsEnabledChanged', + signature: DBusSignature('aa{sv}')) + .asBroadcastStream() + .map((signal) => RuOmpDeviceinfoSIMsimCardsEnabledChanged(signal)); + + preferredDataTransferSimChanged = DBusRemoteObjectSignalStream( + object: this, + interface: 'ru.omp.deviceinfo.SIM', + name: 'preferredDataTransferSimChanged', + signature: DBusSignature('aa{sv}')) + .asBroadcastStream() + .map((signal) => + RuOmpDeviceinfoSIMpreferredDataTransferSimChanged(signal)); + + preferredVoiceCallSimChanged = DBusRemoteObjectSignalStream( + object: this, + interface: 'ru.omp.deviceinfo.SIM', + name: 'preferredVoiceCallSimChanged', + signature: DBusSignature('aa{sv}')) + .asBroadcastStream() + .map( + (signal) => RuOmpDeviceinfoSIMpreferredVoiceCallSimChanged(signal)); + } + + /// Invokes ru.omp.deviceinfo.SIM.getSimCardsInfo() + Future>> callgetSimCardsInfo( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.SIM', 'getSimCardsInfo', [], + replySignature: DBusSignature('aa{sv}'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0] + .asArray() + .map((child) => child.asStringVariantDict()) + .toList(); + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart new file mode 100644 index 0000000..18fcd5e --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/lib/ru_omp_deviceinfo_storages.dart @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:dbus/dbus.dart'; + +/// Signal data for ru.omp.deviceinfo.Storages.externalStorageChanged. +class RuOmpDeviceinfoStoragesexternalStorageChanged extends DBusSignal { + Map get updatedStorage => values[0].asStringVariantDict(); + + RuOmpDeviceinfoStoragesexternalStorageChanged(DBusSignal signal) + : super( + sender: signal.sender, + path: signal.path, + interface: signal.interface, + name: signal.name, + values: signal.values); +} + +class RuOmpDeviceinfoStorages extends DBusRemoteObject { + /// Stream of ru.omp.deviceinfo.Storages.externalStorageChanged signals. + late final Stream + externalStorageChanged; + + RuOmpDeviceinfoStorages( + DBusClient client, String destination, DBusObjectPath path) + : super(client, name: destination, path: path) { + externalStorageChanged = DBusRemoteObjectSignalStream( + object: this, + interface: 'ru.omp.deviceinfo.Storages', + name: 'externalStorageChanged', + signature: DBusSignature('a{sv}')) + .asBroadcastStream() + .map((signal) => RuOmpDeviceinfoStoragesexternalStorageChanged(signal)); + } + + /// Invokes ru.omp.deviceinfo.Storages.getInternalStorageInfo() + Future> callgetInternalStorageInfo( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Storages', 'getInternalStorageInfo', [], + replySignature: DBusSignature('a{sv}'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asStringVariantDict(); + } + + /// Invokes ru.omp.deviceinfo.Storages.getInternalUserPartitionInfo() + Future> callgetInternalUserPartitionInfo( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Storages', 'getInternalUserPartitionInfo', [], + replySignature: DBusSignature('a{sv}'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asStringVariantDict(); + } + + /// Invokes ru.omp.deviceinfo.Storages.getExternalStorageInfo() + Future> callgetExternalStorageInfo( + {bool noAutoStart = false, + bool allowInteractiveAuthorization = false}) async { + var result = await callMethod( + 'ru.omp.deviceinfo.Storages', 'getExternalStorageInfo', [], + replySignature: DBusSignature('a{sv}'), + noAutoStart: noAutoStart, + allowInteractiveAuthorization: allowInteractiveAuthorization); + return result.returnValues[0].asStringVariantDict(); + } +} diff --git a/packages/device_info_plus/device_info_plus_aurora/pubspec.yaml b/packages/device_info_plus/device_info_plus_aurora/pubspec.yaml new file mode 100644 index 0000000..7953d23 --- /dev/null +++ b/packages/device_info_plus/device_info_plus_aurora/pubspec.yaml @@ -0,0 +1,29 @@ +# Copyright (c) 2023. Open Mobile Platform LLC. +# License: Proprietary. + +name: device_info_plus_aurora +description: The Aurora OS implementation of flutter_local_notifications. +version: 0.0.1 + +environment: + sdk: '>=2.18.6 <3.0.0' + flutter: ">=2.5.0" + +dependencies: + flutter: + sdk: flutter + dbus: ^0.7.8 + device_info_plus: ^9.0.1 + plugin_platform_interface: ^2.0.2 + device_info_plus_platform_interface: ^7.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + plugin: + platforms: + aurora: + dartPluginClass: DeviceInfoPlusAurora