From e144b125809667f524f0089ab7c325c8879a6c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com> Date: Mon, 22 Apr 2024 23:08:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83v2.15.1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E8=AF=B7=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=EF=BC=9Ahttps://github.com/bufanyun/hotgo/blob/v2.0/d?= =?UTF-8?q?ocs/guide-zh-CN/start-update-log.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +- docs/guide-zh-CN/README.md | 17 +- docs/guide-zh-CN/addon-introduce-catalog.md | 1 + docs/guide-zh-CN/code-business.md | 5 + docs/guide-zh-CN/code-config.md | 170 ++ docs/guide-zh-CN/code-curd-join.md | 115 ++ docs/guide-zh-CN/code-curd.md | 84 + docs/guide-zh-CN/code-help.md | 18 + docs/guide-zh-CN/code-start.md | 20 + docs/guide-zh-CN/code-template-dev.md | 59 + docs/guide-zh-CN/code-tree.md | 93 + docs/guide-zh-CN/images/code/curd-add.png | Bin 0 -> 194502 bytes docs/guide-zh-CN/images/code/curd-fields.png | Bin 0 -> 201404 bytes docs/guide-zh-CN/images/code/curd-init.png | Bin 0 -> 127579 bytes docs/guide-zh-CN/images/code/curd-list.png | Bin 0 -> 137609 bytes docs/guide-zh-CN/images/code/curd-preview.png | Bin 0 -> 151647 bytes docs/guide-zh-CN/images/code/join-add.png | Bin 0 -> 160911 bytes docs/guide-zh-CN/images/code/join-fields.png | Bin 0 -> 222487 bytes docs/guide-zh-CN/images/code/join-fields2.png | Bin 0 -> 144624 bytes docs/guide-zh-CN/images/code/join-init.png | Bin 0 -> 153918 bytes docs/guide-zh-CN/images/code/join-list.png | Bin 0 -> 120698 bytes docs/guide-zh-CN/images/code/join-preview.png | Bin 0 -> 148228 bytes docs/guide-zh-CN/images/code/tree-add.png | Bin 0 -> 162294 bytes docs/guide-zh-CN/images/code/tree-fields.png | Bin 0 -> 230393 bytes docs/guide-zh-CN/images/code/tree-init.png | Bin 0 -> 149275 bytes docs/guide-zh-CN/images/code/tree-list.png | Bin 0 -> 181659 bytes docs/guide-zh-CN/images/code/tree-list2.png | Bin 0 -> 130281 bytes docs/guide-zh-CN/images/code/tree-preview.png | Bin 0 -> 152053 bytes docs/guide-zh-CN/images/demo/1.png | Bin 0 -> 391317 bytes docs/guide-zh-CN/images/demo/10.png | Bin 0 -> 650750 bytes docs/guide-zh-CN/images/demo/11.png | Bin 0 -> 713875 bytes docs/guide-zh-CN/images/demo/12.png | Bin 0 -> 524153 bytes docs/guide-zh-CN/images/demo/2.png | Bin 0 -> 603126 bytes docs/guide-zh-CN/images/demo/3.png | Bin 0 -> 697751 bytes docs/guide-zh-CN/images/demo/4.png | Bin 0 -> 739876 bytes docs/guide-zh-CN/images/demo/5.png | Bin 0 -> 681733 bytes docs/guide-zh-CN/images/demo/6.png | Bin 0 -> 617553 bytes docs/guide-zh-CN/images/demo/7.png | Bin 0 -> 502621 bytes docs/guide-zh-CN/images/demo/8.png | Bin 0 -> 461131 bytes docs/guide-zh-CN/images/demo/9.png | Bin 0 -> 649517 bytes docs/guide-zh-CN/images/sys-code-add.png | Bin 84907 -> 0 bytes .../images/sys-code-config-init.png | Bin 63696 -> 0 bytes .../images/sys-code-config-join-save.png | Bin 95253 -> 0 bytes .../images/sys-code-config-join.png | Bin 84112 -> 0 bytes .../images/sys-code-config-post.png | Bin 86711 -> 0 bytes .../images/sys-code-list-edit-ok.png | Bin 178010 -> 0 bytes docs/guide-zh-CN/images/sys-code-list-ok.png | Bin 61611 -> 0 bytes docs/guide-zh-CN/images/sys-code-list.png | Bin 61484 -> 0 bytes .../images/sys-code-master-save.png | Bin 174673 -> 0 bytes docs/guide-zh-CN/images/sys-code-master.png | Bin 195186 -> 0 bytes docs/guide-zh-CN/images/sys-code-preview.png | Bin 68935 -> 0 bytes docs/guide-zh-CN/images/sys-db-by.png | Bin 0 -> 135737 bytes docs/guide-zh-CN/images/sys-db-by2.png | Bin 0 -> 138902 bytes docs/guide-zh-CN/start-environment.md | 4 +- docs/guide-zh-CN/start-installation.md | 29 +- docs/guide-zh-CN/start-issue.md | 7 + docs/guide-zh-CN/start-update-log.md | 25 + docs/guide-zh-CN/sys-catalog.md | 1 + docs/guide-zh-CN/sys-code.md | 104 +- docs/guide-zh-CN/sys-db.md | 56 +- docs/guide-zh-CN/sys-library.md | 2 +- docs/guide-zh-CN/sys-queue.md | 37 +- docs/guide-zh-CN/sys-tenant.md | 172 ++ .../addons/hgexample/api/admin/table/table.go | 18 +- .../api/admin/tenantorder/tenantorder.go | 59 + .../api/admin/treetable/treetable.go | 18 +- .../addons/hgexample/api/home/index/index.go | 2 +- .../hgexample/controller/admin/sys/comp.go | 2 +- .../controller/admin/sys/tenant_order.go | 67 + server/addons/hgexample/logic/sys/table.go | 2 +- .../hgexample/logic/sys/tenant_order.go | 176 ++ .../model/input/sysin/tenant_order.go | 123 ++ .../router/genrouter/tenant_order.go | 13 + server/addons/hgexample/service/sys.go | 34 +- server/api/admin/common/upload.go | 6 +- server/api/admin/curddemo/curddemo.go | 38 +- server/api/admin/dept/dept.go | 20 +- server/api/admin/dict/dict_data.go | 4 +- server/api/admin/log/log.go | 12 +- .../admin/normaltreedemo/normaltreedemo.go | 69 + .../admin/optiontreedemo/optiontreedemo.go | 69 + server/api/admin/provinces/provinces.go | 4 +- server/api/admin/role/role.go | 4 +- server/api/admin/smslog/smslog.go | 22 +- server/api/admin/testcategory/testcategory.go | 69 + server/api/api/user/hello.go | 19 - server/go.mod | 39 +- server/go.sum | 93 +- server/hack/config.yaml | 2 +- server/internal/cmd/cmd.go | 2 + server/internal/cmd/handler_shutdown.go | 2 +- server/internal/cmd/tools.go | 39 + server/internal/consts/debris.go | 7 + server/internal/consts/dept.go | 30 + server/internal/consts/gencodes.go | 19 +- server/internal/consts/pay.go | 7 + server/internal/consts/version.go | 2 +- .../internal/controller/admin/admin/dept.go | 13 +- .../controller/admin/admin/monitor.go | 5 +- .../controller/admin/sys/curd_demo.go | 22 +- .../controller/admin/sys/normal_tree_demo.go | 80 + .../controller/admin/sys/option_tree_demo.go | 80 + .../internal/controller/admin/sys/sms_log.go | 12 - .../controller/admin/sys/test_category.go | 79 + server/internal/controller/api/user/hello.go | 26 - .../websocket/handler/admin/monitor.go | 4 +- .../dao/addon_hgexample_tenant_order.go | 27 + server/internal/dao/admin_dept.go | 2 +- server/internal/dao/admin_member.go | 2 +- server/internal/dao/admin_member_post.go | 2 +- server/internal/dao/admin_member_role.go | 2 +- server/internal/dao/admin_menu.go | 2 +- server/internal/dao/admin_notice.go | 2 +- server/internal/dao/admin_post.go | 2 +- server/internal/dao/admin_role.go | 2 +- server/internal/dao/admin_role_menu.go | 2 +- .../dao/internal/addon_hgexample_table.go | 12 +- .../internal/addon_hgexample_tenant_order.go | 93 + .../dao/internal/sys_gen_tree_demo.go | 99 + server/internal/dao/internal/sys_login_log.go | 50 +- server/internal/dao/internal/test_category.go | 2 + server/internal/dao/sys_config.go | 2 +- server/internal/dao/sys_dict_data.go | 2 +- server/internal/dao/sys_dict_type.go | 2 +- server/internal/dao/sys_gen_tree_demo.go | 27 + server/internal/dao/sys_log.go | 2 +- server/internal/dao/sys_provinces.go | 2 +- server/internal/global/cluster.go | 7 +- server/internal/global/init.go | 2 +- server/internal/library/addons/addons.go | 4 +- server/internal/library/addons/build.go | 2 +- server/internal/library/addons/module.go | 55 +- server/internal/library/captcha/captcha.go | 2 +- server/internal/library/casbin/enforcer.go | 28 +- server/internal/library/contexts/context.go | 29 + server/internal/library/dict/dict.go | 20 + .../library/dict/dict_register_enums.go | 4 +- .../library/dict/dict_register_func.go | 4 +- server/internal/library/hggen/hggen.go | 57 +- .../library/hggen/internal/cmd/cmd_init.go | 15 +- .../internal/cmd/gendao/gendao_structure.go | 11 +- .../library/hggen/views/column_default.go | 4 +- .../library/hggen/views/column_map.go | 137 +- server/internal/library/hggen/views/curd.go | 374 +++- .../hggen/views/curd_generate_input.go | 127 +- .../hggen/views/curd_generate_logic.go | 135 +- .../hggen/views/curd_generate_web_edit.go | 79 +- .../hggen/views/curd_generate_web_index.go | 133 +- .../hggen/views/curd_generate_web_model.go | 237 ++- .../hggen/views/curd_generate_web_view.go | 10 +- .../library/hggen/views/gohtml/consts.go | 7 + .../library/hggen/views/gohtml/doc.go | 2 + .../library/hggen/views/gohtml/element.go | 7 + .../library/hggen/views/gohtml/formatter.go | 37 + .../hggen/views/gohtml/html_document.go | 54 + .../library/hggen/views/gohtml/parser.go | 127 ++ .../library/hggen/views/gohtml/tag_element.go | 145 ++ .../hggen/views/gohtml/text_element.go | 43 + .../library/hggen/views/gohtml/utils.go | 101 ++ .../library/hggen/views/gohtml/writer.go | 33 + server/internal/library/hggen/views/utils.go | 125 +- server/internal/library/hgorm/dao.go | 33 + server/internal/library/hgorm/dao_tenant.go | 92 + .../library/hgorm/handler/filter_auth.go | 8 +- .../internal/library/hgorm/handler/handler.go | 9 +- .../internal/library/hgorm/handler/tenant.go | 49 + server/internal/library/hgorm/hook/member.go | 74 + server/internal/library/hgorm/hook/tenant.go | 288 +++ .../library/hgorm/hook/tenant_test.go | 67 + server/internal/library/hgrds/lock/lock.go | 1 + .../internal/library/hgrds/lock/lock_test.go | 42 +- server/internal/library/location/cache.go | 45 + server/internal/library/location/location.go | 64 +- .../library/location/location_test.go | 72 + server/internal/library/network/tcp/conn.go | 4 - server/internal/library/queue/logger.go | 2 +- server/internal/library/queue/producer.go | 8 +- server/internal/library/queue/queue.go | 27 +- server/internal/library/queue/redismq.go | 2 - server/internal/library/queue/rocketmq.go | 234 ++- .../internal/library/queue/rocketmq_logger.go | 83 - server/internal/logic/admin/credits_log.go | 2 +- server/internal/logic/admin/dept.go | 357 ++-- server/internal/logic/admin/member.go | 18 + server/internal/logic/admin/menu.go | 20 + server/internal/logic/admin/order.go | 2 +- server/internal/logic/admin/role.go | 4 + server/internal/logic/admin/site.go | 106 +- server/internal/logic/hook/access_log.go | 19 +- server/internal/logic/middleware/init.go | 8 +- server/internal/logic/middleware/response.go | 2 +- server/internal/logic/pay/pay.go | 2 +- server/internal/logic/pay/refund.go | 2 +- server/internal/logic/sys/addons_config.go | 4 +- server/internal/logic/sys/config.go | 4 +- server/internal/logic/sys/curd_demo.go | 151 +- server/internal/logic/sys/dict_data.go | 6 +- server/internal/logic/sys/ems_log.go | 8 +- server/internal/logic/sys/log.go | 10 +- server/internal/logic/sys/login_log.go | 58 +- server/internal/logic/sys/normal_tree_demo.go | 176 ++ server/internal/logic/sys/option_tree_demo.go | 176 ++ server/internal/logic/sys/serve_license.go | 2 +- server/internal/logic/sys/serve_log.go | 2 +- server/internal/logic/sys/sms_log.go | 49 +- server/internal/logic/sys/test_category.go | 167 ++ server/internal/logic/tcpclient/auth.go | 8 + server/internal/logic/view/view.go | 25 +- server/internal/model/context.go | 1 + .../model/do/addon_hgexample_table.go | 6 +- .../model/do/addon_hgexample_tenant_order.go | 26 + server/internal/model/do/sys_gen_tree_demo.go | 29 + server/internal/model/do/sys_login_log.go | 27 +- server/internal/model/do/test_category.go | 1 + .../model/entity/addon_hgexample_table.go | 74 +- .../entity/addon_hgexample_tenant_order.go | 24 + server/internal/model/entity/admin_cash.go | 20 +- .../model/entity/admin_credits_log.go | 30 +- server/internal/model/entity/admin_dept.go | 28 +- server/internal/model/entity/admin_member.go | 56 +- .../model/entity/admin_member_post.go | 4 +- .../model/entity/admin_member_role.go | 4 +- server/internal/model/entity/admin_menu.go | 52 +- server/internal/model/entity/admin_notice.go | 28 +- .../model/entity/admin_notice_read.go | 12 +- server/internal/model/entity/admin_oauth.go | 30 +- server/internal/model/entity/admin_order.go | 24 +- server/internal/model/entity/admin_post.go | 16 +- server/internal/model/entity/admin_role.go | 26 +- .../model/entity/admin_role_casbin.go | 16 +- .../internal/model/entity/admin_role_menu.go | 4 +- server/internal/model/entity/pay_log.go | 60 +- server/internal/model/entity/pay_refund.go | 26 +- .../model/entity/sys_addons_config.go | 28 +- .../internal/model/entity/sys_attachment.go | 34 +- server/internal/model/entity/sys_blacklist.go | 12 +- server/internal/model/entity/sys_config.go | 26 +- server/internal/model/entity/sys_cron.go | 26 +- .../internal/model/entity/sys_cron_group.go | 18 +- server/internal/model/entity/sys_dict_data.go | 24 +- server/internal/model/entity/sys_dict_type.go | 18 +- server/internal/model/entity/sys_ems_log.go | 20 +- server/internal/model/entity/sys_gen_codes.go | 28 +- .../model/entity/sys_gen_curd_demo.go | 32 +- .../model/entity/sys_gen_tree_demo.go | 27 + server/internal/model/entity/sys_log.go | 46 +- server/internal/model/entity/sys_login_log.go | 25 +- server/internal/model/entity/sys_provinces.go | 24 +- .../model/entity/sys_serve_license.go | 34 +- server/internal/model/entity/sys_serve_log.go | 20 +- server/internal/model/entity/sys_sms_log.go | 18 +- server/internal/model/entity/test_category.go | 19 +- server/internal/model/gen_codes.go | 33 +- server/internal/model/input/adminin/dept.go | 29 +- server/internal/model/input/adminin/member.go | 5 +- server/internal/model/input/adminin/menu.go | 2 +- server/internal/model/input/form/page.go | 5 +- .../internal/model/input/sysin/curd_demo.go | 116 +- .../internal/model/input/sysin/dict_data.go | 6 +- .../internal/model/input/sysin/gen_codes.go | 13 +- .../internal/model/input/sysin/login_log.go | 59 +- .../model/input/sysin/normal_tree_demo.go | 141 ++ .../model/input/sysin/option_tree_demo.go | 140 ++ .../model/input/sysin/test_category.go | 143 ++ server/internal/packed/packed.go | 8 + server/internal/router/api.go | 2 - server/internal/router/genrouter/curd_demo.go | 4 +- .../router/genrouter/normal_tree_demo.go | 13 + .../router/genrouter/option_tree_demo.go | 13 + .../router/genrouter/test_category.go | 13 + server/internal/service/admin.go | 330 ++-- server/internal/service/sys.go | 153 +- server/internal/service/tcpclient.go | 3 + server/internal/websocket/init.go | 2 +- server/manifest/config/config.example.yaml | 38 +- .../addon/api/admin/config/config.go.template | 2 +- .../addon/api/admin/index/index.go.template | 2 +- .../addon/api/api/index/index.go.template | 2 +- .../addon/api/home/index/index.go.template | 2 +- .../api/websocket/index/index.go.template | 2 +- .../default/addon/consts/consts.go.template | 9 + .../controller/admin/sys/config.go.template | 2 +- .../controller/admin/sys/index.go.template | 2 +- .../addon/controller/api/index.go.template | 2 +- .../addon/controller/home/index.go.template | 2 +- .../controller/websocket/index.go.template | 2 +- .../default/addon/crons/crons.go.template | 2 +- .../default/addon/global/global.go.template | 2 +- .../default/addon/global/init.go.template | 2 +- .../addon/logic/sys/config.go.template | 2 +- .../default/addon/logic/sys/index.go.template | 2 +- .../generate/default/addon/main.go.template | 2 +- .../default/addon/model/config.go.template | 2 +- .../model/input/sysin/config.go.template | 2 +- .../addon/model/input/sysin/index.go.template | 2 +- .../default/addon/queues/queues.go.template | 2 +- .../default/addon/router/admin.go.template | 2 +- .../default/addon/router/api.go.template | 2 +- .../addon/router/genrouter/init.go.template | 2 +- .../default/addon/router/home.go.template | 2 +- .../addon/router/websocket.go.template | 2 +- .../generate/default/curd/api.go.template | 9 + .../default/curd/controller.go.template | 12 +- .../generate/default/curd/input.go.template | 30 +- .../generate/default/curd/logic.go.template | 122 +- .../generate/default/curd/source.sql.template | 11 +- .../generate/default/curd/web.api.ts.template | 9 + .../default/curd/web.edit.vue.template | 96 +- .../default/curd/web.index.vue.template | 360 +++- .../default/curd/web.model.ts.template | 77 +- .../default/curd/web.view.vue.template | 26 +- .../generate/addons/tenant_order_menu.sql | 62 + .../storage/data/generate/curd_demo_menu.sql | 24 +- .../data/generate/normal_tree_demo_menu.sql | 71 + .../data/generate/option_tree_demo_menu.sql | 71 + .../data/generate/test_category_menu.sql | 62 + server/storage/data/hotgo.sql | 1592 ++++++++++------- server/utility/convert/convert.go | 5 + server/utility/excel/excel.go | 37 +- server/utility/simple/simple.go | 29 +- server/utility/simple/system_config.go | 31 + server/utility/tree/tree_list.go | 32 + web/package.json | 26 +- web/src/App.vue | 4 + .../api/addons/hgexample/tenantOrder/index.ts | 42 + web/src/api/curdDemo/index.ts | 31 +- web/src/api/normalTreeDemo/index.ts | 53 + web/src/api/optionTreeDemo/index.ts | 53 + web/src/api/org/dept.ts | 26 + web/src/api/org/post.ts | 8 - web/src/api/testCategory/index.ts | 54 + web/src/components/DatePicker/datePicker.vue | 154 +- web/src/components/DatePicker/props.ts | 4 + web/src/components/FileChooser/index.vue | 5 +- web/src/components/Form/src/BasicForm.vue | 45 +- web/src/components/Form/src/types/form.ts | 4 + web/src/components/IconSelector/index.vue | 7 +- web/src/components/Lockscreen/Lockscreen.vue | 19 +- web/src/directives/copy.ts | 1 - web/src/enums/deptEnum.ts | 14 + web/src/enums/optionsiEnum.ts | 93 +- web/src/enums/roleEnum.ts | 7 - web/src/layout/components/Header/index.vue | 38 +- web/src/layout/components/TagsView/index.vue | 3 +- web/src/layout/index.vue | 6 +- web/src/store/modules/user.ts | 16 +- web/src/utils/hotgo.ts | 91 +- web/src/utils/http/axios/checkStatus.ts | 2 +- web/src/utils/index.ts | 154 +- web/src/views/addons/hgexample/table/edit.vue | 10 +- .../views/addons/hgexample/table/index.vue | 12 +- .../addons/hgexample/tenantOrder/alert.vue | 76 + .../addons/hgexample/tenantOrder/edit.vue | 163 ++ .../addons/hgexample/tenantOrder/index.vue | 146 ++ .../addons/hgexample/tenantOrder/model.ts | 243 +++ .../views/addons/hgexample/treeTable/edit.vue | 8 +- .../addons/hgexample/treeTable/index.vue | 5 +- .../views/addons/hgexample/treeTable/list.vue | 14 +- web/src/views/apply/notice/index.vue | 20 +- web/src/views/apply/provinces/edit.vue | 10 +- web/src/views/apply/provinces/index.vue | 6 +- web/src/views/apply/provinces/list.vue | 14 +- web/src/views/asset/cash/list.vue | 21 +- web/src/views/asset/creditsLog/list.vue | 9 +- .../views/asset/rechargeLog/acceptRefund.vue | 10 +- .../views/asset/rechargeLog/applyRefund.vue | 13 +- web/src/views/asset/rechargeLog/list.vue | 10 +- web/src/views/curdDemo/edit.vue | 214 ++- web/src/views/curdDemo/index.vue | 137 +- web/src/views/curdDemo/model.ts | 219 ++- web/src/views/curdDemo/view.vue | 148 +- web/src/views/dashboard/console/console.vue | 351 +--- .../dashboard/console/console_company.vue | 339 ++++ .../dashboard/console/console_merchant.vue | 11 + .../dashboard/console/console_tenant.vue | 11 + .../views/dashboard/console/console_user.vue | 13 + web/src/views/develop/addons/index.vue | 12 +- .../develop/code/components/BaseInfo.vue | 117 +- .../code/components/EditMasterCell.vue | 564 ++++-- .../develop/code/components/EditSlaveCell.vue | 550 ++++-- .../views/develop/code/components/Move.vue | 82 + .../develop/code/components/PreviewTab.vue | 97 +- .../develop/code/components/SetFuncDict.vue | 133 ++ .../views/develop/code/components/model.ts | 80 +- web/src/views/develop/code/deploy.vue | 79 +- web/src/views/develop/code/index.vue | 9 +- web/src/views/home/account/SafetySetting.vue | 10 +- web/src/views/home/account/ThirdBind.vue | 22 +- web/src/views/log/ems-log/index.vue | 4 +- web/src/views/log/log/index.vue | 15 +- web/src/views/log/log/view.vue | 225 +-- web/src/views/log/login-log/index.vue | 26 +- web/src/views/log/login-log/model.ts | 39 +- web/src/views/log/login-log/view.vue | 136 -- web/src/views/log/sms-log/index.vue | 13 +- web/src/views/login/login/demo-account.vue | 17 +- web/src/views/login/login/form.vue | 4 +- web/src/views/login/register/index.vue | 10 +- web/src/views/monitor/netconn/columns.ts | 2 +- web/src/views/monitor/netconn/index.vue | 15 +- web/src/views/monitor/netconn/modal/edit.vue | 10 +- web/src/views/monitor/netconn/modal/index.vue | 25 +- web/src/views/monitor/online/columns.ts | 25 +- web/src/views/monitor/online/index.vue | 13 +- web/src/views/monitor/serve-log/index.vue | 11 +- web/src/views/normalTreeDemo/edit.vue | 163 ++ web/src/views/normalTreeDemo/index.vue | 202 +++ web/src/views/normalTreeDemo/model.ts | 222 +++ web/src/views/normalTreeDemo/view.vue | 92 + web/src/views/optionTreeDemo/edit.vue | 163 ++ web/src/views/optionTreeDemo/index.vue | 314 ++++ web/src/views/optionTreeDemo/model.ts | 216 +++ web/src/views/optionTreeDemo/view.vue | 92 + web/src/views/org/dept/dept.vue | 569 ++---- web/src/views/org/dept/edit.vue | 192 ++ web/src/views/org/dept/model.ts | 247 +++ web/src/views/org/post/columns.ts | 19 +- web/src/views/org/post/post.vue | 51 +- web/src/views/org/user/addBalance.vue | 10 +- web/src/views/org/user/addIntegral.vue | 8 +- web/src/views/org/user/columns.ts | 8 +- web/src/views/org/user/list.vue | 110 +- web/src/views/org/user/model.ts | 11 +- .../views/permission/menu/CreateDrawer.vue | 400 ----- web/src/views/permission/menu/addModal.vue | 84 + web/src/views/permission/menu/editForm.vue | 417 +++++ web/src/views/permission/menu/menu.vue | 571 +----- web/src/views/permission/menu/menuModal.vue | 43 + web/src/views/permission/menu/model.ts | 75 +- web/src/views/permission/role/columns.ts | 42 +- .../views/permission/role/editDataAuth.vue | 116 ++ .../views/permission/role/editMenuAuth.vue | 216 +++ web/src/views/permission/role/editRole.vue | 146 ++ web/src/views/permission/role/model.ts | 40 + web/src/views/permission/role/role.vue | 388 +--- web/src/views/system/config/LoginSetting.vue | 23 +- web/src/views/system/cron/columns.ts | 8 + web/src/views/system/cron/index.vue | 12 +- web/src/views/system/dict/columns.ts | 2 +- web/src/views/system/dict/index.vue | 30 +- web/src/views/system/dict/list.vue | 39 +- web/src/views/testCategory/edit.vue | 151 ++ web/src/views/testCategory/index.vue | 190 ++ web/src/views/testCategory/model.ts | 184 ++ web/vite.config.ts | 13 +- 445 files changed, 17457 insertions(+), 6708 deletions(-) create mode 100644 docs/guide-zh-CN/code-business.md create mode 100644 docs/guide-zh-CN/code-config.md create mode 100644 docs/guide-zh-CN/code-curd-join.md create mode 100644 docs/guide-zh-CN/code-curd.md create mode 100644 docs/guide-zh-CN/code-help.md create mode 100644 docs/guide-zh-CN/code-start.md create mode 100644 docs/guide-zh-CN/code-template-dev.md create mode 100644 docs/guide-zh-CN/code-tree.md create mode 100644 docs/guide-zh-CN/images/code/curd-add.png create mode 100644 docs/guide-zh-CN/images/code/curd-fields.png create mode 100644 docs/guide-zh-CN/images/code/curd-init.png create mode 100644 docs/guide-zh-CN/images/code/curd-list.png create mode 100644 docs/guide-zh-CN/images/code/curd-preview.png create mode 100644 docs/guide-zh-CN/images/code/join-add.png create mode 100644 docs/guide-zh-CN/images/code/join-fields.png create mode 100644 docs/guide-zh-CN/images/code/join-fields2.png create mode 100644 docs/guide-zh-CN/images/code/join-init.png create mode 100644 docs/guide-zh-CN/images/code/join-list.png create mode 100644 docs/guide-zh-CN/images/code/join-preview.png create mode 100644 docs/guide-zh-CN/images/code/tree-add.png create mode 100644 docs/guide-zh-CN/images/code/tree-fields.png create mode 100644 docs/guide-zh-CN/images/code/tree-init.png create mode 100644 docs/guide-zh-CN/images/code/tree-list.png create mode 100644 docs/guide-zh-CN/images/code/tree-list2.png create mode 100644 docs/guide-zh-CN/images/code/tree-preview.png create mode 100644 docs/guide-zh-CN/images/demo/1.png create mode 100644 docs/guide-zh-CN/images/demo/10.png create mode 100644 docs/guide-zh-CN/images/demo/11.png create mode 100644 docs/guide-zh-CN/images/demo/12.png create mode 100644 docs/guide-zh-CN/images/demo/2.png create mode 100644 docs/guide-zh-CN/images/demo/3.png create mode 100644 docs/guide-zh-CN/images/demo/4.png create mode 100644 docs/guide-zh-CN/images/demo/5.png create mode 100644 docs/guide-zh-CN/images/demo/6.png create mode 100644 docs/guide-zh-CN/images/demo/7.png create mode 100644 docs/guide-zh-CN/images/demo/8.png create mode 100644 docs/guide-zh-CN/images/demo/9.png delete mode 100644 docs/guide-zh-CN/images/sys-code-add.png delete mode 100644 docs/guide-zh-CN/images/sys-code-config-init.png delete mode 100644 docs/guide-zh-CN/images/sys-code-config-join-save.png delete mode 100644 docs/guide-zh-CN/images/sys-code-config-join.png delete mode 100644 docs/guide-zh-CN/images/sys-code-config-post.png delete mode 100644 docs/guide-zh-CN/images/sys-code-list-edit-ok.png delete mode 100644 docs/guide-zh-CN/images/sys-code-list-ok.png delete mode 100644 docs/guide-zh-CN/images/sys-code-list.png delete mode 100644 docs/guide-zh-CN/images/sys-code-master-save.png delete mode 100644 docs/guide-zh-CN/images/sys-code-master.png delete mode 100644 docs/guide-zh-CN/images/sys-code-preview.png create mode 100644 docs/guide-zh-CN/images/sys-db-by.png create mode 100644 docs/guide-zh-CN/images/sys-db-by2.png create mode 100644 docs/guide-zh-CN/sys-tenant.md create mode 100644 server/addons/hgexample/api/admin/tenantorder/tenantorder.go create mode 100644 server/addons/hgexample/controller/admin/sys/tenant_order.go create mode 100644 server/addons/hgexample/logic/sys/tenant_order.go create mode 100644 server/addons/hgexample/model/input/sysin/tenant_order.go create mode 100644 server/addons/hgexample/router/genrouter/tenant_order.go create mode 100644 server/api/admin/normaltreedemo/normaltreedemo.go create mode 100644 server/api/admin/optiontreedemo/optiontreedemo.go create mode 100644 server/api/admin/testcategory/testcategory.go delete mode 100644 server/api/api/user/hello.go create mode 100644 server/internal/consts/dept.go create mode 100644 server/internal/controller/admin/sys/normal_tree_demo.go create mode 100644 server/internal/controller/admin/sys/option_tree_demo.go create mode 100644 server/internal/controller/admin/sys/test_category.go delete mode 100644 server/internal/controller/api/user/hello.go create mode 100644 server/internal/dao/addon_hgexample_tenant_order.go create mode 100644 server/internal/dao/internal/addon_hgexample_tenant_order.go create mode 100644 server/internal/dao/internal/sys_gen_tree_demo.go create mode 100644 server/internal/dao/sys_gen_tree_demo.go create mode 100644 server/internal/library/hggen/views/gohtml/consts.go create mode 100644 server/internal/library/hggen/views/gohtml/doc.go create mode 100644 server/internal/library/hggen/views/gohtml/element.go create mode 100644 server/internal/library/hggen/views/gohtml/formatter.go create mode 100644 server/internal/library/hggen/views/gohtml/html_document.go create mode 100644 server/internal/library/hggen/views/gohtml/parser.go create mode 100644 server/internal/library/hggen/views/gohtml/tag_element.go create mode 100644 server/internal/library/hggen/views/gohtml/text_element.go create mode 100644 server/internal/library/hggen/views/gohtml/utils.go create mode 100644 server/internal/library/hggen/views/gohtml/writer.go create mode 100644 server/internal/library/hgorm/dao_tenant.go create mode 100644 server/internal/library/hgorm/handler/tenant.go create mode 100644 server/internal/library/hgorm/hook/tenant.go create mode 100644 server/internal/library/hgorm/hook/tenant_test.go create mode 100644 server/internal/library/location/cache.go create mode 100644 server/internal/library/location/location_test.go delete mode 100644 server/internal/library/queue/rocketmq_logger.go create mode 100644 server/internal/logic/sys/normal_tree_demo.go create mode 100644 server/internal/logic/sys/option_tree_demo.go create mode 100644 server/internal/logic/sys/test_category.go create mode 100644 server/internal/model/do/addon_hgexample_tenant_order.go create mode 100644 server/internal/model/do/sys_gen_tree_demo.go create mode 100644 server/internal/model/entity/addon_hgexample_tenant_order.go create mode 100644 server/internal/model/entity/sys_gen_tree_demo.go create mode 100644 server/internal/model/input/sysin/normal_tree_demo.go create mode 100644 server/internal/model/input/sysin/option_tree_demo.go create mode 100644 server/internal/model/input/sysin/test_category.go create mode 100644 server/internal/router/genrouter/normal_tree_demo.go create mode 100644 server/internal/router/genrouter/option_tree_demo.go create mode 100644 server/internal/router/genrouter/test_category.go create mode 100644 server/resource/generate/default/addon/consts/consts.go.template create mode 100644 server/storage/data/generate/addons/tenant_order_menu.sql create mode 100644 server/storage/data/generate/normal_tree_demo_menu.sql create mode 100644 server/storage/data/generate/option_tree_demo_menu.sql create mode 100644 server/storage/data/generate/test_category_menu.sql create mode 100644 server/utility/simple/system_config.go create mode 100644 server/utility/tree/tree_list.go create mode 100644 web/src/api/addons/hgexample/tenantOrder/index.ts create mode 100644 web/src/api/normalTreeDemo/index.ts create mode 100644 web/src/api/optionTreeDemo/index.ts create mode 100644 web/src/api/testCategory/index.ts create mode 100644 web/src/enums/deptEnum.ts delete mode 100644 web/src/enums/roleEnum.ts create mode 100644 web/src/views/addons/hgexample/tenantOrder/alert.vue create mode 100644 web/src/views/addons/hgexample/tenantOrder/edit.vue create mode 100644 web/src/views/addons/hgexample/tenantOrder/index.vue create mode 100644 web/src/views/addons/hgexample/tenantOrder/model.ts create mode 100644 web/src/views/dashboard/console/console_company.vue create mode 100644 web/src/views/dashboard/console/console_merchant.vue create mode 100644 web/src/views/dashboard/console/console_tenant.vue create mode 100644 web/src/views/dashboard/console/console_user.vue create mode 100644 web/src/views/develop/code/components/Move.vue create mode 100644 web/src/views/develop/code/components/SetFuncDict.vue delete mode 100644 web/src/views/log/login-log/view.vue create mode 100644 web/src/views/normalTreeDemo/edit.vue create mode 100644 web/src/views/normalTreeDemo/index.vue create mode 100644 web/src/views/normalTreeDemo/model.ts create mode 100644 web/src/views/normalTreeDemo/view.vue create mode 100644 web/src/views/optionTreeDemo/edit.vue create mode 100644 web/src/views/optionTreeDemo/index.vue create mode 100644 web/src/views/optionTreeDemo/model.ts create mode 100644 web/src/views/optionTreeDemo/view.vue create mode 100644 web/src/views/org/dept/edit.vue create mode 100644 web/src/views/org/dept/model.ts delete mode 100644 web/src/views/permission/menu/CreateDrawer.vue create mode 100644 web/src/views/permission/menu/addModal.vue create mode 100644 web/src/views/permission/menu/editForm.vue create mode 100644 web/src/views/permission/menu/menuModal.vue create mode 100644 web/src/views/permission/role/editDataAuth.vue create mode 100644 web/src/views/permission/role/editMenuAuth.vue create mode 100644 web/src/views/permission/role/editRole.vue create mode 100644 web/src/views/permission/role/model.ts create mode 100644 web/src/views/testCategory/edit.vue create mode 100644 web/src/views/testCategory/index.vue create mode 100644 web/src/views/testCategory/model.ts diff --git a/README.md b/README.md index 520d0d1..add98f3 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@
![]() |
- ![]() |
+ ![]() |
+ ![]() |
![]() |
- ![]() |
+ ![]() |
+ ![]() |
![]() |
- ![]() |
+ ![]() |
+ ![]() |
![]() |
- ![]() |
+ ![]() |
+ ![]() |
![]() |
- ![]() |
+ ![]() |
+ ![]() |
+
![]() |
+ ![]() |
FI^#6%}22osC@WjC>VeElynznVU5j9>&pb|H!U*vB8YBY?TE9-|Cs>_WOE!m&guh zeE4_#K%xx73`Xzlny#PC1u&=cI1_PL&uK@AI<-q`?HdR>V;UM7O=6Y2cyFSG?zRBY z!y8i;%O0nQo>N=nyn9W{d96F5ufud{JnWGe&pFe*@JY~JoGZh@iENVedr z(lu`(FR0U-RTP7yUho8zSL28ZPN;u3V=%(g5Ufzc>k?7Wsl{@-RP-$+`D#?S;SlSb z(S$$%?g^)b=;BF=FSkrAMbRJ{fI B4-{*?dVJsQ9x^avtRX5P{%m~1H+x&H0Xr? z!TM)~fQfq$V`Is8kR~6Kv9YmyqBu_a9x5^{CwEv|SFb#Yy@R5;eqACN$jhFQ;dyyM z;$Ux297R2imzv4-Zi|~uogE$dJBx}MTElTfVASCe9OJj~MQ>{2FOnz%+pug+R1A}> zoPw{epdiBkzUXHIdblYfVUj7&l X^2veS}f8oq?zRlZ&R&|}? zr3=q`?M|;_?D%lk^>&48oxgrP)OhiNXo;D4qK?_AiDif^zf32O0q4@^*ss0451Cn5 zq!G=+uvTryPoIBRm9?3v_U~qLlzKiNVWww<8h0s(J+>e4(;~TmUS60Ka5p^5UYf_- zFSyg=CKu$nk|wE((Qda^X{lp0->XK6xIqVyj|EcIedM0HlP*(kUIMYE9Nwau?N;H- z{bS-4ysto7vv0| k0qXjJnA7+~C8LRr=XS|_m0+`}s694|pq((X>uoap z*L|?J4P*;)z%3q}AA+N=_FE~{G&Y(k@js-dipSckc$zSHXNJTZ^-Ano1>Z1cw6^6t zlsQ>yX?SD7HrIBMlXSzw>B{_Gg+9@GR|d9QE5_bHR4#n`#w;7$Zu0bL=OG?@+$hur zHe837$_KP@o5B u-gXViH0s+5SaXc+-N?uUwR^gQHrdJG*U z;?nQS;IEf%9?LZC1o#H8cl@p|JJAYq<^(fnQzFm~_RSSsGH%a%PESuMxbIziu7{_g zrqz1=y29Jf&q?fyyW)Lm?JQOMfXj9gtAG^p0{>m2Y{BAhps%mxYL*#MNGbQGcE_vN zkO-NsPZrl&@CkIHSdD+QRjQF_n|kz%7D*zq&a+v7d2rm5)3LRDv;#xRhUR`c`F1G@ zL*rZvm&IMLRYPa$kpvb5-`YxO-47t{yixMlm^aTs<$g3#YnalTvU0J(V&)iG_VVI6 zusOo7P|NYp42GTZ6^k}2oh=ta2UzFQzgIscQ#iKiea9$5Gr)``U=bhj1VrPZj?fl( z<=XG%_4qQoRx>Pd8$jI3*GCTpekJ$zIw)R9ouvI(Sy>aMiS+@n-5FRjWT2dQ(;EAT z>elZ9yZNM!T+3F77a8NH3fFY{Q$F&c*5FHm`rI@g6MUIaw9VpTgvCHF9g|uv#DAyC zC@HBB9WlRLzU^c7MvL^|wKaN{KY0t(0-FgjXiG(%%o>zzpp2kNRh8Fa$AlV2D?l0R znyjt<0z#-%HhWyB+L;&NT=3KG@N9ebIdFQu&UP`z{NG((OC;XoOiXM^g{hJb!SGVD zB02V?gS7-ttU(n+sEBa+;AggW*>=2$p$E1p`@`+?hmp^pMFqPzm{K+KT}*ZGO7UoI zqfmT!-xhq+$tJSiO#zCEOG!U&6tEKoB#ft&^;JrwluVug-T*IAZC0L#H4uE;5~0(D z^<+WY^iE1AzcN&3Y17bZ36g0Bq(&)R>bhHsL4My-;qUM!{jjp~)mQ^EGUl7D6&~xh z*pfU_kv0a0-wz8@z3nSu8aR-*%~a~X=kMwH){M13CsIZrw!dHS5btVlKccx-w(H8w z&Mq}{qDgI#r3_%LNkc0O6r=LDM(H26`T;U){7P9@-NJc7f#Jw59R|K!N3$_bkr%L@ zcm-zT_#&F9hy%+0TE0O|2vCS#U$Ok|-d8EF** SA%-iSz j66j@C~4-22dJ15X69ZuI46|8RW8*UBTS zl)8kz?`p=F-%_P{`>pt&E_Apvjvy-QvHxZLE<=AEJ4MYZp(6=ptitKRZw9UeL@HW= zg_fqLAME#T#hbr?rtugxl6jtnpWxg%%1QJ$jgMTbTV~$c<--UfhN8W~58|Qo!+mub zk&B{kLQzrVNPJk#76ox-hsjk? DdROmmWBpht8}Zvm&3iilXVgex5A&W zjqmkSRa;)nRMT9S$m~4(>0*21#*rnR$nhNpBMKL_kyxKR77pm<=FU!HYQy8}*IOTU zb>+*s*xSE2KR-XTyo2cSVCLX}N0Ac$;*Zr!(rP4raPQM3s4kfOerY1~a^!SJI9YaW z2{pxOf&}IKQ-pyYhGS&OPI%F-Ile7V=C*p|f6bb3gmumiV;;m(BVvwr6gD3c5kg)* z9<4G{+LV#PcQdXpFFRAgBiNRRu`)A8UM0TwBBy{U$JgPzwxZ`g%)=RnG!^7Hd%J2> zT&1?m^_wwc4)Qeqn+nYf+Mkd>Wm(_zc>MWPWs*6*f^AQMA0~R*57@Pn)KeD=mf;7` z0N>v^kw}RqG&WSR%V=m0CRT%0JbTtk{@NS?Ucy*V!}nXLX0hpX!(MGw$ev#(+$|o> z$jyff-75);RUpWb;gwX1$+LI1Q#osLgGYbJ_8$it9XDqsHP4)NdoFp1L85L1 (X zM*M5^2>^C?Ibyyv8GwtEN`--5c20Io VBppq6|IzeOfKSO({?Nw;L&4l< zrBtf`1%7m=R>0`*x{gJL*frwrtBcz!7h$#p{f;RP6LnH-$O$Vhgi4y0V?x7fO_hD^ z3S*Qz=eXFkAfoH+wBnb>+#()&d2)F;^}H}#W>_|S`*b7XV!QL5sKEAUsBJ*N^I>dH z;T+3Ao+5P-)@4|AUR?|VJ}QhSezaTD4doSawC)ZPYJ;f}2ljShUw~|Lh~#6p|4Dl` zaUaUAj7xakPH;E$r0U=Bb#5X8(B*Y?9t<#Ytl(8Sfw(tx;LTIAMm8paxqY^}N^IPY z(mLO+ok*0Mc`DxaCFF}n;!excvq|uKREZ3 IJT>j)mN z1rMq{Z}4(U>Asby;^Pt2Ic8JJC-xV$?Agb7`+ %evnWs5eemoK^=bZ0xb$xs1&j;^qUlVy zFM!AM(y`^3+O({;>;qY1MW#|b2Y|wF(WAsnW>QO42VRes+<%@V-VqRv32A>engR|8 z&_vc#Kjz8Jt@(1c6nrsybT#y~-n7*do$w|US^7K7xZT1mIq7hk;;5Z15}tAC#ddcf z?=}b8$@#CEHy=&)_H5uDF;GNQb^BQw*1)<@wXidF5{6zUqlwJJLRa _Dk#_UHs$^nS#o`L<>T;T63CB}zg@u+oZN^q`pq{4PKm4iQ zrBwGpAV3ebBv?K&!YNQ(#MhsCsoSpbbCC7&J~pbzfP4&;6UJ1pxMeEwZs+;GB3Ukm z`srzAo67YTI^nyMN8MIPBqI$i!fI7ll5)yGOzw5@%>8bCK?Gear!uC1`?OA(#{M*l zi<6`a?5zx^LbP|i5=7_(0O+!cWhA+lj&We3G}&^8A*F9fwJ=(Aq%Yv5vS*)(=p8)x zx2`58slQ8bint7VFHp|bH?zS%IIJ-4L{%;nPV;{Lq7g@c4Q+~Et#CzwaT*pH-x?YM zH1-DPjNe1i^(VrC?vJkJ_&VCg;(;T&^&hyv1(hx>zL*f!w`Onh8O4;&o9g2$b?jBc z*FGhyQYa2>bww;)%H8kX@;f?hTzxlPw|n;XuPPsJ@!K#wjiEocuDJboNg-3WS1L^d zWQ6YN)2By3iPZFrw1kQZclMX`gw;X9h`ExuW-&$`*6q#A#LS+AP=`b#T}xR9*7lc| zKP4JYme#y$C;MQ?!j_V_G<8)G4S*pZ6Ak~pn2X(dCxlPjRMW27!(hiz6{FD(#PhTC zXL^HMlB8P_RPfA$cMPR2eY2(Q3Pqcb*k6CVv^Up?N0kaY3~asQz`ed0xYwmq(heR7 z18#Acj2-=%&q|T6#g0i^m*&FAt_`^DLhITe#V!$=Y#oAU^D%U>qKlm^9XGbN*zv2| zuIgmicjU<2>kzv16qYPLgcnv2DKJELbNvgJQh$eXo~~$(k#%&mGC=A0@UU<2(+kA{ zdisP~^jNjs@S!1hy_>q$*L~(N8;=}HRHrxzNm#%>r4<*cY3onWR@4_QJtD+JbAy$R zuGVv2NkJQaHD36fiq=$59NFH*`+v(%ss5n<>b2)))HIOZd3-JddR7@}PYkg)?6Ky! z^Fevf1Iv(F>Mv1grhBx>5fRU?fBuvVFddmiG%TJp`|47NK6`RGx{ZR6Vxc>VMHclq zBfv~0CiT>eDxq+bR70~_uq*$>x*m0XUjbQw^OoV)dCFt8KHOQb4pD{i$(R40owX&J z1qV%B-(=4YqAF?hs QEkw#!|6$@>@o-@XW*Mi$1lhqzBD30h+&KUX)(w z4ENPW;Je!_WZzF=a8fN$8wH580!sj=(l6XchQ~DW7qPZ2&l%U4R(%o|isP&bf_P;W zwZ3TfS&Iq~l#jtKiS)!QZs9M{B<@)V%?jPuRg|AvhwJkf*6YF<5sv N(c%{cMaVQQbTt$ z3^2d|L;RP&y`N`4?>^q+_ y+ zS(|%1no7BZcdgJ(_-~_go8q=ojZ?p*8)Gj|Zvz39q(Ev>WDu6NB%fQbu`-@NxjJ3B z_}N{iS3aY)@}s}2)zdbQPe(DA55g1&e|`V{x-ihi&hd6eU*mKN2h95Q>*EW}K-fM< zmZHfLfHM5C_o?WwwRU7>6qi)dR)77ys;#GYaKZvRrJ#_Im?qj|xAtM}x6PaR&wG36 zRKcD*rREo#rQg!iFF#uM{hRe^)E{Kq9ZzoqIIKQxEy3Q;nXV4VM%sRy8AW_f#UqN< z18?Hi-5nYh@9ZDJH~@-9NfkdoEi#FRok;Tkz*f9fn(ow`jZF#Z8tl$m+2HR(Qjr&Y zyum#40aM3S{W|eZoVKOcZZ5zOreg&q{HgnS7biakv~B6VtVHz-XXH=6@0z_T#>GBV zlajb)mOR$)Sj)h`kAr=^4J)7ES}1_4`p;X6u8t59LytWgI%P*Vh>Ep+#}&6v6+;dz zE)O?oqI7jW|NJS?0}?YPU2DoRoPRSHOSumA_qWjSd{&<(Aej4NFKx8T;|5TNqEM*m zPNKe8{YTwE7t)Ki?2QY!TXa_q45~&F#c@13I(p8;&AX`b8-DQh@(SL+?T6c{QoBrX zeI^Op_ptXj79FGcIHMBb$^l&`7C6|sxpOCUKX9Y}U0- ?hnTxP$u5Bqau$=YH${;fRg*Pqm?~Pa3g4J2@%Fwuz`OD9&5!heqv|5 z; 9^Vnp_o|}c>eu|2&PA1Tdb+76MS!C9*+9zYm)#PRbS5-t zkEM? qMGOG=TF9GFx%fYu$_k%af>k+#eJYAe&0)3k`cfgD zIMj^l)tJh?FWJG65>?oQb-H%dM(U-tyZQRr8{dT!Dd&MwTE~sMxzOH80+i*)e*@?7 zfYr#MN@FMPuq^tE*~u{vX$$7q2VV9-Vm8bgB<#}QNuR`ks$}ejneTY y+8#=lJ^f$*Zo#+&qMK3G8 bL)S zK3;Q2NJ-wS!V@p#f!EK^={U-{mx6>CRWfZN%n|oLAOFLg0475L FaWR~rp9GEIX-&DcwU}X==c=s!n(fFcy@0eaW>m~^7Npg&dHs_-CyRz z#1>L6ZNm{u*2e-H`MDmlHgM}bZhu;(TNV~}HoIYgfyK65$blu%O8<~f{~9k84@87# zC1@{I-ms1z(|-u7IgQNSEsMgmdOWqAGycwJ384Fj)S8F<596i43y+v9x|jFPN+*e6 z0U@picE}na^Jxrtdi+F{@&C$r4Fc!DapzFsq;F)%8ove6QC1;<%-&$3ow>Fq>Z66F z@QRsCSR5^udVD&L760$DcVws&(xNo7;m8H=a*s~tH#V{ONly~VIC0kH*xEskv$b1M zp=ZM&{nI);{MXd}Woj~iS+uty|2``;G$XLk|GyDTG?$_O_eoBTTyV=*6`Pq~|3%(u zYA(pwq@JiDl>ZKTl4a@#iHrAPHirI997kT!#l4%3I3Qo&!j=5PHdd_X2>go@=Q*D@ z7SnUM2?2h6EKA*AZu0NRO_5j8D$nl@{TK0gwr2Z3M?~{zp}eBsD!ozr-*6JZr4n}l z-{}88_)X;*&|Y0VgVK<2=FD(zx_I#l%~T*4!}cE|vuFTml^onlK}=A>B7UY+_q{_0 zs>TMWMg;);Lgy6ay;8gSc}tg;iI%?!rC8;u%vlOWk6>YUXT6|95~~0~uySTDyN~o6 z^uBCDV~3$~AO@=`fUvRj#cT0QgA*<6bcCbl7>NJk)EA3afB^64Dw+{A(Z55ET%UCA z^9*pZB>opZLj&amR {$6)JT^8v`EHWjKq?BT3xs`R zzfKRUILc|xMx|VG0Q&8Qu69K(&6^t8tM)oM^FHZV-zJWfHd;^77iRiqch;3fEEtQs zAx&05@374*QI9S<@U!InW1zKO$K*}y*BU0Sy| Ky8UaW;;>8+<995gWeES9??t+jNur5D8NqpaE>PQDIk-vQ$PA)1$slQSc3 zeqLp6zO}U#XsKycDz W|K4{eY^`dv^zz`qZEhl((E*D#Dgm{%@dBf7GI5H4 z*!@kwzmLD2gOjdg056XTP^sTHrzHQ}zpF$sSnf_%FzUsTq|pV^d1rjq84R&*AnBts zlCiCqLOWL{CfFAAfi{1d9Z^j*s|ZMWR3<>1x)gMKx|0`9*y#bpo4>f^6~F X+)obg z)G{BMe6jfNp>grnPLCxynOBCbu2NKCb~|ajxrh$M#X2+TiC=06Dd-Fux3($FNijSi zE0bj)^}cuGxA)iDf}q;LXb+T94y}<4Fn33RV#bXIypgrC%zFE$lXq~Ni^Fh}byEb< zwX>jv$;_ygX=md?lzy@`5CT o5*X+ -VYDep0$$4re7vGvERkp>p}*}tUoUtR+=ZV4h|^lAS718} z=G~CDV^>^K@-KP}oFU_@#0aS{t-qiJ&&%H%==NM4n@8Vg5$x40b!nGtQpLFkCc_ab z%Azl^q{TEduuo4eq=F$UOqcHvpspdDsV{n_QMKOeFIVWMco4HO$UuN8wrEI-iXuHY zI!frTH)cuK02G_v-{ko*7|h}Mu_(pfOuEttHD@1KwNtQj?I_h9IFvlm4AEi|61@p- zrshW3PVcVHHaMLghYWM<$cQeLUYV>QuHA=JYFU{04h~3J3hLQaM1bxiehCSS*RPlP z0KK-f40>AyUg!>}GS=Yr5#AhFS}N-d %%tM=k_%6iC&?E_fE!VbaowiA$+!R?|O2`BLWJww}p@U#~2>Md>|E zp<^uCY_8yrmwM03hI0O1`PT0#(y4Yaz#QK<6a_XYH8glG4xoV3 COOc+k11S zTRS_W$4br)xXj8&`^VJg4AmqnmzVf=UNvn(b%TSiRDIES<}crW+p5ZO_9&m4a}L6eK?w>Lqs>^rSQQRIzpP!ua~OlNZVh zOKqnTeykmL`c%#9loga>6|WnSi(u}33)&@%#p23F5B)r&=Nq%WCxzz@8PH`L@b2p< zV`@?1U!p$%HvIwIvPng|Qy |_f#Ffk(t=&hJRj!?IKCg|30r;IxeL7(7vj4ZdO zf3u~egm-JAUqx= U33+|^FswwQ0R{yx6L{#|uC `G7-I%5mk41ifgkXaeKe&hs`(@!XSs}T SZhz>a)v+`P7#Vg(#?U>s`A*~u6^qg{txqhxMnARsF5rYL-+xwA6z~@*zV6rH zi;(m`?`JM99G|aL5aZR38Q+)A@J1^u`0T>T*=5x`e91!a(Pu9$S%nn)ym}PTh#6XI z4v#%m*ZtC`vR5gcUnEuCC)oZrDL*0NLgUZ@>JK049kX#QPx?$cbj9*e_>NBKy(Rtk zHj{AA>0@tU2C^J`y->-=tcOVnf4-e7`1G g8mX U9b^Ln|G+`A8?`;aUSVK}t*Ao7sJIs^ft{PPN%-5{-cGEG8(J^b>LQvi=^ zFMBV=O=V9(Q)C_j`*!bTFT$ZoLQdZkHO-4*0FgZk 5TtQTouC9?bXiw~wF U223p) z^{RZE%6}Q<{*r_Z%bHd>CyrQmI_NNuMI#R*UpCpfeO2;4z26sF6MI3uPQ|8_!|f`T z6RS#25qdT|8w1>aQia)z0-bU1!;PVg6paWfUni!YYnkLqc& j Pj%L9kMVveuOA6+2+qW(SN%04!yw!dG< MeJ`~hiLLHPMg7X>ziVCigkX_vRC-cZtk-jhJK>;cD^j=oh;2jSp?B5(UH`vZ zSz}>t#LFt{nDD1eI%Xu6@mFgfySl>bb{LDyi<8|#J5m?xE_E)Dgz)F9V)D4ncQUKH zweBMOysMA3-XxQ=-O;op2lmZ7OSIkBdxBG*iTX^Ye4;y5=Iv_tNOm2C#YqQ0zqH?~ zka0$$XatNcK7^R6=jxIem`aBcw?N~8{X-h>cy9gCG-hKg_CQS;ai>UFPN4SZ^>xgC zwyI9|OUnMsK>%JNlvtUszxde!d%p#IzeW;<0#PJ$ulytw?{8B2@HM Nyb+Dg@BT7Ls51U})aUrtq%^)1TtR ze{DI~w1+aYRC8D{FJF9op31^Oe6UGVuOgtL3mZ@Ak _Vg8HU z>M@v)k w zp4_8&IXXOyT!uKiEpUgf5SCJJh>D6H|0pCROuL(Wk>+9%CkG<9FVF0~p#Mebc>@|n zSaN(!@qVR~g2KstXI)$Ya+vcGyI 3+0UO^h0#*$|FLJJRCUI1*dM0VNKx3ZU}j#;vj-lClFFK#0$W_{ zGHuUP90)|gfmxNc3QQ40?s$|44ip9*bcr&Hzy`3xdem=4N997by?0l}mJM+1|PZ z#fS|{PG&f@odj!NNT+5W24DLf^Nl{h;Q2zjw5q36yysWshXarV$KBN)P~k#f%2hX? z`|t=kAK%ssz<~Jekva gEO zU+4G~;)mu6FI4J ee2#zLtUTN Z+nmIA{Cqd=v zXB=#^a?{h}?u1{&WwqT&_j~MA=!2!=kbX3iQX^*UJdfZ9nqw1{eX-Ix6#wCO!S}1l zFol}-KSH2;2RSa(Z(5a-fsFSj$k{wONlaMyoyZ^FN92fUujG`zz)9l1R^$Vb1eXPa zobUHS_tUDW)7L2!+?I1bZdiB5j#A&<_lbyWl6Q`32kAad7JD2=NM^lu928=^UZ7CM z$6ad6d01$iSh&%^!~c9`UhdAAFRJc$u&M MYa?Atd*@yiK@PBOi%d^gm09%U#Pt@LLX=Hd32c&FzP2)|Ca;Qu&VzDJpo z`mKo^)ax`wKkMpD1~UST9$>1LOEp4^^Ye{B-q-$-^VB`1r~}5r`N@ pnXEeQSJJNj^l1S3SJ z?sqK&u|*Q3)>=ii3lzlBB);kGBKmZT UK&}&w8OEpD+;i9)08GggS+WmoiJf{@x$+ zIPPoAnaCfFn(Ncdk(SDqJ{icwO^AZMpWYSBdyOR-osF;63naF--Ecc*d7qDnJ2nLf z+1Cl=EHag0S8W2Php@O`?hHMEo3A7}&9h$ahgWq#EKM!hRSd#EefxQwIoo3K4G0+y zQ1W*a|LchS@C`dliTEvdaZUj_M0`9La9b;+B$)$ICU2Zm#7D_6>gaAgp|8$BhOe(o z6!d+@1BxW?uN085gm2{r(&g^Q?zV5LZXHqg$k98-R~%I)Sk^pX;QyId?Qeh1qI+=v z>getczK0Jg -lL4kb)?5U$lC1mAxOQFdpf@T?KY@`L_Bm&a+<4;~>*1hr zl92HfE1$S^;Y3QMb4Yc1{zmZzDjgrf_P>niA>eDHL|^o67kG#?s#Xo sK^)N01WycqF2+zmVIjVqOQo>rotHMj=; zy5W2>f5Ufs`>wQ;#aA1fjqZE{y47(oo$c;eZ4knu7DUOy3*;!ar|qdCCHfhhf^=`i zhgTweJQkIJbPojb^=RI?9?x?tdvi%NKwRuwftP+Fzu`8zzEk_d+vDUGxDm4aecUs1 z$#>fO3)k)ceH4{>`t!Bx8ZYRVoy!AfR3E-5=rwe~z>ZkI^LRc5%G1tGVRt?$+e#l~ zZoy!}NaEYRiyA)qxeOq|r{7#j{Ign{LX U~#tZ%Bdu4QspRW*uvIa4mEd9 zuObG2V32s6JXK11{(kxa2P>JZp8dH=Dh*xn%*3v7f?U4WdV1`J6LZW*o zJGYx8avDgLNo8K=0ErFJCwLAnm|;CAC7>H=_bV?i4t{DwztZ(2O|b9f8~aFBlB*Ri zo~ApRVGxoXy@Z#&IjLmN;So$!E@v;l3v9aW`)GfQB! 3F2%q}NV{0crPi_mr>h zXK9>6mr02)W6vo*N6lkve6bwRlxCT4f`EnS2;!%y{a1)obykf7+&QVX&l7mSyONLS z8L!)YV^gK)>c~w 0DKP_bGI6fi%TRzxvqF{y#w9H=y z6us2RZ~hd7C6xGmZv5)8Q^jM9suT{uytp(=`1*4hLl)B6{R!eGJ>bCDeom;DFc!km zY~=4WsKv~vtp9T`>N)HzRqCM3c81dUbM2FcQyM)^b-$K%Cy}dc fM5hq8`(WWufoMuXisvP%_0J9IXxCio0#PETeoFz&v0Tv=%-{2V zbstPWVM?&`H1zC^nzwPUz47PN!t_}ZTYTVE6kQMaf1H!LI47}2O2L@08h5Yz3H6@k z1^74X(C-^q9?f=`1T6k23%R4e*LgE4%2a@CInfjef5~K*(b0!JTqZ1I>FoqC*_Ld9 zzTSQhX&1Ne >Z5s2_oTp`ep5{WO`pC< aoMfViS&R0J)sc5^j3GK_&VWI}z)v{c`^BH;E6 zSEt6EY9GWJ5MX{-VP5ozB6&a*ESPp#zoSYT5fVU2*B$3JdZ$PUF+s!WzqhOjJ=g{U z0lw6FLmADUfQrIn%dwBhlV8k1jAdGn;S!KA)3F^3LCT5&puBB(+38nY06*m;?E70` zZXJG}US}kVnII(^3qzhz=Z_?V2k7uf0z#ZZwDh6NXPRu6*{cAaMU*b-id7cBy YQi6l1bvkyjR__A%N&Z()Y0*!Xz`2X2M_J{ZJD1!`Z8 z8I##uhWi;O*O{cyXg9qKE0?;5^Aqa#Vy2*=FpS>WG=Hhy`gwbs w~gt{SY1JS|gnm2-gQcU%}`{|`09=~NSHAo9AI*Kt7GlDP YOJlZvllj8oE`6rRHDL-Eq zf0zVdj&}=U8@N2TzdjI$?BASfPa2o@*yEv}dG3l$=3X5#PujOTY!+Zbc*0Wey H8##?2gONdSp=lz;9B_10hy#{q#5^5 z5S{@58=DkI_{IQdAo2I_K$6KxL5at4ABw5C308hJ%Ka>hx`!n8DggH4hW=USPu~Os z1Hrb5m%7ht%8MQ*r%VF9TZvDEYBpB7uIe2e98Bk$mWX!qj-_TXn|eo|B&p7|d!q5R z^$hLnZqug#(fY-)Swxo~SH)x2E+tY2hw{w539Q{rWEU(b5IwZ8elT!$Q3IJhcja&z zc|KVorv}_Y-tXV*9=zZP(VKC5_`!7d9+Xf(kL#Nu8h#-{3zLNM>fO9ntded~QHoxc zmUxL((6j5HI4f6NWdnO;F!jcW%WI}vw7-=6T=ga9os;4fo=e+neEt-BLo ***ku zoOyh9+JdCCPSdGX1p@=hM_&GQqIaT~-5L0Mr@zJoF*c~zcw*ukiNnsG aU+6 z-EyAAqu4UOIlufIdQ#s4Ax`Jpp3$eER_7qD$|_bhAgCw7Azxl|l0aBy{asx6{)DQk zn{o9wLGlf>)~gtr+vrI!T}2 G3 x!oY{tUP(73jR~$%DUz3s|T>!X6ns!0Fidmj4;JvCy-!vak?U zwdd@Gohge>TNv1J4xmM`uT-_E%=9gAWUZq`YeHyg)0OfiIs4tNlv=J-f(IDwEg0Dt zKT0lGC}%ka82TzsPjcwr>nz0Rp3Nv0@dgiQ>+l6GV9IY{vgYaZd(nGdlQTR?zQ}+6 zqo0$LJL%7utIOmCeeJUu6PIYK! S?_l>_Fc5CVMEwo20>}+Dz zT!ZPBhsjNpW1rA#)|2NiUf5p| zJFP-a_p=bk6Q-~r*`TW4-N>h*kc#}DKY#w9te>!RFgKsGhKzVRmLudhrl(Ej!Y_)3 zV=leW^W(N=MyrH*R2fKgGR#S+?XU*r1l!)WM}N(~T|M_guD2t%lHTJCvpiesJadVQ z=R|2JJI_Ixy|~m{)1HPwuD#exJiJVuykITLE0+F-&=R-1m3Mv6uczkFU5+6OlpfEj z$PUAK`f;cvCyhCvjd@}R@8S$STRUn$Q)pU!G&^lC*xMn^fIeXMuaXKa*f1AD3=eZ4@Ki9bO@LN`Gb@9Eqrn0REo;#13c#FZR;tkSo zfV;jcS$PfwnD5FX4RCwA-aB2!98HDl-#iPa%YM9Bpa@Vbpvby yUL$tocwcM=s z{qq
Ee{Vd4Qr1NJAWCy@92wed0^om^fdr8 zkX)t+>=OrmETG2d1^UT7GTqjC>75pYi}%PFB{rptqL{bk8e|vQT%AfT|NPMVi$c!r zF^)cW#7r0vO@Fd}DzIJWcUHEp8gS*Or|3#iWZ6`NYUT_RpYdAsr}8hMf{eT%zhyu? z*mttz+aX(Ey&rx)BH;Hu<^^$)%;7f$cdenFqpi{NC?$FAUG4h%LoAbSO$Zh3Rj5e+ ziofgu0Tx+i+w*>^oJN)=+_#N@IVlP!s;sQxM7X zK%g=k-Qc$%iS0{t75<|4?1Gz{-fDMzwg~w`jhj)&=fIlrb0)?LsaN3nL1NEd#~Y4B zj?+Dff*#B#Edrcwg@ftJGdxHu)>t+Fq><#s7{3zX?u|VeE3cA;z?fk1N)O~iy3&HV zJUWzgJ!EgTmI2&fNWAlA#`Q_J!^UbA;mkgC#c$qwh2oMbaE?%5jE**Hv6}s(B<$ku ze1k;|L@&C#(cU9mVg|Y~M1`|`!dMdH<-8C-o?fT~J^xf-nUOEszssxQrk|Vp)*d2% z0x$<<;1z+XO5f_Y0rSI7-O)H2$fwVuFCo}N!or2B+Qcvv&2LF6MSL7Sj$|h2ir0~D zH{_T w=#)1<+!=Zd~>y+Y>J}K&8e!^)6sHRJA-*!%R znwPrKhYW|h8d6mGQx`n>0ok$AM)&-fiAnHkXSD=aT2J3e&y+6T`NJ71{O^i~>L0qU zVk{b?Ev~#8) H0kCUY$!${uKhH)e!A4FGb_-~KB(* Y%xGDh2x@A6Z% Bzoo}#;Yaru+!Yz~s*-fU zS0h)K%p;97m;107qDGf|IlnJ3ze0!4K>k$nhV;lBfxxbIYB&B0%!#Ra%AdSs_nxt- z 5T{ XUV*PHjI4N^d;Sm@0}$~$(U-dR+YgOvT;ur!i{p}# z?ij}>h>$UK_Wl~pRW@bVM<5&C!fb48hzLGKGum{;vZtGyWmT>Ar T$ysNL@BE z*2wcm_k$m|32v+T_N#nXLF&^TfXSrd13kgarwuv=97W30cCs8OwOYHh>+0YW>x{?2 z%S>jRjxsYkI()$k5TRD3a~FV *t*Ow}*RGcIJ2ij %8Pul?qp{`ZeVV zOXefTHkGvd9kr=kE{Uw`pJDed63g}~xpTz#O{4yaR)Wufn)8iQVRFL;YtF@^1~$Yn z*Q98JzpGQCS>vb>{k&&n+mGBG{<;#A4sX9b-*Po+5qsPDD*M{!<9ym6x!>@Bef8|G zbrV9u^$vH7O)X9TTJ3c?-F%JJ&V&;H!>=D}i111HM>$TFJ@2w+l4*XoxISQdkE1Ps z_nen{XJk@HSo}D4=GSF3o#2yA s z<)4$Whl5!r3Vy%TD9s(?R^~nI4-Yfy=7qw#wr!VUS$d8RlQT$nXWoCe@I)AZL>pEP z8!p++ja2u?x?FOzOBD2hl#(|6s6>)#2)n!MA#J@bM*n3oM#1gR?Yl}hv^EyAH0 kE+@2;*9BBtHnzvsW_Q+MkyEKN=icz2T7{yoejLQU76B{ci92v>(sNVVIFpk1oy z%c2+PGkQ_O@wk@z-xC3Gdk%ipu|+DtBPRiI&fs$qK8g2%#*LjvV2(+8o=>Feb`b%t zwyg-@ iu!Cz}Ffe#r2e(;q%C0QT*DHzcrl3OKG`&}QXuQjK!h #CV}wc&+ykXWMRgGvT@h-p+upv&>KrcDiGFvv`b (=q-tKAyR^OKq`IbB{;N`M{h^RCFkN9uK*{G4+ta~kcM8ZupS58fJSPZz=?+nJ zvQq*tz}BVCiFiT_>8~YycP%v3dBU0-7!Z=h&@PW1+s;qMBEi;%ZWp1t=g(*yIoYHr z+2oPZJvFoCMxus>NAGmKe`GBv*lyqH=^3CnVkf)x;gAL^bPflGF~{fRtZhfZ1VcR0 zQ~9z-6NNKnfSiPZdq$w!%IihplSvh!P#+{%J|#22TDDi2_@9jhBQ ?ch&m&A@5zF@^T&QoHHJQb1yDV7vuZ9wD*JDw8*1v-U2R{wUQ`TKYQ=#f~6cwlY^ za!fw9HsCxlRV;XdslrBIo_t_9Sz;joVye_d)7;*&u7_8}5Kukwd;`+!K*WByzF7X} zxwot~mo4`cKJ?&}2wLR0u3`r%yu0v8wpQex>zTR5u+ -!Dco_{%PwcnRy6VO;tL%k|kF~dL_Nwfs ze7;*~OwRsxP8gkJwS_ z=V+0A3-AtWL^){)a&QIj;~lC2t+4h37+!S `{BvSo#>}RWIU9bqO +jsit8jmULEyda7nwTnh zw==3lSMwU{ N$sHWNy8LRj?NBf47n5Ps@1No1SN-f}A- zG*tBTl1Q|Fg_Qf^YGc4M^O9s11lMWT6xcgxhSGU2#C(p)ja|HZJ@1SD1#MUH?zL9k zdxxahxwiUKmXq_0UEYc;1*9JjL}QyjtG~`GXwz?(U2zGJxVktaOLQ|h)Nvq)r!Y6S z0qV~5Z@OHkuMv7BtxCH$968US6JDX>%@Cv}XL3C8NqeaKYDZ OOVw5FG4{FB;3U(tA{KKKEDil2gmv@ zP T{by+A1+T86gAKNps7KWV nWROy)fiI5G56r;|?eEF&aaHl|Nh8udcZL3}NR|kJ z7JlI8Eicoen84vQ-*}l6nJNlrsvNpF)?NqRz$4SL)i#Ldz+K@oo^s#nq@%lOPSZ=Y z91|AZ0x^js@cqCPB1-OAqA$pbsDjJKJV_@t>W edk5SX)83p&n7U zHk0%rVGeKU2wqh=O}wdSTW+$J3_}Qf$rdxScEI26@FcHsEn;#6TZP-w)n1e%ghnR} zsz?pw2iu2=E|kM%_7;ObfKDl0^_Qw$mJyeompmc9Uo(I>8hAM3rjbj*qvWVQ@#U`g zchcsDP@I>W8KOVhICIT (Rc4_>OZ )YR@FJGQBFZCAvEh0V^oSa(n4fsY<@g`wd})1 zb)xYq;uU`J6Qnv@gua>RstnBMy0WVbl9`6`Xksl$qkfbAtw#3MiC1eWyT^T 7jm z$F8kJ)2lz4%p7G#`a-4X4olhBkd>A9tgJ^YfB;L0o1MtH$sK>wf1%|T=0;-h+FJd% z8vY=YYx}D&C6D?_8GlbHhxn4{+q_;R3-X^kXKQd-oT8kG7!LErzSxwSplZ7$hCyau zBExf|xcbv%ZuT}naj}$<9`_qOzfu0CDdsr2iIsSbY%{tZUTXXEq4-##h5*RxD@ac| z7QBvTw8druXa`#a#78^}(w?HdPD-vAiYTr|t)lmvtYnF7TeVuQS~yHiUB5!gX99SX zF8ANb(ss28WUH{bKp!N9D7`T 9#v||Nn>{1tlk|O U7^8+~5yx`(LeCXWb_gn9Y!OX&R(#O<%jBrmB2oOaU)BN0=qJGQDn z6_$RzQK}@5=eT4-(9!gr5r(k@Q-N(}eeUtR`qm5T=M8=O#VcmibFvpet$+Qdh}?I; zPHtn#hP=&oVj^~Iet9*dKo;hz=#CAKv>Kk|G>359#C6O(*7w5`)AatPbI=GHqq8*3 z=XSeyE} A~2qOjF &UGn|!va#!QPn02UN9tKC+aln}(v;3mHJ~_B7h{tL$BV(m6L37eB`h9P0v;4`E zpHfz(!9%M|72_s}+?oYg9oaLX-O+g2><-^vkOv!3Ri)XXE!r9b74x{1@f*pS tGdVQzwkqFU>vO2mIn4T7fxmR-@ni%_*R0=WHd68V;V(?(Eo0H~+iz;xwy z0|afc81@sh0ZKYf9|)5V8|2dT3#HY_i |83q1jr65tf8aeZl*Y;177j}~J^f)p zT>2CxVDXH=jT8IJmr_C=ol676JI_~Qp5>_we~2M&g>hX3&g8)Z*=(}Jlij=U&oDnB zI?wK=T^Iaax+1yzkUZ85Ax@_jProm@g44EHZ=T9cJI}wj!!N;2_o`bY5u3it5Te@% z_7h^=SfnBjw=EyK(WG0A3e~)I`VB}5R?=Ic_*C9IqRS5o;gX?kL{%+&Ss5g(;ns$R zhIiR0l;*4%yCBe(`$8ql3A7Z}b{2Ct660K%)cRjm5JNQ|eHct*%+|O45*UD*_JAI+ z>|v`HZap&N*@Y|ca8d0_t1r}S3^M@5=NpF`$zUqS;1R@ZA)2YA9&ZWgL-nVdLG?Tc zvv7ubyI8UtLno`TqzYCRi#Ui_Vs~( zAV$hyv_UqMAmozDi?{{^U=1$J*k70aC=L_}AQ$>W`W#M7Jxmk49^(+hGOARobfeve zq>6eV;%?I>{aWn8D{&m?PM##^OOx#HQp?{m>ZgR<`0sB2YIqX>Xy{Hk!({L}JzbeP z6zwIiT76v>Pb=P_>KMQrP})^JUDIC~R&OB?E7ONx04CSPE&W!qm4^u3`jGGB{`QS#u!S}12&7a8Z zjJNr>w(D+>hvKm|dxri}Gp1H62!Tn1Zx4MV3oUHstz8%10us3N7jW$}rXzTy&3yVg z4dEle7|3x3ltea6W~rGlwOGg`Z*i30de*y;jH*G>GlM2l_dS)Qpq-$d@H)xUR_R8@ z4|gul0H8Md; $PSNONO2{mi@(u0G=FPw2(iko1 L|R_R$3{m*V8c0J-X_0zIEsb}a?_$%At5rL(5+)~W|8Rc#l6xa)J z3?tP{6xMe4@LmA*26%;Qx$TPMFcu^>TR@lKZAe0wurE;=rPKaH8 tzCf+($+hW zL*Dg1$`g3k>RbIuh^?}t2Zw|_2&whq^&HeGXooN@(!K3CP&u$r1_mL~5m;}QNEK92 zar+9%PxERZeK5hWi;32L<9>;%?9pBgF%O+ z&Msy B{$B;J R{~lU46g! zpxAeCJU^~+?Nvk4x1vcW>h-0mjLN1LgxD$qPe+Zf=L$2w*TyP|3dv>;q9nDZh;L@8 zWYGUrC2oPi99DsZA;EDZFN-Zk@Tfn &orDjV*R{; zByybb19k8q6%h&b(Bf9bKT6lf!__7kim=l!xgK1Rb-)wPR997BxKExY?NRsf=_`vZ zJU248-4Lm|tXr7%tk4td%%B!_A`V&aLo$r4RT&-y5y-Bo5TD$})m)NG8emie#jGLaI-+Vpd|H8=&D`Wh~hSrOwK%&pH@MF zxIsnHj|~^;JP0xDM+~!Snl+1*-RCSdM5p56JiQ@SVUWIPU&3ZGj;xABnvdRH-g3m- zRXrlBaxKDM8eDI `sIn#6$yAlFUtg9QPYxV)h*t&Z&gay3RYHAsJY%}ZHInz zV$$Kc(^ije$gX1cJ50 ^y6lN4gn@@p2)u%2uIWtZmOA7U}z>F;WeS0C|t0sVu7m8rcobC zjYKNB5-`hnBIe~tA|n0ujHjMJiHXmJNNhu{h`y>&m#trg;1YJ(qpx_YvdNV^Lair? z29g`->8Dj6n VZ0$bzZ_!D z|Ga2tC8mxbiyePwN7p2&DphRKQ2r8CIR5HTut-+N5K_oiKbzNjF_Cy&_TFWP4AUKP ztr3Y*Od~uA?DA`L4jGOm^}mqg0aZwPkFSIkGr5DAtsrZ^KL{_3d;EWVy$3X$Ya2F7 zBqY&8h^QgadlJ1w^hAk}2%;06sAH5t)DT1$J-QGr7`=BBqL*RxUWOSA#_+%PxA*?O zbI!lcyB5o`So1#ZuGe)v?NUK5L6@p!h2tkEJw!G19nv%06ftrC$iD{@v904$FW15x zcF lDVhu=pLul`Zq#S@G|Y5bNYk)0 96a>rLBPbRlgL)z#3s*kLC1qmk#=C8l zc`vyQV5CtS;YG+%AIqmb*DIVSbSk7L2r+;<+7;ZoCQZVWSV6jUPa@F~3uo0aMO?oZ z?_?CWQT1K@9)p>n*>g!k&U>{inV+Qy33;YM@JaiHk(y(sjOJ8{=Zuyl%|KD@8B;2? zpcaGK9h5oq%r$$H57`u`Z}&n_2e=tX6@5>R^xAGTK0|+N^)sXQPLj-N#GOwsMf{KJ zCo7;!WGr5{LH>$Nq{4H%jFjPm )ghw1<|`7!VSMt`^a(bm78!ST!?m zHFi>CZllaxC@~a!0<$1%g2V?i9Uqp`nQksu`zpuWe&w0M`9Me&`O=PK%ikg7XE0RC zh?h8uNizT78|7XxPY^hbi2aVkr*?KW=hAo3S0X?Y?}kH-AaQSmok>rt$TyG#D*5Zm z#3n|jO9GX}KlPM2FHo5GNziAV3Bpvo{dw8mK)b!m-wRap#HbwK@;EVpl`c$>$XN@4 zB%%9K%0i=w73oc^n9S5X&4WdS1;|aK WAOKd}f8 z`1JOXW6#5fgzcX5e`*}y)zLQt7%@yU{w^%AWf_HLdQm59<~vc08`{~B+02TFr7?C3 z%b&w-PwYi9^glUtiUcWk5;x#*<;OPxprmx5`X`)VC@I=8)K@Tuem%%%Z93|bbfubu z@;9J8u&CatEL}^3w{GXICu0{n4JdEnuq-tlOesWC$9l{(lcYyEhHE;XEQ@JxhI!BicLSCzovAccAlg EavLV*p~kojQF z!W?wkcWTsf?vZo*fa236 |D`^+R?Sy&&jvu`dx z6MU~{H_^W%j;`u}94tM$TeM(!JK75k>vrCk`VE7 Iquldn)@O zpay?nitsy=Kw@=IxWrXo-vsZI-Irri|Db?~+b#(I8?0ZzB5lviTP<0eZassLzb5%q zPENo;!uh)}hsh_KAFU%ib7$>0PhShE R>EB{3~rXHAMD){@T9jQCR5jL%*_GV^d}rJKmI;l*VW5^mRTva#T8y+I<*I`ROt7 zjMplNspBF3mg`W*4NCw^vh4M3isXQ_=EnMm-B9WMB!{>__6xigP@ejZDZLCF%LLOf z6K6TQk-?8*HlGBlcDGnc*qAT0&n-JdI@lYIPJotvG`g~K_Skf8=W!|V;N&xUwR6w_ z`@`8bq{urUA`*2%{5U4_eO5lUEjgIk@{Hqd1sM_f&FxwYMe*HF^%7>DJ!Y(wgN#r| zqIUVb{5+dXa!g_ibKo*iwzl z|t`XB;!Oj;}{fKidgxs%&Pp4`KfGh&=^xmdG15 z;|>JR=wZZ&bhRf2;ZnzQ+3D7S<94{Wm(Br~{SEc@HB?yj^U(Aas^?8a*p_Xs*$Ysu z+!ekEh*a1beJBv*hW4)nJj1s5ryvW@b71pEKh3<| g0}4 i4`B|wt!Tg-$ z%=@(m`@Y*XvokhojZ&y@Akosel{dU}&LK9`Aq=T+Ob @s(*t{y;pB&Q~Xy=7wX;Baas#UPXz6~qdI3+;)(5s2m*RP6vDIpvoT zwY6nEKkAPho?A0>KXXQ30h~k`N(9LT@t&5Q;3e4RFwN84q;tl4ET}$^oM1=pT+)b) z-p#gaa-bO7wNaHNB@L)W_mU5Z!Xe8a7SbtM1jT8^1X_0Y!d?ZRMp+L*>O6Az=$A^N zZ$20Vxuh9@yuq`}nQkPXeP)rh4Ii HCAFOm$YpeO zJ>Ak`w#Q`w4$S{TndL ^|9rh#mHNkHSH7l4L#iNh8zQ%4Gq(ud3%rM|&er zeNCur8Ka%i{zWD4lSsch>GK}*Q`M90t*}AhZ{|A~dEIFD7Q) ANNvJ=&*yVHWA^Eu}Z z5x@8R>KZOp-2kJk@^Bf^GZ*Yl9{LyX@T#oO@`LR%?qjrTz$ Zc4DJkN;XWxsRi4>%7 zC~PCh6bd9k+*sIY{X!!TPjMB&_8wc%p`i&q3(VYqdvBYkmA_r)c>I#+j!Z4?S4R78 zna5K{KdJYBbpwH7ly^!gHSn#uR9ovWzSXHlXuA|xe^&0f?lRe@j2j@6NhX@nMu9sw zzfpMV1~!xl_@hHkLh$n&qA5l|0S>J>v-f7}v1hl-Bg&(Fk1hj(WF7rVrDrb|0nDXA z!+oeR6WLX?N)~*&pIx@CbG0e}HunnNnLz{c|MRAnAoG 6pN97GhCYi<>HK-%Sc70Dk#@LvR+fF*3N_-812MH!GL8NH(Z~{R{Sa(}vXk zFC=I#Xz`df^Gz-Y`^zvGE{g o3O^Vk zlyIb8yAor_AD4NqGJm56zotTf7+qameMT1Be0KTFOVm*oWuxc?HHP1<#i26@Ck3w1 zuII^uvaAKwcub`VTFJ=jD{FHr_>><%gH&+D(JK0D%|{|8!vM*9UUvcl{H>^d6d#c{ z{`e6tMUaq?0N~)%>wrSI(P(o&AaS#Lc9iNRJ!_|Mb2Ig7E#K (SDGkCk{HtNE0J6M z>DDv&u?iHcq-y8Se9i$dc#(Rbg9~#0 ?%nQ%|vJ~-0BD+3`adg1x%hF^|R}N$~E5V0vALy?_YN?_|@_jz%!4DG^`KP1l+1h zc?+P?ubCno{ETy~g2C}~PGNuX$(ZQ*hMJ_RTyJ<$ookhPGfnNy=Ys>qbXQylyh>)* zB;YwY=6!4cTAnNU0eddnwU)cH=0I!}!hn!vG&g!47I* `m@+lTZ>tf!;FNyns=&&eyuejs!0 zG6!%Y#ebfB4fPGzY~&`n-SV+EynPqxA>!zlPVro2Wfa%$^Q-5ylTN4-BHzp);ieMB zD9x=L#gItF5j9Xc=WWsTgBNVt+Uvi+3%D3uj)lg~>$}HEWw7{J^&9#g`XSI}ZtXjX zW$}dvkM*S{jF}`fCY)eN0OMug#0G6~Hmg|qP+VQaX^wx`)y&dMt RYX;8@vW1%7Sz 9o>?uEna#8_Lw^B;^=4E;S*`g$qh)8$=U3hE&L+Qa%L|6i!>4O;9ss>1 zMja6MFwz6~D|~?RfhxdF5;i^aIr=*P6{`1Qz~cpQ%MP80X-KZ6MR6FTG^oPsJCwVC zbOCqqV$AcKh=9h#nteQe2gi$+Hgn6xk<}5W-YJ?gkD$SCj14+8k8*nl5XYy^0}m~a z?oS)(utwa`uG;HDtW$XIwLEzTFE29r1q=V2G) jJre6b(8 z=lS{Hr|9LKvy2IHQVwUtE)<~rezpe~>VDwD@EK)5T4G#pd$lVd=gAisF@Z8sdw*lt zzMz&c#OuoyuZgki5$b$9=aX#*Kt$CcKL%#}jbNq-$J>#~l|ugut%1oMzRWs)UFnVC z5Zw^ zJgv1nZs50 DT;U%o~+$yB;uT+zW) zq8G{VB&a|OOCyP#(W`!^Nq){fFaJHRYKF0YFmBkKws5rLCG@c~b{F6-v!*)Iu37c4 ztMqU2>Xkp#tFebaaBXz&ObOkPwx4}+ g}4s9*EEDlrNbw#^EnsSZ<=;R7&v~ zZX>?xass*sIZHqpbH9XH&@485kC-ZPz*T@OCLpIkrDjqoU24BSM6l&S%PVOl _6w6!_F^E1K%Jfej5pKt wGw>eY(3?Vf|!_p pLEG?VjXQdvB}zv1r2&_7X9bh&wc{}+O1-MlRFYd}uEZ4)pa9)N6h zu%)IG09nb^6ShV1eiH#zG|Je%csWI{#>yL}`BqEDw%slALG r_Qaw;sPraz5QS_52$`@*^ zF>!i#r!q^sX!LrM$(aM9wpFC-^q;U z*4uU=h{HFMxrw#`cvCR7MyNw;uj-u!w_t#JXP~5+KFUz@;bWFYSyPy(tglg;g8EH0 z)z@-`)G#7@iI# 1K&myCP`{d{-c8Q`hSOb+b5>K5~ z@Ap9d6!yJX3Lh5+ISYgf&HEr!i#A<=uFiCFOP#9%m@oBelmUN@GT>^IK8A*j!Qg+a zbH1ZGJIug%>}oE8z7A%=gTbB2vd%ln46=~-O~VJT-*`5x-*wc|1m6UrrQL&LW^E^Q zR?z8%)`;JRr*9p1kl$FKWn=DL0l#2>1mIuSIwDjLDyJWq=fBt)Sp|;p`@6G?__6?@ zQZJ?Pb+E7Jlpny7_Ts(nN80q*G+!#3cA{DE6}wur){u`Hdm+W{xVSVsKg*7JYR`%u z@guIMj~42Ma&`@Y%;_fs; xo_5ZL8{-+-vumjo^&dX6EZsrDd%X9&bcb4-9nlh4jkj08R& z(%G+}#OUT(m;mz_72cITg|t6>5jbP`FF3OsNkat1%>I40qE=|vG8NN6*sk>8e@4?H zNdD>rpy&leR_5hNiMu-FV9)Q$L!U{*;NLwHM3XR6_1;p)=2)J0jxrpg%*UpT0$GYo zJi6#M;%3GYDPHI}zfZQ>5jSR+V;7)neRb^G-2p5&-Xm($=9-$fvRtsoLVrK*y3glF z=V{%sMbdmQ0;nt?k?|0 xxM6=i087*08qnQk_h5y|M^*rB^o5%={hrqjM zz65f+=PH8#Nru4B>q((;^LhX|PL>foKydji?0 LeS8&zFKbaIvnk%yq-dIqrAmdlLuqxtj5#3SV81@iS9LmuM` zoUA9WX8C3d otT*|P2Q$`R@^f6+iXKe!!Fy7$rchtQ$RR$I+-LIa!q*1XT(A|`lUrHx zoEsE7n6-9dQ%AexB=c^T3}UrFru2R`;0yC5TgTi3*yX(60j ^72T``{I*5jOPzdoL)rLc~j$b z57fewi9M&aa5*G7T@#hHF2Z=vW1AI*k{>l3>-2^)Ltb7S($9ZQo)QD(ok$HY*NB)o znSD;apP#SGI*IS4GW&3H%!~2$0E~>B9s&kg@Qcbxr?09;jG<)Az%Yj*W16sJy`mR8 zseC=ce;>JE*E8ZW<722F7P_~Vco@ih{;c_IysSP|Qo8yPu#e~Omk7?k0c=~@m2K0z z+Rm!9K*KS5lxNFgqn?}Y+e?W+Q-EpvGfRJO?8# tje^JH1K zl|p{MWqLn$?SdgMwd5Y54yC9VuHnZPXC-x8Z)71OI^UkSdksi5?pXbfi~(-wW7dzt zjvHg$=_GvOfu$JxOyD`^1lM9M9{F|XsYYTCNU)|i9B(wsULcKa#1sGCPh4rERx)V1 z=_YTe4^UbD<9~73!F=&bBSVU-<$R!JXK(9pECVn;lTyo9@ U4FWL=M? zrt5RwVdRr#KW>Ea`|a8p`>7>g7WkdT@ET;W*3qNK2rdl#F8um3anqvX<` u4<}lkaf$4ab({`4Y-quH3)}QRIlcP9FjSe2o#G!K$oi=5 zU=fFzPYMqY@96}Gp$at8W1$GImsk_S^uM%HHpzf8)P8P6(CO6D{oCkt7-#g`cArxS z@Z*=;Xl0FKE}+-{eUD;|Z*jG#Lpjpn2=#`9Vv(z*X+w+GGuPNNu>B-&V2od{-U}CE z4-*($6$w5im(i&>@1!rV=-hBdCCHw}C7Q=9HKHhl3vv#(TMhus!HnAJ2=YA22e<9V zZH(KRbbF2e!0r`MBl>c+M>erD_bzIB$QL1<_RrduP@TPCAG|y=zN|i9mc1~K;Eaao zfgZL9GTW#9ME-k=|4`ggbzUKLdCLqx{#H8%Fn=|Ic*OAsh2AE@!F1K~@{6^9<8 zrV`3mR9c$& ahqNxN8hVgNCp}Eobg&7-8riiB(IlGR<8HJ z<+l>x8s>2gi4K6(wdOs|JYV5xPK$m%-Kx}9ylw1vT!v~3Wv&U^pqNunR_>+40Fs=# z^KQsyuip8eB`6tWKTI5LscjUX^LBhgB<#H9JQK27@$QGH Uq$V|;je1a`c%wUGM zwlN;D=2;oo{U2MbX!cy~bhJRTxIjv39kUCcTq8DZ;QlM7cnxTc0shqr5I9^#tq!>C z&5Db=u6>!2@LvV)A?iOxudlWT6T2KNb!FAMZN>r|W<|%j`n==MOFkAr8U;}Kd13Nl zkO^VD{%3l79$D@yOI<&rWh&+-aBz|m12AL49E}%mzi&8t>$d5I gdFOfT~u4%Dyf2t89ht?Sar|1JAzg)v#>rwl|Wxc Rh&M5PnvlwIV8(={Rg;}G(*Pxen>NH@tL5aArH0!0OxaS24@TfqnB!eI_mq5E z4 ~v5 zHahiXt_w!arsPLrw 1o*q^GOdM zf_I(bGjZE3{Yc-_fjd<69Dv7O<&Zrs3W17yo)kWr^UL~fLvhI%Z2^kUI7CfmUY@VV zR=QL-I-ivQ8o7zL54E$c`i(DEjr(LhEeotlV*=zuwg)U@!huR-AQgS)Ki2sDD5m8S zN27&c)@Hia^cg)zIdP@YmitRkiz!=NY8lXG{BhjQ%#3LH0$7@q&}Ym)#GJ0-(j`Iq z)okxrV7lJsuYooQo-+d#IRMyyC?IPrvby^6v~*5F9N+u0id8hK!(GB{qnts;M?u`> zq5n_w`L2khjCwMHxZ3~$NZ5N&>c;vfv Xw|l6I5uj}`Kc~f?(AAK4 z9QkX+v*0y1XgBFc6H%V+klfwhsXy!*kL06otvbAZS8}>N*jVIXT?=`s==REQH$*oY z>FFffZ{O&vY#W`KI74OSlQ!Xz1ws3iNrJSt$`D`cMFs4b;&uI2>oc6jGvvAJC(|Sf zs7OdBonGKpi;bp1Z&q3iU+tvB#SP0^-1zpdKf5^@*6uS2IE0lZ%xBE%;9UROzR-B3 z)1_RU=Vo{*8w7i(=ei0=<#8vQ8(6-nCcA%m=5(Qik#kdSE*kyN->rV*j Us zq6Cm)W_;1zeksRSxKgQG=B6^uxk~&9GQi6;rv fQzcm9?Mp~}{gox*a{FL!d_2ygmIC~i* zfz+t6frJM2$_`0L4)py(!Yy*ID*WA{!+sgxpIT(#9(s^n%F4;AlDJo$+~9ks_ylj; zz-EnfR+u-~P9rUb-KT7PoV#6iO~?=W`hL^ATpVWoIuabVxtjnqMU%=@JAT7o`z{nd zd0$s*CIv_)Z-Ah?W2$&}yG4^;jPC`eK-Z?Yip2Li44i6xm75Si*>W7w@p{|$xkXv2 z7^}OJQS1+bp4?+tDtGH-qw`zzgz?c9_cYrPZP~_Ap*UD+i{EhEmwU^50JJDR-z{FH z=tQw5^a{Yp_YBzAzfSJSDzjgAR8=*2#G`BV11f2R*C1gYS!(suP+)r7)iMEUh~c3_ z{gl0QJ$3Rs?-BM!T Q7l2;)9S;)lhTHirZ+=cOLuQ%i# _c`@(IyN+?P62(vyxeCs?Q}FGEg#LD%X00_8hSe&YS~8Io4o1 z%!+)GaCOyn4U)=g0&3vv_;9DbAN%9oDn82TydG0EvV3`IDtsGt|M6 zl^FTH>_iWc9z<*>2rIWXPRTe}nK13s5ngB3!e7JhkJ+AkSKyRGZ(}!GkQ9R~* 2=AKH^x;NbdA=&;CGkzy(KHhDMcRWPQKAWUX=xo|Grpte9j_1 ziVjwc+AQ`M*_kz@j;#nB-N8HIu-MHNJQ8;qCPRI*xrVluO*F@A CbKpY` ``yKvoi?|cz4sXcJIBI|pwAt)Z2n7h@d z`*kVwPO>hR^LKA q6&CuiV2oV+(1g9jk$K7Mvb#0BF5GJoe9+=u%f6vDL z>pX6|tflC9&H1uT-feOYvk{>;?}O#@J=?UB>MO~Uy*wvA+d=ma$Y6IKpDjh0H!_!u zqR0GDeFbjohM-a859vg&gRZ2FpHM_;mD<%_0k(|Whg-?C5nVOHcwh|;vI3VP9#5kN z55D!>GM;47_nC!Yg8=X|TmRjFKtgS=GqsR|M29wSe=Hy_{W`T~x6f`W?1f+xzmg%z z2-N<2Gmh|&wG(XaZNEd|_5r;ToRuwylbt z_mu(@xl=@FO!`tp+Mtm zA?@!i>GM`(WOd=G kxGse^rIM zPP$ZKk7uRgbW6o?Oaqj+qJ7ziR=oNX*FLUDvPfrdQKm=N7yE !t3iZ-N@ zA&XG|+WPwAF=a*xH`zFR^!DR>COm@V<>~QhYBJ4`r)y?IgM;}&oeJTaDkZv|b*A K4!kBt_L((Qg3* 1iD^_vUFl#E|-fK*LK+%!8sTs2N7wVcFZ6pfg)Nd0u0aM#4BsjSk7&c;66 zN;fyLq7qS9;MOM`6)#|z{3fRV!`nO^k+oeaZLt~O^?LREMikFmK#|@kM&C*q5fXmB z|Jbu7U)36l!oz>PW5WEdJ7(WD^@RyjD@0X sRBWCl(t0!4>c9?>%E^p$aPv**?SA=Kj)a_5nAIPUG!lz7#}m zZ)=Xm#@b#- UoGa7pjwcOO)%&*iiQ8xd~(J_PJv#j?ZgGODT#}afF z?#;{hyMGD2BRrKb
`E20@XvTQcnm@F3vT*1L^4B0 z)p2WO(_Q?Wa~<33KSfr5VKQC4SWLQaYY(2*EIw)^GeI~VdxTu}iXs_wv9qV;>TTz! z_u5RyXP>~;43xWg>%H{GQr