From a9efc7c762c4ca6c2adf92c3486fbc3df1953382 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 9 Jul 2021 16:07:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E5=AE=B6=E5=BA=93=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ce_client/src/api/expert.js | 29 ++ ce_client/src/components/Pagination/index.vue | 2 +- ce_client/src/layout/components/Navbar.vue | 3 +- .../src/layout/components/Sidebar/Logo.vue | 2 +- ce_client/src/router/index.js | 11 + ce_client/src/settings.js | 2 +- ce_client/src/styles/index.scss | 1 + ce_client/src/utils/get-page-title.js | 2 +- ce_client/src/views/login/index.vue | 2 +- ce_client/src/views/search/index.vue | 294 ++++++++++++++++++ .../migrations/0004_auto_20210708_1043.py | 21 ++ .../0005_delete_historicalexpert.py | 16 + .../expert/migrations/0006_expert_hdegree.py | 18 ++ .../migrations/0007_auto_20210708_1627.py | 18 ++ ce_server/apps/expert/models.py | 8 +- ce_server/apps/expert/serializers.py | 37 +++ ce_server/apps/expert/urls.py | 10 + ce_server/apps/expert/views.py | 13 +- ce_server/media/default/photo.png | Bin 0 -> 30941 bytes ce_server/server/urls.py | 1 + 20 files changed, 482 insertions(+), 8 deletions(-) create mode 100644 ce_client/src/api/expert.js create mode 100644 ce_client/src/views/search/index.vue create mode 100644 ce_server/apps/expert/migrations/0004_auto_20210708_1043.py create mode 100644 ce_server/apps/expert/migrations/0005_delete_historicalexpert.py create mode 100644 ce_server/apps/expert/migrations/0006_expert_hdegree.py create mode 100644 ce_server/apps/expert/migrations/0007_auto_20210708_1627.py create mode 100644 ce_server/apps/expert/serializers.py create mode 100644 ce_server/apps/expert/urls.py create mode 100644 ce_server/media/default/photo.png diff --git a/ce_client/src/api/expert.js b/ce_client/src/api/expert.js new file mode 100644 index 0000000..8d196a2 --- /dev/null +++ b/ce_client/src/api/expert.js @@ -0,0 +1,29 @@ +import request from '@/utils/request' + +export function getExpertList(query) { + return request({ + url: '/expert/expert/', + method: 'get', + params: query + }) +} +export function createExpert(data) { + return request({ + url: '/expert/expert/', + method: 'post', + data + }) +} +export function updateExpert(id, data) { + return request({ + url: `/expert/expert/${id}/`, + method: 'put', + data + }) +} +export function deleteExpert(id) { + return request({ + url: `/expert/expert/${id}/`, + method: 'delete' + }) +} diff --git a/ce_client/src/components/Pagination/index.vue b/ce_client/src/components/Pagination/index.vue index e316e20..8160e61 100644 --- a/ce_client/src/components/Pagination/index.vue +++ b/ce_client/src/components/Pagination/index.vue @@ -35,7 +35,7 @@ export default { pageSizes: { type: Array, default() { - return [10, 20, 30, 50] + return [12, 24, 36, 48] } }, layout: { diff --git a/ce_client/src/layout/components/Navbar.vue b/ce_client/src/layout/components/Navbar.vue index d053e87..d9379ab 100644 --- a/ce_client/src/layout/components/Navbar.vue +++ b/ce_client/src/layout/components/Navbar.vue @@ -52,7 +52,8 @@ export default { computed: { ...mapGetters([ 'sidebar', - 'avatar' + 'avatar', + 'name' ]) }, methods: { diff --git a/ce_client/src/layout/components/Sidebar/Logo.vue b/ce_client/src/layout/components/Sidebar/Logo.vue index 7121590..6df567c 100644 --- a/ce_client/src/layout/components/Sidebar/Logo.vue +++ b/ce_client/src/layout/components/Sidebar/Logo.vue @@ -24,7 +24,7 @@ export default { }, data() { return { - title: 'Django Vue Admin', + title: '总院专家库', logo: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png' } } diff --git a/ce_client/src/router/index.js b/ce_client/src/router/index.js index 8d33a62..64cd587 100644 --- a/ce_client/src/router/index.js +++ b/ce_client/src/router/index.js @@ -78,6 +78,17 @@ export const constantRoutes = [ * the routes that need to be dynamically loaded based on user perms */ export const asyncRoutes = [ + { + path: '/search', + component: Layout, + redirect: '/search', + children: [{ + path: 'search', + name: 'Search', + component: () => import('@/views/search/index'), + meta: { title: '专家检索', icon: 'search' } + }] + }, { path: '/system', component: Layout, diff --git a/ce_client/src/settings.js b/ce_client/src/settings.js index 585109b..bd052f7 100644 --- a/ce_client/src/settings.js +++ b/ce_client/src/settings.js @@ -1,6 +1,6 @@ module.exports = { - title: '管理系统', + title: '总院专家库', /** * @type {boolean} true | false diff --git a/ce_client/src/styles/index.scss b/ce_client/src/styles/index.scss index 059de63..476a0dc 100644 --- a/ce_client/src/styles/index.scss +++ b/ce_client/src/styles/index.scss @@ -10,6 +10,7 @@ body { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; + background-color: #f0f2f5; } label { diff --git a/ce_client/src/utils/get-page-title.js b/ce_client/src/utils/get-page-title.js index cfe5800..4e63417 100644 --- a/ce_client/src/utils/get-page-title.js +++ b/ce_client/src/utils/get-page-title.js @@ -1,6 +1,6 @@ import defaultSettings from '@/settings' -const title = defaultSettings.title || '认证系统' +const title = defaultSettings.title || '总院专家库' export default function getPageTitle(pageTitle) { if (pageTitle) { diff --git a/ce_client/src/views/login/index.vue b/ce_client/src/views/login/index.vue index 2568652..be45b75 100644 --- a/ce_client/src/views/login/index.vue +++ b/ce_client/src/views/login/index.vue @@ -3,7 +3,7 @@
-

系统登陆

+

总院专家库

diff --git a/ce_client/src/views/search/index.vue b/ce_client/src/views/search/index.vue new file mode 100644 index 0000000..db2948e --- /dev/null +++ b/ce_client/src/views/search/index.vue @@ -0,0 +1,294 @@ + + + \ No newline at end of file diff --git a/ce_server/apps/expert/migrations/0004_auto_20210708_1043.py b/ce_server/apps/expert/migrations/0004_auto_20210708_1043.py new file mode 100644 index 0000000..94492b4 --- /dev/null +++ b/ce_server/apps/expert/migrations/0004_auto_20210708_1043.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1.8 on 2021-07-08 02:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('expert', '0003_historicalexpert'), + ] + + operations = [ + migrations.AlterModelOptions( + name='expert', + options={'verbose_name': '专家信息', 'verbose_name_plural': '专家信息'}, + ), + migrations.AlterModelOptions( + name='historicalexpert', + options={'get_latest_by': 'history_date', 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical 专家信息'}, + ), + ] diff --git a/ce_server/apps/expert/migrations/0005_delete_historicalexpert.py b/ce_server/apps/expert/migrations/0005_delete_historicalexpert.py new file mode 100644 index 0000000..e5e1c1e --- /dev/null +++ b/ce_server/apps/expert/migrations/0005_delete_historicalexpert.py @@ -0,0 +1,16 @@ +# Generated by Django 3.1.8 on 2021-07-08 02:44 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('expert', '0004_auto_20210708_1043'), + ] + + operations = [ + migrations.DeleteModel( + name='HistoricalExpert', + ), + ] diff --git a/ce_server/apps/expert/migrations/0006_expert_hdegree.py b/ce_server/apps/expert/migrations/0006_expert_hdegree.py new file mode 100644 index 0000000..8c0cc80 --- /dev/null +++ b/ce_server/apps/expert/migrations/0006_expert_hdegree.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.8 on 2021-07-08 08:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('expert', '0005_delete_historicalexpert'), + ] + + operations = [ + migrations.AddField( + model_name='expert', + name='Hdegree', + field=models.CharField(choices=[('男', '男'), ('女', '女')], default='本科', max_length=10, verbose_name='最高学历'), + ), + ] diff --git a/ce_server/apps/expert/migrations/0007_auto_20210708_1627.py b/ce_server/apps/expert/migrations/0007_auto_20210708_1627.py new file mode 100644 index 0000000..9f68a6a --- /dev/null +++ b/ce_server/apps/expert/migrations/0007_auto_20210708_1627.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.8 on 2021-07-08 08:27 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('expert', '0006_expert_hdegree'), + ] + + operations = [ + migrations.RenameField( + model_name='expert', + old_name='Hdegree', + new_name='hdegree', + ), + ] diff --git a/ce_server/apps/expert/models.py b/ce_server/apps/expert/models.py index b015356..3e561aa 100644 --- a/ce_server/apps/expert/models.py +++ b/ce_server/apps/expert/models.py @@ -10,6 +10,12 @@ class Expert(CommonBModel): ('男', '男'), ('女', '女'), ) + degree_choices = ( + ('大专', '大专'), + ('本科', '本科'), + ('硕士研究生', '硕士研究生'), + ('博士研究生', '博士研究生'), + ) user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True, verbose_name="关联账户", related_name="expert_user") name = models.CharField(verbose_name="姓名", max_length=100) @@ -17,7 +23,7 @@ class Expert(CommonBModel): idnumber = models.CharField(verbose_name="身份证号", max_length=40) paddress = models.TextField(verbose_name="通讯地址") photo = models.CharField(verbose_name="证件照", max_length=100, null=True, blank=True) - history = HistoricalRecords() + hdegree = models.CharField(verbose_name="最高学历",choices=gender_choices, default='本科', max_length=10) class Meta: verbose_name = '专家信息' diff --git a/ce_server/apps/expert/serializers.py b/ce_server/apps/expert/serializers.py new file mode 100644 index 0000000..ee5b69f --- /dev/null +++ b/ce_server/apps/expert/serializers.py @@ -0,0 +1,37 @@ +from rest_framework.serializers import ModelSerializer +from .models import Award, Expert, Paper, Project, WorkExperience + +class WorkExperienceSimpleSerializer(ModelSerializer): + class Meta: + model = WorkExperience + fields = ['id', 'name'] + +class ProjectSimpleSerializer(ModelSerializer): + class Meta: + model = Project + fields = ['id', 'name'] + +class PaperSimpleSerializer(ModelSerializer): + class Meta: + model = Paper + fields = ['id', 'name'] + +class AwardSimpleSerializer(ModelSerializer): + class Meta: + model = Award + fields = ['id', 'name'] + +class ExpertListSerializer(ModelSerializer): + workexperience_ = WorkExperienceSimpleSerializer(source='workexperience_expert', many=True, read_only=True) + project_ = ProjectSimpleSerializer(source='project_expert', many=True, read_only=True) + paper_ = PaperSimpleSerializer(source='paper_expert', many=True, read_only=True) + award_ = AwardSimpleSerializer(source='award_expert', many=True, read_only=True) + class Meta: + model = Expert + fields = '__all__' + + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.prefetch_related('workexperience_expert','project_expert', 'paper_expert', 'award_expert') + return queryset \ No newline at end of file diff --git a/ce_server/apps/expert/urls.py b/ce_server/apps/expert/urls.py new file mode 100644 index 0000000..944364d --- /dev/null +++ b/ce_server/apps/expert/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include +from .views import ExpertViewSet +from rest_framework import routers + +router = routers.DefaultRouter() +router.register('expert', ExpertViewSet, basename="expert") + +urlpatterns = [ + path('', include(router.urls)), +] \ No newline at end of file diff --git a/ce_server/apps/expert/views.py b/ce_server/apps/expert/views.py index 91ea44a..e647e31 100644 --- a/ce_server/apps/expert/views.py +++ b/ce_server/apps/expert/views.py @@ -1,3 +1,14 @@ from django.shortcuts import render - +from rest_framework.viewsets import ModelViewSet +from .models import Expert +from .serializers import ExpertListSerializer +from apps.system.mixins import OptimizationMixin # Create your views here. + +class ExpertViewSet(OptimizationMixin, ModelViewSet): + perms_map={'get':'expert_view'} + queryset = Expert.objects.all() + search_fields = ['name', 'workexperience_expert__name', 'project_expert__name', 'paper_expert__name', 'award_expert__name'] + filterset_fields = ['hdegree'] + serializer_class = ExpertListSerializer + ordering = ['-create_time'] \ No newline at end of file diff --git a/ce_server/media/default/photo.png b/ce_server/media/default/photo.png new file mode 100644 index 0000000000000000000000000000000000000000..196e5e9fc4417b2e48e9f9b65af44f60eb731b58 GIT binary patch literal 30941 zcmV)bK&iipP)N0KFGoBOv!L`E)100h7dWU*MR>aMQQw9ZUR zEj{TR={HD^`hSwnJm^8^jAk@?kh)JV?AnV(5(GdXf!re_;#=I!Ob;FbqL%6Inh}!4 z#fSq2B4f+A?&fCKuGxqG{r`Rf-`Y3H=*#{9-`aKCw~&A1>|4mcarQ0b-#Ggg@^74d z3;8$BzJ>f7XWv5pjk9kd|Hheo*&pCP-yFcVH}Q+R@%P;N*5GRaIgs1Ss5&43y1&5s zpN8E3$wz#R?CStI02S1{>~qHg^EV2}f4+SUAV)($M*wg{00;c-ZT-)|{+r|dzXp(l z13DslffiqK=)Qe`JN{$1lfyR$^shYRULXf5kYPE>H;1`z9|G`?K>kg_8@?t<8WJD^ z0=PQ>fP)#jA-J2OI}soNZ68O7ZtiLbXlme&-z3Pt8oL}{I-WPMzGQB0V7S@IP5?xn z(=?hdAC4&^^UAfobegaC*{gul7bfA=lEPWIJ+{I@Xp9Y|~wpu2&YqXB|z((C|6 z#2g|3WX)5ZZjvl!us6yLRt29tmjmy=l>+$e#GT)bWdbYSC35GbG z@1fzCy`4?RJaVYhn28u27?Dv-69_4|5Sp2TA`+BE0px%VK?(~BQOLc zP(Vj8D|;NxH;eTvv(Nu1AjeHL%>9c46#>x=OdSbx&g<2cj>D{}Ygb)d=yGv&{2bb5 zQb$=Yedyrq-7v|W^<`=)f-GjrEXU9M^`QeX3 zGhKB<4DHjC6TkQR{%dztDn#H|XQxpU6Nx#R0RWV^0UW^q0396MfgI#p$p4w<2#)TK z8y3aE%LaFMRo9d`NEBYB@p5slktPDs6)sNk^r%1e&{o6gv-Rn-<>LJFPd*;ckEi={ zwtR8?#JjZ!HFb^ZeK!DLHdvnoiuJQcA3Gq3JoUtOL&C^;>CUY;-`3Fj*^|X=Z*urreEl7n%o$kPnPUa!=I%%!;KYCo z;0U@6;Jz~UM*z9IgPWN{p-qX=L9?gCZh7o=y;ycvH9IVh$BXA@&mPw{dcU&8dH>|m zy6=6xfUyI2a0M^`@S)JCfB>2yZ(}QWU;q*7$L#K<9+Oii=;`YC>G>0EW|xm|Om5vB zPw&{}@&27Ruxe~FkGrprqf=dDs9fC%fd~-Q5CMeA&AuwIf9a5;d5MJ_5D<~j(A0GB z)C>5yx*U!_uXH#)J@Uor*=N7(Po6$Iekz{9RIe7G8BD=40K8z(%r^<21E_-|l=b8e z3dYD#xEBL=LvS`{OS(*Xxfsr#Up@X5+u6bWcZb*C3X|#N;I>Ym-ne&vy+Uqx+WlLj zs*yO76RMjVFc5x4_`5G1azI2PQZuuh(unSDAkxvtHRwpgVmx^=T%CUY=|?fIS5H2n zVeMznk|iJnRR9FnO`+^JzjFiF;7$MzjsS%2o^u9b0NE@Q+@#R_0GZh}X&x*MA%Wx} zFHd#7wABJHpPhX4Q@T38Iy=gX6J1^+sGGwkWWp~BqZ{`P+X^9WAa@6}?Seos2UiIK zQ7k2MNQfKf?|=a82HDc-^K_0t*gb!27te3LasTO3?|tvjCh;$+na9bVVw*u6>8nN0 ze)*7>Q=FI?2;4OF%T|ZP86eIxs9iM71 z)rFDJC5k3B^AH3K+$^|>L?;?jPRwQwYG{Vw48UN5-~cI`U0t32>Zgk*4^q8z_2l7d z7;k;|hq8aCKDbSx%8tl_62B@z+$)Ft1r}RE)xX$nFda6inh6o6T;E0=F z7kyjQ{i9hA*RjhD3EcpkHd!nHz?R1LK#k~iX96>2Gz04FH%K z5zWlZRJGh+?j)j|^Ooy(cSlg#pbiA)Fy`)}`}L1M)v-T4y8Ye{_ui{isssr2gzJfd zI}iczZ`9lVDD0I(j+%f{X|6(9n*Avk~$BDjs~MLvHX$K|b-KectX4n6(; zu1vw%jB1BZxf_KgtQDTgUm{Lk9g%AqxWoN&9TSRisX7*w=_$IE)1$PGE^073V zt?Vpaj`=5H=gxP3_}xGMi;<-t)`;XJo8|qF>Zz~auIDVrA}%NkpTG&gEinSQLF&83 zB`i_^>VTr??&{_910Vpodm3$Ve(|%vjbLxTac69Huc(Q8hxP6al;Ez!tZKyk!qa@Y zY5c2)d=vZnHc@s2K+8IGI(E5V+R(|^_0Jz4|LPwe|JA=6pFM;;(2KzS4|%JXqAds^ zlm`)EA=9P;oYk+VNscIxg0OW2;xL9lcew`P)oI!!m3|!cd z+}PbVRU9`&Lom;)@!4k&Kg@@#_a}GnuUa|F0Vn%6-*{I;1&oI9vM+%zZ?C^<$V=N0 zS_$ABz%8=l*ju;g&!4SMpY%^Yy7=kec)zNIU|5r9+vdby)JFbrODUOIIh)NgymZFD zaM~}eiQgll-5liZ>_#>^fFqlbIlHsjMj?mb1n#JsSN*e3&pE9ZC#O#y=+0}mzw^Ty z-U+~ifuWTT@TH67uj4HL0zZI4sOZ?)u(ok6xs(2amd7ym3ILiou-WF+|4$2YH_Vp< z01%Nd8*OeEz+vmLOS*=L+g^t4E0ko?3=qr=K^Y7j6j2=&*c^<|9MH`H34jnsS4~5A z{CItJKDpi9*gc%Fr}fHZnx*o9FDT&Oh&jG^(`&L<3%LV0kO3hWK}mHmBSV~0lUZs@ z+92M$b@S-aXMNWrLQ45Jp8rK{K<@5p>h5lvqXd!6LDdyJYc>K#F}0+nTnbL;Zfd$I(jfqf5K&Gz4Cn@@pWE|; z%UD~rGm(lW`++M)QgDY&`cfRABN~=S@S0G6^&C4A0Fw_4=Aapc>ZwwN2D|&W<7?-? z{>9%cj?em0Hw~cR+kWvcxcKt#!ifQH!oX4iM+787j)XvNLJ%3FNF5|H5+NZ1vjey) z6V`QXt5C-3`4>0@25K})q{D-?g}aP{Ac<2GN76SxovK@e@D#t`aQH8C_n z>KJBiQ$-;+H%AGjNKyrvw9RzVOzNs_s=!oLkr4X6&*oWe$a%~7ltKWA z4jVG^y6n}nZ@!^o0N9Zn2rW0{EsR%}&sWbrOBW|F4liN)dlvgkUcLOw1fgOGLX%3S z5$BCe+IDB!PMT&?g{G?7DnwyIBt!}oi7-(Ru4Aa8RDtUdz%2wp@T}1R6+Ek^Y)O4c z+V{h{9~R5ysvD|+SCN;3eX{kSgIZD<9kUTQDJT#TG6^CAT2{}DPzg%vtK3Zk_2drj zgoY&mKq}oe0539>>#&ug)k3W3!xBq_e;Ac22H>#3Nac!IL zZp~jhzX^fK8DLV$tPZobKG>ZePGx@*W|PUJZQHtPf&`&}NC?6#BI-;Mgo(frfe8Xb z5OdW)00>S+Vv7!JAZn1+QjTM8x~^LHt3Iv966CQEIxzqe zGgHNmf>A{BYOy|kJlQ))ySH@u8nzPv%+3x@AinL<*t+yZWe!KuE$E80#SB(gvE;p{heS zq^oYc>e6g69A7SZ(E&P+$mZESyQ>wi&Im!%C;_`}b@Al0P*1bW>NhG1NDz$>DU=FR zImSxfc5OZG*O8;KxSll^>`}f~#U%R``03l#up*J1R*E-YS8X!kUbU;R=Jm&LfAOH1#c>dGBO3xlb zw|q(S|AjMu+07w9K!}WW;At&;lWKof-@UOnpH#E9YGP<>76J(*fy=A_LDF>nmDGig_&t%r2A z>Mxdy<&b*=6LB{tCkD@Xefm5N2~L;u>~$StE$zXbWNJ`k&x&u1D zQY2ooSH8;)3IzhB$=6rwka0p$mebBNS2-2wl(#OMpyB##EFsj(~tp2q?gW#DIukj)dd@K)jhG z;%*M^h)zf-f~o)z!0JGR5``vpTz7dEXcn;wWCp%cA6?B6(9H-PE!)uf;_UL{pF7xG zeQ$PvVXCoq2S+!DLN?NMIrmo&xq|@&MAKybDlg7X9)4t3=M_Q%P$2kC3Sx7L69%CW zWIAd0ns_*^4(8K?X}!~MD-h5kLlr0rF&dKx1VJW3<|1%HCS)q#qq86h5)l%YkK_)_ zzywI{uE1r0OyPBi2;Cil+)G!I0tvb^VI|0fW6qU$6MQ0h$~>(Dima3MzV3DGH^~W)=Xz%~?(e zz#_yynnq97;UhasNO#yW_ZFlFh zCn1=ys^azm+eemSIv_%1+->6ita)wT9M0=`TeWS7k%f^NP{^5-35A%D5Qv3XkQj)a zxSZ0&T(&N8q#}7M0XzbM0})a=_Ys5&RnP9=K!{~%0Jz|dD{0w>W6U{7o8`hlug;Z^wnzWFOGBW>pIxkYvbNQoXiv(@PMU+dtKt0R}MLO z@m>bQ`s(D_!%u#_zPche+D-vMBCt(y6^WRrVwg_q{oVFpTF-ad*|eFqv8rMqLUg23 zhVs&Q#v+0!B1QX9!ZIn_nrS0%BEr&BQmQThga}mjIRStZ!3KON0raMp<4%P!R(&C+ zLqsDhb$13NA~q920~(DoNM{7JUM3xjl+x7T>ly}iGGH%=NuGcdyI z8^HIh!}*U$gJYoq?)vGGKtf+swxqt zz|2I5MKR~h6hjbU24pTXM7RK6YUIdUzYVb6+(<-@07Ouxzm;M+A}~2_c)pE(VUsii z6afVx5}6seDQ`M>cU|^2j-wF(WYBdU-5o*=-FkWSME0KS z-o2D+2FzNfj(j~TX$ZiCU}nq9(?_2?{Q2Jxi<7pvZz@G;a7QR57vU;|I?$|%^GUV0 z)9%gc`A$;{1?CWVvuObUEr`SrnTY_X;LOa-MXgRmUmVq&69W<9h3d2*U6x2WMPCet ze7TstNt(UX%*uKzi52^XD&IcL5)z;^8K_Hn%&ALh%&3Uqr~qmPsufuPJ%eeN`b6BRCL{@E78ig7gay4=;e+D64VPI`l%M@P#@`;bqlSDG6-VQNFG0 z6}2lNIe9scwhC>>fM7_0_q@8fJ6-ofpK~_%G52b&=7i+vX`rENU1x!&WNtdTnL8LV z@b%E_*TKFqP%y20tRW@LOrXq~G7<+81Qfz5NEE7t=F@t2TFocbw24i{wUAKpy9S6t z$i#>kh=rH{nWd!WMVQQ6k(0e7FGMbR{&v`hDj)_TbxTw6mIoJs|s$r5dby~1Yb0al-*pM0sw5ARA8%-bu+Nv?0;k2 zHefgc5R*HVk-tSqRn94L2n>^oZthN&{cyGJ7TqwC^~9q=;1JLWO;i8u=#k!jYjSW4 zU8Qs~UDvpoS53GgAQ@F8v8kHf>2w)_r2&wgod`uJL_q*yY$};Fp^dyVsV8++i3kD% zFvBJ|11$CLB1QxQM*|`=qpfxkw(Tk48!uf_uI)h$8-I?7w4vOIsXWWfT+Q7PfN{eS zmDkKg0bPD62STLMpIm}FjOrO2Fq^PXYevM|`?G#Xt1&rrdGM@^=!5nr%f}6j0i|V=!nLQ%utkLA{ZE}z*XSL#M?1? zxFI9A6T;lhosgi&A4=J4v%MW&h*N!|R>sY>7@+*PEDqm{jC2G<-)LT6R%xgyY(=g} zWUeI&plw`GsxDYGcbiGyglI*+Q3u?gwd+xzU#=GGUPi1W=A2bW66C=1gFU%-XL9RS zYv?aWN6KpJbw3V+n;|j@l9{^`A|W6_j4Xmdu&H7bV-;c$5i}uUwv8L! zI#HoeGPdo`_R^W4szih(bl;Xvu*B_~nlu;y6EZX4Rxj<4Q`#_Zwsi-l#c!8aC_`Qy z(9sDno0{4t@`qBkVUkjRGcyx{NzLUdd3QfYo0!+jJ711O}BT_axAxIDr7ji<{QY4P- zj;a8JU|JGrnjz~pbZdjr=0yZecl#;1AxuJ+ojd@VZj(J2dn_yt2^}6SAjEn#d zs_;AQ6R*f#bzbg_ir5d@Li5K*$n=Bp?woF?0D}pT0Ra@`EZT^g(^iPAk^X~ z5Z%E`5)XpluCyU@4TyoU)NDM2hy+2ssbdpE5Mp%I1mGbE60cV4iMzz;K^O$_`bLOd z%d8k8iBUpupp@0W7}^Qtcx0eWB@=+aLu4XDa%OS@g^jFiD|sd+77WaRBmgtIk}!o( zDkUsT#8}igM4N{bztCfW8x}##7IMI{!-0SM$yTXB^+5jrC( z5jAz3)-f_MLKIN|Q%^bHzHwL`+(;p0cVa=H-<@jpitHLxF|KM!9f?I^WXa90vH(UDzr^3rz0{sqZxRSHXwn6c?sc|Kn#LmG-PBm;tXV_fl(+RIN-Jp%0d)M zz1++It#meRS#_5 z$jrhL156v4HnELTi4b~HC5lbkF0K|kX=EmIS2e;fI@VsbT?hMy9O}umneMERh}nIU zZV9n4F=9Zd8K+I$nbtv=$g8@_s+tW@0N7Dfb?C=&Ozt?HPSq$G@u191WK|R<0`$6y z?uoGUmzRo}m;)m_q84q0gp$FR0!#_avRP?N%LeY~+1+yp0g;BB`?1Sr=uY5fV4KjM zPyzsqNnJCrP>eu?ET%@x72(8bciK$qPzhDSij0oyZk_s$*6TQo*dPfra(*$*>=oN} zaO{XIv1!|BY@4(US^F1zj1YyOjy#*z^I1D-VqHm75fOm_IGSO~mc7p@rIZm#Bmi*A zmUCbHeAYyaOh|-vjBOpGa8p-x6{{*@pwiC9OlB`wt`c-RqMNyviD0U#ma?iA%GH?@ z01jDK<52h?MnpF^Wx~K53tbGR!*aD=3~GLdwVvS z0Fjkz0U>Q;o9nRa2;Uq4i8#i(YOrc-T)SsahduNW2~yG>$zf4rFfb=9(?1lyc6NvSlsYD*%xB^2SCnO|2`;cpOd(btqLGw&;;$Nr7j_MK zIl807x}MJCbT(F19tpH$xkSW4O4Jsrz`{-lB%)4Z^3{;DannqiCRSApQkqb}OsA9C z&dyAPv$~q3jG7ZzCUA0NLU$NbHt)uiFlbC6hFJVcAz%?pjTBAuF!Va6Tm3R4|<5-@_Hp~pC6 zzDU|r1#QSxy-2EkZ#g3vgRAD0Q_|$1*#N1|POd2s)IsV%O;b&uqkrzIuBi_+Su%ddd3(yLr`Zl1<3Zo{pZWCNoVs}V>o=e|#>?yx*R zTdjv>H=JEwE!N$To!l!+1Ym`lr_$i!fG8nK2ok7iV%yZycG}kMtZAzdpkhSOaUCZ! zY4bpuU76Uqg6Ujt9O7≈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
    kbp1_zGa8uUu; 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