From 39972c1e2706fe35cdb8f0dde66b9fae96d4c5e8 Mon Sep 17 00:00:00 2001 From: homholueng Date: Mon, 22 Apr 2019 17:31:47 +0800 Subject: [PATCH] Feature remote import (#179) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * V3.3.8 (#29) * improve: #25 readme 添加单元测试和测试覆盖率 badge * improve: #25 readme 文档优化 * V3.3.8 (#35) * improve: #25 readme 添加单元测试和测试覆盖率 badge * improve: #25 readme 文档优化 * feature: django工程的静态资源提前收集到 static 目录 #30 (#31) * feature: 添加非标准存储代码导入器及 git 仓库代码导入器 * minor: 将 urllib2 的使用改为 requests * minor: 移除测试代码中的关键字使用 * minor: 内部包与第三方包之间添加空格 * bugfix: 修复节点执行时间超过一天后耗时计算不正确的问题 (#53) * bugfix: 职能化认领页面点击认领按钮页面会重新刷新修复 #50 (#55) * bugfix:修复任务节点失败重试按钮只能点击一次的问题 #51 (#56) * minor: 删除冗余编码声明; 第三方包引用间添加空行 * feature: 使用流程模板新建任务时,返回未引用的全局变量 #36 (#48) * feature: 使用流程模板新建任务时,返回未引用的全局变量 #36 * minor: 添加使用流程模板新建任务返回未引用变量的单元测试 #36 * minor: 添加使用流程模板新建任务返回未引用变量的单元测试 #36 * minor: 完善使用流程模板新建任务返回未引用变量的单元测试 #36 * minor: 完善使用流程模板新建任务返回未引用变量的单元测试,xrange和命名优化 #36 * improve: 修复部分python文件头部coding: utf-8格式不统一 #57 (#58) * bugfix: 修复pipeline_plugins.tests.components.utils.sites.open在运行单元测试时未生效的问题 # 60 (#61) * feature: 添加远程包源模型 * improve: 优化gcloud.apigw模块是否加载bkoauth的逻辑 #64 (#67) * feature: 添加加载远程模块相关逻辑代码 * minor: 添加加载远程插件 APP * V3.3.9 release and i18n (#80) * docs: 添加3.3.9的版本日志 * docs: 添加3.3.9的版本日志 * docs: V3.3.9版本日志更新 * feature: pipeline.utils.importer 添加导入器上下文 * minors: 完善 external_plugins app 的单元测试 * feature: GitRepoImporter 添加强制 HTTPS 开关 * V3.3.x merge master (#91) * V3.3.8 (#29) * improve: #25 readme 添加单元测试和测试覆盖率 badge * improve: #25 readme 文档优化 * feature: django工程的静态资源提前收集到 static 目录 #30 (#31) * docs: 版本号升级到3.3.10 (#94) * feature: 1. 添加节点回调 API 2. 获取节点详情及创建任务 API 返回任务树及任务链接 (#75) * bugfix: 修复流程状态获取接口 API 返回的节点名与实际节点名不符的问题 (#78) * bugfix: 修复流程状态获取接口 API 返回的节点名与实际节点名不符的问题 * improvement: name 最大长度常量抽取 * minor: 构造函数默认值修改 * V3.3.10 docs improve (#102) * docs: 修改源码部署SaaS文档,并优化对应配置代码 #98 * docs: 优化issue_template.md * docs: 更新3.3.10版本日志 * minor: 添加远程包源配置获取语句 * minor: 单元测试完善,Importer Logger 配置修改,GitImporter 支持配置代理 * docs: 版本号升级到3.3.11 (#106) * minor: 关键节点添加日志 * imporvement: 页面体验优化 (#65) * improve: 本地开发local_settings模板文件优化 #59 (#66) * imporvement: ip选择器样式优化、云区域名称替换 (#70) * improvement: 将 importer 工具类移动到 external_plugins app 下 * minor: flake8 fix * minor: code review fix * bugfix: 修复删除本地配置中的包源配置时数据库中的配置未删除的问题 * improvement: 优化遇到不支持的远程数据类型时抛出的异常信息 * improvement:全局变量配置项未加载完成不允许保存 (#72) * feature: 提供获取自定义全局变量的接口 #68 (#109) * bugfix: 修复V3.3.10版本日志错误的问题 #127 (#128) * improvement: 子流程更新时保留当前输入参数值 (#79) * bugfix: 修复图片引用路径的问题 (#84) * improvement: 标准插件Tag表单支持changeHook方法 #81 (#82) * feature: 标准插件Tag表单支持changeHook方法 * minor:Tag表单项label margin 样式 * improvement: Tag 文件名称命名规则统一为驼峰 #99 (#100) * bugfix:锁定webpack版本,解决部分版本webpack无法动态导入vue组件的问题 (#104) * feature: 轻应用页面增加高级搜索功能 #107 (#108) * bugfix: 公共流程模版列表和普通流程模版列表数据源做区分 #115 (#116) * improvement: 任务执行节点树查看按照广度优先排序 #117 (#118) * improvement: 数据统计页面拉取所有业务 #119 (#122) * feature: 流程模版编辑增加新建任务按钮;职能化中心列表、审计中心列表增加高级搜索功能 #123 #125 (#124) * feature: 流程模版编辑增加新建任务按钮 * feature:职能化中心列表、审计中心列表增加高级搜索功能 #125 * minor: 删除多余空行 * improvement: 优化从配置中创建包源和与 API 创建的包源包名冲突时的提示 * feature: JOB 执行作业插件不填 IP 参数为空时使用 JOB 侧配置的默认值 (#88) * feature: JOB 执行作业插件不填 IP 参数为空时使用 JOB 侧配置的默认值 * improvement: JOB 执行作业插件当从 CC 中获取不到任何用户传入的 IP 时直接报错 * bugfix: 修复BK-发送通知插件中邮件通知内容不换行的问题 #132 (#133) * bugfix: 修复JOB-执行作业查看IP日志详情未展示所有状态的IP日志的问题 (#95) * bugfix: 修复JOB-执行作业查看IP日志详情未展示所有状态的IP日志的问题 * bugfix:任务执行页面查看任务参数节点树样式错位问题修复 (#136) * bugfix: 代码同步引入问题修复 #137 #138 (#140) * bugfix: 代码同步引入问题修复 #137 #138 * improvement: 页面体验样式问题优化 #85 (#97) * improvement: 流程模版编辑流程名称、任务节点个数相对于页面水平居中 #85 * improvement: 全部变量列表去掉冗余代码、替换删除icon #85 * improvement:模版编辑右侧设置面板去掉动画效果 * improvement:全局弹窗按钮高度、下拉框高度统一 * improvement:模版编辑左侧工具栏开始、结束节点样式重构 #85 * improvement: 模版导入弹窗表格样式代码优化 * improvement: 流程模版列表、任务列表、审计列表、职能化列表、轻应用列表最左侧一列左边距调整 #85 * bugfix: 模版导入弹窗操作按钮文案调整 #85 * bugfix: 审计中心分页位置错位修复 * bugfix: ip选择器tab名称翻译问题修复,职能化认预览弹窗高度样式问题修 * improvement: 列表分页样式统一调整 * improvement: tagTextarea根据编辑态和非编辑态区分最小高度 * docs: API文档统一在 docs 目录管理,拆分成单个接口文档 #131 (#141) * feature: 添加 S3 及 FileSystem importer * improvement:自定义全局变量配置项从接口获取 (#71) * minor: 代码同步 (#129) * minor: 代码同步 * minor: 版本差异配置提取 * minor: 删除无用 view 函数 * minor: 注释优化 * minor: 添加 JOB 配置静态文件 * docs: wiki中蓝鲸体系开源产品图更新,去掉故障自愈 #142 (#143) * Minor merge master (#147) * bugfix: 修复在 API 中调用 ESB 获取用户信息异常的问题 * docs: 版本号更新为 3.3.12 * minor: 添加 S3Importer 及 FSImporter 的单元测试 * feature: s3 与 fs 类型的 ExternalSource 返回对应的 importer * improvement: 更新elint规则已经相关合法性修改 (#149) * Minor merge master (#152) * bugfix: 修复在 get_task_status API 返回的 elapsed_time 为 Float 的问题 * docs: 版本号更新为 3.3.12 * minors: 节点开始时间与结束时间相等时不再做向上取整处理 * docs: 版本号更新为 3.3.13 * feature: 新版IP选择器支持CMDB多级拓扑 #134 (#139) * feature: 新版IP选择器支持CMDB多级拓扑 #134 * improve: 去掉对tastypie queryset的异常处理 * improve: 新版IP选择器代码优化 #134 * bugfix: 修复合并代码过程中产生的冲突问题 * feature: 允许用户通过配置控制每个源的安全限制 * bugfix: 修复获取组件实例时没有处理组件可能不存在的问题 * feature: 添加 form_is_embbeded 方法来判断组件是否包含嵌入式的表单 * feature: component 相关接口添加 form_is_embedded 字段 * minor: sync pipeline code * improvement: 前端工程文件目录修改 #153 (#154) * feature: 全局变量和前端vue解耦,支持扩展 #130 (#159) * improvement:自定义全局变量列表由接口获取 (#165) * improve: 前端项目工程文件目录修改后文档同步 #153 (#161) * improve: 前端项目工程文件目录修改后文档同步 #153 * docs: 国际化翻译脚本优化,新增首次运行说明 * bugfix:创建任务参数填写输入参数不为空时,会显示空数据提示问题修复 (#167) * bugfix:创建任务参数填写输入参数不为空时,会显示空数据提示问题修复 #166 * bugfix:节点重试取消按钮点击无效问题修复 #168 (#169) * feature: 全局变量改为后台实现,API接口优化 #130 (#172) * feature: 全局变量改为后台实现,API接口优化 #130 * improve: 代码优化 * improve: 代码优化 * bugfix:修复Tag组件调用get_child获取combine组件错误的问题 (#176) * refactory: 流程模版导出弹窗重构 (#171) * minor: sync pipeline code * minor: add pipeline docs * minor: 删除无用 app --- .gitignore | 10 +- app.yml | 2 +- .../account/components/bk_token/models.py | 1 - blueapps/patch/settings_open_saas.py | 1 - blueapps/patch/settings_paas_services.py | 1 - blueapps/template/context_processors.py | 1 - config/default.py | 2 +- config/prod.py | 8 +- config/stag.py | 8 +- config/urls_custom.py | 1 + django_signal_valve/admin.py | 1 - docs/apidoc/en/create_periodic_task.md | 308 ++ docs/apidoc/en/create_task.md | 190 +- docs/apidoc/en/get_periodic_task_info.md | 283 ++ docs/apidoc/en/get_periodic_task_list.md | 91 + docs/apidoc/en/get_task_detail.md | 339 ++ docs/apidoc/en/get_task_node_detail.md | 138 + docs/apidoc/en/get_task_status.md | 7 +- docs/apidoc/en/get_template_info.md | 14 +- docs/apidoc/en/get_template_list.md | 10 +- .../en/modify_constants_for_periodic_task.md | 94 + .../en/modify_cron_for_periodic_task.md | 69 + docs/apidoc/en/node_callback.md | 55 + docs/apidoc/en/operate_task.md | 6 +- docs/apidoc/en/query_task_count.md | 4 +- docs/apidoc/en/set_periodic_task_enabled.md | 60 + docs/apidoc/en/start_task.md | 6 +- docs/apidoc/readme.md | 25 +- docs/apidoc/zh_hans/create_periodic_task.md | 267 ++ docs/apidoc/zh_hans/create_task.md | 188 +- docs/apidoc/zh_hans/get_periodic_task_info.md | 280 ++ docs/apidoc/zh_hans/get_periodic_task_list.md | 91 + docs/apidoc/zh_hans/get_task_detail.md | 338 ++ docs/apidoc/zh_hans/get_task_node_detail.md | 138 + docs/apidoc/zh_hans/get_task_status.md | 7 +- docs/apidoc/zh_hans/get_template_info.md | 14 +- docs/apidoc/zh_hans/get_template_list.md | 8 +- .../modify_constants_for_periodic_task.md | 93 + .../zh_hans/modify_cron_for_periodic_task.md | 69 + docs/apidoc/zh_hans/node_callback.md | 55 + docs/apidoc/zh_hans/operate_task.md | 4 +- docs/apidoc/zh_hans/query_task_count.md | 2 +- .../zh_hans/set_periodic_task_enabled.md | 59 + docs/apidoc/zh_hans/start_task.md | 4 +- docs/install/dev_deploy.md | 8 +- docs/install/dev_web.md | 12 +- docs/install/source_code_deploy.md | 8 +- docs/install/upload_pack_deploy.md | 4 +- docs/overview/architecture.md | 6 +- docs/overview/code_structure.md | 26 +- docs/overview/usecase.md | 2 +- docs/release.md | 21 +- docs/resource/img/code_structure.png | Bin 398896 -> 892655 bytes docs/wiki/faq.md | 8 +- docs/wiki/home.md | 2 +- docs/wiki/img/wiki_blueking.png | Bin 147687 -> 152788 bytes docs/wiki/version-guideline.md | 2 +- .../blueflow => frontend/desktop}/.babelrc | 0 .../desktop}/.editorconfig | 0 .../desktop}/.eslintignore | 0 frontend/desktop/.eslintrc.js | 489 +++ .../blueflow => frontend/desktop}/.gitignore | 0 .../blueflow => frontend/desktop}/__init__.py | 0 .../desktop}/builds/webpack.base.js | 17 +- .../desktop}/builds/webpack.prod.config.js | 2 +- .../desktop}/package.json | 17 +- .../desktop}/postcss.config.js | 2 +- frontend/desktop/src/App.vue | 120 + .../desktop}/src/api/fileDownload.js | 7 +- .../desktop}/src/api/index.js | 125 +- .../desktop}/src/api/interceptors.js | 8 +- .../desktop}/src/api/urls.js | 0 .../src/assets/bk-magic/bk-magic-vue.min.css | 0 .../src/assets/bk-magic/bk-magic-vue.min.js | 0 .../src/assets/bk-magic/fonts/icomoon.eot | Bin .../src/assets/bk-magic/fonts/icomoon.svg | 0 .../src/assets/bk-magic/fonts/icomoon.ttf | Bin .../src/assets/bk-magic/fonts/icomoon.woff | Bin .../src/assets/bk-magic/images/bk_check.png | Bin .../assets/bk-magic/images/bk_half_check.svg | 0 .../bk-magic/images/checkbox-disabled.png | Bin .../assets/bk-magic/images/checkbox-small.png | Bin .../src/assets/bk-magic/images/checkbox.png | Bin .../bk-magic/images/date/bk-date-icon.png | Bin .../images/date/switch-icon-disabled.png | Bin .../bk-magic/images/date/switch-icon-on.png | Bin .../bk-magic/images/date/switch-icon.png | Bin .../bk-magic/images/date/time-icon-on.png | Bin .../assets/bk-magic/images/date/time-icon.png | Bin .../bk-magic/images/default_loading.png | Bin .../assets/bk-magic/images/loading-point1.png | Bin .../assets/bk-magic/images/loading-point2.png | Bin .../assets/bk-magic/images/loading-point3.png | Bin .../assets/bk-magic/images/loading-point4.png | Bin .../assets/bk-magic/images/loading-point5.png | Bin .../assets/bk-magic/images/loading-point6.png | Bin .../assets/bk-magic/images/loading-point7.png | Bin .../assets/bk-magic/images/loading-point8.png | Bin .../assets/bk-magic/images/loading-point9.png | Bin .../bk-magic/images/loading_circle1.png | Bin .../bk-magic/images/loading_circle2.png | Bin .../assets/bk-magic/images/radio-small.png | Bin .../src/assets/bk-magic/images/radio.png | Bin .../src/assets/bk-magic/images/transfer.png | Bin .../src/assets/bk-magic/images/upload.svg | 0 .../src/assets/bk-magic/images/uploadfile.svg | 0 .../src/assets/bk-magic/images/uploadzip.svg | 0 .../desktop}/src/assets/css/bkflow.scss | 0 .../assets/css/jsPlumbToolkit-defaults.css | 0 .../desktop}/src/assets/fonts/commonicon.eot | Bin .../desktop}/src/assets/fonts/commonicon.svg | 0 .../desktop}/src/assets/fonts/commonicon.ttf | Bin .../desktop}/src/assets/fonts/commonicon.woff | Bin .../src/assets/images/atom-type-default.svg | 0 .../desktop}/src/assets/images/building.png | Bin .../desktop}/src/assets/images/expre_401.png | Bin .../desktop}/src/assets/images/expre_403.png | Bin .../desktop}/src/assets/images/expre_500.png | Bin .../desktop}/src/assets/images/loading.svg | 0 .../src/assets/images/logo/logo-en.svg | 0 .../src/assets/images/logo/logo-zh.svg | 0 .../desktop}/src/assets/images/task-en.png | Bin .../desktop}/src/assets/images/task-zh.png | Bin .../desktop}/src/assets/js/bkflow.js | 0 .../desktop}/src/assets/js/jsplumb.min.js | 0 .../desktop}/src/assets/js/template-web.js | 0 .../common/Individualization/IpLogContent.vue | 167 + .../common/PipelineCanvas/ConfigBar.vue | 176 +- .../common/PipelineCanvas/MenuBar.vue | 305 +- .../common/PipelineCanvas/NodeCanvas.vue | 10 +- .../common/PipelineCanvas/NodeTemplate.vue | 217 + .../common/PipelineCanvas/index.vue | 681 ++++ .../common/RenderForm/FormGroup.vue | 226 ++ .../components/common/RenderForm/FormItem.vue | 365 ++ .../RenderForm/IpSelector/ConditionItem.vue | 146 +- .../RenderForm/IpSelector/DynamicIp.vue | 198 + .../RenderForm/IpSelector/IpSearchInput.vue | 54 +- .../IpSelector/MultipleIpSelector.vue | 126 +- .../RenderForm/IpSelector/SelectCondition.vue | 98 +- .../IpSelector/SingleIpSelector.vue | 82 +- .../common/RenderForm/IpSelector/StaticIp.vue | 361 ++ .../IpSelector/StaticIpAddingPanel.vue | 191 +- .../common/RenderForm/IpSelector/index.vue | 209 + .../common/RenderForm/RenderForm.vue | 273 ++ .../common/RenderForm/formMixins.js | 11 +- .../common/RenderForm/tags/TagCheckbox.vue | 80 +- .../common/RenderForm/tags/TagDatatable.vue | 355 ++ .../common/RenderForm/tags/TagDatetime.vue | 51 +- .../common/RenderForm/tags/TagInput.vue | 165 +- .../common/RenderForm/tags/TagInt.vue | 52 +- .../common/RenderForm/tags/TagIpSelector.vue | 132 + .../RenderForm/tags/TagMember_selector.vue | 50 + .../common/RenderForm/tags/TagPassword.vue | 102 + .../common/RenderForm/tags/TagRadio.vue | 72 +- .../common/RenderForm/tags/TagSelect.vue | 228 ++ .../common/RenderForm/tags/TagText.vue | 26 +- .../common/RenderForm/tags/TagTextarea.vue | 64 +- .../common/RenderForm/tags/TagTree.vue | 193 + .../common/RenderForm/tags/TagUpload.vue | 153 + .../components/common/base/BaseCheckbox.vue | 40 +- .../components/common/base/BaseCollapse.vue | 50 +- .../src/components/common/base/BaseInput.vue | 48 +- .../src/components/common/base/BaseSearch.vue | 42 +- .../src/components/common/base/BaseTitle.vue | 10 +- .../src/components/common/base/NoData.vue | 31 +- .../common/dataTable/DataTablePagination.vue | 359 ++ .../components/common/modal/ErrorCode401.vue | 28 +- .../components/common/modal/ErrorCode403.vue | 22 +- .../components/common/modal/ErrorCode405.vue | 41 +- .../components/common/modal/ErrorCode406.vue | 37 +- .../components/common/modal/ErrorCode407.vue | 22 +- .../components/common/modal/ErrorCode500.vue | 21 +- .../common/modal/ErrorCodeModal.vue | 110 + .../common/modal/UserLoginModal.vue | 30 +- .../src/components/layout/BizSelector.vue | 188 +- .../src/components/layout/CopyrightFooter.vue | 39 +- .../src/components/layout/Navigator.vue | 422 ++ .../components/layout/NotFoundComponent.vue | 38 +- .../src/components/tags/TagTestDatetime.vue | 40 +- ...50\207\252\345\256\232\344\271\211tags.md" | 0 .../desktop}/src/config/setting.js | 14 +- .../desktop}/src/constants/index.js | 2 +- .../desktop}/src/directives/index.js | 2 +- .../blueflow => frontend/desktop}/src/main.js | 2 - .../desktop}/src/mixins/.gitkeep | 0 .../desktop}/src/mixins/js/analysisMixins.js | 2 +- .../desktop}/src/pages/appmaker/AppCard.vue | 71 +- .../src/pages/appmaker/AppEditDialog.vue | 277 +- .../src/pages/appmaker/AppTaskHome/index.vue | 350 +- frontend/desktop/src/pages/appmaker/index.vue | 468 +++ frontend/desktop/src/pages/audit/index.vue | 713 ++++ .../desktop}/src/pages/config/index.vue | 146 +- .../desktop}/src/pages/error/index.vue | 64 +- frontend/desktop/src/pages/functor/index.vue | 794 ++++ .../desktop}/src/pages/home/HomeSummary.vue | 28 +- .../src/pages/home/QuickCreateTask.vue | 250 +- .../src/pages/home/SelectTemplateDialog.vue | 186 +- .../desktop}/src/pages/home/TaskFeeds.vue | 204 +- .../src/pages/home/TaskPercentChart.vue | 85 + frontend/desktop/src/pages/home/index.vue | 290 ++ .../PeriodicList/DeletePeriodicDialog.vue | 46 +- .../PeriodicList/ModifyPeriodicDialog.vue | 242 ++ .../src/pages/periodic/PeriodicList/index.vue | 453 ++- .../desktop}/src/pages/periodic/index.vue | 8 +- .../src/pages/statistics/Appmaker/index.vue | 529 +++ .../src/pages/statistics/Atom/index.vue | 859 ++++ .../src/pages/statistics/Instance/index.vue | 854 ++++ .../src/pages/statistics/Template/index.vue | 689 ++++ .../pages/statistics/dataStatistics/index.vue | 96 +- .../desktop}/src/pages/statistics/index.vue | 94 +- .../desktop}/src/pages/task/NodePreview.vue | 100 +- .../pages/task/TaskCreate/TaskParamFill.vue | 525 +++ .../pages/task/TaskCreate/TaskSelectNode.vue | 994 +++++ .../src/pages/task/TaskCreate/index.vue | 179 + .../pages/task/TaskExecute/ExecuteInfo.vue | 334 +- .../task/TaskExecute/GatewaySelectDialog.vue | 56 +- .../pages/task/TaskExecute/ModifyParams.vue | 164 + .../src/pages/task/TaskExecute/ModifyTime.vue | 186 + .../src/pages/task/TaskExecute/NodeTree.vue | 89 +- .../src/pages/task/TaskExecute/RetryNode.vue | 187 + .../TaskExecute/TaskFunctionalization.vue | 268 +- .../pages/task/TaskExecute/TaskOperation.vue | 1447 +++++++ .../src/pages/task/TaskExecute/ViewParams.vue | 196 + .../src/pages/task/TaskExecute/index.vue | 138 + .../pages/task/TaskExecute/revokeDialog.vue | 34 +- .../pages/task/TaskList/TaskCloneDialog.vue | 71 +- .../src/pages/task/TaskList/index.vue | 745 ++-- .../desktop/src/pages/task/TaskParamEdit.vue | 185 + .../desktop}/src/pages/task/TaskStep.vue | 119 +- .../desktop}/src/pages/task/index.vue | 8 +- .../template/TemplateEdit/NodeConfig.vue | 1246 ++++++ .../template/TemplateEdit/ReuseVarDialog.vue | 206 +- .../TemplateSetting/TabGlobalVariables.vue | 567 +++ .../TemplateSetting/TabLocalDraft.vue | 324 ++ .../TemplateSetting/TabTemplateConfig.vue | 186 +- .../TemplateSetting/TemplateSetting.vue | 248 ++ .../TemplateSetting/VariableEdit.vue | 556 +++ .../TemplateSetting/VariableEditDialog.vue | 58 +- .../src/pages/template/TemplateEdit/index.vue | 936 +++++ .../TemplateList/AuthorityManageDialog.vue | 178 + .../TemplateList/ExportTemplateDialog.vue | 529 +++ .../TemplateList/ImportTemplateDialog.vue | 546 +++ .../src/pages/template/TemplateList/index.vue | 813 ++-- .../desktop}/src/pages/template/index.vue | 8 +- .../desktop}/src/routers/index.js | 7 +- .../desktop}/src/scss/analysis.scss | 0 .../desktop}/src/scss/animation/.gitkeep | 0 .../desktop}/src/scss/animation/collapse.scss | 0 .../src/scss/animation/make-transitions.scss | 0 .../desktop}/src/scss/animation/operate.scss | 0 .../desktop}/src/scss/animation/slide.scss | 0 .../desktop}/src/scss/app.scss | 0 .../desktop}/src/scss/button.scss | 0 .../desktop}/src/scss/common.scss | 28 +- .../desktop}/src/scss/config.scss | 0 .../scss/datastatistics/datastatistics.scss | 0 .../desktop}/src/scss/iconfont.scss | 0 .../desktop}/src/scss/mixins/clearfix.scss | 0 .../src/scss/mixins/multiLineEllipsis.scss | 0 .../desktop}/src/scss/mixins/scrollbar.scss | 0 .../desktop}/src/scss/reset.scss | 0 .../desktop}/src/store/index.js | 37 +- .../desktop}/src/store/modules/appmaker.js | 16 +- .../desktop}/src/store/modules/atomForm.js | 19 +- .../desktop}/src/store/modules/atomList.js | 12 +- .../desktop}/src/store/modules/audit.js | 5 +- .../desktop}/src/store/modules/config.js | 4 +- .../desktop}/src/store/modules/function.js | 9 +- .../desktop}/src/store/modules/index.js | 0 .../desktop}/src/store/modules/periodic.js | 22 +- .../desktop}/src/store/modules/task.js | 58 +- .../desktop}/src/store/modules/taskList.js | 10 +- .../desktop}/src/store/modules/template.js | 109 +- .../src/store/modules/templateList.js | 30 +- .../desktop}/src/utils/atomFilter.js | 7 +- .../desktop}/src/utils/bus.js | 2 +- .../desktop}/src/utils/checkDataType.js | 2 +- .../desktop}/src/utils/dom.js | 10 +- .../desktop}/src/utils/draft.js | 60 +- .../desktop}/src/utils/errorHandler.js | 0 .../desktop}/src/utils/formatPosition.js | 123 +- .../desktop}/src/utils/i18n.js | 0 .../desktop}/src/utils/nodeFilter.js | 23 +- .../desktop}/src/utils/tools.js | 5 +- .../desktop}/src/utils/uuid.js | 2 +- .../desktop}/src/utils/validatePipeline.js | 61 +- gcloud/apigw/api_doc.md | 2124 ---------- gcloud/apigw/decorators.py | 7 +- gcloud/apigw/urls.py | 1 + gcloud/apigw/views.py | 49 +- gcloud/conf/sites/community/ver_settings.py | 4 + gcloud/contrib/appmaker/admin.py | 1 - gcloud/contrib/appmaker/models.py | 1 - .../core/api_adapter/sites/open/user_info.py | 2 +- gcloud/core/apps.py | 4 +- gcloud/core/command.py | 2 +- gcloud/taskflow3/api.py | 20 +- gcloud/taskflow3/models.py | 30 +- gcloud/tasktmpl3/api.py | 2 +- gcloud/tasktmpl3/sites/open/import_data.py | 1 - .../sites/open/import_data_2_to_3.py | 1 - gcloud/tasktmpl3/sites/utils.py | 1 - gcloud/tests/apigw/test_apigw.py | 117 +- gcloud/tests/mock.py | 23 +- gcloud/tests/mock_settings.py | 3 + .../models/test_taskflow_instance.py | 39 + gcloud/tests/taskflow3/test_api.py | 196 + gcloud/webservice3/resources.py | 70 +- issue_template.md | 14 +- locale/en/LC_MESSAGES/django.mo | Bin 34089 -> 29944 bytes locale/en/LC_MESSAGES/django.po | 1462 +++---- locale/en/LC_MESSAGES/djangojs.mo | Bin 50468 -> 39832 bytes locale/en/LC_MESSAGES/djangojs.po | 3600 ++++++++--------- locale/zh_hans/LC_MESSAGES/django.mo | Bin 36050 -> 30384 bytes locale/zh_hans/LC_MESSAGES/django.po | 1462 +++---- locale/zh_hans/LC_MESSAGES/djangojs.mo | Bin 51146 -> 40072 bytes locale/zh_hans/LC_MESSAGES/djangojs.po | 3576 +++++++--------- pipeline/admin.py | 7 - pipeline/blueflow/.eslintrc.js | 55 - pipeline/blueflow/src/App.vue | 121 - .../common/Individualization/IpLogContent.vue | 162 - .../common/PipelineCanvas/NodeTemplate.vue | 219 - .../common/PipelineCanvas/index.vue | 685 ---- .../common/RenderForm/FormGroup.vue | 217 - .../components/common/RenderForm/FormItem.vue | 346 -- .../RenderForm/IpSelector/DynamicIp.vue | 200 - .../common/RenderForm/IpSelector/StaticIp.vue | 358 -- .../common/RenderForm/IpSelector/index.vue | 215 - .../common/RenderForm/RenderForm.vue | 240 -- .../common/RenderForm/tags/TagDatatable.vue | 356 -- .../common/RenderForm/tags/TagIp_selector.vue | 132 - .../common/RenderForm/tags/TagPassword.vue | 101 - .../common/RenderForm/tags/TagSelect.vue | 229 -- .../common/RenderForm/tags/TagTree.vue | 194 - .../common/RenderForm/tags/TagUpload.vue | 149 - .../common/dataTable/DataTablePagination.vue | 359 -- .../common/modal/ErrorCodeModal.vue | 108 - .../src/components/layout/Navigator.vue | 427 -- .../blueflow/src/pages/appmaker/index.vue | 286 -- pipeline/blueflow/src/pages/audit/index.vue | 534 --- pipeline/blueflow/src/pages/functor/index.vue | 594 --- .../src/pages/home/TaskPercentChart.vue | 86 - pipeline/blueflow/src/pages/home/index.vue | 296 -- .../PeriodicList/ModifyPeriodicDialog.vue | 243 -- .../src/pages/statistics/Appmaker/index.vue | 530 --- .../src/pages/statistics/Atom/index.vue | 859 ---- .../src/pages/statistics/Instance/index.vue | 855 ---- .../src/pages/statistics/Template/index.vue | 690 ---- .../pages/task/TaskCreate/TaskParamFill.vue | 519 --- .../pages/task/TaskCreate/TaskSelectNode.vue | 992 ----- .../src/pages/task/TaskCreate/index.vue | 179 - .../pages/task/TaskExecute/ModifyParams.vue | 158 - .../src/pages/task/TaskExecute/ModifyTime.vue | 187 - .../src/pages/task/TaskExecute/RetryNode.vue | 188 - .../pages/task/TaskExecute/TaskOperation.vue | 1414 ------- .../src/pages/task/TaskExecute/ViewParams.vue | 197 - .../src/pages/task/TaskExecute/index.vue | 138 - .../blueflow/src/pages/task/TaskParamEdit.vue | 233 -- .../template/TemplateEdit/NodeConfig.vue | 1244 ------ .../TemplateSetting/TabGlobalVariables.vue | 577 --- .../TemplateSetting/TabLocalDraft.vue | 407 -- .../TemplateSetting/TemplateSetting.vue | 252 -- .../TemplateSetting/VariableEdit.vue | 610 --- .../src/pages/template/TemplateEdit/index.vue | 878 ---- .../TemplateList/AuthorityManageDialog.vue | 180 - .../TemplateList/ExportTemplateDialog.vue | 472 --- .../TemplateList/ImportTemplateDialog.vue | 603 --- pipeline/builder/builder.py | 24 +- pipeline/builder/flow/activity.py | 12 +- pipeline/builder/flow/base.py | 5 + pipeline/builder/flow/data.py | 1 + pipeline/component_framework/admin.py | 1 - pipeline/component_framework/base.py | 1 - pipeline/component_framework/component.py | 6 + pipeline/components/collections/examples.py | 38 +- pipeline/conf/default_settings.py | 2 + pipeline/contrib/web/forms.py | 145 - pipeline/contrib/web/models.py | 12 - pipeline/contrib/web/urls.py | 36 - pipeline/contrib/web/urls_v1.py | 63 - pipeline/contrib/web/views_v1.py | 414 -- pipeline/contrib/web/views_web.py | 42 - pipeline/contrib/web/webresource/resource.py | 306 -- pipeline/core/data/var.py | 10 +- pipeline/core/flow/activity.py | 11 +- .../pipeline.service.task_service.md | 238 ++ pipeline/docs/quick_start.md | 119 + pipeline/docs/user_guide_basic_concept.md | 91 + pipeline/docs/user_guide_custom_component.md | 367 ++ pipeline/docs/user_guide_flow_builder.md | 283 ++ pipeline/docs/user_guide_flow_management.md | 228 ++ .../docs/user_guide_flow_orchestration.md | 567 +++ pipeline/engine/admin.py | 1 - pipeline/engine/api.py | 16 - pipeline/engine/core/runtime.py | 5 +- pipeline/engine/models/core.py | 12 +- pipeline/engine/utils.py | 13 + .../0019_delete_variablemodel.py} | 10 +- pipeline/models.py | 30 +- .../service/modbpm_adapter/modbpm_adapter.py | 217 - .../pipeline_engine_adapter/adapter_api.py | 3 +- pipeline/service/task_service.py | 12 +- pipeline/templates/pipeline/home.html | 348 -- pipeline/templates/pipeline/instance.html | 82 - pipeline/templates/pipeline/newtask.html | 66 - .../tests/builder/flow/test_node_output.py | 2 +- .../component_framework/test_component.py | 14 +- .../models/function/test_function_switch.py | 1 - pipeline/tests/engine/test_api.py | 10 - pipeline/tests/mock.py | 4 +- pipeline/utils/uniqid.py | 8 +- .../web => variable_framework}/__init__.py | 2 +- .../apps.py => variable_framework/admin.py} | 11 +- .../{variables => variable_framework}/apps.py | 12 +- .../migrations/0001_initial.py | 18 +- .../migrations/__init__.py | 0 pipeline/variable_framework/models.py | 55 + .../signals}/__init__.py | 0 .../signals/handlers.py | 6 +- pipeline/variables/__init__.py | 14 - .../cmdb_ip_picker/constants.py | 18 +- pipeline_plugins/cmdb_ip_picker/query.py | 7 +- pipeline_plugins/cmdb_ip_picker/utils.py | 237 +- .../components/collections/sites/open/bk.py | 3 +- .../components/collections/sites/open/job.py | 12 +- .../components/query/common_query.py | 130 - .../atoms/sites/open/job/job_execute_task.js | 1 + pipeline_plugins/components/urls.py | 10 +- pipeline_plugins/components/utils/__init__.py | 1 - .../tests/cmdb_ip_picker/test_utils.py | 35 +- .../tests/components}/__init__.py | 0 .../components/utils/sites/open}/__init__.py | 0 .../components/utils/sites/open/test_utils.py | 182 - .../variables/collections/common.py | 56 +- .../variables/collections/sites/open/cc.py | 16 +- .../variables/{sites => query}/__init__.py | 0 .../{sites/open => query/sites}/__init__.py | 0 .../variables/query/sites/open/__init__.py | 0 .../variables/{ => query}/sites/open/utils.py | 4 + .../variables/{sites => query}/utils.py | 4 +- .../variables/static/variables/datetime.js | 28 + .../variables/static/variables/input.js | 28 + .../variables/static/variables/int.js | 28 + .../variables/static/variables/select.js | 64 + .../variables/static/variables/textarea.js | 28 + .../variables/urls.py | 2 + readme.md | 2 +- readme_en.md | 2 +- scripts/develop/dev_settings.py | 9 +- scripts/i18n/django_i18n.sh | 11 +- scripts/publish/build.sh | 2 +- .../atoms/sites/open/job/job_execute_task.js | 1 + static/variables/datetime.js | 28 + static/variables/input.js | 28 + static/variables/int.js | 28 + static/variables/select.js | 64 + static/variables/select_meta.js | 79 - static/variables/textarea.js | 28 + 458 files changed, 35720 insertions(+), 33923 deletions(-) create mode 100644 docs/apidoc/en/create_periodic_task.md create mode 100644 docs/apidoc/en/get_periodic_task_info.md create mode 100644 docs/apidoc/en/get_periodic_task_list.md create mode 100644 docs/apidoc/en/get_task_detail.md create mode 100644 docs/apidoc/en/get_task_node_detail.md create mode 100644 docs/apidoc/en/modify_constants_for_periodic_task.md create mode 100644 docs/apidoc/en/modify_cron_for_periodic_task.md create mode 100644 docs/apidoc/en/node_callback.md create mode 100644 docs/apidoc/en/set_periodic_task_enabled.md create mode 100644 docs/apidoc/zh_hans/create_periodic_task.md create mode 100644 docs/apidoc/zh_hans/get_periodic_task_info.md create mode 100644 docs/apidoc/zh_hans/get_periodic_task_list.md create mode 100644 docs/apidoc/zh_hans/get_task_detail.md create mode 100644 docs/apidoc/zh_hans/get_task_node_detail.md create mode 100644 docs/apidoc/zh_hans/modify_constants_for_periodic_task.md create mode 100644 docs/apidoc/zh_hans/modify_cron_for_periodic_task.md create mode 100644 docs/apidoc/zh_hans/node_callback.md create mode 100644 docs/apidoc/zh_hans/set_periodic_task_enabled.md rename {pipeline/blueflow => frontend/desktop}/.babelrc (100%) rename {pipeline/blueflow => frontend/desktop}/.editorconfig (100%) rename {pipeline/blueflow => frontend/desktop}/.eslintignore (100%) create mode 100644 frontend/desktop/.eslintrc.js rename {pipeline/blueflow => frontend/desktop}/.gitignore (100%) rename {pipeline/blueflow => frontend/desktop}/__init__.py (100%) rename {pipeline/blueflow => frontend/desktop}/builds/webpack.base.js (92%) rename {pipeline/blueflow => frontend/desktop}/builds/webpack.prod.config.js (98%) rename {pipeline/blueflow => frontend/desktop}/package.json (82%) rename {pipeline/blueflow => frontend/desktop}/postcss.config.js (99%) create mode 100644 frontend/desktop/src/App.vue rename {pipeline/blueflow => frontend/desktop}/src/api/fileDownload.js (94%) rename {pipeline/blueflow => frontend/desktop}/src/api/index.js (92%) rename {pipeline/blueflow => frontend/desktop}/src/api/interceptors.js (93%) rename {pipeline/blueflow => frontend/desktop}/src/api/urls.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/bk-magic-vue.min.css (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/bk-magic-vue.min.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/fonts/icomoon.eot (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/fonts/icomoon.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/fonts/icomoon.ttf (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/fonts/icomoon.woff (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/bk_check.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/bk_half_check.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/checkbox-disabled.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/checkbox-small.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/checkbox.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/bk-date-icon.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/switch-icon-disabled.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/switch-icon-on.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/switch-icon.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/time-icon-on.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/date/time-icon.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/default_loading.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point1.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point2.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point3.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point4.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point5.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point6.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point7.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point8.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading-point9.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading_circle1.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/loading_circle2.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/radio-small.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/radio.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/transfer.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/upload.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/uploadfile.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/bk-magic/images/uploadzip.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/css/bkflow.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/css/jsPlumbToolkit-defaults.css (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/fonts/commonicon.eot (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/fonts/commonicon.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/fonts/commonicon.ttf (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/fonts/commonicon.woff (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/atom-type-default.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/building.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/expre_401.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/expre_403.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/expre_500.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/loading.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/logo/logo-en.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/logo/logo-zh.svg (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/task-en.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/images/task-zh.png (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/js/bkflow.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/js/jsplumb.min.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/assets/js/template-web.js (100%) create mode 100644 frontend/desktop/src/components/common/Individualization/IpLogContent.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/PipelineCanvas/ConfigBar.vue (54%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/PipelineCanvas/MenuBar.vue (65%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/PipelineCanvas/NodeCanvas.vue (92%) create mode 100644 frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue create mode 100644 frontend/desktop/src/components/common/PipelineCanvas/index.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/FormGroup.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/FormItem.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/ConditionItem.vue (64%) create mode 100644 frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/IpSearchInput.vue (65%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/MultipleIpSelector.vue (63%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/SelectCondition.vue (54%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue (64%) create mode 100644 frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue (59%) create mode 100644 frontend/desktop/src/components/common/RenderForm/IpSelector/index.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/RenderForm.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/formMixins.js (97%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagCheckbox.vue (58%) create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagDatatable.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagDatetime.vue (70%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagInput.vue (54%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagInt.vue (67%) create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagIpSelector.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagRadio.vue (62%) create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagSelect.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagText.vue (75%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/RenderForm/tags/TagTextarea.vue (65%) create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue create mode 100644 frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/BaseCheckbox.vue (77%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/BaseCollapse.vue (73%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/BaseInput.vue (70%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/BaseSearch.vue (79%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/BaseTitle.vue (92%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/base/NoData.vue (80%) create mode 100644 frontend/desktop/src/components/common/dataTable/DataTablePagination.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode401.vue (73%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode403.vue (72%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode405.vue (64%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode406.vue (65%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode407.vue (73%) rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/ErrorCode500.vue (76%) create mode 100644 frontend/desktop/src/components/common/modal/ErrorCodeModal.vue rename {pipeline/blueflow => frontend/desktop}/src/components/common/modal/UserLoginModal.vue (81%) rename {pipeline/blueflow => frontend/desktop}/src/components/layout/BizSelector.vue (53%) rename {pipeline/blueflow => frontend/desktop}/src/components/layout/CopyrightFooter.vue (75%) create mode 100644 frontend/desktop/src/components/layout/Navigator.vue rename {pipeline/blueflow => frontend/desktop}/src/components/layout/NotFoundComponent.vue (63%) rename {pipeline/blueflow => frontend/desktop}/src/components/tags/TagTestDatetime.vue (71%) rename "pipeline/blueflow/src/components/tags/\350\277\231\351\207\214\346\224\276\347\275\256\347\224\250\346\210\267\350\207\252\345\256\232\344\271\211tags.md" => "frontend/desktop/src/components/tags/\350\277\231\351\207\214\346\224\276\347\275\256\347\224\250\346\210\267\350\207\252\345\256\232\344\271\211tags.md" (100%) rename {pipeline/blueflow => frontend/desktop}/src/config/setting.js (86%) rename {pipeline/blueflow => frontend/desktop}/src/constants/index.js (97%) rename {pipeline/blueflow => frontend/desktop}/src/directives/index.js (99%) rename {pipeline/blueflow => frontend/desktop}/src/main.js (99%) rename {pipeline/blueflow => frontend/desktop}/src/mixins/.gitkeep (100%) rename {pipeline/blueflow => frontend/desktop}/src/mixins/js/analysisMixins.js (98%) rename {pipeline/blueflow => frontend/desktop}/src/pages/appmaker/AppCard.vue (73%) rename {pipeline/blueflow => frontend/desktop}/src/pages/appmaker/AppEditDialog.vue (54%) rename {pipeline/blueflow => frontend/desktop}/src/pages/appmaker/AppTaskHome/index.vue (54%) create mode 100644 frontend/desktop/src/pages/appmaker/index.vue create mode 100644 frontend/desktop/src/pages/audit/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/config/index.vue (57%) rename {pipeline/blueflow => frontend/desktop}/src/pages/error/index.vue (53%) create mode 100644 frontend/desktop/src/pages/functor/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/home/HomeSummary.vue (92%) rename {pipeline/blueflow => frontend/desktop}/src/pages/home/QuickCreateTask.vue (51%) rename {pipeline/blueflow => frontend/desktop}/src/pages/home/SelectTemplateDialog.vue (72%) rename {pipeline/blueflow => frontend/desktop}/src/pages/home/TaskFeeds.vue (54%) create mode 100644 frontend/desktop/src/pages/home/TaskPercentChart.vue create mode 100644 frontend/desktop/src/pages/home/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue (62%) create mode 100644 frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/periodic/PeriodicList/index.vue (60%) rename {pipeline/blueflow => frontend/desktop}/src/pages/periodic/index.vue (90%) create mode 100644 frontend/desktop/src/pages/statistics/Appmaker/index.vue create mode 100644 frontend/desktop/src/pages/statistics/Atom/index.vue create mode 100644 frontend/desktop/src/pages/statistics/Instance/index.vue create mode 100644 frontend/desktop/src/pages/statistics/Template/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/statistics/dataStatistics/index.vue (66%) rename {pipeline/blueflow => frontend/desktop}/src/pages/statistics/index.vue (69%) rename {pipeline/blueflow => frontend/desktop}/src/pages/task/NodePreview.vue (67%) create mode 100644 frontend/desktop/src/pages/task/TaskCreate/TaskParamFill.vue create mode 100644 frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue create mode 100644 frontend/desktop/src/pages/task/TaskCreate/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskExecute/ExecuteInfo.vue (54%) rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskExecute/GatewaySelectDialog.vue (63%) create mode 100644 frontend/desktop/src/pages/task/TaskExecute/ModifyParams.vue create mode 100644 frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskExecute/NodeTree.vue (69%) create mode 100644 frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskExecute/TaskFunctionalization.vue (55%) create mode 100644 frontend/desktop/src/pages/task/TaskExecute/TaskOperation.vue create mode 100644 frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue create mode 100644 frontend/desktop/src/pages/task/TaskExecute/index.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskExecute/revokeDialog.vue (69%) rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskList/TaskCloneDialog.vue (61%) rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskList/index.vue (50%) create mode 100644 frontend/desktop/src/pages/task/TaskParamEdit.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/task/TaskStep.vue (66%) rename {pipeline/blueflow => frontend/desktop}/src/pages/task/index.vue (90%) create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/template/TemplateEdit/ReuseVarDialog.vue (56%) create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue (51%) create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue (62%) create mode 100644 frontend/desktop/src/pages/template/TemplateEdit/index.vue create mode 100644 frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue create mode 100644 frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue create mode 100644 frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue rename {pipeline/blueflow => frontend/desktop}/src/pages/template/TemplateList/index.vue (53%) rename {pipeline/blueflow => frontend/desktop}/src/pages/template/index.vue (90%) rename {pipeline/blueflow => frontend/desktop}/src/routers/index.js (98%) rename {pipeline/blueflow => frontend/desktop}/src/scss/analysis.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/animation/.gitkeep (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/animation/collapse.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/animation/make-transitions.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/animation/operate.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/animation/slide.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/app.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/button.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/common.scss (83%) rename {pipeline/blueflow => frontend/desktop}/src/scss/config.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/datastatistics/datastatistics.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/iconfont.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/mixins/clearfix.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/mixins/multiLineEllipsis.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/mixins/scrollbar.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/scss/reset.scss (100%) rename {pipeline/blueflow => frontend/desktop}/src/store/index.js (80%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/appmaker.js (78%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/atomForm.js (81%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/atomList.js (91%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/audit.js (91%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/config.js (93%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/function.js (86%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/index.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/periodic.js (77%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/task.js (70%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/taskList.js (87%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/template.js (92%) rename {pipeline/blueflow => frontend/desktop}/src/store/modules/templateList.js (70%) rename {pipeline/blueflow => frontend/desktop}/src/utils/atomFilter.js (97%) rename {pipeline/blueflow => frontend/desktop}/src/utils/bus.js (97%) rename {pipeline/blueflow => frontend/desktop}/src/utils/checkDataType.js (99%) rename {pipeline/blueflow => frontend/desktop}/src/utils/dom.js (85%) rename {pipeline/blueflow => frontend/desktop}/src/utils/draft.js (73%) rename {pipeline/blueflow => frontend/desktop}/src/utils/errorHandler.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/utils/formatPosition.js (87%) rename {pipeline/blueflow => frontend/desktop}/src/utils/i18n.js (100%) rename {pipeline/blueflow => frontend/desktop}/src/utils/nodeFilter.js (88%) rename {pipeline/blueflow => frontend/desktop}/src/utils/tools.js (98%) rename {pipeline/blueflow => frontend/desktop}/src/utils/uuid.js (99%) rename {pipeline/blueflow => frontend/desktop}/src/utils/validatePipeline.js (77%) delete mode 100644 gcloud/apigw/api_doc.md create mode 100644 gcloud/tests/taskflow3/models/test_taskflow_instance.py create mode 100644 gcloud/tests/taskflow3/test_api.py delete mode 100644 pipeline/blueflow/.eslintrc.js delete mode 100644 pipeline/blueflow/src/App.vue delete mode 100644 pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue delete mode 100644 pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue delete mode 100644 pipeline/blueflow/src/components/common/PipelineCanvas/index.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/FormItem.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue delete mode 100644 pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue delete mode 100644 pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue delete mode 100644 pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue delete mode 100644 pipeline/blueflow/src/components/layout/Navigator.vue delete mode 100644 pipeline/blueflow/src/pages/appmaker/index.vue delete mode 100644 pipeline/blueflow/src/pages/audit/index.vue delete mode 100644 pipeline/blueflow/src/pages/functor/index.vue delete mode 100644 pipeline/blueflow/src/pages/home/TaskPercentChart.vue delete mode 100644 pipeline/blueflow/src/pages/home/index.vue delete mode 100644 pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue delete mode 100644 pipeline/blueflow/src/pages/statistics/Appmaker/index.vue delete mode 100644 pipeline/blueflow/src/pages/statistics/Atom/index.vue delete mode 100644 pipeline/blueflow/src/pages/statistics/Instance/index.vue delete mode 100644 pipeline/blueflow/src/pages/statistics/Template/index.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskCreate/index.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskExecute/index.vue delete mode 100644 pipeline/blueflow/src/pages/task/TaskParamEdit.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateEdit/index.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue delete mode 100644 pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue delete mode 100644 pipeline/contrib/web/forms.py delete mode 100644 pipeline/contrib/web/models.py delete mode 100644 pipeline/contrib/web/urls.py delete mode 100644 pipeline/contrib/web/urls_v1.py delete mode 100644 pipeline/contrib/web/views_v1.py delete mode 100644 pipeline/contrib/web/views_web.py delete mode 100644 pipeline/contrib/web/webresource/resource.py create mode 100644 pipeline/docs/api_reference/pipeline.service.task_service.md create mode 100644 pipeline/docs/quick_start.md create mode 100644 pipeline/docs/user_guide_basic_concept.md create mode 100644 pipeline/docs/user_guide_custom_component.md create mode 100644 pipeline/docs/user_guide_flow_builder.md create mode 100644 pipeline/docs/user_guide_flow_management.md create mode 100644 pipeline/docs/user_guide_flow_orchestration.md rename pipeline/{contrib/web/migrations/0002_auto_20180206_1955.py => migrations/0019_delete_variablemodel.py} (79%) delete mode 100644 pipeline/service/modbpm_adapter/modbpm_adapter.py delete mode 100644 pipeline/templates/pipeline/home.html delete mode 100644 pipeline/templates/pipeline/instance.html delete mode 100644 pipeline/templates/pipeline/newtask.html rename pipeline/{contrib/web => variable_framework}/__init__.py (90%) rename pipeline/{contrib/web/apps.py => variable_framework/admin.py} (74%) rename pipeline/{variables => variable_framework}/apps.py (79%) rename pipeline/{contrib/web => variable_framework}/migrations/0001_initial.py (58%) rename pipeline/{contrib/web => variable_framework}/migrations/__init__.py (100%) create mode 100644 pipeline/variable_framework/models.py rename pipeline/{contrib/web/webresource => variable_framework/signals}/__init__.py (100%) rename pipeline/{variables => variable_framework}/signals/handlers.py (90%) delete mode 100644 pipeline/variables/__init__.py rename pipeline/contrib/web/urls_web.py => pipeline_plugins/cmdb_ip_picker/constants.py (71%) delete mode 100644 pipeline_plugins/components/query/common_query.py rename {pipeline/service/modbpm_adapter => pipeline_plugins/tests/components}/__init__.py (100%) rename {pipeline/variables/signals => pipeline_plugins/tests/components/utils/sites/open}/__init__.py (100%) rename pipeline_plugins/variables/{sites => query}/__init__.py (100%) rename pipeline_plugins/variables/{sites/open => query/sites}/__init__.py (100%) rename pipeline/contrib/web/admin.py => pipeline_plugins/variables/query/sites/open/__init__.py (100%) rename pipeline_plugins/variables/{ => query}/sites/open/utils.py (92%) rename pipeline_plugins/variables/{sites => query}/utils.py (82%) create mode 100644 pipeline_plugins/variables/static/variables/datetime.js create mode 100644 pipeline_plugins/variables/static/variables/input.js create mode 100644 pipeline_plugins/variables/static/variables/int.js create mode 100644 pipeline_plugins/variables/static/variables/textarea.js rename pipeline/contrib/web/tests.py => pipeline_plugins/variables/urls.py (97%) create mode 100644 static/variables/datetime.js create mode 100644 static/variables/input.js create mode 100644 static/variables/int.js delete mode 100644 static/variables/select_meta.js create mode 100644 static/variables/textarea.js diff --git a/.gitignore b/.gitignore index b8385bcc5b..c65c2f1cb5 100644 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,15 @@ ENV/ # PyCharm project settings .idea -.vscode/launch.json +# Frontend project lib file static/pipeline/node_modules/ node_modules/ +webpack_cache + +# OS generate file +.DS_Store + + +# Editor setting file +.vscode/ diff --git a/app.yml b/app.yml index 8ea57fd915..b17f7da627 100644 --- a/app.yml +++ b/app.yml @@ -4,7 +4,7 @@ app_name: 标准运维 is_use_celery: True author: 蓝鲸智云 introduction: 标准运维是通过一套成熟稳定的任务调度引擎,把在多系统间的工作整合到一个流程,助力运维实现跨系统调度自动化的SaaS应用。 -version: 3.3.9 +version: 3.3.13 category: 运维工具 language_support: 中文 desktop: diff --git a/blueapps/account/components/bk_token/models.py b/blueapps/account/components/bk_token/models.py index 4f0a1ac02b..6a37e2248b 100644 --- a/blueapps/account/components/bk_token/models.py +++ b/blueapps/account/components/bk_token/models.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/patch/settings_open_saas.py b/blueapps/patch/settings_open_saas.py index 1fc275db15..e37b1c8fdc 100644 --- a/blueapps/patch/settings_open_saas.py +++ b/blueapps/patch/settings_open_saas.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/patch/settings_paas_services.py b/blueapps/patch/settings_paas_services.py index eed2e8c15a..d34016b720 100644 --- a/blueapps/patch/settings_paas_services.py +++ b/blueapps/patch/settings_paas_services.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/blueapps/template/context_processors.py b/blueapps/template/context_processors.py index 0cc4146ac4..8be19e8cf0 100644 --- a/blueapps/template/context_processors.py +++ b/blueapps/template/context_processors.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/config/default.py b/config/default.py index b69c3cafb7..9783a30c7d 100644 --- a/config/default.py +++ b/config/default.py @@ -57,7 +57,7 @@ 'gcloud.periodictask', 'pipeline', 'pipeline.component_framework', - 'pipeline.variables', + 'pipeline.variable_framework', 'pipeline.engine', 'pipeline.log', 'pipeline.contrib.statistics', diff --git a/config/prod.py b/config/prod.py index 3c246bf5a5..e1938c6f90 100644 --- a/config/prod.py +++ b/config/prod.py @@ -31,11 +31,11 @@ # 正式环境数据库可以在这里配置 -# 默认 default 请不要修改,如果使用了外部数据库,请联系【蓝鲸助手】授权 -# DATABASES.update( +# USE FOLLOWING SQL TO CREATE THE DATABASE NAMED APP_CODE +# SQL: CREATE DATABASE `bk_sops` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +# DATABASES = ( # { -# # 外部数据库授权,请联系 【蓝鲸助手】 -# 'external_db': { +# 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME': '', # 外部数据库名 # 'USER': '', # 外部数据库用户 diff --git a/config/stag.py b/config/stag.py index 75f2acb069..251302d06c 100644 --- a/config/stag.py +++ b/config/stag.py @@ -31,11 +31,11 @@ # 预发布环境数据库可以在这里配置 -# 默认 default 请不要修改,如果使用了外部数据库,请联系【蓝鲸助手】授权 -# DATABASES.update( +# USE FOLLOWING SQL TO CREATE THE DATABASE NAMED APP_CODE +# SQL: CREATE DATABASE `bk_sops` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; +# DATABASES = ( # { -# # 外部数据库授权,请联系 【蓝鲸助手】 -# 'external_db': { +# 'default': { # 'ENGINE': 'django.db.backends.mysql', # 'NAME': '', # 外部数据库名 # 'USER': '', # 外部数据库用户 diff --git a/config/urls_custom.py b/config/urls_custom.py index 785d07473e..318c2742f5 100644 --- a/config/urls_custom.py +++ b/config/urls_custom.py @@ -26,6 +26,7 @@ url(r'^function/', include('gcloud.contrib.function.urls')), url(r'^audit/', include('gcloud.contrib.audit.urls')), url(r'^pipeline/', include('pipeline_plugins.components.urls')), + url(r'^pipeline/', include('pipeline_plugins.variables.urls')), url(r'^analysis/', include('gcloud.contrib.analysis.urls')), url(r'^periodictask/', include('gcloud.periodictask.urls')), ] diff --git a/django_signal_valve/admin.py b/django_signal_valve/admin.py index 5faafda763..f43259a283 100644 --- a/django_signal_valve/admin.py +++ b/django_signal_valve/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/docs/apidoc/en/create_periodic_task.md b/docs/apidoc/en/create_periodic_task.md new file mode 100644 index 0000000000..fddff3938c --- /dev/null +++ b/docs/apidoc/en/create_periodic_task.md @@ -0,0 +1,308 @@ +### Functional description + +Create a periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| template_id | string | YES | ID of template which used to create task | +| bk_biz_id | string | YES | business ID | +| name | string | YES | name of task | +| cron | dict | YES | crontab dict | +| flow_type | string | NO | flow type,common: common flow,common_func:functional flow | +| constants | dict | NO | global variables,details are described below | + +#### constants.KEY + +constant KEY, the format is like ${key} + +#### constants.VALUE + +constant value + +#### cron + + | Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | NO | minute, default value is * | +| hour | string | NO | hour, default value is * | +| day_of_week | string | NO | day of week, default value is * | +| day_of_month | string | NO | day of month, default value is * | +| month_of_year | string | NO | month of year, default value is * | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "template_id": "1", + "bk_biz_id": "2", + "name": "from api 3", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, + "constants": {"${bk_timing}": "100"}, + "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "pause", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "time", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "step1", + "name": "pause", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "step1", + "name": "time", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | +| form | dict | form dict for the task | +| pipeline_tree | dict | flow tree for the task | + + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global variables| + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/create_task.md b/docs/apidoc/en/create_task.md index 08e00e5960..100bb35403 100644 --- a/docs/apidoc/en/create_task.md +++ b/docs/apidoc/en/create_task.md @@ -18,9 +18,11 @@ Create a task with a flow template |---------------|------------|--------|------------------| | bk_biz_id | string | YES | the business ID | | template_id | string | YES | the flow template ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | | name | string | YES | Task name | | flow_type | string | NO | flow type,common: common flow,common_func:functional flow | | constants | dict | NO | global variables,details are described below | +| exclude_task_nodes_id | list | NO | nodes id not be executed, which are set ignore in flow | #### constants.KEY @@ -32,7 +34,7 @@ constant value, the type of value should be same with data from API[get_template ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -49,16 +51,163 @@ constant value, the type of value should be same with data from API[get_template ### Return Result Example -```python +``` { "result": true, "data": { - "task_id": 10 + "task_id": 10, + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } } } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -66,8 +215,39 @@ constant value, the type of value should be same with data from API[get_template | data | dict | data returned when result is true, details are described below | | message | string | error message returned when result is false | -#### data 说明 +#### data | Field | Type | Description | |-----------|----------|-----------| | task_id | int | the task instance ID | +| task_url | str | task instance url | +| pipeline_tree | dict | task pipeline tree | + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global | + +#### data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_periodic_task_info.md b/docs/apidoc/en/get_periodic_task_info.md new file mode 100644 index 0000000000..56604887f3 --- /dev/null +++ b/docs/apidoc/en/get_periodic_task_info.md @@ -0,0 +1,283 @@ +### Functional description + +Query periodic task detail + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | + + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task": "8" +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "pause", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "time", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "step1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "step1", + "name": "pause", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "step1", + "name": "time", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | +| form | dict | form dict for the task | +| pipeline_tree | dict | flow tree for the task | + + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global variables| + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +KEY, the format is like ${key} + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_periodic_task_list.md b/docs/apidoc/en/get_periodic_task_list.md new file mode 100644 index 0000000000..9c683e88d1 --- /dev/null +++ b/docs/apidoc/en/get_periodic_task_list.md @@ -0,0 +1,91 @@ +### Functional description + +Query periodic task for business + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | business ID | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2" +} +``` + +### Return Result Example + +``` +{ + "data": [ + { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 1, + "name": "from api 3", + "creator": "admin", + "last_run_at": "2018-11-28 15:57:01 +0900", + "enabled": false, + "id": 11, + "template_id": "2" + }, + { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 1", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 6, + "template_id": "2" + }, + { + "cron": "*/5 * * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "task", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 4, + "template_id": "2" + } + ], + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | +| total_run_count | int | how much times the task run | +| name | string | task name | +| creator | string | creator | +| last_run_at | string | date of last run | +| enabled | bool | is the task enabled | +| id | int | task id | +| template_id | string | template id for the task | diff --git a/docs/apidoc/en/get_task_detail.md b/docs/apidoc/en/get_task_detail.md new file mode 100644 index 0000000000..4f728400e2 --- /dev/null +++ b/docs/apidoc/en/get_task_detail.md @@ -0,0 +1,339 @@ +### Functional description + +Query a task execution details + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10" +} +``` + +### Return Result Example + +``` +{ + "data": { + "creator": "admin", + "outputs": [ + { + "value": "1", + "key": "${job_script_type}", + "name": "type" + }, + { + "value": "127.0.0.1", + "key": "${IP}", + "name": "IP" + }, + { + "value": "0", + "key": "${EXIT}", + "name": "EXIT" + } + ], + "start_time": "2019-01-17 04:13:08", + "business_id": 2, + "create_time": "2019-01-17 04:13:03", + "business_name": "blueking", + "id": 10, + "constants": { + "${IP}": { + "source_tag": "var_ip_picker.ip_picker", + "source_info": {}, + "name": "IP", + "index": 2, + "custom_type": "ip", + "value": { + "var_ip_custom_value": "127.0.0.1", + "var_ip_method": "custom", + "var_ip_tree": [] + }, + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${IP}", + "desc": "", + "validation": "", + "is_meta": false + }, + "${job_script_type}": { + "source_tag": "job_fast_execute_script.job_script_type", + "source_info": { + "node554316ea019a341f8c28cc6a7da9": [ + "job_script_type" + ] + }, + "name": "type", + "index": 0, + "custom_type": "", + "value": "1", + "show_type": "show", + "source_type": "component_inputs", + "key": "${job_script_type}", + "validation": "", + "desc": "" + }, + "${EXIT}": { + "source_tag": "", + "source_info": {}, + "name": "EXIT", + "index": 1, + "custom_type": "input", + "value": "0", + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${EXIT}", + "validation": "^.+$", + "desc": "" + } + }, + "create_method": "app", + "elapsed_time": 7, + "ex_data": "", + "instance_name": "job_20190117121300", + "end_time": "2019-01-17 04:13:15", + "executor": "admin", + "template_id": "266", + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + + +#### data + +| Field | Type | Description | +|-----------|----------|-----------| +| id | int | the unique ID of task | +| name | string | the name of task | +| business_id | int | the business ID | +| business_name | string | the business name | +| template_id | int | the ID of flow used to create task | +| create_time | string | datetime when this task created | +| create_method | string | method how this task created | +| start_time | string | start time | +| finish_time | string | finish time | +| elapsed_time | int | elapsed time(seconds) | +| creator | string | person who created this task | +| executor | string | person who executed this task | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info of this task,details are described below | +| task_url | str | task instance url | +| pipeline_tree | dict | task pipeline tree | + +#### data.constants.KEY + +KEY, the format is like ${key} + + +#### data.constants.VALUE +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | + + +#### data.outputs[] +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| name | string | name of output variable | +| value | string、int、bool、dict、list | value | +| key | string | KEY | +| preset | bool | where to display in Standard Plugins | + +#### data.pipeline_tree + +| Field | Type | Description | +|-----------|----------|-----------| +| start_event | dict | start node | +| end_event | dict | end node | +| activities | dict | task node(standard plugins or subprocess)info | +| gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | +| flows | dict | sequenceFlow(the line between nodes)info | +| constants | dict | global variables, details are described below | +| outputs | list | outputs info, indicate outputs field of global | diff --git a/docs/apidoc/en/get_task_node_detail.md b/docs/apidoc/en/get_task_node_detail.md new file mode 100644 index 0000000000..ed6058caf6 --- /dev/null +++ b/docs/apidoc/en/get_task_node_detail.md @@ -0,0 +1,138 @@ +### Functional description + +Query a task node execution details + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | +| node_id | string | YES | the node ID of task | +| component_code| string | NO | the code of Standard Plugin, this field is required when query a Standard Plugin node | +| subprocess_stack| string | NO | stack of SubProcess, format is json | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd" + "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", + "component_code": "job_fast_execute_script", +} +``` + +### Return Result Example + +``` +{ + "message": "", + "data": { + "inputs": { + "job_account": "root", + "job_script_timeout": "", + "job_script_source": "manual", + "job_script_list_public": "", + "job_content": "echo 0\nexit 0", + "job_script_type": "1", + "job_script_param": "", + "job_script_list_general": "", + "job_ip_list": "127.0.0.1" + }, + "retry": 0, + "name": "", + "finish_time": "2019-01-17 22:02:46 +0800", + "skip": false, + "start_time": "2019-01-17 22:02:37 +0800", + "children": {}, + "histories": [], + "ex_data": null, + "elapsed_time": 9, + "outputs": [ + { + "value": 407584, + "name": "task ID", + "key": "job_inst_id" + }, + { + "value": "", + "name": "link", + "key": "job_inst_url" + }, + { + "value": true, + "name": "result", + "key": "_result" + } + ], + "state": "FINISHED", + "version": "23ac8c29f62b3337aafcf1f538d277f8", + "error_ignorable": false, + "id": "node0df0431f8f553925af01a94854bd", + "loop": 1 + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +|-----------|----------|-----------| +| id | string | the unique ID of node | +| start_time | string | start time of last execution | +| finish_time | string | finish time of last execution | +| elapsed_time | int | elapsed time of last execution | +| state | string | execution status,CREATED,RUNNING,FAILED,NODE_SUSPENDED,SUSPENDED | +| skip | bool | skipped manually | +| retry | int | retry times | +| inputs | dict | inputs parameters, format is key:value | +| outputs | list | outputs info of this node,details are described below | +| ex_data | string | failure detail of this node,format is json or HTML、string | +| histories | list | retry records, details are described below | + +#### data.outputs[] +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| name | string | name of output variable | +| value | string、int、bool、dict、list | value | +| key | string | KEY | +| preset | bool | where to display in Standard Plugins | + + +#### data.histories[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_time | string | start time | +| finish_time | string | finish time | +| elapsed_time | int | elapsed time | +| state | string | execution status,CREATED,RUNNING,FAILED,NODE_SUSPENDED,SUSPENDED | +| skip | bool | skipped manually | +| retry | int | retry times | +| inputs | dict | inputs parameters, format is key:value | +| outputs | list | outputs info of this node,details are described below | +| ex_data | string | failure detail of this node,format is json or HTML、string | +| histories | list | retry records, details are described below | diff --git a/docs/apidoc/en/get_task_status.md b/docs/apidoc/en/get_task_status.md index 7cfddd8ec6..5496eba9fd 100644 --- a/docs/apidoc/en/get_task_status.md +++ b/docs/apidoc/en/get_task_status.md @@ -21,7 +21,7 @@ Query a task or task node execution status ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ Query a task or task node execution status ### Return Result Example -```python +``` { "result": true, "data": { @@ -76,7 +76,7 @@ Query a task or task node execution status } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -95,6 +95,7 @@ Query a task or task node execution status | start_time | string | start time | | finish_time| string | finish time | | children | dict | task detail of children nodes, details are described below | +| name | string | node name | #### data.state diff --git a/docs/apidoc/en/get_template_info.md b/docs/apidoc/en/get_template_info.md index 80ea2edcd7..f5f5b11d3a 100644 --- a/docs/apidoc/en/get_template_info.md +++ b/docs/apidoc/en/get_template_info.md @@ -18,22 +18,24 @@ Query individual flow template details of the business |---------------|------------|--------|---------------| | bk_biz_id | string | YES | the business ID | | template_id | string | YES | the task ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", "bk_biz_id": "1", - "template_id": "30" + "template_id": "30", + "template_source": "business", } ``` ### Return Result Example -```python +``` { "result": true, "data": { @@ -183,7 +185,7 @@ Query individual flow template details of the business } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -224,7 +226,7 @@ Query individual flow template details of the business |-----------|----------|-----------| | start_event | dict | start node | | end_event | dict | end node | -| activities | dict | task node(atoms or subprocess)info | +| activities | dict | task node(standard plugins or subprocess)info | | gateways | dict | gateways(parallel gateway、exclusive gateway、exclusive gateway)info | | flows | dict | sequenceFlow(the line between nodes)info | | constants | dict | global variables, details are described below | @@ -244,5 +246,5 @@ KEY, the format is like ${key} | desc | string | description | | source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | | custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | -| source_tag | string | source tag and atom info, which is not empty when source_type is component_inputs or component_outputs | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | | source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/get_template_list.md b/docs/apidoc/en/get_template_list.md index 941d604346..a37c5d6480 100644 --- a/docs/apidoc/en/get_template_list.md +++ b/docs/apidoc/en/get_template_list.md @@ -17,21 +17,23 @@ Query flow templates list of the business | Field | Type | Required | Description | |---------------|------------|--------|-------------------| | bk_biz_id | string | YES | the business ID | +| template_source | string | NO | source of flow,default value is business. business: from business, common: from common flow | ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", - "bk_biz_id": "2" + "bk_biz_id": "2", + "template_source": "business", } ``` ### Return Result Example -```python +``` { "result": true, "data": [ @@ -72,7 +74,7 @@ Query flow templates list of the business } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/en/modify_constants_for_periodic_task.md b/docs/apidoc/en/modify_constants_for_periodic_task.md new file mode 100644 index 0000000000..4090ecc03b --- /dev/null +++ b/docs/apidoc/en/modify_constants_for_periodic_task.md @@ -0,0 +1,94 @@ +### Functional description + +modify global parameters for periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| constants | dict | NO | global variables,details are described below | + +#### constants.KEY + +constant KEY, the format is like ${key} + +#### constants.VALUE + +constant value + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "constants": {"${bk_timing}": "100"}, +} +``` + +### Return Result Example + +``` +{ + "data": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "time", + "custom_type": "", + "index": 0, + "value": "15", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data.KEY + +KEY, the format is like ${key} + +#### data.VALUE + +| Field | Type | Description | +|-----------|----------|-----------| +| key | string | same with KEY | +| name | string | name | +| index | int | display order at the front end | +| desc | string | description | +| source_type | string | source of variable, custom mean manual variable, component_inputs means variables comes from task node inputs parameters, component_outputs means variables comes from task node outputs parameters | +| custom_type | string | custom type, which is not empty when source_type is custom, the value is input ,or textarea, or datetime, or int | +| source_tag | string | source tag and standard plugin info, which is not empty when source_type is component_inputs or component_outputs | +| source_info | dict | source info about task node ID | diff --git a/docs/apidoc/en/modify_cron_for_periodic_task.md b/docs/apidoc/en/modify_cron_for_periodic_task.md new file mode 100644 index 0000000000..9ee3d26016 --- /dev/null +++ b/docs/apidoc/en/modify_cron_for_periodic_task.md @@ -0,0 +1,69 @@ +### Functional description + +modify crontab for periodic task + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| cron | dict | YES | crontab dict | + +#### cron + + | Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | NO | minute, default value is * | +| hour | string | NO | hour, default value is * | +| day_of_week | string | NO | day of week, default value is * | +| day_of_month | string | NO | day of month, default value is * | +| month_of_year | string | NO | month of year, default value is * | + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, +} +``` + +### Return Result Example + +``` +{ + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)" + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| cron | string | crontab expression | diff --git a/docs/apidoc/en/node_callback.md b/docs/apidoc/en/node_callback.md new file mode 100644 index 0000000000..67afef99af --- /dev/null +++ b/docs/apidoc/en/node_callback.md @@ -0,0 +1,55 @@ +### Functional description + +callback specific node + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +| ------------ | ------------ | ------ | ---------------- | +| bk_biz_id | string | YES | the business ID | +| task_id | string | YES | the task ID | +| node_id | string | YES | node id | +| callback_data | dict | NO | callback data | | + +### Request Parameters Example + +``` +import requests +kwargs = { + "app_code": "app_code", + "app_secret": "app_secret", + "access_token": "access_token", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd", + "callback_data": {"data": "data"}, +} +response = requests.get("http://{stageVariables.domain}/apigw/node_callback/10/2/", kwargs) +result = response.json() +``` + +### Return Result Example + +``` +{ + "message": "success", + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| result | bool | true or false, indicate success or failure | +| message | string | error message returned when result is false | diff --git a/docs/apidoc/en/operate_task.md b/docs/apidoc/en/operate_task.md index 613192e203..3e30de484f 100644 --- a/docs/apidoc/en/operate_task.md +++ b/docs/apidoc/en/operate_task.md @@ -31,7 +31,7 @@ Task actions such as start, pause, resume, revoke, etc. ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -44,14 +44,14 @@ Task actions such as start, pause, resume, revoke, etc. ### Return Result Example -```python +``` { "result": true, "data": {} } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/en/query_task_count.md b/docs/apidoc/en/query_task_count.md index 0891168604..9fe235cfc8 100644 --- a/docs/apidoc/en/query_task_count.md +++ b/docs/apidoc/en/query_task_count.md @@ -74,7 +74,7 @@ Query task instance classification statistics } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| @@ -89,7 +89,7 @@ Query task instance classification statistics | total | int | total number of tasks obtained by filter criteria | | groups | list | sort statistic details by filter criteria | -#### data.groups +#### data.groups[] | Field | Type | Description | |-----------|----------|-----------| | code | string | classification statistic type coding | diff --git a/docs/apidoc/en/set_periodic_task_enabled.md b/docs/apidoc/en/set_periodic_task_enabled.md new file mode 100644 index 0000000000..e60a219e41 --- /dev/null +++ b/docs/apidoc/en/set_periodic_task_enabled.md @@ -0,0 +1,60 @@ +### Functional description + +modify task activation status + +### Request Parameters + +#### General Parameters +| Field | Type | Required | Description | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | YES | APP ID | +| bk_app_secret | string | YES | APP Secret(APP TOKEN), which can be got via BlueKing Developer Center -> Click APP ID -> Basic Info | +| bk_token | string | NO | Current user login token, bk_token or bk_username must be valid, bk_token can be got by Cookie | +| bk_username | string | NO | Current user username, APP in the white list, can use this field to specify the current user | + +#### Interface Parameters + +| Field | Type | Required | Description | +|---------------|------------|--------|------------------| +| task_id | string | YES | task ID | +| bk_biz_id | string | YES | business ID | +| enabled | bool | NO | whether the task is activate, default value is false | + + +### Request Parameters Example + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "enabled": false +} +``` + +### Return Result Example + +``` +{ + "data": { + "enabled": false + }, + "result": true +} +``` + +### Return Result Description + +| Field | Type | Description | +|-----------|----------|-----------| +| result | bool | true or false, indicate success or failure | +| data | dict | data returned when result is true, details are described below | +| message | string | error message returned when result is false | + +#### data + +| Field | Type | Description | +| ------------ | ---------- | ------------------------------ | +| enabled | bool | whether the task is activate | diff --git a/docs/apidoc/en/start_task.md b/docs/apidoc/en/start_task.md index 46c4d55ded..ff303d9a9b 100644 --- a/docs/apidoc/en/start_task.md +++ b/docs/apidoc/en/start_task.md @@ -21,7 +21,7 @@ Start a task ### Request Parameters Example -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,14 +33,14 @@ Start a task ### Return Result Example -```python +``` { "result": true, "data": {} } ``` -### Return Result Parameters DescriptionExample +### Return Result Description | Field | Type | Description | |-----------|----------|-----------| diff --git a/docs/apidoc/readme.md b/docs/apidoc/readme.md index 279967a238..7a811ef690 100644 --- a/docs/apidoc/readme.md +++ b/docs/apidoc/readme.md @@ -6,18 +6,35 @@ ## 文档说明 -- [查询业务下的模板列表](zh_hans/get_template_list.md) +- [查询模板列表](zh_hans/get_template_list.md) [(English Documents Available)](en/get_template_list.md) -- [查询业务下的单个模板详情](zh_hans/get_template_info.md) +- [查询单个模板详情](zh_hans/get_template_info.md) [(English Documents Available)](en/get_template_info.md) -- [通过流程模板创建任务](zh_hans/create_task.md) +- [通过流程模板新建任务](zh_hans/create_task.md) [(English Documents Available)](en/create_task.md) - [开始执行任务](zh_hans/start_task.md) [(English Documents Available)](en/start_task.md) - [操作任务](zh_hans/operate_task.md) [(English Documents Available)](en/operate_task.md) +- [回调任务节点](zh_hans/node_callback.md) +[(English Documents Available)](en/node_callback.md) - [查询任务或任务节点执行状态](zh_hans/get_task_status.md) [(English Documents Available)](en/get_task_status.md) +- [查询任务执行详情](zh_hans/get_task_detail.md) +[(English Documents Available)](en/get_task_detail.md) +- [查询任务节点执行详情](zh_hans/get_task_node_detail.md) +[(English Documents Available)](en/get_task_node_detail.md) - [查询任务分类统计总数](zh_hans/query_task_count.md) [(English Documents Available)](en/query_task_count.md) - +- [查询业务下的周期任务列表](zh_hans/get_periodic_task_list.md) +[(English Documents Available)](en/get_periodic_task_list.md) +- [查询业务下的某个周期任务详情](zh_hans/get_periodic_task_info.md) +[(English Documents Available)](en/get_periodic_task_info.md) +- [通过流程模板新建周期任务](zh_hans/create_periodic_task.md) +[(English Documents Available)](en/create_periodic_task.md) +- [设置周期任务是否激活](zh_hans/set_periodic_task_enabled.md) +[(English Documents Available)](en/set_periodic_task_enabled.md) +- [修改周期任务的调度策略](zh_hans/modify_cron_for_periodic_task.md) +[(English Documents Available)](en/modify_cron_for_periodic_task.md) +- [修改周期任务的全局参数](zh_hans/modify_constants_for_periodic_task.md) +[(English Documents Available)](en/modify_constants_for_periodic_task.md) diff --git a/docs/apidoc/zh_hans/create_periodic_task.md b/docs/apidoc/zh_hans/create_periodic_task.md new file mode 100644 index 0000000000..00c44c526c --- /dev/null +++ b/docs/apidoc/zh_hans/create_periodic_task.md @@ -0,0 +1,267 @@ +### 功能描述 + +创建周期任务 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| template_id | string | 是 | 用于创建任务的模板ID | +| bk_biz_id | string | 是 | 任务所属业务ID | +| name | string | 是 | 要创建的周期任务名称 | +| cron | dict | 是 | 要创建的周期任务调度策略 | +| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | +| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | + +#### constants.KEY + +变量 KEY,${key} 格式 + +#### constants.VALUE + +变量值 + +#### cron + + | 参数名称 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | 否 | 分,默认为 * | +| hour | string | 否 | 时,默认为 * | +| day_of_week | string | 否 | 一周内的某些天,默认为 * | +| day_of_month | string | 否 | 一个月中的某些天,默认为 * | +| month_of_year | string | 否 | 一年中的某些月份,默认为 * | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "template_id": "1", + "bk_biz_id": "2", + "name": "from api 3", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, + "constants": {"${bk_timing}": "100"}, + "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 3", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "100", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "定时", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "node375320830be9c46cd89f4069857d" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "100", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "步骤1", + "name": "定时", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": false, + "id": 11, + "template_id": 2 + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务 ID | +| template_id | string | 用于创建该任务的模板 ID | +| form | dict | 该周期任务的参数表单对象 | +| pipeline_tree | dict | 该周期任务的实例树 | + +#### data.pipeline_tree + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/create_task.md b/docs/apidoc/zh_hans/create_task.md index f974f6b155..572621dfea 100644 --- a/docs/apidoc/zh_hans/create_task.md +++ b/docs/apidoc/zh_hans/create_task.md @@ -18,9 +18,11 @@ |---------------|------------|--------|------------------| | bk_biz_id | string | 是 | 模板所属业务ID | | template_id | string | 是 | 模板ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | | name | string | 是 | 任务名称 | | flow_type | string | 否 | 任务流程类型,common: 常规流程,common_func:职能化流程 | | constants | dict | 否 | 任务全局参数,详细信息见下面说明 | +| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | #### constants.KEY @@ -32,7 +34,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -49,11 +51,158 @@ ### 返回结果示例 -```python +``` { "result": true, "data": { - "task_id": 10 + "task_id": 10, + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } } } ``` @@ -66,8 +215,39 @@ | data | dict | result=true 时成功数据,详细信息请见下面说明 | | message | string | result=false 时错误信息 | -#### data 说明 +#### data | 字段 | 类型 | 描述 | |-----------|----------|-----------| | task_id | int | 任务实例ID | +| task_url | str | 任务实例链接 | +| pipeline_tree | dict | 任务实例树 | + +#### data.pipeline_tree + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_periodic_task_info.md b/docs/apidoc/zh_hans/get_periodic_task_info.md new file mode 100644 index 0000000000..09c9efd22e --- /dev/null +++ b/docs/apidoc/zh_hans/get_periodic_task_info.md @@ -0,0 +1,280 @@ +### 功能描述 + +查询某个周期任务的详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8" +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "定时2", + "form": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "creator": "admin", + "pipeline_tree": { + "activities": { + "nodea5c396a3ef0f9f3cd7d4d7695f78": { + "outgoing": "linef69b59d165fb8c0061b46588c515", + "incoming": "linecf7b7f10c87187a88b72c5f91177", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "loop": {} + }, + "node76393dcfedcf73dbc726f1c4786d": { + "outgoing": "linecf7b7f10c87187a88b72c5f91177", + "incoming": "linecd597f19606c1455d661f71a582d", + "name": "定时", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": true, + "value": "${bk_timing}" + } + } + }, + "stage_name": "步骤1", + "optional": false, + "type": "ServiceActivity", + "id": "node76393dcfedcf73dbc726f1c4786d", + "loop": {} + } + }, + "end_event": { + "incoming": "linef69b59d165fb8c0061b46588c515", + "outgoing": "", + "type": "EmptyEndEvent", + "id": "node375320830be9c46cd89f4069857d", + "name": "" + }, + "outputs": [], + "flows": { + "linef69b59d165fb8c0061b46588c515": { + "is_default": false, + "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "id": "linef69b59d165fb8c0061b46588c515", + "target": "node375320830be9c46cd89f4069857d" + }, + "linecd597f19606c1455d661f71a582d": { + "is_default": false, + "source": "node4e87796ddd76b0d59337b08f385d", + "id": "linecd597f19606c1455d661f71a582d", + "target": "node76393dcfedcf73dbc726f1c4786d" + }, + "linecf7b7f10c87187a88b72c5f91177": { + "is_default": false, + "source": "node76393dcfedcf73dbc726f1c4786d", + "id": "linecf7b7f10c87187a88b72c5f91177", + "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Right" + }, + "target": { + "id": "node375320830be9c46cd89f4069857d", + "arrow": "Left" + }, + "id": "linef69b59d165fb8c0061b46588c515" + }, + { + "source": { + "id": "node4e87796ddd76b0d59337b08f385d", + "arrow": "Right" + }, + "id": "linecd597f19606c1455d661f71a582d", + "target": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Left" + } + }, + { + "source": { + "id": "node76393dcfedcf73dbc726f1c4786d", + "arrow": "Right" + }, + "target": { + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", + "arrow": "Left" + }, + "id": "linecf7b7f10c87187a88b72c5f91177" + } + ], + "start_event": { + "incoming": "", + "outgoing": "linecd597f19606c1455d661f71a582d", + "type": "EmptyStartEvent", + "id": "node4e87796ddd76b0d59337b08f385d", + "name": "" + }, + "constants": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "index": 0, + "custom_type": "", + "value": "2", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 133, + "x": 631, + "type": "tasknode", + "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "node4e87796ddd76b0d59337b08f385d" + }, + { + "y": 149, + "x": 1092, + "type": "endpoint", + "id": "node375320830be9c46cd89f4069857d" + }, + { + "stage_name": "步骤1", + "name": "定时", + "y": 133, + "x": 300, + "type": "tasknode", + "id": "node76393dcfedcf73dbc726f1c4786d" + } + ] + }, + "last_run_at": "", + "enabled": true, + "id": 5, + "template_id": "2" + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务 ID | +| template_id | string | 用于创建该任务的模板 ID | +| form | dict | 该周期任务的参数表单对象 | +| pipeline_tree | dict | 该周期任务的实例树 | + +#### data.pipeline_tree +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | + +#### data.form.KEY, data.pipeline_tree.constants.KEY + +全局变量 KEY,${key} 格式 + +#### data.form.VALUE, data.pipeline_tree.constants.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_periodic_task_list.md b/docs/apidoc/zh_hans/get_periodic_task_list.md new file mode 100644 index 0000000000..75a55e3e2a --- /dev/null +++ b/docs/apidoc/zh_hans/get_periodic_task_list.md @@ -0,0 +1,91 @@ +### 功能描述 + +查询某个业务下所有的周期任务 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 任务所属业务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2" +} +``` + +### 返回结果示例 + +``` +{ + "data": [ + { + "cron": "*/1 15 * * * (m/h/d/dM/MY)", + "total_run_count": 1, + "name": "from api 3", + "creator": "admin", + "last_run_at": "2018-11-28 15:57:01 +0900", + "enabled": false, + "id": 11, + "template_id": "2" + }, + { + "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "from api 1", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 6, + "template_id": "2" + }, + { + "cron": "*/5 * * * * (m/h/d/dM/MY)", + "total_run_count": 0, + "name": "定时", + "creator": "admin", + "last_run_at": "", + "enabled": false, + "id": 4, + "template_id": "2" + } + ], + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 周期调度表达式 | +| total_run_count | int | 周期任务运行次数 | +| name | string | 周期任务名 | +| creator | string | 创建者 | +| last_run_at | string | 上次运行时间 | +| enabled | bool | 是否激活 | +| id | int | 周期任务ID | +| template_id | string | 用于创建该任务的模板ID | diff --git a/docs/apidoc/zh_hans/get_task_detail.md b/docs/apidoc/zh_hans/get_task_detail.md new file mode 100644 index 0000000000..099618b8e4 --- /dev/null +++ b/docs/apidoc/zh_hans/get_task_detail.md @@ -0,0 +1,338 @@ +### 功能描述 + +查询任务执行详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10" +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "creator": "admin", + "outputs": [ + { + "value": "1", + "key": "${job_script_type}", + "name": "脚本类型" + }, + { + "value": "127.0.0.1", + "key": "${IP}", + "name": "IP" + }, + { + "value": "0", + "key": "${EXIT}", + "name": "EXIT" + } + ], + "start_time": "2019-01-17 04:13:08", + "business_id": 2, + "create_time": "2019-01-17 04:13:03", + "business_name": "蓝鲸", + "id": 10, + "constants": { + "${IP}": { + "source_tag": "var_ip_picker.ip_picker", + "source_info": {}, + "name": "IP", + "index": 2, + "custom_type": "ip", + "value": { + "var_ip_custom_value": "127.0.0.1", + "var_ip_method": "custom", + "var_ip_tree": [] + }, + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${IP}", + "desc": "", + "validation": "", + "is_meta": false + }, + "${job_script_type}": { + "source_tag": "job_fast_execute_script.job_script_type", + "source_info": { + "node554316ea019a341f8c28cc6a7da9": [ + "job_script_type" + ] + }, + "name": "脚本类型", + "index": 0, + "custom_type": "", + "value": "1", + "show_type": "show", + "source_type": "component_inputs", + "key": "${job_script_type}", + "validation": "", + "desc": "" + }, + "${EXIT}": { + "source_tag": "", + "source_info": {}, + "name": "EXIT", + "index": 1, + "custom_type": "input", + "value": "0", + "show_type": "show", + "source_type": "custom", + "validator": [], + "key": "${EXIT}", + "validation": "^.+$", + "desc": "" + } + }, + "create_method": "app", + "elapsed_time": 7, + "ex_data": "", + "instance_name": "job输出变量测试_20190117121300", + "end_time": "2019-01-17 04:13:15", + "executor": "admin", + "template_id": "266", + "task_url": "http://bk_sops_host/taskflow/execute/3/?instance_id=15364", + "pipeline_tree": { + "activities": { + "node9b5ae13799d63e179f0ce3088b62": { + "outgoing": "line27bc7b4ccbcf37ddb9d1f6572a04", + "incoming": "line490caa49d2a03e64829693281032", + "name": "timing", + "error_ignorable": false, + "component": { + "code": "sleep_timer", + "data": { + "bk_timing": { + "hook": false, + "value": "2" + } + } + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": false, + "id": "node9b5ae13799d63e179f0ce3088b62", + "loop": null + }, + "node880ded556c6c3c269be3cedc64b6": { + "outgoing": "line490caa49d2a03e64829693281032", + "incoming": "lineb83161d6e0593ad68d9ec73a961b", + "name": "暂停", + "error_ignorable": false, + "component": { + "code": "pause_node", + "data": {} + }, + "stage_name": "步骤1", + "can_retry": true, + "isSkipped": true, + "type": "ServiceActivity", + "optional": true, + "id": "node880ded556c6c3c269be3cedc64b6", + "loop": null + } + }, + "end_event": { + "type": "EmptyEndEvent", + "outgoing": "", + "incoming": "line27bc7b4ccbcf37ddb9d1f6572a04", + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "name": "" + }, + "outputs": [], + "flows": { + "line490caa49d2a03e64829693281032": { + "is_default": false, + "source": "node880ded556c6c3c269be3cedc64b6", + "id": "line490caa49d2a03e64829693281032", + "target": "node9b5ae13799d63e179f0ce3088b62" + }, + "lineb83161d6e0593ad68d9ec73a961b": { + "is_default": false, + "source": "noded383bc1d7387391f889c6bab18b8", + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": "node880ded556c6c3c269be3cedc64b6" + }, + "line27bc7b4ccbcf37ddb9d1f6572a04": { + "is_default": false, + "source": "node9b5ae13799d63e179f0ce3088b62", + "id": "line27bc7b4ccbcf37ddb9d1f6572a04", + "target": "node5c48f37aa9f0351e8b43ab6a2295" + } + }, + "gateways": {}, + "line": [ + { + "source": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Right" + }, + "target": { + "id": "node5c48f37aa9f0351e8b43ab6a2295", + "arrow": "Left" + }, + "id": "line27bc7b4ccbcf37ddb9d1f6572a04" + }, + { + "source": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Right" + }, + "target": { + "id": "node9b5ae13799d63e179f0ce3088b62", + "arrow": "Left" + }, + "id": "line490caa49d2a03e64829693281032" + }, + { + "source": { + "id": "noded383bc1d7387391f889c6bab18b8", + "arrow": "Right" + }, + "id": "lineb83161d6e0593ad68d9ec73a961b", + "target": { + "id": "node880ded556c6c3c269be3cedc64b6", + "arrow": "Left" + } + } + ], + "start_event": { + "type": "EmptyStartEvent", + "outgoing": "lineb83161d6e0593ad68d9ec73a961b", + "incoming": "", + "id": "noded383bc1d7387391f889c6bab18b8", + "name": "" + }, + "id": "node7ef6970d06ad3bc092594cb5ec5f", + "constants": {}, + "location": [ + { + "stage_name": "步骤1", + "name": "暂停", + "y": 135, + "x": 300, + "type": "tasknode", + "id": "node880ded556c6c3c269be3cedc64b6" + }, + { + "y": 150, + "x": 1000, + "type": "endpoint", + "id": "node5c48f37aa9f0351e8b43ab6a2295" + }, + { + "stage_name": "步骤1", + "name": "timing", + "y": 135, + "x": 595, + "type": "tasknode", + "id": "node9b5ae13799d63e179f0ce3088b62" + }, + { + "y": 150, + "x": 80, + "type": "startpoint", + "id": "noded383bc1d7387391f889c6bab18b8" + } + ] + } + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| result | bool | true/false 查询成功与否 | +| data | dict | result=true 时返回数据,详细信息见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| id | int | 任务 ID,即 task_id | +| name | string | 任务名称 | +| business_id | int | 所属业务 ID | +| business_name | string | 所属业务名称 | +| template_id | int | 创建任务所用的流程模板 ID | +| create_time | string | 任务创建时间 | +| create_method | string | 任务创建方式 | +| start_time | string | 任务执行时间 | +| finish_time | string | 任务完成时间 | +| elapsed_time | int | 任务执行耗时(秒) | +| creator | string | 任务创建人 | +| executor | string | 任务执行人 | +| constants | dict | 输入的全局变量,详情见下面说明 | +| outputs | list | 任务输出参数,详情见下面说明 | +| task_url | str | 任务实例链接 | +| pipeline_tree | dict | 任务实例树 | + +#### data.constants.KEY + +全局变量 KEY,${key} 格式 + + +#### data.constants.VALUE +| 字段 | 类型 | 描述 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | + + +#### data.outputs[] +| 字段 | 类型 | 描述 | +| ------------ | ---------- | ------------------------------ | +| name | string | 输出参数名称 | +| value | string、int、bool、dict、list | 输出参数值 | +| key | string | 输出参数 KEY | +| preset | bool | 是否是标准插件定义中预设输出变量 | + +#### data.pipeline_tree + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| start_event | dict | 开始节点信息 | +| end_event | dict | 结束节点信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | +| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | +| flows | dict | 顺序流(节点连线)信息 | +| constants | dict | 全局变量信息,详情见下面 | +| outputs | list | 模板输出信息,标记 constants 中的输出字段 | diff --git a/docs/apidoc/zh_hans/get_task_node_detail.md b/docs/apidoc/zh_hans/get_task_node_detail.md new file mode 100644 index 0000000000..28d0bfcc8b --- /dev/null +++ b/docs/apidoc/zh_hans/get_task_node_detail.md @@ -0,0 +1,138 @@ +### 功能描述 + +查询任务节点执行详情 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | +| node_id | string | 是 | 节点 ID | +| component_code| string | 否 | 标准插件编码,请求标准插件执行详情必填 | +| subprocess_stack| string | 否 | 子流程堆栈,json 格式的列表 | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd" + "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", + "component_code": "job_fast_execute_script", +} +``` + +### 返回结果示例 + +``` +{ + "message": "", + "data": { + "inputs": { + "job_account": "root", + "job_script_timeout": "", + "job_script_source": "manual", + "job_script_list_public": "", + "job_content": "echo 0\nexit 0", + "job_script_type": "1", + "job_script_param": "", + "job_script_list_general": "", + "job_ip_list": "127.0.0.1" + }, + "retry": 0, + "name": "", + "finish_time": "2019-01-17 22:02:46 +0800", + "skip": false, + "start_time": "2019-01-17 22:02:37 +0800", + "children": {}, + "histories": [], + "ex_data": null, + "elapsed_time": 9, + "outputs": [ + { + "value": 407584, + "name": "JOB任务ID", + "key": "job_inst_id" + }, + { + "value": "", + "name": "JOB任务链接", + "key": "job_inst_url" + }, + { + "value": true, + "name": "执行结果", + "key": "_result" + } + ], + "state": "FINISHED", + "version": "23ac8c29f62b3337aafcf1f538d277f8", + "error_ignorable": false, + "id": "node0df0431f8f553925af01a94854bd", + "loop": 1 + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| result | bool | true/false 查询成功与否 | +| data | dict | result=true 时返回数据,详细信息见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 字段 | 类型 | 描述 | +|-----------|----------|-----------| +| id | string | 节点 ID | +| start_time | string | 最后一次执行开始时间 | +| finish_time | string | 最后一次执行结束时间 | +| elapsed_time | int | 最后一次执行耗时,单位秒 | +| state | string | 最后一次执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | +| skip | bool | 是否手动跳过 | +| retry | int | 重试次数 | +| inputs | dict | 输入参数,key:value格式 | +| outputs | list | 输出参数,详情见下面说明 | +| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | +| histories | list | 重试记录详情,详情见下面说明 | + +#### outputs[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| name | string | 输出字段 | +| value | string、int、bool、dict、list | 输出参数值 | +| key | string | 输出参数 KEY | +| preset | bool | 是否是标准插件定义中预设输出变量 | + + +#### histories[] +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| start_time | string | 执行开始时间 | +| finish_time | string | 执行结束时间 | +| elapsed_time | int | 执行耗时 | +| state | string | 执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | +| skip | bool | 是否手动跳过 | +| retry | int | 重试次数 | +| histories | list | 重试记录详情,详情见下面说明 | +| inputs | dict | 输入参数,key:value格式 | +| outputs | dict | 输出参数,key:value格式 | +| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | diff --git a/docs/apidoc/zh_hans/get_task_status.md b/docs/apidoc/zh_hans/get_task_status.md index 01895a96c4..283b18ed81 100644 --- a/docs/apidoc/zh_hans/get_task_status.md +++ b/docs/apidoc/zh_hans/get_task_status.md @@ -21,7 +21,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": { @@ -95,6 +95,7 @@ | start_time | string | 任务或节点执行开始时间 | | finish_time | string | 任务或节点执行结束时间 | | children | dict | 任务节点执行详情,详细信息见下面说明 | +| name | string | 节点名称 | #### data.state @@ -108,7 +109,7 @@ | FINISHED | 已完成 | #### data.children.KEY -任务节点 执行态ID +任务节点执行态ID #### data.children.VALUE 同 data 格式 diff --git a/docs/apidoc/zh_hans/get_template_info.md b/docs/apidoc/zh_hans/get_template_info.md index 49e6d38cfa..71b84be657 100644 --- a/docs/apidoc/zh_hans/get_template_info.md +++ b/docs/apidoc/zh_hans/get_template_info.md @@ -18,22 +18,24 @@ |---------------|------------|--------|---------------| | bk_biz_id | string | 是 | 模板所属业务ID | | template_id | string | 是 | 模板ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", "bk_biz_id": "1", - "template_id": "30" + "template_id": "30", + "template_source": "business", } ``` ### 返回结果示例 -```python +``` { "result": true, "data": { @@ -224,7 +226,7 @@ |-----------|----------|-----------| | start_event | dict | 开始节点信息 | | end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(原子和子流程)信息 | +| activities | dict | 任务节点(标准插件和子流程)信息 | | gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | | flows | dict | 顺序流(节点连线)信息 | | constants | dict | 全局变量信息,详情见下面 | @@ -242,7 +244,7 @@ | name | string | 变量名字 | | index | int | 变量在模板中的显示顺序 | | desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从原子输入参数勾选,component_outputs:从原子输出结果中勾选 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | | custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs或component_outputs 时有效,变量的来源原子 | +| source_tag | string | source_type=component_inputs或component_outputs 时有效,变量的来源标准插件 | | source_info | dict | source_type=component_inputs或component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/get_template_list.md b/docs/apidoc/zh_hans/get_template_list.md index 88285d37ac..f7f72d4d8b 100644 --- a/docs/apidoc/zh_hans/get_template_list.md +++ b/docs/apidoc/zh_hans/get_template_list.md @@ -17,21 +17,23 @@ | 字段 | 类型 | 必选 | 描述 | |---------------|------------|--------|-------------------| | bk_biz_id | string | 是 | 模板所属业务ID | +| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", "bk_token": "xxx", - "bk_biz_id": "2" + "bk_biz_id": "2", + "template_source": "business", } ``` ### 返回结果示例 -```python +``` { "result": true, "data": [ diff --git a/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md b/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md new file mode 100644 index 0000000000..f530435751 --- /dev/null +++ b/docs/apidoc/zh_hans/modify_constants_for_periodic_task.md @@ -0,0 +1,93 @@ +### 功能描述 + +修改周期任务的全局参数 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | +| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | + +#### constants.KEY + +变量 KEY,${key} 格式 + +#### constants.VALUE + +变量值 + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "constants": {"${bk_timing}": "100"}, +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "${bk_timing}": { + "source_tag": "sleep_timer.bk_timing", + "source_info": { + "node76393dcfedcf73dbc726f1c4786d": [ + "bk_timing" + ] + }, + "name": "定时时间", + "custom_type": "", + "index": 0, + "value": "15", + "show_type": "show", + "source_type": "component_inputs", + "key": "${bk_timing}", + "validation": "", + "desc": "" + } + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data.KEY +全局变量 KEY,${key} 格式 + +#### data.VALUE + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| key | string | 同 KEY | +| name | string | 变量名字 | +| index | int | 变量在模板中的显示顺序 | +| desc | string | 变量说明 | +| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | +| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| +| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | +| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | diff --git a/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md b/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md new file mode 100644 index 0000000000..eebb2ed5be --- /dev/null +++ b/docs/apidoc/zh_hans/modify_cron_for_periodic_task.md @@ -0,0 +1,69 @@ +### 功能描述 + +修改周期任务的调度策略 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 模板所属业务ID | +| cron | dict | 否 | 调度策略对象 | + +#### cron + + | 参数名称 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| minute | string | 否 | 分,默认为 * | +| hour | string | 否 | 时,默认为 * | +| day_of_week | string | 否 | 一周内的某些天,默认为 * | +| day_of_month | string | 否 | 一个月中的某些天,默认为 * | +| month_of_year | string | 否 | 一年中的某些月份,默认为 * | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "cron": "*/1 15 * * * (m/h/d/dM/MY)" + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| cron | string | 调度策略表达式 | diff --git a/docs/apidoc/zh_hans/node_callback.md b/docs/apidoc/zh_hans/node_callback.md new file mode 100644 index 0000000000..e494e7d2f3 --- /dev/null +++ b/docs/apidoc/zh_hans/node_callback.md @@ -0,0 +1,55 @@ +### 功能描述 + +回调指定的节点 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 参数类型 | 必须 | 参数说明 | +| ------------ | ------------ | ------ | ---------------- | +| bk_biz_id | string | 是 | 所属业务ID | +| task_id | string | 是 | 任务ID | +| node_id | string | 是 | 节点 ID | +| callback_data | dict | 否 | 回调数据 | | + +### 请求参数示例 + +``` +import requests +kwargs = { + "app_code": "app_code", + "app_secret": "app_secret", + "access_token": "access_token", + "bk_biz_id": "2", + "task_id": "10", + "node_id": "node0df0431f8f553925af01a94854bd", + "callback_data": {"data": "data"}, +} +response = requests.get("http://{stageVariables.domain}/apigw/node_callback/10/2/", kwargs) +result = response.json() +``` + +### 返回结果示例 + +``` +{ + "message": "success", + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 成功与否 | +| message | string | result=false 时错误信息 | diff --git a/docs/apidoc/zh_hans/operate_task.md b/docs/apidoc/zh_hans/operate_task.md index 16ef1360fe..b928479624 100644 --- a/docs/apidoc/zh_hans/operate_task.md +++ b/docs/apidoc/zh_hans/operate_task.md @@ -31,7 +31,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -44,7 +44,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": {} diff --git a/docs/apidoc/zh_hans/query_task_count.md b/docs/apidoc/zh_hans/query_task_count.md index 15ea07e8a2..2050e3bf02 100644 --- a/docs/apidoc/zh_hans/query_task_count.md +++ b/docs/apidoc/zh_hans/query_task_count.md @@ -89,7 +89,7 @@ | total | int | 按照过滤条件获取的任务总数 | | groups | list | 按照过滤条件分类分类统计详情 | -#### data.groups +#### data.groups[] | 字段 | 类型 | 描述 | |-----------|----------|-----------| | code | string | 分类统计类型编码 | diff --git a/docs/apidoc/zh_hans/set_periodic_task_enabled.md b/docs/apidoc/zh_hans/set_periodic_task_enabled.md new file mode 100644 index 0000000000..c36c975026 --- /dev/null +++ b/docs/apidoc/zh_hans/set_periodic_task_enabled.md @@ -0,0 +1,59 @@ +### 功能描述 + +设置某个周期任务是否激活 + +### 请求参数 + +#### 通用参数 +| 字段 | 类型 | 必选 | 描述 | +|-----------------|-------------|---------|------------------| +| bk_app_code | string | 是 | 应用ID | +| bk_app_secret | string | 是 | 安全密钥(应用 TOKEN),可以通过 蓝鲸智云开发者中心 -> 点击应用ID -> 基本信息 获取 | +| bk_token | string | 否 | 当前用户登录态,bk_token与bk_username必须一个有效,bk_token可以通过Cookie获取 | +| bk_username | string | 否 | 当前用户用户名,应用免登录态验证白名单中的应用,用此字段指定当前用户 | + +#### 接口参数 + +| 字段 | 类型 | 必选 | 描述 | +|---------------|------------|--------|------------------| +| task_id | string | 是 | 周期任务ID | +| bk_biz_id | string | 是 | 任务所属业务ID | +| enabled | bool | 否 | 该周期任务是否激活,不传则为 false | + +### 请求参数示例 + +``` +{ + "bk_app_code": "esb_test", + "bk_app_secret": "xxx", + "bk_token": "xxx", + "bk_biz_id": "2", + "task_id": "8", + "enabled": false +} +``` + +### 返回结果示例 + +``` +{ + "data": { + "enabled": false + }, + "result": true +} +``` + +### 返回结果参数说明 + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| result | bool | true/false 操作是否成功 | +| data | dict | result=true 时成功数据,详细信息请见下面说明 | +| message | string | result=false 时错误信息 | + +#### data + +| 名称 | 类型 | 说明 | +| ------------ | ---------- | ------------------------------ | +| enabled | bool | 当前周期任务是否已经激活 | diff --git a/docs/apidoc/zh_hans/start_task.md b/docs/apidoc/zh_hans/start_task.md index f2faf83009..90c922f26a 100644 --- a/docs/apidoc/zh_hans/start_task.md +++ b/docs/apidoc/zh_hans/start_task.md @@ -21,7 +21,7 @@ ### 请求参数示例 -```python +``` { "bk_app_code": "esb_test", "bk_app_secret": "xxx", @@ -33,7 +33,7 @@ ### 返回结果示例 -```python +``` { "result": true, "data": {} diff --git a/docs/install/dev_deploy.md b/docs/install/dev_deploy.md index 1988260a45..f956ee9c03 100644 --- a/docs/install/dev_deploy.md +++ b/docs/install/dev_deploy.md @@ -78,13 +78,13 @@ python manage.py createcachetable django_cache ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` @@ -98,8 +98,8 @@ python manage.py collectstatic --noinput 前端资源文件需要单独拷贝收集,执行如下命令 ```bash rm -rf static/dev static/images -mv pipeline/blueflow/static/dev static/ -mv pipeline/blueflow/static/images static/ +mv frontend/desktop/static/dev static/ +mv frontend/desktop/static/images static/ ``` diff --git a/docs/install/dev_web.md b/docs/install/dev_web.md index b43df34125..b0921e2e77 100644 --- a/docs/install/dev_web.md +++ b/docs/install/dev_web.md @@ -4,22 +4,22 @@ 标准运维前端是用 vue 框架开发的,在本地开发时需要先安装 node.js,直接去官网下载软件并安装即可,地址为:https://nodejs.org/en/。 ## 安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装。 +进入 frontend/desktop/,执行以下命令安装。 ```bash npm install ``` ## 修改配置文件 -把 pipeline/blueflow/ 中的所有文件中的 {BK_PAAS_HOST} 换成你部署的蓝鲸社区版地址,如果你的应用 ID 修改过,请把所有文件中的 bk_sops 改成你的新应用 ID。 +把 frontend/desktop/ 中的所有文件中的 {BK_PAAS_HOST} 换成你部署的蓝鲸社区版地址,如果你的应用 ID 修改过,请把所有文件中的 bk_sops 改成你的新应用 ID。 ## 启动前端工程 -进入 bk_sops/src/pipeline/blueflow/,执行以下命令运行前端工程。默认启动的是 9000 端口,然后通过 http://dev.{BK_PAAS_HOST}:9000/ 访问前端应用,此时后端请求会自动转发到你启动的 django 工程,即 8000 端口。 +进入 bk_sops/src/frontend/desktop/,执行以下命令运行前端工程。默认启动的是 9000 端口,然后通过 http://dev.{BK_PAAS_HOST}:9000/ 访问前端应用,此时后端请求会自动转发到你启动的 django 工程,即 8000 端口。 ```bash npm run dev ``` ## 开发后打包 -前端开发完成后,正式发布前需要先打包。还是在 pipeline/blueflow/ 目录下,执行如下命令打包,会自动在当前目录下生成 static/dist/ 目录,即打包好的前端资源。 +前端开发完成后,正式发布前需要先打包。还是在 frontend/desktop/ 目录下,执行如下命令打包,会自动在当前目录下生成 static/dist/ 目录,即打包好的前端资源。 ```bash npm run build -- --SITE_URL="/o/bk_sops" --STATIC_ENV="open/prod" @@ -29,6 +29,6 @@ npm run build -- --SITE_URL="/o/bk_sops" --STATIC_ENV="open/prod" 前端打包后,需要在工程目录下运行如下命令收集静态资源到 static 下。 ```bash rm -rf static/open static/images -mv pipeline/blueflow/static/open static/ -mv pipeline/blueflow/static/images static/ +mv frontend/desktop/static/open static/ +mv frontend/desktop/static/images static/ ``` \ No newline at end of file diff --git a/docs/install/source_code_deploy.md b/docs/install/source_code_deploy.md index 642c80e5d4..273cef4356 100644 --- a/docs/install/source_code_deploy.md +++ b/docs/install/source_code_deploy.md @@ -6,13 +6,13 @@ ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` @@ -33,7 +33,7 @@ python manage.py collectstatic --noinput ## 开通 API 白名单 -手动在你部署的蓝鲸社区版的中控机执行如下命令,开通标准运维访问蓝鲸PaaS平台API网关的白名单,以便标准运维原子可以正常调用 API。 +手动在你部署的蓝鲸社区版的中控机执行如下命令,开通标准运维访问蓝鲸PaaS平台API网关的白名单,以便标准插件可以正常调用 API。 ```bash source /data/install/utils.fc add_app_token bk-sops-ce "$(_app_token bk-sops-ce)" "标准运维定制版" @@ -72,7 +72,7 @@ add_app_token bk-sops-ce "$(_app_token bk-sops-ce)" "标准运维定制版" 按照前面的步骤操作后,你已经在蓝鲸社区版 PaaS 上创建了一个标准运维的定制版本,如果功能测试正常(请主要测试流程模板创建、任务执行、任务操作等核心功能),那么你可以选择下架官方标准运维应用,并用定制版本替换。 1) 如果需要保留官方标准运维应用的所有数据,你需要修改数据库配置 -获取你部署的蓝鲸社区版平台的数据库账号密码,以及官方标准运维应用的数据库名,默认测试环境是 bk_sops_bkt,正式环境是 bk_sops。修改代码的 conf/settings_testing.py 和 conf/settings_production.py,分别修改为上面获取的官方标准运维应用的数据库信息。 +获取你部署的蓝鲸社区版平台的数据库账号密码,以及官方标准运维应用的数据库名,默认测试环境是 bk_sops_bkt,正式环境是 bk_sops。修改代码的 config/stag.py 和 config/prod.py,分别修改为上面获取的官方标准运维应用的数据库信息。 ```python DATABASES = { 'default': { diff --git a/docs/install/upload_pack_deploy.md b/docs/install/upload_pack_deploy.md index d931dd3983..79cdfca90a 100644 --- a/docs/install/upload_pack_deploy.md +++ b/docs/install/upload_pack_deploy.md @@ -10,13 +10,13 @@ ## 打包并收集前端静态资源 1)安装依赖包 -进入 pipeline/blueflow/,执行以下命令安装 +进入 frontend/desktop/,执行以下命令安装 ```bash npm install ``` 2)本地打包 -在 pipeline/blueflow/ 目录下,继续执行以下命令打包前端静态资源 +在 frontend/desktop/ 目录下,继续执行以下命令打包前端静态资源 ```bash npm run build -- --STATIC_ENV=dev ``` diff --git a/docs/overview/architecture.md b/docs/overview/architecture.md index 4d95b1396a..968ad8141a 100644 --- a/docs/overview/architecture.md +++ b/docs/overview/architecture.md @@ -5,10 +5,10 @@ 这是标准运维的逻辑架构图,可以分为四层: - API 网关层 -主要负责通过API网关和第三方平台进行交互,标准运维原子的实际执行就是通过这一层把请求分发给依赖的系统。 +主要负责通过API网关和第三方平台进行交互,标准运维插件的实际执行就是通过这一层把请求分发给依赖的系统。 - 流程引擎层 -负责解析上层的任务实例,映射节点原子对应的服务,并通过底层的蓝鲸API网关调用其他系统的API(如配置平台的创建集群,作业平台的快速执行脚本等),流程引擎还包括了具体的任务执行引擎和流程控制、上下文管理等模块。 +负责解析上层的任务实例,映射节点插件对应的服务,并通过底层的蓝鲸API网关调用其他系统的API(如配置平台的创建集群,作业平台的快速执行脚本等),流程引擎还包括了具体的任务执行引擎和流程控制、上下文管理等模块。 - 任务管理层 -主要对应标准运维的任务编排和任务控制功能,任务编排包含基础单元原子框架和原子展示层,任务控制包括创建任务实例的模板校验和参数校验,以及任务实例执行时给用户提供的操作接口如暂停、继续、撤销任务等。 +主要对应标准运维的任务编排和任务控制功能,任务编排包含基础单元插件框架和插件展示层,任务控制包括创建任务实例的模板校验和参数校验,以及任务实例执行时给用户提供的操作接口如暂停、继续、撤销任务等。 - 接入层 包含权限控制、API接口和数据统计等。 \ No newline at end of file diff --git a/docs/overview/code_structure.md b/docs/overview/code_structure.md index 0e99f7b5d7..c915c049af 100644 --- a/docs/overview/code_structure.md +++ b/docs/overview/code_structure.md @@ -6,21 +6,15 @@ - framework - 蓝鲸基于 django 框架的二次封装架构,主要提供 saas 运营在蓝鲸 paas 上的基础配置和服务。 + 蓝鲸基于 django 框架的二次封装架构,主要提供 SaaS 运营在蓝鲸 PaaS 上的基础配置和服务。 - conf:工程各部署环境配置,如本地环境、测试环境、正式环境。 + config:工程各部署环境配置,如本地环境、测试环境、正式环境,以及路由配置。 - common:主要是一些公共函数。 + blueapps:新版开发框架核心模块,包括蓝鲸统一登录、鉴权、中间件和公共函数。 - blueapps:也是一些公共函数,单独作为一个模块主要是为了向后兼容新版开发框架。 + packages:蓝鲸 API Gateway SDK,包括配置平台、作业平台等提供的API。 - bk_api:蓝鲸 paas 提供的 API。 - - blueking:蓝鲸 API Gateway SDK,包括配置平台、作业平台等提供的API。 - - account:蓝鲸统一登录和鉴权。 - -- pipeline +- pipeline、pipeline_web、pipeline_plugins 自研的流程引擎框架,主要包含任务流程编排页面和任务流程执行服务。 @@ -38,11 +32,15 @@ validators:数据校验,如环状结构检测和数据合法性校验。 - components:原子框架和原子定义。 + component_framework:插件框架和插件定义。 variables:全局变量定义。 contrib:扩展功能,如数据统计和前端 API。 + + pipeline_web:前端数据适配层,支持前端画布生成的流程数据。 + + pipeline_plugins:标准运维官方插件库和全局自定义变量。 - gcloud @@ -68,9 +66,9 @@ 前端资源,包括 webpack 配置和静态资源。 - pipeline.blueflow:主要包括流程编排 pipeline/blueflow 模块,该模块是基于 vue 实现的。 + frontend:主要包括流程编排 desktop 模块,该模块是基于 vue 实现的。 - static:原子 components 和变量 variables 的前端定义文件,都放在各自模块的 static 目录下。 + static:插件 components 和变量 variables 的前端定义文件,都放在各自模块的 static 目录下。 templates:包含首页和 django admin 需要的页面。 diff --git a/docs/overview/usecase.md b/docs/overview/usecase.md index 07f23293ca..6ec76f1ccd 100644 --- a/docs/overview/usecase.md +++ b/docs/overview/usecase.md @@ -1,4 +1,4 @@ # 使用场景 -标准运维主要用于运维场景,如业务发布、变更、开区、扩缩容、故障处理等执行类操作;通过接入自定义原子,对接企业内其他系统,如单据系统、 +标准运维主要用于运维场景,如业务发布、变更、开区、扩缩容、故障处理等执行类操作;通过接入自定义插件,对接企业内其他系统,如单据系统、 版本管理系统等,也能应用到监控告警、配置管理、开发工具、企业IT、办公应用等场景。 \ No newline at end of file diff --git a/docs/release.md b/docs/release.md index 702d25099c..6faae2e14c 100644 --- a/docs/release.md +++ b/docs/release.md @@ -259,4 +259,23 @@ - 修复用户在没登录过标准运维的情况下无法调用 API 接口的问题 # 3.3.9 -# todo +- bug fix + - 修复周期任务在固定月份和日期时 beat 进程退出的问题 + - 修复任务节点失败后重试时如果参数填写出错,会导致无法通过修改参数再次重试的问题 + - 修复职能化认领页面点击认领按钮页面会重新刷新的问题 + - 修复任务节点执行时间超过一天后耗时计算不正确的问题 + +# 3.3.10 +- bug fix + - 修复获取任务流程状态接口 API 返回的节点名与实际节点名不符的问题 + +# 3.3.11 +- bug fix + - 修复在 API 中调用 ESB 获取用户信息异常的问题 + +# 3.3.12 +- bug fix + - 修复在 get_task_status API 返回的 elapsed_time 为 Float 的问题 + +# 3.3.13 +- todo \ No newline at end of file diff --git a/docs/resource/img/code_structure.png b/docs/resource/img/code_structure.png index 41583be737d0e3642cf5a0952489f965ed857043..cb91be68ccaa7fa97aade9a048d174ca57aee5c4 100644 GIT binary patch literal 892655 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 z zRVpIy#-GTH)H=}%jh}SUHQGiIXa4!6BE_L7T;xvyN**tsu8QoLb_w(E+Ok;kFZfNB ziu}D^q5e%~e`w(N^2J(-mrkpBS^Z=EZDTn&4l57X8m5W8{g<-+Df(aZpAzV&{&%p# zMuRaAehUYV9}OLxXVV_Vqz$$|;+JwmJFmqH*fy<9i@jqL?n-WdC^*>zc-(GO<^Xk{ zhp>+7U}CP)YhZHAqNBv?HvpT${+LALwY2}^>@OszqCUTW|(*HrOtaU(~PO5C(T#i9@<~U_x_$T>j43X?;cCz+uuuJ0Anv zfEDZb07~b+#PVE@_K$V9FZt63ppSqnoac!g>lWV`P9D;kc|4%q;3~QKQ-FZPi^HlS z<*Obo-Ae9%NkkRHg@0&RC62`}f7pYulLx}c!{0$4;V|ACaJ~~i^umNq6I%uj?z{#o zQt@HO09M+d|IF5LA?!c3RD}FWqlFWb@Ww_19 zAaRsM#(yW+?qJv|EeckVN-47{(eR?Yx=?y`XK;D7II&`ZN~lmgXF<{L3#*XA!Fpl@ zj7zToPgv1l>3Frc8R0h(2q<@#BW12U3>1#}#P4h^7XJmm%HCASbV^5Fh$MEvnIdu##uP4ztL`M|^ zxHjAE(U+^ahj4%HM(7%M;bt%`sdBl$i2oAzjfRJ87 z!h;J7o(N7UNd`~YGXh~U(vR(JrK4(Y7U>H?E^Vrsg-G!$f7Q;bp4~k*oPhC>K{Jt=!~5T zW3&gS4?%V(G?*1I>18#w)c;cdstO}nEED^~4Tv}}JBD*@IwuaGy*p)-Hk`N^#I|Ty zeWx$$(MK?AimRJd-O1=m)PM4&LL6uRI-JBsU#g9X@PLW%Ha>`HK!)riP&Ue?iwmkt zHRR{H23dhns}{d@1tLOjOqrpqQX zhV-oe3b*u@hSyC0Ju2bvQD1;!bYvvlamV+>>|i zXCnWEy+-`B@O$DJ;Ws9F${#HC#s56umsF<0@1ipnJd1}K?P4HH5Mzz6io2!8zl*e@ z(90szKj$>DmpmR5GmQ_g__w&F%)hU$F`DE23j>`k-5J{n1D?p2yl}rZb8)7dYGG+z zqN+BQk0~i&Gp9?sltw7B@!%y|m8e2lQ5Djne&0FR6L85;9f_zX_E8GM<2c&)ffku zV-Ra#)5SQj_yP=Yqq8cbg=b7 z6E9$mwcEq+uE${F2CGSMhJ}?cwV;$gb-aDz!7z%gVn+Ah8Ah{%ZgRXSbL=fEq);TWhz5q1{i=s?-Lz4wNhQ-`^8t7x5MH z2v#kQ9=uBvUjcStVC!W%6K7z1m^lG`j|H=5TDEkj)S{RsZ zqmM9#?T}y}T5Gn2)~1WXz{W?!K7wg?x~?exz2f$7|G9E`nwlYfjdh*4FmbP*F0^(g;@-{T0Y(!a^^&qDsf0_cl{ zA9(BXpCA5-!1{Nl$436g-6h7aVIH#*TgzxZA3eizzGNFu`H6zmU( zSqbuYcKlxWUs(Njx%+)t%b!~!;p^G4L-&~_<_ZOTMaM~;(Zk=@U{-Ve4(t%I8XZ`? z-14yICca2UHyDkaLD+f3o>!w%%j?IdImNEBSr|GC!xOt($M zy3SSk8%UKJ2(LZiVQKU~UGMd!So}IRV9T>MCT2U_`V3!wx45kl&ZFqozkstFT9{;L z!XC6%t(P5Wt~(FkD_{j4zp9m6F8oJwahuojXP;p7BA>a65*xK*rGi zkM9322DY}_q%Lg%`Uu>5uFc6D_7}JXTU4gm+yA2fmHsbK`Ddk9wUu6?M#H@7-?Z_A zHh!qVwv1aG;fr|=z>?zT`km^#nq7$X9PL&MA91wSVFD6;isq^fVPM1g_+SC6ZJ@g` z74k1N`)9J}bs^=i0d1^S96N${hB4R%;&0<@AbkAQIJg=gdttj}oEg}_wo+V`(Bx#e z`UdPH&^B=ERn+51bfr_S*-_$4zWrGo`MZ?-zR>0Gc>TV#@k6^nC|8hU=}fW*ZP*5` zI&W<_&va2mX&muGujZ=Fh&vad&{M9=hdtm2jU8^Wth9`&+(Onrs~uIXAr%XW-}&}? zH~uptqv6bH*j%o@Q>5K^wR+DxXr9aZU!fr6R5oqUaPritFmmRMQuM-Km85et|MrK( zIRA@*f6nC}MJ6F<@;5vd%4;wASDNhdXG-|vV+DGW_Lo_btIB_7_#?*Y;ID`T6$QVS zNrx*%9U@StZr#BhVn2e>)HFM|VEf=U_S;{@WT%na}R z;&>N6<4GhTAHu3xqZYRTSk{X!M;aMOm zZ|>(ye|+)6h)kTs;Xp0_%^q+7jN8ui)W1I|)D6BDK;RsyWXL9qdYZGG#Vs80^`vZ4TpGxkdLC%TM1A9DN1cOum;f*w z$R3#!+1fG&TWfH@Fv1lML<*DeSqFAf{3rvhZo(3LZqp-J5uy6GI2e=LQE00#;ukN# zp*!0uQe}Kig`a1Z=%t!3)^HM?e1O3Q2!kDMY#YKDD-*!&mVZC^qh9gcBst`fI0V^n zaXSK)HSiiPMuMV=%AZ2#po|7;@iiPKZrae-4hLD*Z6n1ozah~V_R!fD2NI|=7_4os z-h?!4w9M7{XZEGt{z5n)-0E9=_u(TP^@359pORRx9vEGhf6NrqAl}nqpryewBOGjp zqCu}SI2#1}|2Me36bHzmryUN;aH3|A6E>I>5?jzUjPwB(_=|Fu z5TUaj*n>6(xiP|RL1bzs_6PZzu(^$4*i#ZMx=A}7kit$254QE`fCxtSTmPA|;vYH5 z6DK-QPUHKZ;OR8Zec;&-#0yN)ye|1qji0hYJF^P5lx+mrs9o_0dp&j%?E~dCQT^}2 z&%KK~9Sq9Q{$emj6F4Yu7W4pkVqGS`atPA|BW(G=It<`qfR=jR!Z}Xv#`6y*6hI+hK~-#pW>KRDmhw$j2Rl|I)dAi~kV)gAPC!WnEqD+S2w zAJQ=`+|>AyhBl60eAE6gPsBr9;sti6jdK|oiJ*wDkN!tDehs*T9}HS197tmh@W$Hs zcH#gA>{0)aK)8UEX{YLckT|BZ{vUFpoLbn9jBb4WLpdGakMyuZ_>h2HO=*7!2lfDh zhfL5`;Uf?AIq_=G2?gn*C??egk^R~h`VTZaP4+9%Zb@$$FQSw*UQFn^nwLP}@StZr z#BjsF2S#W5rvS&V2VKVVPyC3oq%old=<0Eb$Ag~n5W_7SAK>N)Ki~h^uVTNLrP0<( zCF=JPw13z(?KEVGddvwNwJDgWp?qPHVf!%=hWf93staI^eK&4hOA$CmoX@8*4O>C*9No(~p>+FJVVM0Mesn;(nIx7!-Wk-#;yV|EQT{WtKdhqc=K+`A z8H^5H{ep5DJN}S#b$az5gb@auk&X6&ll}PUf}ASc(8_33e`bU2 zpsex!$#>fh-WfRgsCU`*=K^o_E@1kHXXtEm4c-~>u_E=nrFRBVgNqU5tcy&MiVy`x z`Qv6BFp$~6kp(zs3XVaR1W9Z9k5I4w5eo7OiCxVb5#d44fEdH)62AyEDoIrj{FXvE z+1HC)8Zn6LgZ~VId2x0AQ-Cwa0O!Aotohg;Q|5KKM{y$tihlSK)6*SKNA+*9D;Y2*b<|s|*lCju|;f8?^aDB*s_V|H^Ope2EVa~tN zm0v|+x~Oi)^686z_;`rbQDo+9hFK+#tOZjsU zrG-6vSM7On7&&lP2*)18KHm?auZx!*PT;V!d+_cs3d2-&XHc)BQB@tMpF|A|hM^r- z1fBLRZ0qhARrrkg?*)L{}4q*Zo?^d?}rwe}*TUiWW_;gJ`bTD~S zv%mPd>dfA+gwC(mMsc!DYw5Q z)WyW|GZ~Q$5FhEU@o$3cgMV-hJsjM8AqKX0K)1178h#B7(6%uMzzG{pfOI(E*`xmV zD*xe&pRGx=ir_@K_76XE_a`w%i;0dnxslSvWc`-^(6&c~ft^=sV3YF6`R5+|XYT)M z7(4odI7l1i1RPV<|8D#ZY?U!|?zQ?-lV4`$^5<53vIqOWgUJpKYWH9NMKdpvZ#2DS zSXAHl{!dAVfYLCOgmj0 zrzBv487Iw27&&fQ)=wjmT0Fwvy;wxXkldb_s)}QD3Vccao$CE30o9#;7dtv^gvrL$ zZ%5F}Y56)NHu(3&f|z323|J>P@|rGc7Z2x;iXtu{T^JP^5iGHqf3U^^{3d6ch>iEdt-}S4C9HNVLvzgQpV{B)2RTx|$q+a5Ij2xz<5Jh? zH(&DJTbn%SBdH0_aJr?Yqex=ux{CbCRd-@^PA}if@;lNnZ0MiHX;?NbH}~3o4@kI2 zw&Ray!FNw72IHU&1zJxL^y23ICkOD+kuNqF=dE1FYy+6iifPd+y7|<(20Z!7?rveP zTZT(scm0x{!qgI{ua}lzrO2H&%Wi#Tj>2%~~HxGWB zG5APjbk5@LaiGWl&jLU@0u!s3lLs8#TxX$VRvAv{$mET0-)NOU!sjfzy7wmr6z@J3 zQ_63C-xAy%-4WW}RDTb36-z839ii@PaCl91DdcqD7ft&vy4iVBzs`_hjV$3W8FMcE z;F=(}oFC1v#6XdT@yBOw-lD@-(2-o0B_ z4qRRiO1x_(tL8lU1=jJ1D>Q%k7yWw6;pGj%?o5BoD5mHUL32!DG4tjK%w6JnvovzL zR_I)U*Lr1$HU#7d{vNb!#IRUAQsGIK#q6lGQvvfTvRp^xf?UVvi6jX=BE#9(f_ zh-Qdj_JN%#OD*77hTp=LkRZ9jR~kNd>p-N*N{=0~y&E3MS+^5yy(DJ!?CZ!8*n5id z0r$_{Sy$^bYTv>)yZZ<+{DiRRnz)%11>WNsKK@vi(V~>}L{8QC*Mj0`xzn%Yb>rQ(J>h<4>Wn;Kmn~2NXT-`&5L)(H?-}R51 zsC$gSTsM!{ti_Fl)*?ucj%5^_Undv%?}Y5%s<*DR&z9X{tCM%@@r-8QkwnIo!F#FM z>;2%-ym!Us6EK`l-6ILD$SS!Sm9()Mr4Zj+n z-OBYJ*(gSkyk|xu&M1_B4@S2Jo~>gvRTHt7r|%4~!mM7S96qm4Q)2oISbe?7BL;WZ zyOwZ}d-v0-41FR6W3-HP;eSH#afu9atot9}&=TxUhR{7w-_Y80O8P{}9zf}0pZS_6 z(js7kR(vLUl_y(nL2-K_Ryc7vlAnuEK2~HqVIg%CZ8HYjfS4m8o)`Q1_+5UC{TutN z&-UO9?{*gD-^F_gbrtsI3*bBJyWZ&VAGKF@WO7_?Q)|4Oy{nibLk(Uvx=mejTlE=R{$=%WlnPH!d>P5et5k5?qkxs zr)AuBH$s-RJ$iOk!e37W`+IfM zO|i@~dtRf7vSQy&z?t+OnT(|})v$D#N~aF)Xu_|4Nw<2VrnO}rMtdn{{V0^wRp*tB zhXwAR4P*XLy+d%O>g^MxLp8e=74-;EGYaYVsF9hmHTm{_NxOiVb%4|9$MyPgm{)B4 z9NL<)PmlaZTn_;bd|aW*X&#tLUjbJEbp(lQMJ$eREdov(BIxs7=vnYtR+tuyOt>}^ zMFJb(aV=JbXL>QfRb*7cf>IJ!#6u@MB9ep_okhdHWG;hpS0rP4F0kLlhb3n6@b^|9 zc}WE;zf3=$d^oiw9_UY3l4c&vA+NUoBL)m&4BGV&&U08;~{<2VJd6C{>W7&%dv0_3ifwG&KFHmy?TvPWsgklqA zC4jP`fw;H;>mY7zhnNXl_vF3S9f+Mzk(!ZGFl49SzTe%%<3U3%Mjse_oVV+PXK|;C zP>k{0D1h+ts3NrApe*3LY@;QA@l+J5-4AFoK~7?!ePzdbq`EPA$uF1}!*1~176u+C zTPotie!PX#6Go_UoacPI2AI(NcBDZRN47<=BBr78y_@%abn3S z{|lp$uNbD1v!{UOdbXgCJ&!INxDL6VCY}-F3wm{k&8;>a!8YvR72$q!_bza_~vbc%4GC%wYi%=>~?`!W`B4Q}fP9#ON$ zp;Oo|GpfyPo^H_nxl4bNW&mY*&VbsQTz@QoeW>ef*7U3UMeFg!SZ^!@VbejO=pGIm zy`EB{2#5JCwD)2bRk#N}wRCoi+4BxrxqX>QBB8(~P2uSV$-~u5v9i9v^?#_d9*Q7g zCX9Wk?iCJvW21h-{QuYzAO7~I1tiX!xpzt+PSz3H(jI55UAD~Kz3{{{H7!4K_1HB>T*!b2 zY`0v$fHJ@afwTTGlN6vp2?S0=<7USrxHrI<7U4LR(YGMzI45t- z>^5FuIgRkg8FMMi`woW28YYUwuLo@C3K%?ryS0);tkcmx;}4o)d-5>W0UK>)TKysQ zPsqrBAPI+)EG6W&q$D;Z2UBVlq;|(3ec$jO4*g=1i^|ZPJ8ZIlfKZE;!i_MMc2TDG z|DN}}P}Dp9U@qoyckdwG@Xv2yh3END|E~wD-e^)pU)8hesjZ4GY#yX&`09^%-881) z=SRJBt8dFgX*FHP9$FJ|UAP3`5#IOI3NXR#JD;_ngSgCxHCD!fIImNGttJFhkvo>;J?=uegBP%N~i@4yH#kZi1d z9XJ9wBRKJ?Lso4R>c|-N7~J!j$wXTsT^eo4EWYa8G6r|!kOot((GC70Mg&M*B<(1M zQE#T>WqVTX*&HOn9AC=f3<&Mf5g2b6Q3apXD>gp?Jm^?5W!en6z@U0DG1$G~M) ztAPDr$rAU9y}!_C3C28BlC(CJD67^ zm$>F2{zZm(Th0412JlKd`Q*1xZZmtm@=dK&iXZVv0_InN-CYkZc?23>l+R9sSJqOR2QC8q4>A>22jhQ0u|G!aUh95*kY){n zGgcqJ`8Y%h7tu9BHGM{0Sh_xCcW?%ZCuNNv`sCGQ2{jj0LqZqHQ|y#;Bv5+aGP-mT z4dB%zfgfK{RbvF^b!E=$nOqlgPRP^Gd2*ijQriRW*LMpWH}%6~mwKi8sAxbVd&Sr@ zi~GP`Urd4e0Ax~-);7+5@AmQxz0*)%@C0sa=Z7TXr}-TLP$ z&%tsIk&FSsj-a;*73Z@oXH1~bQ=X_Xb853@pQ#TnySn{g>ieQ^2m@7)cfUQ@ezr=m zwTo0+op&ML9|7^e1zEs6?f4i(RCKk$x$7I>Vs-`c@NC>*F*N!QXf#1GtIE}}h3w;& zzs7y&RS`3{sSdi#b@B>cMGj%~eZh1y` zi#yP5&SP{0*)_`rE{0Lk$2D-8=|PJOlGF__NK#|H)#a^h0+4@wBmZ@xJ2y+S+=wUd z3LI=B2jBjO0eHN2>u^dsl(11m)fM}4C{+?TBY=Ur&IW`c(yeUv&!I5#_L77MD6nO_ zX#rfPhoEDOJLD2CQUBJNP*=>Sgu1~O`n{JJ-Ev*P_0idUZLkF5XW$yOPPQ!le+HIU zi@t8K=ZH-Z%DVL;rm9z{>uBD3TZXZ>1$LQpmH@un#$0Y^&jzKsL`ba^M|RzVUb;EA zEFFL{@T$!PN;v=yTS>T{^K37~c2(^G35gzhPZj0egZ8@}(kKpzr;1(9o~QCB1E)$2 z@F)dn+!64X@^>u6Sj(YuZ*(6Sc#swJ96`{|Q5^J-g9kP8nw|)C;OUw%^?9rOi|-Pk zGJX<^UzGHcDBC!EL@7`cs)AC-Y5WCV5+ohmuzL9{oATkb!Y_IpbE@^h zweiJZt+BcKcx(zF{K@x0tWKX5rLQ|zbwH@Jnbp_;+y(?`J=l#O;EAzb_lOj5D$sIW zzgq3jV3T_0cqqLwNh{waypu3>_N%zBtWDR;A&y#^*idvyZ#wqX)>jAP$3n%TZu8!>-7yGhaPz=lgYN^M>&{k ztFoR2DtW6czI4@3{(&pgyOND|4=TB^o9@XbjUz;0fTDFKgSb8(*Kx?$j<+Qm&pUdP zd;5zjNmZseQ;6)ifTYZ;Diqe_z>M`&#_*;ohe>^;npl-%)``-?-u(W;hrdyUCdIpUeqs`*PhnqOlI-fQBOwkh zo`s>TXH|z_RxgYw=dxr&rBOOM#c2hUaOM@LF9fjRy`17D$davdqF82V7NR@OdwCnn zqctOLz4Bi2;k&og`<9vV*j=xb<)}9aD7WFpSnM`N)AT}}qp)W=hwB=>6qeGTV{gid zvR>3X&P05~)mgR*aj3%aP>V zuGJWIg8{_n#Qy+dJ0{{raWbG}`J(8+{z(38B~lswg#<)3qR0Ao>gD;n37S(shq@m` zaLT{M*C1gz=5W%H0@&x~gj3S#-Mb;E))&R9!t#dq$X{q#bhT35133a{jTw4c)yXP$ zSmE8J+{qng*H!m-8U^hQv$Tl zmTdWfh#jx)ZD!v!dbb{p^glI$ihd`5EE$c+8rNxi=Zztc*DlgpBHV*;R}gOxy5PG) z;lS-NECPf)2a)_o&`3>7=d1nklu6EyCun2uUnFDRZJY<{?`2=;;>(lH(?E#dBcq>) z(OT3{o%Qo$+*wP1d%Awkaeq;+WH6cS^pdh!~o<52y-p^;ZTWRo_Q{}b;;VM%q+UC!C%m7qT%Q;WZ=>6^Yt-Jz} z&Ej1Uhr?@>%+^8e*}p0vc>~J&KK2GyI%W}MtszdLAP5-n+_C-G-YTa58C1CWuOl4&9NC_+?C`NM)&eZM@axr|VBB=gdy-|oh!cf7p~1aaz^a>7 zo4_YdWus+bz6=lr-l|WSvoOCF`2kGAQHWL?-puN_2X*P(O<^kL$r0@ygwXv z?_|@IW;Y|*@Rya0h^hVYq6rSxyPcUD;=St+O3l!J?sVm<{Ze&e#R{=&nRQHR`nqu` zR=6f-E6|+e6Y!zOj+Nf;>DaW+6HfI#9ep=87;?_G2RV^*z!+5`rCk#NW%zs58xX>V z9eTqWpA;>`nw@~$T(~L**-y_`ab0^U{>Ft3aii!T-j*1fHaHBLvf7>$l%Ygqz4@rX zEAiL|8U(J7jMS#|@?5>3iu#{==Wn!Ff#ozB?$c_U<&UzvdEbGjl-*UMY6mBY)Hv18 zT-0{W7eNn+GB6P)nrM;yPD?wRKKWU+va-$$`k)zTB4{A_WcQR-0SEusDYn^-kNZO* zGJd3AeAdD3HKM;SAWUwANmwW^8a4v;5R7iHm!-pP9>_%8Hv+?1@~6;#8O7&=(Tvjx zn#B$QH<8jNqHh@uUJ@p83_AigY6HT!?D7GrPXga&KM?)J5|9eE_2!o5V*;;G*JzbI z-c$Z|=kO@;Na8t{>_@zAOh3ObXFojXn7G|i9?&8*1v2fHPbjV>Zz!1_C}6sZonlQG z9lp1sUX1Pm%e@q8SZe%z-z$XTb7d9x&IlTad|>`fx|;>(Tn)|Thd!u5tL1GQTZF~M zz1Z>|^oV43vsMfTq-Ft#LPp0VKT>;6wm>U}uE`NKGjVP~xBENSj1D@L;6afNW}|O!sB1p1 zN?2o^Tw(f%^e%MWeD@$WORj%XvfXM!VwUjy@A6Q@ruCHo;Y#77$+465uIEg$?|J0@ zm`>^>OOlpZ%HNxUAIaa205c|7eFt6SOxZ8m&gpeqKKU^-Fpx^E`Psq|w6KSNJGOPS zS64sMPLBJtBH&PDtM>AjzftHCp^v7mhi#KYE(?p5|Cpb7e&FW;(1Gi;zdqIehDw9q zt=6&0ZT|Sm+8lMbeK4T&eIOr05TIna2Cxo(J$N9%TQb&eB@VneAV7@ZXl z$7ANEviCT2Vm*_z4=aQ(ri^_U;8?00seMWTK0yM%Zex5Eu$ZXDYVm*fJ|MLG94Bml zIQ$t*?e-UNa7KM=(ZhY9FCJmygZsY`;`eJ&$^&BSIRppL(x7g51z4{KNDlJ7MlVW#2`jbM`N%R z&r{E9?fRAcf6@T`6|ym@uSQhlqxxPMT;x5*>}2s1LV5Yi4|c|;7+)*jghHa#%bL`T zr?t#ie{j-7#TxM3e+R1_BaG()^4Bv92~cXrWH4M$1WF654a_0AIk{u6OvHQf?FB-R zbhx-rooRUNPhP)rT7?i7lmB2UkOJePOcbQ%WqJ5zL|?dU3Oqz%M_IeBj<>npN72n{ zlKA+%%E}=G@`|H64w&$$8pc4$tip-T+L0#$z>Ey;J-3zJBmYZpHmy&{d9*p&wu@+2 zH>>+3`RyyzHk|uJv0rlsRROQ6Wb|Bsf}n}-_73yTD;LB-3- z#-UK9g&I@pHPlT@q;<7<#pWYQHl{_ia2Ml2m__@CfrqPwUB`<)f)iEIW}bs4HHGw+ z5|5hS^{5(6x7}qE(48dK*P%BfAA6r|d=~b)(^~v!8J2TC*BkkiakA&;%QU8)(f3Vm z;Ha$kC#Y2h@rw~4Ico_U1NqAs;aGrbhIW2d8k!KMeCg>uzdB`>jI| z1%k9RcB?+}_-iUG@>kN=Ph{7{7Y=_};DM$QmcO$Y)fUmi=};knXRF+zl- zXXpzGZnnE##=^a0)|}>%-8k4Y-8ct-ryZ|-C`|=jg^QL$1YP15!}M7I&4YpWqES(L z8D&qzb&uEl`)j3`xB6B0`o~0Pq1GPk_AKXRG0kcST10FWpn_6C#X6y5P#8DuUF3(Z zCYT}21^XVuC3u9fo9fns2T*roZ$J3D`=i4+MfXpVJG1!|jl@TtWa7aoH?>WGgZ({0 z=`5V%kLNLP+5835M{6EDGw&KaIS@81)VU{NjkglM6vSv0W|O-2G@G_BRq*}(yH&bi z)ILDT=cW_FEM>BKX2V)NH2PQ;gpQ-wYLA{5(~>7%98tkp&S0A1)WL_EWqW>h%rfg% z-FH3YnGNlxvF;@!4Ur_JgIe7ydvjg!+|j*lQ7Ha+I|e+JyROhBf}rmf`dVPfle6!@ z{TmDt225#*p;<&g;Nf{g8la0e=X+}^jj+T|{zIopRDTB1@0LNI{}>Vq{&sutKG6aG zfFok^89D*1BrAYQt!+U$u-aC#NDbwkg9Q+Jxt3_oJ988{sGLlN=7kqxnq9>TBl=VX zZ(_=j59ml6MX7nhP2=MywYH?``=5LYs<9Up-Y&qFS~qU;I;(7JNgN7<>OH@Om(fY>`9x?@ zS52NG)^avS`D)6k`h01dWuGN@J3O@@`kbuBT`#cm@!xNdq-%^Bma2*Gs*eL*w{z=> z`ET47pFh7a37)4p5bvC3xyG;#ultt!znxNYTOq1pK7Txn*65nw4mCpqZ;q#-$r6}S zA_?psgO;NJb~yf*b4oY&irz?QS4NE4BU%&!IDQ%}W86+hHpe~BexL6Xmui;(gSX5) zL5Q3*opX!MDsLl(*ZtL#VmKrRKMf~zT*bn;(TZZvZvVvsU868sRFHMaBVv9H^9n@# zeo6w=K?mx{mG0yyUj7nqLfUsa?y21DTmQ_-ZSOqoJ-V<_igJ3ZORl376KhR8FbP!5 z!}9y!bgbWN*z4PtnJSEME?avS0+%9c4Nkuhx`Q0S;_?mSY|xtb1lk_=8TXa)6fSYT z0Uo}!7d}hW6rq;(BUA_*pnb>i2vPx5in%3MeKnbHdyRf-`shBH(WtS$=2?@#^k16$ ztXRyzHZ)9;RcMq7on2Hk$fnj-dJmus8hCEFYfT1FQ(H#Y>ORqmJ(*TcyJX4yiFe$u z5jeK_Jr;7t-`6zek_=E^QGvm`V=RTnZLCpGeKEZ1k3Q0vLTw)b7@?q@;#Z>-NghG* z@jz*FXGC8*R*dXV1h?GgxwS{#V|kCupBZy9e@FVdJ_hzhg0D8~0{`7^HjD`w!=KPX zs07=tW<17J3QQun?m|ratq7*7gPa z-vp?NoztuHzpDn)4p49;#9G*{fB$N?tF8a^tSk*yHts)x?A)DXX9Hye^nE)A2a9Ub z@!oYhc{0>Gd3zu6>P?s(N+RusMMS;u#VTwiO=r8=(g^LOjo18mjl&BNxzC?JERca+ zjwqKs>}HoP6|;3HULMlak-Yrk$;lZ!#v^?(IwbDlPcvCWs5=sAy2VXM&wkv@;-nrV zi1$ASa2bvo)VvDO#d>GF1KELG)y{!kDA@>_9j8-o%DCd@1dXYZnvycoY|%xFK#H{! zP;p>+inP1~Rj!TD-F$gffu8zmgSHXVJ4Rmwq6JSNPH2t$+7II^A7RE3IoeiCVntHd zkH%rE$AE1AM^XXV411D6@3?Gtm=Fz`s$Q^|Q(bC$0g51ddAx9B)T3@6ogaiqPUZmL zG=K)^WdXY2`*?R!DY?TD>7;u4u8UNmNbiZIhmvl~Q9YLHNBm)`&yQlxIKUTMXTAXX z-{w?-5(c&_FPTj*!;IQ(L{r`T{m9z!Hyu)T=``HC?Bmim=IQp+Z2j)n*$V6u(mR`b zbLBDdgKX2K z+aR=G>*k1V?`SqjTqle1_RQ$KeM|8WQ1VXayNEdLox>M)^WWpAn=>Eqc6U#=vKe4y zJI_lZTK9bsoe_MA!oJ8!yoNFd{}r$xNx?RPP*SS@CdO8pktA8l!6dK9Ex(YIg3NP^ zi{_~t2A0=%%ujA%%djUY{b5i$dtet4&ifkAULqlbpQ49I^}B4iUc`WCR$jsTbM=<$ zPtTcn@g~^#ae@nfwSld=LU933hKR(w#!vsF&rZIvx!!qK4U`}>F_Bp4Iyk5at&xuq#{iYkQhm^s`7=~^@6aCRgwnPC?;EhJ;3p6HQj#I7d z97Yj**0$57Qt-^Soj@kLTJcYWSJ!0R_#o;uFHh!`-qrzDuXs~rD8LfS9~KN z_unBTy8fg30)}`1@_He19Ui|vrA#qdwHb-1TBsodM_<0Pj3Z*r?NRdWOLily1(3Co zS?<9?2k?hnP@IWV(+A7BAj`X?^j@%?jqt&_vuK61wMWp*Hz~A#jr}=_+ikxFZQom^ z8E>657PdVpvL-sj=QaKU{gw;Ouq87OM812!WN6KlQI_#Y-1j1n9z8p>zOjl!KV4EF zRw%9Bh)-Slo{R@vR(gQ%yz!W(h~F}rLGJe`nSLoxT5;OL!*izDV!CZ6VLH_>EH5DP zns56{(lXVblOW&6e#+ZK-Iuzw3S-?WZ8%gJy<4P?Z??pJZjVVju@S! zlN48VFFKFzCm359GhurAiPoFNcocLoEbCZ;_-XP834J;H*v7vJC_%M^w(@#`BBPkXi(PM4=a*CkIaMZN9Uv<`FE-*%v1w7OosEbn%7ga$zo5V$HAoM{DwGit;JizY0UxDOH`cv zD@pZRg74 z)>q26A_`d>oJHk1Fu4rYe9|a8Gz)?pvjF z%=>d?*_Cnb@1uK?dIM2W&whqSp_=!&3Y>|p)oE|hMP@^q$bT0}GFLWD1VPe zry=4evxt_&U-anE=6}tY%z3N%4F&zaA{}c(`tm8!Le#{yKJJp?+526P!eQDajE2v8 zVklGeS=~nlZr6j>-%Dqeh8LGMPuv$IT#O?v_D>Y=a;y=>+H;8+-X0#pm=<#uXCG%G z^kjnNYjJ8Yr<(BRw8s_N%fbmY_!7~CxpaCxW{4YOydm|XaA$P!hTdx`bqYjGLb`?} z&8y_o*M4Y9)B5~PsodArd>?AA);YgGENb^?0KsklR4`@9Ev=4G79wC1T4ury>pIbSzTn2Auh<_Lw(+ z5lkB`5hEFl1H9wV_C5Z=v=08iRRy#A+tE<=$p&rCIe^l`;CD2M$6(05^7K*B;Lo{G z@_-c`9olx(X^*L(F~mornKF>Q}w1T{g;En4e8ss5z64$m>@3GTm?N66(cz1u= zU||4jT@+Cf_YkO21<{*Q6br9nZMyZuv1PjlKaPzJ1u)FIAB94ExdXq@o^Ta*!Z>jT z-48iV=s-~vv+fMI;Hw$Jux-2+;R+Jk7~X@l;#AS1q&@q1G#J3CcrVn>Iu_@`N${}^ zw}&Hnc%-T$@D}i1f68d6j1w6q5!I}IAHWg`ez}>(;DG;ADp(1BWJ6a`WbK{%$%F2^ z9o@G-1$Z!i)&){pbng))5x``mYa0ql-u=JRm+=wA85x7*MG8GtdY8D@j<#6Nn?V^Y zbMYDcw`ctCM8;?PY8hmTskx$zKtTT@BfjwVt5qs`An_(V%Pm01Z+8+!+RWY92q{iD zXgq@m>KIMsadFtppZFqXvFsPhFNvd3ZM?t`cD_@0&k*q3?a4oMj_Q7%qDc@+-S8>7 z{J7cevox74NZ7OSwppMB7w@zogAwWbX6RDL{9F`*oFtzdd%bjrh!s(*%odG!2UN}TGbF>pBb;%H8R(7n`%EBsvdk1UeQbA--y?n zvRAx^3x25TwQXla8ntZ8V;ghZO`%Tp!&-PV14f)_jQS61R)~ql3Ir1x_aGlwL$h0K z)fXE;o2Fi5@aHnGShk3u^JIeyTJtvjM(F58Jy3!sGK~88*#^x^61dBIlh?p=k~fl% ziOT4ryBCdht3$xBA|mw$*jxt4Yi|P$8B%sR2~pp^*YojSyeDx1KGV5*cwnt04161j zqx+(u`#uvTR(yjhlGfy7iE|p`xrrMhRBz)$kHd{ogul3wyb$y;q!OJ=+toXeJ|Q)k zU@OmQq5|vP`5+q8@HZF1V|lGE7obQ8Q3gMIwXik;3_D7=;ez{G0`XniDx(`t2bUI22y)tEcocdU@4;sx#GSk7{`SnQBi-(XFhhpr!>C8idq88sESgw>4 zUu<%6u75LGVzkgMt(iOcZA{$>&8Dac_9YbD{FpTt(*#IoLo#3wgtobaoD~fl9(4$I zV9uQSe=XNz5ZVkR4wzY**-u-ABOD8q|E=@Ad0^oie-%%cTvxJS)e3IVS8|3*xY zdh}jMAmkf)J~yf(XGZ$-_thu`p4|auPXm=bW!eGWry#((G^4W#{U~BY!zS?s=BL>C z4ADW^+A1g8?s^YsR#2}A+Mha9qUERUcx@gS1#nfoUko`mHMV?h{p)f`-*+u)Ciy84 zfx9UmtZB|*D^a{OZ)LPy8^`{Fz*+r|F3q4z{EizUs&>2fVuX7x0mf*;T=d-Z&EEHm zQv#T9iKaHHvD+Psy8%qe95vC#`hx+boO*8Ed(|yh)|bhQevBe)=SCwp{~3fF7Bhq} zKv@Q^Eh^chYHYp_)mQC^)9oIox2oyu4G zB4;*i^7hwEod|zzN-UB-3Hf<U{OYS3wYc zR+lWEZErkfX|2Ai(N7K$yt%%u8H30NKq4>=GZA?urGX4(=DXqksv5k^T4Z)C^yKw2 zXfbjIRas_u2P#3A=)64y(oj;*bbjfi{iBG&+2T2c94Ri{b3tU!g@yue+}^B#*~mu* z?F`nyqxY)*Xi-~{dAKp-%Nz0g?aCKZS##VH`nHmb@$uoe^Gf!>Dl3tI&7%=ZLEJ4v z%gJ3|F&82jZtd@?rtcfa3P>k;#vlA#eR<(V_)RYhy!A9?=KJ~)Vh$0oLGX55E&ssy z8OiGu%FokJ678pcx}5X&>>$b{rT30}sy=^vE_{7_#@N-bC3Gc;`Xi#On%PO^y;#U9_;z_C$Q;?kORhBL?D-A(Nvs0IzaI?ci$B_B2o26N^=(aQ6iN+ zZ{<529AS;z{b)*FDbBcqH%RW3j9Q}~iv5HEeluh?pYydLOtt#W#42=AAN2gAFb&(R zcU7yd1zA6#u-$+3%;)sP!A}jU!>&ABSbc7v{#kM+ttQh8lrdFmBQX z3Ct7=vqLGStE|F3xn=DV2+~X5t8F|OrNx$8q~cvQ%_lBgrK7(!W{{J5RYzL;N+qvv z(}Fx#=YKmK%#m`LP<9#b^6|Z`XhC$Uh&^Luz73#x&yo7cCgp}Ui3ds1n0fRz^}pUs zX((TRG-mWfBabv*=KU-3OAjsU02J|ekyRZ)eZo||PDX79kg3HLh-R<{F}d5NeycZ@ zNVfVAzg6NWrk<52JQZm#)%=&=ssakWVeOc}&)bUvBDV?Qg8Ul>W*cOyDo%2`2OFP5N(@GNr`#f;c$pK`+mR)JNVshije|a0R|Uvwpae zF#R9&0%d>nY7K1* zZs-84rH8(iw&br3m139B+Xwlh>q`5Jd+Mc=6O;`s=%T_H{>Bu@zjw6F$Q9=rzn*+( z63nHD$i zPeex6)QL#yIw70rn0WmgalgODj*)bWrm?1ej16wbEOgl*=`?^vghpC z+mOyKL3RitDe8NgaXb^Saj8kd1|A9t-yPG-i&&g#vZm-K!o+J1F#DI37heBuVXEHt z@+&z38uw;*pp+MfKt+q`e~;PXzwko44!f-pG+qOb-TTr5XYx3wOnJQ9LYgj!if~cW z@YmBTHCcjURw7>#qc-lLRP}i6*{V~h-T&R_an=8BRGR>xy*cvKKsa~)(+cgE3X_UaLrrmmxMV;@OLhAiTtP?NUWZRfb{y|}=yNB-+ zm5h-ds!AEkKLl6}hDTHEIUk5Nvk{6gt#KU{Vod{{`x&r+K@`_Be1idAUD7<{>&E zoakcOXr8yQt@>OvKQgokygozrdWuROBBo7Y3wd6BjlqJEUo|N&jSJgS09r??0?*gx zs;a6=jZ4JeO228A6IP4<{DI(mMbz;pkKk$mOs!<4E^guB9lZ>1DLJJP=#fSZq<}r2 z1WkadX?xmw;WX0LMu<>E7-hV zY=9D%v2CtqDdT>pil*v}m&x(I;(Z`=$NzY17hB6HSax#jNm;wClFfpVpMd70$bGR- zSUUq;<>yIM0|tJ%TqyiAH2S!cpu@q?N3x^zAC8z(j=~QO0;kvgR0_%*3}#dSWR5O= z@M7;D*Iqm?m%I3SI$e=^++f5YReZ<;z4`}_A5cFkrp?4I7MshozU%xKm}_{mwhy3v z_a<@zBe54g2YxUM{MMP*I4bWjd7I~S@Bs_|2Tky&EUD2Dc?IT-0>j;Qt;h2NTK^c& zKE$J3xRVkih{vb5J{L`N@7Id*RE&cRQZg^7fl8et$TH*(B>U<*>wVmw`h3<`_iF~4 z1KnA)4NPiVcMwt|;>ZObyH>4%&DrkV&9bZ2z&7cwB>M{At^pafoaFxKl9-Y)ZBn_4eSyX%130O?MTJY(|fZD2w;slUBLp57x#hd+pNsM@h2}YaJnAh;wOKpF4+ZU37# zi$N;;5Aazgd~m6nacLV~82mO;#((3wbAL99Ao(-%Y9P&=t-&e%JYKs?p?UWYF!>w9 z(?pEHhMgwmv~|G9E72rT;HOqLg8h})$GvqvuZ>l)aU@W#mF}|vm3bUQGCOR5 z2;3cds44)A!D&A~r)PW;7OxRJj@RFJwQhQK=HPl&sV&lWAok|=;}u9Nex-RFVBCEs zxf`9F8_0EYVCQb^ zmu?$MoXHExeAf-fqHr2$7@xSOuu$JDKG;F3t^s;%9tQ0r_q849@q69nKKLq7Y46V@ zs@Yg(d(IT+V-1XJ&s~Bq_6jC{udcbHcZGKE{?zDa{#qWb<%ru{xztLrA)X$&{eJmM zoi)Bo;fL3*#ycHEV|Bm|rOa-MzTMJHNq&Wa*;iO%yh5-&1&xTGChut^7*Q~uD`A%K z4An}IdfEp%Y7g$zB9}hH`bI`H-5Cos z{X+GqK7%TBUB_OY-TGq0;j?ts#YPTS+G15>)9#2*&6AhlUE+%xL@=^N5YU8sI~sOD z-p;wUAVeK5Vmwtx2W9_01zh0&{y=WaIUlVsBtJs3GrQlO3x$=V1v}~S_90SkL8RH0 zJr)Gx@*Nx3bvW)fP1^TccC90AW>AE2x9eBn{@(B0NT`CfU`e;)vqH9Tq~o;H z47wOy;??>f)xc+Pt~49-Wi(aN6|4h23|F!khT}eZsBs)DzJQ*KuB3_4{%n-8d!qgr@rzb5H@ zU}gNU8Zai{_2*m5$SLfc?4lvPOKau2?b}ehD0;9fwcP&K-jYdw+IXGdo9Q|HC&0jF zavq}ixPFM`cYIbZ{7?GN#RJ42S=eap>x@6lZx7?N%mK_2w?m8>px&*f@WN4e4bYbS`Z=q}R>60BJ)N3zmcJPcN)5rkWtZggAzNvx=g6!`kiUuK zW|j~WIcmWcYj?iNc&u{1%5Ijc=wu#7#wax$LB^OGyge9yG2BN{G|8~(>$8=wHTvfM zz_}O~gK}V$9KIv_BVsi5fHSwoqQ!`%$4rrl1M2uT_d+TkWPgtFWO59mqN*($8P?GW zi7xsw_28j4VsG=ygQ7R!XtWo>WRaPfCK}iA>dx2mcwk+8=iC+$L2-}Xt-Mb&6P>fR zBr6U68Soc|h-WnOdnPgLpK3~b&66g;;yRMJ?bdh53#>+9_^BgsFQFAh? zB>)-+ensT{m>v*CeHFcmFtG61xhtxc^+G285&9l&9g*~B(i~`a-MPzZsrE-F{sZmi z%ALYm!-n@E9>kv%pgFrJO@cn{aJmfWWYU`ond~D{*|0al&e^JGKuUeU{8MCflbKta zcIl>eo-S}F=Jl6$GIc-q++1e+O02Hn@(W^x0L(d*=OGt#VAr-0a%oQ{X@>d-Lc04O z=~GNwTl!=6+neFEqpp6ok&Nt`=>n;G#(uEi9Afd!4*Khz zH{TNTRx5J6C?Tm4a$&Rdal}nyZ1$n#7eUlHbhmx|HeuC&pII~z({X2w-eI_h0HkGm zX!WhJ*U1h6f=r@u@H*RPk}X=wTT*3_hv-<2QrOsQP7e+MOjPPmVWR2cq!X*i;Qc!XM6jl&Hm$F5e z?QA=kCvRep7=bs&pO=}?p%mJ|w(*rZ&S@==@0Fm6B8mu(*$Vh=?em*eeHPR2Z;Yx< z*kWk~k}POW*e~mQdTsmeuDu2(Yrm|Vwpy%PF1bv0+8xe(w4>>I-nYFKE0p#RJqsS` zSn}Q(E`p|vZ1`TM8jrNEBi;PBK^^K+uhpcYh%9`6UpJ7u4+`gC(_9;6cjNq3w@O zx$mg@Ty*ou0`EOS=9$_4lHJGAjMQ&H*-?-lBbg6MN!V(FrM9EZChOPt^ODB@p9PRi zm7_^aC-q`o6f~uOcCepmaGX(jWqo0wW*|0#ec<-Hjl~AV_yN zLrHg+3`lo3f^>}3P%|*`Tz>ESto8iETC+FOI;dpPl$@fklZ-rGkPT;szNAWfXqC|LarU*a9pEg$-mMh?tgWsUHJKyNF1l zlX;Ac%Be=nl(UIcru<@&(Rd|cv7N>j&$!>HFi zr%hkwm%q+Gc#{hS8zTd#ZI}NO(vw8Qkq+Z8_=;ZI^bei(Z<0K#SAmMDR^IfEx>D`= zVdkSe$^G~bk8xND#HRAgxV6sUan0;&ik97MpRETb$o79N^Txmdb-7zRvRnHZ<%)vf zj&R+UkNt!y@UCYGx-Is|oc_kvWiD_5Z~5BZtqG3g3H_ zovn#h!J>)Hc)NM$N3Kkey!@YAr6P$j$wiIT@mc3kN9#u;|K_Ax%en;^=$yBBV^v3BtAly9cIaf9Nb zXKKm052xfnSptcUw9#9F+B}&glI1hkvTNr%9FJnlQM}Q7@i6HeT=}T;ML7qiYM)>X zX`)d>yd{xOmxvX9U3i!Bec_V!^_q@VXiTnU17%S$Tk>4609MzwOaTKZ>hUxs_*Fk^ zvn##U{iSr{wt3%r3QKWc=I4RpHMF|$99Bp#vI&vx<>UuWF%ILz^v6`1lq~6GCTSDM z&9Af{gg32VPrXj0y#LE!xmv^d@1#khC%U(Nc<=)85EFr<93=ZsnHaH8eNXPt&KwWC zz63=|Y}50tjO?hTpN68&IzFBC-4Wf{%irEgc;Bc>?}SEC>TVn+EpN;6iY*H}l$&1t z`I4{(j33^{-W;VsfyQP5&(=OI;yDy;vH_WZ%t6V*$Zd9ia+v8+`^2fUrzUK(GxaN2 zw(kB~844>)y>B2i{suF`l)|COIvjC2ZH0b1s#bl+f)JJ>5IUMFabC0>;6>+`eK@13 z)@wOpyS_snGhEdyebnakvmN=bZn%&Heg*#fpEvd_JErLyt66)mUiJNMc#A@G`s`=V zXwA{r$Qv}*aPs`+KJ-!a@1_^fO*T`mIWb%1eWd{XiN+5{Gj(;^G|F4bKIWbyXn7WB z_xAc3@4OC|S^N75Dp3wzr{fD<4d#KW=Thnq_G%pv4R&?7JpF$->)s`IioartCz>|p z0i85jx&G1zBIUV@1xMaI!Y`}cTqP-_?wFo8KGSLpP+<-Gx}8Er_ip=7wJOSQkfMWt zxx&$339ShfWWRaSCbghXf;alMdTsUhA)Goa;>E-JSZK(S->kTQGLZ^HV*Qg60U>=$vi z4djk&C8VtK9&4ci@CRj5)vlp;Wv@ZSvXc=eEV$v_^!97d6~CK9L=_0BtJmh2rP8%? z?@EuLMx)Mr@Cj=A3px#3KqKt1io;%+@)B?DNF+mh*TYtepH+i~aN6sdu4^k91JlH^TDz zoK~NbANhxFXsy~baGH)S1JdgsWjF6M5mmA;U^&!3jw;69qX*@v1>^mxcd2s@giE$F z77*Tx?XN`kjlM>!(2+8Nr&_$GLlMHQBR)s127GUtM}lTN8PHpS7F1gtd*vTG6jp3> zp-%-|IgB5s38l9-65Cqng=xL5xACBu$g5Rv{0e_<*x|~Zl3)8&6k7|ZlxX@{*I2Hb z<(Y9cp%9M_|I$ZKW+_j?GI7aU{X~rhk~9;#3z-BK6CP}~pC4v|g&arrd$z4u?9M~Q zKm4irEGS>XY{7Ci#u%oP((%`t(%1>VivM!Y3AQ;`>^7iIoLw$GK3S-uKEY3H?9{IJ zsR_tfGB{I>>#fR);tH@NO%UOacpQhMBB}D+cVx8h59Rw2;;T;M(t;j8WVlUQ(xlDN zx`D4=F+34?oT}6ZjRYU^=!fx@J`>k-o~*Nwn8?Youuh!MaIEQcY{8CRRFz1>y{B+A zthUczC7r|eA=9{>vy@Ae?kY|PL>uwI=rdBR`$S4=7*-0837;hEV10buy+pfkPcInC zu-ZFHr+@eff2f=ZK#ug34=)_=d|Kcqz*PoG%DEI{eGR@l>oJi;&QH2tGLn0Lv1 zOP1K?xmb9@XZmzYLPKcfohdX88IaMyx;I5K|lB1L-gZydbJ5YmDhxzN4$#K3#!I)O+_C47G1;!7or z)>Qjh4k-6|`qAD+$}*<~+`rmqvp?JCh{wrq*?>=c+E8M%$ErQSciL?IH$EbG4I=S% zq0~m*rpD&GQO@APt9_q^p5g1y?3aoRgdHsTFD^S9yFc@-ny)7hV6N79)xJ(8XgU5j z0JUBgZ`PyQjAD8ki2pHkW7>n^1QBF;i0@OHT4%z7Qv$rNF(rzwmRJKe4>;;v5>9 zd_UH%=T{P-Cr`X%YDWB0$7)v+@oUlezCAKea{CPtae1yCbyF9|DJh97i7F7n^OXv4 zF5T7u;Iac|e9{LS0OswUmKBd9H<{QKf)m&0|0bTYy)NGSaBU(TkDaH?SDeD7=iI;SlFz{xm=RX$UV$EFB9@%&w+7pI1kc`=2n zH)cMDXt9Lji0p$;3KbZ9Gt7yFSeu{a(o>9VwsFYsE>k6Zk{NzLU$&vBg@+}sRs*4LGjg4-Mmp8fD*EZ)QsYiO zw^;OsPs#2+SWOLhDg-gt>!*W`NTohF{fztiu?U3Sldmg;DbelNSBnPmYY!VO8v-vjyzSs1xOJ))>xgP6dKd%g_1Hp@rhqn=Yq84lKJO zS|gPoyMuuSPk$C*8M^-P;C38k53Y0^f@;)buguOf7TMZeHm2iG06b$I9lFGDU?UExuTIJPuR+V72k6TV#CA z(tN}D=`hCWaHSmg6-oD(WNcEgXko_An*qJ1fN0vhUY;#R-l(%&niL$nbm=qOo84nc%I`gSYinBvP|Y`}t_~9j68l|GBcTJ6w0JF9%4O8$HSR^6@>3 z3A2=k*j|OfZ1Ai1Cdsvb&4BxRyA*E%TMKX+4u79>V4UuAo)^$U?7Pgba|<`H`JDx6 zk+2r*zy)>1i+PhBTK^!ir~@`v48DRZX8-H@P#j#1Mxhd{P49}iuU-6JU>^E|c^+Cy z_%J`Ng!4myT_p^(e9>e~)WiR+nQor#15D}9MU3uO^z;WXE+n}5pWx=VxCzNU{(YA;>Tb>*~w5Dq!Ms$S7uzqNZA#pH+F!rzoHciwV5s)q&LQWMNP;{azimI zRsf;gQ7VBX_ki8BRmA~6VEt+(E}H`}wOB;$X4T5|dJG@MJ7%-I!2H5xJ4ldTw?XeA z6N;Q4$ImhBezC^ZDu|vG{8W|pv`;6f*JVlnT3gTuRY$y)2hsB0;_veNU^J<#O zjJFq-5`MxXJ(mVay#9V<7oKp|Ajk8VpG|J)l3i3|o1BCxeBPf}mB?JS3SGED`DyBd z-+vj%3^|GlPFh*^Pj@vAOyK|i(_Au{1Zp&G#u@V|oX**v2o0Ax`hI`u+5Cm{ z+l9BmdDaO)iXKsY?3Da08h=_8A-{^7&^alR?=uO|z$o;sMZ%)If21*KC){rvyye7B zChD(AI2G6l5wws84B<+F@-U>bz_jXPrlpSU-`65ymmx~u7VLCvUgYy^xJ}g+$RD(h(m#E&71xZdvHN?eRp>paBv6LxwG+jlU1y8doMq`53d2I zn&jT6G(kI^eF2LDE$=^Y;}FD)G`h8A7s9r+j+?=@Rm@9K8u0hIr$yP<5A|Bz({6Kp zq+-1dqu=<~%eq9rUIb+=;(JoUUi2+QQKOloGF2mgbb zZTUsSXp{eeoD!4o=hHm#V^r$z$|?aaa=4F#{%>R^vB${%d|o>^BK6y(^Up0u8-*Fq zOa-T?a*j^d+CC%E{N5kz!?BOsax_>2g`kKBPs6}DwQN8@g#0GVBbwFI~ibrlY zZ$^`M;SOB_%svf!JqoawTZaS;URL5BfXvSizRM7=b$ckz7*rM z85-~4jK3Z8P#aE8OwVy}vNH)e`%>gLW4j90E=U(u*!HmUyFd8Oz9KU8GK3uBJ>c`} zBn`7dCXG_)m6o%6Yt3EXpK#4p7;(`HJIJvmFQf^`M{A8{SSgkB%vHe~COVJAUvCf2 z_QIohi0}CmJ{jkj>xyZc7C*PwG z*F~kK)&&5Qk}Fn#BOwbVh<2um8%5?S!`pYk zd9_Jom~R=DJh827uD48dBER+C0n`?;vM9b}IwJ8lpWeRaLic%9f~`#J%vV=hde2{z zU+NM&Lf&g{&pS@`KF^+&N6&v)R&QHO{E9KD7rw00#{3X*C@MJ-$o;zd62-@)7N}c5 zwi;(L@YbJz<$-=9e$8}L;=*eM@h8|ZBE@PgK1p0BL>bXw(p6^lV(#O1Tde6k=wfx| z3#QC)872H#<=y#ZFuQ*K&^%RD6(axhFrvvD`wT|(rw_R~O@wX$=E8Tcg)P5W65O_- z-v-c#wfCqRT&>HeeEXGVjk!t#F1z`^q&EUF&($nyqUfRL8!XD^NB9j3P5)ki%;Ws$8q$OnTqI-KJCyV$CkP`^@gAKDDTF)c2h%-6fL-@!_8sN-IBKh`XzI+V;{_Nymyl>b$Ni+ z)DYRx{}h%$6aHQ7toSrdoT}n#+fs8%4KH1j>F`G1RMms)TED)(;j$%ApThbRJe1?( z=xo-u+3@Bh`+qLcAqCSim3`X2I|x7dmdbIO@L7@=6#pUW#Tx5QWM-`j`F1mQNsG=` zC*3Ri-v2(t%MaV#n(NxO;?oUamUmVxyx%f2SV^pI_r$hRKKg9wB|6EQ`Og1;S<-^A zgaMErV=M9shTZ<~j9j3;JjvE*>$!#6sM;Qyqc=L%Zhzra*HLok@1G?9CqGg%W9haP z`d^y(P@%?55;*PJx0>kr-7LqFQD-~DjuBtF$3ZXS{+y79DxWkm#z^-+Q^^*m#Sy8` z%4QMFhW5=qB=siDc|+ges3Yr>F%3CvlXDr)--}3-S@~qC{ySTvW7> z<<9uirhaH%>goK3QYE;U-tz}!^n&no;3A|fNE)b4J!c;$PgRO8`Q8S@-meVdeb5|^ z&8n6KzfW+3F!tQs1`}$v3?syG3p>*%FMk1ua z%PU?(q*#M~FuTFXvM&U)$+9l)PE7z#3C7j%2`FM7K;An)xwQ8B`;Rj}Y+JNAS1}OT z%TFXvxz^6%zBHO@H`nUrz-TY?y^%odr1mAvy+t`iE(6Q42ii(h?k@)ql)hA{qVTEZ zNB!@Qgz0XP<7U9NAqHkkCS3u=WGT*S`;dpE+1;>r2M67(07moRB|gW-6Uh`ZSxJl& zVAhnoHp%-`bxcpiO>GiTdJYRF9A7tiu8LFE+897;p66K;*My}8+V??En!Rx)L-D8b zJnu{aik|!5zzy^j=~;;*TlD+Wx{9GKj2gKIvGm)2Vbl;qlFz84UIzonN49w`RecLO zlN+v0**=zJK7nZ`OvOE>RX@xZjqD$2lZzX0VE5!i4??4=Ilr_Q9Lqg7>$#7F=9udj zv-x7?l`2rDb-1BA6UXI$PFAyE?nw`vY*g*;b$?P%UzC-gDd~TCkZh~C4Dr^BK;L}! zbioK=3XZrCA$PyrN=}eM=8$!MLDDFG^z|odh7TQ^JFnQV_@t|e2XWVgGyv(U`*>9* z3&0(1`FrV$aQN)BkkU~tt{O2eD|A(3ezQ5+;XjuwjZgeoEdyfS2)eggJP{M#iV5dn z%DV9QSv^sVnwev%BxQ{uu62z4#Xf{?)R{N%b{Q8&O-e>e5oh30Xd8CB(CK>Z?c0mz z^RPRFPg|Nt*{SMkkq|8#6KKf z1v}TDiyH@j2+GX)FX4BH2M0LT#gNYZF1;!_E+DeZ@qW1@;$E#TP7`;RTeq$rb`I{{ zWFnUg)~n#v(OI6tv5VoSy(;1B83e>rcB2i~@xY-72&U$QSZy(;$(FlcVXv^4MGR~kC^eN&Y%wr$ zAso*Nu5_&UZ``I+XTSUNDqM39n6cc%dMm2PV34K?R(q~_j9zXGtA)+=`D`~iEb~A| zhOiGLwF94*>C--2>u}Fk)sR)po848W++F`E>sm%^;@^?dM74KMfYVxEM)ujE+8;es znEYq*h}?5u=yH1y}6Nkb<_|G@h*zwnMu3tMj zTB7+F`PQVZr*NgM#k0k=ALA^7f{V_M7q1UtFPJ%LwH)-AQhfo!@#A!!y{QR5<&fT(6vol;0 zbD9Xa;#~^`DE~s9b_F@e%l*x67+1S1KO^NZLLCky9#U=9{mQR1izlTLqsZ2xNlWgYgZwN`Gd;5sW^Cr? zPd_}tRn&*+LmsLAX0vf`t-(o`U@l1Mg@yRiJ1Rp79r}bs0%g4S2cqVNJaz2v8glvP zPuh6+2Vv(T>jYjO$r)_<=;oKim)7qY+tu^-TiyNOw^6l}{=WlXg*x0v;Z|R`f@h}C z2g-{(rEcw%RjUO57KvS=i?AA|6=|6JJ9LrqEUy(W)D;7lD+u3QD2{QlZ|9uH-TPgw zgnPg}g$ovI?iQ3;Uv%9EI4ts{hn11wLPlE1NR}mf6sZi(jsE;Q8&Z6)<>(r|)t_Sc zJTTB}ZwPOK8e`TH=QPUX>}Da#fKA?jO=|0N&4*U=VAXCe<%?OCql&Nn$RCD3}|mba<2s{z61x;|eBW#;ESy zaXy+a%RB(5w1R1d4H0cvm$^mSkSDjU#IX4Tz}w zc6}s}qhH1JT@MecJ({)CNdN*u=jV;s$U&Kq5W@xq)5DUxT8@ozmNL=vy`}ex?5^E5 z5+8rk2nbsZ@SS2eeZc{ZJyAeY;%kb|Kjx~Iyoh11za0Jy=z5{&uyc~9voorxReSU} z>({i9(17m0en}R+ESuoRgBPTN_d)_5(-us`eFW<}T(6zOv;YwMKyo(gKylvE5*YFh z9#8H8+IHj0{@SgGd?R;LO+0U4N%W3)$nIfsmyk z&+HW+a#0MQVj?t>Q(?r17u6q$L!Sz;ideu1C?O zi1wXyyRBm^_IPXT&G9RK=Gpd`!kL%|G(njwj^zH;st+Jb#T+Ln*F2*N8LToBM2)gA zKg*!c{^1;f6t0)`yFq7&ze&l}#VWu_J$ojZAq!{1`BP`ep(__hRqT&ZSQp2CJ=`Iq zkawsb1$gZ#oF@1@wps3W^N@4Ipz|=IzZA!K19HK#LQD7ZL(`V(U9!tbz7nes(4iC) zl2UI3uc?zaj2xJGuPOY}!}O2n7T;>9(pu1mH3${>Ar>PbLfrWevN`=L^d}AMDl{?> zx7lM8LAu5gv@PbA+vTa;(^Gpan7RbjrZ=i@y=#Hic>7g@&pl6Q)9E&wb|i6UriJ|Z zc6-~~xoD4n4KMDR!Im%W<;_yEZ&ux%iU`joZ=eMtyd~PhE{A>)2|p6pJihE(3zgAi zRf`+c#6*ze|FJ$i1^;X%gjA4L8BJ^S!}g|_VVk(cxk(7K4lUK^$C_+|Gd9z)OTKbE zYuj>9x@lQWHpNOBUqk9YGiVlmW=PW~|5%M>}YR1-R zIaU%22-7@Hn(pi`-t%rcOgVl6azkZKEbKT*kWh7V>})Z4Z!}0mX)t(VK-9=HW#QC2 z_Rg`QI9*Y`qEwuDg%!^UUnuu%%*LlWOQHluMALuy)73LAa*#%Ws@bhBVyevOUiR|@ zr^B3y(dX`W1Czhhr_7)lUys;%090EEyB5JbIaPk_^{)DPO-()c>iM^74a#uMYmjV! zb?^E>mrD^&*Ki8=W7va|FJBS&K!ivZ1WLfp|55cTnhZE;Oy0L@K1PIFC76OJk1~Y$>W2wrFVh8c_$MOu*UR0C ziAu1ofNK=a^cx89!OiarxBh;GUL3us-_FtgnH>`ef5X|>qD{B#_{SF%uj7{@qBK{c zrfXDHy}A>l0;C2ziGW~hj}HXGkJ~MqqpgTv~PXs`-|X+T$JPw_qAiSz;&Yz z#IpjtD;zJz_al3V57Eom0uIDY?z{SZ@HKCo1kM<3^yeY^N2~AyeK5L zWc94vOuqMpeY-R6C)81eBv(a7-M!C~^q{lQ(8#RP{ZNI0h2`w44|8zB6o$FVL;5}I zL7*O&3H;-F)Fi>nu`ZOyVj-GX`E3fIZf&8|hARS?8nA^MMl|w0G;-<{W2@J1%r9 zVa3cdcwlJ{S4X^*D^yIl?+#96&5x zQQIlQybzRfnxI=UgU?D$?Je*rOKtSR=ddA#!4qjZhmZG+ddkEDP*l?Iv8|h)U6 z_KP3d@LOH}`$Qt<+>dnV4xVL&f@)x=ee{5My()$9sjqr6w=s9fQ`ce!uZiz-DQ*P& zs=|L>00Z1#vSqo)bAN2^Tw;QJIZNMJcVU1qrpnN-m(sQW@XJ8E z_u1Br=KHu3uW7mUhh$yLavv&lPNVCF*IF??A&*byb@2YvBlaj+=7i<0mEyug-$DHl z4zGpUSwTiJ6-|;5LfaoGxc$vwOpR2I8+)GM^oANMJE6Nl7K~UH8k>vwRr{)B<9g_7 zCoB^ZnNx-K#PTKcS52Z!-Zxx7u5;~;_FdTVmBDK9DGNs0jp$DVS)H!5`kh+}YWU4N`GCzJAOXtn=(;4|bjz>_Q`m;^>ml$sKfG?`_ z8|b{2pf{WzuV#1CNLpB)DdNnqtw=+$6lcUfgfjA^E$+#4iQfZLxI&yN?m>cc{~ek8 z(*qY!(A9$Y)BJmpTJCBr63D&-WezlrZ)=A{Pt=n|Ma@hAFE0Hr@TI2%suF3!- z%7#(16FUfS!#KsUA4B}Rt8~z_Y-xsS&1+lnbH6MURYjen38qp4W@99=D)9zRE!tR= z306;7iRz^xdqU0R>EW@j!IsF3OU&k9^R0Ra1Sjg3gmT@av>Ko>OcnJ607{SeG`MtFEd+efgV$7VjiXF zIVW6l`w2cT_j!uZB^c4`Ha<B@5s-xf3oGt7dbsZuk6OCL+vXqbhtlpH1u5?`a40LVVDaG^a?( zmH=$H6To)B=w8p5Qq510>jEl-fpj=;UMyTKro^2=!ZQ!~R;`$$kmtRDl6`U3t?~?r z^F^NtG*$A`iGWUG06QIV4m;AE#!m`KMzb3bVUpneM*qono`CY03lyo&l{)Y`!xSj z|JT&ZkZWGBR4>U zFvx+XD?*WNxXk#1bJ1hoXsaWMYdZmiEAT~jgOV+jQwAsHK^10wezA_kX)di*zempB zFj_Ov(XqQ3w0SaaL9`s(Zv9B0c8&Mq*mtx&%~&|>dC<2VF#vK>c{wIs#t7Kz+FvBGEDi*M4V8x^p+O;^4`C^IBo?xls0Q<(o=VZsMp(E zFTNY#sh1EVA2i=#X0I2}5)V~AcnkN)xqtFDOIM(wwa4Vy{S`WYCGCx4BCU5SQR;Il zw`Q)G@B*Ch+bP`LkVx>3=sNePi><8(Erc@ui9YAspF>8<J+9vX%_Hek4uSNoBQN1vP5t4j|t zVwKH`mqBnsB>Z+ecwUDGVAYQP)xUl8CD?tKkyWNAbCy*G3PqTTW|f-(iZp z)Yr3XRP{SKV1sO2RQ-dgY`iZXrwSYG+geup>G8?bjfN&Hav}ttXfD^Pp!diBp6O+4 z7Rh&>C1O{)YPu%R!+99u+0RKryrD^bi6XQg@>HJ}Z3fzJnx%jdQ*}@Pq0-n78`M4&ZxT9jP zpla1OYHgJ(Ke*^!n&*IE1@(n5uO*Mt3lEWb3V3Dkg<83u?T#hf3jEW8p|l3SY?FM? zeme~u2-+QvJ~`=pz{daW`nCN)`^TLPpI2MPb8GCU&D(R!=6I{EqNhFN<$0pe(BppJ z(-pUi(WK&z^+I}!xpKW*c3NIr5pvVy*S6J0>w|5xowe2T8|FcbOuwHd$xF7}ulOSFxe~LyRaTm^Q|i6Cm`y2FmFw&`j?y^yFen_qw{(CM{Foa zpYk=!M|#uT7{7FVhx2hHo;rXN_$c4Fl_>(bQ%EUU2c`G?!_gl&trWV~K_Bh7eoC*N;f+VkP^z8-%PgDME zehh-LwIMemEHFzKmNC`~;v!6K#~p3$C-Wvb^uqADsuYk3g53M$`^~AQm1bsF>`11B z@|gIU%38BcAACgD6zIVBqyAIJH}c@wM71QSFeG~lU7$N6Eq~n0Y<}E{i#;SEO z2zf7`{8IB`dvX(pAPMbR6J({3HkC3ufIhop_^(6gkQbvS7@w|;%Q!8PTfNnL`~ z8y8_eD;_4VJ0!x8XW;oJ`@K7_#Wr4BEK#KKeG7ha*b1*iTsFas2!xyn@YLgoNcCF6 z>NPxLKqL40e-)_0BIBil6Q1)j`SCf~J!&1+kB(tNHmfHIna`4m9RMgpS%C#RY zBU_&|&o-aKwMrVF8-Y;H+y(RewWybXwb)K?cZVY0OLQ39Q_1K%?MgjOVZQMr1OFE5 zE>gbFnc+pq``|F_tAE$89D|2=!Eye+8DTcOZ+g)(*|R#=S+h7H&AkzmDm=P01iIM> za)X~{jea12QREDVY56_0?jcaH>9b-0b~R9xk(;N)?dD{ z>yX&)r;Z~tPE)P}z)cl-9jPv>{n2MkvXGwJpf57oB9kFnH}zW|y_&Z0oW= z6>Lt{;=pHi-d6#qadSf5d<3nE(`&i z5%D;hkszL&sWdHv*w-G?a7QZ?65f0bt}+A~BC%25oe_yL{+q*lIM(m|(ZgZJkcaM+ z2$3b5!2|_7c6<5>Z$g(9Zt*2r zi0?1MyP-i8Z{!V2qSDJ`nTL@;;W)!O52}1XXSBf~&E4()VHLNHFZ};dm zXQ7tphM#gq&gZ?H^PuH=tom#?`KF*$1(|$Ap^g!~pl(D^V?}LyKe#A#>RAXQXFmwS z&=GUSgF>Wqyx`JZ4S^*g8mf$#QqahLevc(BWKa&3=;O6my;}3ITen-n_HfGZ&L|## zC=6Z&GhRI-J&prxH$KiUuvG|A>Vb%w5kTpXeeus~*kj(9c^9%>cFmJKLqqc%|Q*T>mxVAM1d(ou!ZDFZgO_jz?it*`E99zFQ0>&EAW zG4(0>!@ug;o3xXwo(xtR*xq~BXhG(&XEEEL;nrZCc>9ZErShNm4Iv+hu@6sg_4MhKcujSDE&Y{0iA)~L!6(7Le#~vB8p$GQ zPee@2%gsG4#&%d%lnC0x?;uvj=LP7BTS*T2QEs#Q8M%%F>KsNV9;SXX>Sk9CH zk2&CbT~u_d(zLaW1Kt`zU#dlRZs@tFW)UNC z6}wzxTKBovRdmzaYRINYV*1{?@7}YJq5Evv>?WuK-N_E=q~Yq_a>Q*-|ZG;Y(h6wWc} zy|Dt>N5A?xX$c3o zKP3u(mW*21lJ#y3`0-A(y2aBm!P}Eu=IwuXH4l(&BzAovim2){$(tqe*_M|GadHsZ z#PM4m(mGJYBj6WAIiU|ob9N$D0hoaIaJ>BY*gm8*ro!*H1P>E2Cy&Osf*aK}QYlIzVMl=2Jq2!Z1+oOdeY?m}B)uR1Jjjw-TX+TX+xj!cc$0^R;~2vA z^j2d@ND}1Pm47|!i;Wux|AtWgVZUnDR_mjH6g$-{K0Y!C(&{jn18ZteFMpa?fh_w+ z7$4V-OCrX;V3W{5PMomp*rsi{!8Y>V?^^M?ade`y|D+;q?-K%gmbp8y(W|_51K>tq zR=h)mvcDb-y6&Wnr{FyjVG6ZSL%T2U7lCyFwbjQ1q){gLIv*T=?7REMbz56^P~vKZ zCxVJMSzyd7yTd`iZAT^I?Z>t8K6)`HpJ9V-u3acE4B5-O)!}m#*G&pGG`_4&84AE} z8!+@GEs_}XTBZHlQ09B=vzFj<+@c2aIV;u0G%|SfXdnO|9#GgE+HI}ReKVe2t3#bK z;_L&o)vgbqW3_z{IQj16D2$$ZVg7uC=}$PipAMILKr|1dk@Hq3XFO^HBgP`dT4;_sZUOC&p7?S>sx1A4BgGg8 zvGvS-PSVS!_a0MH3(U~kM3=Hyjol}jes~HSYm)`+w@L4$uoP&<2;ic})3L&63z6_h zFr5lRG@ZTxR>#2RH%~=zK!MOKu=o}!NB{^_UbIvt_^*K5Ex?EDrqg6r-?@EsC-8Mc zTI+`{tQwN;lKK)MC|_J~Fe-=N)vpH+(L($e-}Qm;Q`s2Ef57;t0l*-C#S25i@6_en ze&|Y9in8jrNHJoC3zttr<;IW4_Dn|Wh9TlcIzuC54;rC(*D7qainkdVpAD*0!8)jBT}Z=1Zf zzYapVssP;&zBu0w2IzmKrNex5zYv$nYPm~ZU)I|ihXEPDACC+C94T|I^05 zKdUWJ-%8a#i*r!)3te$UeNw+NA+R8e988cOm=NbY-3&HVk*)ilS4AFocQ##qh_Ot% z(6ByU>*s1}0`+p~t1_qYrLu>$x*ZLDX=uYA7Fm22UO{YtWZ=0_7;InWZ|t@FA(4uf z=8R+TGI;sGwC|_Ya3O{x^gm`yOi36#XrJmqPvL>Sop%W&%7Vku211L|eyqjkuA#5p zW6v=rm5l8tQ^eV&1Nu2^iZj_m^g1q7FuBnxMAZdIb+NjXQc2G-Rf}>G^g>@BrOqU( zE8yVKJx|VF-3wbN!10OS4LOI+#CQJi763%DG2_T?F7|~?n#4Q4!?L)fwzgd(z)0EU`0RA-mvSsqaaN@HnS5q)i}g0%ji|jbF~qEDMq@ll1)Ao^qez6J zf461^?}ItZ?P^gj*(}d#KXOxu(2v+zrD(CCnEYNy0lZ3PR`XDh0n!*p1VMt$qh0_r zQDb6EGq)4U-bdM}aJvU-zMSR$>-2kDlfWWPgjI-pu7+nQu2J{<%p{=8K4)6Lup%Mt za3F{I7YgdA-tD3nR*B*`6K~cmsz{gD%NUH~B(UXI=TPwWYHO^?Ikab|9T&0yKFPl$ zT2Bu73a(!OQL5&k5#;apBi#C+b#N#Ta0Ol8x`H~#06ErT0q(vG=UB>;2C=N&|A(Pw zoXRuaMawi3sS03su2bSDhScxM4Q^d4=USh9`r&Z{D2_$qYqth2 zf!rqnQ=#-*#69EmOMeBJTZhr@oUe91+sAY|m#^>1j&kAgby1XO_gPofDelBipm2P` zsT&Os!D?f%pjGC!quMgZuj0-)rL^x*m78B{-?A9I{(c{GbVs~_lS)R;1%*jS?yz&F zgn47%_#WwyyE6aW^m#4;iT3_-5;L^1LXQSfpY`8sHqALOsLWK$;|R3BnS(JBP}sIg zb;+s>s`#T*nft%P4wJ@Bm*pbH0vV!;NV9r(uHkAwCu!=9)n0uhvnKL?Z1>>3+&agD z@UT1G0tNwnx>Wkq6N?Sp6ieOj2}I78!pmsCv9^%g_|TGsCJnHAzXxiEN%Fla8_n6D zGqC8O;@$<0L#I^SgF{6e-cK8J_-02hR04}TIPgAn%YZ4;C>r%t|FE^d!Wr|<< zncvcET)J&dC3bV|I4SeNi;zFmZA}9=CjUv10UCawO^%|)zy(_tVEX0>e?nXrF+t)% zEh0$t_!YRX89TKq%vRI9BnDk!gnL__kJE4Yi8A2LZkq=;Yoq0p*RDb5-Grsh zIDT425fUY*2G&Zz;uz^)K`(5dIEshIZxcJRFpSR}f%9-qPvjP()hp5Y9gV0lFw}9a zkrXUJ1S-;~#ElaimUavAj~1ePOlDteS*2#Dk`!UnP(}ZPN$hHRjAY4izr)PYr#Vkg zp`GUFLxOZe$XkwE;-{)o@BA7l>?T!QF==o$0zhspKQeHGn+W#Bn)2P(lV$LV@vAw`b0a`q6ULldfdmORB#g&vk|PR)=K^Zkj*KBeU1* zr~vDy^PIdyzyq(ah~+z;-aa;Oc4303SpFeY2G-*{uaPqAjz4h&EchF*Dk)Z@{xorF zVF#436o4h{kXqs)O#vgWr(gXm!+n~5bNF0dmPTs%O94R7!TKOWpCNxBci^Kkc(pdu zte8qlNHWg~$y#ehIc&Nxu(NNpkOcXw@6Iplp&s~P)nILLh{Mq z{|anh482!lou_EjVVbx4j{{`Q@e(MZO_re75l_K!Si<50oc1ic)Qe3u!K6r-EDsSN z;`}dwH&t6vyc{@5CigOdJ9`_rtK9?SHh|_QF_lqd0G=qqTFKCYRTm%e_(94SIup*1 z{UOZZ$g)|Lp`KulCRxs%E#7vYtNp=w48gmX$2W#e@mtBH2~vOi*fhu({i|^vN67bK zb7~i5B}1+^3*o6w8IF-tgD%X25*SF)Mm$7mfTFa>R@b0wnkUpB5*l)u#-+L^M8nbFkm=1>l1GReJ-k+zIu~YP=YKIWsSIz*xPdCH$+uZ) zH^#})2C#y#&_3dtHB!0zCouJKGInw_Q&lEHDjCl{zkp*{W0Lmm5SwKfgkAm?7T=RT zWlf)4vJO~Qz{#x9`oCJcc8cLMtKs;@H6!RL&3i0V|Is%lInZWn)Qa{c%W zqvn50v8e4y^F0~0c6i-oKZW~0T%Bc9)L;1RB?M8BR(d3)yQPNi5CQ4#7ElBP2I-XU z7^J&XfuW?42I+2*h8dW+!|&d^?tk4kEM72+@60)K;(7LG@5#^Duf~LZ1r=0u(h7rD zM=ZmxfEd5G`%xQrafYbTW_!E83+sQd-B`&VAGfHdAU_pf4V89Le=X)z3e#9Lwnmy^ zUzfpohFT+mOL8mn#EyVLrM*;C%3Aalrw)5U1UZMkc#+ftSq4P(sEVi`AG> zd%e{~=$4}zwk*K!val1SL#8odGUGQ7Qhi${cHw9H{@u<|cgiX2mihAP012b)vjz>k z$2@v`)yho^IK?X!@b`X0R$A#H@?JgOE4ygtO~&x{&WmRNJC{7E8RP=UcppN$0E!p@ z{<2iN{H*J@4}gYA$-kLaL={xX9l2fG8ljJm z@^Du~sdu@ql$J}r8Z&pKVjvfB-+E$|BIHa`(9GYcSUkNOd@Inxiv4KFFPXY7 z)#?Y1rmcCT4*JB9G<@8``_mv1BX#z?^k)MNtj>Bpv4uun0iDQ(UaYZ1$e69)ea^{^oEncM9 z8P_-n8}?ky1Z8=7>!v9z5#_DnON9qwk>6@ZBVKTi83<7;IfDA#7aU>&@_@VH*0^l` z>wnn-$@za$io@vy1cdwAzy5q0>3!AcSu`MhoTL9ogE*c}0e|hn8N&a`4nDrG)e8-9WBw?R#p%Q>0=uV_)6B)LNseK>Hp6|F;~O7 z`KK|p&@?V^X+^CvRu+@>zb7#%+9~wi7vh5+J6w}_atVF6POKgC+h0!%!lcNi5pR6s znfA@J>xT0px00FO629|U*v9AUE40O{ti4>_f`f{3@pmd;^R0ZPvNY2xe(K%d@0wcQ zY&#*G=}3NF;>h%A`5NlUy@!_iZ!KCDQMWAZtf zZrTTaQC$wzcNc#(q%=yVO?xhy}_s`p4NCR+yFURg4#-$_*sC z5QMczVN;MuK?Ps6p0>Lm^n2N-=8$)x@8jl>DN$Y(Fyuuu?Zt9pIQ;!}h#M2aeRo!( zO*ocoIk##)?iHx&a=rYjHkj||7+~5Wg{sK?^qce)WaY2E?Sz)ErrC=CNYp9R6oA<) zHzV$|O&?apke`^A8NdyqgsV-~&)vtblH=p3D_a)!IVWTYG^qNie-eFT@AB0-NZ9V7 zk~FHZHF9Ai%i^)wu=T~)Q0XXA`7R3pi&n%Y&m;+L)t3HU*#YC43zNu1t2xB;%z z2(rB|xVFqg19qBYTgoVF(YCu3*`8vCA_wwuRTTA$^m85>d?6+T;ak@C1+bt&myxC3 zE{2njGT&!K-uPAazB!qwA3~SWK^Au32@XL|U&y~cgA8l$|YH zUBVY-9bvJMr%zW@s}vqOQpK8W=2JxmQS+x`$iZgAnzpTdba~2O2?zJYnB*7F)gNGt z9Q4J20_syD{HheFaGSq!2iHiOY2P@IG(wSX+b-=2Hu#@}*d@=Me7ZILJo;we-=wB} zZz=p*`4&K+!ids0MG>SXp6jnvx97i5c0=6ZzMhel+(fpf8eMK)Y75|?-2I;trJmHS zDBraPT-+amWSRu3&JzhEKcW->(Lo>}>`&V{y+bb@b~+kkNITtCZ%Fsr`YBn)hijo_ zV$dX&wN##)tWvLSkS8dC{<<=$@*7F8w{F)0R8pfMs8; z4zKjnOR4%zT!meZn$2$lwlXp~g2K_ZD(oSHTp|6PN_Xauv?V#}&y$!bK~6s9thVrS zzocWWOBRVrv;TO9Y_vFXNjpHr$8h#h!I9yU+;l-S$G}&~YM7fkgA&{;Inp5>y{(MpmERuVun{ns2AoKuqR$)9E%A76LKe2SLZ` z1%4JEq`SO(7Iq#IxOC~SeVwLJchu)MjG;sCmH2+{Jl3NH);t{5E9j z1sD|D>VGlgaT0rMp8FRH1NHr`O(r+NOd{Stg$iC7VF{aRTK`1a{IrFO2b(hc#maPf z9DVySsumGHz?VM0@)Y+pm0* zkNsZbpf>y&D8srk=m z0=U;o8<8w0vurvkv87W7=Ja;V{t}H#lS5H0)pwwivQo|#9;pMfP z_iqsG_Oo=1!#rd?<-gj-lLJ~iUc=*z&q5OtcW_5(cTsxOil0&XsePOO1W=d&{*&va z3wZW%OCj3*lOCrl_acN~W@-ZT5!wnLLeS%iMD#Bqt8|q*Y=K&ADnfr&*x>}i6BN#?D!+C|0;Sv-g=Sv zqKp~U#+#9{l1H`v@J%}maAq1P#ZA#>W5Y#3X%Zab1ow!Zf`WVTGtsxplV(e2)cq+# zm2EL>q;}Mi!qU?6rru$S!521a&W%gwV<9JI5;$Yfa034{wuFfqrEf!!Z{?}e)(U-8 zk~HaRiNAm~dam@`tY-poCzZO!XMdBv0rid4oMs@v&u4sie{wwa*z3 z)z07oggXYw{(~JH#{#$=Id6XX&=^r}A91qLx ze?MY2H}v*1*S@kNVL^fvPr<4p6BjF zZHitcAQ5)?a!6Z=j!lW?QwjuOjbHoo#;^UbgnFmlK8O2uC4eUo=LEOmE>W++1st#g z-Ts!|nf}i-9NqD~9sLZsHT7NM8yrDf?L?OAp+Iwb`W02U0JIj8+myXjYFluz!z085 zUI-ZW3Osq!U~^8=4%;&yn&5`WYJM3Iu!)zvd1O8Y=svp#wxS&=15Xw-(OkG;q#yNi zJU22?0)8gvd51QJygHm26;%{KnZe0WzZD!F>HS{*iR9?Jadzz;@Ix(%BPSW3f9i*Q zW^xC^YwYIRuahT!wAqbi?zpDL2aex~w_7MR+>$9W^s*vVmXeS@Rl@f<%aP3f_;tLtAw@@Y=Cf+f9C(Mon3*M4^3k z(Xw~Tv0vK1$I3R*MlK6=QNPNvHPJh$NVJOfi-lJydDQul{i+sOwyXbqNv=P$I%_BEQaKvNTuIbZ(yDihAdWh(&!bfsWX zT0`nCy&VUC8&g>z7$4D=6v<$dJJLn#Tgm!OuZrJ(Si%8PXsRp~_H1u7(>}MjX>a9g zWHA2^=qat*LR2G&wqm9mJY^blV0MU9x}?0xu1DKUf2&_!dm?#=k`(gxLW9%2QzBv?UMN*N?WN+B<`QX z{HF+l_brW?CTQ_Ex{~gwatCN6(RRFXnbr0)ZsGH=x)j8T#O_(P0R zpx_nyK%Ne-KX(f}?_C{hOgn?;U3QI*wSFEE^&({gFQdsXLI6nVJl`dO-G??~!-pPB z!$!Ym_zVyglM@k_lB^l{L&6apka}*D$v_B%@(R0mG1c~m|DMqj!&{%uU_xE4qqqRj z1;QZ~DWnH1`!k{%T`-}(N~jg}o0J)EUNFPW^4jSRAxshJJlAMIBNfj?9MB1lwL_0z z`mY}9rTm4UzBW9`R$ed#nJ%`q@7H|U`DVUGKXXQ#?_AS4AmS$fuj|;Y{kZ1mj^TuV ziFzi@>FYmmjk|*_;OpZ#s>3_#ucl9J-TD8TP%ke9UX1^fUO$UmqmgMxU3wT$?-9Li zFrQi2c^r}JkBI5XQg}5pMz6S@2_g9~ZEcQ9u6@SfEUDN8bgqWRhrk0DKvfrEH8QJM zL{%?WEw1XlYFvWJDIR~Hsd6HW2mvC%zBYQp>>|rV1*6g;jOWNA?;jg+$AS#VY*b;aA46z5^U3(FT4AmPJnzh4EpRic?FvI z7+}53y)MA zFK0BR49CE_QqW^Y7piy=gmE(3%BW|o3~BON=YzAoe~SvN>V>v}9tR4)>g(lEbFnqW z2F$UPAex3)v}$F%7R~NhswJX}PzLy=(N7V|p_OQys}X(E+CY1}iOC9$pxd5Gb7-1! zz&wV-Z(gTANg0h>a)#?D{0gaLaZ+jVdPilnL;{)=3&l;E6~9+H3o}7W)Nx?X1HX+u zKdz_Drnx_91$P{vk71P$-umbBBaa(=FYN-Jg-;0M)@Rn=yZsy;H9vnk`zxFE-_~Rd zBUs?eH{|N)(*Vzj&fAeJp~_U;b%#x6Vo*5ebL7WAv6KS4{o7iz?Ah(P@nTy~5G`X| zt!oS{IX;*G!tD)%V;6l+bM7xEo#`|mH@<3sdhEtN`aj!u^gIz-AjWpxK8$3HPe2>M z>OL58j%5SQ18*9^mcQ>uGbhA#kazCLTKL5`@ttxl-=}Lk?M62%0iS)RyYADvcD*}i zXVqgJ{#>p*OlpfX&bSCFig_dA6Y-O^s!}AivqfQiA%jLz9;|oY(*un6PM^e`!Pj|j zG6zCwp{!E#m+RgzY&>AH;z>|2A^(2Y>%ASFl=5#ePHd0Q-=+qCJ^ws^;1b@sYHxGB za&u{Mov_P6v@v)mXBx&j z8D`XK_aWpDLeA{}4sYc=0)DiPj;wqOD~~LFhZkvs4>wg)b*mD=0N>%SS z`Ur*=}_eWpo zrcxDG$(9#oH}iB>bNonErhu*3fe))Y|F0rw09EGS{v~!#==X@>E5{kM-pD?YS!A=GKN(^yL@+u(wH&-!&)-15$rTt&^JvkPV(=Wf6lR zhF+&oP|vmlw+1bdf~4QT_PMz1%;#JZW@Ih& zQSFINPHYNTZ+z^ja;V(ff4-$FenxrlJ*hjR9IzP_t28S{Z}UM(1(&4IaaT!>H%hq9 z<9W~IbV{wh(0T0xU39naT{2mODF6OYf&XvV0<3C)oDKt2F~<-SP^MKs14EsRYYnh+ zIAcrqttY~eXtQDFTcm)|$V2HfpW;C$Z4V9GVp*w0cT2A$j<7X}zNVRG+Y z*v60F^?@p4y+`|!+diILviuBx^~C6yevrm1R)P}9RkFH@gmrrlTsdmed!F^+j{aP` z=BDiLTk$FAQ|iz;m&{;GE@d@^z`!6R>>})eL_rk19A=vk)q`HzqX#N=w4UuE@3x~9 ziy30y=(Z|m2noy`C8#E?UJunM^u4sc#C8?a&*l{gZCkuR@6tm{Le93_fltSAY$e{; zm>k;L$Jy}sW7#h@6nmlrcSq57yb-6HRf(k%yTkmX?g*Mtm>H<=`XQNNB;aS05B$)B*xftbj}rC$Qg8@@~z~)3nO7 zfUFxIv^e+zm~M*WDdom&<^5siaELKJ$vADDAsxBH@*vi>0i%U@aY}TbiqK~Lrk;yh zAodk9u>4NO-n;X#WO zf8>RMB&fG5T)l6h&3^1kX!Q3Pe5zSiKg9re2u!&Z<1W3U^>be$Nh;%35kIag6E;In zM0dPk#mTe%T4)q{Up_a@)@y+8W$$jV0Aib0ZQ9X9;R8|LBBkMitI4Kwe)Aks+<4k` zZ(X?mfg5Lc>9{7DC+}Wi5wKqKW~;7GmjMjCa41FV(Q>}IU;ArG-Au(Fl}vucrFlgt zb(P?cIDR>Fq(s+)gMa6P%iIwg@pV0H{l{Bw_+HpWl|4`m1u^_-?Z z)NfXtwcc-^eJjiY@n~~t?OfVZv+&rbmVVkrhVV+K6UcV{D=u%1`83gn!DOpnYr8|(6SFU~s5+g((5N@YXe@8?sV5mpl< zwUuRs3lc@NFgTmid^_0BIku$+!9Ma=>PNY(h=#65^(*zXRrh*$U>SnUlR~DVGCz!8 z^!L598lHH5j%9K4sK=<8w&P$n%5Tz`!yy~i2w+2(#KCvzH|fZTe@T4oaAqBvkL`3y zz2FkG2L@VC{2&)ai_GE(=r}zQxwimcRO&6*mR1GQ&3FpAgkk+-8#z&s0@0I+-@#@$ z{XK2>VpW3OS4NA5#nEV?3F`Ny(lw!XL+6vVk8ZFH(pk%e>lB2A(j*6jgC=6%D z>*rGwZr)R>tDLE}uk3R?!c9KS>0P9QuJt{Kbil!<%j$`Gm2?jxKwY=HUj+Q3L-+RL zIDBosm-{0ggS0FF*igiI_(aV{WL#dh+bo#p%Xpt8N3IyKo8)#b1b6>I0qW1gY@g=iXLknx%>Ss@o zYaQQ{Q3_rhCTWtT;w0VsuHC%TaTJ)8h2h_5dL~b6dZr$+9?WgU;P(p_&HlLSzC6&` zmda`z$U+;0Hc8~^sB0>6KF{&1ri>rB`FhUNfz;R1S=th z%4*BvUk2bi@1u$gRZRM)A8m9b`?G_1MI8fGh98M;3{-|P^(bm{oW=Lm5ad<=;8_(3 z7od>T$Z7jd_6uEuB~jWtGw;X)^$#}U%LvUdawYTDYR*f~Cw;Sw705h0+}vclR+Y_Q z*q*qEc%cn0(=bFC=v;wnKm{+~0~-+an$j(hcEs1Xp%eFipgKV6y?Hw-O7m0Px>!5v z1Y&$~tAs>etdm{PMpw`SDq;5mAW-8}(dagzFTD7ATPs_b?BBQL<<+A(a&@U9;Sp-q zley^d7B_fe^H(sLgNQA@;$)$?2a$!mfc;WVHT|%9<`QCes*|T#>Hxh*flixGaTa>za4vPn+Ac3PwwLq% z{?3FS4}dY`2a^-upNS-yhw3DONF+#+%FeWb`5fEvY}T;Xk#ApQ(H%~2Bvcb4X3l_k zph7rX!2r~L3plbKvp57MM0Pi(L`VFIL@I1SilK%|x&|~5(sZ(Cy8srq4*W7F_J3s@ zW7f27WKSz14oHviNH`d_@D%Ygv1=p7`!RqLY33G2R6T%qzpkSHpqx5(&DG&KZ|P{l z%ZhMh#H33&K6k!LcKvQjned!0!;Zqfa`)iPM1C5E04ufL$RLClOs9=e%3ByHxk?ScGK>6k32ysf)RB6|`Bndo@1n zK4cZ=`S9LpEgVt4zCUlWb9yR)Oc*q8(&U_jlHNNp7T%fKhgeoqpf3B|M*N|1-(4iz z9Tf&Ogk&gC{mz{PiOBG=4Qz`e`uulR1m7}_rnf)YA<6fI7EHFGBHy-yeQIOdKX+`W zk8@~E576=pP2OIlLsmNBX~rvmpxE9&`z6vWkJGq*UyQagKau=!mj4AlrL-Cobd08Q zn~E;{X?}X&>0keBuGDuFoi^?g={(e+=h`hR9QnQaaYp0fB}2$yQGr&kqZ2%H7$4^x zSN%y&DqPYG455R3-^g$G_o8sIQ9FLm11BXi}ZubpzONcVUL%p&a@^# z-Gtpq(-zyW&#)$BH(3zxP!bRf)VoWd8vKq+*7BSuF}I@_sF2f!@%)LN!mv4VutV(K zef38VCDWj812J!(*CCIUS$nV44DAWdjpW2CQV zE8FrB6gGHA%(o2jj;l>bA&jy}QQ!C3B4R$=)hjQGOi|L1qdSzRljgX z#*4KN)2C!8d?fwcZUov0Z$yWhTjUn7EI=GA<(Zm@*G$eN2b^B*D(LjCrp1oluq>~y zAnO$CUZ$XbK?UjUgw|bIet%&l-6<0WyhXL;^o#p=-g7*~{92~#i2{giRz7QHQdPq8 zLNVS#no4$%EXRufK>NsB*cvJ?gLUPcl$0Vl!nWI{7yE^_@y{M%`IE4Da^J>Biu}6_ z@xZ54a58>HBiS0LWLW)bp{9WT$m4b5;J+R_GZBvXy~M+upIHBX8aUSi3*|OxqAf{O zu2f_0IAtybCFmeFXO`^Rthr=yJC3gd13x6XB*|!d%UX%7Ozw$^Lw`%dN7|l8*;##3 zt?uG@mQc}s;kfhN7phiDalqXaIK{` z&F-H1Sk4Wk3-G)jjov(tl<-8!eKGwTu#43H2WprbLb%U`z!8ZMhymc@)*gxc{jiun zrd5Qy??Pub-hO5568-ad_HRY-BT3iLk5Aq#UaKYWcDTP&EtwI0T(RMw z5h#JyE;HpDyLCNQ@;5zNT3R~VP|OSHkTYd$aOV%4i#0Jk-liSuLpi|?Lm){cI!~n+kqw4X-bQKp_af%q5n#9LZg!Ec zC(3<{egF21-MmrvsGC|<@j!fqjnr7I1DBmzPT?M4lAvm_paE>#^#$}877w3Pa!Has ze~K(;<%LJOV?s7F>3}+1&jSOMCQMMVsyw%bXSJA>wV-;qDwHux3}D-t0N46z{#KBE zVR4&fP)y|!82|lQxy#%H=%Akdbx_HF7Qs0LYwHiGh z43Q7fh9HjA-c{ttGIh~~1n&S;`=3Pe=2vXCex^tsoD?(3>{~o<-OFj$H+#%P6 zPC58Ki$qXg$f43?V7M=0*NBJ|l(vLK6{C5&{Cvm4QDVd`G$@xHcUwwIvnR-M`;Xcz zXC&InIY`cMxP2e$@7XiCE{S2&9FU5y9{i-2ha{Vb0VT>1%d>)WK#=`3f-UjQ&YACH z>9Oiyfwrs&_ugm~vsd(FQ%S4#?;xM@F=m{agY*rmdwED1^RSBnI~$$V)gN5>Pg37$ z;{09Bd!e{>7>Xw$w6?~i8pyeR1vf@Q1)rp?=i!$ExApNd`}L%5N<82~?Y1yyu82^o zSqLjja=Oao8rsce{H~OQKTZesCtHPQMCjOj9=L9{clR=z_fWj3nYmfO&Uv~N)`-xi zwr&``iMZf(EOUW6-=&jUjA~jg>x2a-K4YTDHH`< z0*>30soju~{k53{ZBiyC8R%%L0vQ7dbK;r2FsHAtZ$`i+>SxCHJj7#FDUM=<+&vJl zea%4#n<*AtC4r?D11bIY3aZobG#$cz7{-nYn+AR--_aO_{9=EW_PUPEcb7$F!U?oH_6OYE&*kYjDdv~OB*WrOaU@+BTnp*pIdoHfRc7cU_>wTI^i zU9TrKuJU;Nf<=hfDFqYbP0HcV8r4`)v4Gx*iv_U(KbGc^FL2`;5W^FAM!_F(rsR`& zCp>ZR>(bz;5INfj16hGD2||tmPvh6W(O|wbYcYftN!Yt0`}eyL-3t-3 z(r)*unRDPeGGZeG6C`lqjsr=nm)XuUclZGooDw{GPs3=#L4Z)zYv@G)IMnx z4f0(!SH+#q{SMcG#Ypr`{2c)mFM+$ci^)0g)@4($2lX9<&CWpdBfwXVLF;e1pCBJ$ zi@Qmj^t+1o#|vh(ZFaO2c^4Kk)`&^b)2nw|WL^*G*u@HFMlgI$8neIc&W!XR&ScO4 z1qd^1oQ-COI(8tPg5X9uLA^0%8?V}!YHchS2DtD8Pd>bTDjyB>^~r301mRPv8A@(@ zap8{c%y6QrK<(%^jfH1(Upc_r3UVUy|H|ZxPwxjov#nN(`PlYI)r|ZvzVe^Mg;UrXRtY zMYS0^c5d{GcXpGO&CB(m-`(Vmla1C4m%*6&LPQLoH$J?6!+lV8X0rU&oZet&LLNv?Nq4a1?mFKD`JwLC;n67Q6sFwBnROu`GjKKn;jt^Z^=R z(CY%)HP!{?6LUe4zfZIt)@(1jRv@cC7bvzCrjoO33Hn2)TzT-UbP5WnPXBCU_5OFC z=B2?sqb1r+H>s45SQwdIaG@S%q8hia-8}{Xk(pzeAtE{OCNClep@h(|4#yqvS+-9= zO%Zf2dVN1x=^avjqYpp*$OVgm>F^4QC3*&+y^zOX5barafSdA{z-Io=Y}<3I@TnlB zz!LaC6`7!Tk|sFutXChvf&ztOCk&s!f_%@e0>wd<3^sr}Ihi0kYbj!KaM;+d*!cLL ziS^nd15w%a#4a_IaGf!?E)s9L|;kc4$1(`irM1C1<6}^c!V%Y}K6q2nu5IZP`oVcKz$6!};=)P{{&l6oWFF$vD*q>``! zmV@EayoTdzY-E9LW;fkeP%24WOsFUd%vHtg1ebmVn3g0epNLb*7bz2j(eQ>RrW>-i z-H`wiA@$6^e~JXM#_C3hOmF-drK^k z*ALU(x};RmOT@fdfy%sdIUjGze%^Y~$+F3LFBW%4WBSr(Ol0 zj(o|FJuDP_FNLy+sQFf#Hf&yR4>v?khQ1x`5LtjcOl#ZfCqjk4HS1i9&u4vn&s%2c z9L|YpE=cD+oj@v5rnKg&yk$2{xOd0Xwn#mnc6bO$=2oSuOkx9a{|@jMca~`x$X7rl z4?i2bNxxy7B01k;X$3N*zRFxdrd=`J0u9_fQ98#Ft(C<}|3HFAps;hLCH;|S>r6EM z*9Dg)K6ocQb5v=k(E9Cv-Cwa}!Pt0Td#Kn?z8+(Cm|{EX0Jlxm`uN#K*@M5~c87U}%kIcu&|;AJ>G ziN518Qm81_V7&m5{uxd-41Y%KY*rK^f$yon%L zYWM=-hnj>6&4y9=2_ze@;h5bas?$&+i>40rAE?za-TR-DKCytZaR!`Yw_-!=IZ}yL z3Pz#EZ;^(`3Kum!R0F&b&i1tmRDnC}-hx_0I(OzLUWGT*7%_V!#JgWzaQ3`^B16^`cbj1?)>vWZu|`)CSOZoL@(=40~F<&I&4A?HBz?AwZ-z! zck6a>*K!wppisdmZ?;)cv5_!p_L^+)>o6&hu12fE-2)jBths?5#0SBq&*sf85eik8 zhD+5-z}zsRrw5PJ)XttMzSD3Sv5ng=`dX8=VeW(!2%Kv#o`!Iu&}X|>$Ka!{@RmvR zv@P|VxJ$q0QGT@mjApn+jfomfh_Wi5DL+-iX*Tpgph9oDQ`}>{VA&r$Vc^Df2-?vK z5kCi903|B4fZo4pKp2zVM_3A*^>URAqRRT`D7erW!6f*E1V0-~C*~(0%7~5lNoS{E zyc~g$(p91h?3XyA#F#Cdaq67u7sAvc-uhq#;tX@=M25&D8A?DC`|lX)UJyfiSpv&C z68^p+h9m@PUb-`wv%~D+W|%71PQ^%jSmQVSRe8Q6MW@mY>QAK2=N9p^Ol62d!ve14 z$FyraJZG0%e2_`G=-S|0x7MXk~GpNJeW#6JbqD}2&HqI$2bvA0rXnS>(s$ZUbH39F1eYY4~ zF%)?(eykWnU!NKD)T!-|R5u7<8CB=#kO}s`%;nw$ufl#8tbdxr2`V+UFud>EnWN(N z;P~B^c;vXl$QjHzy57>K8Nc3sW5i<9s(OY;3qS8CS!kp7w6DM|LRj-2a-~DOTocr^ zot3PYcbA;bLiU8E$pgbg3EyEUa|UhvT8k36#uSA6*JY3YJNm|K_EGf<_q#Waw1)Ax=arr_mSA|Q{dq>ecD7has4?U@wdsHY!X zp?d3%-8i4+?>7}IiL;`YC`G5iRf;2gSBzkJ$$mLtc}Uk=6!o!rzd1%8UF!><{D`{8 zN7zw2v=P53YYC!qvulvrlBK`m54dMDy(7d)W87qtkJhnmam4*zTx544F%o$X&e=F# zBbTE!XQ#LqbgEuT&}B}ud}I$IgJ72i5x>%l?kz^2gATw?u_1MgdN7fvw3Oa+Rx}gD zvr@Co%-0jy45`hm#4#$%QJBJ>diB2`h0;fV*E6^BXD_MF#>+rP-4){Us^m%-m91NT zF&dK^EnzO!1xV7}Nb#?J;Wt<(-ygl=6gvtJcA^5s8?$`+LEBtohGKqXj$Zu$4~3lBnD=`;)R6(*vzYMtm*z>I`YhxcnO0#|BNO9}146;MuMq4u?LmpwiOt zABvX5FOYxl<6Dk&U3t#NCXlLcWB_;H3CRuEJ)$)c78Z4)Ti1jL#xwp@gf+0J_oih& zj^vcs=Ri_gqA2Hi(B}9xkgR;Du?ra`Ro>lEccoDD1g1Y_ZVT|N@>X1uKMIa)t3mSV zH{K0)IhngQ9(Xgt8JlM&U2cXyHH&YOuxP9L`SL&NiA*_TJG<2tj&#%i!`7vGM-?DWKT#Jwk912qNchv!A}2Bhq)}R}EYKR^2dknugl-&vS`dn# z$wTmd7)*9COf<{@*(G)d__qjuS#ochZ_go(o9udxhtzB5gy-O4)1dcDn78j(KWcs5 z5ORXb4*vM=HgA8(cSjdIhv2>LalccNoO3`kR52 zFWjKJ!+?e|p^v}e&&W{88~S7dqYz4XFVCX}$#M@khb{Xx7DRL9)nu_!tfR(_-6J{8^6nUpwq_jrfEYE~Y#MuCpe+43w1*ee0A&}0c5JG%^ zqDSco6re{*U@iNgV+tt;%}CAy=~(8-5OVBFS*!Pa!=(SqJ zZ;uW?Am-(Xr5>9U!<(^X0vKF9XXYzcGRZ74Qp3UD%Sh?Tl2UqDw||yUg8w6{CmE zC&7{VzBHKYa$=aC+vqN=%Sdm2!GliG1b8zvNj{6oxG%8Qvf}Deo6ThUeU_Y=6|9 zDL*cNQ#|R_fo_H98~s+fo3Qzq#6y&CNkzf%n%5Q7%uQcPRD1XiehpXSS5tFH`_nP{ z2>3F$zPLcDp~LASG_Y6d%s3kH@f%XdzCy3)HK7cBchY_><-MBsn~#dCJMzl9kGhNG zBwm)~{<>8nhd$opyfzPu|sO<=J{`=wT4<93H+yuZ?vHNQkIuuGVaFB zq{6khSvAl8iq>mDO)QwXnARRYk2DZN6e6U*OQ&&CRT~?c<0-q12Rg9?LE6a(}#4 ze2-??ZpUV{e%7P4GLDxxt=9Wt3{;x{Tko@Ona|z_RX-1UV^+S)MXX#-08f|1#a8~Q zaeGw0uO^}Ra{KSom)ldXTvytEy)oSAl!6+r;hqD#z%?O3DXD++wd;?lT7KMkA2pWb z@BMv@PWE$bwH^#}L-iosPA|Wh7I$v7xUTNCxGXY2<&kD!9GT@jd$3ojCfKucwKEuG zVbLwE>i5;G7DQrQ#u(U0Isjo6E<7(S*IhV1sSQ#i@7us7OIud@Qz>!siv%m3|1i<9 ztymQ%f=I3-gS-|_xQ4Tw4=h$K0VcvX(-+vz?u&LKHq%SH#-2j<2hS!l(eexyIv6SZ ztUmuyh^3KToLVcOCq_(V|3zO~j z$K&@ZJ-K{d8>SJBM;%@m{;MxNk%-NGAa06KtRq*vR2y@Cp{?uF>r>*x?7W>XM*vl-YxFd$_p%tjYC=w5krSa{ES{HSwI9=)5Ra&MX(^cbFZ$?^nM;AKrFXAy{Z9ZAD+U3Xic11TIe0)d zujZeBObvX=z2%{~F9%XL`X;qq5Q1GW_&j5(8E*TtFViV0AN^uixl$ zeN3dfaO;h&pH!X=)>EZnDcdv{!bEib7XZybGQa+uNZU}m!fmWv)lmLih5K0b&#;pH zh|n`1{9Vw1fwo_j$p;K8hvH!QPhimX`RZ4&_wEtkdO^xk5>SU`X@58Xc17DyV2a~X zXkFi=@;_F6!X0&wqV9Y#(%|Jv0nb$bP5u~$hYh&JZ7ptcTPkaWX3=Fpr7jKv%bDsv z_dxXz=2ZVv{`=exx4v?Py9V`C>bA$mG{nULn}4qUzPxdgXP~mvt*Kos^=?hEOY0aD zi(8)h-^%(=sc``IX!TLF2753NdkVus&tgCx1OI3tIW(rCn!WxpUnBd=!J>Xl+N^_K zvW(1$&Y%#<{}Z)OLvIdX0M%dYI|uzITn<>>Soycm|D7@r=1rkTS#$eq-*m@oPrJjl z2P8~%UJ9Uj{ihbuT~YZ7x4PKjHo7%IGcNX$I;2w0(PJ9j$^*iYxd-BXQ=9HR{fFZ9j{FK2CaB zPUPjpItEN1seRZDVv>!{V(lqmAWgFQ_{Qyj1(s^Sy`uQ{93E|Ge`%wR!&cG$iUSg} zKPG>}YfniB;d6&xU$GsK!B264+frN)e5+(2*6bA1ruv5$?>sblB#_~4WPg}VQ^hh7 zbz(SWVPNH{H4xQ|NW;q>2AMr@-QM6Zw&{`c6`7#xktn|5U*r|6&CUeL&!yDTl z#;R*dU=4M%->`ecxObNa98nfBVYpK)u8OR-0b zgUh5EK;(f%Jy>AyB=GQ?iW8=@sefFM#xoLnYg^r#;$k;|?~ygdMR@KI{aaG|1O7Pv zNIpr2>1z1C@%)P{C@Q?C^7lc==|v?z?`I&x@$_B|01)BXzfH@(Ps0b>P3~G%CxnUD zeD-8nR#}R12K4Gs^95I8aN+Sk3# zz3E4O#C3GS&Up9KQ%|}7@u3g7#~yvujgO7Fwo02!+}wNbz3#T#ZnI>Vka@=a?*IKe z?qB?if9W22=ppyDuYJv(#bnN=jT_uA{?aeWWXK0T@B#PKlTW$9p&^-wx%b|;xF3Gw z8`Yix(qDY$)9(9^JnY`|rZ>Ak{lq8S3;XuE@zHU2{f*bVcf8}5-9z8~uKN&ZId%-Y z9mhu9C70}SKlgJ#?=HXma^Zn;83T=f^;du8KKt3vx)Uccet~wVv%A~9?8cY5x4!kQ zZqp|FZZF)&Kl(A5jC$Q`U*|sZk&n28nCuw`+>IMIxu5#UpLBP=>Q$j=o`f9!zYl)U zJ^t9^SmRZ3JLxU-PB-=cWGw zs1g3a476EQU7wTrZx(-9|0DdM1PlU_mezk^$~as&{A`bcBSSzTk_)<`IK#w^z6P_1 z#PqAdWSluuEfrFLCeZn2@u@FDWirJi6eT5R_ze%A5(c1_L&MaxwhBL6*|777guv1E z62BKIJ?AX{!mF|;Y+CuYO8y!D((3=YDu1rtJzG75kI%grqAI>S}pDP#3FTcq{hy8W^K>n9hj9BYa?%1|;gnYST?55WAQ5T|f0hgudnx~!s| zLIW{3{G9k9Wpn`oyaNniZ;x@OvxD|s)SdA$#l=dhS=4);Hw^a3?EB?8f z`jGps3?dI>VpWdx!>$n43$CJM8mUJtgjvX65>vaU(LXIgh1*d6z^u5Xmdq1BKj;XD zdKn$@YX4&d53VR>`D-eY9)}$?kU`ViA80HloH!9Ckc5AD^$plDD3AK7RLrIRD}Eea z2#8p9&(+CrWvfCC$cs+4S>>Ef{U`LmKL(2_8&*XL$FI__(xRRWapxjdgjX<7aeCr8 zynPFP4&-ch8!(X8U0a8V)5|c35kFu_x5yg6Oy(MP?$tlmr*YJ!!x;QIi9vo&Msvra ztg46Y<5TOJ>R?I!A{|HufefEs|B!~l^eJQgqy96L5TZ-v&nXBV^<`xd%751Q0fB?e ztp9W#rNZUQ7*vTnM&_>n(f+HRPu73pK|Nz#^aRXV|Al`Z)o7DHCPiy0s^Eus)HRkr zq|r?KOZoe@P)$ctUhwiw+xh9+KTQew3lPaQ3BQIaP%CqCU|i9Dgfe7=CY@3LNFXQ5 z&frKl?$$W%p1~B+g|Hu-GRJD(#0g%&ZHQm+;m4fEZ}degKP^XkXuql*CNyM4bGC%y>4MS?iAVE$vuwrYSnYsTXg~dG6ls|>S7FPP7@S9|e zD`u6!Qs})2h-v0#f2jY2Oi4#4awi^WOaYrfdL#@t|)dbxYz zaP9l<0Q!P#w+4z`Zgb_uXqWo2s6$u0r~F$hi&6ekbVhv3@w4`0Lb~=0 zCT{m*(b;2CmszhzvD1Z%(YRp4i`I8BAQ|Z^(C#y4CjFbi{v$tS9UQ!Ti}Hugp#MW1 zo$L1pDHZ*f{+hf6_)-4Uc=qX(n%U@otqP694%RbnFC=zMb_wxZfB{TuQ@5l3D{myn z_>1@%3O9*=OUbCH=+Tcb1tQrsMU*FXTkAJ*DlDyk`pvc2_({}s{0q_cLt?y(Tt{Ev znKEJn*}&EF&m_~~ZV_|-}^mx49_>d@kiXnyLMsHO$ za^%P{_sLIw(p`DwmF|~+`5l-zIpsd~(T}?S`hoxIHg4L89X31N8-C~w?i40eKK`+f zyANX$<|Wr&>n^(ZVu3Mu_N;pn6FZ*<{8!w5J9ge&=pK0BLHC(Yf7<=-dw$1_VF%gk z?tY!@>UrpU54lfZa_6I%fcnkf{0*5+bGy4+6$t z|Mg$F)2C0ncm66S{yVz_-`T-4?%{_XmV1d_`N~(gT^C=1$(w`jqnOb7fB)o9+@+UY z<}SeG%+TPF`{O_SBka)G=id5LZ*@B_x=3~h{ZCBx{1;3{y&tmJxDgZYRC;qPTlizC zM_(v^#79508HFgeLGm#!foEX|Qr$p+h4Cr)lJxREJN(ntzkq8Jex-71{3ex|`JWqp zlXIQCmJR<_inHgR9L2I`*^;T)=g=}y_?WoyCPN|q!Un*hG4~M z_V8k4$CQjp2ttWlp{vp=0OAp3L3usn#4pHvI*+M!_`wlTdxL9@aNtPE@>IpbI(PVA zYWZjUORN9qmi&1?4UYyJ#Af`4P=U@|06ZYAsE80bJozf0h+J|OM##A;So4z zF{n0*L7}77@8iS#aek&lYCIB!B(r3&hLT6kpz|C#X1{ZrrtAQPwZ=dorzm{_15(grb&)tTAapLWOy zRz=|eP>C<_$@^%!QLk39-gp60FPg3YG8jU*kP27l^C&}gp|=EJYFE1|ec1W3Bk&^V zJWlf1EdCyx|IQ;z)Onqi7XrbA4hHGDJ3xkOF%dY5}|7?FN*lp3qV=Bo9 z(RiIR`$zaa&;#8G3k{fq{u|h?VwD^L$BG6pUai&s^60J}9BsA=tH60Lmn5)MLYU@g z20!mW;I6$OGa*2^qilKCRDZDzB?#G(AIgDg@HAOAgTEVfqaVkYv0f;2K`C%7Y!&dZ z{unEQY}WR-Kt06qK%5)^y(K#(yg6W42fK^oP;7_Rl=c@OU;}ignC@oapl=lmGPs*@ z9QHttOM{%OjaL+9{WFG)Z+iwlB~!iq@x($}_2n<}5+Jdhmjixnf6qX+gDA&79QD_y z_1tq{eB-7gw9hyO5L(4{iFK1ULGKTmfBQ?xv5vN(zBVd<(!m8T{ir|f_*I3RoBg4V z@~AZ8i!PQw513*fc>ue!bOKu|(QMma+8-_!;O;K9pTri+pGUr)u04lV=?M(Q;R;NYEVRAIqP2kl{WTwBy`SbKE_J z3D|>Zw;qEoo#ZpUBpWl}C$FFMRO{ z-as?nc%&qEZ*|mGiTz1J?e>e2w(aC?QO91QLZ1=mLi5yr0QDEiumHj{(6axe%@TufYb@o(zrH zC(ECc7=QP7UvziheUJOaU-)@!@)ON-H{5W8d+&SR?{8EZ~tHJnP;C36F2Q`SV)Cq$nL!J4$ybE;JX34S)O}- zkNd~3e8v5{-}nu8*Q@W6@S9$C6KH!{cIceJgv@Fj-FD>gVWH{r%P({9de^(LtA`67 zoxAncTU|f=AN}b61Rt+*x4q(439n#r#)%Ur-D_U+8u^nz{Ir3N_r34^?)%?=L?&+b z?%(Skef&{(&pr3Z1eT?{aK{e!2-1{X6h49{%U{zjy#9sqZxVl?d4cqQw)g{?3ynW8 zM$ht40`Uz}WsaM731&cC-L3c=*ABLU=DLh!?Q`SX6hvaZVt8~71thD1QA#X|x( zwTPM@;giLvnGLyS@^A7;6x@?5VDV!nv-SAF2WbKx;`HUw zdiiJks$p7Bvi#>~e@1a%#BVaiCL+sO8Dw6mH|ya@9w)e?7I0 z?$Y9i-9!a6S`xq|1aYzxraAnj!A)fM5CjaV*ipFyoA9}ElB=2{jchoi?eGR)E={xC z4e(cR0dOCVypfNkN%p^jRqa>0{@Qj7x7+|xkPx$-#ufN)0zb>C8v{rkHJs@mV1OOK zWCyVa_up(QZg%SmY^k0?{>|aX2N(t}x+=UsL!~A~>jlWkFix&r<$i41@|PoqFkv`` z2`gSm&5!ay>>xRUqh4eX3BUc7jhJlOh{0}t)R*1)Q~$9J9UtWfa9kmey5ovy?t-i0 zYd~rS1%bN83qCop*NscEyDx7kseiEhuJe;nHE@RN{@ zC{-^rK!5BTuzf-hT%U^#vD7LljW*pmgHDtlvMqWD_)IaLx zboPf*T!q1>Hq`m(JUl#ByWNnX9$7_Dv#tLTe*u2h!h*&X?1}|YQ6{uUofy!#vT`qx z;Lo^fuKtrWv%j4c++6`!;-pOB6FG1_zD|&?DR#oT?T0?`*b=NxWfBbL@@SQP?yI1n z;+}I~#9>pnyG^xgaXj7?0KtJsbpp=6rS)IJ>+FwbM`WkkrZ7_e4Q?8v;G_Llxhx)j z(oTDSsQM6&2mLlA^N83c4&0{nQD-_a0LCM~dTMJ>rYO4#2E<_dI5^dYVfiRtt>`^nhrvhK#A*6pT$`^e@lQMU{Ycws965OsJ8rm> zjAU{^z6bpY60Nx4_4w#(gg=BQ{5O)n%GIC&k}rSeSLaj6W9jjap^Z6QdkDu(J%+k) zmD_~B4ovu|)<`OMQdBYbH-5q&o}z185_-vqf>SWUS=S2gJgF9c{06TX+woAVG9e|EAMF z)gHp5tD%;nT}0c+1t#iZ`BPVqR=*>Y5WLUsF#179@YhjU4JlmfE_JVm-C!R_2T7IP zNb$L#f03Ige}-v!;GT|&Z(~`{bM6HkgDiHFyIQQQkg(v+IrInni%pOf{wlPMybH4z ze$;VHlCzDQi~UROKL@}GUmA#jpE?gxLC5;ya>PS7+qf7|IpCA^NZw}Xe@YtYG|fwY z<-%wS@h)oZp>|{Pe`n=Y_@<(6aEe|^XxT7q-&yQnKjcP=Q*t!u zXmM5+uBhHmhm#aw#5fB`n`15jk;K2uEvgQYW@HJu5hWUGYd)=@8+PmB^j!x_9>H@5)`{p;l zEt4uY-FOp|1h;F~#qQ>pzubN0{`+wk%~4ElZ1cQS-1XOA7bb0(VaE<0L0gfXH8yF( z@NKv!r>ncuojr4gui|J+2L@JSx6Df|2zd*)dE;j6?pfuox#n64H%V^Yx&;#_-*-bp z!7Qenl>g@Oy!o++vow;a51G0|n6({)l%G`A?D5>AzZAO)ww%&yD}tmp>P2 z5|{pfVtMg;W*X$>-(Ciu@<+W_yOPeCo0>Cgyu~#FE)M=0T6piaRkY)Ecv%%6*vd-^tc|sLJQsEb;U0Ec;Acx8?Kb%g~H@qJF)cXt{Y0&YCg@G zI9LIjyv^fk*s1IvSHBOqT}aOq3P8=3gPdX@q7w6Vvpq(GBeVi;~2L|EVnN@s(v`PFd z4`NfwG^go5FH!Eppjj`5-vqMYK^i|fOX(#kq9rKtm3@8&)LIL6$mp?k$B$aJj zg>u$E4kGab>U3?Ne2jBd^wjMihgo^t6E2tcAN@*I1KK=|AqHrL1uBdLS^z~7^@%)8 zji0e_b^LpP<+wTG=Uo~+Gk;I*Z}CBiOJp(GMS9z@x{-GQZNMPX_O{!gL#yONoRx|b zb#{?4WiKlR>uChLQdjV7zWgaD5tjc|7L9+F!D^G_Ygc)md^!;#;1elaGx*7o5XlTy?*6Ge^VYf-SN;_ScyYWQ2KdfY_Q`!- zynOx$1}H}`c*{D#3DxJ_mvIl*132@21MUR72g7(<Kn@4>sb5`KdESSqiw!uUXDtSwx=`;p*eG@#gJQIW ztYykKIm91d>5zYJ`cJ6(FN|C$L;+7MvI`6zS&2)WaI@EcfP-$a?($b)pzO`hcMi5u z{b-Au(LVt)1^-&tNHkIro!5T`=wKqQican{6Ii5Y7W&UTJhn=CXrzCr1z3ErroaFY z+8=_J9tGuqR;qvc99{2=|)=q)ORj68k1e2SYm*QYT_8fJ!1!J-*6|2$6=kW z#KM9X zPpKl3%v4u}2g0P13UqJ^uSrYG8}Y(Ff2Wpz7uwKHw4IV$@ThmT`p@**UU?-;^q*96 zv4h&etw>1PrvLub?+W*9y^R402Y$5K6TePsi^$JBVN7@;;z*_wfiCIZE~8y zdMs|xRB2i-sf8&25?GcqC5gZ~{>!v3Abw#!@^7yxeun8p67VMU)~Bgcpa9A|-@_d- zzyJFm&{u$>*77Ja?mqc0dFFs zLkADK9!$(^+OpZu;i+=!@9)Eegr1PW37kWR58$}6i(PMDy0A;L?c8yJ+#z%N%t-{` zI~D)9Xs4?y-pR?745!YvchuW$XeM?v60hi~4%n&d0Ie19GCrY4qHo%~ z*}d&;KkYvB;Sam_{?6~X_3Lo^A|}vYdj0j7^tr*U!EPTqrOT*efZ^9?hzY?6kw6O| zl+;fUc&7l(C0+)V+Y5#y2@Jn~h8RQ9V*5|(#LW}Gf#Gv9|4HmJ#38k|(ei8Z=%{YQ9RK;!xkO6$@wqu52Wd5Gth zf4WIYB~*VV#nlDKs~|)ADeR97kOcf5E*cQ7exa)asR{h=q`0~O!!LR(9Zr5u@wgoT zC>5pguYhU)XOABM0apjI2*+>xH)MhT>Ez!SzlM_JlxX#HfH=51zKnl%#x1La`5z7m zs6#1WfXzB>Y5O;V4_BT=J%l@%`YRUzTOVZDNH>5(5thlB#6P%@bSXb3f8{B~?~@A5 zGXM3uF+cp=sl^>LvMT~Bz<9J*7Y5Z>FM0Ic8r((Dhrx6nT*B+CDbG4~>k0Dlfmz`} z-cqJ~sMbFfT{HZ%3<$=?Z6a`m!CyfWg&mX30zaoZN;o2Tg`d3F2h4;&mZx%JABA(P zf5vbms4;#HqEOY7dIQ4i^b3XFFFp`9#l$0g0F{b`neD}NrpsuQ-2_@BN08-CL%FAlWh zG63#_o0b3U@ndiXHaw_wAjcQ>Eb*u1ZyZ^9>0qWE>yv0jonFZ+^siC-%cH5P^%U~>5xtlAa1C@%26u7FF{FW|8mklqu%VlzNhUUkMqPi323X) zUZF;EXA;Z47YhowL%kp0YXjI-*p1yay*Q~Lom_3qe{i;sAP1@WSxVDf{SRRcV8qGw8y1<8|jif|h_;^ntN)DOW1+f>eAdSl@MjU+3lB_5Hd zhhb?sfX((tCNYr4!s(&5vzY19Zxs!(^5>C&SRBdpz6>Sa*8{>UIR?m|2aH!9r}m<& zU*sP6&VzC<&ZCcg-+lSM``q<7V(wRdEDX{ z{$X7-y*D*DN6Md*fn2oH$o_C8`d+lRhil)(T^f(OlbFaoTf7oSgzdx-@hdQB!~sj4 zfTnm>Ui+i_mBz4_;n~`k+z}j^cnUjSg%5nY7g#hg0U7WPpmFSe?Zo7DaOX(*2Y$fy za_E2Z+hiO1J6qjNGI?{zJ>d3Cd=Yygam*hkEV!WMSnW}FV*E)rR5|LlR9=dMO|O-S zij}8-QTmPQpSAzg(&M<}@Hyxx4)GIfRH>ph#zLN*mD|yBU4k9&Jla(46o;Jzp4U+| z^ZJ|ZulB1%8Y+@d2zq>&F)Py42%eU|iK#JVsiiQN^skGL%S~NqFM6Zr$qm*Vw5d zuV1&`-TA6lHBN$1(`^+^#J_#pHuv{KBkqOgpAVA_f*(JJaYxLVvuAL;*$&r@oip1& z!=Xb5-N{oY-D(_Rmbz!3epd1i4A??LlsI6B{D~j`*iT>>Y4PF+yoyew0O=3kxa2X) zMcxocSZTPv0h2#2j=O5QaNo|e&peAG+paGqK6u~|j%7QY?8eb(A=m)>Af-LQPn`q) zZQHlW-`%f&J&sX3?mqJ2kKp*VPrBP~y$$yQy;gEJ);~m%3Cc%P$*+}>gn8a1!Y7VF z<@#q(G%bETY`!BjY)d~yq~yX6om~Zn&3O65~fv-f-x6}3!14ylkAcR@B&EW^Mw!!gP;&^ ziku|Y2#KUu6B=fMq-!O9Ei`l=Km_p$ts-I1goK^D{FC3Mlz+yb<-gGS$BQK|to)#u zJgy*-)%&d4-rh+am+Gx`e4+6hnw4Pxa{XJn`o|q%yoB|I+E;Om$+H+h8FG);J|#!C z?8bTLYw^*_BO$1_*16C&62J6_;^JoowZ9xRzPj=@jH~k^bgU)hoeIKZ+}_^G_CM?Y z(&_)=_y3$6O*2qjEJv(7UHfYcP&|VRkB7x!UxRKJHs1;^cmn8cAg3ZW`1vHhLE%K6jPeeTKHXXSGD zaqeW0?`_`AwAHPv?Q$2k-R1glCm|P5_}WfpbNydr`^V)xJf3npCUMrcT_wA|p09ox z(-se7B5f2qMJKSh<(p`m4&wNWPI4H#{)v}Aqm|RR zhw>Y4XyS;wptu!!dSm#8RvLvsQ9b#YgZ{~G3qKYqJ1`&x!B2U#nE%G|hb+XA818}z zZ}52j8H9GkBJ~>$aRyMc_+Jb3fcWaiKTFBNizEnnZERI@NBlQphsdA(*`K-3{^e)g zC6`=+W6<NB z`(5|duYV1bBQJFuH|ddU!f!%C`u$12$s_RZNuoH+aaRqU)w0$BV z{J~wa3vJXz7rDRr+t1@3o7>!G9C1cBJ~r+?|M}0$F>2)Boa7QE@^C?n%1!H-wSP}M z@r3)!&wSS1cKa*b%Wiy`Wakc>7hUrr$Pq`0`XkjOLV*SzlrqH7BWUpB>9sPFaKtw| z{zE(_1NsHFg*3$PsaPQV0>;qdIbHoDd7eP^ruuJ6;hCA5e`J+3KA}PizluM+N@CL? zI17KgCyJMfZ43Dy_m#v7FEH&-~}| zZ&v@06;I*=XGku{?&W2k*jZ!JGy7u~-x^G@LRy)ZrTxkJZzX6JSX+g2+x~J*aG$J* zAHksNnc7)7vfz~4gB6JPMvHx7W7Xtr(2mf(aYkwd5YbP%Y2AK7&hq z56hho)LL%UNlRrV+8^HY#$89e)VK@wqX#^9@opDyKZHSHGUb#SpmjA3U5WggO;Jmt zJemC=mzjSrgOa9GFy~YGw_)$uOK=PgjsnBS@Cn|nfuj^Tfpge>&vjK-W9RloxCd&t z2utdORt5}g`0vD|4w>|<|H=2I)4!VASN(?U;yvM>!aj~OC|MkrRPAt^E7!`xkTsQy zVI#KVs6_UiwZ@-c<*y|af9Y$T{&Oc}J6fY&>}KeIg|1=}ryDyRj=N`YXw~y*nXm^3 zM~CsY#J<`Vx23pNj{g)Ym%aX33&Q8j_Luh?t|>0Y4%yd0BAZ=TWfdf{30kQ~B`O3D zijQ-Qf2(~aE0dm-HGjM%5mDl8q50<>i&ZQlyP$S64vzdTbZ=PxPUEh;gYH2b-!6wu>L6t3m!Me1-)jCF%U=XfY2zPwj<1n_h9%!GOvxQ&Ns#1c`AygV zFwj>1`mR(dUjI$xi3svX!Yi-3%H4C%J?>MV`ji_U8Fe?`bdzNNhky8r`|fwX>we)E zf8KR>>-fm4?|ilU%Kcw)|NXyz(Cyo|*X_bY&(Xt2FbVQG?8xbIZ+X+3T)V$_hSz>q zG4WzYq8W|c4KrSy2)km8*($>)5YCL|K<`9#T;_Hph~yDZD(0`}^Hpuer-zd);-G8!!PknRKx)NfN-g z+Jp+QySv+c>w#~(Z+z>U?nmDEBW~Bl7r7%xkGfBN@{_VN>Lo9^Ho$BofASzsp7vr? zqonI65|DVN@>eLtX7FMN!{kkgiTWpjmc9Xg$)zx-!(WDAQq#~z{HOY7nvn7GjtGOt60qIDDz<0=374zDO% zgr*Z|Qrw!HQ6buUnBN*vi6$(@(SSkNl1$SE{DK=v#39aS(TApGRIBh4ul#{n^@DPF zI9o_3DnlnZ)2(p+msHkWTKaZ9=isJ-^sz>F+nuFV1y)VaF z7&CaT6#HW&=koWq7S(~SRrY@=mXA_ucfmvC0{@8b_xwjWoGIJl=z0pk?GJIK{U61x zp*$Uc$5?Hy+=#Xb_bOB?SV(XT$6Vt0v;s$aVn^8iiGOmd+jii-7v6oyLsXWp{wZy< z`~KpcHNC}VcX9C=^cFFZ$_X1O7b(S1M#lEJ#y|N|HC&qd*9%+Fjs+fVIBNFf#2$Qq zIP~8K-AHj9-`d~D`%$+6$JKR1PkHd_g2r%Hrq`@4=0|RwRtVMwZ zucHVd3pQvU68N0u`cEJL8VlaP1uRYTPY`eW>9@HxYu36ie(?+LLm&AtHV9SS0N#J; z-~N(&?Q8YOFXCIhX0?0guf5ZK?4uubU;XMoV&~15U4b1ryRft6$A0|B-4$0}70B-B z>U3MSY<9i9Ebr*L5WaQmwh(Uo^GLI;+i*;AzwY>9j@7FNuuBHI)$UJI@azpBoUq%& z-8~9_0LQm&mT=lQb$8wM1Fo~ZQ;snE(?9)$h^?ou$Nf0yebbM|i6*9Aw{9(thTDW) zMjnxWw0E@Qn7A#jf0Z5sw{z!C_s(~|(|zLOAD79RHqr-LE`=Q4{Fb-49T)8I*r&2T zA$t1u-zVdvT>cgT0!wP(2}bl%>wi=DNhkirsUFXag$g^$Q<;B;l^FMLk$;ttreXb~ zp39#^_;d(gZv8JMvT^$-lQqH&8A3|ZFFun-1l$@czomo`LXsi|Hu6oI-)CSNx>@2M z8^t;3M{6*8<8BBoRy%CQtM6=g>(*D?s{W`T5w4=)Z;7lq;unQ(1U#atLlh%2{<`9( zXl7adS^gz0iprJxrbto><_p~-%AX%G2XG(AleJG{HQE6ntGLT5cf0k)%ReDn zd8q#_F&ZOF!I^&*%naqv6_IwAz@ggr(2hLsu5SBj3`cMm7>^}v;7Wpy@ulD;kUy*j zh(VtfgI(bZU{ji>Du4O zE(iJS#u2-`4~oZGT~hp@44TIZp}ys)f2XnJ_lF{giF%!-!(Bqbt8b&P7zq~J+eRXXyk-k8z*k`$BTN&(a6Pk_<8 zV&zY(SH;f5r`;(WC;Mpa&t>tIvebqN>|Jgrj*r|?c?DS1+Zsw@;fp5rok4=C&FvWIFR<$)2vHL^$j^vUFkk3GR*jY4QbJ9}-y}s0tn>Zx zAN`Sg=;4Rm```aQ*U`~g7h8TEAD?i){_DSndsi-S?|8>MBytMWN!)ZPJp3t=)CZqD zdCDCO|EYJ8|3{!@Vv8m}ptIZk_AI#7pYN#>d>LQ>Waj zzJAw<-8kmP$H(2tlP57YS`MGU@nt8FzQ4cMb>Ti8x-)0b;yANWw+0h3m9}uhhZ{ur zFv3@_UK1x-kp3*jqen)D-I~=%U-6SY0?A>l`Yd=m=Ejh3{rdH?8^=fK13aESb4GUD ztVaHH0&N1jcuwNzxSpO~{Kbi=;gJ#SI68!UXGK;UHf?mB9Syz#>f~p5OTm1htJ6OT zDpp z?YaG<9CG_lA>gk;A2-`y2nF@Nz1E8fjZ57&cNB+;9mL|GZ{xcdH48f)j#M9Z8{4kN zB+h!7$nmCN!M;Bi(*B;rB=m{eQ|?rC59k|5v2#+l3p?*#hAF5Q;b^pNVbVtH2Kfg^ z4RnL?!Fi^UOjL>C!9UOM?~Ff{KlUP{A4neo#`9@n^yU_Jv zF${*cwJcVM{7=>PLL*1eUJc9fgWPpJ+5TAVqJ||d>z@cC)H%Eb|ALi2N50x%BQ{H4 zXlLzqx3BnTnLOmwHWye*#B<$+2Eq z+X7jW~<5y?rE4Ve7kpSdJjf;!qe zFqszP8OSv4SlP~rli)aZiZ-MTyIR(-Ul)Su>F0er{>~j{wlPlL!=rcc5F(t9>+9`x z{IjrB;AFb$7~+a7k;lya3{nvuUx6Eh|O^d|gU znqdDlI%U_A=(8F8Oqrmxm!|Zu0c|A$n!#Vf9f@fQe+k*tFCa6p82m~3mvbsXP2mr~ z$`Hca0`SjjLNxppbOj3#Usc|BN3J$np<$uD<^BoioeB zIQ^NcfevHG%{Y!>YQq`PJ;ge?FM|Vb3c%-HLG~x>f7XBMZX1ts!X=<17%bwkP9wN1 zlt(#n0%ULXYuFF)VjOY8&t2UW8``a9(EhU3=BFL&=TY~4H;Uau*n^L{`iSePY{qUl zOx&1_WB&tw4G>R^Luh^dXG#k^7yBQ=pUEb&D#78$3nlX(Boexg+K099=IlRL<8>Ds z2bNTBZ*JY1lAn!5veC;bTaWhccAxAn@u!un_Q*Qt8A>@aEyot&7$D7@3f4v}R zbX7SjI7V#1U5JTKtP(B`;;6J|u=C+0+TTI+Iv;mOtB<->IL@>OM+LE^rt?|FV=5LJ zs+QM3u9craPvLQQ40b_wqk|~+7J7^I*fn%3_`3j;0yuJ2%HJ9kPdOgO!}7O(BK~D2 zf2C<5%D;lXA8t0p{bYAwScb=@9g(Bc&fwk~4)mR^9E6qM;OsP@xwL<+?SFBg3cD+6 zkE1Vp5`Du{=o7BR9?^C9hVv`=v;Hlc`qzOY(^gXhE4^;8dKgP2pVg!L;5%M>0_s+A zYbqDPmhjjq*g|V(r3y6H|01(ALz0(%di_5?tSQjKj|aOH{on1|w_(@F2A4`|Du^AThaTH3rbPK>Q0(!B3y3K?37jv-m^y5)VE% zaD@JshtKqav4r2`&;Wl*o)N{TIg1B=^I8;@E8wq>Ea4A1g2zyW0D632(A-i5b^riC z07*naR6oEBU`zOY!W6#&vOFpNM0N(RDg1yLvd)Cx08fYC;v%a?wLVk+2@mh{!|#a- zKq9(^{QKx2f4qmR3&g)s&=7yhztQ4ZNb7%4l(hU4R)v0+KLjYV45Xd$_%m>ZUk?k! zo6YFdV0dX@n1D{f_>6cFKnyfUOk{q+ta%w!pDZ9DL1`=!8h%9(^C}Dv36GZJ_oxG2 zQqHi{oy+`#&rnuNA^(g&%inB81O20J4r4HTfAyc;p4t~NKs*eEt)k<<+Ff0FD}HyQ z6KPw5QBhe}SCak7`k(bb(fR38&S4xw3cQy zB#rzmk^b}W$5XX^Zr{Y$-HGBEss9|<@5k!-D=YWHE?k0vM;jzpV-A%}c<^s{(0oi{ zOtTc+%d7boAOkR}(?a+E)HWwdt2 zJ%ewzVRr=gNa3JT90$i^`?k0ny{dVQ!XxY7($~Kl?p^AE9lW~jU%EZjFSuu`U&43y zkULxKm%DHJYTIBbZ^m~wb}A>;e^&Y@wggu?NzwBMP6pmEeeTsk1MzD}mcah-ju;-b z#hoTX7!3+sORZEwTzU-4Kli9-f!8tUt=!txODSW^8rQG0TXucef~(9mr8 z8^I7_sg%IaLdxIJ)Qc$~S!Dc%*PcdC%kZN-tVjZGdQ8X*&A%a8g8DD0joEqPS6Dj# zB6g1=Vp#~Kj$zlqW7Yp9 z6F1z2z)71em6zbG=T~6O*5$JDN2NzGM&q(#><<~wu$Dx6h_v6k%F4TIz7>tR9hBL|EoCmZwQkjysrs9 zmJHFeXDCnoT|E4PW(xj~;0~;(YM+<85NHS5us;t&EK=vB(=QZ)R_nhK4hRmWp$=}! zQPw{S4+5f4>g1#`skD}+{7HvWk?}8d`^R0P-0ix)a<$up6U2=mDEBx*m5q=pQ8(Tm$_d ztDSXE;7-zE>>T0_a<*BWIGV5x+|gzIi&9uF^^c1`xZA4}%OW=w*SX!5*Q1;|WRiu) zM?Qy1xZ{qy5|2q4hMxxIFQyWO9HN5#;pij6MFFVEI{qj+&9IOzKu3@y_P^AfxF_twe@nlZ@>eZrP5n21_*@wIqkf4E@Ut(%jB=FL ze@yRq)K;i?@}HVYp2Zl+(WG7-EuUgZ(s_9D2#I_uybDo)X;I-R5#E9sPGdsAhid8h z@`!xCK<7f^S6Oh>Bs3x<%j9*=^B={mMRmTFf978#0G(fM<$L9?!IQ7Zus#Ius@Pu9Nxw?Ih0<*I*LGOAgzo%H1;4{O}K z+OY;Lfc_QuWa=q4;wK}fE>rL%#b^byDj$O18M@;iD+@~3kw1C)ciAM3|Hx% z#%f>w)rtvM!3SRl?%P<6`pM%I+OYFRoVBO&Tu$x3l1FhW%enn)w){7$+XF zgVW0w#QrRu{3+O6|FZl=4X6xoYFYSfP5tArct3VJY)1Rb-8HI@oV+;=d%%I{YE2hT zw6gwB#XpZtfRAOzW6K9?htUt=J(ec|C9~H*Y6EiNKdU4sD#Q32p$29Z zG82ZNfHj6_D!hwlxqtr~dmz@>3oLt{0&A9_N&ZDPOUVCH<6jZwZ)KU3KfGGx^DO@r z!N2jE@So_vun_cL6be5kGkfPVCXzgSpDX_X+TyoAw0p!-!y@!B!wb5V8^xdO*)t~j zv|uLEg!)Ti5P*t7rI6;+_*ycZY$+ubUUb$7ZxUg#3RQD6WrV5elOXY0K0aewyog&^ z{0aX+r~8G6WucUHiBMt`nb1}Wc^pEwATLdo`^HG{qB3!54vyHK7h98Z{73N zf5cr)4<|aiRQ7kmy-@oau1HZ?T?58vdH#VB@vn=(U6+kQMnVh-n<&al~^2v5k=nOb{1{i3$=ejJN%r_ zwDkSYkaloxs)n7DoxyKbJWeny*Ft0kx|bLoFb9>C>it=2gH(&?M} zm!|$rU;mXt(r46_`B%!z^jk{J74$z%8vL{8Kj1PE23Urd&*%^MEl6T5^L+6e91>v& z77;(Nl;yuT_{ojBnc9C#$7l2W$6T|Qe=GQp?N6QlgWTru8;6Pgw;+*}m76^oY4QV( z#TfsZ62IZK=X~%J2LJs03xvhHn8Zc!NKvyCi1IQ}Rnr$s%clxlVVIC?j!O-y8dj!| zbF}F}CV^q{#f!nD$MQ3&;ZHmg9Ma31{b;D=UrhW$7dz$@pr9pIdMG|m2l%7hOkd6= z{*^Npa_Z{mJED zE_Z#)_J?xd8Pfgu(A`pdDYU-}EAA)oH-bya@5kWLGia2SuKnei*F!ikVQ=*-ZUj3N zSYjQOZXB!d223{H$xcFOKc!5qkATqBW&Ka3Vg9WDltiohU);UffvcanvvZ<0CVj&F z?wjsl^*fl-84Vu{t?vJgVW-U*cgQ_g{jxiS#SFY4n5$uTU{ZINyE}HNp*EpD!DI3h ztqRpHcqBNampA*-P|KhDKa^$e|DR9aKiqfITiJs4?2Xvv-3yE0U=zl1Tq!1Qil=np z#1gi@Qd5C{4W^g26xZOs#~;TLZ&@6{)0gXiw1&|}LMo}t_Aix&`R8Z< zX)8z3V(qJb!@W@b2LW2C7U;`vbeB|q2>seVl#JrY@;8~M&-uw;AOVE6-|`;RK6ory zirD+h_={Qx7E8X$ZNQPNy){fA;w~5NxH(;W0ezzfWLL5Q3+34ae)&QGIhx1k6!O$> z^e@}~2bdO06Ono@jHxKwkS2IcWHC*hZ!Y`?5P=XM63_;ZMARqK)Ee3}enXl9gWvK? zbU+(CGvYTPHeLRJ7)V$E{6>F0eq(p0@9&U~p1^kSNOYjLlvrP;!r$uek9z(Cevm2j z8%uZz{J>-M3pbV~3POTIdS%)FYG|7OTms9|Dju4akRBSLsAb78e znAs(T^ACN|Ulkt;1GC}GXOlx33yeO2z{V?un>x$SFvHJGmWt1ihuTr+EdOHS=RQsR z2O;<&kwhwpRXQYTG4U@o{~5p6yCu@UEdNIGugS4cL)F9BS8x>dZ$diz{kSkO9t(qf z-axEm`;*JRQTfyAhT=VM?JtkY=qd)>I;^1WC~#B(25jZN8~2nPUX(Cx1r*@X4~gE+oz9RGNPVIOYW7{EXhk7!wJ{K9aq|FLXaT>j^#{Bigg z>RD&8N(MgJFXZurLs&jQedqmZ(IK)$`iCV9*a@@`bR5Kh*jd?u*Nb74Rh6Ci<0@DX zlFPrP_V3)(|ES&cS^IH5e*f@$x1-jNw)axBYwNIVf;(?GAbnc)-taCNJ5GBk+F#Q@ z9!uJZi|jYJE3q>E3b(en94q551oiEq{8*L?-ToW?06W{CmfIid-xzvebPscKbJ9PKu!#*7Mc@wr8PobE;#m6jhh)`{e+p^xWA;CWO!le$ zWq4$e9BVBQ&!itq$?jc4{62xfuCMvMUac%=Df)c>aN6W0{_AJGP%;a@2GqxF-!Z2%enbsom^U)TQGo*XX( zNv)(KAz7e6=x{WBa0Wv_%8#ZA3B)rp)-g|&amQ`nhCn9}jxh&gNUB0Tzbyr)VrX8+nSP+Z^TA@#~+bk@4jn}yXT&J-?eo`-{YC-%upx<+-9f!QR-)u{4@JAbL>xJaiLtDzZ08| zEk=iJBi91R`NGTCF6jXFnm&mV5bD+%>p!=_I9Yfcg2Lw)IuM%ji*%(;Gd|G$;8~L* z?=!jn&&r?XP}cs?`hzQOmSAS-QrW6nJ5cDxP{}FXB56RkCv>f*-qfc4VLf=b@Gv^* zcuqh;>%g`7yY$S1CY*qv8eHS@Z>{*+@b6y?E_r*_PW~Bw)v!|WtJYoF`OiVz1;q_= zRsMPmid+N!dHUP}oa0uHuIXO9%?$qaOq=`$*_wZst`Mq2YoW9)oYlXk!MG#K%xyB6 z{{DwR%>?S-0)`PUV%yAKY(_?=O7lEjTx*;E+{X6^wixBA46anoVGrF^`CDWKw(e^# zwxi3RolUb}{)5v~f~NcX)8%Z^^|#@l|$P@w8x8eb6@$0;7I z>FRd|5X_Lc74XMKMu3@s21PZ*Z~Pa)KPf^t7#Lt1ivCKIx-0OcQgF_dYxS9J{2P-Y zuLB3Qlz)a_h3;a&OKtVv5l>h7E62}{>AqYC_C|hG&&|l?Ir9R}7 zpOD7Fd^uHoM*8yI(o?)BM~gqemP9u~&)H4NgOzzzKmYr3Jly#(%G>k6H^?=3y5-E( zxjR8cyOuwvf)rf|^3U3zsT|F|KPu}qmAwY#kM;99oY&S{?2r}38?hbPwP=qnka|p_ z;P$;{>Jo#OmA@;k{WXkDt)c#v>(s^KUfrhZVDURxd3{0FFj^u z7NdQrFHhktw!YjY^sCfiwZ;;h8TAGXC*mA7Tvl4b7iZ~1Lo@q7GwnaOxa0X*x8**F z0qi!cPHw^^l2(|=WY%}Nu3CnJALO%UHExV!{ca4Uuf5S#fV;ki{eMPOppE1xbxNsG zh7LiVsgchoJZiLXGhMbjy$XeJJ_Y(M(pQWDZ*!N1CvnRmhWHUc5|dO9jg9c~xOk89 zkHMw*leeJ|)u$Y0AY*83k)G~usjIJ-h6Y<%M|vXuVfdda{1s`f8vdd39~J+o@;AXM zoV1M79>Jdv^G*WQmAqO^yhr)RG>OC+DS5NRX%Om8dl*!`m&dLc7oMZxPl2rLtcZW= zH!@iJI3G2$YQd1@R@f%lYGaNEKmMe1NZGGGjeuO1#Tq7U&HXkp{Vk5&!`Ym|RL z)8QMubMVG5byf>M={C~C(|AdtHy$(mF^@f8_%u10%HPtskc9zq1dY11g_Mr0vBQSFSnhj$A=Rud9!Y{(SHuCc47NM?qNQV>qdU( zv}`uz+VL^RnZAJ>K5;2k@Kk^E3hvDQT8`mvjzn1S7$PtA@Q6W>cvw8%Ei5a4kV8s% zDiyq^yn=gp{o~+cbAAEJ+zL!Ws)KA<6LsN_Ta|St!mok+yNl<5y92FstUSdZ&#q{Z zWhnbRi-%j5@Zvqof0M-I^PjRDqA%)UGA16sGWk;ySGN8&ptj{8>3p0w$7e&1^&IVj z+m$Puf7NllW%{p~p1P@6YOMcU`N?{SD?zd525;xJO~$%^y6gV|Of=}qoyX*!ZkSPS zhE*r?@~hA`oQLnXCY7AYZ20;&v%fR7{^1Z!gS6nRBDVJ%WWJtv!*76bw?EkLrrLm^ z8aQmmx%IzIfBq*0{K0QOD4+Y>=VWj&y-jWso|J!34SoN@7ygGl@Xc=|5rWI&*~<|9 zFNvLon2MhUkcvMvHUi7z;yvx|_70{N5k@ zf&9}yeOddOH7bJB$=x0Cr{H-^kHa8!r#({f&6{_FRxvI-EuJMbx9i{3@lWXG_E#}h z#P1ZB2;T@)IMF#q{w==pmS&dT@Q8lAfJRvy=Ru{0#BJpVNXf*C_6RA?N=#HRO!0>)r4{dNGqL7ZQV zr`Z_{{wh8)h5xSZ9z^J4DqK25p?8H!3>FztgG1xFf?FEGNiKuS_o9t_Btao!8ovcP z05kWB6p_?-8u0s4X{A6V3ra|blL<$3G9Y=eNa209@;}}3&+tR1T&<{gs#U=e-V&Ab zh#H_VT_3Lu{lnQdI7{FV4z%nmUIuH}76#4zt8;hBq8#@|#>aAroq=Ss@@HC7A{Tm@ zU`&$|Ik`WT&cbkawK5N+3=V_rBF39X)BwYg$={?@MfnT#egXEaXF1rBdzai?_sga;v}Jx;f|0io8Jr2@(HPsI>&Cn~Y)r^=2+`*v|tbO~7=R#^<3PihB>N-eX$mJ?O9zd^*nDn&@d%81Q0YxI0_s0e*u+VU3S}t`0p>d>m(=a9dB&LCy`iH(`|; zCmIm0OS3xom1Mn55C2y>{v6I!;C8Y$aGmJYxXT~vYwhI3U9}B%&2o&-iR<4~$UlK0 z^71P$$s>gDR|ky7u4!J<6=_!F{g*9#t6;pqud`d=Yd;^py!PsuA@O5T%H zLjo$qGb!Vq7Izwiy2}!lyy7LicXV{hM?U;f`NlWCDGL`akVWkak-8*ufSmY6{6lc2 zJ(Bq9Tk?vR@IIXWr6HNy0i@(V1^hc52|mY@_>{Y*lK*npQ7}UTqE8zC@YD_;qJTWu zpAq^Hj~L>PG=BFR^;rTIFX4UE{4YsoScb!2E&HP+_~;D^-5?gy4D?}R(VlMU?(UNA z@Fae$?_+e3i2v4kZBk#)h9^mefyBd!ELmYv!lWyBkP(xHOVcV0Knw&qJj20=34VXG z5`&8f$)EQ8`=({3vJXbdV3776d&Sm^3!a!N6rv5o1$HDix zDt`{va2DC=;uHE|Qjd9BTxqj1|0-+`bG4Sum>H1MRFwZr{w9G;|6CJhZu#S?n?ohUqpnVy$`KQE2>M(llkoh$=gyk=Yd@424oze{4~>c2KiQW;fE z{cpsu=vBE}vD$Mv>Y(}PA{~&k#TTLVM|AZ~)OFCKZN@2X|FU(=j=0m(PCAQ6dIb9Uq^>?_LI-~fw)JhtHrF|9?aQm0_zk}E?N2QoHQ_(QKaTc4l-zW| z^2z!i&2KdQr<{3JtNmlp?anQ~8XM4O>O{F(DSq7W9(5XV>Jhi0F1?+58d@qYQpI$o zQOe#@2pN)kP4i!ts5D|(x}kAL@<|~qgX8$=edO=~+4bTJ^7eo8)ABq2<#*)GZ+dgZ z?d8%ur`^L-FgE;N|0QtB(uIHo=M>97=!eQgaaG2j(3jSQv~Rh)3{L7bE&rj=QW48R zhWA7kC2Ca`dw4jS-h;h-#MB-TJ%%{a_=f}z=aB-N=6}@uPo;Cv!{IMwWs2M1QE0Rk zm=M(1ByFv&GOw*oTJdacZBtW&fg5)47>TUpxl^N!bi)B}b>pccRu(PfqIw#S!QXi2 z3&TP*g~wD{9#5WE-w#ieOue1y^U4 zGS7@thR7p%#T6dLCtnzr@jut{pPjWV2YO9I{&yG8<6N74*t`59RC54(TsL6jm@W7? z=Yg}FQJLr@-KM^?$NqRZ%gUeTo@b!i8v4v7`@{N&110UbO*o)@E!ju6RG)Oq8J*$G zZ8558e+Gc*0?Jx1&I=eQ^nsc>ob$F>w{P=vq^gNuGd-(+G~eAW%q9KL@}F%i{CI`O zbmu?6NiP-;zyj^k$rJkv-@yA}tb)A+B8@t?2}-uooz=hI|3R6QcFL%fc(W`H`8?C> z|2j-)Yr;88?fDHLwE=@QeW)icK^G3;c|rM6o@$u?rkjVPtH|v{ZMTGZay1UI-=s8p z_t%vmf3uBV;{2JFKkD4L?N82z8rlD7y9WS*0)g^Qm;H?;2o92=Bsym-RP;=EO@}am zF^0Q_(|?U$l8`upN4ftn_y-Gvn7Pl{``t*I4B=LysJ|bZ{~}&rUvEWH3rOGJhwXU- z4ZXd+a=EKZ`ucsxri6b2IDer7D+hXI^QMgoZxAb#67mxU68_!Ko_cpLg@6}-_ow@p z@vq(`nrA*E2ShRW2B-f9*_WCcm9pr(l?D2=q}Me=cx?8!YJXBXd(bZ5hKAL|D_m9-xxJXo&xNiBjHz2 z#1Ybkhhg9g!xH@FpS~-hA$e$jF+QSD|LMbv-)&qdrOs_RxGyW)4EbWcEX{Anb{O+PIy|i5K$X@j ztN(%=tN|6I;*Xip{vkE9MgMAV|8uffu0dnEUQT0{J9Z?N9(0VcgKSaVCe&5T!;p_E z#3)J4PkhEToB&RIkzTYqSJPiTo{$XNYQ7 zpvIyf=qg2H5g7u1a>d{1SA|%PUlSwTqv&(^{tuG#B(`Y#{`bEp2M-<6Rd^dWZIU;? z`G1iuTdn~Z2PD$l(<9&g-uLClKYmnBo;s!5nq7D8b@HY+ze$!ZSsGa*oG*Ui3-XSi zd54@mdse>s&-csuiyg9J`Et4Y4R^~Ociky<=w$8zyubY9CuPqoyRkBz+wJn!x4t!SlHgC|lK4e&I{)f{aF3$T;rUmX5l9L{NT23E6&jr}=~(eIWuPe% zsX!v62-~7MBWdqaKYgPDrJ439`W%IS1)WY0NFn{y@()D%t)J$Fe)yHpKX&{PlBahz z5(X5(tZsiIFMK;U@?jVAG-Xaw`iFrV%Wy{2=nzH`5tx}dj3}932#awXnn{p%#&C2= z2HDsV{VgwJ3{7FT3iuToAaX>DhA|ae-3pMAs*hi>17DmvQ}OLK_&Il)Yd;m=`CEqc1Yg^#vb6S!|JwHl(joB ztzi-HPEYxtZu^trN7nPo+CLP6{=6hiZTSP}5$xX}CKdHyQ>f!O>+Q0h^(L~j?%l8k zcKA9{r>?2{{w-p=#*^4Ou?O1;lmDh%i?rmIq4r&#)xS`O(wfY(VCv*Qlk86u>Vd24 z?vO)+Ka&1pH?~O|z}bTjK?hrPm8f%HvHwT4hh_vyK1Ka6gSmb=g0o347f&n9I!x+W zp1T37M7MdYBg zwrnZRt!bBMpL#n=Ngh)#>`e~Y)l;p;SCTYQzPrALFLNXcAsl1J= z{2KtO0#irXMENJS#LBrU{5vjv*)&M`nH=X=v_%r#>82!s@Uew_Om}lFt!zzal z0Lvf}iHqemWe_G^{t2!ET=UGzf7R`8CjSZPA6KUh7JINY#cAoyT>=cOe#vb!X=)h> zMFk;NMyTX=#Rk(j>tAkRxTvrZ#qUix8uvU(C-!s3p|hNoW>*PfE2>k7UvXsRKeK;P z-yjOrhe@>mpj0E-|9p{?2jS%M8<&PjivQ@ZkJ(OGucmbMqMbs>mg1KdkoQ2Yt& z|3I-%3g`%9`Qi%j*8D=8xU&)^9A_G6edy(_`uu11A2LqFowYwQ`>U%8E)@638Jv05 zTkOIrhbF8s=tOy~hZXP{<8BS6rv4p3=R7A%^c6eMSxVbb2b;7?8VW6#5$+0_)xT=Z zOT;iW^0)Sln|PP^^x0o-vr=Dd!|nvDP*?Oq53yAdwzBQXomY1g>MX03s?YxbR)_Xt z4OkC;+~PA|sFV41S79ag0%&RTl(j!K4>J2xQXy5l{WDVi&u@_K0?wqB=XE7Mx5>Ly zJc2H?L21q}8nOKo`yY{?TAI-B#?D`6uU_hD9@A3)1~Q5TlpheFa;D!f`lnnNBT3wZ z5#uqyj1Rz7aEV8BSpo%Enzju8;X{Yzv!DHptY5!Qe(N`XQ&z8DqcC22=|%bdKlrcm zx1ayK{Lvr&5zf+RkcS?A7%OM~Mc(<&cgTC*^B!qwX^{f@g1_;NZ^%bK@)7yRfBHvx z|F67X)933j097c+-o5+ez7O6fTeogi|6MQalHdK%hvb0=9+2B_yG@##n&o}(dmmQt z{8%1)>`{5=&%Q%$zx{TN>%18k>ZP~HbxFoDC>7J408$dIjQ>*oPjJv>_>p&|-gpm` zl>la>R7`c^HVOQWHU(9^s)4_R_Q2k__}9oON{8b=a1eRZbpHJld`H3WX-hMfz7_C? z$T6gh&I#pzYWyM6qK=3qkb-yMD^ZgX@s}{3=wHfP;c@(hp!p*$yvpF_bs!=|k46I} z_Ovv-r=mnpGp>APY)vsFB9SWvjOI{+l~b51Bn{MC34Zznu%0xD$shz8kR)Omp_9f> zgn$_flOi-EHNijK{Ac)0<;wJmo>~6ap!`+TKYspl$u&NLHD4GhL@djvNtgeM_)R6U z{D*Kd`3K#bS^C$H4x_HzX?!$2C&vqq%ZcJsZn2POMyq9==b`H~o?idcE3jqxY;pWv zuK!KwK396YZgh~HLH85}anMy&4gL$5JxyJ1%dfKRNE(k-DmZ-@%ucfAtSVEXLt`R{nxGGW%mXa%J0}9+Z6!+?)@EHC9&s+$hbR^2hGTI&6!!Fuzt>ii`DI zbpTTfIC#Tz*l4>|8a3#D8N`->eVE9=i3Yk$0=98mRNSPyB_!K=nu%1)Fv0ex*_L2x z!y~KzAc$$If4L5&CwETH6?S9Q&2Ctw4qbWEnLCzb)kyl6F1B<>J}h&myZxb5;F)u5l3mau?5w zB2cSSV}bzuN00tU&Y!y=KlgL*ii0)`+O}=G+;`t^%Ny^$JJR#r?|xU7EM0KMHlXlB3H_O8h|42?_b&X&B1O0O6YwnDLHuT?d?GC`+B8RY*S|7sw@(yT! z(m&cCkA$aj5&EC`9@t7niB1hNATeb*|E1;MlR6eAD@EWT?pqe@0Q5P2{qy7weVXu> ze}6k!BuCv96(z|n=5n&1zF+nAx>DH!fx?gU-I{5y+O0C(3?{*E)lpUK~K zA=5uCjG6s$g~;r0iFt%}T#(&z9NT0ZmuIo^reF6p?<>9?9XXhRi)ue!RjPj*a`PgJ zSZ{#HSy%tNij@f1Ub6D%!kOFUj{}xVm}C<;@g z{|zY3i*uW?*~ogF_0|dS9IUCw3ZGQD4k#7%6yw*1Ip|WA#nFmkQXVoi2Z!7_>Q4 zd=_1$I8OqJd8W=XY(>S@fbl}Ito|*V{p$j!kW%sn&Hw5Dd43@v?b5#6E>=N>v zEP|)oqaji)?SDjlCEzDB@$&q4#+a`qxf)|mnfxO}I?C~nQU6BDe-g@Jg}{xGWkbU$n-B!hRpub9u2L3nx!2ZCta-vBo}ZvZ9le6s`1qW^}V`~sA zSyQY3oTbdwJ$2{=Zp41^4Ony2q-VW_0_@7B&#e4q_GfDKFKd5zMQNqGy#8$|F2Ok> z*Pw(psJ&J4!4H~eWVpjiJ`v#Jz zhWyL(KO&oU`_7TQVM@%pgE7z9b$jgN4*Pqck?41-EE{ELyk_zeRc$&7wv4 zew)Yhd+n-ksF#Hr&Uo088ovd2Z=2684-@zrJN3#{J9YIrX>3f+SF_+$BqZv?Kv7S3 zkDfgfx3+eBfbiC~R_W>KMZCTQ1$vqDVZbOAHI#R7okHQxT+BQA1YbPVg>(W|KrK$*Qw_#l_^FuXO6Ao^V-U@FFY=nCkp@9t^qT^*1L5;)atPBt8~r=k+^f z$BrH9kJ>@wFeEvfOl0Hwjo8}kgYaag;R+9y@wz&*@fLu43c=DPOQo-OKrUQ3FAEkd z&?wG-5oc)(6b7WBz5!>^G)ep7cHN4Nt8W?`ZNT4woj!S5=3|hE12}dO35W=E1kV_z zB%}u0$hVuDn4W1F5kHL&r+S5an)3eNfW`SYWL3Zqka{Uo#@S@*Uxnqe3ZVUAC|r8M z*IzBrqedZDoqxx#nC)d;{0E9X|MfM^e+m4Az3B3AeNF&>we&B*9ZvpaQGXf_E=C0T z^s_X9L-?hN7ClRi3P(rDc1a=yqfz~ar#Xqh(5S;>hNlTod!8U8@EMh|Hs zdA7>0cMl z3pi7JNnS4gPt00;7W;S~KvBbTVJ%!T_S zun`ouGHk}m7jBhysdyNN!e78fic?$v@*IgytnBN;IXZn<(ZhkEd05x5GW<2yX-l|<=+U_ zJK-m1w>Va(Cwa2Zun;U)(Ew-r_HD9%-#*#Bdv}Oy z5ieqUw8x%!T-L5xBTL#BYZ!Tnc|o6u-(EOXw7 z_uaEI9iYOCH%lMo?+IKVl4nd2U{y!{Moz>9hf!om)jdx93bCAj^-Oq8^e^#qmpvzr zUsFc>0jfS6gE47uiJ!adIX3(y12W7YB(8)%#&h6&G9s0RY829{n0Ry5vP?H(G!Ra{ zd3f5DF5rn9m<*{Vcl`PiZt4f1sb~>??eKG?*eGyAMB7_C{L{^UhJSkXZ*I%K6Q^`= zn~4*}AIq-6e~>+euj9kx7#cu!Ky$PgSFHV++xgE*B`beX%g0>*@guz+htsy9Be@?S6=(0L`;#tto^~9PwC4v=YJhm-K@#IPIlz(m0Rn6L$1yLysXGy z4+?n}Vxs7YJJbJ^Sb{T^pIVkJixcT3vH|&n?jCeva3Jw~VL!Ib#UNt1%*HzH=Ba-0vM~3vIGO#WJW}$4lW&>+ zyG#;E&=xJot%rQ@2W9HV;Pp9d+g!jd8h(}QALD9&8^GDQAe61m!DpK3)<36PpCHC< ze8P3&ishd=;+=>k0La_WOZ~`yD#+dbj6sBrmjtWDxb@as<)#~NkS~7Wi}Ka4epQYg zJ&NBk`Nx0!2l>pWKP^2ti>4`TqxROf{*+m#dy>)dC(xq)DF)LEO40;u5Y2aV{GO}B;dlD@bZAqFKMg;@V91Ei=}Wt&62HSA zj(-oID1PPx`Oq>%7YwH77`!8YVMrIzG=)VWQAHfEnu90(ZC^qQBT!!cRH&&JLs$|+ zV=H)i132L`o*6p}N$@)`iU4lnSFaF{FmQRS>f;9$L>&x{(n6XXv5}=Tkyxc!-y(%d zZHzYS_@8e1XZWXA|EE{}y@iWdTzwXMGoQt5MefvWOL)y*uv}{K(h`@Izs&w*_Sfqj z9!<;BHFjd zbO~TN7{obOkU|7ZY?=Mf?7x=`e^M{v*9uf*wtauij`B|_r^}z&gH_Um72+(TET%oh z^LjYE6I+4hq(zU!h%;xJPTyW*NdN}Jvg;w0C!6xn5fZe14c1cmj6+*b5Q>q zu#IO6>n5(if*?5Qtt)pLrhuy;xb+cqQ3VvG6m$t%2CtFyPZish5ignjbz%4uqJ&hU zWaps%aU0pj+(K+0*^F-x99o~lx$f z?=kswnKMdt`7gm0N$^rTdHfM%MMs+d6wly4imA%{Q?KmuC*Q_~--l?ZpPYiDl`;r7 zNI_2+gbQDn0f9bnW4Qi;o3Hwf$Q#@Q6p|>Y*n`SI1TahkNJcpumN+CQI9%aPA1Mai zA2AeMc&|Nv@Il&?X}Gc0lYEgTrR$34f4b$L;h$dppI-TQ$!T;7pV9KiqE?6fn%i<$ zqx9hrXf2i|9XLTK3M$L0dR-~@XL{wYV#UoZdF}0Q#=mK}R*>VWf3dh8GjG?+dD)K- zrpr2D(F?RwYUHEMRbBuovS2&&XvB5!=;-sf0}0&=m1Wp|5^EW z8=Bd_s+K<}+L-HK4&b)uw#nHXww+JQp}-Y47Y$DyXG#?3 zNo#Hy&~gyjE_;%Ytp0VGq$Oj58h`s|HncyQb4##UT9WtNzViZBeyzygfU`&1Q)0L> z`6q*!{!s$GFr`ccf~?N9YaTMav&MVm~&_*Tw;DwcwC4Yn-Qlb?T%n z#JM=vY~6}8c(x-7^dsP3gKg9P<8S+rRP1gKYr>hKP9jJ$y=qVsX2yi+_XVH z_@D2SE!S+0e&$fdgBYr#f5c;0jQD^t&@ngg8?#p+|5n%nd&o;>rxuLbfB(7uPZU2V zR*-bNff0QP?6?M77UFy`gqAkt_>N0&bij!Y88@Oj3KRk@N=ZbrTBx$%6TLy>X+en z(YW6EGfKwQZC2`^=X2oFb!?90KRcSciYJu$*4$ET1F;AtPe+nnAmK@YgpAJ0AB7R@ z1Du)uTOpcb<-ZP{L`!npSo{o7mY#Qy!qpkf6K z*0kdDY-uc?nf+A}XXP)mKT~3Vda)hS6NUc=WetbNqNFXB&9b@f9Vq2(rf6CH2RXp% zWc9zwA+x{JYkwQiT5Z7~D@*F-+y&_wJTLY6CJ^NYaq{)=AYgUMF?NNb6EP?Aip!)a zKM(HIia$p;$J#%c{+s?cV6t10-%iDLtjju&)meRVzW6epoK0W7{udrZ|IFZD>Gr(! z`Bqt8yj~XO*US9e8nyrJ(nJ6NKmbWZK~ztquA2C>{I~pvkf)^mq0qdI5kMN?fXBls z)W2K>*j~5>Etr!Sxar2%La*u~_XMDw^eguN#mr-M4jly#+B4}m#))4)hNsy6k>&y? za-)BcpyO46f5*?2D9L#^wbTFh_I7#gYhD{kbVqslV?XcOb!+wKaY~+nwc2}6dX-i!mobCQ zKNad_V+8%1Y5bS#-(2Qjw}hmvL*5pB3F(r#e{rI;@E456}%O4^zyid9|S14Qsb7!;PK5bfC&*0W(Z>fdyUA{e?0gt zCEyZmgl!|k1QsAGT#Xdtn3uhVSb_BM;4jB9*W{n^U#eqsDgTQ_9I1|F)!gQZS0iRL z*Q3*Uh<(ve-lo3%6KcAQ&n5YjcU~F)CI{YUSN?P8X1;df=ys>5^m%}BKhL>|RZ^&w z;GtgQsDC+FGYE+M2xHnjRspb+fU}MLGMEvWdS~^Y+o`lZjbHv0W{_+Ux5M>34dL3@ zLzLj1$=~HPd*siu#y#PCu;Qj0TZeYzX&rBz@#&ZImF2%nB(pz|L{|Py9cpg>*jm7$ z(>QC6Sult#O1Y)kRN7x|OEZW%eURrxpzdx!M`(SHgF|*@`VTqGdHv_cnswMNZ83gJ zbv0I-ti%MKrc`@&YTF-#hOalQ5IwCc%`Ri|U2l$qMrEV?lg+{|_YwJ{!ehQS`oE4$Me5U#$NR|&wx%i>v}!3`1J zOJ&5D#JE=pKWL`-jB2{^rh{5WZPoEd+=|+6LFRnP@KXrPp(^EnCjX%Orh0m>f&MX1 zdoY)dbq?X;L+vJ53g>(?8LBYCsJU=4c76r2akMW|LwzzB{g9tQe}>aPk5ldZf73np$Q`%cE_HQvDxQ)0 zKRKc8-h2P|k}brdOiTC&dnx-Lnf1sMkUx`p{wtUuKLeQps2*ea{$ne->*AL3Gq%nkfBC)~JN4p|8AcF{Old_02NGuQG1cRDm-k}hUO z@M1>V6(c9_8pNB8wtGxQs3m^q3u83_FKAV%1&T;|P#U`Qm3KNACGrR_SH_TZHt;{) z^3U*3ul`S${5iY$LUFeY;4niL7c54W`S~^YFkMyC@;_btE7N+LoB5yd52c@?{BJ6@ z;R9)b?yuZi>=1S!DfC!3#mY+ksq>@BpYtg%77t@^m9RKFB&Rs$qkM99T~_}=ELr_O zr`tb+7%1hyW*>emFOzBibzeILVbYtCuh~qlhr8GoO@*-EpTYD(|at^p|Q!Z zto=z51=~i|blF5 zq+8^1(2)6GfGwnc^x=CXWvnPBT(D)Tdc0wUj#kI$n$_Y9ebgtza0NH*UwoyTuZ$AQ zIJ~B`{iEn)?b@}n9p}H~akdz*NQF5{@H5WVt=nY%`t=$&X@BrliB*3KbUz1_1R0WQ z@b5T)Gk_;YWt7bj`H!D}=gxUcav^#l7Umg6I;fPEKqyt;6@jHW#Im7P~iMc}EsapO!woLw}dDYdwA`ULREN9Rq z+;3(C;%~vB>ij6J1%5-4U`n{n@;{M^)d*SnGl^)mHv{cY1GX3BIT+kj3Ef8MH0q@> zgNl=G8cp8eW~FbhLCK9T-pyr!bTfW$@uI@BMZM@uMkiI19fM1dmgtJ9|H)9oe_A4$ z{+o8Fcp#$cw7+JD{0A}7pj*z#{=(N~ul$SbFMbQ1s|Qd{Yy!eW+rNDnwy{nQ(>xw> z-h$bxe9QDN(?6Duto)e_W|IBk*$z#)MaY|+*1sIU?ZspVZg4i4`j_Rtz%_Wqvlt8t zl{Q9nTdwmP+pb~YuQj?pfO;-OXRg>vZ`^$-U zy;yM*%Odo@5$BWE;R{an5^1Z6pR_5SO#f9ByiKS6=b(FyxrLhN+JOyX*rws&v(W|} zN_~IO89E`u3LRu8(&$f9Bqefs+CNG}kg2)-CF(rAQ~Jl(beMJIGgs(e%D?Ka-89^8 z7T4Sp<6qNS(lC&f#*a`(5#lgDovGL0HXlYGkNgSGfz`VF6ZOdUUn4MDpwW0t_&4Ds zz9z16{tZBYk;;FQ748Ng8AwFb(emGt7=DAF_>|+1I>sm?;a5To=1BMzj3TwThItJ5 znPv*`E9xQm)4oQF>MlsE2LFa_ocycc0&M`m)FbL2$6j>jYs5;DX)f7of*%7n=B490 zbm~yIp&%v~f*qEVK(n@@sf;EeXPVv}c&5^uFXJ;(fU4jOW<~r=WVD8d#Z_Zlz%R@?=GCi=WU;&r2T2h z;owy?{uOhT@q3QXcKzo{B@-CUGwl^~Z1&jS6#1aL#^n!6PCKtZ6=IF?6K9fr6Xu^= z5pWwb?y=07klb=)O$*YS!}#cyI|+J2O`9?k!W+TUJmM`)|t zv{0ewHlPb^v950O@~5hmlIdJ1f7AlthC4DbW+pQyyz%JG08=(n2=Y}U^+L=d|W3W>(GikWgcqRFl>Huc^YWF`-xAZD`B=*+> zBgyp87k7A!0Ki@mg^^0FvZX-05@02W12v3b*F^abshvB#8qBfPKLI%&Q-WVnj|YD_ z|79X$a0(`wOiP;7m&iXAcWnHZ;~&oc5EHI4{6p$ri>3Fe#UJP#4S&`6Psyo7)5co= z2H_2PBydf1Rz|MW?;rcFDdE&!aIYup%6K%4R?Tv0tA;^V4B}pE>C2**3({h^FGr26 zpuk^~s|Q}_tI+N4h%~vUwj^xqrl4pH-fD^8_*XI#{CU!u&>90$zE=wW(=GoDe=J2& z&1$Lt(;9X;X|O|IGeTT#2lL@bsa+5FYE0T9>~(W|lS-o7ruJ zUq9Rp=%BcWvcxT8K$#LZ{_@{bJcomx&qOxs^Vlj4+uaaf`Q=iX3+1l}8$HN64jn;t z`FhFMaVEK4bAkWzyyttyf93qQZWi2OJZshdX~KjF4yNcCv0DEQ;IQ_S(w^I*M5>LS zp#A46+U0VsH0Rqey@{(E24NFcp+>jEuQUB;SqP_}iC=w1`+i8itwQdx z{}JCRvHuV4XR3*wd&5#4%5gg1-Cc|PH(ZX%F%R`EDgQBgnf=jZ9+*6>Sm@oYSVS~# z{+ZGg0**5L!<0WoHq7^5E%1-dzfw5l<`NvD{~j<#{zu0j0S=*o9z*am7d1&De@!@y z{3nXvsVc#r5Cm6(UvX3kKT#5sUc^Cn8UMrM4=uD|^v{3>*x_M*0R>)4_#ZcZq$kD0 z;2*dCj|o2`*-BXU+35!Kia+7Wd8`j~DV1cDml6y^$-$Z;JW=O!$`fDW6{Q+^4#7&+EazV{ZW`sE;h$dp zpFa5)urbp z-2nP+A9?%i_mzyUdR`jqtbVWk-A%|-1CW!37dWl8%IdBYptAd40*l7>d^ zEpAF%3;A=amgamX=%G~jz&u@iIJICPG*?W{qbaXrN7O&awFe#2{a8uBJmLp=U9K5i zg+n@>!wJftbdHFh5&W73<^Ry(L-Lu=epXH#J1%d8F1_U~Z-$_vDkeq_zKciPk>ZHwISH7qM=T1d-ZLyYSk*}@^Xbx3;nBh`;T=* ze_y|R_q*SdGiOfA-o5+e?AbHgZsqvc;w4LDSu4wzf9y;HLnln*TiN zsd^kpPM$eX$}N$4uw~33w*J(7R;epyb&VB22X45+jX=2dAxdjHq9-8Oov^G55 zS8)03gRXz=tN$V|zWkz`K6P4t?p^QFI&S{F`E!E*kkwJIrYiq?dVA#f(c|*Wv(Laz ztk8Y@SFOUq(mL22u_g|h8C+9^-=MK<0^$VQKZBUGa`3<*c^SI#;>$0~sS~HI>AUBiUzuhKdK|MeKe11_$KAx%2YGlTQlk z*S@}9YtI4CO*h^wH{E=bw6(ODZdL)m^EDa$k7aS1@_zuG^If{t^&r}XjhJ-D_F)6E z%G!sXX_L`^m(x_|zr&r3{4ZR*fI8`nJp1g^vUS@wS&a5SZD?|t(q5_j52t_J%8}>R zUdC!0wrTpYlDL@XgeLnA2}K!MYWvnCFNU-Ohgr?*ubG{!3+7Mn-@gaZUg~$W)qnS2*y< zanb{Y!Z17n8b!`cPwnymLI{aj;Is)Cb5~)+Bq3$=)MySa!cCi6B?~h z>PLb?Ae{kjfDqnFJ*$D=NpOS|tJC6sCTY+};=&cvsSMqB_VKTjPow-Z{E)yLls~tp z;xc<1HD+_a5n>3d0KGW*GZd?8l)u6tj*-QOTz6NGG&a_w^RrPJ8~jkuKtL7oD~1W= ze_wB}96oXw9}drIN9Fcy+hKM&0*?mr1ne(uTz5~me!y}S&%#BEV4i~|oPqp1X;z1o zDasi5KY#wb?Ay0bo_^{nS&t6i-X5F_13uFgDC+`tl%G3$R`w(A%P+o!PUF3D`t)h6 zuISTol6DN#T)faBOP4K`YqngY184Kv=1D^n^%++XVJzcSsQ>B<&FJFg-r~jpXaDyX zyTJ?ICy1YNz|blspkO()n&-z?061CsD;x&`Tuvqj#0F6wd%AmM-u!v!fXC{UT=?jt z9)`=4PBj0A!%q}Wi{qkR&~qgF)78}_FTeC6bZWosz+tBB9AZl%p)bh9s`D3wroKsLc5ckFhlyu&{**^u3ux| z-=cO=(Et)`|1418Y2$$&1wh*}-fl>d>4 zGW@I~y1FmRp+g73!yei7+zUFHf&<&M2@B@Wm&F*kxp3ivPR3ZgWHCD8vCS9;bf?<> z*aAzYdMCxUPhN9`R&|1WiP z$cdAuRR0ehIwZXqxZ%VA!dba;l?)DGas<{ZN4RDBN6a%-{;WTWn7G5k;q?L&_2JwZ z@oz`qSqcB_o)iui7Vo|+{FmQmzyf<-(RBAo$QKowD|qXK?UN*JCt5?TZN zmoIh7(W6J?m6u=hI2lbeJd9A!m zHbF$1|Ab@N%Y0;SWCabF?)(qhIC}jXB95B>L1Uv3LpnSva34KK#~)G;gI}>AjPkde z(-FKTh+pCAtpfD{1#zk~joKTedVsl-3x4B^4k@fpNA z+5A@=mGC=l392;qQv3u$6>@^%aA%A-jQlm8;twezkWzHRy;YNc$5}yxBU_WfPgXTO z`G){?l!3CNC>Rz9aQwE<0^Ynss)!|u{NQ8+UIr#4#ESx=r$b^ScPnN~ORw^15eW%O zha#fm_Z;`M_6%=$)Es|69r2QK`lYWcnSbyZ^J+TepW&aQ^2Z*ySVldFzdG2YW^BX6 z?IvP5^fJeC=v?SWST$ndme=e(ab$_4L!y-Q6W$`*n7Y9T-4$Is!P9>CyP zIaqOnJ@z@Hk^&0iiBF=?%aI^{tWy{;4*V~pQ=Y4uzWd$p%6s4YUUa0aly(e6=v9UC zZ@dJK@R*GK(b+QuK>n511g?w55R}U>iRbtS1_tCXItD)a(T~cmUAxdBS&$YCM%33g zU_}@A5ogy4E|mY?-aef*T!$_HZoBPvS%uE0iOS#cTR~8%Yo4oX8syK;R}N19*`NKH zoH=`1x64|#Y?*A|wnJCdP)_^zACM=Wcv61&!-wU|U%p>{_jmq_TzlOPS-xzAF#z$7 zSN^ zu5}wHXslnqRzC9QAC;CmbXJqsa>iyD|6D2bqlX`sFMRQf!t&qT+#(w{Za}@fS+}V? zd*+NBIIv%Kq0avL*B_9dedo{0*6myMX$&ST8moa}JSM_FSKQo~|7F-@*k#m_%{Zr# z1H178TvyF%;7{-%qnKBj{zD8QPbr)-`G4t4Uy{cje?qwGI)^q~16Haon72^d(%0W` z0|s%p?PcnkVfyc!`7=@qCF{v?i>g!7RXm2tJN&k4k+pK?lP(LIQ2Ga1g)D=34$|0I63?QTm}BMUSx2Pe}a*o$=l@c z2mZ%^pIFCyxmf)&3YG|E524++dY z`ExY@HkAPHgWw(=l4$zt_A@AdS^&%J1l6P(<&U$sU)lYN{OFM%$%>ULbhf`{M~(1X z&W}I;jXc^a+GM`rQX^~5@!H?s{yzEVul}=cMKpiGf{NQ`Rzv<12}J#rKu za$l6MKk$H@z%22N8#mdOOk4df1>qYb8dlV{kr@e_)u!YY_~SD-1Eja z%bK;T<@Vcemlkx^l0UM0xw8{n9=?FBZyuM&AcwDf+Z33G<)|77?ltL663G}(l}e5OoI z3g%Z0`=c;bv4Df}@yR@J=fRX+)P@M^hw)z#97Rj%ZKt7MOWH*RhE5C8Bb`Qbx9#LC4Jvh%v@WW#!F zo2FZtTE!`7?~T*HHht6(c8b9XfOv zt9;k$pm8nnljoUO|MAQ(e%rIY)|K+GgDgrhYoh+KgrP(sjOEI|zh+GR6O@X!;$p`| zx#^~xF;8!(O$gES!5uHSr8e8^TefVqAm_L2>8~Z}@e=d2LWH4SNK}=bIG{Z>1>>zxm;A zN>NJIkTgS~q@kAc9}$)!CJy zAgmC_^$&pE{-w4`3rx|d;*Sw{;3tJ`gb)m`K#o&~a8qo?i=GCTfBI2(zZf8c0?UU=fO)ay%b;)8OuMPxZ;yg@iIpIF}+e_w0a3qxO#Ko6DfZN zvpoNue{R>v59ZywU%~A8Ll^{Yl^d?#DeKp7ke%1=)Q)DSgDd0eu)QU>FMRsxXXF6O zEIM!L&#lyy?s3Y0B>uTFl-tj6TO@KmfODX@a#ZE3VxEBgWjVvvp}Oj{$ZgVs-Iyl% zkHo*rUHJ_!rd`O>3G&Z$hBMS<0A=q4$cyD4KiZ3UCGKkAH#7#>@F(~zEP0GP+ z){S`7h3HsqLH+y06OZd^+2bdU>0r*9HEU67`B_W`!CP7VGco>A)9U$e22yRT%P&5I z9A}CBoeAZCs>@$tuqYRCHpzLk&3b!!(7CuqZo~>3o(I>4?QK;hLKYfs-e->fkEQ_{oB;v+&XDpq9RBg-zcZJVe-l@V z|BCoslT-Wylt&GcN`R|tjQX#MN5fx1{t^Fp_;-rO$bX=XmQSV6?Myk?zzdJG{`=P- zLL3R7-T^}*1EDH$LSRhA0GB__mv>(5P_cm-BY_YVI-;8$!kZ?olwM;h9L0oJ^+|cx z8ozNt;*D&-2PPt|!Ewd$Ki%@r@OuF=4Xd^O*INGERt5|0QI60#3~R*?j3&<53U;a1 z{F}{!70~j}O2zG#KbbFyftm^S&nTkhB8{}-IbC+nNkLjID(RKzPxwgNU*p*!8O*t0 z|5OH=yX4s}<}YUtJ@n8+I-tkH-hck*e;!*@*c1L@x!?>H(yp2U&Hg#4W6=-@DzL% zCo$Vq89({rb_WFvu9Cw%%BXIYhEmF_n)+{&1y;&M$#=o{v%2`n-+1Lu%G7F*UdW0( z;Ff}8P0;llFOGb3s=D1e%o!@xx{u?iTo8gFv1_-jfx+m8j9Zp z==jQ?q+)pdMyCP{Iox1(tJ@>px+R;Hv{_V2z$Fpp%L+8md z44!`L+Ye%(=YXCC)Ya7~ZSy#LnwQh>PxG5l`9snsY?X#mr)LRpi!)tu1G?;NAK*~Y zRgzyN{N#h>4F{ToPQtCjnE?R^p1hKDCHW73hG;0z89#U%7k&poJcQ+R`_p_i5VxA) zH-%P;px*kl*}SIjWYX-#70Q3i2jiW0UXzvo(xuDfUGI9A{LD}Pw4Nc>fQbj`YsTb% z8UGy2{?7NlqbsBv8=K_a_ueb3(fPh)@e(6HrT7*2_lR>SNNZN|DV}5%1bXa_EmrIGIPowXn}s~ zPx_<(oK7M)vOMiD&rsPc)|Kqzb^(`;(q2 z{3-8=$o~)~D?aeR*X4#AZ;b<{D+8mq%$!|H&XuBg8u}6LZMOzawm*GVVY7=*(A^zSY`fe zil6qugk`%7m9VG$CoS?I3#yt4BoPHg5)CNa9^xNGG)USBfJn4oX0+iK-lLou#^k)< z@bvl~@Eh(JD~Yd>{AS^vzMA-rb`~Ju)Se>8no^%DnExavT=sm{PW~DGwA|f&Wy`<6 zi2eM9`}y0&j%OZfs57?ItGfJmUGCBu?VQz3cP|d>WfAYeEIe*abO9ajv;qx{=t4uI zyaB&*`^OpG9TzX@p~*cs-{ewfr_93#;G#tfW#NKFa@ESKU?*)2k+L+5{VQOm3J(b8 zDvh&e&+07kdThhB2s7)~u3IB*t=N)>9V@g=Df>%swjVHLr7xfuPM0YiZpj#vGxxb4 zd_N9NCww0I-iTT1UGV4O=3VI6;0*NwwkIlJOOgv0a1c5=PYIEKZSz{Cz7DhM0GISK zE?4RB0QovJR0-qg(W7z>Jak;@lr?MC$O<&pxH?7ai@-nYA0Fg+5-U?qpE{{=xzGO6 zB}?=?6a4@p@wl9R+W*VwgdGH3+#YHk4j(p{IqldcoKvSy=_(n{cH-gR=f6g+R{e_sn|^GQrmId#ZULRib@T9fZZpoN zuKtHMVA4rv7jzH0N!?%>9DshHS3oXe)y+KUA#~+ zba=AEry~DU0%Tj^ z_x8)vILo3FG%i@MQ0}l+W&HCj{#-Za9Vh34d3uE((MCr=i$OY+HFks9 zRRj!f9oh_%E&s~#SK?n83G!DsaC>^ng5|3lI)qVJX@K6e;QTVeslp@) zHXOXn!Dq{7#3v5kc%l6H$|!PG4>`~GPS6y7);m4jJ$jh)sWUixYoH)kU3C@g{R+^5 z6@tv4lFQ(`O(y?@&(dNubAcD0$DzBN@l5-_8ubn9U)DKVFQ)J-=qUE+Ks|pR_0J`> z8`M?SJ%q99s+F=3HiLB=DH%=vl))L;46YPBf9|ZF!^8nbuEH!`2|`K|`~*CJGS70z zazZ=Mq_cW+C_9(r?71^&7aYRC1Ur{oP&QX+9Zvbv4mDx$LbJj_f>@Ir(7*w*P*P*|bHk=W$PGLCzOylW^pOXkKA+HW% z8%^r-YRqt7zkY+vM_V9@6gZ7?W1*?Z&c0#$sjsIGt6@(dEmx5ySB#%{!DYT_{94FE zeUsMzk>u~`6?EV~A=VHMhrh4bh4V_VI;5~$?LkX!F;>wo(XFqliJxt({=Qy0fP7|~ z>pZroT!?LM+7~Z`E-#VxSdW7KRQ;- zF}{hz?tsg>uD2g{2yL+j)CrAE^{AJqyG1z$`%YarcJvtFwWGZ~Ushsr4F}|+MGN?& z-9tL+?U}P@w7w%Ew*M|(ya?U0I#>HfkWZwEd8c`<5KG&?mE_N~v?b?Y-_D*ruef*? z8|~ZzOuQgnjKlh@fHKea_dN2?`h3V`QgQvE{*P7v>TsS&T@m#p6qDoLTyZmq6`@=) zU0PWiQo~eEz{vPHAT&_KnTp&F5E%IVrV|Z-Gs1(z=~w9E)PJV&^v*x)r4z?bz|NkA zE_JDHvCYzsZ!YQq+c1%WGW^_5m2E5L_5Aq@!az$=;qcqxG`>d|e)ZK?YaP~}`hIZy zuJ6o$+HLA~H*9FJsQ^0)3DX|CD9i9uZ#zN51*{@IgcZbW!?vLeY}knNGO@LmefNm! zHT44?G7l>kn2D@ASr^yAjy2(1)V74AfWR#gx@_U@!M7R94te2(pE}>(%j1N|w4wa= z?1UWa>XCyeTk%ZOz(u+I9bYB=*CfDCa`b}3)9ZT~e)>^&*mkl+Atm1f6i;7C{*2}H zr1>8Yeu9Yc`4X>EU*cEW5W*w>c-NTD177kZMtO+9%;9k&vF2ThsWi=)`1d3Plm?b| zGtPMML$3^0IS@k@`FH(;H_xKvE(v$P{`Gp^lcS`K<5{JCQI4^U!gCl5A-aW*Isen} zkhBETc=!)gdHQnv&dX@}7vs?}F8r2qIQ&E8@36shlxG$BkN82R;;S-#6CaQSeT(>A z|Ei3?JpU((pZ3lafzOoe^euf$_FEv&+8|@692J89)?5i6jQ-u2O0Sth1a4j3L*oFs z)*33$(5`S*Ga%{c#BYTA-B{pV3o@k>;5iANzN+}ao3cmzN+jtZ1(c38s;Y{Ay7|xW zPp|&XMfs~O;3^v&Xo=;5+}5eFh|c&>-l|>x`B8e|B0jFrfpGBPemQ*-ok?iK@}uCD z-7jMx2OV6v_@TN2D=FBSX`RQISIv0nlxL^Ui4!Mvd$AsL@OO1ymX@{_S%8lM?w5TL z9YKqi;DdM3Vl?QnkyV-fV+R5|LXR9hESE3LSNJ@`0Aryf2) z`f$iO@pr-f+;h)JGiS(XM_--ny#5Bzv{1qC-M3cXkUZ z0^1Nl25N?Zk@k1r-hFZK>84w5mTtr)4(?sA9cCQ#f=qZYF+1P*A8EmYX4&CbL_=wxE&D?4=9QQ3gOfL7$?Np$)V20IE@uUV}F zC~6Z(Nd#skkZQr^MEY|6`_K_Zeciu*A3pwJ`IY7lh)Ft@o_Avn9?VqDZj-WH|vi>%2-i(ftcI|vn-ctF`4&lovpU*t| zwAv7Ms&Iy?xBQ$&J`2d_1L%zHK!-*zWV2!8dRe|~IXX6SvKaJi*}4VtZd8Y>P8mj;5jhoBQ`F9WEVP}756JUzXJ!_S$^#UchRIf6+9EJG+~+?LSOm*Y1S<@^&za?7@fb9=YpOKT$xpU_(XdQFv%qf(&<*3)@>wp9YC2WF%r=~P04^}}YS4yM{ z_&CVL0R(RC$?f#caIh72q6Gs0t5&Yma?0(%(p#Ij{6Ug-+#Wr41ZTV)({{j_Q)jfp zOgqy6gWFv$U%m|GV40TnMh1no<)N|U^uMF;a~$c|-o3G5d;;i&(d95D!8;fj)t z8*yF>20oNG04>jdcJ}Ss^`h4895~&!^%|Mius~Pyoy1_*p@WBYTa#r=mum-e91sU> zyf_HWEl`dhgPhQwIddBH0DliU_F4bhVDDmWC#|`9wVn+!AG+mNT3nnk(gnMI5IEU^ zc@p*i3ADTF(P`M$(uNN2v#{-pFkz)#R-^N@0W$ZxMD-s`Qa?6r+5|h%tAk=3$R*7x z&kFq8M=2QrB*fD}ceE>9{(M%_fAz-A>7Q)*Q!D`HIX@Qsg&a=LDt6-ZtOIBpb7fy2 zEDncsIg^=`0ZNJe8=C)4|5)&I5{_+AdJ%22lhCtcn#U|(3sC2={mFqk)_p6`u4~4? zp|2(`*FTnfw(ZWHKda@EI?Qs>-F;c}_!P<;CjxN=^YRtTFi>yjl|_EQTPNDA$1pHU znpUC>PW+q%#6h4VM~`UT%=(h;WOl@#0lp2JHfUYVi9Nh%n>sFZ$R4y;IVpnmDC?ST z3;=LN>q*eTc5W;5FV>uDLp8aIm>uX1Xanxtc|CAh``1EE{_G&{MjPY=W8xMAe z+c>j*b`D!S(*AIOg6$vX{}QxC)~rVx5A}#n7DK+J@$cEUAKwoc?14SI8RwOB_jKt1 z+evJpcow=t{UKc(*kgNh<;wK;1N(shEd`K+nw;cw7~9$MTVnz29?wX1n?;@(o!?j- zFr?n{+k_JhXv6DZkNAzift;(BU#0f{>eW}{oWea?R%q96x%n2A+o{thw2tAo3|BI& zM;l3XrmXz4Ufi>HuMU#-L*IGE2nRD`9T6l?KDk|B=cUWCZ~tCd(!KhqUg+y&co8a8ddY`JEuY(_hegUHGi5cAubXKdbZ&`)s@wrsiF zbn{I*iH-Df!quZceoUT4T+;jEOE2lya} z0U_kfE5Scp?mKNNU6V1>S!#dqY@F96Y+GYu3noOd-!0w#;DoI3rE3bs znIPTxa97oZqVVYjiCe7rl(BzF*hvhMnr{h7S$Zzm7i6YaJ)V0L# zWs+o=*~OD=;ZpAOMqbM=`f1>-=0B9^X_J43A9_UHn>3h7H)Tvu^+c77u>sLHXYIzlU;7TU3-+-+sHi z@$S3jo_pS?2S#&n=QPs%-538}_q}})4JBO~4O%(SFo=%WLCg##?c29)lh?fFweq^x zy$&5oYqTTLGMeq6f(~>%`r{wV-+u0M=-9e|57kRLV8cci8~dEG&JOB!d@TOLzx@Td z^Uk~U1CWC{yu3q__Dk(JaOToR9C7%u+Jz64AEVLrna_SsKOT56@o(SvL42IFqT}S0 zeB$Gu&`xvOzJ7F^^5RF)AO5#LRGqBDN7;PL{QB?z{ZG;Gx?aQo=C41k=Wm=r=i49u z@t>fv^^*MS_x}~0(Ff3R%CjDbdq6)-wr<@jANbYxqmyZq4op4x?QhH9f9XrwQAh zN@c}Pbi!kYKRb9fZ`v%s_=~?N+pwJhJGpFTqbU{hhn-R;JG|hc=-lpeWzp6xTjh6u z@AvS5gxQwt1dPkPH9BrgXZD{7Ijj8CiBsB;osSuyTefW0)gcyp=GK3e%0D{>d2WYx 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%0AI|X~R()Ru3 z)PikZ@4n2G>Y`HT<;|eidAOnO=!?W1kxSxaiV#jR6bE!9?m8MAC;8HJF^p+<>-ufE zG+rW1hhAuW`n7>>FixZo)ma#jRY#=*(P%zM18C*jKs&V}hDi6Pj!S6_ga2 z+}7Dob5t!(7+1HmWtW@l*amUG3f@(nJhYoqbH#A&Bz{Ryv&Y3G z%JNVL7ZDl6pgq<%v_KAG%iZtSv}P}6c&}%JFXavHsdc;Mjc|&GxKs$zc0VbB$+!BN ztyJaqYZ&FU(NvwY+rE`?-}gFb1Qm-04H}9jdUNlgM>h$~ow$nbD@Nrin(g0_%QHke z)gfi_HjsnLJzZG=^=ZuoJs-!mLFCvw5T4T*$Eaa5Udwbc@6aBkWo^m|HF*%ygb?@5Fo?kOo=*Q^mg|vSpVok`$g5-_g~kx>XrZ zH@M+OCHzg|0NUdWbecBNzyYimP(=;itnT%`uN~xZ_~MyEgFE|6G3%USufX)r$HtTj zk!!5DVzjBF^=mT8$)VCTAfM*)MGl|bO5En7#hTlL8ARXyu{01| zsN1$Tc;5>ms=yHLzJka?Ddi@>5-CxConGgP3P}4>qKcPX`A&b& zjS#2Rr4ws5J&i$qLmi35hg)|RkHNH@)OR6ush%}}S+a;CtZ1M1`N~g$GHQdO?zP<~ zoGw#0ZYoE?C>`HxN$1~G1Gca~aj{`m<>yN@9;XoxOBggm(!^6Ov``Re14&Y+VuIfX!;;v4* zsy>U@cc{R3rJ%h{>LK>uUpmkTWJO9flxWf@Lf+@=uwSa>hWyYz5X`l}I{CI1pljB& ztN_)bQXy+#B9vkdF|W+w&)(GIUrm*4{3d}CRMdbND4X_hAsLo1n?lq8A^As3iycCH ztAc5Ef4h^R>o_a?RCoTX?cB!os!VKHKt@K&Tg*CHF9(wc{n+n&pyZHf6QG)~#W;W= zxjy5psuuKSB|1Luhxm^fqRAlrGr5>a2YZFQbPPYU#nWrJh_TGy+HF>!%A1`AhCA_s zSpMuQabA~`uFqm(zX__1x)L^CwcKL5&!F0|9EVGhMg>U7EDMz~zP+7U@szITM3a&Z zYJ0m}j?cI6S-*7nnP;lx`eS(G!Q@hq+B&| zpw1u(T(=P3pVW+GfV#T)bA%GKOPdoj!S3++u5u5B7Pl;LNlXhZyb1w=;Ci?t@!%AZ zGu*x4U*>b7!UzZ6vkN=fTk<>QECqRWoU;;wR#)cH7(mtPiiidpB9gRGF^9sA25Ag4 z6VJObV%iF^j)v@H;jZ@*$H(4cBuc+x*xG=PMRrC5?zlL?&)bq|RB0w7iR4@fb=et> zzZ79=oa$SS-N}XA4z6;_$|{OmV#nC*@zQ|T*5Va8^&+E`qwvyt(6*KAvVe(OiJGbmJb5099~Iuv0}FpOHI`7(gm zv7^Dg{={TlbwhsbM=;slf!kvC>g&`!(Dy&jJ#0MnT<$h71S_5|zw_16`g8hhNrr%& z+wEqL5N-OchVYP^B( z42sR_0a|rR^N|23@Xx&gJ~rd6^lr`xkzoJppDchCetd9i!<}-Ndj}p}`eJCl217XhN`jb zno?-uGw5uanS;>C-x1H*Myy3Qqc*Antr#Mr4PoBlMjK>Bt;J|qv5A!{aS}jk4}C#(TXjV}?juUgl~{$`_#>Zx zi545)bD*Y6m&Jk``KIywdn1b-E_bA*Qi^OQ)Y0wt>S!qJlhj--H(s=E1VzG|E^X^J z(%F#+ojn>-#DDSn=G~elW=ND+$$#tHocCI4F*aATHolshj#!E*q|OrG_3qu$o3o0; z7fb0c$vP{A#(dL2sm(K*S6^duZ71A}tm|^eG9)}?@z1n}=%SDO)%cKn?uD>LCuamo zJ%PdQX;uve&4Jqwba`W-Ya%A3{S6Rsh9EcM@POK%>Py2+1rFTT}wM9!et@iH-_ zgO{#)E#SyXe<~x{6Yqj(Yy;{$DvQ(OQ@5Fk$@;eOIgZ zxly;@-+T6meItDwqSnqH{O@Afi@ISc|5~8+OJ=B3f#YGB$~j|o^Hbdd^yS?S&5y}z zp1V)J>se@7u5Dpa?+?RI+Lzb@MJMe-4_RCcO+6$m*E2q(hmk3ZjbFm`oqY$*kH}(JrP9cbEr(b;kUedvwwI0)mk@&P2w5@y`pB7s{MZ zH!4tdi&L52@{DjOnVkTWuy2yWvLtHvhEl@$oLGsSeC;geoIU1k-hJ;QMm2DifdaLb z54`9m&c~`EW-J-MjX59Xhn;3Vnkf90Kd0;v6wKC;U&K1B0D+dAP^R(_xDPKB4yMe2s2juvBowy6!a z_nb;Uu!wl$`c#8uYKt|Sc;{um^3rvOPj>(v8$1~QnUuUvt8or$2~7}5Z~Q1`Q-&qZ zLZx@juQ$9GI$goMZ;nG9s+Yw7om-Ix#^G|b*|@S?YQJ?&Y!<%3pR)mzm%(ZAMcIwc zu&Z_EgI_L<73#D+MlbY)CH{h8ysupW{XpsKayppiOrtc5DWRkpBoa}49TdB)|7^5A zPlYryVgscz-->Q_*}ZNXT5avfF*cPVdKV{2N1N8a z(%=B)XTX1U`)$GWw&|dIsm75OlJxe?1?!@@aB>~T)vLlY>@Wl2a@P4Cps*`mAIV%> zc{t;`r-_KD7W;I*gq9%Ols#F&Pxi|OhdZA*P;oC>=OrR{7D7W4xY76I3X}xXN0ETV z5dt4XQNr(yf9~qb^Wa_iYoTBzDD}3KLC_jqQc?(=qwbqdulE66 zFG+`yIhvFbPa_I!Qr=j!tip45#EM2oH$AXJ2gum}g@To9`Cb>5D&7WAHCu5)X3omOwW!iiHGUPn}{+ z!=>7Twnzf_rLp%;+Fi}(W_mp}o8J;oVnlxiiAbD}UaKZM2+#IJGN*U#b}P(YFS|9o z>y9l{=Sel-Y|)E1EQ1sR#PW7F5Ls5}R~|h#^4v$uB6!csjHUahAcgKkphF3qdE+ z9&DcCl$Q5NLGlV5dHJmhjd>?qk7j3P)qyj!HYPMk8=sBwtV7JO6>1#! zsqurcnHk^KVQA!m(5{gW)p2i8r4T!ZnZ&jl@&|$gdMZh^S%GuMCy(-NN|i{!-Y?ir zX`tm#)kuz&LW=p`y$;;~U-Tm~MhrNYHu6w;wYk6GXRxGB^EGYG4FYbcU0MST(;e0? zC^s7{sTWWaM-v_@SpSm5`w=sY*To!aXX~asMXx{r>C9kY$q6zbOY0dxojT zSieDLi%04c-3o2;>7KVN^5~6Bu&>?G_)nHeC@JQa&6YI9iOkw<_|iSG&d6(%B0=lx z(qaMem~wvKqGIx6XbHDRJGNjN!+8jNL@45552R_N?2yOJ_pY3}a$}obIxNy>DU-^z zxpyl<5vjkRKL_h}fHq2aRQi$iCj1PJEnk&-$fL>p7r{I+lP&5!T!n&2P%2xU1{}Pc z-n#XDjqI{HX4`uCD$=WRw4XGFIMk5h%AlmUUL;%kC-D(<97Szli*U-@J5x+QW=j zH0*0%*Exu`3r$}3I|6s^X>@%Rz#q6JNK98tjiyADghZVe&^-DG|7nQ4S#bY%Z+fX{ zl!JU17CEVY`NEgnyA9pUD;v7F*Hl|;;#Xp150~|UTLm?;1A81$zNJP4iu&-1f&E$U z_)ord-=WlTkQ8AJ)Tgt@a2)Ng`Vf}c!*LHajJx=Y zgaE<9e{x`>%_0kfB?2Bblz-g0N(tllI@@J51d6W3V!%y5X3ms5H{7>hBlT0}NOE~^ z22ynZ`E+|Igmu*FrR!QbaG#>o<;)sYb;_mFSz&^fqn?;SIDYrp+?~OYFj6#XTlU&k{$Zy zLEu*A_zw9^jT=BH7jg#L?P0!+0or=f5dP~4u2Y>GSN$;6b>jQO+X77h?HzeP%!}ZD zx-;Z-rV};-aaw=!)~5YJ`K~;o8V6H|jxLCYwTs>{6vBihi+q}L5X*|kAtdZ;blCUH z(nR4)Mf|GWd*36Tu*T7>{~j>xy#0{?{D=?Mymjjk>r(*d+~R`A4$bIlFax8Mep2GM z=&~Ny6yWM0lVB?dYJa_-a^v1Te^z4^#^b5SifTw?W7Ip(LGsI|7&U)#lK!S@NizxBXF&U$o@FSz)FrcfVFFVX|^t$0pva*{&1ADk5(Bn=-E$orG7O#3wi-ygIr-+9>{ znB$g|_^B^=SLULl_e)uCT7QUVC=Vo7Zj=ri4Dzt1%haRxZrlY5Rgz#GC~I3HJ&r@Z z+^={!g8dlekA}CFw~nvx2&>Bwu8*Rn1?f1^6kHRhcPZMP$;OxN2_b%^Z4Ro6(6z%= z%B{_o9{R0w@f1FH=2br%$S`|%*=IiJ!wHiI_D#6gXjv96VQsGqMHc!0fH@bEN| zN%Y2Gh3mcQKLbB<)FW2S-N5rXVZ7=(_BaF70Ckp|O42cKv&&X# z4~YKEeV8r^{c{|bzt%exp1>GG_GGF%R>j|L{+oYZ`?n%?VPM(ma0tKN;s17K?AoYi zUjvf4MC7){n7M8pSL2s7yI0y$N zS<@o^b;f@Z%gBqA>{CrnN*}}LTcH90UOWIAu(%H(Qo!|=C+we}pm$ZY&u6`#f>#p} zoRmq0Fz05CMU&+Wn?zjO1rEXt-@da1Y?n|Kyh|)^)$04}wqPAkCU~mpZU#ydo)tco zlHmWN;8g%Pld5|vPD*Y@o%_36&kHiF==FSMEU@<3djAi6{-j)Bsbn7_8n>5|0Xl-} z0=(PTb{IF^?&}ckD;W(@nGn;L_8v|Aw2g26h#@PN*K+A3wGUSuxvl5ELK0K@Jm;Pg zgk^_)uDEyjXa4y~v)g-Fm&=K+$-fqDEsDtK8MZ!*7ph$t@czPGKwmGiwQW!=ReL{L zqF(&LoJ-wkBkl1#kK}`N7c3+wURKTB83ppKpToFN4^=8h_E#K>T<32Vtv})Kir5Mt^y80p3M)K>o7-f>)6`D@U(~D534S~Vc)m48L zq*u0Ja#u<`&mn`&lfgmz=f1uxK^QWfUCND236&f|^r3hQB$uc2Oqmg${}T&AYPXM$ z3c~*^YLD-w7irOc zIGga*yHAQIQLn-w6XG;8AsgX_8;92)^5`q0OQ}D<)=Fy1csO_C`S82krESTrBK3O0 z)3}vYT4v`tl>kE*##H0JZfPIm)ArrjVlwQ%Gs?O^3rkHCL89?HVoyBWsCy7bV)2lo zBhXM1N?l&B#^&8UD{o8p`vVX8q|_dC^$X7;?x!c@6F%*%3>^ZU=)Z(=^pLKMc*uhC z(SrMUdKZh{_&4zACDD~Bw`a=^GeOLPMkzkOW7p3N9GZn;5Ac^$>2InHUE8Xf7C7vW z=(E}qo3J-CJn?$>&&5~oUP9f-1*=s=7Z>Y+@qGnQ(Xiun%mRp)+F@3aS@c%rv0nv` z15bPla;Jx~P@o29JNszPhO!WmvBzG(<*U1&D|hc`8Es)v!cEaK#APuteIVpGXs`f$ zaicoW7B4g8MuNtNBdEgk?g>mzyC$X+uHS9PsOLMWjK_U@*5HodxQ+mj4d{Oq0@5s>$^8=LDVNWCHumDV#J-uFb^W795*8;kTb z#2}@2MVOz%f|$)%llJ*sbXcKJ&si|>Z&999$53IqpEbeI@;koM(Z|TnbC?Qh(Xx%1 zb7r9ALpP*IuV-xP7eldBYkvU9SOKG-;Mu8F-{0sV1wPQ_MfMc&e=^6piI5?xtUwhAfZ;&IE%U9MFQa z+KgN@Y+g}f*x5-u8W4~GK2WEue_OTWS>Vmnc3z-#1>r|n+lcW7!`0*S=(v9x{`u{P z-Ms2|EF#WY=~wmSEoh+;bPQM(tR+3nS>#i$+}$Ffg7b%TZmAb@c}Pu{O$3QX ztthDKe%j+`zKDcsd3)ORG@Zv9lX&nHx^^b$nLGlA4emtm!$8cp_~r=r88e|NM86&{X+zQ9^SstqgR;8lp6>k-Af=0fDB?L~)I9_!*gn3L*l z(xO1=m+a&Mt%1EsTPGgT)13Iex68Z&HgtBcl+VoBV)HJ|$?gBQ`{DHKto+Xw0_?E(~gpXw?ZTFK5tNvwS z{#aZTH~R$*J7NSMCFHnEtC^$xc8Fkb#U&Xp4B5R)*FO4(-#XMik@-ob@)wehflsFj z6t=P4KdpG*Sbl5iVWsR&+9adPOJ^OamwfuK&6G;k`77CAq>>~cqc(2$41CM1iC`{i zCCBBX#s);DEoZjOSG65!LP!skv!TLttf7XPT&<-6k!J7xhz;o~+Uzv2M;M`!qOKL4 znAK&r?-narMeR@vpq(*e_5t`9@Cz5e7`cZ1$>&3`nXVt)nPZ8F%J_n_A={4lBbpT6 zN@cYOFc17jy>mVy#_sSP+K&FtHz4#K`pq))?g%dEeuh*30r z)&LwuofEIl)q>j3LTI{PGi5QhQ%v>225~jkGfNn!?hR|9RnpnAcn`^`*xwOWC4i{_ z0(;1)3TKyPf9UIer+rE5p1{Q))LYOvTwAW3nj_}Pf(fs!-|zFC2J)@sO3dc1{sHs; z@&Tht_$g&>EV=%Gy)NoP4H&g7-nPF|{kCFWC==)IjD5p^p7j zc#1}Fd==E-PZHCM{^1z{hjnH{m+VJsx0ig6W*(%RiOf^mvC?EiBCh~qc4T^ z^3mZ!Zy|mBrmRse}kIdx`#3OJ%@9uTUFM-S|dE7~yaz zlADeexNXodRKj=J_5IaTLGpGcEp)UOA#+YDltI*Fz$WLG$DhaT$hWzYhB|Y9!pKmk zDJuMzi2B|222N24NtoBizY5r?$0eI|_PJ#w!}Eww6R6pN276%f zeHvc=pHDIeunEy@B=sRmB4oPtA;c&5ENIhm(WCQC*5ABA{>)mcQT0YB!4Q4r-2k}g zAYqz@#XeEQczEcUSa6=qVcn~6x!rdXUlt<0c5`H?ugw<}fo=A~(Ux0Oy3>Q?7k>pU zqwBpY&EV-t`@EE2@5{cI?@Jsqyi0lzHO0A(FOlf)OmeI^MU`L7eR`eY-g2L5pv0N> zq=6PumNc_p{Ts1FWj&MiQcCOyVO2BvU%UACo!aMIQxZ(zv_mLCvuj3wyvE3=|f~)n)r~BoPFMoc#3m>6;FyG#C z%e>?_;WYGH(-G5LJEDYNJ2w8^*V?(^v)mWM?^W6B=^pKCiN3aWzAJcT<%dt08Oj1V zBd#8Uz4G2oU;qcoch@>@shQL{QuYyh2fGjaXdxiVN)5*Lu%kL&cQ{dSs&uUL_VM8$ z(gr_{iiZ<{lBS(ze#M(4rJ67EFn_oF_i<0u!KEg&nt3kNdv{fCDRF9kp4DllG$l{n z{|l~8^$XQgp+%QthD*2se@%?JN3peCHA2V|TSJH)`1SI>E#4|FRQe@?C|Y|KF3f%3 zI{}z%uF#CAq*DM)e44mEr&YH6D#7RqJ1}*jRqlZj630rz=XHt^zj+^CC98T~`TfAC zn^Xmf)C@TTi6hS+tYcbD5;|x?L6^RmwwdJgWd7&>+KEjR=yrQEv>a*CqqBgb$w z(5L+{kbwHxS;vmb2ji5r_pwu3N5o>hsY`-PCXP1SiAWRK^8$?F!%i(;st2(0`3~)< z8U2E}bkO(j#QUK&CGPb->F$BvCPr_n-x*G0exK1A@wxM{WRoSAIiLAf(fg!}E6r>v z5>ntgCP9DTs0(as0(Nni&_8!O#})1S92$;N@sxSmIU|*sO**4GOL$932rr;Vw zp#39;qzln&YHfp$a$v4qp}OA~{`}I=XIP^ZT_Fomm`i{wZ(@d~IP;qA7KG%XD!kZE z=RnH|++ezW{Gve~Fw3)R0pyUc=3#AZH1Sd?wLl`}pB;=_iwU}Q zVCbLMdE+Q5XYuo>w4VXJ>bp9}yq1Hdlf?REk8oiT4?&7sxx?1a51ab1`&_B3sY%c4 z#a9kaE{SDt>j#KGuLgS}31=lS&nL=LH+>%Q>zmli59sHA?ONGxmY{sBK7O13dAY4S z!wCHt{)=F++eAIUnLdltmD4`5hFs@az}FBk>#RAk`1l-Jz5qqAZ9cHq#g!Go-Fb3m zx^0Q3jQnKv(@gU{92x(dFczs*hb$sBM8C}m(!fTw*eWfve=$YTrjUt?AiiYuL8VZH zAOTb9pIQ%)%H9f~4q=WHSns}v!1tj`C-|vP?v~bINr6wV#nJvHzcn50be51j*}97~ zS3Y)#Hi_hzU!KW2)Y3u@bnd|5$~^Oa#rzcu zTjjv%T_Us{uYTj!7u0^j8_?=)`DUGxM&Z4iUx~{^ha)uALgXZGOVYb70(6jR|Fh!1 zn?4m330X<$#s1uU?@`LK6fE~!=2Fwc8?PVGyxHd69_wEiZj?j`auk0Wtd&&W z9dcrEhrz05j+M$cICC!Pp1FIDIS#bypr*^GYJvHwnn?2}DtI zMbT#C`Dqf{Lb}P}e9FNHy)}C80a|_l@|iisY2M)kzOa4#W#9p(W#t$DRny}A%K4$h zhCGgDV|>ipQ0X>L8JwvE1%~V%dY|5Z&wDlzMO2ioi=*IQkoKgygX!4~Aca88eYA?sATEwksiUsc1 z$18fGDFYl{_Qc;@IB$l|-ENiZ!KU@b|E3bLrj$=0)|O1BcRC%xF{`tFwClZo?EYVS z=Y_FGwztLnlw9(U+$WPDEazjdK%Yno0O{&XTkIa5HM@n-ba8VzZX9^*hVnY@ z-Dq1e8y}QJh0aTX?e_JI6riEe8*@8&elC4tJAm3%sQbNvP|sz%k0Dy`jfm7O{9Qo3 z!!H<RcqZ&gVhomz?ucblfo#&7@IHn)hE)O0dA={OU?F8~3B8cqNH*B&o}H`?#fM{uLE*2uPKOl8ZJhzI&jU=c+tmp%OAa=wzY9<}o(+uS%~itJS#RpAa|iLr7u=@W!Bs zqq`kG>`Sw7k(b2mO7fPXKqAF48^KDPJ5@~-&3dN`A&>+^3$Z!VL#(&&n&{9~)f0Q- z98ByHURK^^i|kwjl5Oumac|8q-}}}^rapIKLW#5EICVzRPz&3C7|MHRkHB89%P-37 z$1;h!-}zwb(waKAfehW75ERE}FaZPMH%3z{@t*2@CEl=~cT@YZ&5WNr| zxI%hZ{z~sIE~VS#61ymR7qi3DXCUSL$S+_=Ps4TBV~j=o5#2lg=q>Tmt1W3^E>UHa5 z&dbO@-&TJ6?CG+-xpN+KH@%1AakgFf^%tP3*bP+5&(|_6QZCKM!$BE(>v`*O48mVk z0JU}tyOhksO6YeCrnoz+bnYswY1~mV1?{k5Rh3il-IV@$H(#J`D@f8Q@QfO&Yx=fy z@O_N7yy)WHoR7$C-Sop3(;oyffeWaU#VGtfd0MEmvi3!z5;2MpVw7_(jw#-pBcZYU>YT%X;R3rwS9=NC9HS(CUS(>1eRktwdVFw7jE-N!zoDUuNuV%lP zc(9zu=NixBl(nL4x@ms}eu~n=Z0hAEp!vkE_0hbKLyd5zd zz$jF6d(qHS%#|yrk9A*jZ;0O z&Ek8!dqy^a#HAoyXDt@*bsR26T8HMTs#W;~^BInBs`fd%BGghiuoWb+o>Of;GQKUO z8*}+EQ9vAW9gp6OWRDg~E8Gia^ejO4`SRwM)9^IaCD3#l8iZ+AP1#y^x`5|n!_4fq zHVCJkw}sv^PC^9ynyS6fWQn6Gd z^kvXvJD@iA=@}t+h^YKzM@7K%*V}5I=bNhkYHld$2DxiZ%XUBWzy0GpUO8zuI>6QZ zacvW{ombaEj=GK`YD7#7j!7#nbNg>6DuetDF5nkOCw;6g>~neQ&0AvpYo0{C*>!*Z zpdCj@A%??k24~bCr?uS1rBGg5-;D+iTpJY`{Z8dxd2Uvgu2eD>dStSrT>oCpEannk zNZt44Oe`*PS2W+*(zcCc?pMYs4fe#+S59uLeY)Rc+v2|6+h1SD&iUYYEw(9|C|*dA zAJw;DPljdpdG5zCKwEB#$hn6x{TRn&-QUHs)KR#O*isWoQ%AbtfK@7{p*B6QzyI{x z8m(m5$hj>Tk|I2S73;EQt;*fX??dgcjBNWzj9(!42gM29cE1aD(D;-W&7W>?n~@E< zfBpYi0I@l#P)GjifP4sN8O^p#xPpA?@8?P!V^3Q64YC(1nDw4yNs`d3y$qwHnm#k> za6@qY3(I^@H(=5MQxRA<`Z}f7{af0*st>*jE>Tpx!^YLfLlLizMeB>>?btMeevUH* zq#t+o?#cXnhr}8|EXRC3dt+tFnVcn2n8>4{lEM1~#UOEXfE&do3%4$70rW5K5MXKaNV? zvDNUKnEnH%WQeYY-#@v9;$824+UtpW6uFl|zmGU=vi4=ue_CJtC%wzgfb!YWL~{-)-?Yq{#U3Aq%50I!*_2Ob&HPOIH&Zv`CQDC0Q>3< zKYwu!|MMa6Fzy`tL&1AD++<8hgTpvD4!lolZTjj1B2k8@ixc@Z-j78CKXCm8Yp)S8 z>BgHR4cea@b}I9pMgnKu{ZxN=iu}(b*|vy*U1AXxwvSI--F;PDoAy}m2oJrp7p^*@ z{bK&Djy-S1{Q+lrtx|I|;UXS*2qfiuPKZr1Tzmc3Qqim-l7##gLP*VM#EZUGfI{I6 z65cAjjn??A2J2^OS$2cl>YM6wjgvl2#Npl*;bvoGq9W?ltZ|M@iJi*Uzo4>#05M8- zpkX0QtJ~N$N!tJYHvRGZt88*H!}RnZu)D4(D=O~w%J)^qcl5T$uB_XzB35|{-JE~{Sd2Njnflj6|FE18`dz> zXZlUjMgjRIQo@xqj7+txg8rd)`?qYms87GYOfGINfIOY?H|?3{$VDE=>pFEsu$yxY z$Vh+U5nzQSi!eO8Bta{Ack*hXa!`H)kw18(DMeIpq2bbxBQNEj4286fNw{L2aRICC z&nV@#D1tM;E8qqb{BZbsQDGk8#s2?vY^x+Fe%QMBtD1a2=D09lGd8zd4+Z@$NYTje z1;2bxnoj*^yVnc4T0Eza26dl}-Kf`H?%hzQI{Jk>F{|l?Fx@K{2tW^F{>K^L$x0$q z8aA6v_f}0veqmSC5Q&qkx)IKRjpu9KR(xI}9K-tZ1M{?;8Q%l@G5#KQeqz_@6D*e- zmQyb~^wHF9f#;bFDo1?S*IK_JqxdbOsakf3G)q>mubei02*}!wz_Z8BrpIUpUO>Wn z=TMqRGoIfkZUu0|x+}g?nEiKh@;y$x-%~hnm`2rw7{f zQv%O_n83PwTk>qIjk3BbfGe=#+swIMAJflTUE%B3ui9+H^#L>|sJM4~lM1cwb?MVL zX8gSuH}Qk&o>V@>->T4y2wyJ5Ot)!{fyx5JCeJA~BWlbg?myhEpB z2*mNH>FqpBYMmIQHbxzCiEP~BFf{g2R=S&*VB8V^j)}L@3CI;Bu@d=__xdjO4REk$ zPHiZ0-S;v9eT14VEf-NVX(lj|V~FD|cx5h^NJXNZP#fHm+w?44_1r$>OIUvb))tGu zz<7gpn2zW`gwiS-3quJ?=!fJ$Bqw5N0=#KMp z@F#Qdy)}|940i2Ji3Jkt%b2=Oz&e4R=cJ2Tz22*=jf2tJk4{(@A1=C*u`RRj zEj&yGBJY2t=+?~C5Iqxi?kI<+c#0j04Mg8YCJ<>8{VC&JD!hjToS}F9zVk0Vf44hi zGS`x<#J0|w1GobJi1>Op$*`vy$;3DQ^~p+BgPOcF;setiAJn&1BwQrV?ESS_$$VP9 z$;c$RdikHi$i@p%P8pzkOqV91VxxuL`SXIm>#c?8)8Ta}%|+CB&-4k@-ALeQi|&)A zVPH`l=`0fin`DToGJL>rkd~iGBej5o$LhxyUJi^MIKf|&w@tK7T{7P_0~+$lM^rz_ zVOh+MLO5av&@7`kp9q0FSldRgJzmYLF_t)drkQ}C+YI^ReN6NvS}R-(w8)F4={U0w z-W}Be-Wc9)jqBHLWT?6IU~FS8{j*5^d-u*~fDfudZPwv;$#%>09WZ4*2c`X-yk9YJ zN!4Qb`O)QWWgjgmd2Y``g|X(mV)aSgMCBj&=R$pKj{xeEHcP-qeJ@TIQNyd_7H9Ru zmmBHD!TvzfZG2^JbejV#M1Q?|ZaZ46eT+5N8*0oB=6RaRwrmCzikDZ=;Eyy?fPD;I z*x@qK+6U&C2vCVk8NN%H`i_uq>@JiiQ0q%Y_Gg8McRgPkQo)lVIdSfGB5=@%Mel2T z?@y|A)Hf}Qg~}h#A42a0vyuGjA6`s9LN2oQxB4bSC#lC~aYqJWk~+VJcTWz3 zUS&)F$V93S!gH$0nr|8)TV&lyGXUu>B{k=>a;c{tF{|1|>eH`7r*H!2=l?jyGu{lK zD(6SqsMjX);bwO)TA^Bx+AHbe-Up?HO47?MUo-Bb{IeAnu3|~q6I+vT)hb?s`5NG- zm(VY$b0Y;@)YG&^^L^t4zQNFwK>6!)JAtWv+qNP0GU%_F;7f;>*cA)Vu!&oe1ltMg zd#`_g1~=IP*H?;RTe(|8df!Ey4DBLk%FWpxqg=qO%s6bE`@=Xf+tpb%yXo<+sSMz{ zpZ9u@Yr%$N%Qp~4;L07E&KsnzQCNhJ<9p*%R${<8F*U(GYvxr}TW5*(9oOK?o5r&@ zvyd0KE}F`zwu9j0L6#6GGXKzAN6k?n8?u5?@0h(=b|i?f_s{ z;%PgAngSF=XljT+;_KfjqFK1sM563s1$P zVxHM4kvn=~7Vq_a^*h~={Xd${GAgR~ZQGR6Al;3iNQaa%bSNp(4bmVfp}^4Hjg&M< zmw?33Lw5>Fm-Gmw4@`hMn<~L5SX1RW&~-Bw>PSc4q6i^o0=7Z0%g4OjC5aj6`C}-T{CCtk>gdbn-BU;dSc{j_``o z^E^Bh8Oa`hhQKyity3l*s{f?yJFbnRaFb-{fbb9Rb+5G1@TYr1e_&#?A*^b{vQegC zT9Sf~nU$4LfsNzO&*Y?&IFw`_;dj!qoq6Cw-Lcq?7VUHgc|H=v-7>fjr81`Q%9^%& z+nU!Sn1-wdd3U^zX=Tcm@NGGoegE$KjpL{*4dT(1EbQQ5JB6Q~JzSUe3fj}N_%?IVg*9hk_8X)d z!lE^B9pf5QN6u%CWrOP4-hO-B28HnIjaLg%V0aiWiCaK`D!Jk)1{jnf-*q$Foo~$e zR)pcHj7e!4qld&1$>ZjGyJy5yb!T&;pA+G;0W0l0!dMD{B=5DIU+<|ozHpm0)hu7b_a~b_2I(S_oQ&3VKpR^=OeY=alB>P z(H*%*Y=?PdZ5#K2&X;wK4FV?i+{o%IbfDmHf7Bo5O))v@f@Q+byn5(0{B3I^UN`T3 z@HXj?;B|G)o|Bq-Rod@PR29PCdRgj$+I-FWmO;I&Sl|)2Q7|o%W>XE%WG*mR^e5xc zEX_&Jo`)6#l_Zh!bNusA!YAf)-ft{b&4QSv>a9w|xgj3Z0Q@Q=Nego1PC5S>fpxVz zK|mn)EQ2PFPl>7vkcSU#iddSRp-iDV4?UL2!tBZJhZ9;KGxPGKloY^iIGlOk|4S=P z1iBmh4GfsAp#5$;4R^Jx$)IL7d7FB>WV1tUJru^ZK*r*2$r1TMMwEbsB??{%cP3yt z(%f+@&bccB4_q4?{%{9fQ3i|9K*1=59 z@S!Y^w_nHXXPvL~anw|MBhKeI?Qub+FGfn?j&mGt3sLgs+ifjvEP;XwjQq@YKbI)j zZeCa>crNH8XUiqY?{rRhPrgmlb1Q}Ee@?15hxyD?`9GWQyE01-#GjkI5MmkZV4~ad znrBJYuD!}9MJgY+3#f}}&_R!K7E!^lQGS&J0V7^I~PtzOqMV(&XzmB9k=n zGGEvx_Yk~KMGO~$0^+w$V*4{U_9coX0~4HWVZ8I7db4?V=B`(@emhy0b5Ev0av%NV z9Vi~#Dk*O+vO`oIX}*()N8>dtT6~%{-@IAdmG0+pJ3!+HKb$eF}#X|gag1| zXahI(a@cdGc5esdIvZ<^XVBQUIh2H5Rlb0SvT2*r=RZ4h!gBXviR&jMnq$#)Ph-Q< zz8)J*W#`Pdk5dzJW#)0yTJ9R9#qlO?b=RzR8DF){{Nholz} z!|0&IFr5rkbHpr-fm!~?q47VBgYo^BHp?seYYaEkJf6be;xB4hDdH6P8&(dj0CMs* z=(DR+d2DyO^iOu5cGD{j=xIl>4789(p;v*v{r?R67)o=ovSRQb`3%JWqV5~g!S`@L zr$%gWb)`pj#pbXaxkDnp3bra?^8(VzZU5;4426t@VJx6 zzZgt4z23+G(fob`#EFoudhsAYSyIFGJ8ApqjTG4vUxU?Ce8UNV#w+~fWZOr-DG<^j zSs>9!ytHQO-U)$`S%q!B$Bi4pSDRcpsvNB(*m-Ok=F6QP`(}0%APPizJrk}fv$(0= z&!4J(hS5JugZH1mpno_0BfS6Q8$LhUA;@j_jqm!qKGGqynV0w|54VV^1k1u|HYl2_ z@pYl;3)U~hUO}Ddk5B?MLw1=QbKkx~@Y7BDXTwNX!7Z&PYS-8CzdvME9ax`;uyg_p z0txq@}EmB4Qq@Yx5?>|OR;t?7;(CF+J~AX!Aw_lw?bNEI`zW|HPt zI8B_OKaf)5d?0MXPBfIzj-}uOOi~w3s@eolK%4QsZefmy7s!oV5!J*5EmySz*=oS7 z?YE>HhQ;d~=v6@^@+3OToUgiSPRZfzBoGgBIV8WL5J-vJpvEBk9W~-2BZuHjEy(h1j$=l6J}T*HMw#S7%oCnRsq_! z9`%2)zpNzLur4#drHl+xEE-}z4#_ zIE8nRd`fbMe-4a@mpX{;CW>Z92Xm#IkZDgc11(TfN;Tai^-Zzl%u(>IsqwA9GF|UN zq++)2Qe;WUO00(O(=v+noq;R>x^Q#TU^?Hhe+HpVU+=5P{g4E-5_7Z}E2@)haXt+U zF9vc-s+OX+UXnMy;I#yA$8OLl?ioRjg?6(RxZOYDkmRQ%1 z?b+M`+8i0Z&q+{yX)U?ZH_^e~82mYrlh@X+(%f;&Mxc1@J%DKJ<$Z|Y=N%A7j-2ZHRiz0|O$VfZuehikj z_$#N+D!f~*R!A1wDbvgfMnmo~9F6v=wIllr`k>WErOK;pjf zrAc&oC2Dz>*Lc=-_9`0e1mn79-Z_e-_3vy2FB<)Rx-1F;I;C`FB=bIDCN58tSLVKN z{DF|oU-PIfoeh4zK6^c@|F|>OZELK|m?VObOw#SEC`$YtN=YmC7Wa19o2y8{lRfER zcElXl=`ERc)do9H1(KeFD zg!(UlSJ-I$4qBwJ)#Xe4M|RHb8$PKFRVgRDKYA72oc>fjv&s}jlgLMZpzw^xB_e^2 zB|r)HkU;!VhyxA~%e5Lu@s-Qn*5tFYun#=k1NqVqFIAHJ?Go8RX{6DzBwwOCf~>P& zfA+4Cz-)~+=AiFRbS8895ccao&WW5y$moCi9L-FyAqFld=jKuoU@J7Kv#S-SWG|ct zHVJ~i2!!s$?B8$Lctm`;fF14UlLPo=e|Y2==j5`WZ)F-qT}x%Ke~5NP<$zH%9@Mp!XKZJBZx(Dn zUq_go%819)8F1 zK~KU{i|1aJ7aGSHn+0saVmmqH8#3)!gC6}QZs=L8Ptg)?u`bvOPH0A$=y%?=iH7?` z%?ApV=X{`(U>}XW&Bxumiv5thMa-Nq)ow!L=We>V;y?qKkW>=J2eAV!!3a?Xz^;#1L z-s@9OnAU=0$~f9sTaF!DicQ&p4l)!Oh;}Byd%^paT?jZV9$M_$+eN2p1lyHV!V%hF zi$3idnjqhkzybJ1|0XOT05~^9+C>mV&$Ra=jMrk%Dk-;|M`vLx zT-?|(8Q;-y$XW=qn`VpiWjJ>?*7DmwdL2)W5k9vaX>bqtYy`u(q9beGn*Oi&xXq$R z-_V&g34?g)6IKc0X;h2a?I@op0sq$)7-fxpEFoiCsH5;VA7)vDPO-zxp7QSB0m^d( ze+ynx?5$ZXlpcvKX8hDeuO+`138>j@F8OMUEGu#{qj-$v0&`>}+;I zFOzl(uWqa5?b9Wm|0*6|0UWOUEIfAog?cZt^X_|7!L|z=pl!_strt*Z7?4}Q5XICt zn%FCF&pq&IjeV^bTnNvw$P>)whwaimPhS2B^sPN7X$d;H)LaI{OSyg(g}or=3-(r& z?1px+mD8xj{En2tOiBcPKhF20mz_*5&FLXtEH^sV)+}2HX@%p%j7qF{fY~Z@i#1Dt zHJ;j`JDAZJHF>1ibEM8Mwhlnu%6A~&$BZuYS5$K!`##PoTh+irbH6PiFScS})d7ea z{O(hhqyn##3AE7W{nSU860PS90C__SNcnUqnEG}<$@rBw&dXW6oF^-c??Gn30ur<-6gMb3ud4(?lHl`40XI7SI7*e^2BtCp1lSDTRgi9r6fA-Z?(1-l|aZh77jd{}VqF2#$-C4RZ z?o~h67uN-V5b|k!*b;gSKs1Ka>zOH$kvTpk-GDJw9%Dq89TdmOMmRT}NrHjuC4Ute z4F>q{p?i zK{u`v_kX@zX5h00$;;iAke`&3;%>oLIwmA9(9wu-Hgw$CdN=vMBXb_L6qb<>lZDl9 zxgcR|a1JIm2V3D+gH&HBM_JHGlE0sM1l{BxumNrudQT63x;D-a9N~vvGHnIOhg=+m z2ueCDsT32U)Utq_oAA4opq)#c1D)%+q`_hljq5152O;kO2!~aLcc2qdh={(LZ9=6r zOfByL7ogbF3{zP77{?oc2~3~bMSV#>edUn$EOMyis>g?KNz9%FFs|o3`eR)g?#w6s zRUJ?$$sJap8K3~k`{lHImGM;3E%X~}|NGjSuoZG=B_uDT&D_UD8Cq(T8CI%#iyQ=Co zP563h9Z^|m*Z?->`+%F70X&mALg0z;<%M4A9Qp_Om&Y%&3f++rQ_n_m(Bc!t!5&03 zYKqo#@=dsr{;5~FBt-(RLfdmb^D75R8#36@(8+B6;2Td#Qrh1Ap(B@sj=T0@0;$G}=xT&dQFxe)>G)q{Gl>S-ECzMbv1GV|CkJ$!W+bfJy@t6zO+}Fd} zXP8NdkF_Gzodd8fPO&3c07Fl#hJe|?v?Ty!sLXy0Nb@o-Vq58;b-~btC~&}vu|M2i zbJH3pOU==1A+-CCG1`f90pbzCVrQ`o85Uw0b`*_@c~KD;r8ZO@XtPg`p=q;YW#hV= z^P_n*`O+P_d2QQ}d&yY4wz8UT|E1eN*~*lS0BW9Rx|Zs(GGq;cVXB`Lh64BrI4jps z?<_5vj9wLu_Ty$iNSm%&emCLvzWhs3^SxHz37D6n=IxEc#r|&nFY)fN6O-&5&vh;b zE7(*Am9%>#QhY|yEco@R4oMn&OO`SNF+I0?uF2i9pb3jnc9{Ut0_apdanjF!UT4vy zmmV~mZNh$<3+CL5{&MZ{xyDP0J!tOqQ?9#iY!fl!#MnKRO>U(ot$^es!#Ur#KmR*^ z|!LIwhOM*gKJLkY|t@eB}-!oz`CXqxupNM z=wCZc*@|q$_#X~B7KR{C6$#b|V3Mv2T@@CW;TV zWrss-f4q=t1yqu2{viknSvB5TePS#SW%b$t_*qzCkqp)(ur0|0%962Wf$jf`Kef_r z{CVebc$?ymb(#|wd$;-FrOsI+EhA9=sr?&8UeBfHZ}Yj^c129|=LX0=R2&|p@YB+Y zMuGz%yn+*Fjvbtqt_v*BcSCUgM;+k4(z$*{v_lrZ zAvKli@@pV#JBXp?4L$u{hI#S`a4fZ%782GB0|UR&ke9XS!DM;I4h|YcMFM8LBDJ?j zZpcY^APh?Y`>C^{-9br;;+KYm#T4IK_E&+P982jAHd8L)yN%N1*SlA`DM$Trer~CY zBQ>uVPlDmReWD48HG7&4wu=$AE+_1(Y^3tCRKEy0K#VgeKnT)>UM4ja?lv0 z!Ww)_0lSI`v9$cOm*jo7Y}ER`&5f1{jZe;!4uYM6(z-9;KYI=YI&5AXec8vvu?$g{ zG4nCNqA$D975*o&63tqaGgX*^9NERycFb}`A$G#+=w@UQ73V9k<>jD4&Q~^^f@jWP zU9D$@`{O|cYbGy@B#}(N3um=?3;lj|nieF9ecpOX?_lwC0v^fzlSt__n};00OiAV# z7n9nC^4dnnSN=O@uh(v)BJ)d`M~Sk~(v}L%(T8*skK#wg@&DT58FT9GA%k?WQXa2L z*~h+Cdho~`0#JmI$$zr-WH=?nQHxFhF>juX^b_GHtxQhmiF3~Gs{kxCzwPZFbscnW z(hS*5saQKdEQW<0IWS9CM2wa*rA5cYP0ugPC&d)E+^5J^)~}+jm0TR}ce1B`|X;M!5yL&5uF^=xs+t4C0-8 z;N-;boE3U6m%NXHNne(z4qg?rk3WjLOHt`FbAq%r@%K8|((Ai8KoQO*h>BVxRI*q* z;D!c(?=CgIOc-a^Bbt#2i7r;yW;aj6l&jQ?i^?$u=xpEG%()&pgVSUd7|Qwm`JW=1qrplN{T{(6X|G8cX%?gv8J|yy&fikOHN5>~NXj?v zH6h6s#(DH-q=&Xt#eq6#6>tyuG3Ndd4o5Xg z8l~K;ZlHcN8`L-Q9k`#~z>0Q1w({X%*@$qtqdiAAhrCmi>NMr`dd$Z=fB5aJ^X4&n z@lxpCCje;Xo~Mf{Xp4zbGaKAnI_7aiFQAOf^8Pv5lxidhT7|Sdm=m;?A3)RO)9x-1aM z8A~A+S8U9?Tl^gQ+5QK! z*BS4|Sa?VW-Nr6V%KAuMQx@(V6^esy--7tn(k`IQcAbll!H4y#R!u_>+}U;;G&z%( zC;%v8oL;cA)CZn~#+ZL-E+AwBw;q7H$*j_RT2jq12_;5#+sHJ}H=kd_xtIr;w@?(R zRsS6M&=`@MQ(B_^%h%A;c^&=>mn*J7Q?%%UMAzb_&f}G%trC2mLDwm|I}c98-EoTN z=pgy`%pY;rU}~aI)M&C8ekn_!sj(p{h_t~Au{Z|e0{a|ZpHhk$&{|MyZN?eL0<<^r z7}5=>{52p~qfhy7cY4uk1jAmn<^>DtfO>?&4Igv<1(^Jm^ zGN4I*v2Pf})}2Q1o3&3gcW3tx>P~$QVMmgr(&C!X_HfeoQ?EiCSA}8ufGReCtdU`< z;pi|m%)bX!5Q51SRZ=+f1yEe3t1f$Yw&2U!pPgS59RInNsn0tdy*LhwCjrDE_x?^> zu2&Xn{iP^vBdaNHpLqCK=LBsm{DNnuzxQLFiB-qVUU9nI?tCBL-k(NR-mq`YJ^`l9yz<%z~*M53?ghy5D?@QcAE<|z+B_^U`A;yXkQ zqCTJ6`{@BF7bDQ(7#U$Pn#h?D%m!&EH_aps0Q_}IJh5;Ys=lF}VW;JslO{Xtk4ya@ zCdbQY&pa0ipV1O>RxO}fhNTJJrXT`VsLibY?yl?-7UwqP+qba!E21U0Q8u zulIAPJv{Cgpk8ncTZ8KU846cXv2h-_Fc+bqY&+KV`0v&+3jY8+zJgP?)e0#20~F12 zhBA9U6fuVckB3mAC=8F;B6Yzi40`Zk)AaCz2@*y3@X_uLAZ0VlHPq9X@dF^QX;%R? zA){Icj+(*5m^dDRdyJXE_R_r-^$L=hOUvcD6J-^V=wK1*h^XFIAr>DQ5Vy z%nMhaRIejE-CxCSG3X6GXL;!Vs)s1i6g`!Ci^w<;R?f#H0#%zsr={C$J=NFqWD-(C zXrkNI(_y#C;+8@>I6w_9iH552=H4epE_Z&0&whAHayZw_97w5Ik6ctov5PF`?)6R4$oSF8#4sr-*WAyFskq8@`c#WpZ%AxJ*%Ar zlBuzmU?Vi&y#O8%<0fVn??K+t>!b7sbpG^z3#M1anx}*LBNA(~Ksi;!e{NP60n_IP zDUo+De|2ISkVgO7)FsjQHTg^M?iSA{hcbk;u~JfktG(z+L{iPM6%yk3yX3WS(6GW< zMm@R#ot-a__4Js^W`Th-3z}~i__vMeI1~f(N1{-Hn zOZ5n5{ekzu_B(L2l@xGIAo0m=Vyo2kp!g&yflXfP@Ot&m<2`yZ>LL)vOa)qg)G+Cx zjPBXj7|DfF^=K2-K01#TP`$#_v!Z4Vak-n-e^-^qGcqd`eZ9J2)yn3kR%cZ*k6?%a zs_MiRJ7>mZ5*_YeI|L%iKV`aN0ph9;wiL1yi#ZQ~ny@dGnXz$K8693%RPSG-o|C>2 z$^t!(V*BrG=p=~FdS}tQWc_+z(ird_4r&i3F~aj!e@c7_mp6720`CH}ERWen9KA^v zmO4}?fV=P*#<~O-;~ek>kiw{Z@DFDQ^QdZfKJ8b!f6DjxCx1_XL=%%+qnU1bq52uE z0Ov~8Ypz+vR^W%EJ)K_;x>9GrcThs~MPVnxF&eng>2S^{{pFD47ix~q_M6PAZE8`P zMb@;GpWB@av!3Z*Po4f_hU~vq6JO-I5Bvg+nFlv9NK8xDjV)8D*c z#X;iU-6*jamf!=nJn#`vJOq4%@v|2i&{_L*^(Dkx;kP)Gnyf8DHSDV%m2yB3X}xhZ zv*uU;s$Um!@@TiV`W?Nxy=O!yJze3u@KvlZ@olT%qX3)`E!sgv_dO!I*>gLB)-b>t zHw{1jy+*_jj-cJy-NKekS*>wuRY^-Od}kT>5eM2jnfclDRkiJN@F*Z5Nbg$5VO%67 z&?c}c^?8K!3V^0(0^l<1_7@n&HYl`DF7fP^+~r$CHL#kpj;bvezL!pjvw%M&p1!Ph zs=LIlm5P`ex=(QrH9(Z2TI&+v9-m3-1^!~TWQiY)*3hNM7Z`d6dZ^E09{pCPb-?Tv zC{&J~y{3C3oD9;f+jLK!XQ2NBn?t3Sc7V>$MZ+z`wK`XyUfLFVT8Yj4MxPWT8J6S?o+nUJAT z!%Qu?(zRJ=#Lkuz+4oZZaNQM7HXrw{eVgYZ%Q%q#y(Ea2g+MlbhzBJryL6+6Z`~^tMW8iZXS~x<-QO`c#nii zM@EVhjV(G}7bWY&FmWx@S>dYdRGEk(7;Dr^=Q8t5hS^|}11c4S;pS}!eRwnC(@5v{ z8BRgqU(;tg+1-qu(I!oS#$1YwNkph`Z5&Ae^Tx74A#vm?rx4U%M4nOwMhEwB|DcDS z7G7$1cEKTjaLfiZp}&*4yhehRpckKUKpj;dz1q{KEzph8Bv1RAfKf=hBtgv2VpSHW z^i8&LRpedp^)e;x9Uw%G`d(;^(*ruhbX#!@q&wG{N6kfI$Yn8mLZc4bA^?EH)$#2?4 ztm#0mHG7{T`0A{J)3v>=%-t#;-0txdy$iGdK_;q~}%zK#f2N#I&ZeLg$lP zi}e9LllVuD<$BF|{ZvfGS|e=JwE&S0HO5VTu?5bgx2$o@{2;x**5Uwp}!U?n$QqXYc@-=e-WFhm`$UD*F7GQO?D|M80TS^1}WVXuON`l|nT@;1`Y z(GZj7pf2CgA3yxe&6AXe_geGG!h&k44|UO_7~eyfEV#U221YKS1rxVu4p^o?*!p8v z1k*zkq4X4^PrXe_9dRiYc`fH|q-s;7%MF2Dr1)e?FT74`UM6HxfL z?Klc4^b6p+-utOFy3YyS3s&lyqd~IeD9)oxUQ#0g#|rakgN=T+%XiAIe_z@qgV53! zl`9E*I&-E1Vt+3YPH2ladF%$ER2=|0vOU-@WT6Q$(P$LTz&R$w` z3#!BhQOQ0<@SMOL(B|c36I8FhW?Cq{KQkFfd9!5=o0UZMs;ga#38LdP&Fgvgfg#zz zWME%^9{(VM7{4Ov)~SwS?koIP2ddB}jB2#leZ`t)QqlTWMR)mu0 zyyB26t{uvSm7+w1?}{;c6HBq`AmY=v=HFiBg}s-2jj;QpI8!KFOT}NMQ<#l>_%}IU zrdD3>9_QBgp|#GUn^x@McdoBVxJIGeYoi+k?55@OGT+G{x8_^14ws+bG~*q0inGIR zBD^UxUN-i$7-<(tC2J(KF0|IEt<;it;JHTA-ql z6Af|CrE4Q4!>GT4y`gg)(!uw2XB!i-haTM8%Sl3<5Q zq#7{b6+VzNr`|*$7n0*Drt@FgmEw<8i$fdVKZVW~NV`I0yc7)^F&hP@IqGygG5jUz zHJN0#l+IWg65!-QEUhmb9gE&1-fKTUCEN;{3BE9F=*Jj<4)E8`{&|wMXiN@dSMgE~ zlqw-G#Q#p$iK@LStnc^T&(YLQL3J0{V*mVzc>f$zO7c8 z`07K-IjPMwC#oO){%Y3f!LdRl3}GVw1X)pG^8toyv!waHYv`mRdxxS(}Pb;b14br2QCBI`_IH zN;dV%0ZO%2^!dlN+UHE}y{NFf{KqJcV~p}*>6;{vpx&O#;LFvwi@!EDNTVUD5mPNrD}@uKIZ_&|vb z?%(q1v;y+e?BjT5{x^+>8=+Uc<}`kC7;dhD zZaoG%6wZ{Q3*$;LF%EgT`!EEW6uNpKP9izYXn*At*9N5gwZEn@4>i{rwR+N;+Xs9W z2cLQHvEg>cL2;4j&_`l?7@evb(PdIMg^%&3Swjw-|JafoN2%lp29s{0FH>)P~dsF6or%6 zZ}r`fSJHMhx&#U(!l@|wh5^R0o|jHIR`M>*_mjGVAMWR&N{`=Cr}FV36`F7c68iR@ zMl!ke^=na~ZX>LA-nrsTFGis!(Qy0qy9GhmE*)Bh_w~z-jS z`^7E!$2a3v@N#6Pz%bDM-^alFF2@7vWU}tlhA*Dn8zz`B#_4_p8v@H(KAyUqkcxcj zemjRT9d9tD@TJla1oEQ$K))DK3}NQ^=m&zt_rRAWab~@@dz4K*H`g`JVx@ziO`AY8 z60@BT)arYf5`zqoBT_dbec$E?PELTr?Uo-42YS=C6|fzzj`I#VM%982m#taTUd9%R zJI)l$m#wRM4i}_NDdR|!O%|ddj{>Qw%yj^F)I2F)F_VPeN3xkKW1r7n?kZ1@Q&sIt zYn}xm8Ue|Kr7f(>qoNW??}ecv<#5+O?2mhnWt*a}sL{SB#kfY)*eN3MbiqPbbdZ>@ ziljtHyF&YlZ96XvLJ=uhRs}i~IBPWYB~UuhTf@Y~p+7YDASZO)&f?a8=`E1y>^7w2 zj_h2rn&4Lo4286~1=cN=VP1j*z7Ic%p1>7S5Ukt?3VQ)ZGgrQIOu1bhq#K0hXAT;W z^6MZ*l4s0w0O}&x+9v2aYDJFqx6|LmaU;A}10>ALQUTl|>Oo;lN@xL5B+D0s#GoCc zhuUVu6Vd{Dkd2tr^F!iQKtK1Ie1Xk2@z7xl68|Z?T`Al#Qq(yF@!I!;Qkw|o^hrDL zkDZ4)=;HmbCg*IB=sChn0T&kXwIDXEcR%M8wI$dwiwd zdpVhJ6u*jpoCJt2~s3Ni- zg>*96(;p?AZ*^D|eLWTT|Od*mWY%(hO|=wAbwD)dggJ zygbK$(ui@YXTVt_QW6i@W8j8v>{`bu!}RK7O45SQ)i??#0c`1$CiP^D!Ab}pAlvu z$mvjSo4wD4UEFDVtKT#rje&ou=9`c{tTdWjP^w?2+bO%XL#~FMpUyliP%L!T_HGVE z+*6AcBa#{js%sr;q83^pgmqkg;riNfd+I8(U~F$4r@?CjIGqIs*uzpL0Z+UJ`<;oG zO!G8JK^QffWVZc>Q1$DSbi7>>t^a)y@8PrdVM;raN$)`9BG&L1%3w?Okp8)8k%>55 zo~g(}JP>P^YV^r1-RAo=d6m#GAL81Qw6Hfl&BIoe!q09^r7%2m`@D)d=6gGmMUPHf z*4JN&Z_B&*Nhx1gN6c*H4K}WYiI;`3qE5~Rqjruy<{lLRwJ-Yqu?AvOG3E=`Tmcaa z=;yNjmPvL!GREos_PJI!UsuQMQsnr^Doa`-K1pNlO!=U)#e z7Z!v**}D7W(CD;Rrl6+;kp!F^x4PSjQEM)g34DXvPeB{spZ$Ju+Whty_z;yc=K8VE zB-3>% z@v3^h5?AnkAuz7!ws5de?#sUuGM+zGJ`($|d=N~pu+wFb!nvlKwA&N41we3Rp(QW6 z$w!ESHE*|`#Yq>S*B1cUpj{GfYA6Q*kpj(Vd-R~jep~E+JYp2fGG8S zieK@&XJ^7A~CP@V*>zce}>l)%% zf?xr@X`d%BWgKKn7m*fKeXSnIAOKAHgg_O&)=&;F-jPGqJCE|CGpV#{r1NsLfv01D zX?tgJCQ)OJYf13$%xhfA3)&s14+9Pt{X`vW$VVnZLhA0cP=!EL83l(PUO(@m!;G|b zi?}M)sP6=>w^^(LVZUgus`XL5&_!}4Gh(1_$iDyg5&R> z`u`T-O=eq-`}z;n|HXa?o@BEdp(p{9Md#SiO`doBjwXyXSd&&EQ{4&hcBFnj!M*Qvg+C*uoe=&a*LtQP3#Y^P*YMReBJz)@n%4CBl2e z-e}CdV~gkY>$h2Ck7yTum2vxT|0$I0+aWdK(qAY$dLoM*q9gxZbb{LHzOpCn8Syv= zPt8{!%Tv%oY%ybBB8O*`CnVd;JmcfQDmomPA+Oa%d!W-y{r}3{{{{8%g1);!<{0N~3&7b_&_nMrmvG5F^?gn>7XhwZ7I?4~ zv<~GuHe!|H`EWQBpie6hY8h-l#h-)z-3fpLLm>K62lm6qjQGGuyh}mw#p3M7kh|J! zLtqjl5yg#}LS(efCzxlFAtW>yTcR~NhSs3|dos}} z!Dpb!UVop&SqoNBZ&C~ZfI4{}a`M(H9e`{FEbIFa1U|9L21Y!zqd@?qzIjJzMl9t= z2%PPBEKLs|^qiu93EZgr-rDYlO?Y_;K#c4LJ;=hkbwU&`nH)Rv7SiR9@KJ`F&mB$7a&CAPnEYG#SSaE5gN1+I z&tD+xQ)jXL!9>9^80E+N~P&h)WI!OzxFTSq75VrrgAw>D$e!yuTS3V_Bqc{!4G6(tebIra5@eqTS&_1w?C#v@Hj%7DB=K+;_qu3%t`l< zi=5_!YR*X`fgJaok3$q*^`Uf5weuiSCduPoNehd@cYIt)Oo^D@x>QAi@?%BUW9CML zK<$w559;_mM_sH_6~~%a^+)!lsZIUG@lKm?qp@O_J(+!(D8~|@Wqyl`!4k;4eIbX~ z9UTwH7ooiqYAdO<`V~)eU)2Qo_))Q=vI!)Z3gtg*{AW?kt)Lf=@_7H`O%y~OkW6oO zgUnbF$g;HoTI7qizp+=QSfIIUtOi!nMIp!eCVYQc#f&)4Bs<^b-@w)QFcn1A0c%07 zShxnmC+*hWgEJ4BU?e_kfP7I9B<@K9{sTJhMiQv1l*vu>hqxU;!1*MF&_6 z50Sr)e8C-^3alJ0PHKC&=r+3OdXVdhe5dWJszmGkke?BP*~jHaKg-ipmax7vxC126 z3%pf5m;@;x?)Hm!;);mtfp3ylLGmFD2&&%dbD;RfaRB?{F8NlOV9zSftt+Z+)ABx> zO2G))Dhb8#vmKZOmOO&~d#=3xnyUb6|MfSLb@gff9iv2k&fOa;qDl>=#BVj%fLE{h z@yXd13OQJM3p-;D`J6BJwZF3eV?=fNRM7Y@xo!C6Y3DLa`*N3$%+RNb3(pCGQ;Oxy z0X&>5lfRa0?O~9Euc|;Sp)4R1kJ!i0cdoaydjs!1)k$(+F7H4NGaBL_yvQc7H$9X( z>>dofpC-%I9xXtuQp&a)x-J-`n@%_JFW}a<IH!hfM&w_zsDy20Dn{84c0T(riW|NrLJHk(ohk~Csv!Nt zsLyp~UVR{SsTLLF;r_mgavZ0)Jg;}q_>*wY_Rd?H_D&~CZ;j0;b`V8<&nrTnr+_J+ zR-QESs66Pmf#}Zp6^{13<+&{f2abu|71W`=JtPQZ20^|Fy#@>yhmeg+O<@D@y1IW zElwDnthM}97Ia(2Hd45nGx}^Y`X8QCJYdI2pZk)6;G?vQpdE)_0xR#xmHq2p$R!$y z7UWVIq6fbnm1WTnpV{Wd#zxbD5cXXUr&c)t^dv|=aF>XPhZz?%z)nY2rGO-6F#9Id zBR5EUE=`hf+o1;)TNf$p)no*;2&`Qev&(*2g6PC4JC|!1BnvJP?*JajP(gT;bO{^D z-iU5lfD;eoA0@xjXJaUhso80+_YN2Ul2#qOSJ%X&dpxyV3y?X}E|#9gYm|dg9gV8T zs+e^;gc=Po$IN0tpi~tolVP2ozTxx$RYP5hr)wq!jA$CS##cdCO{}gfVJzZ>g)9rh zENpvMDP2q^UA8pIhNtiI(nx0Zsa8<956$kLx+yQrk~H#L{v4G)51)EIs(L`K3@zR( zK9I+Uu}Ry?exwJvnWWSmYmxBap4^VJy+HeII=9-c6a7Yd->&IN2V8~n*vV)Oh_37- zuqzryG)JWT`GM0^>3dK0JkB^L(B+oqk8omzREtd6OsWV9+WYrw2 zLBwrQxQs$Y6W}=(I%buG0fF(8Tco*Dr{9OGJz%NJk|a( z)q&!m=YK&7AL{OP_I{5#J>WOPWP7B6Ho#{TpZGckQTt0})j;Wk{ z5P+kx6iFCeu1c%&kUw7G1muWUSx3tsfPvW7kVt4k zqI7`esW^ALzoza(k$pVHSC0b7(c1sfbd^DIbkP!bC%8+1;O?-&9fG@C2oN+lEKYED z3l>6fhXh#M-Q8V+`^w{cuil@nn)$J_b!TSpIo*A_w-s%dBi|{pC0L3k@<`fzEGBBog6%w zDnUe1RFS&?jk4kgD>H9W^tzNDK0k6xroLSEh+GTv2EK)##Y06B&a=0L-aX&cG6R_% zq@l^vLxrhUlVb=^&H(r}ufcRRs`|kpd2Vh$%YfgP1*CbugoJu8LZD6ktEQMI@7N)- zgP*~MzwzG9UV99YHH#~%97S)4r9QzMkD&whi^w;vrINmf|45U>ZfWxaJGxco!}F6$ zQO}jpqi>&HYZ#HLTT9WTx`&2YGW0Fij3~#gQ2i}cu~tf+{pTsj2n?PYEwp&YBjM_E zr8XwNOI@$voDH=?DDBMGGpj**+L+J+vKOFY3wYcxZp;E%Lyr4Fl14!K-(&p{WD z@6{Y~?o?>LonKhmO?RpErxA)_s$APR0inr6IT$=G~_!aNSw{kP^)A&e_2 znPM&fc*j-_$FqGs{*8Y|QDN5c((_cgsiIk9#etKSAY)JS%z_8Xy>|=Inkd)O3(nuM zFP`0)c;On<@QGpTW z0}eN;Yrrost=GZ_fCCIOH!A_K9Bp(Zwt2^M0SvQ<*|+YUQEa9^dFr#V46DKc0kg6a zK(p8SqELRs+yv08J9y&a(lY)NQInD%c`zg6DM$X^Uu_%;P#T z_bH&BOJdCS@J|Fl+r+Q;_Zr;#n8?I!>hgFmb=seHk!L{wuMzZ}e}6A$J?xHu?6mX6 zl5l0jlCUSS)pQWhc)4WIz@C`hd!9)w6bk1$&?J9tvOn&{6_#;<*sCWvcu^EY@;n|y z++Q5Z&pOH)$X-qcH~#K-!P?CWfIGe`bMx%X`JO2z-xkDrQBU46c`#T^-ewrPgf!ZK zI*vLo>)SO{lJCzJcT|f|57KRGEfk77c`ers+P6bvZT@|@rTrUMwN|Gd^k5G7&wund z?@$PKv31qs4fs#DZF{pnf?HU49$t`vLA$HC4sE~~l zM47-Ph7rd9<=75_ip@g`uTwh#V$qXXExXRtjQwf*P>u)-NldEVo0z-b#0E>jC_yoj zAAnJ~GN6(Vx$G*C;TN8a)Ii9lWf#dit?BQ&@^@Cq zSHB`h=J3xdyo82dD3c7Jq%3fa@M|+^_4xB4+T8_+c=$R{t#~v2hY8@)M zKC$f%%k}oc7%tngMVcqZyCNNkHjeMVGGc^V3Tk!+nUI(m)&Rpg{evVK`aM#94R{zz zu%;(d1Y^8Tr$UI<6Lym2{J78g7YJ%IF9HHyEprz&&x=NpY$&?;8OH&DK-CCV0WFEo zQfnF9t?v65-8P*u`#{r7-5k_3SpmTuOQLu#C-vI;dZm03Lij!^ zp-R1)l-w@&#_4QNf&{%^R0hnkBpfLbxLj$ET}Kk`_hPjum4nAMrhoSx&0llGucL+z z!X20~yz%I}uw9$ZSLWD>g3JUy|9n^Av#TVmZnSTD*(K<{&Tjfgr|TxY_W0jN=E8s! ztlzbn_S*r^8w{Y##5Y9CedK-Sao+xBXBKmKW6bSO=RXZmx8;JZ%WWQ+0VlEMDRQpL zYD3AG;z3q>Khr8#*IeM^Dr8OuBsZem(54040X^k{Ir( zhUn&q25ccqLKN)hL^Eh_GdCE2bHD{e7GtVTrTF?(D(Y-N#EMzF`wN;K`bi$*uL)8Z zKwx*##?as@yRUTw0aB(_7qCHe3rC#0`spl(fN2T=COE+$tFMree;Y$v0#GW)U-Z)} zL|`{I8>#8IUS;2YkW{SQ302#Mnu9@nk&_OESu;~9T8{KlZaH%yy>;x}6ImA4_g*hB zK7B+4819sxXJY4(ILNQMIGvdhNy8{O0&#m5Gns!D}z19GPCsMET5JlY5;Ya1%o4L=Ennx}hcgVu z4LdcjdQ$4T8l8M0nI1Su?$;pJ#i1+T+p3QhrjTKGTc(*i+s2~cv1%iqJj}3j zh|KJ0X~DU-Lz(knx=*}$`$f5a8`#8Uk<4JO2vF-?ZS6f^pl}iR8)nDz*=ZeGdQr$* zREE`~YRgz?pfyh7_z4`>R`LU;abf-iW_1zYEb0t%c>Uj_&R1)FMTe&++UIwVz9U`S z7jHUp089L-TC&8wu#M6yjia%X<7U?^v{lhOf#Z~wrculs?Q{)KPj zCoVlAD-iCZHl;3TbL|)x&=*zjZysHv-IP|<8~PNw9<=7{z7s(*QV2Yj(J}{oYKte; zFI)FItLD9&*FNaQR>lHtq#Ulg#cL~LrOxMIe*f#_q;D+v)>~XY0P4v1R zasqY<3;Ta(-fj>7N}F)S2*maTznd%;@i-j4OZ~|f_j>u){7qzhkmFdJ;SGB2)Qa-> z^&Ikw3%!lHS+)iyX_gGpnvVmH04E=3L}W@`DOw7_cjXwc|B@ia3xO@7<$ASd96}qO zjo_;&09==dYn^J62JmI>W}y~HRr!TFEfKhjl7}f79y(uVwSXZEY8iRmf(5mMon116 z79gd__TRSxZZi+es!;yiVY{R$r813F)^^dS@f^I8(7a%NvvBLW72A4l>A1PkDhov0 zp~vITmj(L-icvb6KcDK`PP}}(0Rf(sL=Mul`4f-WppcVj)FqgKXbq5^0uY9QSWK&= z-Qz=iNsfwdoMYG5cyNjZI%ud|QjcpqdP=>r#=*z5=|8%AUx@QQC~AugR}_Hx0-a)eN) zTss_Nw{)5m#xuebnqR~B%o%Y_oDLE7(EB6zYX%y}4+cohGRoQ?*Ac;x-@k26(Y5Q> zzXqQ>I-~<6Z=22s3B)j|o{yAs--?Fc_3ImLV{HgQDczk^j$dBJxR>tm0zt%JN;^=X1>5Q&bc1(^%T>Y78Ux?MAnSm zFZ~)5bmoyS2#K@Nd^nLnw#k8_s4ncy3w#FoAL3L1rfy}@`adDfe|Udlv-yzclGC{x zquV5zOuGv9xHcdfyk&wEPya?I>g)LSt=SbLepcOa=z*$%oEqxGrJgBg0;_g4yO1xh zvxN9fM@n$Q%jSR62?A^Ew%RAg4(p5J41)02@Bw?#qqaTeXnHY#bl^1VrWQooQr7)D zHpL#U6R^pq7rK(AMParI)p{*?DG{}bu@cQ#-I|A@1a5OQgIMDfaVj7JzRLm^z>dIv zj);_N9xm!Rs1Sel(_@q}%LTB4@|_$S6%fYTb3b;8EO$jPz+9jOQCTxDHLQS$u%0JQ z0<56X{i|RGV;-2Hn*4?MZv&&KO-ES2T}WCIS_w-rTgQ;EwBW&y;LjV?KanftjJRi} zMuH|?uEVVVk-klou;_<#cOhTD3U{=hrTDMf#ofy6P2LTvTId>?{K445NFi$pp+|Gr@4Gz za<8t~^(d91G%QzEuf{CmVyPfl=5q+Uform;Gun4Hhc_3DN2{{2Aj7A>QABTO2`*QF zB9mGH%Tm{^(YICZqM%O_dWRhpG=KNPT*mQp)*;I3A+yt#-==we|E<^`Ot|>*O|FUv z6+71JIK_e5$p@aH2vu57Wi~B9`$4cQ7{yEQ(7-9Mhz-kg+bj0CP=H^ zqR6YSGC(a>5vuv3x)L`J$f5P0m*V~@v|A5(3H18?!}%DYyu=>xt@aQQPC zGvjw6^*T3-?Pn|GxU{HuPQHWwto2-evs6R70BV9rp(a4CHCADz5TGbjX$UAttvm!c zd19u5EptWPJu3X)Nzqwi{6q8eD5)K=#<9e_&mgGkZFK&GF{>o1nJj@L7$fbC$Sg0Ao5gE8b1%5=S~yk6@*WMW=< zL1>$iRQAHCt>iQobDCZ>dL6$AQK-5`s4EQ~F4N;FgvQLqDfFxll*IIAu&6}QZqw1r zWp&zFQ1R=?$y&aygyN2P53h?fa?rcw^E(vBh4b0HZ_%>;971Tb@dw*|kgUAVkkBFu z+!q<2^g&yFnut@JAu>e&3(ht2j)h9|{poQ|RHIW&A3Ad$Etm}rgVn6w8V~ulE`2%u zbM4pkmY@rxm4!A6@MXHbS)k!+Na9fdpK4(cy-zN)_ZGx4zyu_9Ac1ZC6JLYMi#G=0 z%BG(8vzR0c=;Sc>z)(0-@^xiuw8CJdAI~xVnmApXbFY=frTo@h$$*I=KE$0!8pp*? zr3oa^aiDeLp*ymWi39T!1PcwnYOg&`#orEAD>$0`=g z(|b3y>_{$UI>dfEVm3XEvQ4_jm|St3ZARhBamf4v2>8VeeO4(8^aD@6u7qqt7(S{U za&_5XucLMJcV%K|uJVD!p+$oB@VK3c6?H>3*KdCh?=#uEp>c_4%83z}G9Cw9#dkdC@VNKF~5WBG@1Q= z5Ho~1+2`@gMD`&95UCw%+I&w>Ai|#KlI_RE$XALUxZ`ahvkteX4YoJSmo%BE^_0oN zoPUm`v-$i5`9l&iv- z#5nO>waa4<+s+5Uq$oolc4PnKM5{=>c}v7{;kZU7ozXn)`iiwec1ixgj=EX`2ic@5 zR4Za5;Wdd(hOT}Z_UaN!aIAAseURcvP=|O+#s_BdY-vHQKm78XeG#fwyf;5cY5_VE zRX|iOK;MX?ucIERH({u1Gj4;)0#FZS#E7qZ%@KT@Uk-e*i1Jqf=_-ubIxsagEeP(! z08yxESUhYcg*2gK3m9U&7Fr9ux{gF894Vgs?EI9G$Qr}ln0P{l84m%JrXNZ8%&jpXG;Sb; zkrdX8u<5$wp0IRDj(&vLf?rutjqcL%fj8hd-sgO_@o$9^0E^k6=5VFa{*9cO*UqBQ zjy4W@M~28eWk7k*-Pm^0w!;r((uOBT$XDvf`e;q`C%2lcGGg`N;G+TuItvk&t5Th9p{ce5&fNPTd_v200gugM&fmYh8Sdlv0Gsf9@}=%xQbA~3+{>p+Wp zKLFpj-qd44fESkMp+h}B#=zS)KzWqz%QTI-T<~w4Z%Sv#u;Lnb%;)afvY``08w@MuyCN~~`2{YrmuMv8G*@!4HNnt1w1ahtIPPF06_6md>R z(T&<4I|XwlobsBqC-$0Ld&8>oUlmxcgXZ&eq=IwSn4zQQ-C# z+14Ff%}C}xur)nR>!0&D+;+WJC%0^5s>^pH1j>kv{NQ)2ODu2AptpAwT*qPDYSF&+ zHCxm+W;{=XaEw@Ctt%~9_Sxf^w$ki*AphIpP5Dw*!9FHu$H$yYhYTiC80vPKWk`<< zinZK?t0_)9YNfl+^zvRJpk^?!V+!!<Bw^EKnB5NJj$ z`IHow&uxa%$D(IpJH=VmYltcH2W{=|f~87ZJ+J(t^D2zl5wNwdsFYR^>&j9ew|1xsyCFcdKPJQvD%cGYY&f)+{*7}$wG-)%AwqLoMgU! zPNjnT6Lgq5bVuJ$I_~GtXidEtjGeSkjQ73}iP<;qL;xk#ffe0)nV{2Y6u?-NUhS@Q zMq~8u9rI$j4osJ;V@gc=1;Fam5I=NZ_S+;WqXjk(&6WO$LucTPC*T#Y_FqS;^_uuI zDFHTn&6Q4TFwg{xGF2S{{KP(a;#x#j>^D{tg?cKrEqu527>@__)g@1&`|mH9!Ykmx zX267>wWRk%8}v&y34G({Mh4c~Z?E9*Moz=g4>gXqj$N<0zn!AL1sA;ncUnS_K2hc_ zF7p#&Tm_I|DzbzW(l}f$cg;zC2-2F4sa_`czQ{lshw1i)bo1G_8OO&>j%~ppTPoO+ z>@HDM^r~OmbRs~9n=2Nvt`d=Ow1IpDk579zJQ?5GXyvjMhI)bn|j9>J|(IS)8JZLnY^h~J2WN5tq zTt4!7Y40WzVoAaR#++Ms`(Bv;1DM!EZtwVdWProJ$-=q%yH(8Kwe?rf?6uG#%$HPMD$TI@PP)V`LFZQto=4Y?Ed(BWzC;a zAH{9&=iProZ&p0zt_m7zb?w_y4ygNv43stq1Nc%KBYj3v*!A0!4 z*?+Y(W8!9yyOVDdGlngclH2-zNF7xt_djgEsxmd4m7K|DdCe)g2sExH>7)(YCw1~1 z8;8eP#9ZxdP`sPVGms;-Us~!*D2!w)4w>@NF3;eZwg$uT!Ok1^`yH4^f2UX0BV7_1 zzTAv8_>9D!l7=9Mq}qYVj~b7rGWn)N2`3|(8yxnSzOB1%;KJI$LmGL(3u3SJIkpLY zLHZpJIqPmmrtX6dwPAf$zc?ZOCj*%_*Sm6m&J&}YC&X-P#&i8K9_lE6gM9-HAk5EP ziWyLDD-z3ysh9&cn-LY2eI-(1(X>cJ95HgggVwKWkq7Cy`;VYksywdruKmZrQBVt4H4~`xzVH;d z3T+lBeZaK}=JbI%_ED35x3&eRuD-o(uNKS~FjWKxSm6Wge?QJ&!Z;LPVNXK0JOZ%P z1mKGkxWqX2#02Xvh4*s5wIlftNf#hvs9-lIY97pnGt#GEXp`*<-%~C^OopAaD<@>9 z#nzMDlUTGFkk>IVv}@T45Zk|^=u-+s929pTY(f`yp>L!{jPD44n9GOF*a`CzP` zYQx9(b#0USS~`ubek{p~*R#QL59K_xN$saNwV<$&lJ-YO> zTR19S)uwm=W;X!w31LXC09Uo~8HV(|F!}Q%Fd+VnoE;)wnenw88MWV+vwLjFvLi?oiHEUjED% z=|2bzgwTF72{>#l?8*2%)nnkCB(Uu0zLwzphu;1sZN#0oMVta)nTItf!VLf&5Ko77 za?&lGLKjZ4g+wRd)C%|wB@O|w=c$NOR&-wM!qv(rhqSb?e#a~XvJ~9su8{v%9{5s7smU2HeS?Ohg{cr~6&J%nK2LM2M@>IBni%E#(P$L)m@H9vP znv%CGz$E?YX!bzgidkh_Y}TLRDM6xsn=ct-Hllevjdl|$#ycWFQnMQ`A6{QLviodb zc}v?#bJ)aIae!GtPf)7K3gU-I6zgwJCXN#fZ+m?_V!fsW+}J^FEp;t&Jn&GI{Js$D zC%Ez9t?JxRzu&qj{382ioW-m4nz;)5b;PGKveX3QqoW+y+iHSo{MQHKPLR@3!Llf4 zuM>^sK8Lfu)sad=06VH;Hk!9n=tUHJG;0mf2>tE2S-CSnR+GD-wnqp!c12nMP89ZT zL7X7%;~3r{=qY8~GJ3>OlWR=B`(A4#?;%h1tRKpPHtC@|%qvU_y#)YSGCMDv{{)f( zf}v0#I0|c^Mv^2CXo&>HcIkLGL?+I-_4?qw&jmf@+FmAQ^EY}J?u{bZRSYpc2)qmg z@$>V`KBs@!uo^FpQ}`4wI_2Su_pGq(yXew(r`3M2xVB#ofK-_Hot%|n+`2gG)n?EH zz@mir?7~evujO)DF@{7tPTqh?uFX5S=YQTH=1bp8|2vuU31h)A4gg4widE-BtB5E} zLHY@BOismu$@#}1=yq*u`*XBX!}cz6mP++tGFt735bT~}Ino)fMZ8ikpaZKXYLmm? zc;7pbJ?+^(pP}z6*`FvumsH|QoH+E2$#mU$Yel?UYCLxZ-8Hs{F?QVpRO-`Lg}Sb> z+tF@wFFQ`ZNaWgkTbBfpPAFRL?MArl`7Hkpb8@z_xrdLPm750V{wd19qBj&O^zyx*I>8tAr`;gqjM{TjYD z?W*-Z)%ClkmF8AgF%X++sMpvh~yai&D*CC7aW3)G8|4v zCMN(gQTa)I(cOCc{wMs+sT=eJiHz5i6ld?v{_=G#kffS?y42buVF;k0*a0c8WSm>-0?!-X0u>C}CgV zn^Az=Pb4BBuFpJO`+}P7E->@Xr?cI8wL@DyxjIRTZNENn%`1LS&qb#0OVpD=V=A-2 z@bghYt#Kzdg&@{9E0s@)ND%EFwy>HI`Sg0q-4w8PcTQQ-OGz`N46Kc?s8=O_k+TRm zNI3<4ky(XSU=8g*$&jh60s503fE5sXN5xlwGTjACjbs+er4`u(6GJ(o`E_ve1b{$1 zI^uwy&>1E=XETD;sb?j~T+8$l1Vj)5&4ek&!k(1DP>T$1he?Ho)F`1o7JIC)lcq^_ z6ucZMKBB|B4!z0QDn(`x5Yh7x$TvA|hRi(j_VPGX^qK7X<>61{J3zrQK%60zBhW8H zdhFElVRPt#`7kc=(fusqP`>1m|OQpXRF>3tA<()`1Vq17!yjqVp- zHv0BmK?ath&gFY?*{_$tk6pLbmpcX#Tf^nh$MUOs@QC~KLFU=>l8~iw(}*ja8(VWu zNVDs-3H^VY-5sJ|ukc0FoDCH0u@8l{YZUnZGaPnKn-mfZJ$&pqlHm1q4=V}1MLi-4 zQQgXjXLB2d9RVIio))OzE67Z_x5J{^(2vbhR?zoOJ4%bz+F&&skzgb68+=dgPDz8D6X5;w22o_s!kLLOn zc=Oq0-9_C-zZ7?O>)79$Ym0rvX3tkCX-yam%82)~Sbgh9oBN6gV=duq1OkM8WXkt= zXOTMlZ!U48aK_@oZ{?}XToIgCnv~>sR6;`#&*tgu4sMP=p4RcQ{1Z=!qd0))#9(|* zyiyq9fg&!zW`4jXjYk2^;iyQf0ByLz9)yp=B4(e8s-Ayr{LYMvf|)cr${&`0x=n8p z*H^)dNpGDE@0LQlhNp)z=#s?V)<_X0X`l{H$xPPyS08Azpkp*kq*Ou_qp#TlGCsb^ zQJPCasCtWC2Fkb%s6VQ*hBs^MBjSgw}kPX*1LQ(satUeWeV}jjW5fWZ! zQRd;^{5%Bg`Ft{dr$=%MA_aX#-u5zy7>cEj#Hv8W>L-!TzJFuqu9FhQPoo1q;B=-0 z-6%~sYBQQvz-GaSggCXH?G*`x(N;aicEE0pDki{BUltnB4muWcRvY}gdyTc~(OCD= z1bS+Wu|#@|XQ5R*vQUivO1j;!XbhaXbfIDkO{fDJEJOf}1ElfE>b3H6K8)bL){8`Xs;D}>7MQ=I5V!-(=yNLL*J0YO zJcNV4u1oR%2@8g^9kmN!C%Hp9UWXpue4hKF@GHJsKCBv+-Rk(nR(cBeV*jnwSz=zL z9{g5KyCddSSv3J3^q~>smyw+8p zDYaQf^LBr9g;?{JE@qO^p-#9&!~rE02nP8!pUF4axva1xwtXe|5}`aZG@n}dpekd9 zAGN@&(w(xQxC<5!%J+>FFSQue0)sIkS5KMuNkcURRm@QP>d&By{`BZVy98@3ibp&Q zdNc}en8d38o_Ru}61*>8mkuzUy7Y6H1rBC@Gtk{)&%C!cw{ZX|Tt*CfAe{V;Q2XOY z${4;l1GU=$FnGWz+fTH~K8G_9VDRx;QsNiPRjdO!L^ zqEmM%6!x1xnKzTlpD2HAE*+l|rUg?@1U4lRAHHAYsQ%g&^?xigPuKamh4=(Wb z3}qVjtR;7+nvZOi``-B;3F!BQTqikgw&B}rn={@XP7I*V&Jj@xY+c2eya_U9r@0Ny ze1h;>;MRWGud2#)&8bTe(Z~!{>TF&O3Jn|nolGGgA8=4i8se(~yzJnP#ToK(VCxs? zzL60DCX;|mabF^~V58jJ2%7LhUYCM@>(*rP2|=!`kd^zTv2(-51Kabex$urT4Pp4T z0@EMHWfKJg3SYiBHlZo#=$p79OTKei+9Rc;b7z^ACG;o^bV`(vaai%D+6yEibwC5^ejPs?j}IZAW+=0a82x6SCg{f26R zxZ$naWAWR3gthy>_M_pk+75Q{R{PEMcHYM{U-uiO>kN-^@ML9e?^EpFH;&(#jdgOX zu#i4G?1bpgD76V&9$7lO2tQ#(gB_>R?v@b$>X-a%Y52D%kRTDh46%913ap-)aa)DL zI_rIS%_upPCGCXZu$yd%pYmogM)#Dvg}BNhvP(lNEmUb}4KA`ls5k}M0HSm0LY-=( zANwqUik0!n2tmT~BI@NOi7ok+c+ZJzOnSe4?owv@R(%U%coS%v>5N_xP5+P%A5HkM z+l}-3RH1WpeBkg|)VKO{?Db97Xk8`hw{|6|ZUo)2EqGrb34d=%k7SPgeNxMnJ2%w$ zq2;tkf9rM9+jj3Kws7h}z;idMB<&j(qld;socd-%^mikMm#eEywzGX*!Hr+9SjW;< ziTB;!(T=UPeBun~ds`nPux7rZ_V-e{puF#oI4(^#QCEoerZ{et{A`P>M}ie+Hgkq2 zWnmmg1`Mxiku22xa7F0!?l;NM&Le{YY}j5k{d$!Os%wUE+T&M1>zm54% zvZt2f&E#RvO=;pOUso_aC7=SNa&lgo2>JyH$G37r5hm>Lof_q(ju;^89NO{s zMIl?08D&h?I%>SGE6qpRIWvDcN>KRrj}dGDY=1i+^+A(L?j(kjA^!P(`nL14{%a|{ zHZs}c&=AhTkFT_!t74d`)3vyqzwM`rxmDGtu5NuQWJ(CF9AjO9R#!Vl(7G(W778x+ zcQ(YXM&JBay#i055>Kh7yL<5@`viB4Y0+omOY`k*BY*9BkB@T z{~geO!Z%0elSsf*giTdBxuk^c6o^9jKIhj-$2O)^(>YaLr|-AlK5jp$mZ5Si2tn$* z^_}(A*KA!ZRJe8;a$ZMEMVDXX!P~ z`dI-{M@cIt=ix9fTr8Ipp~+sEqEgHWk@U}*j=;(l1-mm#Tokz*dht+eU^8w;>jx0} zYBzdk)>+N!Rty;KB(vxAdHnM>kJUZ-v7NcJ@xZm5{;TY^zY^Gz8pQZa#-)>7c85%09Vba zF88CttQ0ko9U!=Cd>4=!N~b!}knC|R(?*cfDCL=sbS7%igs!QN=kRK=rZwnK2QWSRB$lm08uT?R(3VK74m(D%tf0mV|>JYvSG;+pF|WKXNb z1v>=SUw#7KxBV?ZgTb=$MJBYR64jDL819GZdZtS+ix1{*@#X8^G9V>P&+et~B@QXl zA_6#o5W;r|%4$jpWz-Gg{v@c~43KaW7x63Qg3np}$k!Lyz4s~#^gdFmuVlRYtjqR5pL zk6F^d+@bi+ybZ7<`~#VMEx$CSBYt`n8u7*FB}HPyRf0mmcATPPL)$Id1EYw_g<&2sI7WvFKuwI*^z9Xzi6+US2ecRm7cdgPD4|)YSf-Rgx2!lK{DC|7Mf@bx+ zE3n#i|6-j$pdQ!!0ox->}u-_t$h=5H!k5wd?-tg5pJC?)HwhJYB$MqDKg3v)hUt;Y+gYjaqGfHl0 zWHeXNM1+`{jC^Z;KR33znOHY&be8q5&2{Pdfao&yaEQbO>e$ZYkbJkxcy*dUy8>QF zOSLm;;&2}&<@fY3KyGD!_ya$gu3Jpp@VLc}?2oX|LV38x2Ls?KCxFqaL&R4A`oh2T zXpksC2gROzzjQo3Cag4tq=ZT(n+N{E{U3>eq*^(N7M1?+FKhEe862ag$*aAi`n>E; zy6%tia;2Z>HX#kHpij)Kk9$J}LC$)NK-r84Kr9VEAM0i;jc=CCu&Y)r_Zyvr`|KPl zcKKeerfR!aOve7+C0c56I4^?FGT>i8b)^&;bh>f-0mRcv4KNZK83n^=i@+~j5kN(# zESS_K7;5@MQKx*E^mw_@0U2;+-w*UQ> zk~zAb{=&5gJ3XiM%@0TeNR@~p96VrA|H9>PZD`((0x~H~G}L0>tC*D#@kfYvR9 zg`;+vIhgf^ik;Q_ag73I25PV1$Jc&hR6nIm1D28*p(VcHy@yNJYmg8~`@znu2U;`m z4vdiw`#x^6oHDYUL)?J-kSXZKx4PB>j?Ef&U>k#`&jMGs>Q|m!xf4@ovbD#5qCl7v zmlbuXVk+GqD;sP7zGx6tj3tKf*~aken1rGes{if}NsY|A@@s~u3!ivDD#9wa*N<@( z&hyUiMST_72VPpWsFBQT-7j4t0*E}8GcO}@XWsTAb(TH$b5`abjd@iAQSZ}5j=BFiWqSU?9Z?N6fR7g)6g?=> zRT*+roPNQrm}yMN4{nsPjCE~HPHgypFM#LF-W`ZbMH2#jf)%*xDPvsSVbpn1aO|4v zfhrhWZj}}>@>>?xO4Q;_GFWEJvstv>q<(Jo4XNmJ0G_)2L+0KV`pWIX^YqG7E7@Ju z@CIh^1`Uh=W^u(MEGEZf%gOSK_lvez6{KKY&@kty&6BIxPY`;53h%+U#8&X;b^YXR z_>a?JVrC>nXNc&(`!e%k?Aql$)0Xai%w6Ihm8h*T&*4cl321Vnlh$@M`AHcj46P2K zlB9cO8YA4FlJ;D56^AMR!--R$VScm#k0suq91e}doeP|Hf3OAOEIeh>(B-qzguJIB zUs1G=1%VbvQjfJ4e+0UOi+&msfeO5;*ozK<7TW24?fG^8iVBe5YaQN~q=GeMF1(Zn zN_{`&-~Ci_p;ZbiFfYMvgdCv`iepARFp{O*EL{T#Eh#HmceV%cQK>Ohe5*E0VVKq` z9qDkpPtVQJpge~_+M|?|f5^(gm+Cr5>T929>yYwMBdMfBTw4e#+(w=%WCbgm)sJKL zffjfJy5`~X)wiU`r2^tYoTsy63wQ61D^hPV zsFl5jt?~UXlI-4(9RlbXgT9||5CR&A5_wX=LrE&)$S>A;cD4L}RA2k-dT%;dDP?tf z-3)bg<2jHW5uAA8S2+2c$U`psxV?abUAu=C`IYL&Z7UHY)zECZ7v05f zrz}~0s-Bj}ECYvLZXfTU<{~CD6jhYp)X!q(O+1k_p{n+1ZbVPyl|*%`NNYDAoPI_q z9Gg>g#T_Q5%Nv%+y<_(y@?uO--Vu>Zyn75TG(N)WMp8Han&>NS@~H=UGsMVTLXHS% zVtBc4n6(K{-gm#k?IxLqT&HgFhGl-|I@4q+Wx8sld3p-_&fQt7Y4&8s1T_k%R_c+Z zs)WaE7*)Xxy1VR=bzx&17Jn(pQVa!0cTj>&vf*2)gU&39h4IKfovfLyM9#;%Hb~KA zg+!BI5xAy@6%snXa$DwwMP5f`&@o{3t)fV5M4^8@&DU=(b_<|BxkQ>q4^of89*#;! zL9${wPvC;JuUZJ{tv5;ebqoLsuVL!;(=C<2_5e+o8vUj;D)RtB@wNKkLUW+I0Oikq zO<3-{?@)Avydk>pl8Pzu(a8u>oJTLN3AaX+3ma33R}pr%^q~8ZHpyLK3S~~=&(uCv z9TKM`H-8*^%-#su+~L{`!}2r{g~@p?g#i|o?hOV320}Ef2Xr9f4>7mFPyWBGYd$;5 z_`8f&g;9Dn;Kjfp#;3pCskbGp{Lt?H=6{Z%U}@;qpIzX#8_@d6YcNT(R~3K8c5msT zH=f%BpA0nHuiw?4XT6A4oc5L0wPWy~v?l4F|^Vnfy+NOW5I?k2j~ zYjDbXa_9&1zSXJmg(OLd}V z$k*a{y-2A@O@t*8N`r;EPF>d&59IYtFlY1MbIcX}>q=MkPjgUSS@*eCSM=nxbkw2C z7nf@~hNnd4IcfCYSTthufL-zUk%t&Zddi5W#~z2|v8z97%$3iUiXK6jd4I?7K{W0( z>|qUraU^Tpj9Hcp$-m*-mxMq7lKF*AJuzRUMLC`|WAM~l< z2J?p}ICljuAQvCoWV2rY@mZ*9kGrSCk6ouDXiQdGdC-br0~^27DTCIvv?8 z>O6todbgQCQ9&DY#)^Y&jCc)XKuUE1s%eO93^frWkC5_&>#s+54qRuBB0sf)naAr! zcqSx8d^Z~+zq|Yt4|EXw#-%0x}}Zc@UeWk->o>;BM}{hk;^tkFbEKY5vYVuW#GMD1Ug?@8c$2Qpe| zxY8D&w886!zwE}644;&Ds<&0D@v@-F!$ku0w-L`Aw*oozLc*&DQjo!h*HHusTXU{l zgN2H$KAw3d&+dz4_NSWg$Ye3*9l=%>R_`>EZht($br^bLI1~EQ!N%cuxqx#@O z3Akf4i949D#V&a28V+ds;?4jGY!I8z1eBuC*_E+4HN4CBDdK)6o*LU4!;?jf+9mX; z0aq!}s&C5=593*U`XD7Wq+rvSx1SW^LN%7L50HK6hbHNAXsmo3dm4*2E}pT|(HU$R zsAx1F^pOFT+8ka-#9n?-yTMkqfahXWk!SL~IpXHNvH=k$peP{F^7r85iTkA(n`kuq z`}9>WU8Bz9n`uq9*&K7i;6^>{IQ_?Lc|8tQpL>r$w5=Onf9Ln&atX`Th6F83h{g&e z)NWQAmTV{<4A$pn*|p16ljk%5GLOaQ`Vlnz8v~cfJyZB>Kt`r8sbJ5s$7jwl{1e8cHAVmr;(EFvWAC!-6@@AGF%M8WeO6s zYADscPXymq9uTXF&KR<0v0sr-xE8aL+>Nj;mr{=aDuAdBpzw6HQ@aqbgX3Of>7Pni zzs6cmJPrc_;eBHK$17ZM9?uyl(HQ`K8v0uuF)w!LGA69vCej>2+Xg*TX}u!!L#x@J z21@udsn(>o0Q7!Rf}L7D-DN4^%g#Xerss*tfamN00G>=@1dT-;Jam#q1h(M%hfO5 zKhl7-f>--_*Xjkoa&0=TVVGx__USc)MXFh-=9eCg-!ZDX$&#}f80ufX`aCcO1c#1z zm-<60U9RO?wKe`$!qW;k(b$G%Lj+A)rW%cX;|Hw`&q00>^@~y zVyo&ssl_NAiIO2VXO;9VDC&tqZ2?A%%e4D9Yc$Qzw0q{OYTG9T(4jq-H?XHf6TTxw zGkP?&#o6Mx2&(NW2t}Uo@w$F8)kFnH*??7wwp&r$9KQdHOnze*K=TE1WJ!zF*IY?d zu3*Q9xX+`tzw!zMs9W$aNCms2x6 z$${8P)G_+FfAl%~1ssq12yMo>-pt=J510Cr&fLAr1_e)EcU|p866~2@e7n+AC8W&q zuN$CNA;1{|r5o@82r5&UZKh^8>ioZf9rHsT!iucnAp2+xmEU(%s!10y8us-69}T(%qp$cZW1Xcjo{TcYgnS@7tNR&Wkf=zH6WT z+533}N{;=SvDI$dcQ=Y!5CQM4t_w9DY(0uJFg}Kuef(|4!$TTb`(!OKBsY32Q;NOg zmB&VHJIrz=kh6E98NDO6ahyJJsHzy@afA&{j4r19fEG9Qe%Ou#U|m{4DOh|Y?Um$~U% z+3>f+_kEIfB2gtS_lGUjRtQGKL&pFfFl_dvGs6k)y~O< zo^ql5w#g#~sx80C_}&BkcZa4YCx6*iOFrxu)RE$8xl1&V9G$1pCTiWC@%G3OXNY<3 z4a!!Gx1xubt=$mlI*@4M&%eUY)5dU$OY{k7J!ZAaev`Wyg&j|Ff7YE*q0$<+z}(w3 zy_sQ@Ejnn+KV{D1)tH(szsMOJsx@;M*ut(-2)Kj4nIFvO2ZQ68#4~_yW z6EsX8u)e>pwv{r2A~d;xh1U`Qhm&)Qj*KWEk?5RW-Y>grMb$W)zaD@cu@`4Eygh-r z7IIHFNIWE|L8lC3VHt6`!Nej^RwW=DBWd?H_@@dDLqsu?wL(7+VWAb5J%t#yd+)yU5SyzRGjk^~2-GjBiXz9TR-|O7|(B&ex8@7|L zxN@Nx#5(@9DigyUavo_b=}+BDZ2tIuMzuQRVVSO8K6>EJP_9{8i}PRUWa{}>EpimI zSjC>FN9S@)iO-;(EoScPMw$(OGyP>)eCXvhhrFa0beYye&9$|@~Ix>CrH+4@;T-1Q# z+JpY7^%Sy#)NnRCwTr3Uj>EVXYywu~TTZrE_ZM%ZePNvKDjSOQm5J$A3_ZtAMr_l=iI89vr;?e9e_M> z_xUBU^_7(aT@|+)li#Ft{YchU)?Lm`@TE`>4|hm^|JX_6yFaj}W6==?8d&}uE<=_0|dx9eq!B6IZJRbcW=y-~5xOgb_wQLSUl6FC=41XfsCaf@Qe)dcq!6A_k- z#bGCkBQ5l#p}B~Elg9*|5oy=>eGh6u)XBM|h8|_pm6>hk;304jvoNk+~v%FmPZb^L(Z@op0CA*4+AeaweOd@-)I=0u7|?N z(0viElvV+@i5JqrCtd-6)P{{%E!A}&vha25+gI{^vJSV_j#U@7K3%&6T&PBs#euJ= zOPvRSOopB@lR8m7(Vm=5^pbMAahFDa@RQQb<}#5lw#bGC0lF?6_go#XV-6~tNLcNv zF*=7+J~GfiBcXQ%c*N9+JrnT@E+;>V ztf6I4P4!ZT531WBQhtX%WjY`Ly?dKS5xhH+)DPCb0c@*Goqv|l2>ONS0q)FEs~(zK zls8ag#jz$m%)98sno(nk-F{G}rHYC3mz2%?z|-OA(<$<8Q}JAJPNG1cGBeH~$cv3a z7W=_%i;O;u6rmUn=hEjlvFx7f_urFZz6^$6byj_A<8D&UdOh=7rRN*n@r9%nb(2~T zC2i+27~^+bBxy>mrChnEZSU8l^IvyFX|yvNLKK?njG!@a?=V0zk)&o(1byNIf9$By z^$%gGK0Qu-0V`uPWZOtkI$I5yBztmP=0x(F(a+8@Zq}SR)YhwH`r|Eoc|3uOXa9y& z+SGB#Zg+b#SXZZiS#Y^%Nh@`zCrx#^Sm^+hgE0EGILfQ+ujOVU>=}hPq^?K8JS`>{ z*yf}`_fekg8)s!9fa8n0EvVu$pB$T z`c$0V@3r&%VXoU#bk^6PZOb41E(rf}zK!tGmLX{`WZ^?u`OTS!JJSE1Fd3V+4i?EL zqMh(kCDHeXe0ihQJEitJ|G@mH?T_pW6fNJ#&IkGKah>q%DM|Z$TzI=nc>a64_WYJz z!}60N|HB+Ra=(xz-S)LxXyP)ryM-HXQ}C~pVDKZK|HAOl$L-~qKO1w=VYzi;PB~py zey|5%jpTSh8vV{= zEzrNtwe^b5yv^C+0l36nc`^Tng+DzS66oSKAFVISFZFXYnt|BDz96?xh_UN=oiv53C}MNJ?w-fH3?Rn zB4xmx41Efj37Lq7(-T)6Bt4&f^QaVP)fei%`!Iow9OqRf%-XLoZb8%{c`0yWpDcoh z$LX&J$=)g;Y|#zaNPB`8_8j-*^)uct;T1SbvPBIg2a0<-c z@SsLV%I!Wv!kb2O=zAf3d=vlVZ1}v(0l<(91gQD>p~fJ;^BJa5!=?W<`@=`kf-k?o z6-2fJ7mKUe8M9Hsfm4+;Au#pd0JoX@0e5|&heL!Oc>bqz->vLQn@?8%405_uEnvjC z!pE{aSNxiae!}0FmUL@$$0!yGjkyPY0f9f%QSea9AA)BiD?bRy3@|3P4foV+Fb@dZ zNy^0HReQqQbq63`$_4SFY@K3M`U?vnJ3KF^`ia@6F}e&4FTU4kFB4$3IfA|6L=w3w zKOb=rnxEX+;UKq?S?hi;O%w6zzOg-cnBHOJa9LE)g#<7FK}?n{d22%qgwAaw zefyBlr3adG;=rvZ)Q^1P`2iN-A>aVyVI$-aQ;d~&o#eLqdEJ~8ZT zjp_O!bK-026wg#=1Y@qsiJIS{evH(!E&;bHGm7AGMB;}P;|)5S4-!r=1?r0}Mn1gmEpBzAXzL_s;WuZi>!}|ro7G(17xV1? zLm`Z*7HU!pGXDQ-nT0H^5?o1Gw1+^j@Y3TL1V8ng_~@?>xN!asrT)v8&Xl<%2(N`( zh;rI@I4CnO2{HHO4ntDcyyQ?yT?ehm4GcT@HZ<%_qRuXeJQcjR5AOt?rl@Lm}*mcytp}l9Kc8K}~t3(L~ z{VKrUv-Z+NK100*guPA$+=Oyj9|~#;N$}>36(RFoK@>8lef=^Cu#>$1cLQ zjM6|t)7zieM_-;FGcx4Ce=LMvsYSJctSh_^Jh&<#CCbqk8NZnV-ap;}xPI7q z>|sZ#(jP9q9ZaxOsog%G7J_3}_eGm-WFoId4jx9W*nDY8aX_291NgJ8SV#$bh=PUq zz=RPGo^)2QXy(AJ``~ePi1)cHwzBB9?o9~Sc#ngIO081qZ83-S#TmXn)`Z)3UOHc` zvtjY47o}tv-)jJo3>spINHM<`#u}hwruvd%0@6=s=-U@O+*NHPYt@d_E@;%g+Dd(X z%}%h-0jhG^8pgH!EsuJBqNcmqxmGo_8pY8wRwsn26L;J9`E|4U1C=tnBWD&UOr8=C zqW01N@hnVV&TCouB2~PV(h@e*Js4nkEOKFp#@mb@7!{WS)4ZEmH&^riP9Dky zD2(Xi6Tr?LDZSNVLWX4L1sw_C*2^dWDe(uutiGrgY_aX=C6pANk!YHn9=54AI5u+g z4;`lIf0quw(0;idd|TauBpZY@0znv`N!SNB0H|r4P?b7C5}si!#QdPkK48S3zg(^3 zeMEpGyj)f9IYxF8lH+s4Nd|zgvGca7&vi$o4%?^TS$y`NLl`;})I8Oth*wOJFDJK^nI6O<(`iK_ZwBiE#luP~S{$BRCin!%ePe`#XZ=A2D zEHaY|?wMBzGx#j%)YQ@xK0sTMp77;RZDA!(Uo*poxx_sk<<8Uj3*Lc|6|8bfu3rPz z6a7JjD*ZNMw<-gWQbb&(Dm?W#d>Xl@*8nu~HVBE!RU0*lCfVW%Z(N8-_|AwHn&_H| zlvx?=Dl?#_aqnc&$GobAQBYq89z|`-{o%Mo*!tVbdfw7Uq@aIMEx9w zj`(tdUw#gZq5&QmASmTpQC*UR6qKkB#)}1i2dLtwKVVEet<%P-hPw`UdtMoayVX;* zI~1)?r7Ig|iZW1#HOrfCY2UFmm(4nv{N#;?mZ)Ecz<)8$lHN(cB0^1OvIy@iBJV8G_?=w2rK7u}Cc%6^FX zni6`UqZWcaMk5TI;0w$#|90SqI9+2nd-|5KvZZsCADln=~(w~>sPlEUcAachiM>r<$gz7aXKK zr4w_$1BOLKU9h&eJH1R2lYDa;tizv4s zUw%vbjUmH_@yip)9RVxL*XiwY3dTn`Ud*)ZrP_sKkHU_r&7&>dPP!c2B1P%%@_Bu3 zz(&qu@HMi;&;|14V|1!9YVmB_Oq7?n#GhRyh>Y1NLr1#aA+5JOHUI@fT2p#i#~cBvnF%?`z1_;mJN`G7v>lMI>ucZ#c8o`Ajncw3cI#Slm=+vxpe*Y$)Fm+zO_X+~Gy{u?Y*6gI>@#sqT$M&^!}2)Xo^KL@Pe;W?;; zk$)`3rG0U;(Qg_GW_dm90$AtGMZFYXd)YsJgTlDv?E+(hKDsv?K`tiB#i-6@+3dso zw#ct1TCI}BTwZ3s1iYx(`S{67$E@YjNSNsB6l}8QD-prz`ni#ht^aO4*Oub$n-Czg zp!$(4m*AhTP}o2ru^lU*b{d;7!5wLA_@Id70J$pooH-+aKei_T=an$=tDTjTI&wp& zb9F;TYr}{q!gw2#yY^qBa_)t`TW$M)79A*kN$+|&Ag5H*=~y#uBE)@D5rlYBAa-fHl~BnCxpXS);T+qNqJ9QK4~QwB<^fHdm3mZ_4No zesVUU@jfqH%^0`7?F}W~KdeFsyuob_l5{2`mK#j`0MZ&l*N;yx4)0ko6l!=-Rz}#& z@sbp`z;}jqR?!X3jU&fm_2gH*AA4V!WZfMn6)BmfqqoyW8tiAR4pTYm0{a~6f{uhU zMO=SsXmdQAqPFYYCBo;7~*g*zC%7($uBHIc*{HoSd& zGNkB>-f)0OtUs$^{62T9-NyKH9tk(zfH>Y%V`IY$*=`}M{zC9HMOFd42aAYK&G=~e z1p~HY^k{VV=jiX|wwXne)J9wdy-&X?F=l?dsLxK@XqM>>rRUL}pw}RDvtt@tpZapf z0lFRZ`j?1Z0GRMot1-J~WP=BdfxiK@q>psxMi}F%5Wt7ST*`6=?YT(dtO4D%Ft_zH zyVa3)HbE@ldF$Ng3ro%wgz5a^b87!jel; ze92T$C+#?Wu8tof-@j`bRs5}j(a}JX|zP7s?PkxJx#?MRHIxX3K%d@ z3z-Rg*{{;@r?#p11n7*SR~n$*n2?iuEbiwz`SRJ>MvEer*W``L<5h1$loqPJ8YL;> zDCbh@l(^?5q@c6ggNzR@U|+(N+()b3!AD}w@T{2&SD|qiy4*h)@s+iSh#SX7oPM$>WXucpY9F*1|@y3YL%WOcs) zMONBeQCi+t6iTu812MmmFeN`FzZY7{)0eD{b#ZY?Pya_rBW{J?4|Q9h!yhYrb^h}! z;RFF(8ddh{dwn=uNM#!j2><)`#3db!x&xDKPNFTwzHH~8T`0R;;orW5atQr%c10Db)Y1Ki_kzY_~d=QZW=UA^JbZ#ovT zcXm$4eBxmB?|AVto~tS~so+y+$aA=-!z)IgjR6&8-R{d#5vJIp?O$v;DX0C| zRIHe6X5W$1P|RM6%f^vpx)lUVy|jeq+ap!C45_&-`H|G`y00Y`FhaHZHqJNai++3~ zzAkg}lauY;+vuwvd`Lu50K;>Kp|d$(s>=Y3-G;Li%4Nr1SJ?|!nyP z_L>Pjlu?$YcYduHP%Bbpc!@|^9J!>NGOQ=b96Ws+McWOoO#9{Y#~!7L=A)e{qxSO` z-Z<90SpTC%*WR=8B;o%BukI{AbL zO%-pdFJG;9q}?(6?9P5;Dzty2?%3s{%i7C; zGRbDkenuwNKo|r9u+Mm?q%$Ugy=wtye=Z{?P%+0#i-XEc)Qmj|wsLe*tmjlACq~Hi z>YQsDbCtO?TF22AadMZmchbJi2|zESj9 zTKpw7K*bAB|HeiJ&zB?IE~;5s;k^2j&z)Z=q(6sm&9K_Y#mX7j_vT$NjYlg7vg$N& z&(aVlV$pA!>!)iHE2?i33S^I3mGUEBN5lamb1;_6VPRgW8p&m69kNWnKhHc5XC#74 zNPyUv^Ekt>HIT-__6QjfBkIZcwSQpRq{Gp7nLN6~f0YX=MxpE}0#xSA?!=&)rGHOr zRop)`{)^Xp+|qiGaz<}@E1d933GJz|qx-t!x1$c)i z;cu0*NpM5b+mi-4bbd~XBtM@PW;z-_8cqB9QBVvF=Dk82Q9BShN7BlYtTV7t4gKo}wIby(Esm-nQ>aPFmAn;(%eUXP{=01Qt&d1vvrK@K^Wkgb=1nc@wFr zdn@`G`05!4ibC4}l^Pl$Q;lL<1!an_R@o`uR%*lqO>lV!G-#n--)NyiFE@PlZxU)W zAAJKCz!Hx(dN$&J?WOU?qdBEC%W0xMK)yq?Z?}bUjn9RBB^LnjuR9#T%nbp4PlCVK zKM7iAJ9iWBwn9)1h~it`M${j36qnnN4{^jPLzyw|ks}z_ZK6;Kj9=XAieV zZ~rM6Fb3F2;G|V>Zj1YXz%;%qq~Djlg{`0^TTo6Z-!~jMmqFZ@)kaBzh%@h;?UgMJ ze_Z)u71ji|`(5PNQ~KTwH3 z&44M!)QCF)e)>$m*(Hbab4P^5lwVc1zxSd*(FNLlkj$Rz_W_OMes*4i6eQf58er@@ z%r|}yQ07hN1*`nW3c_!;Rl=Pv*TqBdH;MGGA^la^pV=S3zD)%S&>Wa3 zpE1QH{fL*mknxLs{=MYoH6!NqzMK0x!RvP`%dj+XpJJU^-qpExZMRqT;JYpUQDAGl zLnYaE?xxxfR2wm3){ak#?-22r6e(Qxj#*x-yr3JIIR5pp0ddoYP}|8pG_^h9&Duy^ z;H%)y41UvHcG1&FW7>F7KEbn;+AOctCIRh$EC_G`H(w{^5L}2_R4&q5C$8+8eu=1iV&w_~9J^*6 zk5~5;ZrCj9PK8JJiI+rHHV8AJuQ=mTu>^SR%8js$5f)`YIaoW+0RT4ux>#%o2g;6+ zz`w@2aEq)y%!TE8jCZZoXANZ)2+zuSopv(km2(7ZezuI)Y}Kp;36#>o*i`q8M2ByL zi(vJyNaGw)(Of0-5NY<$XMa{vbcTvyhcBWnF!&X7|GcUm-DPFpQUYcS9v~o;@7ipq z&`iQ+=S61dx6mV-~_+3K2t7yn?%5CL47s;m`C&-$p7(Vx&bYc9nj}_ z+|Vm!5LK6kbpcbZCV)U@XSAH*a`g;EHJ&g~)Mg6I!F6`FPZFFE)s()@BO9tQ@A+Wz zG>pJ9OR%41R}p+MVmi$0@<*kr4HT8N z8O)?)R3=*UK-pO2JXATt7lL0hGlAKn#G^SCyz?6@=#THzuvKrAG3i2kEisY!D%bCx z;zykE-;)k{EDFWPD7GT)v8SbC*3cwWg+ej;H{|c97d$Q`z7B#UzEfi)Z312qto&pI zhPS-VQ-T#}SYJR@;M|n7ardV3%>IfsDV=J(vZ?zkHP1@%C%<5*amkitA)UG|qn_98RvO(GJn04YWfv@8z?d!1dfOi)26$bBr6_ zENxziCj4o1S@%X6N()(vEILW391R@~&6q{DJVo=hljRqpElW_q?}+N2FIiKWGyknJ zfeQaw=yj%0{TunV@ahL_ds+8t2`2rcn$&= zBh>OuFKCqqpf+A%zi-nJ1hV0`DJ8{QE^s2c*o(8y(Lp}sD*6zgzr6d@R9JqSF|GC3 zGqlL(^H20gDa(7*s!?RX8hcWjbn~w&rk|PN5Rn89D|6C z^xgf$kiPBD(s*=wv59+M41UPY7Ipp+8n}b@SI7Y$)M!M^vFK?B{47IVZp7u+WFX3EG@POLCnrx3W(IrIhGgeo4$Ar!>ZJpqrxf;cEq>Q1`eP8bAo!1dgFaIr?C zXNl7bOGU$;^RIqau*q*Zj}I>#n~sgf4?A(fk;Q3#4qG%M=(!+IOFwu5?~MT_7xwD| zviG)v!R0%DQ^4P#KWt17P|vtf9Zo&w4HBMQRvLZ&3p@n?+E=6cN!jsV9zD^sFX0Si zw`hR81GwbyqfcMB1p+LjGpC$UUc2X8f1J7lJ9QIrnt85FCp_G_f=!d26Isa$dy#>~ z(Z;Z`m7DyKz%iv9Q{e>G>$g!&`EktmRffvdH&GM)tfH0FaKk#JlmL36OMxA9TKHgU z#U4ro zaMc98aXKFo5RK7J(nBn~c%&Nxh5`&+R6E@-(~j*Y}b=-JgC8Ny#I>r=wEt z%>`XEU{L!aHT-zZD)>0`l|OC_5x@}-+9NHsTULXKU3%KdNgSHA=aRFY!!^%Xc4l(# z@iM17VNA3@N-mSC7WfI;iXLRFQ?1X!(oL9>k-?Mp@cyQ5Js(E^E1oLS7jm>J;JE8V zqX+PLVa9sy*_S`?qh9@^z5~WyD*j1AW z$l2|Fm~_*ZlT|c1FGrp%f=KX2i0_XeNXOEyVQSo;F`D|H35qAEw)5~9Qyr`R=tPD> zQdEC(jF=j;jg5_IXlk;IY&2|ue9#QVcy5F1(1xZ43vU&$e)OBoA6bUh;}wg9y#D?d zMN~V6(1&#K^nH4V?<+6SfE#jwFSD;l{=GpcS$xeUIwYIgJ$>&K^`N$W%nX`=1Z#Tt zEiL6E)C*1NyO&C^v2tIh3gEGO+VYMFwz z<2kK@GHZ9tC=x}?4XYdvs9VFWI>-ZovwoA%GHJj2Rk6caB00U{Kvu7Q;GWdZsGMk3 zHJT_*P&Yqz*PMcX5|&8KH>XYjtI)i7`%*`kg2e7HZ1~T_2KjR{cD_1%_$^VOt!(SQ z+D3*hQUjT>4dybLxX=G9QE$++$9_2C?+oIOpD6kEz%E$^$8AI^EJLgw9hYyTkZSk2 zm${Z_@B2;v25N1|e|@$Plrqw=x$rZi=IpmhNrBHWCrw&z1Qq)(VHz>pV{te&0;?q1d*&0*>(L@$M+&z70CXCwrXMWL= z=SfSMYT6ZIU-@OZ`*f6+J40l!Mw0D^)(t5MLTR<9wn)DT=h2t@`i!-7EFlCDL-su| zJ1-t<2u;dnOLUYeMkt_PBMZ0Gawovvp70`s1o7DhNoJ{DhyL$d*MLZXKxOi?dxc4v zp2^2A(WmJNZf%e}5vUFU~Az9$wDuNi-Vy%}{*P~Q{1kNyn{ssRh0!9}x& za#~e0McqTW4ZOtH$+!fh2zGv!8#a*QS`>JQ{ugCF$4Oj7Z(BaiK9`D9vmS4Jx@)y9DSDMd5?&Vpy?W9jMuu`KO|np%eY&Vf4%2 z)~V)3es$||zbSn6?VOtcI9sL9f<+SCtx^G`cxCwe+%Op#)=d^&w9jrP8iWmdX0QCZ zjOwxHIsfaO_i=s0HPRR4ht@CLh(D7AEVkqciCt{%2od%L(y6ERVG86^gP7^xMOq;6 zO_|!hE^HI=c2iVv0-jw5kkgGk=At+PxBQ1uztF>*>x|K3m!VFhQao8#Y9l)S2EVN) z(hoAP+^X&hWg)RQy8HcMYN*1?++m7r@v=%T-BY;_GP&_=ilhV z9WG=UWI~W3Y~XE=kS||baxZ~tz_W0_5Au-~sF6*J<1gGlCdU41{~Si(dDY~|LCUUp z=od9Yc>iYo0@wZuX@=!}K-nDcujClMI=Uq5Mj8`7-qB~Ki{UBhX=*%*%z>ZbX&^+d zZ=mm}QG%0QTY~KJ&NdClA*5@$P#n4z{S)Zt8nV{lHOoh;87E0MA~L~NzTnJC=YOiL zC*b@(F}=-=J54^GgKv)jBH6pDh}e+~2peke5i0kbv*)t{eeseTcqCtw@*@#i98sA9 zFk>qGQ~AWR0sBXnF>j6lc?^;5PmoRRVvcMG{_~zr88!}`7M9<}r}qdc4^+?{k#FNU zBMlFAdJH5z za)X1a1zv5*%;HDSByu@!oMjec9;O%d__{S{-l!q98E{xjg#-?+v9qL0e@ zHoL%j)DDu%-X9(#i~_``v!n`h%Oa4c0o$gilk({{h_>`?Eh?g5t}M|;v_?yomOx%~ zY-4c&dkM*yG$_wI9VBk#$=V%(L2OXn=^Oln0fbrp?STEr!iBY-F&VX51k|^;i>2PA zvjaz|$+lKJm6ZVyx5v^9Va5cCLa~zC1o~Fa9~WJ?d*EeaG7$zEg5?wP!QB_yW=aFD zB}zhcq2qeY7NT}z>Ce{irMb?nt5`=1A%G38s*NbSkEtcOOk4BnMY$B^T;wQ*j*;rf z$6ACYEab_P62ukkw@1(^SqpaH3$5E7U!wod0?=eM1)M%f7Tf=I-k9g3D67Axg@s#= zBv=s%ItRz!)x_Z!&9v=m0^galxnpXmo*G`>Uw*S>5jJuuh{g8nWWB^ZJ6axmJ!^%>mvRUC^_O0{*b~Dte)}t>MWu~WSS()4| z?+vwEg6u*SdLB@-DwDFqFLegFw-g%W?+V*@B|seEd%`CogfE`6bBn&0zRH|<&7ep% zyw$*JZ%4hMj}AQaFNf3uH4c55A|Y9bzD!=Z{&NFoQMlr_73U%5Q`rIARJy$6;vFeSkY>9B z`auHMgU&M0g%BkT$(dpxxBGvD^ByuFGZZoId+k??^J^-nKu*?M1efLcI5e>%&cDH+ zNgyVoNO&a84&`(F&Y=fu7N2{4KcC9ut%@tU0IMOw^LjgGm&_p1JOaPJaxYxQN5k~f zC1WHUDRbKJ+x`BH;D|nqF`O+Q$OdV*oJ9)mBUSa|KK|%a;z@r5w3woGd;G_L7um@3 zjYX_@_s?m3b#}22XTB<(00TrMogU}u6z+-iNjIIiPw|jmqP;NQ}WA5^DX6NFaLGSW zT&@|_qxqTnQoCg@s!h+B6HFjYEr^yket-@jCcei*wUF`h_vO7+KWa1mr?b1BS=`Sv z;fXCoXKA70t3?^loP97a%;q4ej!TdL>w+bSv*_2a;=b6|yeH5y`1vfdXuBAJ`g)A| zJPof~m~UO{eYg zfu!Kk1^xwXK@Ags>rC!`e&?jXg2{doIxDVt{wyGvaj^a_VQI<0IMyJ(-T7zWrUH$Q zh|$>{Q!Kff==;-_EmD7n0}Ux$=hF^L=1Ir-sx$!dT+U-$%yz`SI49E2VpDlkUPYxc z{h*h*P(tOz@?KLfqD0iMr^@jBGi#y+T(0vdT!d9$t7Kw(?!jo*Cj2;ab@>epgYxo* zLi+uumTBn3d78?2xpcVN(}&`~(1cj5%2=*lu-^=uu$K{4EQ78L4bSVsIXfLxEmlbm z23+Kz-mhFAf%%o^s~ruBBNR~c?>J9c3!-BsF410`N`j1G2tUgSYFnlZH5j3V`j{U~^~8hqV66qw#WMBD zcGry19s4ag&w=cX#AP))LLz}Pgk__|jIjP{-0q0TkTw63+qsC?k^Qq=Oc=A28#g<{WZ|>P%tp$HLE2^qa_#{#UCUIv~=cjC-; z61|4jqpJ3|-$`%{*oQ$!%g|)-eFm>(l2wdt-!sdC!m29Ovhs3%kwdTT+9$8e(dpA@ zCJXqXi){FZx8t@U6rTQ8#M9R9xP@=4h+EiqVb87J8 zZfF8@D@b4PkJ&cIze(=Mvn!O`8qs#+@p$4pXvBRO+v)D$#m+7H`F5Q&SHcBi{GYZ> zZsU~Bw^8)d$wn0FWix#KO&c`@P1)f2is!^o{ev+#xskqlS zcn@ukC{EC`f)AAs_#m6$`48^dk8qm0k5=APe?vh%=apD}uV&|rVSi*$8$I*Mn6`U$ z{1RRI|L=KR4KuBIDTABm#sO>E>R&QW!w=yrIN{}wIKWQ~Id)LC&B0NW>v8`wZ9AM^ zq}R{1Zl7k?(PzLI*O}1IG_1t;7qa0Q(XR_K7Soi=oP2d2k-;>;dk|yK72O!z3RWtZu!#TabZ`Gy`l^$~)^JkH9Z%V#Xl_F0N7g2KZv7Nme#F<}LK)70qM*$P=m}K&zMb$GS|C7WabaUn2G)EOX#`IZX*^Of zFfkEae4hc_0#Bex4k(?jW=!8nA1j}7L^}tH*z4RKmVGdJ%WKF#K_K$h2EGFf5^mJ5 zx@V`87=$idfav}fe~*!TPrCKoXl3x6xZ!o*NaCmde(TJ9_lVCwV(im}&}jIGP0_ot z90@s2E>3iOeNX7q#hvO{9aOHIC9E%@@4Pz5uW*^Qm}|%ECBf4rDX$m@?Prxx>)*+?N4t?pAT`VjgIp}L3e90IAyf0j0dXa zo<>}Fhmn6gS9>l}?l)&)h~SH&rQC~XEZSJ+hWr-c-FkKUJ!vqd&U_Fo(h%be-@YjN z$42A-K4jzxjB=V#&ys#F)Z>^ZIv#|SG=dfFpAjKs2rcw_X~9NdzTD)q%E$=1n12kc z4`I~Xd$rUZ*fF1*E{6gQw7cqm>0n#zXbx84i*owrt1Q0gx%0^5>7Fl1RLdLiyOs)6 zmz{hc^O~o32$RkLvpi28+WB{rHu|N)LoJ+WFbf zym%w=7Lr#C#*2qzl9Lu4!Vh|a`+i^QhRT?!yfr9u=Wppp^`t;>GedB)bd;(8R`5P` zo-|s%s(z=*Q0ezEeYFECbaGX77tktaCBGXW^ ze;36x5)AgJrd{864dUikIx=`_DkspA@}ey@abyc0EX6={4uU8J54kTv7M;?Z_5<1K z(4o9ZGXG-hY8}`cndJEP-HP=OHP@jMZUZgx`l8-I+K79cq zJbVF(H)Y(;{6KU<%H?xdT08_m9pnzOfc^ALf^LKs>wT-)xc|Z|#z6BqkTiD20HaR{ zG!X@ZJn6rGvn|%UCh!=Dt~*x$!Ig0OG_raJSN*RkFO}}JSx9i%48C$VmcIxbpcj-g zxIM!gzF5QLp>T%QlFOA>roQ0PC7{yYXH)yhO{6BR;Na*yB}Yg1s#r)R1&5s{vFy;! zG=$!Bl>c&ZB1i{x5tBQD7Gf7wHX480@M}eF77&n-5C!RyMjB~` zq_m{;K)NKAlu0Aq4WqkTi3vz|r*wDcw)@%l_dm~@z1i70J7@R3`}$ldStCR^qHfWy zKuH%Gkxkt8@P}~fn){C2f);-l+ZEA;Gf@^l*!yO3kP#`xSK<64Ole>G18r3@$@v+3 zW^6UE9!RiJB->i|J!(vaiavZG9e-KDvu3d+{s``3(A z%&9`gyN`KdsVgW!k4nl80(UYa{_w{?Xl>cfW@>c0*jUJSw!ezWYvsi%S0z3DR z`!AyOGE%|&h>-J{c`>46+C$)N+Hsx4ZCS(4&3a2HfeOWJzm16eL7kBRi-fbxBvSbr zjLLH$gi^0i*=2>o_3w>*pCaZ~3HDaM9ZmVk8Sq=1<$5(NgcsGGi3wkE-;ZsEd}BUZ zRiZ+5ur!l`TZ(U-{v-dmANX493H0_K!6Lh>Hh}IRPb0)_9M%A7Hl_bw#HqV9Q9XB} z2}~w$4RK{8m_Q*@10SNe9^sU={jy}UudBlKV_{+MWXSFq=)-KnK0n`?QLudkjoNeW zk3M3vd~Zj135^JT0>4cG`=z-zG%7zo`H{Q%xsOSiD-LfI_M|WMxZCA3V{L0MsWNh3 z8F=%`2p?^53!3qXvVi>5D%PSBR-6x7%>T5D!V>NaPRh z2mIqBDp{&Wh;EW%0QqoH1wPzDGh}Hc;6>vxi|(JgmlpUqL8(OJKYrLf8CfR|B7ICt zbP-OEA%0ku878`a#Foqs^n-%~Zph!uz=7lw1M@uK&t?y@nWgSC(x9t@)`Erl1w z41Y~_zpTXoT)SxIDK1Y5nE}Bxd8$EvGzIzL5D5e2q7`gq^^FGUp;srzNAfehjxH@4_xr zF@<~aD9e1>PqxeZxv4!6wbexNnm zs&QTp3G}|%u4$<4Ztrv=n|RJM;8Z_MJAR5p<%6FZh7bw^Y)nSy zPo$r>Z_(_5Z{+>f|NUU=HWQ9#jhMTbFZ_?BV|~swwSQOs&zA@W)Cdx)1GN@ji_jZ7 zj~tbO>YYBm5}%;Lit8@rnSg951mwH|5HfNm$)VfWDj&wN{-T1WUR^- zVXCjlN)U!A>z{xBw1G>yo^ifBd^bx}Ry#PD1MG}ua9C%$V14t%qON$> zBWy5Uvz03sL7K&W86)v-E#qhmdy>{t$@8fcsPG&RJGb)e&JL0j9a1cTm!CI8qokwUK(ZV0@R&ojAe% zy9k`nt?twvb9hMM7vJaNC&QXXdOIR>4k`jwRomZT=Y!I|3Bykb;BTT_kX(Cn!=Z|x zA^Ah@dAb0)e5Fo8Xqi3Edf~@kna5Sx~ zQu$1Tt2(u;@J#(^eO2>HEQWD%{8i~qXaQ1j8wg7Qw1M7a|HY?PTqPcKF|b!@>?#y$ z@n*ji=NE^?%!=0a`qope__Hi;onVd)jfGHV|F|9RBa+q zZ0UdKj-c}v`rZz5Hve-y4Tq0GOk>ftwUC$pc`Js?OZ;!edp4Rp1^7k?dtA~KL6##h z4Mgp+8B5_Q%9@8&FpX5;R_%kj!^!nF31i9&5QfkUPC+j!5hhhT;3CyntIJMpqqqS@ z1MDrMz1N|JWDW@b<%vJnZE(1NAb;&r(g>$VjDC!8Y0!IQ0<9o#ni1C{~@~-XZeyM=>rxtn)ju)IM4+=g2>5 z842}}_o$jO2eO7S(;CRd{BeJ)*UgSlIsyZwV{&hr=R#&sahUnogVq0$-w$*f=n|Gx zkh>}oPS7h4c9pm^VJFz1=L`tt=x=M$&lX|A4q76aeQ3K4kWh2p!PnUbP;Ed~Lfuk! zJ1-K!9UNmN+;tD_B<^g0kXe8}=J+LX6U_xKz`QNuMuGJeZ1HPoxaVh=aOonK?Qw|w zi&Jk!Q8|__JT~~5*f}!kJWC|~X`74z5$Rup=e_wnADPg`X>D}Xt0!qqNu-{7?+rub z9Pk^cSs^`FhVsZsuY=rOn2goiFsSUKy`1jx`)ybYLWcP5O6869s7XNeOwR96d1VIXKBfBhv!k%wQN@wg`*G+j#ux|+KAwjry z{mW!4>Z*#0o7Wu&wgF~wvI|`lxEUp|HLdTKohqRxM*G}%7DI8vKq8W{8FAmZ9u4Ps zy|<`?&we)IZEnRCeUL_^t+tmmOa6a%Ykv~p&x0(y@UR#J(|9}_9~jZUy|1*2UvH-A zyNrxC*M6h<80zq$k9J05|IYsV=Vu)NtC^kSJ!Nc^k}Yuhh=lfaJwIMm^KCpCw*d&o zR8)>v!x+yB9u$7@zT5>T)@TDio-2ePXYLg;g79hM0$s115L#xew|6AUZ@x1f)2i}_ zzZKHa77w+#%+WT;G?s0}LKG(1)^^oN0@h#k(_ig(Akr#s#?KOBGXtc`H7X?Hc@3QY z0HzPcPdbuC1rYLV>xL$HOHS&0%@hxQNRb+5o-!hzNum*mLc});pYfZR((8wf)a*0Z z6F=}J6rVe1!hkLhmT{&(XjF%g;5v(bPZIK84Cu?6e!!M4d9XV?u=snn&PU*(M85rI z@_`~bLiI_BsGVI|VO~5(|8NKhp$=+We8MI0%wAyTxm^vXZju$w{fljVg^%hLs`RgI zhK3qi_;g>hzx53APAfbAPPocTj|eIXCyO(xWQzW4!#V|?$486-FD0MitM&X7jSLq2 zyf;MqsE-}3u*8w^2jdI*-~H`-Z;2a*2-Jq*|0t-k7hQLXknt(1Vk3V$&TGsmtg*Yp zJ=)TT>b5JlVwd6-r>W%i0{XGH)t$9u&xPMqzTak@ft4avuepDtXMMxET}wLv)7tjG ztYM*sc#9$@k;lUxC5WY;m{g0fnS0SjNO{e!`2T&Px-3N-ASgT!y|f=V=jTNmo}Jwn zqE;WA0#r8$cmZi~McJ-bdypvW{DpbFl3|%&0ioNL$nHX@C0;E%CR7UViO&aR`{(Jt z&mQ7f6k((1cF)_dk>tO9rDpCFp7^WFoxKgVZO4RhJmBC|Jwu}1#B5K3x1VchS*it~ zYhcDmk!cBbaNHH{gPwF))wg{|2bVs38Y?iaO$QivDeTCMk5Oe?mqbI7g!N1E>NLyj z?Os5>6?48b7DMFLCN-XIipv*ifDfRGxNhbA5(k#z?+SwHK1EgJ5_JxC;r{M12uuzb zb4S`5*d%@afWU+g%HmTB`AB6@(A9oGqrNx(fmL3saB zch7uzjlpE4@sR?O=a7v61MAqg}xkjv0Z_G3sO7$`yj{U?C!V@fsR8Y2gvY-CQ! z&<}gsUjD07mVlBR)^1{X){cRYU(v&yXIwODo05Ni6{3kSltd`^H$dFd5OzS*W;X94 zjFCSf5Mj@KUb`a*MzMSdWdf8zL==g?i27AxK3aH-6G2lU0^eU>)v}AsxzDa5=FA^8 zkFD-|2D(|*)g^9p~!=nxmTdKix*xF+JW*f`$#(#TeE zAzY~1w*T?z{X?=}s4JasUxm}USYll_HY0&LvcEHM2zoxx)))(TJ1p#DGf1Fh%Yt>< zIk4;1*IH!UjHf0p!j!!$TRX9g^Swm02&e@w^WtJy1tyOjT<#w`#$GSQc9$G|@mnv* z7iU?#a*h1p81K$&5?Yd~QYa-m%)s#d8JL5c5%J$yeiii(o^?M{SMSD@s2BR}w_Rqs z*gH3IE=$$622|F=phSvE!;;Mq>ladDavM|#nt^TCK}0WnEbUKT?f0Kz? z6lQjAE9S0nLRzFO+EpSZv>J zpE5l}lv`0=_1;xq6QJLV{qW1Wdz%Q`5GQs#i#0s?ErG0g;*}8VQq7nSG+D$*o-HUJ zL;pgh819&yIi&Kc*U6r65bxRF^+dAC=aQ{yP2)$t{g`k|&e`US$W3%`_Ufa`KF~3{ zuC(~A(n%^yGo%+ELR7l2*9ZMHbj%(H${}qZCaz=IC|!91Rs2082X$#ehB%2SzobOa zTT^YbetR}mE#SRGH@=EOaDf;KJb;+A=c79&w5xe%vr0Y5 zV3^}GM?W3eGOAbeJ(5!DA>|ZBbu88FPFz(l!8TFOkOhpXbA?}V2T=bqh>>1kj&z^w zW*8wShBlCD+GEGpwWPRFZ;0S-f@EA~1R|EgV{&o>_rv!-2@ZRFx=@(1fw;2eKE?VM zpiW0`?sN&&=_c0kh=Z*mmb6IJ$4UekOmGPIm3$ev6Yv5t>8r!z;!sbApOe`WP~6VT z;1A;B3tG5OLVxVwkc-0vO-q*tq|d}6HLrXq>Zo7%X*34WuD_VXrODny6;++~%L*{F zsx&}?vUj=9uf$ct;e~tLIlS8LJa-xf+~=_3Gm-}8mV_`tCt3c0IM_?XKzufDUK|nn z%U#&+Ppx>tzYFcG*&1=^cey6xw7weh0UJz$vw)1~P#ptm1=~dJvW_&S-#mhVn=rhq zVrZ~Tf#Xc}Z~3Kxt;nBhG0oVInQxWoqzAMuA}_F1Bpk+wy7E`oNd$hd8-!!=5bnJ` zPp(4det^9oeb$@5isFH>v7?QU%^T&X-`c*+^*fiwi^3@x^DSu-jgpi?kR>0xQcw~? zj*Jpuhe7-6!YQ%%s`WKKihxbfa{e_^#|6Yz^sjPN??AXvK;ec-FkPs@nMdIBVM*q( zdZyt;YayQ&9t!$}Ug0P3E|?c`flM+O9~7^vYZ?BtJz#&Qr-oFD$%>A=3g$0@t^#NO z7_R2OEsWo{RE#3jP{ktJ--eWILmf-M{5Sw_$Umlp>M$R#^17n#NrRyU6j%0CQYuyp zfx0`#X|ckQh0f`3e;NNLi>#I*TFGd6&XEQbFybmnfXt@f*5Jd;Pa)ivpFUTV7sGMk1alJom4ltrFFh^m%=YP3B}Hw>~%r#^aW` z9(#s|cOz`!@rx2LFL4o+ps&`xZz&3@rrYeKrxF*`*zIiV5tn=e7nZ3$gY})6fA&TP z^@?(VCqpA$Or%+NT+Qql>UDM(R@WY((rhM>iT)?FgvBt;IH@oma{DEcpM+$ej%X1^ z71Lfh>c|V>^0hT7yX9N!7jL09N{@H zT*x6f?=xHJ6=5$v$s>!;I{g__fP^}hAJ<$wv}{@tn$+FOJib#RZKa7gFGyFqM*Su=Fazjz{d{UncVI8F*c3Z_@B$gv z1?h&5ZB9YI&s)~((!{s_iuyferM)|$8CRK*4*%e|vNt0@I`MRONC<^Svgq&%*xYCu zPSvP%^$TyDm>VJOhIV4-D6}&9-^<1q-q>C+ibdM`+6Y-X(+8#YUftD>EEot!k%C@w+I^~z!uEFmZ zp`I}erPcvzK5wLK$3{tDGiWO)i|Hjh4S;)Ccg`(6Pr*dm@RUGZ{65It-M!zoI6LGa zVLO$rD#_ki!xf!y?8UByNO|9ebY~a-@Rr<+6R0O`!}$d=yWM9i4kXUtwmXuPA1%tx zemXDI+|YmHxKvPIuO%O4ml%RIkMEqQIMt&2rs`i8_8G|E>_tcXZgBThpsv=>2W1Ok zo-$!(0);b)vc3KH#X;&3-A-i3V7*=?Qe>})H`c1%PbHu3m%7<&RZQ*?Kzd$XgFmhM-KUdY86 zbZv~3Tc)Z@X!p}slPUhO#xY0ZTUv@wc4K%TlXT$~Kgy#E5-8DoGIeJwOxb>O_}8nd z^8?74nVha({6A7)0A4*jw-#|~m+IBc+bM!y@ux8O&h2_#B4VrosLf|Krh4}_xW*eR z0jc^3#4Q6uAmnW{94Go)#bC_%Yo3G4*lR9o297zI+t7CSnDS`L^C3C7+x3DO zg{H3=TQz6zeD9n^c9-3@!-uM4&AL4;8Z?T;bu!KOl+>RYR85`}896LlmnlCR+?jAb#G7VV?hUU<&;k!b*2rb0Ylw5FETcjn0&EX=`TilM2 zCSEe{^0TkrOeUt43h~@1U&h5LVg-sifc`t@o&gQ|>$MRm18a@1xU2GW`f3a@mvR^6 zA6<5(-FrPcg?Ij71t4S&M9%fgBZSH#7!7&;JLg1M3fhFzTLIW*nJQ1U9?hNGAMxeXwh@qM}${SlmyC~;G;JG`$)t#1Q5U>5%&XCshQxSTP= zHlz$7>_%!mlJ#Y>9Ixsg(QR>kajPADI}2O1=BX{CRUu@(546l2`Mg_X%uW1EaUS$e zhPW@V4tGlqiD4Y?r>;5=(CD0rHy}oiV94w0Z8s<)^Jv+h@YOV0a``w>!j{)0*c*N+ z&9r7dr@>r%+21MrmDtx4m6^Q#pU>}|<6=7Xib}~9UsMARPMZ4qY))Q7h5t=Qo3C31EnodR9UKvYfL-VPH@!Alc%A#$ zJl$|f{iW}+W5(W4*P>913)?Ks?)4qlf2T6@zW4#uKq1@Rzh($VM*Gc|ZVx4;AqYKO zxccz{bzxAAN#F5Siw~`LTN}gi9?*tw^B?neaL&x1zgQfX9YI%2%)`?ivZ#!T@sR7~ff-n{lMQgzfWcKbSD zmVk;rm+Oqn?3t~*D3Zbl7t-C5u?S`s-M`C-hV9=iZQo@KTuNn6%!}wnaJQciMvygH zEps<$Eg}u&QcZdI!dvjB`N$3^V0bq-K=v$SEhS>pDy`_kZ9^M!)&c8<^ zPF=)pX1w&8VsU*|^F#t%*s28s82Nw~?b*G;9N`3EFqvZP z-)IP&a;i~cJoWs0wpsYP8pMtha~Wg1yll$Cu0JYhKif~})UKl@vTbpHWi83*)T&?jhtYVp!6}2sE@aG*|44)SInDLZP7@W8-T9LN zGL(U(7M6OkQo_X!J1(})>t<+=GvVvkjDH1u64CxRI#F(a^7x~n&(a#7Voep&sKD$&ovu-ocTdlli)$?j=6q29+n8O0j1Bi?m1$R z>W|<>z`GF0B{YZc#Kq{`O}0|6`dmhIi+6|=P}bb2vje5@+iv%x*vmWIQ&I`J&`|uZi5)~A&SgGwBFkHRSB@Yq% z*|ttWL9unkua=@f>+|w<#UUk)-wOSU4V4p7C5DSxhwc(>=LYf=zCLB~_W-96lfe72 z@7hZQ`xAwvYcRfX=k3LJED+tI)}0#dy;Lu)5;9Hs@(m8dEkP$>aU*jH_9xQbYV);4 z-coh!3sv7Rj)^8tYdy4tIofOdWARJ{imAyWpy z><}uk!9rBQit={#+!i6&Z_Yw~Bk8MHhrlv-H!c3`@ZIVb2BA@ zyQjM5yXTR&(A;Uj-dX+A+bbtLvMzZquZ3He4`dQ2svF4aOrwc!JHKwfdIb9PCA zfpx)XZ0f86Pj=@7SIV6t>Wa(*P%ap2g94^zvIjDS!cKJ&wjxmeWlU_E4KijUuX#z{ zEp#BRem_=Q5}?;?SAKz{jcx7OxKFE!sZQ@*_5LDxvN(_@muLYty)Ta)z3?@O-zy`$L5 zrDl}(YLy#uodRKNUUgw1wW5(ut2ml(Qk9STk_bZ{0$@@uaSfOG+V91_kA|zsJ<6o^ zcg-GvF1t(fSa$nk!S5oas@4H9Z`^v>a?!v@Lz4ehxG9|H)3CL91<`9m}llZ za*`JXLi;g=`A_^(;3zTo#?#Q~M~qZIhUA_MU>fDFQWs3g8k$4 zd{9903lZ}@dgv?_V($gf6FY*aw`t8!;m<~XR5JcsMcHSl_E_Y3bfup3f9haWJD~l2 z)!L94feHp4s;~jZr8x>T?@>!SsJ!%me*-{>M5?#zKq+I)y_-xgoI@L|zL~9CflSgD z&*h978*7(HRyK0ir*3HB$LhFP83@BSAxiH>k<2SLZLr>IVXhKS?+#&JN8rV&65#2LLxwf|UqJZPFVxl)Q#kNcgGK^u4OhcCLdss6>_6y;DbtrOV+pBfn zdmh$WyJ-bhe4N|)*Ds5k6udXo2^M*>0{l!9U+fLX;KVgq|f3gwU!UJ)o#y3|0W#1#R7^W zsWspJO<9#Pk*_dtQ@OOY+HoUzj~oHTVunG5CrB;603*l0BeuI~?`txnjrplCXnfbu z?oU)#lTZd&nU%+tTe~a=uDoH)H1TiS@ZDRdWGDc)cKy$EC^%=7??vGKfB?6&kbh!~3h!)06;Vz^SMujZz|AIYipyqie}0TO`)b$cVHU}IMG=|^ zIq3cJZUM17r}0Cg?=}ZG2^tU`jHfQ8Xs#y-O%SW46Cf0GkUWQh{DTW|>ioK~?g>tc zf9)@=CXuW1*L3%hdOwSSNGhv=zES{tHz!LRm2V#lF(Igv>(g&b;>;+o7t^<;;c@q! zQ`o%|rmdqIcmFZ?PNEiq{)M-x(B(J|fgNA@Q%0E*^ny-0h*!ZY;REMDIZfv&4nl$w zNX!|}cF?P@kDQm{3*);>QhN4TqVpNkgcqxxWUeK;nLNl%GtT?xN8Lad+vI|JBVGA8 zGp13m0(+b{hLUezz?)!lirBtUSHp;BP>J~PG}hP1GqQNoJG`9G~?x_%jwaJ@o3(Pa#gw)j=Xt@7DE zC;AJG=EX-csoZ}zdt-Xuo$k9XmKJ}o#N^hwq2KD?1CBOlheFjJHw`q&lhb~jw$BB$ z3EI6l>Nds`T#)z0^GiGsLDmEhsRDJ&+y$7sG0mI8&ECs|yj(s3kqMjrM(hxWj9f`% zvLRCQPDUMAcqF;`!E&?{!oE(p|{X=Vs(rFxwEJlH`^8FC?-3OUx2< z;{PY3W!k#8|7tknY>QZ^6p7-&^l=(qP8Wmr3_HC|#k00IstdnbBh9)|GmO;W78rc6 zJat-vhNO7&`WaI>17oX8!KAt$+}!JCVb?4}w;zm{0T0gCZeH1c3oZFWNYb&Mc>v3` z0yN*DVl@_vM+cZ;TYjADM*|MAC=>7^*K}&B#+sU+OHoHh9fYm%Giw~$^ADc!nzU_6KcdP z8^~ll!+p;qAlwS7VoD*Qo1>l<3$IeZTmXCw;IyBumf8+x+c;j>(Xg5aySW<9oGpt+&{>JEMnWxs0+SNWEuJc+4YZ&ix_P{FCvRN z$7u@`bNSI@K&h?e%Y?~nv~9Q1yJc*Dtn;e*PiG5zSd5MkKIs{6Q*THE5cdZ{5im01 zV>wf%b8#^=bXM0!4Zc2_BE+~kmQXsdv%4;58f7blhsxr+-sh`)G9xcw2n-hPsO@xN zsFi@JBZ{0G3W>R@kqZf6mPa1jdG;mehMuRk{pz<Fu`Wu&oWmXXzgiAD=>xpmjI5!Ynx-ursmTS zt$Xw*)41-i%@sZhC|eLHhRqSq-a0wrvDn8BL2qg8sY!$xar~fE5l<(UUW<4K`cZ)! zXm8&&G&b+oD#8sU0`o(ZI#=6l>mBA>-kW^iwj>v_ikzOAQ4ZV@8n$h&GH5gay+fho zSgU1`&YzR7HHM0_*vFFwX&0wbsZ*!MjzLm8|2Z;oW1tL(RMS2N0*`;PpHFEvDB*+e z=7)3{Y@O;tEat^;Ktu!xnK5tA?Zaw%$X;}YWZOU^IgpTMc#tP9YnlG zC+fVf*{QNnS&}L9(td{RG8q9HegVo`L_^@|v7@7R^(d;rk!@zCG3OX-Cdx#bo+FB; zTM11&gF#%PREj6BKd5iL-q{(aTEUCb@HP4G0NPh)N}Tzjd0YJnKTc=l(-;X|S6w)Z9*Nsnun zae;HEKaJYZ7)X8U3w`lf^6NY3pC?3J-N6fZyd=jaW9sUx;cd^np7=3+JTz^475?)k zGPjN>vRsYt4O$g+z3-0oy*wi$qfo>Ct?mWOfMopQ>i&(j5(H>~&~VS((Y%28x{A*u zr9XqL#7Q~2^%Cefl7N8sUT6KF?ONSlB^?4MvTrTVqE8l>9{I)ckyHt~CXb<^`e&>W zvv8BrUJGlki0U_i%GcbliNE%DGD2j%YZg{Vtst6D|2vYLIzK@Fx$tAv2PZPLky^c-W{d>(s6{MIi++7m~CVkLhLPyZoig|rK>ZWU1U2*T@FBzrDY`s4P6U%SS zR2sLceR;fgJPY;aIbU2^VQ1ksc=>i2)yO1=LUPr$XW`~aX@n3Xl~h4{<`Y-_fco~& zp1K^}%o)qP2~2)C%dc%59cQvw2qn*Qj+TQTLu&N?_9P$d$LRxRA4H3I;ho@y(aeY;b6{ksR{gn@{DqVXL$mZsmn_u8R4)otNR+Un;yoh~*9(w`RdJJQpKeaYg|cA@{U{{}bM z##2M&@u>bfhS+HN0WBKxNFVK$5tJp3@@nfR#uU8Kvw|yRkygVrGTbpan?yf@pXL;> z$Uo$qJ&!mW3UA9?-`45-Xb$FU-r-=~xPB_y&LB=r>tm4HQj!v3t|t&e@%Ta~y}9N? zV#S0>3X&%&D3{N_ztZ%SC{zPf|?7-jX(OMl4L#=anipc54Gx|y0 z-*G(%PuHGsvOW^cM(+H^)g2yc1NH{ESH^#@dZi#DW(qjO?>#4H4{mg~^xm_3zl zdvE%rDrK$j`Ikn@z({KZ+UifO7Z_OxMF{R{YW4-~zbe{oZbDPfN_jH-P*qI~IUT}U zLYZ%%8`Nn=>wfpg6d3~eWeuI$WVJam@t!Djg$Hape>veS4RRSc-t7*Fi9KK!>nh}4 zoBHs2Z}aryA!OQ8|EQJTxS>?EHlju%hI{G7PVnPQH1EJ6$-S7~qsQ9UbmiSdI6G&$ zTlGgNrZwDkjohaj5AH8s|2SlN9OC#ygcf~{jrP3wObaQqLWeaQ%=*%~6#o3@ZS~3# zpuZUB1)2?3(Ac_~r#WeNAzNsnAr?(3qd>e5z@K>)jRZfvL!!G0)eTsl#WFz6!G;+jwj`0YLK{Ces@p{~{h4O_i z>oyLg%oj@*&^r1-xdrVG-RKp5(WOue=kJ-6CKw7`B_YdZ1;e|@RIBqOI}%(R%4kWs zy@%7kH~5~^-~Ay3+MwqIY3YjwoOSapYv%?o#J=3G(1LfHmi*qXqAZWw!~A2h$~E@Z z(cR9ZMw6HgjtL)ps zYaydz)M&_J`l8+apGOcKq2yJL?`^BlfG1UB%igq>pv1jQ`+LTo`wiQ7h4_-P;?LRe zHz9vPZ)2Qa5)1#RO=w$)kxQNr7WgY9)NGnt%DIO9_WySQP@FFK5}JFJ|5>@Hl%@PO z=UlA$_Cmi~&)3*E%gF0m2i1D@?`@1YJTxFU<4Na5{-DeV#4xI$IP`MWfapnB6R)yH zm0pG+`cA1iHYvkCWfER?Vc$zu3eD=7#$6u zc7=~fM+E&3P0yfG6n7)a@`0D1*TH2t;(|iCvW#KpnNMx(myOUL7-14}vHG-hK^Hw| zGG!8HlsccV?v!Afs_w#JrWbmcSYxSAdR$p2)yswkfR{+(LC96DQOBz~h5b!!mZnek zz+C8cJEIheO9HuXLp_!p7F$f%>tFFXA;m@3{|58GHxkJ$T~%E_d3DVf2`Pnp ziTxmPiUkDXISLj{8pc}$23RV(i)BOUXry**dJWqs-DkZm9G9OwO!SGg{Wn6}yj`M>sN&1j zAMj6I;nU{qf${k_BQ7qYFKS|Q2v3bH<3aPVtWKmQP=FXJ&MO1`8Pk}yUIeCYos^yh z(Z}!hGv1G8I{f`7h*G+e*nRQ0+)Q46eVagpNE4zLbyQ&`zZqLQ(o!wjXOr^b93*liQ(ZQ)xzAn&{j$J zT?MM7GyT?C^G?&=;UZbz+S|2bry6PnQ!LE0en!H4rKCwfm8 zK2aa%u_}4g)|Vwh(yKlWI+0#y7+v)}a@s;-pCpu5{Wc;?cOBSHlwznv`8S6AwBB`~XFjYaKze6G~0zV)6{N#bf;##>=@OEFlXNds)j z{^Am5aM^iZUBb4(i~lwRnp+4+5iMyAL>i2y7lk2(ihzNZKSNLKKgIw#?}hqezsFH& z7NH-W6=Z8r5D(~tvBue2V8L!Q)@4I=vey)#DzoBu6OwtLTwiH;gFk2fw$x1t-DX17 zQ+RBJH6c5*3$i5LFQ8i6pG6Jk{d(>7XO-8JSM@!Ni|<_^m!M$Cn+w`3%79+SY2RO? zYZ38wRIfTOwY2W>vTC4LC>H;r3TVF=;lD`K50wcS+F>f{Dhe{+J=x|LEuf z9l*x&0%7rN0VqW(HyqNP0ce#gmc<%8;+C z^L~n2CA7z@i@ZbOo`eHnWd;Qj>xFsdw+Sg;d$2bB-lAKy2>FPLoNqZ0iAI^Lg$(@z zFnYr&Cg`(Il;%O{vWsCJ4EA(yP9P@OPh6=5m z5J${t>3RV_S>3?=UtTdI$&O3XU%m8eU4xgs=BT&)f~>Hk#UE!OzFJ5m>Y#pDb9Y!( zm#4{I^Mlvn^$KB4iA=Gwy=U-t)+bd})r(w85a&{}V@fq-ld`MTJwDpgOy`4%@i_&J zXf6d42V6>C1r$#n296U1)$d2=#m3Smjm2+j!ysOO%NJ#Ej&cSJguQ;0YoFnJJ ztS30X&_@;n?k4gl8=x$U0)e9iTTkgf|E^_7``?S7+t6IIe=37X3NJv|Ai=LnzxPlDH4THQ#VP zsds1+Kk{jBiymysSS+1(1EVj8Oxy|VpcGg1Zl?_7`4DuXB{DAL^VHS;@Ba6^d(p^| z?%3sy@1Yev?R;-XVymN3?aVIWCZocnWHlEmMjkzzgxpLH!RK@Smne(-kZ=rN{(7s& zn53Zmrz(R|IfZD4M2!|!7lzS}>jNX;60aELBUlnf2f3`&JJCiewKe>)+V<-9xjBi7 zl%+_5mxs8h>RD0({b0?M13>z{R*_z-y8?0$2B~XvMXXZ>DXoo)u zd56W(1FdVPy{{(wwtM?tO~lORna+ANrHyGf+nSB7L?P&-*4gW|8`?dccdVoS^jrSk zq3;kr=Sh}sLw=e19R@e=h0Zy;HKOt@D7cEY({>t#i}G7H3C9#xF%Zpu2rS#~l;y^+ zf_z>V+D6V|Xkz1M??b?R(zDE4FcPqHQ)6QuJ}EI8tcsLuSO(C9Uh*wkyDYz1)vWd_2ipuZp7xr~IP$f@!Z=O;L5Qn}&`qwNio}+}R47<{lvV!5< z8wo?OC{X%qivikFq#%tP6{iny_*a6o%_+|kg4f}?8z=N4Z~1nZTXXgH~{G}7ks1#;Fg!)3SUTjM&%2fW^BUUP+^ z>C&knF&r!k0QL6}%ICWXOZsJyq`nBts`+u>;S`Ynq5#324ha%3EeqtNZw*h`VQ)tA zYwIBI{fZoWTY}*Hdk=FZHMf${pjs{I$X-@WjtL~GFMZF2T~5Xo|0&#jceB5m;ywj( zUq=OjqyJhDp|oIjD8yU2vhuq5wYxPn|Em71Ah_oKvd(IRA`O+1Z@cPJF5}S47IU;3 zlQihKKXw|xqJnyE{A4LRzMW1`?<}%QMomR1O{w=U{bVFxTFedoNcKkU5kmdg6~R3yVx7fEX5#6mjd59L!u9T# z*mZ-}_F#EcA{cq_sm^tVT?E;(X$G;{N=gC8p&E3RMkQ_?e%)0#*#*Kwsw_hX+a|&MeG@9|Cv#9m#yyy ze8$F*FuefRO`r3iV4bXr6r`WOx>P}@a34|T#02+Q5G|JyrY|a-? z64zLgVV>?G<}JM6{N>nSAp#S+87-k^_GP{W4NP09C2n(6HymchSWxRyaAdzyjHePM z%%6%UO$B&bo#1h|m8h$QyBQv>NVLGI8@}y`Zf&QS#J|lD>K6X{sWHcGdXJaSuS+;B z?Cp+d?_#W$lp#A1sEW*;ta+BTj_w{kMJ-&0-6y+MH~zJ=botc)G@TMLkA&mK*A+U` z7mJ&em`?I^eXThM@wo6TK&!$YN)h)Li_yVJjpL3PLXL^;p1fcfTEss+iygbG{*buw zJ~5qLwRCYDJlf5xa%B=6y0kwD+}%d8CYKKs3;2ju>sv14u+u+zUSGeyy*haJCzUS0 z){~F)p^66Yf=FP-L+#xV2@=bQ+3-0+9FK$mj-H73e#yfjbj4Sn<+U(czgVYTOqT{{ zQk%P>`{#H(HOg7XKi{7px-9oeQmOvJ*+-S8{b3Nhx(qtsC?lSFr5&Qq%X=#l{AgVroIvYxC}~kk=g-c<=bOpW)>+ad5uDMyR)|X82HZ zne4WUHf(#WqhC2B;|b~1Bq$7=82c2U-Q2z$FTxXk4aPzTv=D}O$f=A?!eg*s$@-0x zWK56jJgiBtM?@n1Nf04)>4on_Ou|o`ltf5`ytf(Y+sRLtF}Nh(rC2^uSAj6HWko__ zJ}||CI+N0Yr^M+|`V28-VbFiM&|hR(4IjS1_Y}4#LTN*y=P@Nr#WK0t)_kd^vf@@( z5Qcl{ul9D$w-@bK*|myQlC9cO_>NA(Ik-}IH+u&qV2@dCK^{6Cb2Neo*82oP5S zwWnhtn;m5HePJ4r{U}}IX9vtsx6**Ex|>w|VQ(Sbd%3o65RANs4xHB7)MMba8kH1f zfSe>(APR?Z(G8PT>0x zWPtCegIpKPa_WWRV(W&uX2g8jz9dWBX1ZD6?tSZvVFsbv$j$uiNuvXNq)4(~eIrpjCvs3(I2_ikH-83RtrHNw?E;%UHCfsIsQVcGH@ebhGX({Xd${!Yj(} z3-^>D4I&)_D4=vn!%za!2w&-L=}s9Mq`Nz$q#J>uySux)bK=hLu6zH0S?irQ&UyCP z&;C6ABBCfm;U-VNYnmgIPi3F5R5Rbso!C(O4U^gH0#S}U-bL>Zz^2GPLnpH6SmDYh zz$Op|JIfh?Z%B~+0KU_6j}F6!f{g=tp=6*#Rz4jFa#LJcsAR}@i7+L$A`T9MvH7SV z0^5=utINZ~Cex|I6;&B&h5NYsY5jsYBHS; zPd;6g@|CB8C0me1CpK2e976k_4@*#t(|} zKP_TlZYxY+1qykOMBz7&M7HkGp;CsaWiZB6%N9sK;3L=Yc9JSZYf}BuES! zw5nPUek%5SSqbEEo>CLOW*NE{_+g3~Q~Y$I*~yGRqxR9eWt!Dm_26^bUJG&Dds>TK zuHEkKL?Y-gd4meLj6@%XCBLq6Z9i5RLcjYx%;uh6WZ}b(F+v8tM4)4{H$5&KM<3Dd z58t*+dmxa10|Wh9{$)H*T4!E_hFTl0vyZORIfvD^72h5@sP4X49~O*fvim0LMePPy z@QueYD>8qd8l8u?3x0oMl$(g%m;$AX7OEoW?;o@86P^;IMl%X!Fzol-Zzt(32DKZD6=;Ai*ko(hOacM{q%EuZ!rId zZBr63_8x0*y_skR^Kgc&3D!UnH|=uBWm2Rta&r^>Y_VQ;iy#Y)@`In1^sOw@n|}E9 zPbmC*93_Qa+^#IG^$%eWTW7L&$*S4H2Wfn$Qe(j%!B71hdmW%VS?7ag%VDS6*vPF_ z%`P%oPDV$(nLEL2?!|?TKi=^F1*kyqh&p^8j2_8eC^*!Zd{>Cqpgeey2fJ6-^I^az zI>DGWz`sb}!~OU**xn8TZ~5TBR|mS5NkwSvqphnA^*oRjD3H`MZAdEA&P+@d#uiGB zoqeMQB8XM&D1%eIb1K07K0@3hE7l0si!BT$qQVj`f054qI{bzbx>6y%g*ur zqQ2!dUANbLOf&dHUl_&_y{tbsYDJJA=bR)4+|m z6Dgy>@bzrFzvGZwV^T^*43k6a4;jv6%m2$_TAfdOov6?>A!p5DD zeb53m4|Q6@?((|JHSxq%=yqFUrYzDm!?T$0_3fo00wldg#egv9WoLQ4khk43Qn+Xg zXR^ZXn1BPtp}0?hzV+>=>z4zX5x7r3Ymf~S91@Dt6n!t25BG+da^@5WJ&Z~w5%?>E z=FmmtL6+)vc^#dM`=KvQ*ZKl19+MXxFARGOEk{m!SLm$b+Oj|_+3xWSQ3cYXq(2`@ z;rMRPhl@4IX(D?b^J`AC-3q1oEA&L=Q4jc?|0Om-Xfllgwx(CgCh)_kOs=O8BX}Qt zTuYZg?KRl{ z!eEb2C=hb5$A25eiKvA#(RCBz*|O-T*tjtnYxS};zs?A~t^zRfPb-S82XNAV-LdM| zl=VsXNS`5<_v`_-U7QYu)5d(wmq*)#Er$~rxc%19(gkhM$HJp*2iZpu$xI{X;8tpZ zH98ezk=E;8K>Tw{RHm>H#>i{fEiXkRS^NXI_Y$PqKumsQ;CoyN2o!&GZdXfrA=8zC zjvnl^u2b=%@h-)G!g1WqSPVilc07h)vG0lk zVs81}ma>Pc`>Q)&ekzVM$+5WZ*nuI*D;avMV6?<|kkF6P9 zoE2I3HZr>(jGYN{Mz1d}+IN-LIBN9}oTo)^g{2OIjVmLRy07%Ag@ujKMynI*3(z2oKxECQ0(sii+!Wr2M_ce zQzV$mxcaXA*VC8*Yx9_`7~VcnP_hsRVc4I1Cxuza6Bmg=bc`nn-X*HDc87gTb5niN z>Dm&2t_NQFCtQifOrrV5vJaKZaRFdMuJ;she5_3t!S`^YE8M>P=juBmY6#CAPW4Cl zZ%QITzr$9R>1#UVZ@{h99$b3SocZOix~#UzF5e|c9kh_ME!`b>ck{}e+79Z+BJ77s z=4U2P(xZT*#08RK<>%q5lL`bm%N@Tk0dDo#Pf`>^l%dgxEX~f~YE|SCJ%qbMNl_g( z2(5~JHDv01ISBq!rCeBFJ8ACnq?3@i61+Zm^^1Ut;N|e`F$l7fNffrmH;zpZ+e44# zF`ET~d9_3uCE-*9Vp1ph(xbj+WqV%ljxvJf^=@BIZ@Qq5qfz8fIzp^#H5JY~7x`f{ zGldige{e+G!LHuQtr>S`)i(KRyQ0%g(PwVc1;x3|PtBWt|7`o7J03SYfb6E(9Hw4P zp2_FsyifH%vWv3g59o_wGhy z=owggHt9D57s-SmQmB#+b3g`scFTbwX{P%<{Q7x9&dl!gKeiN>`Hrf}rbgH7>aij> zJl4I!L?BlH$F(H^M8rXiGMc3C-B2WgF|6Y0i+|bJx)sPjj3}Gf6CEd>JkK1-72Cp;n$xpewUUi7V;K@sX z-gK?yTCV=LjGy4JvxxI68vrbz_F)8 z7EXbTylN97yExW^i)U9nBk^wBH@ZUjluhqH%%A(Q!xQU z2^{H3rv5lTNu*OxoGdn$Umw3zP=N)=3qjM)F;8ApFkQ*5DM;+ppMM_^T*l~v!7IF zNunNwCQu$9VwpQ z`1qTG)-**3L#Ngup+hwrNa?|-&Pl)^;@NGt_9;WRpO2t78z}7YLqYc|<-~nV=GGP*hIHLkIQJ{l}nz>%pPW52Wp#l>kNo6#x|4J z3FWSaZKdA-hGia{KaYZOAHT)e{_6qub>s0JycR4zU=h<>8eP`I+F3-rHjRdBYfpP* zNPrcv*gup9TE@Q%2kv)o9e_;$D>HixH3k6GU^sHI9Gqa&pQmUI1@VF%gf%bj0~JImF@5V-zK>==jcaF<=a7GXtdS=6OmetR#iA#ZV=FizWVv$ck>FwDKYJ6(N*Jhb3 z`;Ubh0MaRZnXfmpWhj$FO;&zt`Xb11?%$! zYNqFgL3UH^PxlFwF}F6aT;h zT8R1n>W7Dpxsu0soA)Ah@qmxf@!(FhDxFv_sj?K}I{Bb`v9}jJY9i{;(VUglm+GwZ z$q!R}_RCS(k@#CxRav}Bxs0hD``qita>+(5*0&Xkidh1LhU(43U$t;RXpsjZ?{11y z4f^y=ONJ>FyV!pHEW2n*|Kh`U@-t!9$&mDtwou^&xDm~1exo6H-Z0CRzr+sgybp86 zk5SSMTaUQ(oAh~KwX%s$;juV(5|h>3ac(E@!!lukBtgTiPCv(I`;B(=IuDDXkCL+3 z{(HgWqC{6qyi3hImf+lOHAf=1ZENfp<=y^&YfgRM2d4Soj@c!Evti#~6FK$~^Dx1& z71QQFA4CetqDx85E2;`@Ys^hGs~#qe^0OYQ@e_R=I5%X)Secy;dA25mkR|L}!ybkiPU==wwLkLcYn%0tv&{vghB7lqj^d!#M?(sK6 zoLMhp!P!S}7w>*%qnA;=*h>U_K3yg~K`>Pb?KM?B**1UA*e5h{qZsY|XV3!RsJ?96 zIU3x@>W&HO8~GnD*{pS`dM&!VPBm);?GTjoO_VNH?A`PKqbrjvxL7^mv8VH#80uIT zSa_00%xtR^kpwQNa$Dv#YG7(41Ow*FlbL9{PU-ye5C(D$6pO490`;)%FCQc5%Pp^V zh1L#L7ARh^Z5maxD2!F<~4_aZlk<3Rtu@U0=Y*ny^SZ9KPg3B=9fhMER+G(WgSU@>lBL@d1B+P9vh-Y$Lfq zCt762xSHUaV2I!IK`IAw!ZTy=w;|3hvpQ4SVVrL@bX{aP#{7Jlm`%0U5p2UZ1@kM- zDc(Mpukgt-_2!Gy#qSCye%1fnDqh!hn^WrN%hcT}?Eg~=h0?i^vwx2O90K08W&dob zBKi9(Xi9=sZT?;AFgrnpViHBQ^g1a{LpbmkM>GVQswbx#TnV+$adBPX=)R2q$ zDP|)z_@4^sI&_Su&hpZpZQ#F($pkO#gPjUX*BNV@#+vb|a?(_H+c({Ia})i`e6o)I z5A9yqS3N_+o#i4y5^_0VUA~s4HaQ*y*Bfwa;bM=2L6@B`QMy+RWhHs827DaGG|q%-?7ra`C^~ z=(hH`p(SH)^cnrkS7=K~e?zLY6T*&lU@HSF4Ba;MgGnlIfp|$c^i6HAW2@ zG`m(bBYhg4I6f3-@whMTq@-JYciHFrGZ#_Nw2VL(i9+Sdsb4DUVIov zCy$ziBDsR_AB%9I6rjl325ZS8h1D|^_y-nRy0UK8G4=J;at}_8vBio@u1i(b(>B(_ zD%d5=Ppi>lTt`&OnUB%Z;_?1Oo3cZ|rlg}#sd+yuG6Xmq#@w^bAUcYzE*)GwBVZFGr$A2y1*k_VSm`WO*?G}*Ppn!Zn z$)HN%F0N;kxH(cy%;Rd$;SSNw4Sx?O>ry5Yp>P(3d`@E>l-`Ps`=B-Gz{NB`$Rnd# za>6AS1N>DUyW7{0O~vq8rgBSd_H-90cyzBG8>-g}W+cmwm=ZC^5)9q1D{|xeqxzO> z+375{arI|GoGhguajXRQTRdVS{_aT1Lq^w>OzWk#Yh@1H(upV@nvJ-SX{x^woPWPI z_`U^~V1LhIrD@c92Xk4ZW%d#W#IzJ4`<-dT~#@UC;5fx<^)Qhy$-r zp7jKe8q1U`oWs{zZ)*cB@8gNcfW9}tD&w4eQ&2OPv7(+M5jaFzb znc}q>1A(8!Qam_4JDV9UIbUt2WG~vM{q&jd>0ozzom#8x+iHi;WKJBga7F;9t_yXQ zMhLgMyL!wT4UyC)h1vS0K8!r+s;K#35wx3}WUir;ChGId^R*io$&;8y@h#$8ka7p4 z9_A1yX#W-dh%*B`!Kc*QI8M4Jx{h_z9+Uc4`h0Q(I0qym75y3am!*<$b9t&fpS^BvVh0_QBN~#xp>(YiWAp+urL9R?q(mwJ(stuwm*>X8pYO*1bYATn~%y70vSu=JAgj@MJQqG}sf3KuSdC-jdH@GhC8R z=1p3^xydLd!}AUw#%wbFD8D*{01{)F;k#QZuK@Hs^fYvI$TlDI8uL`xk1B3x-MrvBD0Hm9|KtEERi(97240c9{}*RgO|)P9Bl*!9Kn@Xlx1W>r}@=6*PHP+AtA0cnLgdg^US5cz~oQ5x9?PPN?qM5bde zs`c#iO!??1@B714r*`n$F(qvFqFi(~Aw zhyt$PLHf(NLpO+3mLx5etHW2hv3FOw1d>nK02YdqY{Urt=|<*Zn=BI?^T9;9^tNTT z+wcfzmNmkw*^@{Q%IUoy;}M=7_+iBI@6JfmUabtTIXHu82k3i6V01o}8ZD^h)q?b( znH(-YPy^J<7Qi5qv7@d`Ygvv?{$gQ>3pBVBC$%%DWb7qn*YWQb^ZRz-$}lH!`GnlX zQv;9cxL@EHUaYw{r))Z(Ms0p3q)hyfT~6NK0Q!(-1Q=+w(sOD6T^fW0d~%V?HJWOt zG1>lRn-7m8e`A5GoTNAnOB;#Ghaan=-)BvBHs)Fcz--{8t3ND~KUas8{|$kS<3LS~ zLq~dVG)?nLmbwi*l}2c*1oumJ zG4&VSzpm&j23I|i_d#V}1*C39n>QkO9CG^7O`AtOz^|f>{aOB?h5Cu)!(H1328Gli zVoif$mLp7cr!Or~9)m1VEKd2Ds2iY*=?LJP2>Y6;SVSiN?qB#DSo_pGqh#od`#v`w z{djWBpc3J8khBY8&%u+qocKVa2rfub(ucaBPrQd}zGi48?E(1vcmt`F} zC;Nb7F+BKZpdv8wDYjTh8RnLXeGacJ`?Q^HriIQ0m_^v;=`BVL`op?AW-`i1J5^7Q zWO`Ss&apAN!qeQwJNIf#hGtglXZLFV)W`2#k$n#_I%n>qRiTXFvLWuaqJQugBvMR!V>ZY8t4=*?$0^i zsV;l&0#<+?iq+x-(vUK|@)l9LSuWfr1D>#Yn=MSE57gv-KZTzD)94x&?);ON$$XwW z6Bwyx4&fQo7lqA|szh_F0K>80;Yf~+0Fw_jj^S6nwIs7Z5^gJ+?mofhsv6lvv|n>C z$st{qZ|vh+NcQmwmEE9Wl@(nG;+W(7H%z`y4sZ?J21OM!kks$68~)c+Tq|wIU(msp z0-8cI4kp1@3{-i_kz2VHE-xvH^)kO_)TIC5fzW+EL|Z$GNNymYc%i~_j~eeC5}ZLh z+D?enM0kwKukT+>ZX77&vq@hUXWLw@)3C^J)YiN+G@1YL$&}xsB&y|tUA|Jcn#ZSO# z;z_nS0n+(Nk(J5c%G_{ITKS!9#dayD!;$DB7`z7tfDbOdEGx3X=E!p2zUF%DQ;GaNnPenta>KIVaB#S{PlJO+!I3 zgGroo-Y;b=Xg&V;woTq#Yqq5>Y93x~G!SYTIc>qsp~)fx)y%|vyTT+MU6!s3`zo1SjR-CblelbtebLOB!*3Rx5(2n}`YBv8t-N7QA{4y@a|{UG1N=;6 zHqOaswPHNo^n9{>zRePR4;-YJ!DITGk_5aD($#Zr{Mg$u{=mzq-dk24e1;P_pLr#@ z^9l5k7lNi$=%a|Mp{;XpNc6jh*x-bDl}I`5*5hu;|IT#OD2HJ=jEzrNXeDIT<)SYo z4PobXxtc;=ZnC3nI<&a9LsdP(4&E!sj39=Yc0lDobb#_*hG} zuO;#-9fJTHa+?5yO8PDp((wP_PwdvO!pvYgF7a+44P*mOp(KG7S33~-;VlWv=#NZ2 z7c`g@6hD-9@VRUU_zT7}bNc#|oB{;JeiNgs17jv&5N3lDUFTYVGk}%!fvCq_AmlWu zGSo2B;rRjccIyj*a|mT0t4f3o5MyD@erL>6{`j0 zCRgrtmqdA0k8jG8!=`(Evm{IB2Eb@9$Nf7@UEWCXewu72Ine1a+T~9=dEtOa72(I5 z5CchG8FZ36y4->OzK>mg83XTbxHLo9P3 zUY@qCCPBcnwOUkuJ?aR)()fGu6nNkWfM2@6W8wEBUexDdSS>4=HgbF*#vH^4gb7So zEV1}Jo+U&YUP+#1M)xYO3g3yJEdRidA_f z_@Qs$%_P=_@ z$`jt*Qb}g(W7~^-B_tB}LJXY;c9)grS_R{0oNblr~yx51Yt^L++5?IY(Y{#7Coqh$xT%+R3-vm-U z-&)9;d1~v)il~_zM4R?kgxP!8$3Hb-g7|x^In-&h8~)=E$C316{*Vp0fc5R%5PwnQ z8t&`r2hrmF8C@M@KS*Ob)mDj+NkoCI)+h3eyPLrZp)-zGa34-vJ3JE8wXFxHYzVDK z=}Ttj8+gK)e7T8D3q=nzBhdYm#`yC>@7ZO>0{Bw7_C17X|4&EDOkqSM_GzECyG)=~@C1Y#HVp$1|V(i1PYmf0Si=6*(PyR|;mA3pIH{E3Bfp*u1}nkK;&58+yF z)wUHdq=#nRwh`=(n>I8T1-@Z_eoAqSsm7>K@|(1?XD)8 z$MV1BkQYhg{FbO2WOsA;xq&WW;GMx)&9AbQPOP_b*oxw#cNIQv^y0lS*U; z{wWpc;Cx&;b;YQf25YOrD|KHH5UnFc@ysX4US~Rl^a=Z!Umh+bU(d-`ufhJQkept4&Iqh!0U&;0H zbFPM*#mioWNJVD3Eik9^I8==!qY)Is6qlXtW)YhtWj-!vtrKf_cIcE-O@kLCB}Idd zYjq=hj0?lnR|Bv8jfo_-G1f1vyYapU&Gc+!h^Cq9!|3jf+5NvGhh%e!dy#Yo1uoB) zwHHIPIkztPFM8zNC^>64gKe0{toOsMY}H{xc)P{kDR=&z?!jMBfUUNSa7%jFaz{s< z>$3Aw=Z`G>dIg#grTw1+?n!f&lWDX%cGKT)lOuHW3vI!~%xByQ&uYB!m+{?%!marIw12Rz5e za`3#En79&r`cFKpP zhh*LUwfw9XG{KU+U95-_Py2N*ZDs7nOFuZyzF~wzqLVZfw)LHx=a+- z^#&e~O>ls8DO7MJEsJGm13n1&Zkq+hmZ z))FBkC(JVUA?l9k_3VCsxbC(stiQBKJpGmdZRO6{^h+UG+K?Br&MK7PUvy_5dty$| za!%iEZw~XbQ*gjhz@I16KZ5+6mO@F7-`v=y8wzP2BrPatVpcG^>gLnp6U(W=Eh3=W zZLVCMNd_M)1>|0=arVyFTBTyPrflo$f6A*}S%73hWz8^l`0ZCdsn~9?VmwlJX(}$c zMy#G0jpi^Yq#P}yuM6D04433iDIa!rydnixr+K}Oa*)JQ2?lb&X_8BFz29LNH5+dc z5CPN9)JVrX7GM&G1b+?y17$y8)|TPXoQCx4(RFZ&fNB;;j%%Fww^3eHwfjv>jBh6? zI4QtAHIadzR&r@&!|jqF|79_%4=8m)YN-JRdKhnlxaKYQYR=-21%vNdWs{qR2UUL2 zfd@}PQzK2I?K474n=a-#A_{E^k;d_YPv4Jn=f&h4(dWSvRm$m+Y<35xnKjH4JUc~W z59h1qRz`UPINHxH1-=ME%nbpfU5?+0wcrBiy`jc#A(r&yMJC&53Of;=*hLRw*++oE zer%jgv(5iJ1vJ(GyaYehSnry)#aWOuo>_yaYlqXzW!E4QSDqE*3NUO^R*l!q^?6*# zKeN%M60S5)xn`pBFgWKAcd_R_BIiq$ingzLdU z`SJVk4|4#0;I+cP?#{dNC)pbpoa_>35YeAGCPIh6hn((ZF<|>b~y7 z+lT%w_n^sX*rlGJ>?>Gcd)SIzTi#$AHb`G+cGoTX{vBLO@TaRwgVsC4|IY%rcWB?= zTwedYzOJ7p$1%F`>(vZ_!r}HO{({M(16wn>u>yf1XWOzwr`FpG9tX=cr%r~^<$9eEGI9~qYDRk5H zDayJ9jdCotcqocFt=#f2_zP;+coS$&LP*&_q~4V21t*`ND~J?h_XG5#dZ=psU#+}3 zexY-f0dy7(Sqm$1djbfpg&j);0@A-jB7&@)^C^&~DMOjA@gV%5+eJi_ZYC=|?ZLwK z`g(m4_OE_UMYi4#Qg!>sY<0Pp3m4yEHdmHOZ_2ecy7!-%X8Z*}w|fB~A1V$w*R9hN zzi|vHm{2nkxFg}p3=-Sl0Gmjbi@mE5p=$27;M8wfM$P@wC24a#*l;zs!;kc=8mfe7 zgj&emWeo0d(KQ%653bSK!BWKkG%N279~q*YYdkYytHEBx^8&cyQg2kKT5lH3QuuZ> zjrK-Y4SQUaQT0SlW5@=;81Hx?Yo^4QRvh<-p}$qP#$vo_ux~5E>flDf^fK1hWTD)& z1VtOHF|AMaMhb_u8NX{OR4ISf(g+bgL9m!-EnDjm~eO4JZC zC9?u#SpaGMPX+tOqHAi397gAzeLsKvbWAXo>Jjjbnhmj{0F6-g+2mJJgHNQ6^Eix( zG=4{PUR&K^W*?d)cSo(+N>B%5h95g0MHMg3k`P;mBkawgX=VeBZDOd4{ZzN_L+j+g zg~(+5e-)ae1A}}cqK|7I9@l>HccS!-O86g~s{qmI0GoG+>AOK{=S>w*glNm*P_m}M zXPfKByk_9s7r%2QuMDZeav0ebp|_=OH(4^+lAiOif{#)pH*I7h&Q$qT&<~}u-&GGX zhE(z-YDo>rU^JkT3IHKGG*Uk>%3rT{yvG#Y7?Qj1jyk-yrF`9P@p6!PcA1K+uouvt z{ZA(txlcPU*iw8?KObc9!>hF@f3_Irln|tw-LVzIF-Oe&ztL}pP4~>R?mXiT*x*8? z?!D3RAkC`39k)J<_Jpt@Vz`@15$QZB%xDk{54s$cpiJ|r_=^Id*Tddg(;`r z;D<7Dil3Y>;=Jy*bU>KC!%*jYe}aZnox_PO>;l=;5U&BF|G}+_&nV1+)RyxVY*$P( zrO?K$xnwv(&q0(L6Q;cQ!f*LNbr*EFy*7Ziw5%i)-e$RIPrktLWq@H6WMo9JigpSJ_ya+5ZI3dT)K@gO;;k zDm6HHbzMO6hg|3;vf^3`V^YQW(toDzpIn$ROs}vlMQWjogLxG&I=%XHz~^Gq+_1yf z;t4NPEgj&}1m`cz#F7h*ftRh;y4T>5T!Eh_xwCN#@a(6hgM&=_l=HNx@1#T8fqv_+ z@I95i^-I6z9P^|2%F5y$5qCNOG8*aeyFGCXbU3?HC^ z4>pbPcgazEV#pAKeud z(8S9gn9n3Fo%J>XHrqGZO#;y4(ePvxqj%*0{q&!s(jK@gwuf!6S_m+=)+qLm^rgBk zoDV}~8kF&Hs8|Ntcdq!WRr}rVw$h>7ZxN6x+<8m=jLE2L0E^H(B3*O2mTZA{iFs|o zFw7ULEbnZ@{K_Byy5ulidM*kVVOY*cr%S;|!B=ktth@stvG`DrR(QZ`NKn+{+9Q$I zLw!zkL&wbYMohA(%5b8J*yqjOE_!g5PUv~y#?t`*(UvJjO5mv_n-ypYMs5pUmBFjPt*u-W|{F2&uSAMu`DJs&Epeiz$g*;?GsJAHFVT8^6hOQ1T^ zknFo~Iay8+drIvaWz?&Zw*4&SdzfZEh!?NWjYl&@!aAPy#NjTs9%>!b;j?~fSWUEL z`21KsWa-eU&F8T4QK7~=l;{MadQ8xC=Jk{xw$D^ksMkLeLLBYjv+7{nb7%rhSao_Z z%FJzUKj+^!1;M!#BOH>zkW+9H0C6O>9_S2hbMwX{$GD}zfK>m2o-RE?X&L?7_7*`< zeopH;Yvxuy0F`Onb4L@ImMG zQ3G~tQntAHiXXc*XQmdftuqImuQiP;bZ4t#nj27I@CO7hvO9&z{q9hD5yZf45cRtN zCPDlD4VFXQ`K8f45~Drj)Trw8fJx%k$b|E14hd3wG_Rfn>_;r%A^wI1AT~R;y7#EX z)on0u1d#(A$VSCKjVJ`=>#?=Fg{$oeppV?|%m{90V$2-CaqU)7RX zu}>G}#@(=HqsH;Cr23^5c6>b-u;W}<`rnYs)Bbd`hE~#@-ZHT)eL}g~Yk;I=vFj_M zP=C6LH|XCFKTEgv+t&mUSJ>0UgI>oD_ksYByubR*KPGe}?6ywh-=gPWJj$cF z0giKDgbpb7B?)FdZ4u8LE`|2lZ-*=vX05MU6ti4P8M28)@gWMwUhiR&DAo;#2iJ>l z#!qZp>q!ADn^hGhc1j5VZ3x}lXm7J@*E@Vtr+%FEkI*hmUtHLWHpc;$ad2_>_wn0( z9ik;C{YNG4%G_P*$PeLD1FYKZ8vlJ(Fp-XpgbSG`b`M{b6iLIsC4txgyPrYDy8<^Q z{w=x~6;2y(VB~TR)HEObBC8l;1;?}T{7C1nuNHs1%z5Y9LIllBfdVXwgixjgFw@^& z(SIrcr;)ugvHZ#%OPTGAAI9n@UB((Y&Uioa*S%3C^~#%T2S1Oygy=3?}i>}Wsh z2;LL_XFT`O)tGy!>qK-%6Q3O~cmt_m`YAg&3iZo8%<7SR49vYG{Y?5q7a$2!s(^>U zzR19>EL+znMv__f^|Ck+fOC~&?KhcM30_FA7L&)B6|a^KJ@4!<3dcEMEyWW;?eE#s zn!7s93aIg_NDVL9bVGmbObV;ybRn%9oFPvL>o#Z~MK$fbamHvu-O=1$W41eA`SRjC zd`rBtTBBLZC*b|<1fbiyy9%nxnl{V}a!t8g6F?6RrEdUbpnYm68_);qn!KL2bX<4W zqni`(+O)qvk4;wl4r3QO?QJQ#x$)q#`8(>Fun+uB(Iws=mnsTMnBMHB}JNV{L?`6rK)XJb1uxxFpE=Bgs7sQ)~V zxyUUJY7WK%|38kSs`>gKiai|K4R2AMCVLjsD{lzU$(kKDBS=Ah$D*YbAD`zRQ`mGl zmk^>}Qy7~?Um$L%Qeecu%UT%o9S6zXG>HCnbgvJLl6ciODWc-wMbQM}X`))G(8Y4< zKj2&PgSDKmX0^JQF^EynUS?AZEXu~y7y4YCNpuGiC>>zER-j~@T!Iky4GqZG`>^kh z-Kn=HsQjZ#XCMTMJEEM9R>^-|+KC`|EC*U4F}A?e&$6}N47-r0vTH}-r{EneBvbO+ zPW5*A_*fkOdaTm-PFWH>olH@p5+XFGbDGn{*is>rzzugWos+P zx2yHI#wFx2O)ynZQDf#~bcM15T145Zg6GRXx2kp8NdQ7lv&ZM`_<80UE4fzW9I$ zRR1d>%E0P2!ooh`Q~90zI@+T0gQC*t5om1YHWW7knQIdP440c|9PTLI4lbTSSw=zXMNB;*C^j4 z?>x$_&FkWW2a)Z!y2_e-m_aDrx5wL>^6zNL+uEL_T$6w~D)>O;1nZIyv|W|#uq1fg zT>U#4|AhUj51>DjXL6pS#s(G^dj6+R=d;`*&r!<69A;FuCMZH1qFka_pU|xmaLP@Z z+NCuRH4dGGHS0SeKdHF=FJ#E?>~RMHswO#s%p-Tq5h^jqTp<5u@zZwmQ- z4kyMw8PmF5i6j=NpZexI>9g@+^A+~E-{b(&MX{3$p5eH&SDZ?iD` z&+l;Eo3E#?Sb<1x0k5%fHyHoyaI&$|OBru_q6gcZg)uDFWB{>S(($p$X>T@9{*^!!!MZ47TcJI*e;2hm4R4C1zNHDn7b$hF5~Pgyc@1 zsVTy7{?o`N+G*YBxA*uZOrS2tCsnvfH}XX~J7~lVud}5SkA;fEue<*y7JdhI!>%uJ z3?1(Pb}XVvKldtE>b0T}@mX$vg?w=qV;pGhPj8!ov+e$^WvD4c2!++Viiy}?XEN(m zwzs<~BiXM z)oQyW41lkyosGlf|KaI8qv34dXdfa%L=e3bg6J(#V{}mxM6~G9O9&D@CVE8g-Gu19 z_ZTgDiC&}k5Ddl)GtYD8{hxKtS3WRn-Rqv~zV_a~?b3RYs2QXBdoC9Eq-Gz1ge@=0 z)Kz{r1rzG(e^8zsk$L*RV-)ka@y0Vip588LiuFQo3Rv_tY07N7XRDxlSyxNj6g`Lh z`V>|=JLPV;Sg-djH9$K}u^z8Ljq- z=wlMi;ZJW#|~)sca_VnpCerU zG*Kt z-VoC&`oZ`yvDQpTHR3E6K!FSmSwt8<>%l}VJ?~*7k05~0g9cl~Z{~^PN^WWjCU9WYPIopR1lazG zQ|Mr?7&H!#wT&A+%z6BI0c^i>JN8y09?`0Em2atOFzvDxKOZda@!qiyd*#cBf^V>- zXVrb0`y=K^QM0$>wwq=?#0IpCQUzh6;3O+Hp=UcSj-;m2M6*>ckh|nJRO6lW6-3ph zCb-u~B*5qwFF%sw<7QE`fQIP_#+8BcS+)QhlxH{(6wo6m;eY(v02z#hcffehR|@QV3-t;kZR`xvvUV53P8AdJ%Zw@mr_) zpnI9=$gOoHJd$z2ypz9O4sF&rVX~T!u~$Ufhq>SiKH;lzSx!6JIW7ZfC)rGUhkX_| z+VCPiHa^tXNH3qU!^Ww_7|(d=_D_hN&nGuZW@9CM+_a;H$Fpq=e&nX?Lqp%wEUrXb z4~It*XzbNI$ixS~AghaI?hh)0)oln~bSun1vIA(Wo{x)@?xE3K1=k~9!?9Issm+*O zlXzynry>g@^^f&#M&8ex`;9ev3`Ge}o_jwyQiBAZxMmw0-@)2yEsV}~$~L`fV z?05W=_HrWT6_3)YT`blL^se#aK|)Q+bEYCIr-qA6YvmH{S)G5FzsxxsFk*TuS60Qt z!e}}BUFYqtcD0{5j3Jv-e7`;A1I@n)FEVX(7r*<(&TD6$zn}RIO-z3=O>bh;H#R~P z`s-IcA6}8b!0b6tQ^;3W>m@qPBx5yFp2|TRZTBws@d&dhFakvjc>w4=X8?EGX&6*? zsY&_3S-S5rEeXv#zPuGr;S?k5!Q}gBRY`h`Rj74_ev}So=VAFZR6?#$ouAj-IzL?! z|3PkmvJ>>Ff{P6*xgbo!x30kN@|65?Uy zVXw)KSplkIb|f+_Xvn}Z=;4Phh*%2Jw$7G=u1!AnIeAjJt&Lbrdpb`+Pd(S&fFFa8 zL;S;Gt)z@S4@3TGISdm?Z|h}RTe7kFH@ztihJ3g${c%wkZCEGT(H}~ib?$14nl9bC zJ7#nHR%S0W2p$jJx{Q0aUviYHlp>HXwBn(hnkv+9Rrg%@tx;i@be>>&glnE`Kkuu| zdl};Bk981xbFB5EmF|Spb^Y_aOO8XB-M#-!KfD3d;LQb2{YxMQQA{_97T0l+fuuVv$lsu;@B1Jx%iFTc9Z{}6Hy zDD5$L9^jkfgoXW(BzafzksNvDNZ*6|6m^Q%!waf9r=K_F1dyvt=6ewyOddZ&qe+5E#(EBd6-qT5tFe;jT`6!3suD-Ro+@vryE zNN@j>?dTx;JDed!cWZ_^(siAvs2^|_Z6`}w`)s6eFl#Ils{~4>FLbjS9DT^QBk*sS z=xxfB4T`ou{P2ro>&T4rR5t{UK4G;??g;Ma0m_53>#+2K%t?9o;IjQ}R4#7xY@Q9jtEU;e2Xs`bn&u5mMp8n)9q4nmu@c&yQ;i zL&l+Qc9D79T`B*#jN9)vv`qf4?78}6#-o@FzbTfuE&7rNg)S#8}r%m}Lf{O2!!*uxX~=d>s6{K-)HGN0S!G}})& z=pT%nJQ*Ezs~s%J^>b7*nt?o$HxdOZK1u>aOIGOTs$Gome)J*=QaZ^Ypahz{e#VV8puvWN?BMGb4Gg;nC~SjAgEx#33{b zYgt0o8CeY1-df1PjbSg}w(I8|c5Z1qh)0gql zi^JqBAH0I;lSk3dI~J-!qceJ+N7W34Ac}t*AlY9W+4-|S|Dfv+vhaVaA*5q#lamM> zwAwDr6;s}h9P2ufd?pk!RlFoF4NOwwmo0G!x#%Uq8S&~I`q`TzV9}|k3gj1 zl>>P7)iUM7CqAw*5v#XOeAn>Ff6;4zmNRzXmbbm(-9SlY)132TZ$djilL_Ei6g2jk zyFMw@^Jdoud(Z>q4IZXg7{pR80#C~^&I8~A$XvxTjf_j$6R2^zyn%BuHl-c1@qOe| z9P@5P=RA?M!U6-^r`i>$t#;dRxdTx0XMgb2M5yCCH;F5_$$HS(d2ZjUZK9WE-+5hPE;7XU zZ;AyzYYj7`V=@PEbC->-W9Szv@tvf`YuEs+uz+a{ouhq;CL?w)=Z1vN9YFcsa87Jh zr-6N_0UfN4#@xs*W%P^vvaq<@`wlQx65E^JWn6>{$V+Bi!hJC& zy0oZ};XPOTV1RZ_`ZC+oBZ8=@XK02`;M0vk%jL`x$E!1 z39H3YWV4|`uveAN$hBJ-wlJRt3+dz>Z2-X0I!NU6JJzevdnr=Ns!9djVv(SA;b+vX zeR|>8`d=FLwNn)3Eh{QbKZ=Ji)4BKeZr}*A$YB(3vEicxB@>eh|fCGWa3!;1KBud0#Sl;(C7NwHmhiIp$Zzm3q*ibcnarLlvu z6_&g01k4A6DUcr2WG6-1>%kd1-N}}>e*Cy2eRYejRaBCRa;K$c$)ca_+eOD786f}f z=asojmRH<=^)GUlP`Sr2>=Aq@YZYUMzLT9-5{vFq3e~Q;CV!qgI<;4oJM!-vR2Dg* zOHNalD;PLo5d}%~3qCtZkIfzQx^QUl%+zFL>F;5^JRv|mhX+SF{MeI3g{&x{XA!Jt zw}Xp5#`}E5bcyMr)Jx{F99_ZpszE)QLJ2u?g|x0IG)#QoGj6xP?vd>mtNNjtI_=BS zKZT}wXIv^wHR!0a-#d1wUsd8U#0=N%E>B`b=*Zy9-ub4fbQ4J57sqrFKxX z>!SJQccv0j>{`%aAU)3s*__1Rf7Hn48h991;OJzg5&rwtLe0ihJQC{L&vDuKb0&&f z;+eaiGt_ZgvZo&?%H^IXpGXtyA6nqK9@k_|8hz9HQ)Q z+7g1>bc?qeX8*fBw-2SwV$WMu5nVSWOA$B$ExV?rmsA1b;#lRC@OMZ@9n272{BMUO zsnIZUxZ(p_|A#20rc6XNd&{owz>6HVJGVj=EV#l!hR~s{(p0F1pyP~)d8Ln!{7(Mv z^0v}f%?rp;WRZF_6+$ziTL)2vZ`B$9&^%R>r1`SFD2c^q+Q6Ma2TRIJxD;aG!S({(JGo9_n}G*wrC*|f zL%|N86TU+jgZUB%FQJfu>V<8rRjQ7)dqysD-iPlfZYXGHc>!4+4~WjTt6EP zQgV^)r!{JOl~KIMUz3}e?5>hR`f%RA{u*K?N=v!-dFu6heLhhm>H9bBl;U}`Hg+n# z$M2~4^v-%}dH@|JUS`vKHzv5QoxIXw@ReTup+yiB=W*g0VPB}uJJel?bF@h0bCte` zjx8<4Nya(F*tLh@5{uwYgr*8eTWH(>dGprUOrPfRh`09}GR@=l!TRe4_~k|D!%Pfv z{u&<92x>BFMU0)-Y!dD*&vZ}Jo4=@Rf}iepaZS0?d6dmS2mwrdAiQpU0*{?a&Szww;! z@gzR0@}%4Q_uDte9qn1iCEZC`EBx@{KO#~9a1KjTig@5GnrnUe-)?|JP|_ln>0jE9 zf!O||jJ=r)?Q_28#CQ}uz0pQ7zY5KHHUFUmq6#%H;<}5`fZDd8CQi6!hCEbpkBwRL zVxg%NfLKn4sF^DCser;rQ9OZj#(P$yBk7(i${la;$Eokw=WI5+4Q_{(K6R1Y1EIzyXo`} zIy3T^e&`)c(j&$OOJ=*4sRAHl1TI29{C1?N7MF1|33EyXB(wq9mUfbm2$IR}EyUp; z$-j2xuGHNr-A-yenYekXxwPz=tM8A7!{VGCWV7!zt&=IP;gbegop5}j^#o+sTKceD zd#?#d9SH=x)ST+g(9Xk2&FAk9Y-Ae-!4>3CptGt<|3(0+v>GX^_nh zP*d7EE>#njcAR1o`Is{Hx=xK!ZxV?01G8V;NW5lF#?B51TLmf)WS|6P+HIwpm`vot zb|wI!aY6;KSrfU5>tskrtUZY+ll)P=57J8a%52n(Yf zZpQgzf;FxJmkr;NEV$MbMaVF!YJ@UBecot{t}3hP z0YKRZxtB}3^bVi7cXpFoq3yHrOFvEfpj|^pg1kP)hta_f>`%TBAit%Q+hDJ8+X)lg z)~+JdxZN&Bw%)UN#dG5M)ZA+Luk4jE&UMAk*7IF;*72mDJE=m$r!Vx!Az*;ZPWW-c z6HTqxF`P-VHXXtC<7TbPwbl^0hZ5i%&(`?G)|7>d@peD)BnJfral`gbv~01 zwKM-{D*y>*@l^m_d{E9PB5t1{b`9ms0wmFcbd{B#Mh**xSqn3(8J^;2bne9Q7E$Mj z=5uF3CoM?}mFZW@f|bMBqAY3B!&4HyNBar8-*W0r#rws^8?sU}h^g3@^2a??ViWW& zDEozjwGGTQmmCyYMY4@f^I({4^Q^dtRUsH(nrQPFL)Ua+Y0~kp5kfFyPqu`@dY4@o z14hE+zx(M0?tWTCob-4(nx)*KlU=D?Hod=jnUd4>4Es7_Z7sCzM@mr%)K_y;n<{pw zs0I?>EA9l%Gz0HpD6OFp8fqf@NKU5>@=+;&A=?ZN`$YqalH9r7aw!sEw;9}Vk|C5x zTQ~jsobG}t6#Kk~qyCIS)A^sgaiN(|7}k?~Q<1%q%VxVp-M zu3YnLUqPKQ?i6W*LH#sJa{ zG+4bTvKZ(a`>S9{eBfWu9(5esDr&HIaWR@&75jiJ@vp_DhSb!W&>Ao&v9k(WFXS^xvNPu9Cw97wPS5Q&9_IOA%!!#;KNCv1oemKMS+b~3aQ|97ClP+rN8>|B zM^N<)lBumJDlNOUwpk<&a#D;tJUAD^3{Njk$yiJIR;tqzvw|5q%rC9ezt=WAm{d}d zuC@$NR#eNcr8gZvXdA@ysM&G60U%7-ub0`cIh^aZYV=ha#` z=D?jmBJh4HG{RDo#KpOL=yh&$7uNl*yMq^BTL2DSb)EL|M|-|a)6ntt$40mc7E=Eg z#9c-jwshr$S6$&&d#*VxjzMNwA;jc@e&Oy}!B`kgW1XZu-tACKoolFnvh~hO&C=VH zua3J1ss0;Y)Gczb@0`;;{mdF5)8|-wt_2I%Y0ri_GD?Y+{KOrd@Z;mKJAY$750*MW zjbj$TWB#$ROX%GiWG(etnaNYWBR4B3$&K?Tym{QXocQ0kjLiczdw(6X;-(-&>bYak zqeGagC{=*)mQjON*6h{No?Qz3p?ivFD z(GzK8z#?n}XWQCw0C8UNfYu7r*4Kv9xOo1HyWD#CZ(UQ6{SqCz=6=VGbzm2sal?m% zN1HYi;MD*~?f7#|Nc1kBryOR3%u0XEg`1F4rhZ#u?b^T>{b_z^oO#*Sr{z%;jZosw zh~Wzp6WQ0y2c&tm1RzxaD6;h7Q|;TX&_fvUKLSj913tjxa+%$N(XUoS+xZqJU~=|F zwqdi6gm@<6hb}*^L8vzAP-6Zc{ZPh_GTyJ7NZ=xnd4(zKYA@^X#eW2GkB}1S5Eb^m zE>043^2R5>H}><%hpF%PpWH9Fm*Jr$sw)r}O4sp*{kfJHom=e3#Iw5xbnj&M#e^ou zTmZAtK<;Jx*JzowKp~Wy3)*|+krZ$H`zhMXSc{h|{qsoy8SlGU1wztd=3YYON407o zla2#*I#8=xr&5h?LHeQwv`*=GSFG1c>@PoF;P(`DRM)p}2ta(|BR zFW=;_?Y}ptFb%LgnwY_r`%P6-3AWNe?R0iqPuj8f{mdvea(<-90s6gI@IH^)Bu;pe zXDOmJsIQkk4!-wPPBxr7#XPl1>JnPC&f1Mkj?i4$rLgDgN_F?w$Q9}*3syW(#?yZK zpUm@`LHLGjbFeq>(9SGU?*h7rPkpRCo`?!@^0I>7yODXi#QGPMqrQgQ;ttMJD@LyG zv#7Zy=>GN;O_r6aX2DsWb~e3ZjCabsB~(7T$-<}U!$@+YW3KQmlDG|ZPkTq}^DiGz z^~!C0y0!%E4;|S!o~pO3HVBHxf`lc0=eB39X#R0$ zn#r(qYcDYiNyRI7Krzh@?mfe z*+5cZ_8?;7du;y+6&=iYIH{lP)*^;P?(BXYhw?yPU_tL&=W%DsLaBSd?Ap$b0#~H0 zsgs^i;nKXPQ}iF?gvVi6*IKXH?S#R%7@EI^x2p`#3BULV3v!qx1>yFfIM`OOfwH6P ztw8%KW1L^~<-t9)(#cCI(n{#hoyWKw6wQ$~@tPJ(!gBLF`d7 z(mdN->Dha2t~EgatZE!M$@>kyPjNj45x0vdkleS9DjR@@j`cp~FA=*YZ68bdP2*ps+tg-08XDMR`fkeP9{S~j*oy#5({PD6g`i!* z%K-~q?VmEUdNw|1EIET~BPxmM)6e2Rfb@*Wsmz*}c6I7m!&%%AWId#aa${nU>^_@3 z_hVVb6Pn_Ae)@N(!d!ux=>u-^&!e@Idf|%CY&J4AfH!A+JbPJk8^w zDGDb!V;Hy_W3PNc;D#7=2@fXEXz91L5;3GarEGS8iSSt^yDv@>9WHInR`lBZQTL?S zdo=faLKGLyI{>vCfkoIffB!N6&G48ayIwdr?c~So&(}}ls4gd77OaN6&$asBbJ`0F zqu7ZHR5U46y4K*UnO)GuzHO`T6Bw+($CV4%jq`b*55ty?PaiWfl59kTEw6YGHF*>1 zNd!dfrn((o7%adt7C>7xZYi@beMk2KnnzM&P)06(i|XDARTbD!S@@dqnTknxBk#>A zK~#TAEYZlIH>}orp1&gFdIE6c8?Uzln}aKPE5RrMiAIodKc@!~r;)E1o%p7wewQQZ zlL5Z5(Ww3m+|dyHh9L6`Q2h(JhU=ezNbANi{-bn}TtFz)4y>8ow>ac{;I*h@tXSpx z=wfvrC^jy$@cAV)xZW5t^-Z65S3Y_w%~u7fz~c8NiV_sLq(uD11E?NW(YuC z?I-nfh5pR`@+fE{jj&-&`B_J7p^e;9X;OoK=Rah9uba=k+QqI_{-m7m&?PaLJ~(UX zzY~Fe&37a;aVNS>!^?=^R?S?FYds)J~1Wa4gEU7sCCLGUULLmTgzhRvoudv ze)Pj{=TdI5hJZ$g8JK}42$$W|yAE4lCitYWr~Zufdfatdcil=UC-dsU&IxMTRFwk} zO9FS6_&1pDlxS`L?Je3rd+Tb?hns>pFnl>$<%MnpnAGj|`p!>M81&Yz=o`0x2_2PSff&?%#`&;T5%^Ff2K7_Lz8CH*TqP^E2``5~n zJ*&JuOO|D^zT+<>{Usp5_7DG|#ed)3jQ4FP0eNy=#s)Vf4l8zErbhbY)aSDYU`F7 zX2hz8#-+Jk(I8bQX;xr<5MN8SIjxPs0o0xVK6r#<*SrEs`fyf)KQ*BLE&D%Im(?ZE z3X?EwUQQ71fQOPdT7A2KSAfe=#OL+HhC^jj)Jvd1cU8ii-xkyzL$Oo(p69xcDPVR} z1;qeKpt9)>|H8Ol?pV;miNDrxU@|{){{z|G*1LzYqOTw! zIo7fz3iW8#7>GgH8^C}~Fh3g*Ii1;oFhI@FtarhK6ll1GW<(qLuEoqM+USd_s^Da? ztuoRj>;PZ0htiEIm)=nBVVUB1_Y|ES=bgizKMjk&S;!#g1T{}$2%~gg-EeMli^ek- z)f};tPm^QDcHv!ahr7Hk+I|AVaJ)-0o)-PSfFsRuTBGtv>d%hPzy0Z~wA!-sW7IXS*?6m&lmkr@kF^O}3-cs-qs9KQmZb0;M7i>%r^us`%O6B$585 zXia%fRQaJ~O8yo6-7VRt9*sN`Bc_?2Z`!6)pu{G<<4-Do(XNqv30YQnQ@iuqyb&G- zXm?_M8fEF@UPp7{EnKs3MSu&KPJ&4Ix%{$dUa~NGV)QIt4~wPb3b&801(&&u9ut(I z2h_8a5FdY!4AtZOvoAw|)-$53195<&joQFCn7^me0gOVfUA)5uxv*=`8sYEL#aRtO ziOOde16MwJUAuo-_dhTw<&@l*DtV{BB*{O&w|mQH;)`9U_$nr|{+Ytq`4AGM7F~s` zs90S1M8nH%CJxJA7EiFy{Trx-6827WCk_T9h@5->K8L*kejscpRYiFHL@%}y;54>< ztX~Q+l%@hlk*OfgTYLdcZnxXgCV0)4sdder2c_(Wev?FT&j18smeSN0Lbh_3w;_Jj z>O{D@`f!iJN0EJxyJ9#^YW5yKx{Bc3*hODb$R{s~S8~|kZ)%@EzSt%fc3KE}iVGP~ zJoTlG9hIYEEp@sqk5k*Y&J_WLD<9lbp>Z=htaHk#!>75|vhh1IW-xC` zPxABw^!qPoF2@lW{Wax?VqC?s!-S-B1%}!!56nO@R)Ap`oHZHD%!k@$?+jGW%Gk2F z2ywe=_>GS#_?GR1HIyY)4p2K6a4o8(2BI+U%XiJ1toUOUT-dV(n@O`eCnv77al;;; zjG{3WvbYA~T2hjcF|8A)*eI|Hb!azbyWk2`MklSJkMKrma-NHq0enkh6p--6BR%#P z^60C#a{Ak>)Q=jzE_#mdNf)@pBRSc4(^YrtVn}Du6Nx4-kVkUAw)fvXB9kwpg4-kf zwc@_au(CYlK|4%X_{Rw+W&68v#Lwn)^jFOb&*hY&cRlQk7U zu*cK%I=dA5=nNK)$q}fF=MdV74AeG?1J5=my2V`{r0R}!pHOMZgHhkRLZg(}|B5Sh zC0LW2l$Oepmu%!_)PG2R20UfDm4BMSK5iN2Q$V&(&xntGMO0K3U3Wls&7UpjM;&)t z7ejPqU!;yD?bB}i7)(XW5!De)_gHepP8g*6*~T@rHYrh#)6^93U-Cl(1s2T@Q{;>z z6#8~bK2k4Q_}()?9wjTVB%95^O)ozz+jujS9XLayuIDk=#Z=<8z<)0Cq9J&wq;%f`7x>uf!MEC1n_)@2uw}^*#x99fBE_z!wq>3dYT zCLhbs{GC?L?b;G}m>0A{?rM3qj{ikMIiupXtdJ{Z>}|sjXA0*p9|Z;*h`O^2=6d$- zRj|E?drjf^ZPYg+S-;1m^YQU*&=Ls`Y-84TQ9 zMRQ%$mqJ8&HIOB|D%2v{v8jz1s|U zYGa{lNWK>xR2@>6VL)f49`t3|NRDAt(+XPTjs8LOvo|ZXn)Z_}kgT!WAx(8nmLXma z7}~acyzeBFFRpcUjf;cF@lOLnD#O4@JkuQD)~L)vX}Av~{!s#rSHh_p@@DIX3R>Pb zp1jA90kTCL3dY+!#EfC>#*hxG%o5wYi29)+(xXrklwF1;dq{U_!TRn+Y-Iem1V@RH z0m##7I$G)jN!0w2Ab1fJ7#hLTYjIoKQG@urFO@nY>C3ISW*y1Hv0P?aghTgR>4@(R zk2(k(H)Hx#sd8n$Bh-GLKU{@)OcFux0@L96a`YHH?S9A^A3ehlfPsr2XZ%=SJ993g zf)g(MTKD@$z7aLD}v%MX2({YIp?{E3Mt6l!`iitBD3<- zJT2~?JULTk3U*$FFb@u$vIggGiRO+NOa9NJ1-Wo@b&MJ9pIoIrjJaU!}1GH z3T+vdU{zBA87BSTvYbdN+@ffD6Ao#ZlE)&SNDA9|G&vI?cvcwsa8dNMh&2+lT26ZS zrO+GJ8uG)m)w(u=8A#gw$|G_hwg>5&1{}H?ZT1pv4LrBvvCK>bU0jSakkIn=MBIk> z2kj0l1@c!aXZ}GuEmCOMCi4(ZQUNec}Ip5K4XUCCTw2-Biu=**rZcE7-EN1qpQd+|@0<{pcybYJrX( z+6gDus!l6Yraei`gpFxJVa*zHdcfjIq7o7t2(Y_*W5o5()eeU-Ly@%8B0~U~% z?;XDNpE+lWKeCgS3m36wPFDa>@@l z;<1ss6fN<^e0pdzNbM7hXYN1TvtsYvTMfu-{5%`Lgxy*Hiq0 z#bQN;#S6Y^Lf%Ql>j~lB}W`UfC71Hu-y3wYfhu0#@v8!w~L5W1sh+ zQ5PkpL}|#9KrZ=eog7+ac{a*cEOhzO9!QxF)!VDq#c5O$hG20bW^ZWm?a-3OpM_)p z+|iyUN3%ke5^rH|6)f()w))Si&?uj^tNd`x0eba@CGjUBUDg;K%g+N7`kAs*SGIF6 zckYhBufDtfPp7|wTSzF)k&8*A=3CAB4^u|OS;Ydu$7Z|&g^6z8sOva>kQG84KB`RQ+;FLGM37q|C3*6eVFF|MIkHj7}!B z3Xv&f47f~A4F!ajl5m1Ll2$r#_IlKCVajUr;b>~?R|-&yn-%9?a4ppds@7FY5e(F!y-S>NWNLf2|;y}*$l)oBSs`v z*mh_T`V$#AF$3j?E1c4>STk+Km1}zt3xuWBsTdmx8jmT-eSTT6)LYBGleY&$#7{}i zLo}^W5fN(JMOlD84Zjgjwa+iUce`795wBI)5!m4I4>J=9o6R%1tFXhhze?u~m*2ky z;94CL@BV{Zte%ET4Cnuf5_iWYN8^qX|Ff|8>-VGBQf^qHnZK8&p?xvGMW<=1pqU?j z$2c@xL2Sk}mNl!mH}`OFuvjZ$MjKW{w+!7xurgLFJ(mNv26ppc{9uw5v_zX;|1rJt zPX;=M_+D(pEZ{y#WVm&Kyr`jNe9>Q7Uaq(F)})a+Jm2I0u>c?=@8vYo8`g&(=Ah?3 zW|XPs*`%|LHM||5BGM+p9~f`YU%C%}6qUl>^(gQT^;DQ>)NgKPNHmFi4MmXN+w~Zx zm$)z9bBlGiDu5c{jrNSM(KZ-5A3o{3uJ62z56~J zunrMl_(O_#v*Sh2!`xHmQlW|mJT3hDK?UN@Fc0@AeR%_)5Q38k47qf4c(1$VE?H}2 z*uGg{otJ^@3C2w0-UWi*a9RYU{vxhD(-`!IyG#K%+Lc{&RwE8)zZ~5RmT$!cRL<8v zn|?eeP(7sE&L9h@zJK-S=hZ4VnH=g%2ku~N-lS7XsJ^!?;9YAy_A>7DP!V;fT+;tp zI7(o`5|YoYQjG}G3C1mxQ{|_Pc_*lHFH(2O0#^<%p-dbny&S#i@z-_PpOM!qeJ?Y) zE*Wi-3lqt6FYE#}88Iz|2TZYgtZk3kCC5&lc>aE44gmU;A?&N)FsBia2yDoWAiLfQo}(o_AC{XvKw$uc9svEyq+L-k{*sQXsB%DKmHx`?^TDj znj$|bmn%MTOJhSre*8i!X{!L~dx6BWV4l#7E&+OO???Cf637)qofd0G6CA_RH@LI! zzfB$PIchyaNsXw`_y)lh8Dd@)I`^NmeiPeQ-`e@#anu$-HyhXwnO1Z-@_ovaOVt$+ zi=ucNDu1d~3(?aAa7x$o5?m2{)ej)TJc&#Sm{ZI=8rtHX6Q(~#(m7PtjHQ3FKHU~1 z*niK9gw`SUy6j;UcWEozrnvrs1m<=&pwJe~6er%-K+Pk>uwJB zmYX!4qp|*2CJNBzU0OP&*JGUf&d02pmSIyUNU#udf_HrU{@Oi&MuZT2TKR_j_meBg z?K>^D)^#+g1CVcm1a#c&W~pqUjJC(`-%l+CM}}{;`NbnpVx_jI!<|PAq}n6U6ySpYfLOm z77T8-9!Y7sZKxj=tlteljI-*ZH8}6h5zokM;lCIA_CIz%%)zI~`c1Q#4yfVavs7zF zc9&v88Tb(+r8ELxhff~Emg%29v+ux4B><#bDVJx%l?z<&?i#G#FN=Bm*l@TG5mhUF z$AZb}g+aI;985}us&kKi_HV#VUavSSJtsji4%{MJUkKN{@ClZB0+Ave2oc-bNEqR- zQs1%Ye)diq$KHHC8*y4FF|k@U+%dISSN4&5jtKeXaVFTo^QN3i+Q<{IAW6cfoB4L`V;pmKtC zF@)bycX-M7@FMQ)u%mS{u9JQf?}rC3EcJ;grIf><`Wcz5v=_bQFW_!SOgO`^fNVcI z>nUG^q=~hS4d;NPMrQCU2Sx=yNL(42=W4Z&$CJ~)Od4}zMC1?)BO1JJVITy5Nu@d&;1%%_ZKe=V+MfmE)cj6%44H$Wb z!I^)+w#9bV8YcW`sZkSvftYrLW;Nz<>uC?k4h{{Liu(ba&-40vn{f@(wnOHNO-(fv z0DW&@zmJbpFf3gjLzq4h_pOsxBL8AHsm{3LJuX;aP*xb^GsY3EMt}QAd260bR`-fZ z@Y?s#iF+wHw$bjWmPl$O#8_f`BTsU)EYO@O*8hG*s`^(&q5ytQwPDP4$vlzLSs&X( z&W0MzQ?>#XY>Q7B&cBiQ5yPohn{?~*_W?UDddh|Gv=7`F)@N|wRqFq6z}vh#wUf9Z zj20nuQSFPw?Fexb*WnuKkd>@k?(JgCldKz??|yVj&ZxErCQJOh7GKY)Y3g`O`Iev; zkKUyX-e~C6g9G?{7tnxfiwkHJ0Igqz@-93)Hgc>!s#pj84f zOrq7ZHnHUn(3xD?|GbEb6qaOlXVLj!9`-e>=hm(Ko0o5#WJG-rtgGDmA~S(uv3+p0 z8aG|nI1XeyBN?9fC1ouMd)DH91yve|O5)hvne_sOELG}bzjHOhlPL#Y93=l1S{@5azOh8$I6JtLT(s-qZQ{Bph;O{&R#NtGt>RgpshEP*-?m?b$!a86ggsut7S z^X!^OzdS>rxo4iIU3lojd3d`@IHyh z;g;Y`asfs({HAPa7J*^1I3vKoxVDjR{Qg?gvCMX?OeY5;Yj5f_5#;8mekaqpDglSP zQpPTKpmF`V^Kf1W^mt+E(Q|ECq1uaZ|PfCK(cjJFcEX2`Z!M%`M$9}Dbe zoubofzvi!&GuHXi)A#CO$bGoV>oF(OFJr&e2grr1j`4gFWnes;PlG?Od0#P`d^|_-JRu&qh6AJ z@&^h3;yV$>k|cI`gcSalwxKGeb3F4U(?%~Rfr%DW_3(>N)MwJ`N zr-6ijAx~GS0{ef0(dB>y463y}n8*A6gvCYQm+B;JVXn4A5f^FrgdZ{YiR%iS0)!^g zi4N(mU#Wm;1`b?l(Emh+a_K64<~j#O(7DD>9%s#VAEvv3@4VLB2L+`If$A8D2PO(~ zB5dE`IPvIoQ5HyM*G4=Z+GZJQE? zYQgcXiW@9Pidccuy9fXh2;ow4J$HHgY{!Gx$ejkSW`h{5ZPc_=Y>kxUyR$rX?noA z_Nq{Gzy=LH9o_G>J&}V8yn;V1?$*gWvCPZcBh7&-zyTCY!t_D{UN^m8<_ftzP~%a= zm?RiCJSOpnGvWcW=t2-8ChOS{9Csn@5RpL#3P_nJa?n$0ouNYo9PHGF0|9z+rvM~j zxzjUiI3ej3tQ9SW2!deUdITnBf*LnAtac81SpIM~YTPRRkWvC;>z z(=&~@UZOB^lHM+-ou-;}x{Un+?P(iSWSGdum_D}vD;~On^w(eRRc-|lKjw8didHo} zuzF}-Bm&wfFW%zrH?hVIn?l#p=#k-F2*xst$^g5|8 z2MD~QpUXkBDp3sIV9#8OkdP-Y1p1Ad)@j0A@(vZW{*$e0ce9F4YZWe`y!&gn2uWaN zftqB!T+eNp!at{WQ2k{#B*^+Iy+!Dgcm&~O`4Hx}D33M)uWDX>-}1zB;g-FL<^}Ts z*y1Ie2i#2q1G~R_UOs44I67)FXm0?Q&2rSX{9j`&{?t8*R`DQV$Li5cp6i}7M7M-L z{Q)XDYpcCG{S@F}lFUR}Z}gx?dW$BaTj@QmB8J#4l`oB-^fih&G5xUWi#V~s zmL2`-8``Xq-Y&kvzM&C(%lRL1(BJ!{-zhDOt^N_29Og@f3EaT2n0(E!)1w@h(1H%i ztX)26{bxIGb?0S-i?3ff=86p4iaCcs?-LPHHhCKWR{Od8xh@*8#YV9 z#J~!N)`KGL5ghR$I^ei`T3!tCg1)_qjNE4#{yfp z^6AP9fg|K7wzWyyI{4_|au9$ql667o#P`I1yC+I8^hm=4hpQTj05B6fyIF3jIPBTa zZ&~)g?mu`iNQr|U!Lj4sLn;&gxu+}4uL3)^>tIQYkiZ`ozuD1>)IkkA0qrip=yhcUJuIs?NTQRx z!8D)2pMA_v@J=}UOoOcceDjm%3MxUW+d}h~%_8d`CvEz5Ow>cNYg}Kg3SUoIH4Vj$ zaH7-00j-YGv^cKFQrbMFqs+N7QNs_OrI^E=fdS_dM$dNKe~T>Gwq)1SiDdgn^uU_w*Ma0{Iz>K%5yEZsqJ{Ib~JJ1GF6!(m2!0t1p0{$3eMw9p}Bq_GCt z@IawE3aGw^k8sezt{Gz^U8(^iFT-bt->tX}B*%rGo9w1c^g9ip--;WbeeWmyltYY# zAfe5MP=;$bD-O!|46Qo}+6GCy0Po!xEOD$ki@s0z?}%m%n$CF)25bEzOe7Eq zbB%l|EE!7uCriZsk;m!1KCR0O5A8&z{jXISRabNI0B zkH6Olu05O`2ZADe{$NX_!Xa zeb>Ez+;yIFp0oFU_P*n*`nOM%@fD|(+yv}S<<|LSe#mTGnEPs+3`wbq4l787J$y)( zW!>0M@*(VufMos(JKukI=QOfdKyF@pyyk5AdxS3UK3Jv2Q5P zTkJO;`m;0e`vo%ju8$t(ao75<9U=|uYlCs7wcJO3OW}F4n4o)Eq5;$l`nKQYac;_w zfz#7Y!nj8gBUM?Vbf@7o@=svxcL5&o=dMj$vvra^RUY?#~8R&t66vzDcHWa9A*A;omd6eE)K`z7$*2(f@S@gV}SA zTjdskok#^A!5snP4nv&ySc2EpqWyCIRd3}+>o3B)Z3uP(czpW#8Z=md*)JH`87N3A z=$3GuSD3i95m$4(eqKgp3=j>)k1bQMrfhsWL(mMx69&OEd{e=7pj2+fV6Kdr0z8c8 zCLZ**G}i?ZpQ2rC`(c#F@N3PX=Fsn9XFWB!Hd+StE+SFLbUY~?(p zh$imKGlqLk(?@{e0$6Tnqn|qPp}Wl0s?$K}hT76XAO+N;AhIV`UGTW}26QEMkdZWi z-8FQD%ya@Eb-?tI{PgP6_M9ZnCPr+z#<8=DbL41xx?dT*cnsMLn{Y{>sos1LWExr!XL zk%01RZXF;p*y+t1;5DHO1j!X(BTBu$6xrvH?-i`e;fR*$dQopYevB$RbM$Re^|lzO z0C=w~j$n6mzIZMG$3y|Oj2Q}MHHVc#%T5Lw|B^V(Oc)dTd&f49P}lIxsH(PjOnGRh z7KfP7M1f;YQAe)wgzw#!(}d2FhI%jn-|nnM68tm6MxR`uY2%HB*wi$z_$nW}+JE_Z zAtyip5@jF}AXWb{EA=@xX;}65ur94mMI*3Vd@qS~e`7x_0N6 zvo3!E9BI5Bc!|Bo(5yUQ9G1d5MSEAe20v1jBynX?j zfZ>YyjQPbCa#kBy8gwRDh9*ILH~cIUA-8#o=JHsxkhPtXD`+lcmTS<oe5-22h-2=fw{G_BxVL$hbFyial>G7D^sfqfxk45IPP9?h3q z(H^8x@MQAcmJ!assAuXS{-zi`DnDOk_FMuOA3M*Q2vo-1qQI%bWany4FH-$c{PhJY6e;<-1Fz6WQk{^rhKC#u>dTE*g|q4`6>MI(Jyw;485H z7CVlwl=U&5+=(VR(QisA1^*x%Z{KY2M99~3k;Ey=NqRU7`mo*eX76|T9!^Sg;Om7w zrUc4CnZDyO?gG~44c1wLo1^Q3B_Z*xwXNr0Vo=0Ft@tWq7zwuSs|WnWX8d;f?om5Z z9fT|a)s-2Cm9(FLyh(0}DXbpzx>}YMAMIbW@Nw_Y#tq&6Ki=+LCog~9pTbRKZXtP} zL%n*g%;5iIzdfD_TNbl!Iaw#Y6o`%RtNgJ})oM7S#OV`yFKBz4ptLe)a8xVOCwZe@ zp&DtnPt@com_lG(9#Q4Tk^2h82iakIU-`%dB_{YRxl1~kHw`*jV0?!Y_!tA?N7Yg# zhc<>)ZS+F50o!$0R8S+^_v5cpn1UXngSi(!f2qxVYp3#!9QY0JUV^s+G>oSaFNt4N$4?u9=vgtHJK>C1fc`%KJ4&Zq|t`DbB zzx@C&*j9B0tyKjrkWjuHabVn&Fu$pJxrPzK3H!Y}4L`FqieT5G5vS_>rKiay&7h$w z?8M01%iVN@kaWQ`V2z0+sh;6E1#6P%P1z=H8-9aG`wW2YnF$9Iz+v25FWCW)zM={# zgZTxE?{JvW&HTJQMySF|5BQ+{^;EQDw!%bst-=jm5?G(3#r2L~#BAvtn`vYiGo4Aq z_$Dut3Z@CI`_&dWE%V?gt-{=36tkh}pX(U6vA(H~W|zNBz31l6 z4-BBnsJfE=E&N--K+^L0r*fjlJTG8#eD@ng<3L~_$PTgj=C`IdwGUpxibfHxx{};<5-|2O#FUU@>7%e|$S=J6j0vc*G z%wJv*@+aYldcT<g-ra%AR{-l32%(O3bloeo5}Z|%Z8KPEdXbXr(_q-nXCuztK?*4iMrY(x zodM0|FK(3oJXvlF@|R8dHLAP2l?*n@*rBaGwK#olv^V3l=vaVz$TDFvs|wqmIA&|2 zFFOWNfwPjUxB)r7I(e;7mF>s52!d9)(dk5Kz}us8a$2k=?)hY|Gclr{>1VtwcsjCW z%J!h2i?642LF^jZ6p}SYER8kenwUojasTIxz9VD@P8{S7#nV2`0^cpSF(z|voK1ig z0yC3$9$O4KsoA-?9_l}q#>%a(yQl;3{-Neu2LH1_KlDGE8gMIJ zw0$#T#<$vcG02s3hRKaAgsSbQGG+wXj);a(rqkqkn2m~`BF92n@ftM+Ay?ZT*Vm^w z?4Uy@p9ENty*4gOg|(jb{H8LjZ``9=>a=TFy$HI?*Py=J*MJzypFd!;Ae9@<7dKG{ zUy7Y!OHT-le@FZ_ExX2aKSg=!-eTJrCCIFAu{@NIHvZRwv^pJd%&!S}B(S#WIM$)kAK=P567fS2+ zANWaPr2L!h%!W}3BFrN#z4hN8d@PkdFkcV_E01{ z!+7$?;Z)mgc=2_iI!P;{y=R(K`TH@1%j88G#(!#^c+K48vygiIukI(k&4l8L;0tz* zDpCAyW`iwwtPT(AW-;d-i<~`s?id+-nbp9S0(8*#r83Dt$- zwNIO1np!i1fLoXsL!y$236x?Y^2TOK?b9skatvOvLjPa#sT{R->vQA)s4E3$q64s0G_Sb}SGOdgH=9`8Yre9El_y_<-LYD98@Pd zKRhnj`NK8kgucrY#zxZg$M~8Dr6)odXBU!!(5%**5r*4!7{K0zId8@BItzz?X~|c8 z?v6b!#-IWPw@AA)vrIV;B9%VpwO{W!1|%#QEW7QQ8KV92qRgZ+O?|S0VLS7+YkUES zd*9^#-1UI4n*R{vzI&UbNtWZs6jh}CiY&jaL-W}P=KMx2=qLd`1VNW|< z3u;+C$FXKnIxp?ln07;DWYZdZt88T22mapV98jT~8kj|+*de9AMcMFaIh?m81Rl-c z^{a!c)xDG;xyafk;{{yT-&**o9lhqT8>3}gzI>(Rpb#DL+3wqTDuq^x{UZK9?|$yQ zhaSizciIBp4G+#356a|UNve#oM9$rgWykVQk?9qWpbccaDf*s=ud*#>w1eqgC@wAb z6bat|V&O&05SrkP#zKF-uIe-6TX#4ulcqd*HG3Z=_S%NgXZ7fld>GeUFo#|6gbFGi zJ^;|&30+w%Lw|)8Erao&bphKvdpz=YXaWCH0Cs7wtj^}MVEZ9+%*Mmxn0VU6gxSF{ zJ07BYp?D28JFB>G__;N@{L|XkIaPKRErxakqffXb)lYb(W}%Au^MdKymz0RGB$_Bi z#euP#TEbg;qL$besHG0~^iBI7h=u7lCXeT8fOtc3?AW8W!{SOD5oh6NY5x2$^Mh^+ z2lo2bP+5IoL@n-GBi-!=wR_XT2xeHvoiaP@=elrp!}kS=kd_TrCo}_dl5lpkD>wro z6evzYJJ5$#jK0*Un+DW+ZY!*+usP^#!(*+smQ#!e-d$zeT@+>C&n=20&kmxl8-jSm zC~49d&>;9>$}Onr(8>j?br{)!3+)>4A92fS;gH1cUh}DOQ^)Q;8HJq3ya-O+!LgN3 zC;Z17ZMq5AJ}}l$3Uz48W3n{hi%oGh-XrxNz!x*%5=vT7kHWx$D@M92R1`${P-D|X zJbH^B47`(~gq0!=CyRO{!;UG8qKIRCyAJdIx*i@a)|>tM(7pRc2*vBaL20p9_&>B^ z_*jzVm=JP@f4iC4_1)$rxZVg#<2mzQ;)CzFL*%x4sYE9t;d~c@U_7sYTvd2X4{`U* zD>26JjOBB?-fp)HhDAQ3gm!ywse%t4>qYD@J1TA+HBQWyjN(`?*CEz_XZ@w5Avd#L zgfjlE;r;b)DwDP7;o8Bwe|Pf!3!n~@`D(LpD>!O9b|8Nee*8Z=^%Ev_<3FJ`QOJI327n$rbh9znX}zk(IJ;L}@=xw(Clm$kuThi?3<`nNgITh`lQgD$Er{oyXm z-Bu_m$86qPU>}TWIGGnI%c9Z&uqOY&v*pkBF#kCxUj4*JfzdNRK!$)JpV&-H1|_Aw zU8(PhTuI}`8?mb==8A)@{mA|MYRw}lGIX01F5~JS*m_M8=DzBs=M9K9|02=rk;6!ZZcgcuqX$+hW()5X!W$Oh;yMO(1| zchw08el^o4p2__d9OWZAQI&%P@gxsLlNO{l?;Z`0w&iVWqxDvfFUj_(4I3`UC=!0(#Yir&>SbzlMGp{Bwv?f_R|c743MDEcW{AE=^g*Z=iCLR3muFIP~_t zMkBY>gitR%f4Fz@@XdmXcE|++G|6Pov%X!WsCY67uVu8n9u4I0F#Wt=CZ*^>-o<_~ z-_oI{4nEdpYqy2Pi9ADKnAm!*3LuvT^gG?8kodJ{?OSNiiS#(ZHl~4Ev-<~x1En8A zx6>uM6y`1MCf?k*j7D9uZej0EGeyTGY2%*S4bdBz@;2Iz#e3bFWx?*&TC8@*oEs3_ ztlPp2LHT#9Kero33b^d-;$ClAt^M{sZ+C^XuLiFiH|(dpm$W_NVF<4I`aINg?d>7w zxc4IcMY%+$mb%n-+P57RD*|zO&mI1@eQ${&oDmb>M32I|Z3+|=y_7jr+(&7H@3p;P zlWG3!Ijmm0>tfB7lJQ$zr)n^&3>+T$?K%E#oTa2U{?B){-Pa-G(ii+~r(JhmzBImK z2%gse3a^=Ox)SsZXklkYRqcr`7*sWCttd~XMG?5zqOZM?I#U1K<(8R75P(s{YXNUN zMqFy#&ixQ`t4e}I{esXx9zJarYr-TM1)Qn)K1_nqx+!v%0RA-;=O}l;z!cfrNRI@DX9lYi_wYgAq9LCHfa%Y_< zAq+9j;lsAX19O}&8YT5%z`Hw%dumkxJb&LG_r~O6qVK*u1 zA*}|mf3nocK2HC$)k~i%1rDf+FzY#=1k++|eKjt)bsBNLk1RcTNsybA0AR9{f#waP zkU9UVxOV458aYv0OReoTltJW&(PS_9-AnNGc|qKgP%t7c5<*xLZx-yiQzqoUkC*Ha zHizV7E4Z32;9$vs^|(uY#hUCCgyzE9HVVv`6^qmb+qSg%b<6q$qSraKx-@mSQ|n6` zQ5gRhha>gN*j73OOCT9$(u);{Z^8!DF*Q~Nzx3h66g%|~I2Jeslgc>z zZ1}=RH-ZY%0`347=y(Sc<=)TjCvEsb9deWGBtNE(`$PBwN|72~7{=QrlJL2R>lAwv z)x@iakULlLCVL+d%_AC?7?ig2&6u_sq#9luI}4F0r_iYEB%-9Itmo;lP_KrCSOmcX zKF%O9o?@s19h0yjJ+@qZi$^qK;KY{6J#Fyk z;6fRw|30${`^@O`lFv%*9h@dA>%J*P^i#9NbgcnjeiGBEcEFI3-y$m$e>&~McLk4+Z zLA5UaP{z;JN+Q`Taqc6t;h+Z1E;Jo0G6RI@ZNuIuJQ)rTxu|_86)%zT$TmXbqs;s} zf3p_J@dc36o6s-o7UePt+Y%=MRE&(avszIy;;WkC7p-EZ8y_CDw`=?Rlzc@HjVT)o zoAxE}kS^T%6tk`Fvod}Wr~?g8N_Rdcde(uCnC70KOG296f2wx;jWAym<&v-S6jJ2+ z(gX<>KX#?N8t@t73SgMk_}Z9L+xz?we(ncUOE%ciCZ6mQ_RF11j^o3g(F~&drKK8! zOM+(gFlN6Vv7)~@yXSHOq7=7da?gU-oY^z6ErS+lnw9M*Hx{9|IpHrd?p33~H}NMs zvPL>kirKchMj?*%d|>5mBfw`Z*K=2G>`pys)1O3}minoOIqi>-}* zf!}vKc)?F0MBF8=pZ;;J2#2;-Ulrz>14e&pdPa_@_L!v;eZR}@)!)E|>Vab5BLwHv zadQwv2kTod1=mT%um>DEEcB#~MyaS?O}O2YDKoG_v`qD0_tin3jGxd0KRHsp2NABW zL3ua=LEuXQrp0phjtJEf?w1Y|%E^Hd_tIDg07+Y;HLUJ|+aJ?5aK65jbhsQ~Q1%Sn z1e6Yi^h-zB*>9=MId<$65d8~PSvhf$|I+tQUNymUhQL?~}PrL#y_5t!+lN_*ZOLgJH!?^?6R1}^fhMJe~4&5N2pw2Gm} zEDX-(w_gl4RjZn0bYF9+@%4E1`?a7{gj4gRIM}Pvy&IVqs#Q{q?i25>uyC8GGLWQh zVCy|80IyViY5yW?OQp&NYtZO^Xc|1NYQW*b4Y(mY(S=B}V7zH1lWmP$&3ES+Fac+t z+vxIIvh;}I`KYc;?&KlxI5Pe7A2|Y4(KiRKp`_W|jg0TVQr^jvB_5&_DZBZl?J-Ho zUAK}oysz#vQJHilIH$}`W5Zg=$3sKXG9~cND=9v-Ii)PRoYsap> zWx+;-35zr<`dySj_JTF40Iml(H1z@9#tP7~u|)yZF`jnzb_~p`5qz}~_|(Z3;slrd z_p{cYtZM^LJ`h8cc)c94F!kmen{3!A->5EVz1i*FFI@wuIrH90LNdtkN05hpNN7Mko0*D;p4@?Jt&>Fjc@Z5WU}VRqGOaK zS~}%YgPrbHWA)1SXdZIjjxm;de`CghYeoX-upwR7_kH%*lgB)ox+b0x*K3-y1M_v0 zb(-zZJnPFa?F$zb2@t!zn@pJ1VRdavNdiW)p@E?v+FnQN0a_(ODIne5&mW^Kr1ed0 z(2i@`{s7-8c%C!y@EXhtoKr*N+!^!S8kcIZEui2K*uXL+sDl)abGHeFTVTK2uHWGp zhd6F0v`J5El6fBN*VKoi-+pXwqXu=M5K_^}nq9TPfig@w>Isc|#XYF^$4qKdE3NQu zxo38#5fL6w>XkU`Gl#?!%iCJZm}fhxB0Z@Xt{NU^+(L`~3vl`S{qbs41Daz$xAIjHPyNQCj)qRqc254FtGVS6=jPpGu^%jrxHuD%{gj>NcqAoLisnxeNO~ z%uw&&Kshiq)ACjCHoB@qiH}n205JnmhZLh}p6c%^uW&yI%2u62)I#7S<2dDtxG=+% zgEFPIb?bt_gMHO0FXDu=V{T!?{6{|A`uECsQj;Z+q3Y=+j)gOh}fLtrFknh@G@ zg049HeXDbOc-*&FvN7aK%!7GxFy?bc;SHy$$^1&Y;Kg*6DtBO9O>J{o4+-JC1?raz z+E80(ae(WLfx0%Jv3Bi=C~Q-qUby;r>%;nt^7>=3n}qSLEn4vQao*@b&nyGRS%`sc zM`B^*%krBuyid;q>LH+oS8o;LA+3Sou%HqD%bc_4;{(=?7x+tyH*8*ADkBIPDqJ#+ z+yPI#2!TAx9E)nCfp`*8TA%&(p$ANkYDMo#-p~U%O@FRL({X&P7~=qqM9WC`vQN{o z;*H4IOa6J;GFa6TFL>(o!Pfy74EoZ@{&pga)aWO+wF&aGJEaMd2(hy|8b+LEEC)4| zAguhW5Kl4qI`?Q}<*`q5%}*vCeENtCAQJCM5r$HJGC)ANrXUFLKq5{_u3iSnFzk7{ zmv@5%ht*eGet_l4ARR4NrGkq`j`H`QtF>~wqsxIt%N-^eo2-eVXAI5@TTKv6a^y`D zlOlRZ@0xA`9F^j*rODhJ#o?!()V%^7v8$_>{3>8N24aIhdRa|Ok_Zu#dPr&bAn5|C z>YxI4w`!B3xVKA=F90GevicZCpjirzLBrob1!`%PA%)oJGSFP=lk(ypA`3q&>jczC zSPFq(b!}*#3Sj{{+Mto>dT!NP&Q!+-dZu5cO#W8o;HiR9LizMNlOa)Sn>1$5jbWA6CZb~Az8|QOsk5lM6eHPzF2lRcD>ju-k;gpTsxmlOXRvux48bn7dGTkJPSzyrOUrR zfG~I2HQtYtq&#HZLi9_Bh)+JhIIAY+2(mt&%@*uIKO=y8w@A2}*B|jBX)`8nz#!UTx^=a))Prx^eo zqV!=uoO00P1ExCJSw4lREsZxpZVk=QC5LeCNCqk82Hx4EsVD$V%Oi!|;y2s$49%*X zHpfdZFQF0SD;0mPw8mxW zZg0LtBbbtXP!gOxCEn%g{3VCo<;#Q?+J3SOzEn)~jR2M&m z9#D;p%}JfIo41I~Om1_au6f|0BK1!OyD05Hvhq8ey_K+w;AauA41xN#hW^O7`h-{WuyH< z{w9~u_Fv@K>$m<@{?AK&jdJ~m#ryzAP5mhLUem>%;hm=q9l?)gv<$(Yb>2Dge0xRz$vajxTEl_Df`3hg0+l2q{J{BY$=}F$1H)YXKKil3%byZ zNfTPdQILeV^+4+_bcbs#^RY5rBY{dbbx681dx)luu#ylwLMH%ye`M6lZu8}SCI@svd-ZbxewJDq2y z?ftS?GgBGDCO0Cdk(-v-Jfna~j)HE)XA_ZMEF(7y8I+mByqB4Sxy$dwNmKhBVks## z;^8+7sIBLPE$b7_G*)?WU7i>wSg3R{+(MA@i8>QUEYN~DwP6ATr@!{PE;`hO1f6vk zbkmR)DBTD*8rO^;C&6LfW(HxyOHA%(tf8&Q{-^W7{uIadnNCUo5W%a@Smp^PcETt)>~`$la;?3m)>;-W&@Q*@Khq(d_<8I(7Kf@+ z5Gl{RW0t>w9(88#K`v)0UuD7ah*0aJ-$N9y0PEqb<`9uXUz=rX+^;66-?vvV-P1bZAB& z;8{_}4i%pAv48FI+|>(HAY2!JOh|U{vXv;PYN(biytB6`nzRu@@lsP=Q5YBG>*_zy zgtmT=iC~+zXyxkdo96ax^Q$f#Rf++;4`b*nl9yjm&5L~gk@4i~Y&`y+lJVK}tu2O!z%2k)9zV;GY^FI%7PE*$m=@uV@Z68|`zaCO=l`hgqTAKUz zI6>Ni&Y#${sbC#Kqfnk#=t-8UocIQ$^jH94F z`n$D|xPz(5(^>{yrHI?TvtWG2tAJ67C@Q9&^BJtcMqAR{{UJz@J^PB6&_jJxkUA9j zm`b6@^lKcgcYrW6lpXeRgL6^!pnz)YYNBtRK7le!u2+kqaM9&<8A=bU?4FAG=2pDw zdfRc<)y|W)~$+?oISKexmE)a ze?H;;onkq2e_H^$f7(y+MJNeZV_fP+~PG0+1AU`GNFs5c;e%!?E-PY(B>_?DxUhx=5m7E zYkB)apsv}aWiuhM+8Uxqm?4SksAzIt^4i6 zyR7A~F!Yc0X8VNtn5#tsBLSq)ztP>b%a*oELJyM=W4W-r??;VotlnZ*rL-3B7_!PJ?|Xc-vrb~nvSx`7Dz4*Mf zdRXvbx`ot=h5SgK4IBw)Ej)}3C_b|9!IwNG7%rsE*U-xabOA`0e=Jt zOC&s=K^uh0FzQGcdC+_e3V0RYNR9ZeYHNcOxuO<7h}CDYbR$#c(&^|(j#7Lu7DGUy zhEH>$`>3z`T>m>~DW`o=l9*zO%oB|nf@dbBaEg2;6us7iDM?pEwjoNe9Q^j>_ZM!O zd+jbwF0us2YNU6b?r5U}h|`r2(>IS72eT+j#XGH^vDD9c&#An2oDj}Kl-<$<>N`Mt9UOrz1xr`~MWtyAg>Ju9O@vV>1(V@eh8xSsrn zI4H#qfnPPVEs7&!Qm^&zxLz+x92JKKzKqt#tlZWU?q6gM)b{!NNvV!O>r4x`S?b*0;7S3-n{dj^X>HWt)H_9z?0#)~ zeU9DRV^jY1>SX%M3+va;o!H{l?`JNVD;6=t0z?_BfyqWG&;)FC;Qc3QaUYAke&9|& z{YT3HLbc$sr)TD+C1W0MO(zpxiya>!N$M;D? z#uB(t87Na)i$%S2{F{>iyUFYzkUHR3E%u7{K1{u|a~VAP4iH1U`4^Cu-L|}eXJ3|Y z4SP-aR?8MX>mAp=gG^$%>E6kU?`C^2(a*5`{UKB?LRcnNAWhUsW_?@qeHiS53>84I zEOEWI)9ZX(6Hn*FKNEk3kqy{W=~8S}`hO#S zj^N)!(rab7#9RNl}NVlWa9J;KIU@lbl07B?AARL=tBD;Ocsie`2v zl1T-}9)7(^T~t;E3rW#o*jy`63ol;(S!Gc8DsQ~M>;G2$lBL@f&(RB)15?1C;1=H> z(!4_95vQcf@*dUlS)F(l8(jlDdOF1U-HO77L^Mg&O0c$<{;%rR(SsMFzF|t`d)psm zn^P@ci108xd%;!*FB+=nCu)dDc1cOL-qXq#5~@Zj;zyDz#m~}BUQ<*=A&ch;Cb+}U zI@N#zEZ+Q7#}eTFf%Se^G1Jsng?(MBk zlHx)YpBQKt_wQHk3H{Qa6H5Kp&tiRH z$Y+YoqlL*yUgrSsVp3;{1#R>@_bf1`-R5#>AoEl9m#y&Tl82Fd(vmx2Y9Gx{y3Ok%<)%I5Fb*X>DXGxZvn<&AU|ppTN3c2##~ zzIg*x`e%$5!fdN)O1E7R*#0Oe4*H}QT6S|35?n1$=+m+~tJj80CH^&YfD*sC1O%U0 z5@hKu6$9!Rfa=I$uRHOhNph&A{t@}tljZe!%P&II@5U}6J6!wyVE{0n( z%y(Y&E|mlQuKg#(hYj$|Q$>n)i4|v{4e#Ms;4Mvz+|sk@yKTTNT9^y(N-< z7sJa^G5s(Imj*ecf$GnLi5EFzR6wqeT3J0hNu{|7f({B)JjLrxP{LhreduIpn>gHO z>`1Q)k|1{b<5%4SP+1b+Aog|xTjq#vP04ykQ+nDeyV>{d?cT%G4UdV%vO`|L~B5Vn=6|*J+VKuUOdl+bPvqQc7Jfi zB8`_*e2f0!7ku7qNm&d&k)nb&XyEEKI3=0%sM1%%166~>-^Ux=lJFoD2a93;SWhaN zpt2X$gZ~>@fy_~`waCfLLw@FlPjj0u*r)4rIC2BYm#_yx+TZa=zUJ*igi&8g>8mO4 z^DKtHYE?D@*ryD%Ua8!^y>xv@UFy1jD_2K0d4qj$V{_NS@j&CfXkdp53{N*Vi%GNZ z>Pzn8D}U2oCN;JCM^mr<&WzE-W`l+$H6veKX!57Ix_(TQRg@q`4*hzooVXNQ*r*%c zjmyO@(#`nv1YDN5sTTTw60XWRFtv-_I(+Hk>~AkIK1b|2HmS!Zh_}rBoFLrmmrru$ z9ODDl*` z_~SH7dueaV8*$#xvK}$hvE$IOx-Ll`c0+H?T7@;)pW(2zT*!p_HD5u{HXIg(H$g^{B6lgW+6z!ZlupKA9}l*~cmJ{OzYK5sEuF!2|9-ITb!(p7D9bCzh2)J#7gIqvKB;IX|1a3@^^0Z(L<%n*WB>O@(nw> zM-H6S8hpYb>cE+HzT2+O+cYfA?~vvn3JQH%T3Oh+jFP_}|D=5)Hc}9B{z7)I31U2D zI(z~MFS)%-QE+%Mw<$>rafdX=j{qsGJcrh;=eS%TDg{mFX8qjmqZE1~tz&&p$$ zm%vlFv5@z|!zBX^JhW*rNmlY8_34WM(jV;%7*B;jA9fHe>3fcx9ir9DZ}CqO|MM1> z3{sEqQS@~(r~z~V@nemh`6=I`iTzoixkTesnsS74xj@niCHAj1WH#h#M?!;yY8tnv zh8}~!1tBMkEkBoai8+c@y1_^@$~wsp80Ka0(d);`_K+%44sdDaOX5x=Hs6CZSQlJ_ z2AQK`RR_M}@m3q2`bWBKagU*kX!c;SPdWHcbX+`l_*NC|9Xx`A(a1~7~+fU{B7kbez2-20GSG$H}UO8l;hCoy2Ka@jy^z{8i@iFO>UTgx%dQpTC z8gY+5GgYY95*yY*o1OqUv`@0ajWSjBxc*lOJj=1p5W56>OMqaZ#*y5&HhRJ&vKkOSHz`mZFm3<`gcrPXO1T{IrX{%MW+HLM?s?5^TA z9nQTNk!Qw`Gn^mE2|p;rxDDi?EYDtBsN)EtG-UVDPutCJVqLNio*w4;)X5&6bsWL~$v^(bgKyT!OI&l6{)bSBe8t04Lus6w z_;;#2FbSb2v@;7VrKE8^sa6`i~3ho5u*;Wm9+^~S?_zb z=`nUTVvFiPeJN{-Xyt^+j4y-nK5c+1W#}s~oEvT}iBa)_n*y|4;MRmwAS;>gvmRD` zUxi-~TH;PbG5Hn~@VaNOFM0;TKj#1mpM&tad`UT;FZ%tsBYH}ywc9D)xBQO3Z~WKAdGGnlbMnz-K_T%a zWV&>WG6&N-=UA;2-}w{dyh&8n=Ct_TkA5_}R+#;(gW( z`TwYp;Le*e5pJ4G?XWXw5h=3><`KKmV*!EM?q}xYJL~X?U1|Z~``+_P9|vDtr($ zhS&Fv7p-_{EzU96X4@T#nBhz_qu5phL(2gMy9NjkzwW6vwS*Hq;z1h1Hac`rL{=w= z?5Gb-BR81j5Cg}Bl)7in;Y}93(e1r|Z`r0hIw$m%&586bPJSBQ!{YquNm#Zp9ibG4 zesa^Xw$PQ?6H+H**8gJ9ih;49TG%t_ZB`A2W#z9pr=*7010bIAK{JvK!khbm>y*l_ zJ7s~EC0}?>0aBgDAb1e82M8muG#$Z%sGHmMr2UxyuN7Jq6dr;}_IVxI028v-kGbCC zWM?08J%@GLcx`qF9gEdjR2KOokShlUSd+GD-;ic2^@gzi{JZwTHIy=VDt-|5L}7Lp zZ$x14JcDM(-kWug*Xm6!`W4S_$0#J{Z*?&AboLCWsw+*Q72`a{37?xyh=15Ck}q>2 zl#cQ$AKjZcccQFb8b^$6k>U4>6|-{5Ri=cFl`PPf>Y#YIf+5C++CH)0zV-;<-V(be znoVeZq^v(VszuZpKlzD%%DX5pXQm{Fs&m*+f4+`TTrOph{uIIR-kcx#tuj*A%S8N zKe{qM&RC5@KeVSBttObF`6;NW5g0C;hufOJy(OR=c#gBb?1?LR@LKs0c8wFGlnXt< z6nC1xZ)At}Z4H01Tt=f@Fd)Q>ge3_*F=dPRF%x5|2kFjx zOVQc>BMm3_9YynKf837^Y<}^=3->!P>V|k82jxo`w-(*!J)M(BCyWVI1}?u_0JafF z(UQj}Hqc`;1*}Nv(mdmM?XISG{YzM^9VQL9Dg9bM!yo+uj4AMYzxLHp-&1uilhx%I zq)Oe(C-h^F*8f_)O4g={U65p0FpDi@h4>W)sV(4{rPP>?W}je5?!b2vx6lfuVsW998RVS%^M ztPaCqH`03l)5h_;n|uhu{H7Q{I1e%C1XI8E$C(~_GlDJnl6vroeiq<>HJooqm(uc& z1gz12-)gSjMVp8e34OsPAN@t}yge1K54Iy05D;AYQX!$|O%xba@QT+R@s%GJF`^a% zq;w0fBRwt#)+m2f$|6X`vDzg>C*jy0Qf3ccH0>eHSKdEEB+RI95dTPcPXKe+)t|Lt z1nR-?h7@I9;f(gfIyKH+(NBdeG~N&x6Fm;5 z8#PTGGt3K&`po1g)Pqg`yQn)fZxcVyBD)7oP<&KrDtxT?-s|5D z;fpG$F5!Bm-->~`!OVZXMgJ}U-+=OgRBy}o-@x}^A<9UF6uRRA2SdH0M zy~JZc6|maM!G9^xp9cl(V(vz#rC2l(kPCvpd#@fF11F#~RUybv_3eA!{4+cBs6zx4 zEhonJN&OQj%Z;G&bFHuTKF@X`_x#Z1aZY;oBw|j3)sy6kxpEHw)6=NeekfsVAydY4 z2#MIE`uw9aI8Gg-9Ig&XUr5`UA4|P@QsVtoGuXbgHhxJ9B*_%^3c0ZkHk|$aXF$!N zK>Mb>K$}AGhuZ-r-<+^umeSFCx?M2lL<3kqe5h=8k%h%DtA}P+97Fz6TMw%w!9L1Ahy&rhN&W!@>(1oaS?nv;gM-#amd<{{pJK>Pr^X?oL za2&BIJB*9@EI#WYwn$cQ`|C@Ql|lYh;$^suX&mCgswe4cQniYp395C$20@Pee@UA>Cpk|J1jS11;pR+#)Mqm zi`(cWZO?nZf-VVgZA5cUV9E=`WVwA6woPfylsdRB13bJqI`3!Pha8uU*Pvy-tj7b1WiDO z_>W1A0|NK#E6BJmp)r-ni>K#gUY_e+wH~9U8DU2=S?+tKwXUQc zm<|$)6g#D)CbqMTN+XMPs9=B2qL1Yq21o4eVifF`OjF-t`IRV}ERi81`_G>BpI1M- z1L3|b4i1O2!PqX9;)Ag zywY;2NE*lN7Sh}N?37FWdDtxtKnCI*DZa44$E1LoIQj36f5!gf@(Rt4hF=4jt|wrw zgiq_VmB~D0N&^X_2wH9zV@1Pyat+4~f+xTX?#VP6p1;~80$d>lUyIG(qYKYL78`K+ zhd5Pl#k(rCZQ2G>7W0c~iEcE!*5(JDnk28Nu{E+6AI zZ|#-SsKT=7Hw)bS{ZP|Jo3s!lwAO9gy>zPe+(^p$ZNN_264Hv3J^TIFw*!TmFIfh_ zyX-jUkfn1IEcRq2!75bTdhc(=XEEsqnu8Df$3Beh2M->dr_{>HGXWb-F)04(K**hK z;?bFH)*WaviZCCrZ?I{`pZR5|s@C%D&H{g3SOhaY?R7b4_elCUodA2SOfj|;EPt7drnO7&K|x-xBlAZZ#>>l{tcRfus0B_b|7~mnkD7<> z6ulqUe)+OHG)qdm$`*YEL)L-uCTWIV)x7qUOY_r-| zP7-|rmGXGywQsb9?d$G`;D@EcZ&&a(=l83UU^lyI@6(2jn~#=!Hjg0Z#HYa08GQ4~ zAG|6g7qfrvw?T4Ke$@`ut2E?--z>milK@sL45soc>fU=z z9G_a>3)^Jrq7Gat;^)ks0ZeV;ol^<}&N+TP?Nz*hX-bW4DA_)*Egqja{(5TujX9~X zd@1H4-7!PN+$vT1;aq17V`H%hVI+yKHRnzqMUt*1@79eMtEkaNF)yp-tL<|}`tEz4 zbf0q4x35{EB*l80&cdTtv~qOLcX|HvIWc50JO~~HMs5~U5Ibx34HEn1AoJh^Y71a$ zoiTgc>>ohX!YKs5?N;<>0<0*fT>$zEomQzzE<1Kokj?UNZgOj~0WLsR^E^PExghLCmC2^-Z9Lw@t!URX}u|4CkLEU(r#aVk!1gc7sx_Vy<=S616K{y^2T z)RqiU>h8K6vY+-m_LZ3k^(qt{?K<4iKM~;u9;b!H5#ID`Hev6Nn5`w>u)PXNNPUnX zE36DXvyNqhx?PLIJ{p4&RzxqKBS!ZKq#EipinC z$LLc;9<|{H_h|LN%AS2H9&gUA9PX%V3G_ zqEyD*u})mC?~E5wi-!x8^dj_paF6U{pHe24#?c#7x9_andk63>s*v1$XF*cMS6$-i zYJo+*%fUW4`0a7s_`4h~)|bFlj)bd_JN*3Ws@M0qnIQRcTr=|2+I*=-1;b%JlkL$j z?VHx)Dc^4;3s*bK;>cmFvl@{Rtx|-MXgr9x;W-07f^nbg6slVG@Nw`x0wu39w+AYP zt3LcLQuw&K711j+_#4wjJXP-aFiMb_JgV)wnus8p+Yv8qHp>l294oT zZ`O`ox!tzdyWi0|zP!wWcX>pRd|e_79m_ansr5LL^g8~D=YpIUDLX69@u!>`T!*!M zo2@hcRAaj?|8pQ_&G}ZykI&Wyg~wM$tF5Eg!@IZWm^}^XSxoHU5j9Y1nM5}tHEUgJ z!H98C%ibWQIE zSwVeK_P9&Jq$v%;!vxRA2N?anQdT;DwXrnZ;ZPq|(nz&B=`SW0Q8Wy3?2MSYEBRns zA=CF$+uYs&*VEzR$)65Eu3Gn(`XqQ%))~@u-uAm?mK_?{LQJ1w;6dV9CHJe|{0(Mm}-)vGYh?JaUx z?oc~(|GS1g^o|;^Qpl29q;CurFcN|oeKAA_y{C$myZg<2?%o393kyI;`vlK5o(CC(kCoMhXP+1Ga zGR$$wp@~eu_zSD&G~r3&CoQ!n5&;G`=c40`qh_Jl3E>LsrJVWhAE|y%GBU~3fGM;%b?oU1tFr6muA#&tBF zU(voQQC0A}MibKeU@uZg@E@BWwH)S1V@Q+LLr1Ft)c$EPxDWLAv%r`}{V(e*cPA_- z78W?-Bri*lhj?f`6&BAVDJ8~lQOn9<+@s>_51TOzEg!#yE(Yq+OR=3rZVuwaG7T!8 zI~8ip*-$0vfI$;sdTcfuLuy4Bh+r?35-3*fergoEc!r=%M(Yg1=3uUe4BrzVX<;?L zmC)*YkTh5?t(Jf4*)Zj~97!BoxMAYoWNM8&8fJ#y9^2iYML)tXd?NnsA#ZDZyrONk zmt3gDr<7d2CmpZNPP9I+NVP9zFR~hoy3>Bl8&| z(Lt3@Z_Ufu|M8MuhpquCpfFhdmXHB^(AI( z`n9^mp-x8J(ZV0ZRP{R#jmAH|XA71WcFVbpv!C2_JWf1C{K_Ov(z5uoqiCd53Sv)Z zFtCtx>@JKYP90Ph%)>&FNpezt#r6rBg70z7>LUZhowo&ge9$6OQ!A$mCy$;vAs#HR zoGUQF`Mw;yWkSq&+vbD08>44BY4W_xad;?_eh3*Nx1s}h8+5;+ufYA>MTe4SFmjJ5 ziuv^q&OI#_^i#n=`=J>NnTGv592R9+I$_gz?bYb6MMwRUFc z>Ee8ioAU^)bp-GBiml-fok^p1g0O;uS(V}UGro)3d(?KZo^MRk zrcQK%e|>e%r0qn|3ALxyCIU1{l(!Wd1?J)PK|y)bz4j;qrzw4!e7Zq?=*2z}|;pr4wKDZ^JhO z>sV4ZpXLhF1{EX`nm3ay5H>2o51*^Z>@KyT5^RlsT%#%s8r4T6_f^%zHj@cmM?|*! z$l>R5&8K_i@&2hrXSc6t5n(|5f+JiFL!Jlba{oD&;y2AwII-Uzp*am11%8q_)_y!A z&?64sT$@VKmsF6vDTVgWbhwurV>(x3Wjbz#7dFlsebr6TXAqt=Q`ZL*m5-l@`ar*7 z3mQ=p@V{NjeC_s?Yp0d)RowC0i|Tt1jR!s30yUoWD$^=rn=vOXDu{uLogaRw>EWfo zl;8Qg({lM8-99CClHFN;`}oJsPSBCf#|Qdih@5F96f_hmJGbn7euG=2{~f(1<}5yV zD%aUbIHhuLRZHc^v_wqigy&VLQhXovu#7$PtExAeBrlZ1l*3cr+0^N7-dDxNNYy=z z_b?6haos&b%K5UWVzfcH$9gZRj3dhXG<&iGXVoZrxhUWD@!!ors_MTL$59V?`6D$; z#;n1jC3mY$o-=Dv*QE)QWm8t#b5(es!KGKUH)T|ANp>65`O$gB;gwB6*~VAvEz;Za zvYw%`YxtP-7uS-frrlsU<)r+OhM|BqGR`n!SN@YO5^5(@6km|~KZ~*4ru%Evl>*dd zu~Ahj1a&2n(d7Tm3E}5l>(!Cgtn1K{^>i;#*F&QDEDjw>R*Bu4cJrs`;(1e;<7>ck zQ50PhD7(xLF5u73?DTd%hy@?auoY)B2rYT$BiA8lGq2twu*2B*qjz+2)35ld9)=?3 zN%J{s)?YfyfyetCwchMYd z1))Cv7{Jh0*e{>Nz(rid(+CmJn;PiI7|Sd{lS^JQ0d=N-YE$MoKjGm!g-LbL@wXv4 zotm=vyVLWXa-E*K-BDR>cSGFK3nVS0$a{Jo&%;e&`G>-W?fGt)jPA{Yp{RQ&~-JNt~ zAn_C&4Anx=)`yM(CCh!j3R6MB9n)D+hQt@eyoF%y7fcEFE>J0F;h=cfS&{z_JyfS^ z^w55wvqWn4&{`sOdtjDGgP!GiuK6}OLHCKb&&0YtV%WUE`^ZgV9m7pAp`DR6B+IHH znS-yjl*}rMR;ueZDKfPm_SQ?s*rdtcYKqwVY|fb16P8#KM-^M&>J z--5{f>NM0XaUa}omEd%f2cWp#9(*-p%tCJbvE#$?cbZmLve(nz2_8KZ*8K-_!lT^A zgZi9l%PlunH)(Nxs()LrByaw%9w|dTh~1ZsSs+(u)$u7D`q-|lH#A8Q6YQR0_VmXN zoea7td;gYAM0G42Tb?Ch7e0l4EV$m0;{SHoAbO=I#~YEph4sQd>8~Dl{t<5#M^v0K zS`mJDO=Uqymk(oQu~VWNYG9bVh19yyuskFZn?;(7A#@FOZ`_9HsjuS>s|!7oAvzij z=!FYNr9e1+-+Tm$4fX4F!LlCsd0n)mDnurz^o;;Z8qDBL)64rN(kwES5{W-xXyT3J zH=RBA=pBu8Uf%DlNT}M7xlG7zB3n~QA;^V6Y1wePbLJlD4nHPB4fVi9tnS7^p_UO?Vn{l=jh`; zqTNL0w*kplai{16UyBT|A3=yaZkv2ly~6mFh{n7mfx3E~r+WDyLUfu<8!F>=Tx!C6 zPf4ON(KjX>)a3cRyC}s}kXC51OG}{{cOV zqYeyjrR3XVKkC{`Yv9tF&s;vP^UNJ{KK0)tH)gG~8Va`!HfnUQY&)D;X1>+%A6;6! z*7M{c^Yz9ucfGCSziEH?=8j`_74xfLQj@-_y=AsX@vFgIfn;%|h8fW!T3lrBNd_J# z%rAkxAF@ARXOz^&&7v#XEfRVjo?U8dm(S5x*HCi%Np!Si(8vQ=vuW!q zX{V8=btF9lRV)kMMCQ8_9$Bh2$w|Ln72azz%<_Dogde&1S6wmTu4gdU+=^Bi_MDhr zuG4@`b8A&3dU!%dLV$5TioN(>)^SV!yh_OF6`B*>JNe#Q+3=;cHWD~yDT*Cf#GC?7 zCvef!yiYY0DgVI4-v2TH6=qYdOKmg9))YXxp(<2~<2>J)F_*@m!rNmO<8NYEfZ(~W zFhBVhe7FlYK$z|Sd&bc#q{v5bUqT(HH{{~tV(xh9Nu6~!$Ta!6Z^!!hr&NMgDgBr4 z4AjofCssA(cu{PFsoYfQYOdc<{Ly|gCMLDKzQkc{{vxA2xqj85%M}sio_!wE8p+%% znK5u=Et;I|Gi*i-3TpW?!=Fs3>QB&};@zDFSw0-fkk+T%&+V08-Vv!jED6G{WxU&e zQpR+b0`J)BGeuZwIs;Z_I15v~m(G~pPMvdTJN8a^=rmlG@GAO)IulBwD{WN_HS`G^rNT2}68p%8h|srewnd=!Mq*f__$x`R5QF`CXv&F0x_QTp6VD9v5uM zJ^aOSO?qf8^Pbhd%~D{MZ}we>*cR$f|5no%PVpVJ3Sv*|6q7C@!esmAW=AFINH3{~>R%A|hrJ9lBuKV@nYlX9?a|FEkuyI*-S{8Ka;aSTPynUO7&qCDb-kJo z9Z1*&XI&rVLq~sK$*bttnh&&{5MyL!xlCx-cqS#;i&E%e&Us%(dv0ZTE8p2FNDGBpT-`Xa_P*tlYmr%yxLV{Ih+p zM-_6sdv0#2ZhXtghN{&WgS&oyZJ8T`KIG8(j9>9SifG#P4$ZnAu~oRDz-9}ji8)%} z4)@~|S86hInLavMFYY^xA66zYB&aXN@lk@2gmzOY{J|!}Rb6@DS1f(iZ}16pVz1`* zlLh4yhz)1I*ca14_hVLc;H<2XhD3dM5FK>#l?D=of!fK&tszityICx383Rb2OL0S`x`g9633Ylq*`+ zf@|7FJfF~K&$~fGAD7~Z#YHah997cad}xn!tkHKUs9judGMc{6#RN1Z>B4k09WM6= z>#b|**zJ_Cq<17`JVwM%@3Q=q?c)zk!MxK^u;Ki2a$g*~`%497vsEJuo#@NAom~rN z*YSjpWpW(jCV0)N4rqTiEA%|WFT`ovkA~hB=t{+U@_~0YU*G?tg6H^NkHD1wQ!6=Q z(tI59P-RNWVMG5LysaS_lZkhki1w&@MPx1t)^+MxO%0wQ^ zV1L7Z7M4r?arVQZ;%H#bqJjoPe}SNNVn++?Yv|h(kr(CtCB5^XFW0R;l#+~2^XBFH zFREKFkcbHaw+{$M!x@U6+GGRDBF~jCT*PBR)yVZGaM*O7Sqn5>pt+&N?t0f-l%e{1 zd_y7=&PUC&PCFy(D^K5x$*h}^Sd-Z}05rQW#Pb9+%RD;3%z>_=qXa9RbYp$_phO@< zk6?{~FvM}~O!(JY&-&<*!#77*K)7=<7q_5cnZDmr_Ihj!}%*mwgIlO(iFcOLbZE6=+K^x z5~~Vckg2K@mtbeBfBZ|q2$T||zc}Kwx}cpgvwH)K=l_W1s^5i2MHr5?5(Uj#&@Sx4N&{R z-SGHzBubNZER?;c;mL%K?xc>Lb|I=%D^XcTtV&2SsS4ZTpJ#tp8}lKJBEMrsgN3$I zRAtX*)D^YMbBhw8n0!G>qE6ntOZ!R2M^d^dkP9u8E^`83(yC9P(?as7;mm7vH@VAX z8WO%r@l`&7mn9cGo{HU%87(NkWAN|1|M@f$yhzQfyqmBF*i!y~uQF*@Qo5lX>jYB$ z8e%G&hT~H^Ds3f48t6mSBMib3Zg+sdtw-oyd>ldjc4lucNp0bYE2iO#PV>Se&%V!3 z(xnhzwWh#dW5ojQgxer>?C8iQv{1eZ?2m`cnep+b5FNP7FTeQU1ln@tnVSz;$aheCqMQZSR8< z^t(z)pW)*hsD+J6xcT7T^}?VojG`v38r$OA*oaJI8ubA9t8*$Z;)Wy|;J1Bxcn1;R zA;TO;cd*{ur+qJ~a7*rSRx#qYYiJ>H%^MkTW)!R7d6e&^_F`_4) zuVz$w5Kj5v|Axd$p;f=Ib_4D&5F&R^rMR_Tf7J!_=D*!FzO-o;BLnnQ58?5@ z;ezb99_ZeER4-XDD|}a~xx9=~QA>qDC|;AGrj$)KTu4Xtd0HrkIOls0^43rXNpFTP zEH;9yp-pS@0=fym03p(bvp4s@efKd+|uuZo`$W&BB93piSU4cA`W>8MX zH?1_eHvEP*RQr}dBqdC4ei?7f3Cli(DGci6#ZD5Ob$2ZAm7I}^cPtrAk?(-|8&0kb zraKDziwj>}@Qx8qK@6#C^`gbJ1YuI_2E#5b=!z{v&drAR4@4Z6Kv!{5^zf6~n)g4r z#%qSMv<6g4Q&U~}k{yCdE&7NaL}E4O@;2-Pgo7)ESxcVnpuz2iBh}j;z$om&xzYKN zk85BIn?PrBV)sEvG`0ZhTp*Mt&FXlIf%ky?_d^Xg7xT^U@MJj)dRn=M0~2;X^M7&4 z{xaMtr_?3%wlCH%%E%KSZ_ESTz4O>H^?+8+Vf}BK>LGi%*RZ#Qa}}>o;O7)STggBI zwe*-0t+g0ijC(GsBi59HZp_ZskSzpX4X>E~Lx69S?mJ-OycL$oSMUw7!D|(&@EC3k zdKpms{w{Mh+tw1fnfX<8;JWKE z1Ld!=<|2biV|_et8yRqEANAhozqfPyB(@U7r(@afRH~T^!c@>W}YH#S__s zPFZ$Je;(tiKt0lE*(m%%MoDS$b#_>o9ArW(+z_8%ldSXe@=^QUt9z`An?9`!r=eD9 zM)v8iK8k~O&5NQNHlOj5&+1fVQ#VpmC})+DVNK1Ls{Q|50P!-&AH^Snon_tzAN=(+ ze}|)@xy?@M;cGgq{3}K2`2QJ*r(o3IAGcA{l5#$&6JWYwqN_l1UfB!uAAaU$Nfpq( zg>5}IX3z#(jgNQS^Ojs0Ugn!Ww}LmvlHxrH*C`q5I1`gy~}(cK0^ z7>*6aFD$MGb-KLI_ZuE6(FN1v(8r%_bu2p(`W&4t9$B?1-I)pSxm>~|VW*e&D|W@i zwzIgJ(F-0ZlD+aDjmhxJ`H^!#ysbvw@|}Z3+%&v$+w8*W&n7hRdY$^`y<5&Kc;&>1 zaq>wc>X}r2P*8;=!&cOBtN^=UK#N`ZT}dTd6KJHAhRDM>>wRraN)4Al3mkT&!`%@* zB{V&!X&b|8GJHS=n#-yy%*>Kg$#X&M%9~q&3el5#9-}w`Hd&>2uY5>3hqL3Iy~sb8 z!=h&;{hIS|wC7Pg8jsH|n4G~u$`&XSIeCwx$U4a$oN@x!r7thX4*9C{*_*F@Z4NPk zrVHztl_{jum^Yh;%|{tL9MS8)rtL{YH-4hu1$KER14464aK@8vbTN-#C*Byl`-Qg@ zcVjUFOz-*c(Yc&re?Yz4j=eIczGBIn2Nb4_RoGt)8vvZkdEl#~28g3HXd3CL&J}D$BY=$D;6y0!Adwzf;AOFfCTemP7S>7kBL7$xr?3nMtsGudG1U+AMp%duN zOw0~*T!{vC*>M#?m4IZ%b?6&a-Q-8=7aY5QQFgAcsvT~nE55L$t)K8Z&@Cv1nHaNY z>3a#bkEL^2$4xHS4@YBIUMF1^C-Ro+NGO3%rjyY#A91Xa)mks5dSKCz?kFw(&i7?` zuRSg}D1bknG6LMMg7icRK|%*_&f8^I63tb@=^otoh)At!`?jUh*bgKerpx=)#)!Cs zc{5^$PeXG$=$}H$6P2EpQt$8xyFrOr&(83!hx3=89#ORzbuNF%f1{Y88Aj{*alW0< zNgsT2Uo(+&uaF`|60yyH|DnAjJ3wn3nTo$xXu$s5vd13vQ+P)~N%-F_lo!q1+cMTN zGHeEn@y+Qff1Z(7sL}<6L&NA(%cF{9GEr$*Qs=t;($jOU;Js>PMo~Jf`f=rSAFgjo zPvTe-EOUo(aSG}3tcH?TP234YlHqT*R&&f(m#=kPKjIT1cEVCDz7_l^%;Vrqem zP<(9JL;LD6xk5}c1yIhZBhy`Nh1Pr>pu9y}$->tEj4A1aJn<(;0nmpIK_+c2&?HL? z1C^r?T;_*QQS;pB;!j`ehEgQQ?qLexGW{l-$2sZxcA&Ckf99L61_fwbl{~oK1ExiV z6TUMZ91Gj3EkhG)nwR9c+}J)v2$MH3?6H384cAeWE`8M3qOFko_MR&zE9H;XY3E0e z6qC9X&aSW`*Hxo+Plf2qA8DgY0p5gqxHHKvFlj!aw5AAtIbm6^&XoD$Wr5CR7}wr1 z%K)s<*>H$A0B#;t?=dnqPr`C;ZutR#FJO#`0RXm-oc6Gjf1(06Q$MWqEt^4)m(AQW zF0}T4v$$UnJhiL&b_)w#peg?H*hGWAf1qrtd?OULM0fkQHICZzN5E+v3^aCxqlhwI z`n6Dd&*r*fs#d7{SDk+S%@l$zI*RM=~Eq_cB z-%K~RNHb^^2KwG_D&M@A766ufDJUru=kREwKhZGb-~`zvF#~_XaMQX~Qv1||7Q-7P zShb5)6S{~XI$I+@sZT~q3AZ87{`l-5uO3a(4&M)EpD}L| zQ|C1!eH30V3|y)rT<)ee7@-~F>h3df;53CG*RQOHf-MK(As%}#zpWf)V@)$7zW1Rc z|Lm)Zw#{kCzx|3FKlXYC2s(eL0zHtkfMy~-zxOn*3ExjzLB}_gD$`!GRleD{7qZrP zWi8$LI(MSqEjcYfY;53h4+@B^FW)uA9c>=9>#Z2~y#SLT4X-Xnqgf8CT}Vm%e}g(< z2I9qH<3)u17&CJ5K(^LhDqpt%Q)06Y#h4s;24I2yxkB+yc5n!CdPNKL%TOqHYOrSj zrL2@*bj<@ue!gL6rUaMTiW-K7AqYQM5T+UO**`eaCga5VwuiP+cfb_>bR=p`;pOa| zuLpScEeiVUYwmd5MwjtOlmgl`=hJ0fO=)eC@1Yqy^l1N~xtn>R>Y{B6vQZyyID$!c z&$iW^FgA&)XYl|hgQq+B92V?76+K&{$!yx27u7(!_`bnto;>L#hNZaoG$V>TRW9o9 zy^*H|byhK|IpPMUh>5fT71Ptl6x8)<2_&LUZPiM|I^>J38cSCJ!~=vV^HT#vn5DZ?K{P>+0Enq^8M#t)klb*!~hcv{flLz1CKV@ zR=aqoqYqQ)&89%}ss3N$??0KP(_{mvX6n@<0Q24Y4NHI_H&{gB7hU@nhbanX=HkzbQDt9f{P_^VwA9eL? znDu9(J#NCTDLKQR31`Q;N6+9q-Pgw+7SD&j5)Da-B^p%EUv-)#TpU6C6uw>!9glZ{f$lwKJMvq!(U|o$CP@iNxCt9z{1_z3cvc-7s__ol zhvYcp8RX^sZiTkgB)v?8gY?17RX@xv(3>)S$Rymn&OT&RZvD3;hg3j>*lotb?lPR< zD-{Jk{a6*jm%{1j2lXA6e}?6(ui<2I7Sq+VsZM_D3$DjmbEmz)d2j8g|SZW;N!_uNF6lti^GlrEeV($q7Wi zSuk$ePvQYB@u}14#&$Ir^4+N46<6Y@v2VgqmZU8DJR4xXJ!*wjcw)+nCyOC$;Kvi| z&GdX2r`y(uE&~A>XM7xbak+n`fZl7+Xo)jyD5D&TXM&hg*;Fw@*H)O+k#!2FnZ?~s z!jQj;H+muHgtk?}>NJeZw81oCbqYsylUBzu09GG#^!`2VB=1n%J$+CJ^*hzBJ21yj27dCnCF@oN^nfuk`-;GTkI-FN)lz(dz z{W~!Sp9llwD)>tyN!tm*Jb)08v+wDxS*q=#&9<4*Y~QaAa_IfB5CT-A^_4$aKr6dw zPaWoyzdiTs7dYcY?jw59sCP_*DR430dbce;x7lJ~;)z z4}O-}I0D1dGl0vDsSMz^S*QFTU9zJ&#$qH&`en?_Q5?gj7RApn*7H)5Wt|;V_H1wi zUlHY}d!OvRNm|jPB%WreRODUzGXqqnSGXVgW_x-uf+p3~Dy_$z1Q@xJ>SPvLw~7(_ zIFqY*kN3YVE)Rk*%_GN|FR5=2>Kfb5EqM~I+QA?`r=`GJ7q@$YlBrxK%ttrnjeQST za!Q(R|2D#q)!+?e^T-)`{Ws)_RW&U#}gOzU}zXDUI<2|GRLJ+81Ug zpTPx-Bfrb!_T%|FVgEBBf9<6c7N<0`MSq{Ure=hg{veL$#8&o^cX5_W4@GPX3@JH% zaoK2A0zEh`dKE|I)TZfw-9_71ZhFJ+g^_f6FO@Y40ezd#V#PMg%~1MYTl^!56#UkG zwJ(VKkvC^_apstY8g;fN%+3T@!JBe0QNr(c*~c0_EA;r=U1R4{6-=?^{5!y|Jm5h1 zUV~270Q1?l@yWL9`1pL)=gRfv_@m7yoYc?NzCdlq&nMA>_NZ?qg6RDv~ll^0$ z-`6@>Ii;6Y#k*qtr=-OD?8%C)&tOhQV-aJvbEmUG-u$7D7U?IFuI#1vz9*+bTI-A3 z--e1tR;@CFm}Q3X#k@H#*mi*(iv0vMc`oC6TrZS(Bvmb=^mXD6I|h8_4IsNtdG}s# znOTWRcvVI)pN;-ISBH@NXHXT|w*(UYd}q*brZeaafqv`|pAWpamK?;W{?XPtE{dwaNS+^aGk&Nz2-Z)^=6b?H)X(U7x{+yLm7t)h{-eB0 zIO}65vs&V|`0abIx8c?lwTRx;yn2(udOXWsv| zgf`>YZGKwe$dm`BYWYJhhND7hx_J*Ou4;G8|~M!(EzRZP6$5 zOm0J8V;M8P28bf^OUH^TpRktnLpEUu{X^EnQSm^r>>@=_mUbUIAbtY0LYDdmwU7)1 zct3F>ov+6P6WupDOI%gKFX+Y=gRAd`7D(FzW(-clymuNLP?1qyj=xceAXn>1xgjr@ z=wmz^WsbE%mv+vM-v}M13h9W%T}$43N6c-?nP%)7QSl3&4*PKxx%%w+^PVIwpZ)Tl zCYQSR-T2K1wS&jW{WyHWpO1RtaZLjRNrh~okVAomCff_M(q|A#Tr)g9;N=GWmXqPO zW1JywS)1T^O}w%o7~0SMfp^vR3kP>AHkAg)`GtAwVTVF??98>r*cEymvLU8#7Bf?{ z80NHJF|MCkY0^%1`bPgaqVXVi^SWwSz!%Rtv$G3)spDLkj!z`U6Y4utVZsRO-k-+x zL;Jc>HNy4Qj38oaFmB>irF+kj>Z4Rk*YcQt;FdS&3;VQwefZ_8Igca1&7J(XL~EGe zcj`d>zJ@TRM135EI)6)=?4{Xp#Fc$Fyj?MWV^l@Aa6E7CMbv)ieslK~+%PZyImp%T6%L^T)vvDMFsPEm$0AwB~m|LM8I`4ZmW!8)_p7BIgKa$@vdnC67%K*r> zDdb6Ba50^Ywt-1k@Mr3mb=M2)&>qx?&rqsrkktXmp7;FJZ(gQlt0WYe@Q4dvX= z5bqb1vl`BP;pBDpSWMKfx(00x3z6VR6Iz@;Ru%Ougg)Gq3C?$<7t9(`MMYP7$Au8xJ}vX%i)6{ z;>5adO0~Uzeehvlo5?XUjSIxUGl5~D)7@;_*&2iI7N!4(sIQKSs_~*#kq{&l5Rej( zF6j^$LO>d%bEKqGkPsL|0VSlnL0VEe90BPDX_4-324?Pkm+$x9dVjFiti=TuH_knK zpS|~SHTCOErTYnl(k~llZ91;q6Dwj>v{L<3Md88xmnlws&mkNO&6YY050Ml55e9S(!9Gg=Ud}1Sc8@PQ}0p~ z94{4Ykk~uK-(JV&Q2s-fm-KSZc_*z8_E~WY-CuL(t9$ohg}@9O_@KQtEFT{&7Y&&A9Au%a=Tc z+zDYj2K7_p!mnd<*k22+42j!vAIp)gdT*1A=2iZ3+QKbet>EV=Bq>Ooe2J3#@CwwC z9|JZ;UsEh;YYK6?X&EY12KJ0Ms-t)rC3P|}fNJR&`gtk(ypQaq26D+X&c(eDo$o-%-+ylX~ zf27{#&_yJEDBZZHkBpVSSg6pz#Xi1@Idktg6WP?3R;2U!_LupQn=_J#}6BNvQ?`+ $ahlZT*B8h|&UPCmE z=%l2TW&vbuAwj`^&{5F zCOTH@k0?7&n-$4M-5Xcqz{#=_YJKr<=|x3nn){U5m1E|AB2uQr?&><|8vOY#c*n@g zXdjnDPLs{?mKqR^bGLw>J;<%te(4NqVCZ$)YI3$;K!;(EHSIu3o)zDkRG_dSI$TC@O0(f7RncTLy0KkGmkB5-i; zr1ueBg?A_CD%G%e2)du*=M#N6#wqydcR)at4Ypa~qwd&z6~2T1vu2UO=BZUfn~eMg zpplYV8XYpI>=$msw+`)w^`}eI^6Gms8G+%D{0iImo^gnhgwWYlE?0Z~+hy;=wob@> z)B=Zqqn`nsT=6of`5@5??9A#%LVq#rJ6=|BVQL5q;S8zl-Ak?C5q0wzz0phd%G_PE zia-UbR;`EsCfQH+M_Ix9pUg~{|KvPM&ZqeyVkCscTmB@Rqlyv8DgJAae|IP595>|~$o@!f@FnP=7kgCL4gUrXUXEXe zZnGD$K6pFl+qEzN`)gP9@ANV*&>HRZz0e4fK!gEw6%0L9==RF5?OKi zdt7;+{MeQ#II<6BD<_E?~Z4x!&)-lEPoU{)*#W0GFaxyV9Jy z;&^cTAds$GJ=>9<(zr$)l8iE1xAtjxF-KaHBhvvOHYT-{fYs=w0lY}`PM^FER zDbjVe{N%)yb+$=A^2m^FHR8+j#h&|FWGtpknp#TdrEHWnH~BI4Xh)IvS?+g%j=#T} zE&^z;jsJ=_KZ2Gv2%m2|(TabBcJ97Uhuk2g}I8auzXsWxQ8e8^f0MygIRLcoX86ex2(O?gZXKSlxMNdHZR) z#y?6kX6es#+!JqR$>R(L|H$;OQ!9`6!`QCdd*L!)ZA^BURe;E%(rUq9H^52=s6n2> z4hua%T4YH;jc36YLgQYu z2TfpJ{o+fiiWM+1K|08ttaUjW#&yDbR?3pX$RH>Ha@fbBrW#h^<^gZM#Ft}?Q6-+W zlLn>pCKKhG^_-Sv?g{aJuU{xV5lUI`5TjYJ7TZYQ=&^xai#6`EPA&Duupd_^wd$Ci zE>rYFC}i|VBI7LL$LZvruD-uq0C1AkU+!%>D>f{txIUEevCx$+#`Il=b;D~(x8)Zo z%)+%~iok}_v78^c#ySNrTB#cs1kjfw?+&s zUaaMY^CmhV+{ z!qEzUnbu=FpSm;d75dXWn&E5uI(bVT*#*KLKRl3{w^_K2f?C9E;tuQiPS(`SH;v_P zcLP=i`rL1`R{ig+93>WY&pw6|o-Zl$`Z_*V3yk!MVFlW4Z_3r#uqx|bRNd=;GR(0+ z_ut~Mrx=&6tk0hTSalgrTsCC@pl5;ptUkmhDpjJf-U_d6iJO}aj;bG`1Aom=YG#>i*?_+z7vOqP zZ#g61Vg3=rADRb8KlmGwZ&uc^GYnbG!dcY;okSi}p78?pHd1b&HLVN0f1jx5M;69W zY-P))hsoQT3h5>AiSRKUc%E#j9!9W|~2BTReB+K=ytuqoUcw|e+9zhk8W z*p{S(PyK`tA!P4-^0ulV?~*oS-N1Etp5JF%XDLMMeY*Fu(lm{@Od_mC7MUVo*`-SL z+jp-Bu+f+BJefmcjC?v>fDnnW!4mdMoKf}hrkWsU)5u}MTXD!*MGRm!2`^Fpc1%25 z_MPKy-r`z2e6QZ=y*x!(C~H(^V{bmVrCu^QBlJPQf%yIxEqo$6TgsNL z$e*hfW9+f_VhYfvKV+X2BkT~m6h$;!h^FK0IPQSocUOhU4huvu6}>Dg#N5T(YDJLl zp+1A;26Vx0j--N)?71X$n>1DYZLl2{#1AxC*-GdQUY5>k2|`;0S1L-C@t)o^&Lspo zUn7vFK33>R(VcQ8iwKd>P{m5Es`B>~Z>hWJT|3qZ&G^=@UtnR$RYO=~QjJ>M!oGR~ zw`e(5y-UR9T}Ex1%j~oe-R}#RW%{K{_do}KIXSuNopMQ!4B>9q-9RE9Ed?q!Cfnr~ zQpB1|q%sbZ-wmzDLr9l#2)aYTlu-TF)-xxHo^GjgEklok)@du>7Y!+I=RK!->wlsM z#XR;+W~Q<(+22m|1rGf6VKKwhso0Dccwt^-h+CKJ)?M#ssHH8^3)a_Tb~^8^v(<}$ zw5`A@9J7aq#;HIWsZSI4*(;SiDdCnQSACExZ+T}O?;pJ9w$VnfqP`!kMiz;wo^~M9 zTZx?go;zBo%U{YB$K52C#II4S#&qOa2I>nXq90w33x9>bcm)kCAraP0k?A+^0|htZ zJ$MYDf5vE`egk!L2oep84tmf`=-_i9N_TA#&0vgHAvFD zntLCX*qP1$>=~PY%@COs)%eBq$l1khCm>%u?=U*1*Li0jIhi6hfiGRQMt|;UckijDv%xYAb7Tu)o?>!}~dzIkR+d1G=OO7zAV{n<y;!gwR}%27z{S$NK5^ z!)oi5qqH3IxE{9P;a&rZbIXUil}o6z<}tst3gPYb9Jvusd%dqOO(+RtY+ zm`y*34yWs|vb-&V03qnzMH2qhmxlq{Hx`xD%W^`TAlLBq20vB5ckeW8!0kmlte}!o z#-vX&9?6DL)Zxb_Y$G7`5nWR$rYcmLPD;~_W>oxC!fx!T*zRG+W4zK8a?o;&jliK_ zu!q^VUKi**ID)Rg(UoF=C9QEEa^$2I@^M*Pw?P3Lgk1trYH%dej&yn*KM-3#_(_OH z{6VO&8P_{IzpFhLj0OrQwb^zz0YIJhhTRY^2E}ZMDqMw8HW;{$B=2G%J9X+r#g?&6+ zy=uk9;gUNFmD^}_Qt^DQ1Kp_*k=_zQr>jO3#x$G^T~K=xCf*i#tU3us^G z#6yrD(1fb@gko~u;*5O(4SDKO(!*YKhoGz}``uVn#d9qonxx3>Fa2FIR0wvwINdJ# zo*1;@!0djrRJZ+kE0WUSCRC5{2; zwW7~3J^D4oJ?GP?!66LA-dqD(Y>23S$2Rw=)!XGPB0|i;+VIfpCDFT8vx2S8(PhgO z@ew(_$R&-gJfaSvp|s(wRdI+TaKY=+?bTOLFz(5f^<8th>&l}17Ne#oI;ZL3gKbMa z1{*8=JH4#M(2Dl5MRyF~BQoAJcSZIfBG6G*yS5dGUk2jDq^@fku8Lj8&<4|>#W$Lk zV(RF|i`<3spu3#frlxCe&{b}hPv)o0b-fzH?uL;l=-f(3b;3*O+l-FR$`z&SsiBCG zU^IyRSS9@TC;Cg?XRW7*uuqD8@ch@xd*T*^?b;w4_N@9WoDH{@5uoxX+)yga2?}es%7ZzFtpf7L5Ehtkc<*q+2~cK0&; zgQ)QFwIZKHAiI=PTo z+IW6M6DE;91LD(&88oT2WbVz>ULe1RzO< z%qFdI`{~wZPETc>I53yp=w&uw0JgqyKO0~*+4oa7J!9|sFSHE?HA zS|k>jnzva;q<}^y6F)K;?JH|wSkz{xO?Mz|=Z90}&Tph65fDQo05l1WL|UOeFH#`v zT+yj3xx=1|qjD`!xg=k~Ia1+|77{yEwic{eLCATxUeJ@#)!3&Thrae>;{5iIvE~{% zx}EspIS0sYJ2wepr)i-PgUiHgBcq_288Y&3G>{g7QSQbT$@b;dqt80-b{K28vy1$0 z<8&WGuPI7F#GVpf7kgl^vVf-t%Z)l{(77V#X`s{~n* z1h1wh4;ims-)U~z2F*w`8Vw&-|~(r3YW;bDT8^j*)_|qy=`uV zpnl^w@LtjmhlN5MK(U<7c6FJ2irkmK>R~}gByJ&e?{C|fJmYD+A*=YoLNzOhgxYay zH~A*S54z56l3EIYhitQo!Ub{xLuff{8N1G<*z4LMm=3fL=t28v^%2bRVzkNvk>Te5 zc;y?SHQwnh>F?`-vX9LVfG`!B?jKc?)8#<@@Hb;1!&#kTN}aVeVTUz=?<8t-rz7tW z_v_dbXQU<5@xl|tJ9l)*<;B*Hs^xtkYpOm}d48pB`ie@ED?0USG+b$#DW6yNqaS^4f9l7vJ`~9S?}wI_RGa}Z7b=hdS%8Fm(S3PeE=x{@&NodADG^~0rtMM zlkQ!FZph4W0g9PxOSN`Jp6SQD%#-WjQl~I0c+yLr5k)im`Pz>@?E;}#23!9rwzKdT z-MyykzN-hc(Tg%@Aph|7^+D40zC3!+sSz+RINa<;8t#2HLa3S>A8q7!c{z|U_Tby`=`l0I%@5=Yygy45j zX`j)1!u?jZSY&T$Pkcf=@(a@$?;h_>wYmspF8K6g;BqAZsxE`io;+kz9!(g4J&ER^ zjSE-7m0yP!@VsdpfFX^fyR{KR|4|;s%#d?-dN6^b`HhF!1@RM|j zhbj*bEm>48`t4bX?r{%ORD;>v-Hrjm>CAaP=fdl()s_H^ZzBlcS`DTO**YH>k?Z8xN=8b)$m5QPv6=Hv?*`^p3urIuAeYd0@N*LCvUFA?E1R?})c+ z6_>5oy!al~wJai{xR)OYC0;XD$vb9ADQE&$#4h%6j zJ9M7twLdQFx5geJ&mK`BwufExqnEAz$KICe#UK%zYyx0di$I@iicxBr6`*8p1;OCL z;t#0`Zy|BmiAKpsn@4Q#GwhtA^ntTl1V$g#qX?)^mYeE};v&v;BLnL8j+Pf<4<-=j z5VHom5o1NI@ellvtow|7NI3^qUt7{&C!+^LL4}Z`RMx(w^5*s4EMV*T>I!)2MnzW; zu{+HOa7gyTyVery^PUzLJ*1(l-# z^p9?NE5Po~%mDhN4VNw&bwaU7pL=mla+!Fw;Ci42gw9Y26&k*D=>g|RMLIfmtZ6e_ zio5Ho5MxM4h-nS9pj`QcdHbxrz3-w!&(zd~L!CO1pTBX{$T|w!I;vDGB z(R4OPFb`UX@HO+%y3~JY5gy@kI~^561_d0aGRL+v`Z$EDEBZ1ClXS1ru%2nC*%Z_? zv@{fM-XpYsvF0HvM3Iz>`}-S7`jUG9wDfXA9wg&1>USOl z#UXmQmBUn+zq_lT3LzjeN;d|MAhaKD(=PJdjJta;2^>a7W_SZi@@;AI3#@>ppLq{d z*5NrKTCYq?0{OukxWPLs_rGURNo8a+&@~1nVtw1rc5{~kru*uCk?74q<4%QI;oa&0 zJHMzX8-$wA=yT;99Doh`@>Es-{aVDw8L>x{%#eq)z9|3Sa6l7UL-gn_>RD!BO6^X$ zb-YTA-H*q9d4dKAOn6QnikOJ7MD>p4dE1XQC^s@nHA7qt2M33iMnWN~;^c|_4}daP zlhsoFH#K=qACeWkwSInxerkmiht4=htH z&aLV^t_UyC6P;k2G2D<`KSTUI+yKJW-aQ3^WlS^6Vef2J+r!k&4=cigEZGiy4L&OO zeoT|qiJ7LUrsv+R{5IIj-X@EaK(ECEN+Hr)-(CJ zi;D+&+pqsv`0;{4%`unoLj!h475V1tllmCTBi`c$Jdm>D5B}V%nOlgYX2l=>&M1KF z>|~jTk=1lMUEwg+CZ=83I@INfXajW&^5!YO#H&{r`}t)0NJSQJ=eTpcEBLg>9SnTV zps?oRP)^R5GAp{9>io!4b$ZuS45rKLbs-Pq}*~cWfq#fI3A&e z$AOyw6_uwl6M>>*z!>-qj4aYx3H2rL%vx8RPxHMTxXcreJF5Rp>RBQh%wi2JJtDnR zRiwR|fTDj91A)aTGzKfnFylqp+5r-c>Gw`W=_dpMLGn)rZ%VOu-vClY3T4oX^rU+{ zp7OWzd#)h7OK%WiH;;*$1aU)R?qB1QeN5sp=AcI};;s%9!c5=LdsLdBH7NR9n)hRS zr)k8ti}F^F2{!@w3Wcsrk&M(c;gFTkvIVE+;qg! zxV)p^BS*}gH2*Gx*(MWp-)D&c{&c)R%@d!oV<%*-c>(j)kuKzg+gz@c)kAm z6n>T19g$m`s0gT~fu_&1b>y!Hr>(B~^nWr=fv3JcwkSD%|H6#bhLx|lU{Y`9`+Y-{ z*QfB&ynWDfZ6P-e-7B1{X)+d#$S;i3RxNefIzVQ3RJQ_E&WY)ri743pGi*J~TO;Lq z4+n>|Locbc{)NzDVB!pG)~qtKps#2gUNNbnyO zLsc|@kQzjaAAyi2;`lTYAzVX}h@!|SRK_jbmN62m$~>B~!eX!nVo*tsRoAoZNmCGG zZc+u%d1w&gKQC%K-~FhQqBkzex4LDu zlXtYx|L1i^si)k!>49G%jsNLrurTJL$Jf3*k`@v$`5~C!@BVCFcGbP$YEj&8I^k)& z_!nG#@$Y@V5;Vv2;x%E@H}y>53OJPUfwTdf%>%RYNiD~tifb<5@Iv3P3%W7=Y~aW0 z;zyhQ79Rq#3m!j}jbY$a!>TKSDgjZfYv({%h|m5q|J9Z6N>r3R0{s1?-+7uNFR$M` zB&Su>Fv3AIwM5Hycz$Og3PJ0J)CS@1H`gB*U9?WQq_IL#ai>*-oAZXcjzBW!erhF? zCJlHkhf|(mRH`PY4r$IPe7}_opW0yo^=Dmwvku>XFI$c@JSatQ*Qo~uzOs9-o5iY5 z6PxDp(-1f$1~rEyFaD0fY=&r{hEIwS4qi>IK@yCNcAt)1!k`9B^waGZ2{FXam<>tmlvKJ~w&k4I3)bHc%}yU*NSzua$zB2&*C%(!{I0Rl&w zp>Z44slji?&Y1k0#C3ddA8E=oW$IOi9)?}Q-T$2oaW>#Cf60pSKh1L=M8cVdp^#^S zmU@c& zm#eb>2L9_9#A1X|6|e30+-lor!V{ni5$KeJ*ot+_X(Tg)(lN)(5GyX%e9}anMLYB{ zXUey6Ha`rqJtX~@(2!A6&T2X1A(k1*U?M+rfAWE?$diihj(5NCsz0Qo75i1NDT7M% zf35cYILk*fgeuJ3xc#=XN;GD(ZrpxHV~%$5KiQs;j03WFSXkqz%(oEPOp(V$UD@-2 zV_?zoH;~UI=!fnY_^HYY5SfJ+VcnCzcR(EwoH3aMP`KNsI~D0*LFpEN{$3{+j!h|~ zakf+f=bA`L3qfu^h568|fr?{Ch4>>}ciSMfWF0IhQ@`nCdI${vdg8vke8l2FQ>tIl z7SipPB7&gHB&s?t_wib~es=NezAKEpXlJr4?){-@O7s4mA-|3km`mmWyzxj`*JbwQCmyy(lm`#7Wm_{t*r|^{^w_FHcg8izY{*^FroOg8hM%&L8uN#XA=4K> zy&`v!;BEJ=6q_Qpp0tH#v7MCRXj89wwesfkCjOuLdb`i+B<8N@9RNkvsI5lt+~Sj3 zsyV~wsoQLR*n)WCPd4>-yJxRFyOPZ^%>PhdU)1VoQ?{xzJ$vlz;Zp}~v$#5=N17K1 z+bkd$o+akzmszt#TlDw;n^I63U2T-Xy5B(cqiLr|)HN#t zvX4D*drD*dJLNHieQ(J0SnFy!ve!#W*h%UTxL6UgjtUyc z{&%q&^825+|IB;vs+FI-g4wv*s;UJF_D||$!#zu|B0VHto9eI0DCh$N4z3~9px4RY z={PB*2h%U}ke0UO&P^y5sM2)wb<^Q4qqpmMURsXDE4h;h!*`2z z7T#w`T2Jyc_q4x%WIvTFf6?2tw+yOraXxRQsH8wt-_W5u+yN$%& zeZ$swgk}$LFqRa;oNosH8sdaH{;=4NxAUf*wmUuyTWi<<5d#H)x&!{J!}^O?DQ#n*ScC4m5hd$BTea2Bwg8Y&J-j(x+r#O1!TxPL2QjWR4U#dQFX1Q zMe^=0!mLt0a-Y)}MUQ%IdR9gplG^gSe3C?~T%HAYtId}1^`3MajeSbZ@f!Mc2YY3O zkKNx|^8aN4{M3Z#O)ai;M}>S|l(sKB_y>8TgW1PzA0A`dgaEd}LmRhZ$>z^Da+l!P z7l2$Dn^;IO-q2&KT}NFJLBSfrR`&)wN@|+K^Q3c|k`Z6JQfi44i2J%Rw`_BVokAPA z%Hn!1^X`n2?6^&?ehjH&;0jHfp8gecr0+7QNyd_NuFCe}u2%kkcZrS4a?}io|L|ui zYm0Mvn;OC9Cgy0Vwy+&Kje_;n}oc(=& zAPX4_QuzH-oeF+$o`0ckTOa7tjq1Z(z(@x0BOy@P+d&L_`hIEa2_4kzmEJdx+mz?^ zt)e+uWwjK}-h8o=Syo5D?7{z;6j$-(BV$DzHXBV2(U5#3h3H>57L8P{=Al_by^2hh zjV$o}v}h{6uS^vQhlisH$$ShF`HZx@gTg}oefe9PGShLEHJCWf{RSQWQU28~oUgQx zz<5-{NxjgLDqkvF8uFV<%C3=SmN^H>D0JeTrvqx&tqcWMaSK#jUrroMPhiw7h)dxu3`KO5jST$wG6F@jXjv$h)*=m7&5OdX-~;H?j!-oAfx(uW_)U zP4K*60ZP+L#vWUQOuXw*g*fR4^J{K*~+DjTO+A=2?T-stoh8oE${vP_fo zR@--a{_yfqQUH)G)2(FH?`w{Bz8t6L?chF^G6VtYZ8E1+Jq!D<+fo=DR5cw7 z2_<>`u>myvH2GaJ@)@m+(`JYIa3AX)-+|x? zwUvnF*ZzI0#qJBa^2aezelLdnx&*8r?qmMBVl>vqD*ScTCC_xk_Sw7HuSOMNhC_bq z0;?qz2-AXPa_7Qq7h1F1UYIkH9{r!k)@$J3w?l+u?Nez>ABBVIjaLs`#KuFPPWOv6 z3OyV@GT}v@j0f;;{@sw$FK=95ShJ+Z6mgkWzaUDNq+YXVTn?+~Cxl%Wn_SirWO%Kx zhM{*{e42r;O*y%ZUl~AgjSZPw6ndA@uRF5TBsmbqj`?Jid3{o7PIUn@)Kn%B$X^kH z%oSdl%W-P$pr`$x$q_51gRG?;If~fhqV#<20=XQ+9cNAQARX)J3VaGyhoSCeR6h)F z;?B#Vc6f@A=U2@XVF9a9^(bC8^B=L-yjYaa?mpj87+md*iqM> zBzD1+kWrD9%U^fgmLXoVMwPVhpnRB)#MWFf>a zLQ>tMmIGZM_`O&ZwGS2+BL2L0zyyqw~V?7sZ8FC<{@aL%>e`YLi1n0x@FKMcVVlP4`wP zbtZ^9aJiyQSrrLKc?=%3EJgBrj*+3d>VL8?K%~T)M%wcYD3#j-j5k zVmamZ8tmS}{!*J;TnNi;VI`4qGRpo=wVj*pl2jhQ+YX{I66?)eKloi~XC-R*9mh4b z)!0vPq(C9g>0t9l|M;-CZ?=(G2zn1l$`gn2D!@NObH0!S9+E=YZz|89b%4`n2mCy8 zD$KUGq-B;WJQBiI*bsl-FU@{cj~;pV#Ak;4YUEbXu}f3X3qykea^}LvuAQ7^khC$} zev1C|eg8k7$hL)YB$F3`>C+@?#a3|qJ4`%J$1h#Fl-5DJ;$$`_In)te;eDZ%5dszR_GDD( zj5@higWijb8}>Nc!U`}~xNUekt+Y;00)3TJltTh6s~c*mv2OsjL~TC;d9#-{-*z;G zZSut-wqM{xW0w+L*Z8i_M1mhIVH{+&SwIK>vW;Td?`l5$3^{Lsv778;v2*tBzIlTE z#1wC#*$=ohPn!>_-aoPT`6Ywfg9|%km~qHzB}lJOrlvFFy?&jy5meuTU18cRPiOYi zL?nPnV)F@@7!k~+t|6i{1kxY3P)NWZ@tAzZwO6pp^1o;s=fzzrzU7SPRwu#Ia{yV^ z%$e+3?=RZjrW?0WPl6$);63UByJ^oqL3iXoHis#qmEx>k%CM?(@Olrj&JKpcxZYo1 zcz*8RXF6)C^Fm&mRxj>DcsBFe`sy@e^%oZLAD4R%3fElJJF{o8+$PW+OHioD=kCJ; zkZ>FE)+xv9{92`=rrfS$Y9aEiN;$&X*nZ{edP?mj!383t_VUk1lqO~5of5*CWbgDr zKlun5rQ?=EnKCy)!bhcH4{RwPRhV~Z-U9BceHRSAYbx+Pte_rxnD zkU;BGs`N`LMD#A%2TfrHnm=jYr6UCyNA;sj6bcEJkhKgpF(|Fw2U$^b@hIYMBwqo7 z`bedDyfx|8FCzbwJI-CkL?AgL>=kb=t5yeBd>(XxrO6&xbcuo4(TbI~+gS}7+C~mG zd$KMsD`vTGr9B4IMGwSQf-SC;`GVGmQc4m3=Cva>Sq7FAFG)qspE6DB$oPAE8?daL z*>uw*{Dws-s9Z%QiB?zzi83XPK?Md&d6`sd*dE`5m32DtDe12szi#8!vE>gn()fJx zH&*=ci}+|DS&Wog6zy=;-_wT-Yzf-Bwzyv@gAyqcFJFQ`Dzb89I1_hfMBMMcCN?ev z-N=2kO3}r6PW_eM`zByn41)Q~tZ)O6&URt!(JtjOk8lgDIyGF>wKrM`GGHL$IG?6} zd@ei9v>7b z79}Lalg!uB-bfk?2ns07U*HqaLx?(}vkXVRCnWk5DbG_PvW0lQt(9JOFBD%}`UYW@ z7!@fPMCz6WM=6000P|{_o-qW^kJ}8-STHV%lB#U-qDF2iSY}uBaoEE= z%p#u8>Et+A2}IN97$_^6AADEl{w!~6aU zMUzK+Z_!1Z>u)ZR;^|Bo#P}6dGXYaDO1(Syqi$(^^gYz^h?}uJxoj6QI^MKiEdi$B zqzN#r1RV3yXw5u0UND1Bep3J*)2hrrC)%C*$TXbLkk|CHK~+0U^0uV?PU(V1jLN)q zUuu4A)vIG~4rALmTaA7u2rThRVH9n36?u~`(~?6!vATfA`spDv^UnIRtU5~DghXMR z9y=%Z<+XrTQH2ti*ZvYLon7qxvK5-yVK6dc-<72x$`H@So)ZB}0e>a_b%sh-qckNn z%p&2y*N+?kb?I0lZy;+i5eGIYc3NjtqWwBON1{8vO)j&>{|cGnI((g>O91ry=d;m^ z+Q^DxeYGuOB|D_&+zO5wHiKCqQ=e{}g-H+>Ufj@pJba2ZHU;L4FTKqYR5Zh+>aSe$ zT~Fivviw}le)KyTBAIpqrHNv(7kbDo!n#Q@E>H5TA?kkqHyWOQ<-i3V8N%*v`d%AM zA)&ArxwiDPu?rK(8K~8J_{ZNpba-@`sukY+*}U@&pylmjB;S1Z6XCr%sH4WI`XM>Bdo6W|a>x zK>xo>JypLX*6L^PTvWlq%J}H4D>!1$qirBrO3v&gb*jg%Fk{lSvgC-MycL~+9R@}2 znEX4u66yJQsjhahd92@$D`suV6EQxOdpxTN%&dJ#9KZ6c2czW@H1vTSa2CFLFrCH# zu5+ZQJ8PrrORJiWL<)=+R002~ieGQ6i;PO!bKk5bo=n9^Z7f<01YxoK-+#~fF*p=* zpYZO->my!onRMm{#ezCa^raTd>^l7sLo9h2Mb+dOCpEA(l<`5g=vG8-$;#)E5dunS zLZh54^!wEWXacL9c8|Iw(ZGpkucGgcS-u;W9^uSrUCVQf24}%3k}i)Q7?FMaUM8Vz z+ta>m*5oRSBm5LrcEhh)YS^p1u~19qIET)gqS;MHUo!YYweONNwup~)#U(-hhN6#P zcxMI3h<)m|wYmc>Ibk8rbkH#`<>aliN0jMijjte-+N0E_kd$rJOHtbehc1fsX94J1 z`WN-*SM`4Ov^v!7m`hGaD3+fcq#Z=!cgVMK8bk%`ME#500Ck_&ZCqIfa9Iki^dj@& zVw3{MrF!}fE4{EHXA|HPXIj!5@!C#OCQ^a!;}TC`{{H284JEpj{L^ zxZLgEXV@O+o>>^)a1T2AH=2MPMsJgeT00Yw*MO zg)O%+Q+$?(3lbQY#?T%p?M-Jl)x{p5j{Vz!#)`9U3pr$>m=!*DX`J*uylcgY(oev7`AXVQRWVf?w6#PhL^;nV3&n z{&3~$*juU)Onad4#img6K`b&XpZsNC79(Hh=DrRjaee&+Z|Whrt{r=&TP0zlU9w80 zuE?vG*Ir_|FF~7XOC>bs?YkxgCgl@hfN>Ev+ zkCZmC(Rl`?pmEE`-@eOOk|;mwqXON9x^HxqaelnJ%If;7<6rWdAN0!5g1SLF!H(AZ zPe`Kx%aNmeWizip2SHUPuTOvz0igW$$1yD8*K$4T%F|+H z15|xCZ%A68|90T)J(BSJy(ZpdVf(%rKpLbGfgK|oTDeLe>((eZ zc5lWu<(N0tZG!uY=Qeyarv|A>L<;%m%Oy6g!f3T#ELj@p#t5~JCIO21+D}Ot2QLdB zYm){=fKY;qsH)Hy_--u*5Lu3B{`#43+x#A z_PtTXaFTxMt7`)q}NqlG>F#~gB+{vHgEej%Ea#mV39j=8FkVITJ)VHg)s)%4ooNt9y`Kpc+M@cq%u#0_ zzese_<9j?3pZknBOjC!^gL!Y*v2!&B=qA7WNZVlx6aYRUdoJbf)zm>kgJtE32Pefm z%(ymaLa|yvaHV1^j9sZ~VcXEYY$ECAeINk*@4ztJ*&dDMH*p^YfRJ<}1SB(D;l2Mx z-~eVs_Vw-NM95ynRk7MQGJD9qKL8;f9661&a0)+re%-*0HaLSBR|92{uo8kkZ%2@H z*|O1kYQd&4W(V4LToE^43ApT^EsR{vNhRcS=LVKF(oP|vTokn^4-0?0eZ`CrQBGaczV%G zhJ~Y^zi({`S#*fh*GYn&1`L@JWAyPRY5d*2`6X`@WtJAN8fQ9Lnw_wP_0~!ZSoq4s zaVjXi=HnAz@fo?Xl%F#rNU1wBj`aec_C{8i0_AfAJ!e-ye1TF*n=w_(Bl?Ug>H!L-BhY;b;uD6ZB!_;@Tk) z?h*Kd_SA3iPTW@NlpW&vGLWa9E5;{izgiO(f=56`_^|Y6JpS2rF43aD?DN!49CxhQ zn(HieJEjZx$CmXDLU4Z|P#%yF?WBW5bDVlIr#(pW$#<2cSe$rM?v`j;pYcgJJ2k6y zcL`J@$g6A7GQX7`+dPkI4UjAUv3pFP&o$`LZGu#JD{)z`-_@yI@TY&_t`Tbkw2AL$ zBM_YOfVVo5rJvRsY~5Li#<=WW&2`&0P&Na~;b-r1>I{zlXRYvH!2(`ce=fv$_tyMGk8&BS-pBDYZVBJJu`@Y3&Eq( z$KU=NgDHX3Z44{K%T_l=W3D7f@mk$^6S7l|vH*aQClD8WT5!u!9smXw7JR@qcbv=K z7VtQ^2^2Kn&Q?tpeERXZM%`aJrAX@rqtRbo=?mrQSxiSukphGO*L~Lg{LV<7S3js7 zWo|ohd|XH%Y&{$eQP-iFGV{uia0UI{_Zv5QZwV*g$K8;gy!M`4G>-U*Ds$-_ND)~5 zqpcxy$1;N&$kPlGeqK{fXEOSoz^2>Bc80%kbxdXLTbz1qUX+wC89Nq2BVK^_cJ zXaD&6zO-@aD9>j-x6HoZ|A(ftaBIR3yFMk|HM&bF>1K2)AuUKqcbCMZLApb_mF{MA zryz}Vch}h7{hsG}ul)(TzT17D`<%}?DO%Xz3!UuS78T_%G}AS8;YV9`wq-LdsbW=VO(6}VvMicI&}=d$3F-I4gXH&1P~(8 zZUOOYD=4FNIjX;ZXV5XG^0$oa(|xBfHWP_~N+Cwv=PLMl?Ln~t|N_PC2`q4M$gtk8`X>~5{tYmh+ zfxv#jS^W4Jr-gn|59V*jGZ^f&%MSY!^yA7~jid3i2&L2b#&gVmX%+Y~J{HCDEB~DX z`sDKoHhar?w!=vC_Qu{{b(n~(VUV7_$31PNS;S=1*oKv35s4joz@o`p?KAp`@R+*5 zoWL)#TN`@No}C+72(r$8uIv2o$y7&&H8Oo?|D^oS+ys|pu!gwby!J{66QGhpEf&lU zl@>i=NtZ@3{B?igNf#^-;LVI@s9?}n#vHD1k3Zf0E={Ime+u;12XZpC$JJ2Q*&`Umy{3m8|so0t`LQ+&nGjLNW=on6m zqflJQ>%b*F0i!q7%8iYP+UwIRjw=rz$A3(K%kki*DmGr&JyRb8tK3%@RXAAa ze}2@*Hu9cc#4dn6B7L;`uYi4ZNMcE^*(waW-__F8uVhXhg`du!+9Y~ope75`NWt7( zJ%$$5_uAUnD6yz#FZE|7*Y($9+V6yH^Sb_#iy@D3N?BO!f+_2#a%xsuwo-K}pRh7G zNvLJ65g_EJ5I-yobt&|NF19-0t4YgX~8_D(EZy~#_AX7lWhmAYuF;S+!V*%)|hgFu!W zR(Cr+43A?u{NVrmi|qXI`oY&J23$yfF1WSP@JI86HW?@;8cbUPV-e`b5NfPD0UtqP z+wJtMDOlL=oswQ1OCg?k(g4}g&8e%;ShnyC*=cPUTEg#G(dMS6cpa!~>14r+u+FEC zcrIOoQN-qRTbNSZ1uE-Py-LG_HhGmMsh9%WtFb`PJcH>6sp9=;dGhB5_ok`!b0vjiY~P{aHx8z0_)=--J!1QQLK`9Je4 zA6_C9O_KMOd)sM1}R>hL|)B?M_?A!e_HUx^; zy}&zGg+j+S;0_7kHOIbwCdeAvWdH`YiZ$C+4Q86Hf%^9+^EY-^oE~71;okC$gW2iZ zETQd_+3nAgjscK!f{VvLxZ9TrQC2;6zXIT!M#^2X;=$@}Z(|F;f`rC6^l!Y^DA@Du- zj+m;j(KfaTiZcqH=u8J%m+rQ3!t@dURy9D+Ci2{t+@O?;K!DX-ne+J6JLhi5uSoxO z26x54?{5T}V4A8a^bc6SODqQZQ^?Q5)KH~f(R>&F!q(#4u}gYIZA}TOWwod%=f{De zYQ!&7Saft&GBZI%>Z=LBu;IH12Nu&7|6?t@q#$Vrhr}ASn2IxZHY8N{tDv&->M4Ek zS5p1_yqz-{a&&*4%MSsKT33gWo&a(>W?B!C&IgUq|NB}(aA%f(vn#`7(^Y-p=L@P! zz&GhkHh690kO@=^9^K%DeL6^ZDhr>P0N*^IfhZ3yY9OzpoufB)+KSXqFO&@Mh6Z04 zq9CCcA(+pGgYxOMB#-T}S3G8rEYIUr} z{yle#Cfq_B{tf@(4-yPI&N1T@{3lnMu2XCL4ZJoyy*o+I9dbtD2${W#$DzsO_<;Is zk8S0g^!{`n_r}Y=hn^Q)I4LU&Zcwxy>wY;eYWd|SSLhM>&`%51_>ZVu zs+Rdqk;XFxPF|d|SZTBko5lflNC&#!a9&qh=P?VdUGi<&pX`g<#&sV5t@*v`#vW^L@7Na))xm13$E(ev;0{op(ERA141z0b|{rQ^SzOsP|KU}!|s=ThG zLtxp2f*tSUa#uAn0U7L|PnW&(f;s*>E-B@_Hfp%q{Ad7q9g3in$U3rMSuRdc7{O-F zEZXha+TlJq=KPIkxdag9FJaa2;^zD7$Dc}W8 z!M&Io)W6fLyU&7Cj=}HTj`Kvb7huJ&nKiwc_5Zn=g#JV2O#tocbDq)%QE#v^LA-_s zX5V_Xfj7?696DUz#x`j2LryS4lfkfZl4|Bm(CVax0P(j($SW-kKL`YW;NK=a#}`LX zx{ty&b=TP(Lt&UX>UEhWIyYOR>tk_ku*eg6Xy@o6m1X$k>on3yp?>61%X94oxh*-QxGx-dE>eGg`M{G5IFK%husqVdY`ID6QJGw zvVQT^37Ebi0RxT19PtsuIg4uy=|;~aa6|8Em}hsh(*e2IiE&+*SEP-^K**@RCGbgz zNzf3wxq(d^UD1bAvxWbywpWw#Iqrq;26d zU&yRZJ~@ltNJ!PJ`AhXikl_xfb^ch9gEjxG9DS+G{atn3Mr$wPP~9qjuwL=idI(QI znk07>TLIF{Z0c{fIQ+F3_r|_ZqTkviJddj%PV~+9ur*K7p_b3tsMb?%_*1r@0)&b% z7WQoq+Qad`b?kb*5*t>6H{Y=qZE;u4DRe-M*ETaCADLxw<<$^tD-H=!o!~(pJQW#< zx9v&yW%c=^#W2_5Acj|N;=aLId-mC_^&nlxccSync8sswOzBY8*P3A};%_tEHq1w$ zb-jGJimI{&l_7bhQJqNf1| z9?P@}fAeG(?G&5gg@ujWqW9+4X~M*6750X$yQ3=VOQCfOGn(zL^oJwFKM!VY{*K0O zybkv%;>cR_*?mJD^xw4bWaim8v>6Y_?KS6YqW*NUes|)tR!KDwKIGkfLoIT#b};(J zIpC+$+8PKJutfEg;eYO)m&_P1{3)+nQ}j`A5<$pSJ1rGhCV==5j&=z^D-rH-UcTIs zaLxbylP4Q9PNzb5v<&!44tM7;_}JR?w!|8a6&T8V137$ zoFw!r{y*2=sMxwbG+@ppbW$}_*Bx?2TDM^=Tq?IkqtQ}!+ zN=Pxe@XuNHT9=)W*o24>TQ3S-07~SSV&rcn6%o~=15?D+xTeb?))JiekJs^c6(?^f zRZ1Ux7-~%RDpbQa4VSV58Ed(J=7|0ib|!ByvO0ntP=V7MWA3)>7+gVlV3r*3vk zhQKkPoF(gA`d8qd=_k|WBBnh>!HMDEsAU4wlqKrk6x33ymf`K5^J z50ove>JI1?!O8!-3wEDT3p6au3WCZ$4AE>qKTu$R^?1fu&8hNuDUF3V`uqFqv8Yy`XL%2)B^@Wow&l#h>KT!za^d#PIwbs>#X>99{at`Wwdd7&()>Ad2XU zX&ibzB-E*SveC8Q@kkZQ`Q5drd}nFnZ43*dp>o;V{X!ICl;7| zkmsG7eOK84X9U0H^}V(bd4-d%maX$}x_!cb(_g;A9=kb=S~dRNia96s7X z1N)7ie(Q~CD$+7x1-#A|5g|?4^zWCL5GutwWRXgw|P_+M9t4uO0TAc zZ?{Z>IS$UEb?K272Ta}^$WhGBZ-7p*Af~1H`YnixRp9r_Mo8#bfD#>_3&yDBk6T%UTR{557UyiyRkRf0GNW|A&j7F(m6` z&5u}LUh;Z?PcmZ=tRKxe7r^BU%=etfu_l1uH}M27-X}XKzQ7rl&)<#TDtun;YL#kx zvtiqIeWHgjeCcZ(9s5&ue=0E@3=#4;?d;g!BC$$89Ev0ON%x<};-B9cC-`nCkpE)nRd$rL%OK@x!SDX1FjnW`d^2^|^oB zQ(1wm#Tn5N;RY}{&>H=dTtyVpr!dMz zb=4I>em6pk0~o7~O@%kJ@-_`qw8Hq!BH^q<&)$uYWT3VK+A$mt1t;_#I2r5ELjqGy zD^RnbK=|7Q!GnlE^-ze=4rsWme=cGpp7#|5f6=f;B$`Z^1vL3deIIC;49gUfFCGk# z8#07m(Ui)sMRsWZIdM>jsRnwvcy<0AT?E~Ut&kr>q82)xV$5|b_37bBCRV#O|2hKu z#p=NpqtXULyugb+HHTWboz?307eG=OIs48>rVMCJS@ysc^gekb@NGow<{SrK>2ylR zg>k<6qkfB8?H`ZrI`OG$s&87$=NG6kHOfV>hcBpb%e0&0MduAyQ1G9~scaEhmXBHU zJ@W8rLSMJanDM`E>VL90fhpr~i~WB`_pxIg=m5@22(qlsz2stAzA~RM>WO5e<)9<& z@oWsQ5?gZqltM^;fcPB*N-w8;-;bl8LRB+TdCPjyUXK_WtXXbX(&$j0i%iNKRIbRU z5^@|_t6}Bkv03b+rro`L%t+a()z^e; zoTqy3$b7;b5@O-84pSWnSy{>5@T24C#!^t8`lvRd1{XjoxP=*HT`^bA8uEW=Zj)zP z9|g%@M_2n%#PBD(SgvPJ4r7asfsw=bpw^J-M?C9{E8tDu1nf3YbswB707N_ozKR~e zI;Cw-4sbq9Lj{(WfgBsIPc_qn?k;K=+>qZrrKNLL0QSe7tkZBadC~L7o!chU(|E(l z&ZqI%RN;LZw@ApI$!kgXpARkGF6ODuaugH;s>%M0Y)b=VX<76k3)g#iO{P^fL&@*) z%*`#~Y%tzX9DE7?9eE*>ECT;n$~+(2^ilgl(BvQT@V~G_&%SU1!SL4Gz43H``O0T} zLED9DgCe)6siQgXzKYq>G1}Kz+EJR0i@35MN;4Xd64cPil|jLv6d_bM*$A}h-M=(l zXU%W`4{d7Q`?Ckd+c=6S46kz#vg^(bxjgg8!`qJe=h)M)xAZ)i^YLSBOlaE2&CWBa zXo>HJY$(jY>$&ig97T~rIHUvnxn*qg(@}hxhM~@ciB163wfY@SJLXicrL~UZB2hOd z2@VBfy4vi`1ndka+W!j$E_bDw^-oC+9@{uAW={0YLv$6&j~%UV=-Wx~AtG%1WA!nv ziW-W5>s5Gr)&L9A0t+CgwR+j=M$Q-(mj=4_wqKHdhUZ_OD$-S7?PcQ^K-AkND z$aD!?^1ERhPil~S|1T-C=|X2+=kK~smvWbCVM*G2)tfWYXsLQ;M04sDNseLn_on+~ z4tacx=Cq6r*pgNbA+Xv+%c%@Lbd0DWbb2Wn^dKvg*qJ|{J1W}SE82hCZ@BqgOkO;^ zY)4Z*bfsr<^O@|ASGEh?tWyf5IY)DMM^f5b!rr|sG6#)8e@gwn$g_WVY55JScs42N z{0(cbgdN`kzqIV(rLw=!iU{{g&d$F*Oy%la6Z!qDh>6HhIsE6Bt3Z@jNO2k6;})=M zsNBf2-uxi078#jP%=@(QU@FIqPj}4+D)e)*7P&&#s}Iz%?WDI>wPY6qxp~*mdAXQ) zA1!RZ&!Bt1yVx)-P83HaLV-&yNj&6wj$Kn_*b+9bS8Yl%GbnB+>+Wn?6CK1kEIIGQ*-^0h@{p8NrXt<|% zX!jR*FIV7=cpQ_Sscep1DBqj^w^w8$9YooGgkRpf+W z!ffuqNg!sJ<_bJCLAn6kRUejg=hwn?(#;a^zpW+x2sq*Bz8+TLU#M!*FE}PRIn}Q# z%9S6CU)Jxss}bO{vr&qed3T9W$@O;;dE446HCx9$2=qJjNVe5 zguJ#G_<}c~2dTi8!fr2Y&+<|p6lYSH2?^AMJ;p7{gb>qr?Cs%Qp>REGnq6(!gBWfx z!B`y0tU1JAnL%UH$4mlA6{>3fU*e#3)$(UOGW24Uy|Pj1MzH!R<}S~P)?8KC>fG3u zf2cJu>}(X7Z(*TF=G24Uy^MI8ERG8ohmvocMGsOnGv*n&kid_1m>~%DSgi=!j$~8E z`-46q3!q3Fi<)JnWRmL?^%g`SRb8>`Q8U_4JOqJ>-Ot6kCz}lZ@qc5)r$r{jJJ_?KZb#E;4V5= zQ~Sgso*InJL_JBWzyn!YTv`N2s&Y|}aeDve#=i7!NXcad>`1Tw^9uO+8(S)t6`?3;_^h zusekpU2+?7f%=`vNnVX$ssBEujDZk~$K@;gcfm7xgnE#Bl+)<%5tIbJ?DeCEWUJMiu?|JPx3A`>dy_TVKcSQD_3h1$X7YAx3QVbj-<(p4W$uRh ziHmoHZ;fuqswGOQ^CyQKqmzibOo9^)H}5HgxQ3K39o(P%9-o8hh#s9JFuh{5ED3nm zFhkP1z3280>1FKqAMkHzSWe=v%xS1g{+F8`vztvTv2ahPpLd*S!k=qvjIA?t=5t7s zY7Z)5MiL|#+-og)cUz_FbSm0yAWvdfxk1^(*Zj8c9Ubq6Hb8CbG)(xX$+dlLZhuXjDE=LrZKWAPq*CbE+hD0I! z{d=J&OWZlg_7q*N$iDysY*dAxtWIY+u3OYKNNEu9K%~v9(^1EP(mLwpRq(^v*5Pc? zR^Dp^h{ntO?^K<2ysgy!`bD6(&s8)}24M~SCd=*ra$*dSyswLoVC{YusDv()tL6Dh zc0w$<7k{V!BKHS8y&1CBc$nNaoaf%3=GUEQ6xgKg8;YguF9JT=JbJ?s;9G#eD?r~_ z%X(aI-e=*6syXPC;Rc1;>qc20|J3o7{RYlUA0F&5KGdY2Zqg4f7rUHPwS-mZaobzY z{FCtO_x3;VwwnpR66xWeW8mW5xM(Lmi@(aO_xlH-6@XQbM}1B`%WZxxJOz%)aA04} zGA9_}DNMq)FDnv;A-9Cnfma(u^tAnguRGX(xJUghmMMC5$0?+Y%nSv*_W zG0BeCfRaFGk70LQu$ew-pHnhL)+Vc?Epzn-yt=XcNjF48Dfb~KkFg)dSEOh8*dZKW zVh~%N{{E!AN^I4njiiZ=LP2VPuAaJBTC*F5%MsFk9{#>4eYKb+jDVk0-!z0en_(yU zNq(tkHnR!W0!KR;{W^Fl4dz3Q0^G?*Ze5U51g?KbJMZaF#ct4>MSCCX;z7K*)83C~ z!4cH_MJ#&B5^`ycFGY5ykSR46jk`|V+jW=Xok+$t5Y@;N9Mb5MHoqnUyDTVE42L7K zRk_x65n;EM7K=|a-9FgJEa?f(HcGOkp9re`5vj8u?fsLid}iRug|u48lnu8&gL?Jw zE;jw4h3#ppNX%IqR>-^TS1jjITvviN2~XyUT&Qk_#LY)keTr?QslhEpf9&Fzi%v#< zuML`C?BieoPstC|uN*FN#tbx!Ke~~((TL1n&O@^Pjmt$bm+t@V{XTix5Fc^RFIstd zMK5`X7yfs%m=aV88)e-%JsvdKXk?F}^&v;q5msW_l5azJCz@cT4kWjl2Ih!D(0fnO z>8&6)jx-Q~l(RZY8uTW|7tJ(NEfv6ut6nZzE@OfF)d1C#`a}xd;WizSD2_ebFyeh- zovWBA{sRN3IiJr}D-kY-ryI4C$DdD^$)4|T?6j(o%!q#+f=9`S=*{D5A#G4Sh#zSd z({D(+ar=F{%e&Vyrpk%yw|>8QEeJoW?}6^A91d^8X4=1zB4ek|x>^u1Pc#S7R`{fA zz<3-rVGFY?mF7Jl$i7~=!D5@msw0ZByF}Ftv$6KB5=QK72h)M1-{_Nn*#mK)TP|}L zz%W?ufqj-6!o>WX$*CMe3HGUbd5>~wM4r+(Z{Km<#CwbDL!+G?3@USPNyS<~`&ubr zUdgcIg$mHBw*%gV|3OEeJ@~cB?4kP0mN)33&gJ%~tX~$dOT2TJd4rTD@X@UCM1;d? z5k+?ivP1h)=d$>P8yk*g5HkB=-Om^=PW2CxCKR#W;T=)6+Wc+4HsIy{vf8^#tn*MF zj|m(gbczFlNq~TB-&U(e<3prjFMhE2%Og02!RPs?$jskg*5{!DOpC0*jjNSBx7EDr ztm=B?^OrF`l=A)z2LxRPV^53U@LxJ$)%ZUqUal;53abv_>}kTQT9v88CJu)9U0N0hbuqKXLz- z@?+RA2R%|@cK%dC!$Uk-wvs6FES7XfsiVIg1i$na z-q!o55Chx)W_ZlRP$2FSJBOTQ|)&1am`!%`Lg;iIM} z6d07ei?3(nGUpj^3AB6Cdo1wM+`|kgL(+ZL8!%|B2nf*T)9!z;M!cTiDC@Yo|Jp;!m zj;=upUviLvA8`?S@p49r4IUW{x*&c5n*=$JBUoKQ8{_d|6pECCOxZHA~Axl)W358X66LPq8yQHwIKg zRHdKMcENM|*xdc*!kaA9{`4@8RSvAf491#kSq&z+w`hI95X4#Gn@UAkBwD@fRs#u7 zz^-#AZZK_q5UveLezf{+5;xQo_`ael_F6GxJ9&$Ti}o!{gdxmrIkVUFo#@Ty!}4Mr zOt$!AjkQ|Y5QjTg*!LnQA77~z^klj_!o8J#P)sCoiO-ww*rg#&Bjl2*hFjAXI-}qj z=VSd6P?Dk!R70WgHDS~s_|wv*gH}gJ}P|WRZa#Tuj9`-6^W5u9S~&T2@Lmm9f3TFY&K(bW6tG`8s#0` zJwcyPP*vRCv3WJ7Q!NeEa1XxjosDOF>yMt8U(m<5cwa1`)Mc8o2$>(fYYCh*HwZLz zV5HYB(#kzavExnkpz#)v6A;U{CKvivF|~_BC_8w6@$hcL?z>Vv$;meJ3au~Qhsmo) zW(DwoqRK&BB}CCi-r`}?JrL?`rm+(NdW_Hth6j1I4dVqG1?v5h-)k^@6%{o<$N^pC zFzC(?#K1a07Z>k>v_=qL+jxder1LG=i2khys-YG;%Kb(% zwr_Z-zA93dvG!Y2VkY@{-L^(onB@$2%-p^_sCmZOC1}WM*~n+jFoJMJ{wIJ(JIro* zL(ZQCG#=>&jpk$&bltR#z7`gOS+>0|!LXZ$;Dv68#6bWMQh)uFwkMP7R{%uh5^&3b z2Xqg0r0%HYL+>7>d_<+C9Y#4QM{r;!r2V$Yfowp?!cr?v>4%oJO&5Il-tMNJacRG* z^*pAQ@vBVpSRVvOJxY0y|+#0Ge3U7i{zD+d(6eWXnsF(A|Q z;@T;_o{E2*(ErtFSoa;_>yv4^5SlZ3@N2=X;LkdWef$5<0w6X2T3cB6W>pcL3yEZk zFw7_4a{t=BAmE$~{HKT&318`@$UqD=eAHz&pRW}F6!UCqXFZjpa=sHKH zB9E+q}-s_Q~wsBNB3L48A`{-^DI;2dKJ6^{by z(@>S&trp5LfK9qp?jw)u zNpzJ~C813hUFw^;OTZGD%CBFIL;}EfB1=SQCK7B*+aNPFS0m4RHaR z;kV1oN>HR4B;cmUm9xm8NBBn2fY1|VRgBg^T1R9tzM_a5q+HdaObMN<2yG7?w+3*B zSb*pKX_D+m7;A(MCv9Ol{-==zUpb}}#ZuSDv>!?+qc~2OCJ11J9Z~{efl#iNQ{dAN zgsWP(pb_0W%|E3jXQPiW;46bI5=5)14dD6v^@=gbg&zLveHZW9-D(;sb9I^ogaG=u z$$GT52Tah(^DPzcLL(q#ptp~<4X19ekYT4t)PHTO9uleQ#?c5 z9~O{|6xqMY4LZPk33&3{WM_3{peE=|CF#&YzMwsYZ?GEMe$3oQ+nKKNXYNvIUL&PR zK5GQMXY1TZO`{2rHH zRY%S+54#Oa$<2n?IDjJAlFM&xq#y%kj!}}&fd1nI*RozWrTjE&1;D>6b=uTVyCT!! zJNI@*wtqk6ND_$ZM;UFzD69OOg$B`bOS?7S{zC)O84}0aJQi6O59O0shTRhDIX|`3 zHbntf5|tW#K6Acc)nN}q3DpvjyRIX4)4zgJS9xGsuRFf$(@+YUMcV0$?t9uqj?Q>U z3D=bR0IkUm<=5MO=Wh$+;3qMOdj<6IdC;HY`v?Q19rWwBk#Z>9>ZDngbJthawO>B( zR)x~uhi;hczjY&%*NXx@zo*|xS8=znLVThe2z+?+s7TnafnH@j6MlQ!i&x@(LAXr_ zqba;4P`Y)8p8dT%2oY=pGrlYL=;G|R$ZES}cO+fE`U#d!%ft5@h~()W5*pCwd<7^5 z?3v7D1Fy?88H85jLD7;yy*l1dKgnu`r#w8cR;|Mm^7p1Xbb<{d;h(=}cYAPH z-X8$A>#R$Q3+p-G9Y;o?>%PUO`yR#n82#yMLC0mfw+dDmZ@fOs8S}R&Y{F4Y9&U!N zus;dMPE$IAdEUbMsuWbh=0j3R(N_u#uF}RdoCp40R~HkpDo~O@t!EV|n-|NEf>fB` z!`u+*2fiiT!T^j4sg-Pc+5^JlonU$D1q@3A`5eagOGbYr6?I0c${Q+g)WaxUA7l15 zl;bo$=8#LfJpE9}6NQ|H2wtJ%dtd>##i-0Y#rxuRkvFZMslqo$LOOd9$zsfeIl0J{ zA&lBK{9D<62yL$;#U5{tkN>+N2VkiBDOf>^p*$=V&mJm z^h0N|$6)q-V2+5D`y4O<}XY0HYGxRk1oyKm16={ z^V$xn9+ksZvrkVv6vWJ`R-~eFsgU&n%A#t=`gO~My+4EXgY?s|L5a%IC?k<)sDSqd z`SFrWsKM7>l{O_v0ub%YWoXjq8jnbD|kX*zBZBXvo-tx8B8(R)IU^fhf`44p5bZYnHP*z2wA;pB7eKj)gSc7DId zt<|gyChApTL*77_Cc%yVtHe-*ZuiQ&m(8!zYk{h?`(dg>b6crt?4h*H18P~BVcY%se zC%y6F+xhm?&H7{rLzfB0Mm~*oNvXcOWV__%qwCx-ze{9NwCTDt2EDs?ZTN^mav^5< z%9VtrU4@b(M6(EfYOf(5XBPC=kTBVeFjA=3JFg+>iYZ`?qah{ix0l0g`_xx89oOpr zYJ(M!kJ1t?2-A5c#aL5Zf~D=B36D*jsG~+%i018`yeUt<6zlxpdYYRyn`OqCzBaj! zw@rjmpl_OfN9DnUuVj%ZFJggnvNM*I^-NW*voSssL07VQ!cqhG!6xfZ!0v}P_~T|1 z7h9NgoB5d6Q9ubmkcl8C?gYNcJJ|QXOQAYjHtPIdG-))R>7X6k_mBla8A>)@%V{4) zv7$Qa5H7Zs&xpJC0CeGeyHz4{0irRjpMs=@+gB4k3&bq0vw=O`H<0lAqna?$De_|n zG3V73x9zCQ#7{;%>W3U#Ws03{(8YjPG?sBlvU25ZSeH)bpG{J?R731-MVzGTc1Yr9 z(KT~e%1zfD9)r*fi^WTNex&&D^xxNPwjoF%@XY(i;dv#5=g#QSJ|ls230FZ(wI?+4 zb|4Lvl!-&LC7|^= zmhpdID6+g1{MlMX`hF#e!d1R~SXuUizi@ngb=#xjx22U9(8WV2=g;UW z1`IJUVchPK(pI9#UE#yvC@|<_ocu1h%%B*;X^^S@%(($YWa(9CBSY<;nI7ZI+0WZJ z62pcdFckHc?L-Z1_R<-P>>pYpURAfxn-A{Fquk7N5r+f1;O8)*CI4OlUTB#A;bSc8 z+GsJ>EU}Hwvji*>ikz=br z%{gvi?nKvSnEcT0n|P00V2#9d;p4tZ-b%0ufEAN`@D#?1Y^oy;&rKY%&j48|j7<@Y zfcs2FLFLa8@!VcYO|4m$gzO(mrz56P`5uLLMBoaQ^zwNva(2$f5~_60N1NIP+3cKg zNQM=f3T23R-IA8PCGFP-??f}>IyvThX|m|=g3tTw-$(Jf`xY?Bwyu!fPhx%CN{et_ z-sh~E1V|~i`p-yChJkU#J*&gb22Ocz!lntZV?4apkjOs-fkq;z#riB=Cad|jAdg~? zhvhrSRM|WQ+lmp!ZGS%zq0JKtcE?;z%DnOQ@9oW*2f3$loH)NhXON50J3`3S9hPnQ1-ty9U+_Tfb;`gz*8zP? zKaL`5LCFDtV~--0T0guO4m34KBit%hCA(8_@!Yg??z?AlnAluD3fCt;{Az{KmXogXJkP&IOxv`YmXm1nFQHPrQ++ zkW8DEe-^RL&bU?dkV#?(ySGu3){Sz%K?eb!*n4D>`AUu#z&btZtK)H*xT5y96~~4yarjMf1FVpI z{Q69Z8>ZaDQ}S7KXDY;~H4YLsY9kBOoF}Pt^IyY@!0RM-OG9gLm}t1+m%BvZ zjoE2OgHv!Z%DM5NKcZh8_K8i{d*PkZ$6#9pcV1m zm{A+Vp6WeHA$;Iv(PXiH4K-=xo2rp0QGTa-s^nBIfqG_6@rfh^5VCRHm%@;#Fd9ew z(!{w$fg+0ApRhu^OEa=x15?uA02O0B^>`78Uqy$GVLTf&&r1LMWwwcGYY`HO#N#V4 zBw~hq_Gzg=bhV7CHM|4yWjgi9q38`ZrpFRA?|Y6JW$plC@EFS#bK@w%YrS`|%ZoK3 z^F8E;M?ZVX=kdMxy$C@P%U_etNT||cWHy@!b+od3In~g0=tZeJi!2f}C zjyo2F?0(Vppx`s0?tqXr!xRBImKx!+MD56K!(L0+yYQG81Z!QWfBI^f5)&-RsyY2P z4fZ??PJl>=kAg;?z~ZlYs?hwEGdoTELPA!xftBk^WI4p|N*{#|-hyUbu!NlD-Sl>e z2WD=Q%8iwukaIpdv9QLiI;a34wZ}v6e`$NT6m@N1Sy6M7Zsv2~LQp29uBYZ{%J4N7 zATp+;vTsip(7^fhft8PhYlqx&6=8WJ*$A83RyR3gwlXta13B*~!cCANA!gRJ*qLH= zfz-R8L0D5FjIBg~zkW4idA0l7y9sd^4mOJEKBuVLio<3-Q3yNP68U5tEiSI9f*v*B zyX9X6@4fu58FK`a8gezJy4Y$R^cMl+(RvK0-BFgP-SS54LZ1Hk?t)p49b1;{E7%?j z{IkkSy^8TaMXO>GC6T({4fkFyDhpY=-n~kpUHtSeP)COZvt~9au_r{b1t|5m;RoU{ zC9rz+os6B)K9(7^6z(KfAV;d^WRo@aqM6{VHu8Wz^JPfHkoy*fQIArM^u`}JG;-&l z5G1huiDum=@hS9IvZ>cPnSus$UPr|h8Tg|#b5UV6ebFD~4VohNAZG3!V0OxQ6>5Ir zs^yrBgvbiKMg6j`&idt++yBr$z1Q=Lj;>$A)&vl)8&{9a%OBdZdJTy}85YySH*7io z!Z`AtXZU}|dPa|m)eLU8Xs@5)rJz+Ce>DZbL`D8Ix*La=hrP@wb(9vP;lw9OIFom2fSgraY13@{%T z{B}<$dZ9@;ha>)A?wIYP9Fz?3)Q_w2wXj@xQ>vwzuJ9}rCua%vbwJu8jVJV3UWk?2 zMpbqnha#+FK;-6%vs42O7tKGfAGQ- z0IzGzPlk4bTu!A8s6nPb_}Sy~95EUttZKgQp`hWagNUBI{A@Jd>a(;zs#jFBc2$w_ zo%U74Uky)a@)qGsn#z1);Un{@h#jtL2q79w= z3R(rI<0@X-ib~tTV`d1UFzGd@%Fblalz4>se)qA_AU$Tb}_eP`GecH>RM-5ZEDa-31t$`(idM8aOf5ZRw1*Ifzf`oUNy{}!) z$ub5{`oW0G7}Q1=T9{VR$~bL8^m(A~5RD^su(8gFEg&W`yV`Wuk-{F}v?Zb@We% zNd3&Lqi6x_`cP(;%>kgS2Y0qli%l4iF)bzjBDV_jgTnB?=gkLH%FO{{o=Nn}WCU0u zcdN27A;lVbhlEEKZjCu~^j%;Y0b>Fv44edWyTfA_S}NcRxMt4~h(MKS-u~?>fHuxW z(J0_QBH+DV7#jNFqY?P~KhwUdJW{3OLO$Qi&Hmij++oCPn5Ql5#`w-rz$aL25E&m}6~Q{-E=AA}|>OhjLY zoYXrBVYpQv!mVZ|sX$cL>^Xlh89krBh*nDv?B{m8#}AL|CFuv+LD?Zif5E=H@dh&j z9*yzt2(ExLJO^a4#XmX=pcP$G2b_r^VXPCF_@iD4B=xGI0X?T}uB`iq8cX(YSR9Mj zNbLtV!(R*chK*J6IPD^^#?(%1U5Z0NS|95(;AOEWieOv6Y$zFPnxmxtlqG04V;uUP z5JnB0n{`fnOw6Sg^_(}L@S_Vfa)Rk^w8oYio$es36RPAAOWOd3xLGps)Bn8mCv0*# z*TK6&_}I{W%F*D~x#vjv@(<0KkS*1AG54`NSHO_^w~x?vtaK-tDGJIvvb7`v%P^p3 zvnkYj3ym`?%T$K@5}(S95DmsgE3virEuSp10U^+_OH0--l88;%EG${vNAui&hBLy* zKRTBHw7*VWqX$h3m%pq>1OwPhVA44#t3bQ{ic(wTU#vm+b%2GFFm*N%d1H^#5VeU z&p%OE463~q5B?PAj6(?_@H<X<;Y zil3FOi!&SFavd|O^=-)wu8=HwFFlKTd2E{giYC#@*YqXIMk6`Omq ztkvP`Rh4R|QK;x`&}LCZ{$Skn>4&nXJQ;h8iTLg{U?rHlXz+2`R){p(X9`5DziZZ` z$TFNu9LMm3G0c0`U}%F{q~u*)!ZjHE+>;X%J zH~+j?-Ui!11KKl(Q+%?1#mxmn8{ANgR9P7ZVSrFJ8H8bS&#9`l68ppBG&e&_Jm7gqYW$<$Nr(wa(=dw-%SkX6 z?Tk%odus_AqvxQZAQWA9lhMU4v{hHa2>T!w@l#v=x*glS6d!GaJe z5mPz%j=v%E|A;#4s3^a<+kV)6h?R8ItE9UxNQc(VP=LY^*rd?*046fkJvst3d?HcTr-iq~+$bdPE>?0eWd67Y0@?R^EY$)e3Y2ueA?ANikx9Im{nSHy9P8o%LVy=83u z%X~+>Ug4gw$Nh3rDRm_y-jaW;68xe$9AN}|Ziyf8@?I(hQ9ixsS6b%CiJZ%D-hY-A zvRm6l2>jNv{Iel>9AMzn`vmk;@@t&!R33yCks^yIxed?yZqZ zkt2B4D!$(>0E0%c5(h?MGM&_8}HN(XjN zhBt1k*@5h$NBAaD0RoW#KO?Mz1xY8R0UwO1Y zzVW&`$NtA=g5ZTv?*iv6;V=WzFEng)OkJT#Qi9JOHPT?^K-uOmD8*9Wsvk^iXtwH< zrvfXNnZz{x6V(Jwz!$zW1+4h9;_)h#9sgnXqip=zBUexg10`ECd{G%KgSIS$O#7mirzn zTtzA+g4)vQCdiMRv6nI^0UH&nK zups&kw)US(BH2Y@1n;ZXq$xdgZ-h49!vb%AG{5j!s_ETfj39(=osGnOdL$M=Cg=$js5^LTsK$7&m;Apd|)W-ybU2snc$+ z@anksa!0cxi>GIYL6B09|6_oVs7d$2*z^d|koX6&vK|UiB`MUg{Evhbwa_&>mTZ^e z_1`rxsnqzhBT+OTsz{`OFrfe;pp41_(8zAghpG%mb`P~RR`$O#ZD}aKRLei$eR)S+Z(x0N79e6E%Zt5DQ_I(jQ~@Xy5_T2GDwwrp<0sbGBDsve;O_gRw3bwkM`f`5zVFfTr6 z=*;e1czrpcqMghhXuuYi&B;q(!T$85Fp@{RgCP)kel#kpi4w*b)%M=777SfCd<~p5 zQ;66Fv1P*WTu4cGG=8v2X4+z%WJv9kqmeS)4}BBaE9P=F8{kwhW7cD)kd3W6`nExd@qI;BYgel{ic=?{!zXyb8Q zylmG^I*}Ft+=ynoNO7O%MF9mEt+cw19e3YTRC(>nNb*I4|2-bWf0kdp`4ZN*WOJSD z`yJyv;|MfNfcvD$m6i)b+<*O(c;sB2XtbTz^*!V(!l9eh5*DHa-DuU_CDX`72bQpiWW$$qvT!OYXKo`JYGwRqMZsOgCR@%uu^f zu?iq&glc&$F0GSM5%L{zh}(C^+e~q>xs&Jen}>3XmTpD3;3%Hg6v@w?yI>-KLh-%= zK3~cSs&ur^HQFPADp)5(GmxD3J(z*>Fv-jE*}R@I%0;fm6Ikiydb=ct0QoamKr^qZ8R~1svnukCP+u=xsQcf7 z#@E|zQhDK9nz5IG+h-TZ?5Ve^bv`JXB6JBtNF;!1Q!VeAklyk7ZhT@85hdyNcm z_$xIj6y}Y)0)pe&o9Qp8s}=EiT~%J7OW@Yit}J{v0VV=b~a`Czy_?u|xIwzF%G$ z<_}7B(3S3-nAMw`?a|oixX?W_d=L5|& zZujU@K<|u`khQj!_NPK?%Yj7pcNgn#=dGDin6F&_ECBrKtaq3GrGgp+xB}*RoLxv~ zJ%l|sGmHw9sT_#kGo`RsqIr>G1g)+qqFbDuMmK6DQxDjsESA@uZuNYCO7Q)x@YTeQWb1NNFc2C5MqTkOdNc?!FwmYOo z(yDZzauDnjbBN#16ubqC@=PS>I!& zO=B;pTZAk@u1F)H>p9#3R-Ay+!u9gcco!}q9P(*!(+d8WnU82*zsibDT7c<%%*#|% z2&mD=61$mE|4xXNxCg7rb4BsgGSW(M&%xG_Gt{=YG z@x`y{OHd0hG%cfaqB0`^OPVbrv=YJB-i2bZGiSzciZ9E(KInYsk!l)i_q3-s%ugul zw2FpMX;E-;*UgDIPHuFCJ)w)d4rkBY6zoI!F9CAj4yG&cxq>C8oW*e6>+T1HY@6fJ zcJr1!QSzHo$(=!r3LQJgMraXJ{*>~KmmfR4yYe!dEyuZBI3D6V+|1>YUIVan86$0( zO0jPzgNJT21LX>kwwe{Vf#d+yNWB4p{sUY7nyLF}>^P;>p+G70b-l)?XSKTv$kSAu z=NeKkkZPkL+0tn`DmED<0cx~SmK@L98wSIFv7i`J)O#C4pRp3Z_=1}Hun&v{FQYF*QB= zo$~G8VhU)d-RuER-I0p4l7IJ$xxJ12otJj2fKJ}Xz}fk)GTFyC#5(k6(a98wdQV^j zi*{+I&ce~kqav1c6F5FOSwLbhToZL)`xi2d8s<7I{h?1g@)J$sQY-Ga-e-M3zh`YJ zf*%_;bi3_Dyk3A|LnPtK+Aq2N%^6*{|0e2Sk6F#(8L2NMJjtx4BW!A&@GEW$0rZwT z@r`lf&`fZS2vbXfMtYy#FlhQ!MoQwyvq!E>IBBODI5Tr**>=mlN|N zBx%2H&5oIsL#uxd+^s|lRNfUJq3JI~iTb7uf<@Lqnzo5K76^R4MNpkW0&QP0MpQ#E zu3E?TsQmuf2KCP@_Hrjn~ z5~#;IA-(quL52lJ#IX-y9Rk`ctB^FXP5Yjy2d`^w3@D;+KSX9G^uODV*^0`I=uD2G*FyC?1g z6eJtdjmB;b zv4^lo{QPd_6fs=-7xW5`uJkxAFyqpU&Pk@y?DO<0A;^DW8e@>jI*|=stB#m|ov@@m zBeG@akieqcdZHI}Dc7to6DzPFBHWXNaepQ04ELsfy6w*xpf|>C`&Gh%>3@qhyr=0CzefO?P}Q;smMnCRO0pj% zp&0Iqx@s0&SyMSm!rb6xH`lR4kb|(zW3BAMXt;fz;*Z}{OHbeZiT_2q)F(z7Jo)*z z$qZ!B=Y7RLgBJbpB36GQJh1ef3o6ZJtH&{+qv{osY+jDL;`7yO9ji&|9Ycdm<)gpq zn&hoke9VSV!J{}{$8EOS%Di_hFkO3RS`TN-{@KF$%j!PYxHePF7T$jBihJA~P@5ef zM0!21(pB>KpBAo@7u4&5Z{P(FK6P8_Zf`oR$oL@N*8eVx9;1!DifRbW;afJ4{{b6> z=K?Dl{GxfoYfjQomu68PFJqNOukt&3Wy&kcGY;g*P;2GAd?$*1t9ge)lI^ro zR4`AC;d?Cpx4qzgN5R271UGhCz3`^J_=pe=ZR6HN9=^6bTp%k#x(KjJt!L$(38IMy zTf-evHX2)cCd_ZeakrB?e2&0U=nps$uObapf0cI(?f?D88Y4JaH2NkLU4lu+``E(w z)qe*Z=a6lhprPmVF2UAhXk1i*uz>i@eYH(#Ta(?EBB9R?xT)y<6T?-Nd7T-Fhzp+E7`~GeVskV3s zLjD7>^MOa{SS&>lJPdD`yT&5=MCwDaa`-8ke2&NS?)9?d@5G1i4$`4QV+~7RuE{7l z>?fEN@va*RA5)Cx`=8ug78$tQLX0Ut0)a1bpYqpKprZI$z6_&wfYw0KGNkf~RFZ+? zV`fM-IDCe?LwJ4aH_RnV2I;%cV(51mt}oX8&70%^z@^w!H?wpdI}x4TpuLEBcZ|`E zjjQ#Eq5Z(l*zUn~{fb%Bc^z&imzl^fLl#x}^Qv5HTs-eoA4u3Y{g)|XBV9$~eD5nb zTzA9YiCWb11uDlyESPR@qmi>u61UYs3ng%gW^f$HjR~~TF)~5TqGLLYP~UOqCkGGL zEnlI{#uV>26ZPlZ4iX9_ro zl94rQs_UsTKuBK>78?A}1tvmYS|X2xWroByJy@B`g$k$z?;i|W!=_Sre*!|_tcs66 zBugNgltkM<{E0X9zf>N0_2YZVQUPp5Rd5tCu-#zQ=mD)gXQoHv%=Q?pk2<}hM`0WE zjBwy{uMt-BnL&HcbZ9al1EYcCD@eFQMhY1T{og19v3HW3sPiaST~~ud6;|C``UEMt zgNao43A^6`a4{|^?XVkiu!#%wiIf!uBZ2ZmJ~OPlS}l$fOhHzwC&$&DUa+TbhyfvW zWS1O&!K#-TyWjsnxW$doy|mn@-G&HWlkKEMhmYq46D}<;CnR&_sH7xBX1o2V5qo%> z4(T3V8@;lek>qLEtE+}am3cCcpTL+thwV1uUIIuS7N*y_nkgqXxAvd70PXK=4ed#m z-e@v@qT>?XVh0`YIobD-B@d&FZu02_59%vpK;?j_)t9-2_s{aY${hI|(TD#W+_EFH z;bIdAiDMCkLt#qK+igmZ7OS*+70z)Fdb@|@+_C8a#U%qD@vAz!n$GSFZChG#rlsg= zmwpjbdecb#o!VcZbmYxF-eW#w2Tt`yQ*^yIVnIyXCY@yBdu3GiTg$0oiEAC(%kGdY zX3}LYq9*5C?(}z7J_shCm(6v<_V?SFN{M@0se)BibbBvj$7r)=y0;$D3Jn$LR9ijH z%5JktL|euoq!?@x_FKqB8nGyR^KATWPaK0AV6g`y#&CT-ha&I0ePuhF<;P+Z`j0@9 zhf3v~h3656x_;!(JbmdWK7KfrF7BqUt{GDI`$jQ0lAjZr@}t`7fqkf|2OLJNrQSY4e>R!)z__48#)6(YiX!bzVnFJmiC~b|6bEM2q1ktBF zJ5ttxHHP@}hYOIr1RYncl|PZ>?zDsvstn)jWrAJnWg~e!ll52_$a*X-AdlchTv&_Z zNwT$t079lY>I%~9SZL09W`^S2?;9apvP_?OV(LS}i_XbDMVw(S4zTZmpTi--A<>5u ziX)cca>j_vaepR0G=I6luW4C1bWXFNjb^c<7(-+H=1AqS=~G zl))w7C5p+Xr-{3bWae?mK2froC9!MN$b2-3(uad|P+MEA@`;~|uQ5zptb$4<4Oe~C z-8tYB$$oAVf0J_iBn~*6gQ24;ZZh3;@w0K}@i&&4*aBkuRoiA4_bol37?kPftn`M@ zL->o9a$*TfKdnC014$o9FFdUL4D02Z>u~Ub!r9W<-r;-^46G?eDKpFE+g`ftTQ$A; zK$z>~GGrYJNvd|G|L%XFem^C)ft@N!>0p5V&R=mUB*XEi)#4ZcK~J(Wef#cfnb;7eE&y=2niR;&kO34SW6L#c8gr3 zlZ)@X_>Wo*mr>*d98ctm>cLc~nKTeEE0CFfWPq#rLbx!jZ6ac$-k@gu-8U6FU0Gr0 z2xh)_XaQ05!a)S-M_0bYU*jihhu{6SVyXP=Fc}-`LsF`~265MP%)Wqgk6eg8H`;Nx zcz~|(=shHw#%(QO`$5M1C|h)(7y&`_e$OQHGJgd|9fC;kUk3kGF2b8E_v07hO8~X} zE#1(KI95Si8LA=G=v17tAe%la?}-O1EcVvlb}RR=*P?dTLRBZ}jAih?f=Ss2Ec)}k zDQrsycV8hb*CT>^BvYshgWwaX>C390o|MGjZw@%_dG`)DTGu7U*X6nU=3MQFiB>h(m}?$yPcWE6}fsgEHB zZP81y_xD`(W<^^$jnx~OHdptEDOQk1#}6dS12pGefdXTz7K-@MT;1Lr?XCJunO;Ur zZ?x*4^=5?bgMvz9{y$-g81%**rcbWZ zU!7C%T?k(0G#73PdB$Wa`B8zy;UAz^myE1ISH7XJGU+7Fuhl ztk2}h+tsRW9w++G6+N4WeC`yGI-q{Vhjdt&Taet(Q9R=ZI(V`?22E3_nmrb;p2!=N zB~+lgGbmks%qH?srFL8l9mdvTAy6cYe0R8xjf@YeyfC`meQENFyTLOZrPlWT?>ns9 z{H0sW+w?3lIfmNM3=I=5GYy{Sn}=^*d@(e+iG%abYeB?lM{05xl{`f*KMHB zf{&7x@7BnklLFlL4ilNvQFipInAtkNPoHK+o4cQoiD-wtTre9!NYMimI#zS=1&Cut zA7{y*T67@Ro4v6RMQ#aT;FRu)6?g4OpMib)ktI3p;ylpzcH8LuWY)%MjwAL0DO9iJ z=%ZJYflL)P%znHdqks2LG&=;_X0=|Z{CvnGdpm&w)5`Ty=SnZt`Q9)ZmNNB9J)(iS z{hU|Rx;B3qE`os*&QF%|nGuq%5%YOKKz|*MS+uLsb1_E)xK`Vz;CWEX#c1V+RPbe_ zt2_5CDAX2RXRz9$P@W!V);5@)ZdN$xEzPjx_5|%V&lyv=3jsgL8scESgTt;&nxYBFMXI_BXlQYRg1XG51eNp6xKiZC%}Qf@eW2--eaBx z=5es}Yphz-7x4F(Y^)u`Y-;lh>Y_+LPu%o^hv_CZabTIQ$|x}=nz;QQvF<{(udWT} zNo&u%CLFePlVB2mZZKeCwc?a7>hklFX13>TvL*B3?Fx$ z@VxpJ{}0r*)#G%ijFAeOKjWtCH~G4y-`?mO-mWe2Jyk1rt2zX`qpb{Ofo=>JU6-?T z#KxP@ddl&wE%b-NwmnkK-4!-Zs{6)YC!ie@=)Q9yWgJ$AoLS%}vf+(+uJ^mco5`cE zo%F}wrf=WtZ`2+GUPFQPXt|V*PHQ}SOKqE9qiH55!xQ=0l$I~rdR$JvGyhEp=IwBI z-^x#_EJQOkVmSy~iNzBzGUa$e^=9Xr0phke*v+pR-u>lIH-M+j*G4>ZX}4lazcw&CZeul- z=8sVkB6Gj;T$zy^WwV_;W0-hxV$HaReB-&ar2YwFRoR%m*ZB;XmG$=feArpVn?oyp zFNPZHUGV73wWRm}!XVeMdO9jwQaZ?7U(W}g`%N{uGS3i{`eWyd#^{Q73!1oLUd=poh<^QjvdhU`^cq1Q z*3gzBFD{D}jF!$ppJ21+`yg1i$C>;c7rfzN+EFAgCOSeH06$mjv4z|jxBhVbS10XW zMfcd@G#C9};a*D^t!nR0_u9RcbjW5vz`|L}0Mx{x*g!IlB*VR$`4s7;|r06Y~y z;2t<)`fTnBmIg))Y+#|0QaunD4cZJ#iuhVsrPyp|L-b~jmha<)9k?pNxOnCetQGY% zGG1`5?f79Wz?+n4bze*qwbzrsWvqjKX|GshH(+&{PXzIFyK_SXKH3KG)9!@N)ednQ z7{JWUE{Ie=2Jmz0_-$!MkQ95rouc}(t`mN!;y=#EKF(D6-xeKO3C>17Urmyo#C35O zh$2=;E3xa&m8ey5xJ0=nRV@qn7ft8V$r61%M^P2?GO*Uv}Sd3$%2&Kz|VpX$D>4}LmW^_@05HI$q z+jhvUp-}%~@lTfm2J;)hQBL7MkmIcvm#85|Q=1Cqx^>ni$t<%wrpejulBcmO%Yzuq_p~_TrIwHCpEb-4g zx8B6jt(~qt#e7|tcE7E=`F++)${L%dZn%S|MUP_TmW@3bCFDqZ?G_K%FJf+HnuhCg zp=?)qv79RKFh$z+n#Il5;5RQaE#ZqM?}Jp%EueV#r0kpH_s!$7cU7prw~qT5XJ&oF z-_?CW-U8Z6czk`{3| z;sc%vdtzCkVo_AKd&*2}22Jw*N>aiX#B0x>r)b+i9W?t+a=7lcVxj41eCiP(wm@M% zF)~9iC^0W?j*_!qNV-_f8vJ_wqs8yZ8;tz!j0DJSKH3|0?4UrodfR+P@W?bsrv-nA z*8a3f1_ckWyrSHbL1Ew;WSwt&b3=ttJrjIF;B7Uq_;Lc3u=XP~0oH}5Kpq0m43X(L z3qB)yaO-OGh+}e3<-SL*+CpehBVeS^28sJ4RbiT8HB#}rDr~zu zvhYi0Ii$ThiMt>QCN#9BWBLu}>F(uO?CZQD2W{ib=sy|qH-@)QyO#L|07It_gVQ`p z|L?!AGe0+TBjM>W?5`9Bc%_t|BAHZ= zu{DMrt)`=^Fg;gM_RlFfH%1;6h-qB0THF)Dx zx-J??1WW^iURJs``V!&24yZOn71b|vw`nk)en`q5a{0EDO)rP_KJ$74|A+map&!W% zI31PlrFvMz^+KPGuH-{2vLOLcE74*#!r_x;W6GI#^{h?`NY>_BRMaxtODzK1m-^m8 zf1ms-dVC4@2-oFpOrH74oTbmE;ZALxN;&3ymVuO?@7AL)~a zn6ah~UNn>+&A9F2vKmiCXj+gY_Vc4~SFHD}^SpDNSRln3uiTbL@1+{jWzB%Gp!^b? z1t(+wS>cNe1}jmvO3-t)H^NSQ;P2+&ewuFNl3=Zgb+wn>vi(PmU`y^V*MB9t?Mi@X zkp8(x;2_{h#Cim_rK`teI!b?{RcO9)>;K*$Ck}%t-wL5NvDvLaxMxYQ7h_aRTX9qi zLc{;#giN0&`FF@8cyMhIzmHDadv->Q9yw;PK4BRdI!Tv#a)sNAHL^0Td_wfSCGz|E z4;uM`pF*EDh@iUyracp=Y8akM9n^j{pKDEk&o!r z{)~(39Iz5}7QBIIyV?MwQ0RYz-;fV?BaqKxUR<>nBp{3c_fON`xA$6%IuKMFZ}SoQ z0jF)08|z`;w}YQyz0&@45_@jG249(PCfS=#7o3j&GKV3gkXr1nA12-^KN<9^j{9?1 z4zyiJA<&*+dvrDE>5g?2cu!9WXZK%CB*b^#on`RuOBg=L=E!6bIEj%*lBj{BEZogo_sEM?5aDvai@&5+scN z9}B?LF0z14gx8P}bWT@Faq*vE1n>>v*l}k@Zdso-&}chOIFhcP3y?MH!UmLkM&P_q8ci-<|RDW2OGKQM?e`iE^lC@HF!c}4CFH+|E2 z1|)|cI8B;cq}%?RL`*Q*>ibWcNUmo0ExR^*Uy};301G{`qtrIEZ!Ea-egK;*J4^Vp zDH`jO0a~xWgSs3%2~J3gtYG9fv!*Ie9;&{y|4`z_B^*E*mXVxk#QRxNo_ev zT-1I;rfz05Wzy+vNM-BaW_s0${$WJAuOG()nH@{9i4{$`t!Xro!JazpC{!d z$Fu2XQplUzl?ZQAh;?O`F7slh)@M56tOVPqWJU$0C>*Y#zx3Ebin_DZtQqAyg8-}? zV*=TDZ$*NVwk>iGtgVU-%T8qZwYv-)Qiot*sF$EO2yhx<7k3+q--gVCCm_ImjR`8e;><+k&5A+SuNu!pK*ifxV3LWi#y z?mLTwlMNg*&qtFgc!S8~E=hco-$WU4Ynci^z1@d2NnMcjo#ret_vf1O{&~9{U zlkQ8F2EqK@YLGiD0tAcjIG(Rx$C7$Mb9=nN!2IbTB2JBG*fR9fBh{PgKOkDv1Q=EO zw`*)G87*No9%#B&3I3WqAFqO*&OEt_ip|26)?ZMpn;lv zwrUmjuwA9^HjH|6ei0qbz#+@ejTI)G^qY{lNQ?(Z4R1P#5htkE__1nelM7ML!}42i zpGueCE;62+VbCHF(W|^n=lz~AOeQPofHeT3WV6G?MI<@;o& z^ZiUSOlM+ep7Xs$V@PIvl&XKD`aMW#tImjdS&RO?wjm?91Z@CMc6~<0UfE};jjleH z6dw7Lh?RZx?_u`Y@K)e=#aOy~iFudiYQs{*SP_~h$l_A5>u`&E!T>IXQ@#zUxv4c| zfQ}wj7q%VE3ddtr$-36~C?ZD)D9tdL@Z9wK4Gs+pQFieDI0e$bvm%8>lJ!()%L(C8 zZdB)3M11fH6rC%w!Ek$mKFKt?xiC4G&va7qPt}R?Qh=XuY+)zCQrr(lb*G=QzY8ks zhnu5$iKB?C(O97-nOc#zQMO%CUSR^bZC}Dq9G4B5A;at%oYMMHue6XRIFCE|^cHcc zrr^=XcKsu2h1l6xeD-s2e$;BhRE=9#R}t4iYe+x$FRz0gGQWs}l6`&Up5ElVf7EjK z!RYK=Vk{6VW>R5%GX7l3z80X?U|Bi%hlo~{lMQ+6{?r9|X98w6`W%1~>V3XGp{X4m z&HRyvWLeJl+7Xs+2~QW6kGNXIh>E(MC!^i%!NGwxrr|-Od=o&v?YwIV24Q zd;XyNsq+gELYW8uc`we!qxrhKP;8!hOsFPi1%KJs6-uj~e7zQYx3afn_g@Q3F0A$@dp$ib+zLiG5PVzmImGBb=U}2t3{I>Vm8X z{#&*3qmq4hvA{GGI@I!P`^CeSB_SF&?+#y9`I`*8|J7D7hg={2asjkI$3cm+^ zac%YOl4AC`RD0c^am#JXLG-$ls}bL5h#*EJR`J!zYSfx_c1vHpj@&D86|12MCT4$Q zST30KbE+GX17l!2>*Syl+T(tC*u%<^RL;lWX$TV=(oIb9Mo3vs^R4)Lzq=RvmN~D( z^C_E|oQ*MvZ%y8f6P(sqET##EQu_*5Hu&CX?$;?ZH_S>`HYkJ%{H*&{I7=(_bueZ* z=Bj!a9A_WAu*Of5Ub|^ka~b`yG8U>2eb)RTEaacGqnNkMKOx(i>3=hm>lx0*w~&uF zWcGSCOP%*z`~0{b&a{J5EL*?|G&LvKDbwz)9a?mVWE!R0?|p#&mImrvmUNjbTyKia zE%c@nTW@n^p>?!fFHO4qNorurQxuYYBXoq{Jk#L@aoZ76iCtqeKpM@U8^@Gu(7Jw2 zR0}mrjo%6sB7{n)fwy($^s=`-Tt4*mlvzE=ejgs2O>?G%J4terVC9H3e+%W^wb0Ta ze$V=8mQI6PHLpj&YfFw{e}W0>pNtFBu$b~kVU>UUuI~2z?PIh`?hG*BDbn8XA1n`^J;*^-V6DmpBiR=B9v}g&f2l?jNL1!c! zIx+t!Es;bdF5fmssLSLENWB0{eYfHe@D{8B*Hc?99J`_Ikjat#sDb53)9W8qw5sjx zXTQ#|zNVH0X`^HnHhJIfvfhqLsI^~XFb0ud9p$y35rE)n=-%@_jGEAeL@KEerk;vS zz{3S#z%YLQNXKg%bJJz%w*eLdbM1qSf@DpAtLA%t%l^y<&puK-Tj{Q=m9-nm1=5<< z4HGsCiS2>$TxsRz?vFWVk2Z9TqOhzOG)wdA_Qxh0U8F6irKaf~q47DQhi0|95f{Vj z#iz~vPD!_ATIP`L)bpuilv@Dm-;gj-9^_)C_Vd|87yy5Za<;`*bYJUTh>)l8M{BwN z()zoBZ=DN$cCxlET2U4u-%u)`&Gqyz?_Y_Psr-uBb-nw_uWBrg*33L7H^G&MtF3<| z?g2AHAhJ_$7(2G>0}vSjo_C7dLbJXaUxBG@ksrywBd)|%p52*uAX!=YpQp%^d${J! zK(ZHKijNr!@d09EGDV=t7SH4ZY&?8WeA+a>#k_m~0=Z#-93a`IlzvN2qAxTa{>9 zS%p-ygb*ep+Ff{*rj&4zCW?rs%lMBImt;dUFZ^yee! zOygex$uQ4wY1|I51!RD_+l72zxz<;${8lHo*EO2)$C~)Ha4_QPXSj(Yiw*916#Kjq z4lw*rf018rl6l8%eLb`qtb@17@@n8{qR9enaNmNB6!Wb(Cfi;=fjs7_$YS1wz17Zb z#`LRFNIMlH9XTT(0f1;_rN8Fvv?TVMCboX0FR&M{xRm+?7t^S`mokAJl_JA{nS8JP zng70abW1dbF1WcAjakUhefzG9(y*)J1@m*KBMZq#t$e^+WGzS)r@cAH>)J4_)BE{d z;lK@PT&c3A9=lyQcjF98%bi$7!Z_7lKCGTMm>O^Fh@ZzVW5VjYGV!n3rbS%CPrXPX zsu0JQ`OUgDLp9>%<0@8OWYwtdJ0c*}!0k$cCHAb9j|z5DR&hZo5k#-GQJy&Od2YnEH_nBI z+&nOmwpp_h+}d=D9c{$=LrTN=Z5#LXdKn5|`_i`waA$b0zvy>v6Q%j={c zcU-5N*qyxGYozy=b$GaGaR}1_K-c2Ha(JTqnrul=^YPIAw#db~9uW?VKxQu#j-__{LB!W}k6`m0H;SwZ_1_oXb#}=3=e$UURD`Xn!KLM+EEn{`&&0L$X2yDR zH#2${MPnPE$OM~hq5H%y%qynM1D0@^p6m|2rJuz54?G&7xD5*0c=xCP_Si{vE%k@~Rdw+XkTvY; zCs6%RfR18Qcg2cRV>WNuZ}WI){|i!g8@k0)mSXV#%w@Q6UT!cAyxTn>w=X+SoS`>? zJ7^@HSEEz)P07q|ceo6F7@SZI5mf&?|FO3JHJwGLAlUxIo!X5~S0ElVK9xp#?}ObN z^-*mr^b>XPK{bV^f@U2l82JjpKtzuaQV(`>hXxupT9ugpp|(H{R`#T6D^Q`%$v}CV zQ;*7UK0fHqJ%kiB|71*P@;y|tf7CVFoydRLPYs4#dq8?1-VwhZsFYYD1oUH!PM{GG zl8M~jQ=SVOP({+3$0{~iSSs4o{g1$M@WjgF9sT}2EDZ$T@_2mniB^s#4Z7^q#_Q|a z9^VGJvuUS{tX=gxVTH;a{oatlzvsSFf-$}7NwxMs$jBwH?PYuHUOa3FUC?5VMT4S9 zV$pq@XV4Fz+A#P8Wzdga_8q`g*Up(|TneKS#Y);{_Lr~QfQ@kU{%eZZI8(uo$Xbt5 zP8I}XURlFUUBK1UIH|okOjNp?m0yD|8iSLpziUUwz}v*L)X2XvG7@{IkS?UC@zn=m zHV!$}FiW{FfG>)}7o#u1V^{f?&MzMk=Wj1`e(=IIh|N|fPW-OB6(fW@bxlhy z(PzekLc0WP0FU4`OTLXh83x`qt|quj)Uk~ZFA%1Kd{`Q}g={KcRthk3<379vHq2dDD8%zG+YL3Tt+>g=$?ddelXVHUdSO1Gc0zKNVSs z&10p9I{mQKy>z!dT91bniqYVF&i%Q}T;1u^!u3{~FsNTj?sN2-2rbA$qL%s56$zicHxz0nEkZ~5gQbrm4g zclw-bsK_)nh5rJAfjTX=V|%KpI&|4Z1y76S?%)$n#`^k+YsleV5@Q7TG5|4CF+ zSogqlA&XwVO7(dwx-!=^3JPQ@dGwd2Bg(;;8t}Ho(*AA+eN+=YDR|HNTh<@*bWp=< zx9l3uhxYwTGInz{JP|TYH_K1Bz=#Ef6ZO#!uwY}It4Z+D7@t16;0bhNlxg4Y4W7_P zx6lavp=!vz`_v_OJ5OpyS>+~Z$o5YYI4c_Z6Fm*L)k#cuLSuS3nCyMDq4Q%dZ zglwRMgAQ89U7TH1mk94|?`8Pmd(Dv&3-m|egq^p2RDDpO@s;S?K~~kM&W6ucghIzt zvDf9!^fqvR+snK=gwP}1Id@~rSp7b`Kn$q zEz#NQgw~2Cim{^iFcKmx@`Vpr(gN!IqXiGjsEq+0m=b^>N{NyPmgx!6S)Tb%v{e#bGN0)G~E;dbr%SvG%P$ z-3}o4)!2ztRCYGsBjUU`<43cw2W6c}W&O$SuQ=i&lw#jxcj)H7DG;+wkcs6bSIglpjM82`C73c9z+3ckG%ju)_Obrm#v5cgwLeVBCoc?d9p991EW($V^i z-pDhLrS*ojo^_JNKA7!vOFa^UOYFpmYUtziy(qcxB`VXd5nYKm`;H!|L2s=iX#IY7 zdA%n2y2QE|^+&3=FQ^6_vED*va0p`NTbvthYrC}()Oi;K{l0d&>v4ZgcT;q{ z*d*(+9D}&x+gxjRcZb!35w_9~yEfAPx0>^fo^R)yK4jv)m*aix#Q>n7li^GYpB(7J1t7Jb8xF(o!EuGQ7y&wQ2yQVzGPF814MjOdkkY$Au^RzOhGHDA;Mf zWnu!ugdGmSho@!A+$4u}yhe!C#g9ZyvdM+L+DJlX)gS{}Z3Wx{rQ=pvl_X zUfcKz^VbqZVGbA3S3PNN>lhzK%J<1#-tllEg17U}YYR|)9rYJ9)WHc5Sd4JbBJ>G^KaPY%(iyfb2jt;zAw;1hMT8d}vStVAD&@j6u4;*SR}WI3$DTa@IC>%P(o zf<;3ptmk1vQ5%=-MW#%MqFqSO89cEpC+`d;Zi%xg>4L1>euPeOIjAU5x^OjBHwKM(l(_()-sb z^r#EABz8~hW)6%!%f8SVz|ak%1g5r{6OS)gOW2%a=$01cBaLxUuY60;>8PdNtPe#< z2@iM#%3lZ9RGK{3bh0jY(ORu$m_>oS^3rGlz>}sx#P>j?XvTg+227ErD@weg24XJ# z_{ID(c^(*tA`UE_Ma+p^o?pgMk=1QKu z;Xn6MI!-!Sx;ct_W+@xGgC)sa^a>;*LgChNp-RS+N7q)O$liB;Euq<%GZQEWxIZC_ zc4}RNl}b?wum4cU%Dv={ke4qOHG(Tw&A?Dx5`I*dG`=h?32R#y2iFhNi2EDRvvS-$ zOQ(x6QEdFLx?`F zE?2F@qum$1eA*WD;sKAT+!k;_+TynGOUP#&K!mx(-6Vq{?M?7I9FxlOP(Jd$Og{Lz z&$;60w?eT*Otw+#Lrrti+{FEtyL87avOC<2Zjini^7Do-HP`u)EU)48j$n>p&zZUD zPv+o?Tf7l!hW9B%xDKW~drZWmn?HT_djcFcG4?~LJPhEK$J)Hw9s%(3VZq@#T5 z@p|WSi+ojz7WXGRPK=G}9jp_T2&o|*@^qBL?_WtbV9y({TH2ZkP4X7qh=w;iY0ldJ zq3J8wqH4Qv1ztc}q(Qo+yBPuL2I&|&r8`HZq(r*ATN)$=>5%T0?yeb_IDF?i=MU_C z?O5wsaYw9MrCA64&!Uo>w+llw2d7U>qA)_O|5do-EmUDx~16!|)EW13RIvInn zS<(AI5`pi3;6G9@DG-}EW|jnvkd0VlVq32H`EZ{o8HN{%&h!OHQ$hLgN_VOG`QnRB zJYY;82YwQ^-zTSh9F5s!?fZWKag4iqp9@0=^_^bFGyt*E`RLzUmu6}V$^CkUO7}Lh z(@n&ueK({1`qltH^4$?Eakol=`|Al&!2oAI2RWC-r|A)sdu6?((P6WRCYd|XiH?Ki zmi=N*PuQzhp(cqj4MIxl`?z4>-;-q?6%0;{H7gL zjGYegviM9ebnZQpUd9-8lV`(zeaJrX!xbB6r%*WtWPH_a6Zl+yMa(wD{?ueR2bcNmx10j^%dv?w#;t#fAJS?P2}=0{ z{1w}$-JKW&m)kdoLR4XjhEPV$`atGKivftVC?b@c5h=EFHttFZbHYUgto?$Zde8+P702Nm$EhIw! zA^UV%&Ei2FaU$BUA#o1Vktj0rO^w5|{=Pw=i=e%@@l%>ks0J($`Z{>k9~JOb5&t=| zo+WQ7Jpi?|zqPdtTQ3c`tqE;3TMejF(aA#!2Eh`A>>oZZ34!1ruD`tzA1%{e2n|=lU?vQ?n3XkurS5iqj z$dB}JgW$=J8S$ZoFAQ&KNzRHQq3S~s*o4Z`?sq2i>4?QL>~{)kM}7hg{E7&1zs0l_ z-=3XBH36uQ#ZxU4fiKF>s}Uvl>l}1{PNe$vO#+nJ!Nb8VbMtL z=;t=L3*plQt(Rs;_f~vO^9N+HQQLZvOA5bn-RzO~nqSK2vHSnHv)&R0iqF3YJKTFd zU(NzAkj52=adp*+M)pG2Q)4|c3ghOTwhcnhXsthxWcr|#_Sx)(f{l29vq%r66FN_+ z%UnY`z8MXJf9NDSvtb>`s)3JwR6y{vbdX9UEgp$Cu8CUiL?iUK3Bo>N2JFLdDv&{|;mR}L#lQKZBFuKs>^ zYw3w6(#ktUJ1^iT7NI!?lgZ>s&h|qJ_#zG2%bTf)WMQjpb1&9IfN*(!E!Y^G@Lc}>gn3}LV~;}Eu%XixNPF6Sp$TpKEQAe8{E@Td z{!4xhI4xKV6L_l=V2d&sd^rY+)d#pHUrE4l2SSIph!G+>h-@XW5SEo(6=*0ij=pvR zSvI}Zd?WJBDnQmuV#R8;fKIC*3EEcb)8>RJ3IzV!T3|gN;d*CY-75RXsiJx0Fh2;{c zhcbI=XoMJu_Jj+3WrLliKb4RAZKN%%x-jl1`o5hu&{y*Kv{IT+bHk3gvPuSh+_`TZ zIQEo1UkM%C2eJhQc}riLxPmN4WEeqgapI4O5{&Dws}Lm{{Kkcswu^VyKrYuMQKTB< zGxm8imd;y))^i7e`z_9ie%cwFMW;k9kT+4$K_)r;j+v; zaX}T=A|4jwoPV?=S)+fr_G@>@_kG2tSDKl8lq*Iy?cqL3$(E{?0vA%A6bIBSiH#mo3CKf|R7e zqDbeSS>lvWb?y!!GIexuO)I#YkRiXDvAi36^8v&?cR5?K#iSo?gbuB?Zp&ER${Hl< zYZXfful1tAUR(N`+G%`Vw7B23xAax88x~?uUa6<|-;|}8DeuR3r2j-E=Rs0=<=5>P zOtDt%cPqOjb7z&Xro9IX$Jkfc`BI`t!+Zp>P(tF3PH#TL{<80c8{r4~&=45SVEnbvu6!siHNw94xpyb5Q+hAFccD&59S_mtOw>UNC<7pLXm! z|GbfW92n2&H_!%iC?6gDQg`SX#yBuBW^~T0|Bmd|&|f1OyFK9UAFNnvzn-g+$v-X6$1gEoud>$NirD%!=|TNb%M@AX@44 z?~V1>>tVpF-{d^1|1$0;DjSz+Ry=J-&&qwS?eD_IMXPhzXvGMO$&g>mUd+>b$AFng zbi}TPB6o#*Vi~hz*5_ZAzf6%5^LqBK4G3Cl$E=fN9?B`)o3!;5yD*GO{Eb(?%x} z$yTbTUCZ`>1-Kw>JNhfPfnr`R|JFs^fz0>W+gx$8KIQZ!^=0?k0x*@~1`VI4H4F2F zt;=k(LbWj7@$fMmQ9&PGNeyEbmtNn}dNIau%;dI{5EDNsk&3?Jo|_T{zV_yPT0o}t zx~)uv;=e_hgr=l_^nK7O1M}^>b7%TaDEabf9iZ9AJ1h}pGgB3$TdVd=o%Ast4EcJlsitSYj zgkz80X6|b84btxh1=iCR-(Ll-*f6Kq7G!vN>fV?mnR^az(iuu5Ebeo<%c4+`CSMRz z=^!~sw~+>z-GG9qF=}WA%n>60UA-Tuw&IT{$1R^f)_`nYm(TP0ZnwN1mf5HEYFFn$ z4g{ow-?4OXMUp^)np)W2`w$|gsW!QrU}L4m&DWUtv+g9B3*hghu-Wjp8vxW<^f>ad zpRVl5PT5TyVJ`H_z0_|DW^EnuB6$ZsVwqdTmg|&cOpc<+Cep9iqjdwW`w2uWn5*tI zSemjRt7QOfGdBHlK*$@vSrLxTJJeW65i*>%YCnI3^QT_f7Pk1I+Kze$jPPzCy%9#M zalfUnv||tOO-X(C@V;L?f_Q%ap?)2a{tUPjoP{I^aDOi435B`j6kO-|)_7>d1J%iq zD?g}nz37qfGL$(t+h^B8{0PGUn6@j3iD3W9z!+I$WhmdY$sTlX80;Vm7Z8=6tOp<} z=L0+oLmofxvTL2T)))v4mf{=SUVEjHNSwX@gbdND!*XHGb+pA;yMdg#Q-YY4t9U?| zA|Y$LieQ2bWIH^7Z4X#k}^+ z;nGDC1R^fwo_FQFGEM=@VzuZgJ~`O~0d|caver~g6%{)gNqfYe05-F!KeZ*z#2?EM zQ!nvI^RRjYLHFgk=h?Sj3fkSPH!n_PTqn433*fe04ISM24CUaJAk{=G5&VJdqy?es zOh4)%6R(yidC`}qeziaxj&g6j{GVWPAsg{X`5$!`iYZZ?D;W;vqr z43^r~6muYiQM}=@A^w+=A08I`0gNkxOFC;$aJL<1#kQR1BND3}W2ePAeH^`wpF`G@ zxX1%016lK{ws9abI5#EC7j4jg~7lT%5%*Q1U2k_idZRoX~g!6@4A+h;plQ*EaFN%3&WS2 z8sR)+buZTb3~q!`!)^}4!j?JLa9q3sH6O#&5Y0i2jpKx?Vk0fSgsKvlbN_U zwqGy(t9FthCCv~ou`Js-y4!2c^Y}-Lge&mHPN?GXY{=E#o<_ep`H%iDT{E5~&|dop z`sSl96i1WL>wPjm0u{+o3Ug&`%cK6Cp;M+IF}wWd++e&J;IlgO+qz#zLUH(xyoxS0 z_c?OR742?MwAY}Dn6bq6DqRJ|9p`^9NA50&?FOvT$(~q>9p83h^Q&^BrXj;uy8QR% z*^?%fxy;(dQ(N=XI?8FWAD!|?M(Mp&H|3q#?hG9J$DVsY0ScKPSPaAbt{fRu49*zK zPi5&-xukGMRq6T4h%sPdeRb$QH+S)jd}l5-|4?`hq1N3|=*w;d2f=9OqMNpq?9CB` z`nXfK)vw^1!ZVMLm}-EKGak|Jy%j1KKP z5p;l-fG{%y>2oktX2F}Ps852#L{W|_AqtK}Rr_i}h#Ol8*aY>_K zdPXuC&1Qx1;p^xZLa?HD9$hItdwR$nIgOT@Yoe}u*P&%eqlk8DnD$6$FM;%MJ%*^q}Zi)BeGhscD zm7kp4FK_t*k?7wZWN-OT{am7QeYuqqkLYl2%lqpCPU>aIWG7`8=q%VS7#+1H8kG+HX%)A+JTOcMLbCJXL90ZZa^Mk zs8ocE)?UgV8;RLRPRqFD4a(m9uh*O=v&2KWujID3sFiCZfp%WtTAv%elk|`RJ3Ls zcsBJ&^K!kZK8;SZv+X*ne?*7u!$n@`lyTzYH3jc83aAL2;T$x1B|%|h>vk9P45X6? zT9<+c4TGr=!~9$+i!^szlPXaqY9#jrfg8Up#v!_RTyWu}R7+1Pn(AnA8v=dS zb@H)X>Nl^UOV};43L3-=Jrc4147<*>0T`0@VTylu6Bnyfx42r+#w{+sZ4ukW7`@qf za%X?tzq$$;b$%+=UTCtNdM$x_6g6Rb)tfmf7tA?F0DL2lII9{imorEB$t{IegN!qc z+FY!c8+ zeR*8WNJ)od4AvHbTBIR&@7`q5Z0`Pm!&KvaYl5y`wnxpA?gITtQu-hSoWho6ETA zYrqqw#ZWEhtXZT`8B$xyb*(hNV-|&wo9?8w7E3~;e(c0S_j>8vLcR^*d(qsbyTu`X zq$cLOMqI(Z1ZpTYMHYX2*L4q8SIiX&QsDk+GXlgs(pR0TfzKLkv}vK z7z0L5;D>48Q&&ymQ%B~JiQ`JMhvT1JvA2P0Hxb>7r};M3c-GvwUy~FSsM?>ZUq*eK zQZKUW$t$p0OX&Drg1+s&-J@ixK?KVPK)I5$bDeU??fO9+fxCUtd4UChZ{?r((@s9l z*s|ROWqG{p@>dpTX{}0~E z`qV@mfjO@9ad{Pj({vN)ZTlZb7vG&djQ%;k4CDrRR0GwnUfiDwhi6ezY{$DWf7cbR z`9XY}J_I~ns>j(vA|CtifiSD~?H5R4^YI+xtxwZ`K|`8*MX&`%$(=1-=p_|g9@be7 zGJqLLQ?Vl>qiE{_J#|VzV=1HCTL}18-};KzO@$Sc2jvbZ8vaLz*lMLX)N1u?-1X|& z?>Qs!&`m5fXi2jXY;ndXvV%9RcT8k6uBV}9Wtf(&)2H*<&6H?9qf(agxvw)j`|b@u zTm&9Z+VOL!fC+{r_$d3%yyF2U^o?!%i`_w?=`%XW#yJmD&TI&HfV89swNF)UK%AC) zK6_ReUD;F^Nh)9J%sQsabs$PxlNA_*iH%J5&%=efqdcG2`p$v!**~%@98$M6%E(ab zusmJxqL`omTbULrL{{Rc@GLo_TF8G`(yGMrkoTt2Isg=9hVyR{lp??p`%_M~nW6S! zp&VoDxM*9bK&YX!_pd3y0|Qc;hfXIhBWu-g2U8wdeE*e%I>=F8Si&`hZ**&t ztEwqycSa4dG%qsVt9F znJoVO_Ay^YuihN3eDsz!7e%iS(W-90FvyL@zZ4B2@6tc2JAoCTcu-Zqur1( z`t!`j-PEUSCvKQj!fkP*uI=(yx4!*-W&{UVB<}-CUFe^-jcQMheb+gBIIzRB zTrcJ!`WQK9jUH|fq(RrFmgWSeG}@Zx2CCm~f(QQTzzA1qj@oP*@OH%d^QAua{uZJH zVc1?mbf1%d**G*s-7#;TMv2_zEg(~de)-ou@FPZgZ3)B>rihzgai7p@4LkUQkH?py zSo8hg(?0|yBE#pSsG-O`UCoFW8(~3H@9V*BXW+B3=ljxEA99dCu~};NlG3PWo0$Vsn|7qgs7$Mki{HcH6ydX{Dlg=YOD3{ZmTus>Q(Mxw)B`(=}i!W6G)i58?-w9x| z_Y>+_`h^}wH>h!Pt;jWMc%sTFl4N*&ap1uNJX1eIIQY*&l|Rt`dTXrc?yw*oV2Z6$ zXhSj)qYwazEu-9?Nthh&G$*s9d-Abp35gZVk$4|yNEB`ih1TG2k8#2 z?DOm+0O@IAfiEkr>XJNX12s>yui1iLSPN>5KS%{_ctf%Z>gCPZ;B! zgaLjO2MfKqabM!**<=v513hg236qgX*V;(pv70M)Dt-r4<0Tk~*#%cD6GZgcmL{?q zWSo5$6o1>n(9OO-wMrd;&+pG2s{9%rTJQ{tiIF_|uT9|wIB*5ve&1L$`95RwqrO$@ z22saHPU+!vV!!mM{|3f)h#8Ij=?iEODXyB2^Fw3>XTpJS(I8Hc40|-Nqyw`4s#PkK z8%1SD_Cq3~FI^UQc=6RYQ-q`neCu3D$a1Gd*%FG)CHP~B`>vc|{dC)~-NN!{x<{`4 zZniDz#Ij%Z@nR#UA@);B_~lK~cS4xi)lxB-$)y{%w*`|!J>4#K3ow-;kv=Cxx?ZP# z7&phZIBnvNwI(q7n3_SEvatxB{ZzWIoz(Ubgu0G;&QtK8FiDh*@U!ZGHUR*^#EBB} zg_)tjvGDcx0J1L(w=aS)Uld`@ILv>VAat>dQsSgZSI&PZs;QMDXio zUG7m(}1`s!P_^s!$+&Ru*y8W zkwLX*6xOkJu)l9fE2eTzRjDS9dji_zk*EVt;yiS0*zE)m!Bof40 zOf9LizlxeBXJ$H#%r6sl;i;!!EG_3Y&>eJb!FO(~bw7^JSNa?cIeO{K^?kbt;I^hQ z1o!U7Sfd5H7f|Dn6eVvI@7Pn@%gnUOJr zI`W!)=dmImiWPjTxawe5u*71lP!m%0S zF#X77^!uYx1tMzMfH-7u#=;`TMPXCi(uO2$R zKV3TgoS)u5qRr^iBNA}4_v-~kr)8!`{ewbk^$VBDZ%#Fkhw*Zq89o{&o<4-UWw*`~ zV|l&9>u>7va)Wh$RZI2Dpt&s4h2IyKl9w)yTu9veh%QsZK*RGTdSo(0K%vXcj$TJ| zZJMHikgMtH^mVl%=hMa7?ZIQ7NE9?oLs9NV{Tfq}K;KJ31rE26=lgiR_#k#8!&fgi zi8p|!MrkuDMr!0Xt7fP|s4wn#-T(DYH~H1`LZR%IrT+89L65w4e>0}r+`dtHr_KDm z+KCmAm6%W_G3s*g5Pdo- z#vA_K;@tn&z#NNF@dvg^n+w)lnMRZU?$kTlm;FtVkl6r8-s44Gf&BO5QC%Yq$r0*=q(Y*lJ?f5R{})xjw=HQhea_r!jf#?SN!w3nzLa40g7D5wOtw8*zMOJ(ZWeRqy? z{RJ{%racVH_eGcTql>R+RH0?gqqC)!J!AH{khxCHeBRH??$`a`@^@Tjt(=@j&1~a{qD>%w=bDse?EgipSFAbOrkfHRV_O1b6?s0(HD#McQ**x~%~{(jfO-!k=MCC92kx{n4`&|A|dUQ$I7`SxYp>~)S z>F_m5?wP1kQxEa;C$hf^c1*Q4`a*OP6!-7eAbMiUQFlc;YdckMDGW>~6(CyUN!9l5 z^9Vk)(ZZ|j1_P5;DKF2YVuqapk(X>bPFKe-AB7L&90-#roi__f{CD^NwE!5Hhhpc- zl(#<-4dn(~9r=AkPB)+p3EWitUD>$JZam9})$-lCeXmYzJg@7##DCoI10I0}2)DzK zR|JJsRqt>9SPG>g*$BWd`1O@`5afGtKdW@8i&W1yu|oHEG)bs)-2srV3*=9Dfhiob z%c+gKwARy`<6Ch*jR)v(GJampPkT1aCgIFvj$u1sg$916hkbE%g0?ZiZDC@_|Dl!_ z>r9C90-lU?1s{(V`-y9=*iv7}=$D#()%87;T1CiHaHvAe3Zt1()?RV+OoPu(@zB#~A` zI(a;Qm!$iCrVvS_1OF4;`XSrO2p(IA1tP8dimBR0_LM&Mr22w3|wpiveh zoVs0v!;O9U+`CYyYM-l4YzcUT?OmM$;ryJY?OM8qsl}!-esdZL9Ne7@UB?q{_%10w zaQa8vz_+#T3wj1ol{{T<$}00$IOSBzHK_Xmz@S?8UJz^xfM3rY^rH6FCBJ+3X47M3 ze>=ngn9B9DOZ5<~o7Y7Jaufx4SyV>>vc4AEJ>zq1c}+=)bRn}Iqolh%2jLnN=oek5 zlkVeOZQ=1cPi=(LxyH=~dU_<%kUs<%xF1ZN7i+M#o)MskSnl7Vp9wF9X@b;ZUpd+A zRbcg3SNFeYasVRuhTj!uXbACMbji89b<2CSuE?Uqsk8o&;0xZ9qs3CR8klYgywAD< zZXwOv4c$e?-#jcACyZ$|Flrf8qd)G_BHJn4zXz=Wk(7CvyfOiwiShz(j$bSWO5C3) z>_-atbR7Ow-)2EtvtgwrSzQ$qB(75EDXGNUPYR_oG&jS8|@0&r3cEtZ!&UFTqnlgZfQ2{*4 zHU%V3f-4EE(~Nk@w!E^+K={Sa^A%ca*gM(})WuONO>a}i0>YizAZp%Htr(#KKUkOd zB#g#oa{UQuP0#>r`2UMXTLi5Z)OsOTTrrC{#q%LbXZ<}@Dz6YrtuAu>21%I=(m!ad z1vU=g6H2^xeI`{VY@ClnD8f+=Ju}{A%_vld|Cjy9lpE?N)^fYsRr`o(?A5`7u^*2fOKR%l=5-fD;_cV*Jl%(+zUug(N`5=3^>x-?-|m ztUt&W%8`kM_c@0`>|&>9O+o=ueeNt>S8dGDge0f_$a~A($caMLr5}Y}hjmYL@5{r! zATfW#vcteSE&;WOBWv=4UGHyUnH2UyPB2BYrcjxXZ=Xd2YE}31F3jiDNUch5VRk!K zNuIyr0g2UUtH`u#+GbdNs;A#XR!b`?A^TA7kPH{{EOMqUo30q|;*ENTK~3n}hoP5| zqx*XO!pVov%x_I|O%%Zz5z*-jK2p!{t16_Bj^soz)b<5oZ3K5OpQM&c=QeAJF^bGi z`-~hg_3h?1?-G@)*ISbNL0O~ML;mjV)?BwEtUN!&@&y_a9$$L5X1H z*y!{=f6pvxz4EQ5)8T!|8`5!4&0T^xKAZy{+$r_INnDYd16l#QW{S!Qt%9O_0sB_s zBb>eyz3LLdEvx%qW}naB95GRcx>1JCia5bYj`?lkcIR2B?6S!kh|D{`?J+b}-kIbL z(k)57zeE7a#~2N{?|0d_G>U$w9*dM9`rCy%2*w)@G}#rWtzvh&*|6WtTKC`N8|GN; zKmKP#k3l6&(nlO;1qUM!!7UPdQ1|^*gUGqz{K9J=7yqL_QGF9_n>8H<&+hSYG^XUv zh||uk1~a~;F^JAfc3T{KeZ$IrfP7{}G7bhMxIc&;8k$;sPD(;PthpwC-7C7vd+cJZ zS%O{IBmLwcGYKGKjCW#mImPYeIi4}Nu~dCLq1U%p_U!XhqPyPbHrHmX65g9rN%FD% zFOnp;yygn=3880<#_i0^aQI`?nj3h-*EMv9XsPssm?q>d@hUkV#+2i`>bOmvZe9lS zo(uMJh1}PJNO~CMhL*tBcx&g{9OLu)3*$j8KmU0T!q*Q0^*!}o8BA@q00Ze4X!_%J zED)A3T_@E@`QPJ=dp{lk?=UAw!~c10lSaG>Uo#EmG#w0!xI-iHEs&yNatC&(hp^)i zYXHvgt|EAXCl5fq@Rg}h(onzM7d2iayutN~SzWrYjPJgzI($TVZ z?D#zNq7`Djf=40F6nv}-#1|P`zD}9!fbRL^<4OhH3$Bjv(69*CnDAK7QNJgkXx~I4 zrn^o2T8Q9%ab)EjJV<+tk{3uS_uax|N-6&Z;t~n_XnPCVcHsJU#D#{vq;bqeTKSjO z{~t=~R%gG~d1Pi8H80>9I@Nc-1f+d(Fql!4h7q1eim7x~+x>?-D1x}~+lDj@uZg0P zw{7?awO>DqjD5dLy9%VRSRMQIxHqTCz8OChl`yWfs0@22-n>fcQ@7Sm-;Z41JCuzd zJ4UBK2&?%1_VqGwPcByzHlmVr=VklrAFmd_$eouEa%SB+Za336xGe&Pw~WC%x2d)u zffaRit?fDVEoTe1c1k;+3p`kJOQ;p4)(tC!l?N-wRV^mh#kNgehyg8?`Mt{(xq#C2 zom73+kRK?%9KrL}s&RmIPD(G74}Z99#QJ$0@5Y;c8Uzi*+A)=>&v4>?$Wul;-nw(x ze!8FTA{;Ax%SxE7?Q~3pz$FyD8>V}~n45h24ZfQ5x+2J$FFR71-=C5s{F|Nv-qF<% z@OUfqTY@lcU5>gHot$&fKubl&{~H*5#IwtDi~KMKG~<$R-FqLeO5|mVT~M)B+LLk$ z?0_eJFL`Kyq_lN3gOjNDlsKq3ns3rm<9&oy7wc2_ak4T>X_FheTfk`_*;|sxY4>Fg zogvsYlB}f=U6)yS%Q7OCQ{mNtv=IN>rxjB8PApHPgy6JE?Lu?SU#n9QwCdt!_-e;2 zE~30oM@Ogl@~V0tI+f;rBki#>z#DKwT)Rq1^kZR+t92`E{YtLWwqXAnO;{#m;tmP9 zU&>dj7!paDNtIX^`8^t*aonhFTvbo;WM*irff&E>Tb>8knmF~%X#%Jbh{s`U;1)>K1PJq@MVd`u>#G3~`Hp+V&5?x3*=AJTF5S_)0O%`<$^b z>yr6wOUT+{c3A2Do|h)g_sojzT1MW<>F1>{4kqZFzlf^NR;?V*BHhwElf^u}JU<@Y+2t7kMQ+eY3m=MU%ujac+P|c?okb_`C zzkeH4JD0DZF+Cb#L;d$DszoPnGFyaay>`Pc4kZDAfbgpL)nhB`#PS1!H@)D)QZr}- zQp6WQ|D?SDf*&rTxM!>?G>nZhLppJ z@}{{4t-~S7)s(kgXPJnP6y8Ok-J77jI#=c!tIGl9La6SKrfZmAaEu#7`OpAg2*dE> zb{yf&B~&*O`1_;4N0Ov8X%^0i=|Bh$@Xqjiz2c^4jeel#%)MGh0l0cI$j3iF4(pgw zIyl4B&;9*hFOwx_u$|GOIca$0k^zw@~TSEn7{+C1=-t1XhS zsx2S3SN^wMR-q~)IhO_eyy5o0{YHN@YmS9ZyBtQfbVy)00fp)L)k5k&epb`k2*KXc z9)93QJIr@0fJamm;?u6KVB9aEunA`L7qd?vy`zQl`U3?LPbv|HyO<%;onoMc{WO#; zhqkW!A-{=QE%>xnFdu$)*zBx;K{+!e)LiwR)2#91P$g9#!!>}ywSs-kMzqjO>=Jg% z#oaY@zuNt{NmU0uF>v8yqILHe`u4Yce*?AH6F?E2#sj2BTLbp5ym!7y-1EqgG_Nu4 zm>t`Fdp=7k?(IM>a=}D_L(6Mm->rFK>v~w`oW9s`m`i3Jdc4o;^>D^}F+jux+o#|e zRT5ZTUtc)NX){53#&$?p8{qFxMPv)EFTkI{aFh1iNeQ$_vik5M$8q5`58V_$RVHp- z{;>BmpxGVn$*LDPb^?~YwU-eR z`!y0-3|S~dX`)L=R0_%bz#8=zuTG%U+~9wd{n;{Xmm& z{rethW4E_&z6u_Dkdlp}hiEdp#Qpv8D~aQ>j-Um>lbG_}_{48+V}!eF+MvCN`Tml( zNLJ#rcw|+fp3b{b%vODFzGXY!Wx48h&d7$%&@<}b&C82Y__zY9jjUs1mkj~78wH|i z)^WADQYQr=rIvJUS3ztExtpl>ggcwUi$5j>SNz@AD0qurV@g}8vN&g_Aqgf3aR7dT^VkV!c&hM<C?X&eCaQ;J9Gm0+Gj{F3!~UJ@gS7kCGM zYM8sCa|7+EupR~X{f;52D&5l?b0ppW zl!A|KBTkTO&I^|wH+o=)Z3gyo;Ygwq;^Qi65w0KkNhKb08)Kga4XT{3+|*r=CrJpD zHfc88itmwV{*r?nXn&t&xRGh{9?F?K$4Gx7YSOw0Kzmr-TBVtz=bv#W?eZ4r-KC+F z#Al$8iRggZ0(fk)Tkbiuc)l(mw_%+e!XWTyiZqXfxv4y(!OtA}TZlOp#U4>@J%-Zz zh+q?H5YYrIAdZpwNdz${-FLiH9@j7s%RgRh-Nc&L zWN`u1JqU|1>M}u7rN_$>0H;n!- zxl<~y-9P1b9B@xc6W-Pn(IJc`xyhCy9@oSggLk}Wd!Y88|I2y|g zE;kR#h}s+nal&RI$jphuazcqucc&<6^8ydpxkNL{1FU=u8>~7glzBQ~jY+qkmA?P+ z9{E|t8}cOBAdj?27_c80Am*Zp5=>MP6sYVBd{P zDMe?pWzaq0{>(K9GdVRtmu29w} zTanUX9unxdlt`*y1!p&hKRpm(Z~1(L?8xKnS9!?$pPFp3NY~Aq8rBi|H0(N5j9JG^ zy1yjMzqlfdEhc4QtBnTcnIsxXYSyCLHF=LCWIjUASwCuAQ~ZxbZEDbO z1G`D=!@MA0yXFRhCyL_RZwg22)TH57BUXw;UFUR};xb(;`)_%+$u4GSQmKR>_nA{8 z4vf&7>J+5D+SAXA0p+P<8l!{Jdn1%KjR}W5tB_wqtqGH`ZD`!(%qkVFLnGfPc(uA%mhno z{`pOjAok6>@WEeK%Rhs@?7W$fZYB;@bU@h46cJUh(;zNsVVGG6{!k8kGOg9W{b~pT zcj(e$yJxOKR5Zxev-(pVX#XMV_fboe@;NAp`E-uSpj|xH-O~X(Aw3HE%zaM_t~9o_ zGf?^bn05lfcZU;M29WTHv19}yoeGH|R;ZBO-f`#?CA4i3 zsjCh8<6rmxwhN;CODnOT+6P}kxGpEs!2F1sk}M;HEg}|e;wPBe2_)=l%wsDPubD;Q z`$9@#mvDW51e#HieE29%h#f1z%1wV1-PHRkt5cpl0`i6s_U;{i^V8i(Zhem4Q&Cbj2A}1g(*< z=Y(NbvM_7mli{~m|bzYNW6FiMW^vZ)*nL|d&aL59EIb=b64w4Q$`=gpMDJtTIUX7Eiq@3#Mk? zP2I0XKcx-uFvfxM*95PmhQ`|Nf%5w?0a8*EN^n%szh6lTIpb3jYJQ6_wo0sPX{hd`|#OZxrl`dH!f4| z-EaiG^+MG`YjUCP!Ef;d=?{_0lWHr!%!h2u^jS{A*4paZl(gH~lT=QpNci45i!9m= z_*wj7L?;8bTikLW{liI%nv*@S`mxDemzRCK1_(npaV?|&)|qvVWXv&gnzXKy%_d@g zJ*jC5Isu-q2822n^V#OEw{NE@MB z#&w7?V;Wm_Hp?3L6?W4O4T6^!!H%<;Ny2lu(!RXYuj*QJz&8uj3#aCXNZnj9ZeN3u zT%1dF=`L%nS%mg;2kQJ4+J2rEao|-P1%3U>UmsB~lqcjJ|6)}BbIgrHNtEONRgF-XLOk8Kn!?PUP>2b~lCv6O@;NxT|ixFFh z0};zoU+>)V4e2lpC_YVsNdodeY#NxRX)KemcTD**!j|wHjXB>qKE<4NVBo*;FC`-G z)Wub6?XiKFm`B(Ibfj>d#?F@KObR|87Y4-#67asYWSM_d# zt6X#xIcVR2%htnkbw*epEdMA?8PNMhi`26}5eUA}&~VQ0@iiHET`u!EYCKGDdJT89k z+XTFC=vTW2PpxDKqKb$Kxt;F#U6^_ zkv}v?{Kvm9C+EC8&R)xf|Bd%5s;3YelA8aE_NcN4JF0xJCxPqU-Nx#MpyY6fDpb9>)l=I z2oj8tkKf2@EclI7mGBBe=`^ojV}Q^956f`iyzm=yu!Kl@-e35 zpQsD$>G$b*ctl^lE_W<9t$t(GrMz$Z>ifqTj#7L|c`TcGw!drdj>_=RD4|PHkTVoQ zaJS)qp|j;@D`+WcZb1cG$wU4zE&+t0DawU*Vf-o-{6qZT@wuf}x%v(=_0f7NEay~J zK6Gwh>As%9MT?~iw6Mtk*W&P~nn3CRynKFrdfyk>8&>fZR=X)7KQP>=QFsqYF zpFsMx@b>=3t5sGfHmGK`Y`5E9(0`3oFmw%D7%Nb?gY@e>{J(M5ydO;vXNvFp8peoW z+I|A3Rlr{UlV)B`*Czuu-l$SVa^nJaTQe-!Tl^cesfuBvo|K_v6oNhUsu7KWd`S8U zRe%seuKr(QjJO)eN$XX*yBFE#zH>}*++PvjpH=cVeWpfuKa_Y_q!8FJfSYeCCw>W! z?2z&be*x@|Sd;83e8ih}`}k>ut7x*Q;f~L%U9H-=nxt#Gq?!-rCX7%53rz9#O~@)A z6A6k||GVBip$$-mzjhC~Ip-x(@BR9r`bQRk1+nIL{Z+4^nPRWl@(H~c`6A)&Y~lUb zmYah@Q7^1x{D#7IgPk=2XPDM6XaD~I&_FN0uf0~ITCrHXm?4WOMg2gtDF}Aof#}X>tBpX?2P`beh7&1#J*Yte(bII z3mov!$5Fq%Zl`_?AWE{=@>hD=Lh3g4Om{1Pl2a#9Mn>5t14aCvp~%e~jc59v^Ai-#NnkWA{|4QDyq}_vp$%7j)t^+>8E@+2SC--J?#92cg7FjFP=l!c zPrQ!vq5AYoGAzFmHOU)&rsrL+O3k}{AZN-Kq56(oDxWmhm4sQ6m`;H#03uF4&aO0N zcK06LLv>Y^t^QB-Fr!hB!RUn9li-4nXXHkI%vBY{c%n|SYrUMIC0@j@2uOeOcJ{T+5mGGv!0^4g*1n1F|?)pd>O3;;MF&sFx+9lG^wNpDd7?YwW;9{IX z`I6sVF2i3hlmgYF_u>U4cB!ShY<#h-u}g(9N}XJxx;s_V2}p)_&=$rkv7C6&*H&$$ zkK`n8N&Zsgc=zn)nPxr-es&HWf5P!*To&>)N&aJUrz53LFvVXR=h2|lyB?P}h#&mmdopMo5sp3fSUVS|kGx#WnmZ@_ z<(9t)T~0gCsXeU+MtI4Y$4$BO^O@*dJ)C(0ReRjHaiMxxwUrqh117RUx{=zQ#Kru7 z^vE&V?esT0lX1G-&ka|ajvA*NcihU^YhRxNN4xg?k5Db;`A z?ogl7M&+L7E1p;7FEt=UBD;JL|IsfUCD(uK(t7I2C&OKL-5D;u^c}>~1z&Y5rd2wJ zX%Y02fTi%l*Yqvkvo9%01La?&$J#cP3F(a2pfov-xb5A6wau9jK`0{dZP22K_M9Ok zvsrcwTFR4yCZV1Rg!^lZ6_Xn4v!Dbo#}6zjBaMkY>nFw9-}uQU*e$#IaklC`R)9!` z#j;#lK+0`mM~oGN4<-5`tVrYj=6@Og;mUt?5VGd`VAz`!4zjM$#HM%^WwWK~-)5~& zsL?=$UWtRvyi=&t0g#)+l4VQ73atWRpumBV{j`m^kG27OTcrxVm-@e5aJOm|#H^XG zXtnG{+q%lim;U|xX(dNDtpFILfjW~k)wKHUpW2))IvkHx6etM0%H0$zFKAX)Xsar# z8y3u4pe?0?Y>V)abase35(b!?w`|mw<5l6+<;!%S2V;J`tlSMQ#of4}}V08C}%?1-hLjIug-tK8qwf#Q3XRW%T> zL4H%$u3c{(H!E=ZYlX#;NAwSE+ZT`9G_EAjc5hbs!&lC^(cSvkq|6q?#?W8PK(p{u zwi!z(J+8+0e+)F)a=u-wvXITrQp#}9qUGJ-CYVVa6{!E4HgEJ5Nus;6R#mkVZxg*l zVE(vWtB>Z)nJqcd)@Q9K+^&IjA8nEDsY&FKDwEEVIg~HyGIZ$$zA6BiP(x|iZ%(Y- zwrsXZGJ|6#rYH^lYJh%y*rJs*xO-W*er;I0dTn5m)2&+<`Mkwd4wv`H_6UA|h9Y_XMKYqceu`qi;hhtO7SRD0E{bQS5REnB5}$11qhTHVH~BB%W{&L(QT`~@Th>{9-G*k$}9_b_dH4-d87 z1{r>Hhe`d6R}qJD=%I|ibnxx=^-DqpTl8g!t?b-O=_S+cce5)qC56riG=ryHHHCf- zKZT#O=ghG)B#`xfNA$J!uWvv1O$|CjlOwad7wJb)v{k#emM&Wo7A#m~^movKu|tQ* zjbQigR^J+=Kk{ay+TL0zZl<) zaI~uqNM*IBxY0=dr~YM$>gu`;>vTZwx-j@C)f4rP0|pH=WrSs{Ufw`}iwNrK#*Le- zO{5-l((VIQebv`Z#^c3H7Mlwi_*FHu+LYYwv~qN>6%4)q<6)sde$I4jxKl;-y@^!8TGUGq4 z8n^3ji^eAy=I}L6d%%TKl>E4;IitI)jYKh#+CTVDxp1I0hYqh>x6b_AS$$Wx!jP9+CkO`F2bXPd*#37 zBZm!6hs+b#p7E!w7v(>vNBGr-BiA)GjInBLY|>t`LwO~vd3?tRe#(^c-KzGyy~Z=_ zcEQyOm*p?kf5u(-)L*i6sf{JuNKw{XeGYv<_a5DB1!~6g0{>NHHfGwcJgHF3RgE2% zEcjd0c1)W()!d-8l?;!P>yXYmh?&)>HMmAmA4Pp49eJX^ZHRv2pahvU>lMkBR#wyJ zNw)f^E$iH=i`75mF&UJNIQtQWwD+bXi2TPG8m~>lk4uzSUU|j%g1e_7YL9H}s&*si zXKDE(r$7NL`At_I-$PRQ(>HFA>%e((t;0A6Sr|IB$`nAHr)Mg-2&N(W!NU0k_~u`t z_JQ#&=LB_Aedr{*2g+>@V_TF&#Vg_WFw3m-BStEgewr;~g2)#X;c^XAUi7^r>d+_h^sO6?Xdc&SfBGkJtKU5Wox zflZq>7=BRnkc%l4;I)!@#!$H1p}qiPp!yiNrC`3v(N=5pkoUDz8W zFSM)Rr+(tDknyC&muyk@32UoW{~dLQ;!PVjtIo{|YuBwc8gP%rT#zP_`bYh>d}&2L zeN3_Zc{chiZ_0($Ln$+rzhxTd(XTU?9ilNF3V!B!T)UIMJ@FqJxr+FC&++R;a#f)n zW3*u`2!M#4a`)FJxxI}*8jT+Wy4*Md?!DkAhGi(_HoeANHWfeo1i#_6$A;-QzGuL_ z96Wl=jzjR>p}@=YN3~`Tne!9LkzU+@N5sI zv6;KB*BLkS=gkjC9?6ahNmpbI{RMq0^AoOK8W*8wnfdZ7_Fnv1xnhOQ>&6^2+LibM z0;VK4#kf3M&SO^k_U@~(PY*l$?H!o{KTknBWPG(>e=e3@_SO17fJeYQ>QBv1N}k<| z@}C7NwuL7KkSv07P6H@i(5KKsT)xoO-mWubd+I!#?|uLKnzN^!Od3BZoJEHvu#}#D zG0~IJBE;zbD`Ov#!aYC4_7u2e>)5GN7_9d9vUgmTGMC-SkLS@LoO0SJ;jX*y3eQh| zKFpjsQ*P4UZ*h;4fvK$)oILx?1i8C=F&uy5@ixZcV-L~LPrIyUN*-)cZ=wH1XEcAo ze7VURVqunZL^J0p;b!iuI>YCuKfOU?k#6DQ*IlgdisPiI7*pOO z41np{WBW&9N9d9DTY^8q28w+s!V}M9S{w7E@lS#gAtwBB`MN`iaD~k?ZRMs<$cL}w zim4+~-ckml*!lR4>_$O$nEsoXVQ(H(0x%ECnFi@8voUhyhQGBoes2Pt!A=qkh5`Er z|AD5zjQ_yO-{H!CY8>l9(YT;^ur>fCFO5+vw?9uk^^^?+me4KOPn>USx`# zHJT(Jp~?18DWvGoXj2zUnYL)*{P4mHQ%$+EP8}Y~pEgo5Fi~Mb01fzQX4MHReUj3y zh#v*T+_`h*bMzIvqX0*tjPKNL-Mfk(U2R}DUOsmjJOIzzbpNH@eC3sw%~vlI4 z?NScvtOBQTcJ^EGl)F>^zosi;PjDl8HIMqwa?`*Y0{w4J2oJzgy<+u!2vG4 zBWHF+*^6&62=TP5wfmnU|5Fw)AmXQ$gQ;1GH}dF_;q>vROTi!)7|K_D`6FbrCa1UD za;tc}K??gm;q@A*aA!3>s|^=u@Vr0=7tWnGS4!W7W?(@n$Zi*mHB7Kk>Yj4yDH_!G z302iq#-k$rVw>T&-cdhZZ^^YYi}JtYj@zXa+F&bfE`R4cwN<{GzI%a2mfHKAIdfIl zR)$FvCdweW){GWgwrtj*?>Wh4 zKPK4Qr0_yHhf)rOHj2wJqmK!F`}GMYo_K=QjhO3j|NZw#`Lxayo%804KT@zV8Glaj zP`XZhc7nB4C!IJ>TlxEiV~!b9f`9#nO)}K149`CMY^ES*LXDybyvTcht&lqT$`y-SDcc!8+_*^`LF23Kcplr;Yrq7t6mWf7EL$S1;TQ2XXSChU-78(O0io z6(&xYq;g!QvRENM(yOIlK}{hehLlL~v!B}EapO+0yDNVjGV-7BZZM6{9~lP+gfq`NQxm$Lb_nQfwdIp0O)_^B8`fIOaIf*sE8b|#1$E+P$p-Dal4-{)mItNH$Fl_iRtqdF)1`ir+lRolOzx`h# zzLIvL__b1X5El+8&8c%791Gv7hYgee?vu>;(hlXQXoO4^fz|tI)23UyeT-IjvZ9dw zl2w08mM)Pm^{v*vbn4v6`gB%IQdaOEmy%p-RF{`(-0#v&W6|3%sI zn_vG1PRfv0A;VCIaP|AHvT;SN+QJPod{aJ*VP?&mZSH+o1Ogn|Kj=VNbKG&qstxRG z)Rm8(`*|7ojFtE(heDl-*6iq|zVnm;#b zVwj`)MwxApQGi7ktbpjO^2S((?|sH=^gZpQkhWF-hObUztZnKCCz-N?MFEWakYWC2 z=pf(4ix$bCw>@-FyI1?hI@Px!YCHNW{!6Og&#A6&3yjG)G#Hw!>e-K!JsS7WC(fHU zPYZDt%Gf*K49U2G;#(Ij=3#+P-#-1+M;sS$nNw9&mDdk=!Jq$l|F3k6QJ#G22`N?< zn%u6^xQ_PA-S%*P$A~aoe;Ab+|H7=8C4tOYb7_SUZj?Btp%H$WUe$RMmhSfvH2DEP&2WbC#Nr^xF z=%ej?gX$_7dl~1`m&Cl#ZbQMIocmkx`>Y2F`X^zG9Wy03FtS{{sperSV-q zwdwtJaQplz!IQAY=fA63;=I#~M+lHnbe*L$Ss#NdMKv1Iey_b;jp0mM;Wp_#f-6F?qsz;k39TnIRCs0!r0@-T3q_R zJMX$HJgxEh2S4}^*6uqHQ7W-cSCT&~e-RJ;>1wBOJUdF3%7vR(0{>XV?{U2l^Q8W6 zyMCB6MA=Gk)252_p50SLQ+$jZ>B4~f(1Q=?RkbKbVo#-O{bM{6)5vifktn z=XniR+WYRkSAE5@@IH-O)74A;H)EH3?!L#)mOWo{elE)Ap8M{##lx4r?NXb^6K>+T zi~Qvjph{w)8G4hC{o_AcTmI7<{#Wh&z%b?*ch3ftM%RBYD!2l7_fr2IuH`1rQp~k2 zErA4+74TCw?7%9CYTxaQ8=m-NBokB5vcfqB>>H0{EL{fB-hoW0XPPHR62lV=Wx~G2 zdrF!b@)G<8LGei&YemBBQ1r>bTZGof4>DzjygFV(u7Wj^S|7joaX{%W<1h2SDC*RP z{ZRjG%P2jhkRkt8|1`m~6@#se|LLcnH3P}ASC@th)R}Xh#U0vG$!bKDo;3P(nl!Q^ zge{GO1`Y^ax^}U_#}KWQwn;bbgH>F%@$NJQ-xC@DJ+H$ofkVR#9M1kgfy*jSnm&BK zGHD!p>~W?jZ=*?;H$n1gt3l55lP8B8|8Qd%R>eW@y=_IppKtn;`Rt^_Wb(&k`}pJ6 zhAXdpm#qq$sns$l`5%7hA>qPbHmfh&+C+r`1(S3XL{-C>kha%A=2Wdn*2L6S!ioQi z0}UvRPy#>l*dt-q%P-5gBcJt}j5G0O(nDv;AEdL|5u+9p1~ZZ<47@XE&I)(jetVcT zXSPjhP;B0L$DMYtV2uW0#Hp3L3npX79(PRWEu|O-TXF%Ht3~8blVOo%ts5(I>a=>F z75o(yC@F=BvO5_1AIl+B=k#xrl6J}BMd9X~Z?@1g&pg9csrbrLxTHUBQT{0NwNeh> zeA7+3ua{rs;o)p41)0zx$D5@zeD3+@!i0$vWmJ1!6JxD5R=IllSDFID%2hBoOA&>l z^T;DvZNsh)jf8~ACRP!xFY$htr}vr{A3wL zX3w1+{`!~OLVL+1D{|Vj8xE%j+PL2882Cnw8XaDD@#|y|>M7&w=J2w7 z3E%dYTf-u)BHk!oad4#R$@EjBc7`+@8p(i}9Z*&6hMHk)f69LaMw*UMp$Ox+AlftG zk9vz=y#6Cs7;d(#47HmyG1Avc!KgH$(}CqgPB04cr_cmeV&DVmLS%g;q5eo)sQ>Il zV|DFIFTEUYyW{pSZ|)pZAlXhgMP>&C<<~*{r41(=$EgjcEympgvdMh z{`v5yKm1V!3YX#J7J_aMpUvHR$Ur%0hzzW~!>Ey?tdC)bVzK>uhMJ?L*zGK15JsT>Y9CE`C_uEa z%a*+wo_PH6@Zduan_{lIy2^|yfBnl}WJum5Ubs6*5qY{nGqKAJy& zz7z^~n&BCl<9r1n5RE&+ZMXf^IDrdFjO~|QcA1Q_U2Sp5JQ?OuIzI8_Q`Y{n>K&LY z(0~uMs!Q|}=Po@b96fxb84|i`F^2EZ5Lkok_oDo{P&9J>CmyjXyKOHSYgA~d{3BGq z#nMdtC!$s368yra{PKbE7kyAFe`LXc^I!?}6YE{7e-68d-y@?4rH)U2ev0)K)IWH1 z%(2Isf;gqm=?6tcc=E}|wexOnm^$?ZQ-tA~L^e`u`&Y`SI^(66OnHV;6-6qm@L4cJ z`LS?^1w6xsRY`F$Muw3i&A>^yrS=B{!UP$99+dKhMK=9qY@9XoW!pVTc~W-tbr^N1 z+dX9nqF&HeAzv)i!HCL28Vomye#Ug{8eq3324sw;TV>2Mxe(nFVAYH5)`!B?*T4RC z;rOv9XmLS*$$9Gg#XIrM+BavoEo?%;e(yc^+3sC-8X#{ww7U-(!&o?O+)45=f4=0i zvy_QPs4f*tS*1w>YVh2E!<(0_Lan%J!v>9IFn-^4*BvqtEwF_N>}a6wP%hx1u48P% z)e5wC(E=&@R)8UY`cb--;jzaa)tGda%5bXsadytCeyC5z0I^eblX3q@8G_G0??N;9 zR%wU221qeeVDsE%zm`Y1CLE2FKRV`08Ez`n=4oJ{#R!7iPUR)u)u-QUg^(D+-QicN zo!V)m_J@cTmAWF@c**M@U%C#3 z+FD?-lY}!o80TORLw2}#(ZUDYfgkZxAGc_SGdoA8s6Y7q?{Bm|7yKR6pV9W>W^9Mr z-y{1E2)OHE(F+Ph#x%%*5hD03`g!1i`@@SebYj>!@BH(uJ)HH*D_YGxOY-L=GhSm? z^&lC`hmRN*hRC4WSBr62U<0WbLZ?liYKm|AB;=XC^JR?#XKS397QCH)x)xH&7=HBd zqtz!Zw*^r*s!zJ`qKnK}IYhgS7!T49vwNQM98xtzZT#Bsy4Stl#t4fw#{c6V{uD-x z8WDz756cWUiT}oW{fG-@oLww~(hI7~EaqU0i0m^?3du+^@(K6x;w*Jf8 zG$0jA*?=~^{KaQHVpJltl^RDB+GQcIa^`NRK%w&69eza5WSny!^g>)SR1vDQjg$X~ ztg-daG6ydjL%&7#xE!AlU;VD%6rg;INc)=oCRQg9c29vZA+NFil||$6 zVa2N}!{bjrVLP@jf7caOro?5;f%`P-AXmaqdy3H@22;rThzXBy#u*-;G_(WE@7uO* zAHMpZU)7mTW3A78>Zzy0S{WWc{)vzK0yN;OZM^c`S85D4D}3|Y-wJ1)Io|Xi)ZOPM zO$ZlXd~rDY?6UxCDCyhSg{K^>HFKA&rS}7i!9sciz{|nb&f4vq_S$R1m%scKxtIGv_>b%VLkr~w>5B^0 zh<3^o{lMUAt@g*-H1QLpRTkGuhsDj*8!!!jK9o( z1l}&MtHoN`dh)L}NF5i=R+4{|2T{2pOWC zEUaj^ExuBsyrfR?Z&HZ-@JByXqdz!&MXOhO%4HZU!91fC8XzqTH~#+jT5)y1O(t07 zd#)y}g9o!ptdCYKuMU&7ntr*IJFMva&2N5f%HM%U4YJh=Oa_ee`k@V?!{4q!35t92 zxO~M*DG6od(5kF%G9cl;3oHSi_JW^s z887~Kz2RrJ!u&ZI1KAyhvc}JiDeZqz7@_c6DrL$bDKV<5t0j9wq$jA5+nl*JDEi6& z-k@^cX3E4%F1gs`gdGGJOr}US=V?Xm6d4UsTn?!^%C;Aub>^9&gA_Q462=bs1WUwF z&ius-@)$5X-AUP2O8=$}8^fRe^heuL%>jbAj(DAR2Mw*NvbtA8=7MOM~=hwQ73mlxZ@?ykrBv z_g;0Ct$-%$7hQOv8NS$>&8l@2JWH1>mCT-K^@Kb^<#ET2HN`=qkrnxK=gbXX|N7T0 zA1L51zUX2Z&PJFriPczh=g$eRE?W_9yZyHC+h70IRz<%1J@3}Q_ChH(I)mO|1E0Fj z9}2=vQueY6Zn)}6uinRKx4=NH>RhM#qg{V;*@io-m!;hM_IJKxD~X4RW(K(@$hU7d zm1~6*a}2Pbo$!pgS-k7+dkxdLaVLjME_t&fHO%pmjKJeqdMT8UEX-f5?X)tsqPHK5 z<)2mlQ6`!z{|-^V8i<>`S)PEd;jGo^Qu#OJ`q>x!Oc)nxTmHAc^<5cgw#wDZ5#jAx z=`~tP5O~Rsh8HA1GsW|H3+IKO{NyK6(7#dN-X2De9%TxhgrD|~I*Vz3N~{0?KmbWZ zK~y0X7hSl8e8U^x6oyw*LdAXPd*6Gt`oIBl zYthSg6_9sa^F93VL*a)%{GsjY`s61+snz>^t=&)Mk1`wgQD2km0{D!9=CspK3nyvE z5AHH?=|}s+D$z$CdDILP)22>SKQ>l=-#_mC1UV#o`r~{G9@vGtO!;EvB{#|9Ag=57^4>u_ufTpZtG5X*-u}%tCI+m+tJ;!;m~x`A3m)=2_!K#|fHP zcQ@nFRPk(%CZ$hmC(bW^`O9$JF~`};ZQR%OlG}*k!-i{T)fF}Y#g)_TciwIbJvgBE zip$?=h$`A@$BmRBowceR#UeX|e)z*5neq_XLU~YCRb@Mjy7%lRKFkdZ7cJ7RjtSv! zk3B9!pp4NnEWbnJ9cwF;Z@=KHmzv9gu{#grv#wU1|4HuZcFNW21{vUYYS)U!S(TmT zno#{zMMZ~w!cULXUv4?7q*O%-JZrY<{K5q)uQ^iMk2GUTk$xYC)oADA6!iy7WRU5k zb7f8mgNF{b@x-g@Z|~CT<=bw%%~sZ*CS@)zIgdZ?c#R?Zm~!?d89kqr@dX3Kf_v|0 zgG9LC!V63Zl6VZq5l1HT8`f`BeV(8dv=3WYRrOHG?MOXyjzQ3PaX{##a_6#kR&A}_ zqx@Olq%baa{yg>clXmDehd*~{-#%ROrc2CiF3J&h{=G0|s`{s;wsYcv`|b}jUVO>= zm-Eg!&y2BjNVGrv+MHP9C>A+&)b1aQ({IzRYF7HQYryKG+JnD6_BZWTovfX!i?s{& znec@#{DJ0!3top9rz7<&pZ#{I?K9D3SClxT(m2W$+SEz1!t+{n@{HlHJfB zQ(bYz<>u1$0qFuBlMHatzJK8T*Vy=jci?cC{3oybWVlrey`I(XwmI|Xgbv!d%RKLL zDbE@6q>J6cqehRmF-{8OjLNZGmgp%48-xc`9%Wk`M8 z7J#y2{TjKmI`_Qu9EAM_8~c3zbDs}?)(#zv!g%`VtZ~n~-*Z*CRQ(LbTCR3laK{1$ z7SGhbXcO2a!tPYR>TJQyXFvBjGo-Sc9(@l+iOVm)BD~|$OEo9fA_`p{G}aiQzLuTd z>4I;R1P0?#qsC-LFut>x_a8p=A=A^$l7Wc@9Yw=Ust3f41@4dWmw5p@^l-oGmt$kB z2QJ)*ahdFRgmB55F9|g}YQn=BA3Xf!Xt6IqYOfE*eVk<5h=QTUX7jt`_4yhxVrDI(pHLM@ud&G1_sFmmZzOyai)S6}uQ ze(-?1KpaFVjL=A%XRZ(>=99FCIQ>RuRt)=}|7H9xdM;vz6aPiACV@!8l3lo9VR%dmCsy@eaKVM)^;!{MtqCNnb8*##a_x92dvJw<($!or zN$GT-Rztt*%6H2!!s<&ed)ggV6yS$@^JaXr_6h&~|NWc!An)8+igr!5S&e}Y<(--& zF#tn(OzQW&|7xweK3c1|2ivMaR-Ujj<+RgI4_&%-k<$7_^YuJYN;|f$;-Uu{UV2$8 zD74}er5Xc(aVL!nZ+!Ec?Cb(oiF2+82hE*$;z{95t%N~YjQgM4{_}n7DAY zg3NBvO22U$Je?y2=UHc+X)6pd+K?xV1IwlSW03Q!U;fIB7I)u$m$`Le*9~~!5xmO> zCA>msDg7?S3bhJM4s!Z8Y}gRy%$qA?<9(*otR7kwuKmO(Y#TGa%sWw6B(o@9aqIPG ztynbIZZa5BCk(%51i+fKt~OYlmBDJH3obZc3hnorujcj|)0mRBt$pw6_%F)2B|gbF@}S=|o*-7tVzj zU0^G(SWS!veRe<`FBdY47cL6l_~zH;ie!Sd2XA`Q8%=rOh>e_B#9mhL)`~BUZL;#` z3s;O6o05p0B5L<;Yta^8g+p`CTHw0 zqs=|xgcHNdTID`<`czE4@&gnCzX=mdMO@MCJq;_EVz%?JRwx9lmydXcU#>E%)x4-$V@Vr(RW1zh1 z>Z@E{z498p7*{x(=S3-s&XN)NeTu_wFIKa&n~nO&E}^wDXfauT;_)Z6$YF*QR(FJV zzw2GsxIe%F@b)ICnD~*mD#`FR)f4LKuYUb2t0#|9Pi2V3 z*kY4uiJfQB<&S!Qq;@b|s>wG7Q_c}#RX685aTqOUd2mMD3>jWu-Ki13k*e8k*};%2SAjBf0fg-*_>IZ{eBf58Rji=2L&m5!q{>E!Gj<_rTfA-!3NU!U<^L&jA5P=9pCee*Z00amIPz;iovq*^wH0=>(ugk6) zN7Qf9DH{Yx6+SofM3xKoQ#qoZBF)U6|s4+s!tX{RsWkEPW4By$C z-k=4Wae!FuI}`$n@pS&Y3v8emB)K0taLAtTue|z-`uBa3?G>8KeL_Z&^R!o!!a2&Y zhIi;}%^}}++2u08eWQ3l#`DJ>f6R53(3RokA9Xo@fA842y?Eq@k9frjq1A4}F-G$y zKJ@9UMrdAuGX;BBnSXxLQGT!M8KW|x9$5j4LI)!#hW)Fr{-Ec$7;!K_eRbMq)N}#i(5TqTm!8WUl z2tW5XfBXN+nPiPt`Me^}*{2=WkZ^G(8lXXZ^z-Ryv?3gd4i(>*gV0k?J?VMytvBCN zTzttz?thUP{SP#;0*+No)c>!1<*PERDzwTRonJs*CN&yyw!81X`wHeL ze1H7>&;K9AJUO%wiQufE3gxS`JYS%1h*|23SSiIk?*4Cn!{HfGByzB44D}M{G#q%C z)BM8E|Gd*M_eHUavlZVk3opJ@W58rN)oAXhGX5vk)7x&ntst}$?IQKQF*ay`V1?Rd zIrQ8s=bRau1C5o@hPhz$zq33i`<9ITI5wb6b_i)1o`z{Ic8Qz`a0tQ^{wWzf2faE- z^lfst}iqOVhCWJcvk&ID{ zxA)!m4LMr;bgaM=jFVCRCWarJ;-C^5VIuDIo3Eq)sgKn?@r$>_BiVyfUb0kWUhG8aG0e0#7U}jiBrFY$M`;ihkQiZM*ex0WYuu0!PWDlxBrko zD}!;My#Bgt9dUu#KjT01s(j?KVbwkL@*b^j*|l@G`pF^s2GSfi3M(gf-}kUW|K-pARDE+cLMXA=q0P~U{_-#V`(nEygwUSPRz0nZ z36U;|!BH0e&)@!>!(C%&$61kfRzJ>>f#LIi@_9R2Wc>O4E&8^(NrsGmnh(bjG9`59 z@BZ%ZdLG1Hjp!cup34XLaX$F`=l?{;SV^!+{y1sfpl>YnIpv`=7_9l;W>sDPf&J_} zuyMnBwF?aAl%XVVU`mW$S#tt(EbM#w@sEB?1}VaT4NM{qS_$d>XOd+uzgiQsA?%*J z?k0W@RDhCvJas(I2 zw*j$|;QaAvIep=LNrV8#0Q6@*ATHHU<}X*i|H?3S>3MzpU3lpw(pgY9Gw#UFYON3G z``?a$5@t}uJ6#!eK2>ir|L$8-nkr*T*MvW}F`$8^x&LFVivA6NaT!-V@%J-M|74;d zMc1lW`7sDk!qksC()x3*Go)(J)I(YHr2`u(@98`;N<)IIj22Y z_%r_)!=T%LCLm*~W3M?C zJu;X%YlhOdYrszfpb`#gW51tne*{gGHxD0Y?7Oi;#wg&&L`(&#v>vqd%Lg%DohYgK z$Zn<|{CS*E&W7Ve%HQ=!WkdfQA3wg(HA~(rOvZnN@yBIzP~N}qXrB!!V(?__R;UYy zYZ8H{s{e;~KJM_yVG@H^sP`|C;e#V{kn!Vjy;&Z2Y<`Q^46B-uEBp~giEumYdof9q zBRpy*PdeA-lI8CZBbva!Blt|(Sj~ZlJd^BJhec)#wUGm0P!>Yfr60s?dd7r#+tzJb zp1)PfD|x)iJ9(}Y*cdPP_~1xWHE#rt*BJGcm0jk>a4P-@Er@p|`$iCYh9%f2dEqA! zVkH$J{rGq$Y#*UIwo4JmrtkYyKZlA=>O2PqBliEm;|N6^a8Qs#M=5lt)V3>Xzic>5 z$SIByn#|5QAFs@Fm7jJR#G**`nQ zv!JsHe1g;b6u6Zra{co|z#t@Np_K((|N1Ax%I74ZBj67Rz~zbq_*Dx&8TiqPW1x6* z{d#$fZ*X`(ytZe_a|^|tk36JwA(us6vF!G2VD8B_nFJ-{pSVvJO{8GZ0hnl#Bq^t_so zx72SoaNeXi{s%f=vUfjwKVT%m;DINh!6+?tg>ebP3aiux$ZMXEXI3VqkMS&TKDr^2 zv5ff8V@9bCsa@oQjlKB@N14T5RXf#xu*!vTWC(q&@ZdPWerIb|ud#PF`yQ|&ZJJ~p zVvS$C6kiAs~nzI+Wn&K&7w>7s-I*)Ig~5$ zl!v@{XcMN<{ZJ-KXJkQG2sYowIfOE$F3``T_{^=4@LTjx?0Gd-D^6JPdO-7*LzHhS zg+yKnUDZuT^V4{ppPr2N*WCX=5g|>BLwjYoQHV(W>prw!#<)s(bE5byBej>dzJ0wS znUynyb*Ufl&-{gPl@N)P3!#Wut;Jl6H4d!CqWfaZK%vFHgTzvg15VgaV|X!C@~3`b z++bA*`%N(}UMUHvN4bGXq(2T_3PK!P;CwQ4qOQWC#nbMVo%O+5_DY$G;dzTzIu4fX&X+MC$C1%8y!c4O z5&m=Qwi#|?)DbpC#|e!w1t%N!-(n>veJ^9(M9l{=a?)SM{3*cki&G4%d2-&hsvBFk zY%TVw4Pl(-aQiX;61M6VhPn2s9WL*B|I1v8J#7d{O&wvJ#;A?cPPh7f>Qg@WW}}{S zFm8^{bHS9r#j0zU12<}a@2F2eAv#h00OK!v+11D2lvOmchEDZF^0LTO@9PK8dBKVA z7W#PRus9R3R|sv69MoR=Gsei7GtakEAgk+Eu3{YSEQWN+h%9-e3Kc;0%VGN6aZq0y z599CgG}7d>CshAa`wu)KFZF+!ic^kXh>pa6rXw2<^F8Oxe_U60tVm>)ZH%jt!#I4I z(^cmq;XiKvg#$w#-z)XQI08}qvF1vH{nzlYc0(J@D_kt7^p5!-E6F&5x8R58J-_ee zq@?~Shpx)sSqW6H@~3VyX2t%fIdyfWwtCfc^(Ye~CsXx(17m#Sb;UnTKycMo_$%Ml zxzPJYxVfw}PHP^P>G%Xa{O4M$ZBmi55e{H2Z`8V3%@90%MCo$s~g zBgl#rH55*k%d0sL_c`tH_kZAum9XfjqW|Yv1=BbB=~v1{??J?2Qq@uB!A|4Ck&k-5 zl+rM`ro$Bx!Dt;!WNOBrnI7R*quqXx0Cq z?6~!|TZ>0g*l0rh;6o1;H{N`cjU!B$`|5+Ry`x>rNqCPh6Bs<&g!W2?eWf z?)unA<=MTs_{x9(szX&Ak{2Exn&n}B+KS8NA%+L_r3)8E9an-3inOPy|A%Mdh$Bnm z(@(dQ{F*_QBpwrfJ}v~SyQ>o|j+ASAi#{lk5){K$0KPy$zk*XW{t>0ZjEpRUX3vfNQdVAf&9(NHwNXOv zfNObzNCyhppHl2*JRk9JM;RRWNg3%!ju@qw^jFKf{eoh+;uc?Y@q)^eD?xKz5dDPv zn>llqm2od>?~$!ia&MJViA~)>4s0%<+vTYT-0{c%cw1g-PmEWziRKIT+P+*Xm@b$z z*UQ8sCBKmg{1`7MPnzsiF|6{z%k(?n`nHsEGmB4Xb%OCbW8la0pLod&<*}bXl6YO0 z5#a)m5sEH8(CsBEBXHg{J>wrEWeFcZfBeV)!K(&PN~1I^y_uM}CH@nerljGg1^*>2 zEy_RgR{UEOEpXK9AM$U&PkPj&B_a~2J*J6f`S=9!@09`jM~^?@`1KeFuf68F;sSY> zVPG$hL>M?bIy&6H6E0};rY-jDeOroFR!U%m`QKWJ!{)}L&K_0#)F7V`?dnezg@PhyAfBo;G>l0m8VuLdujCT`KD2QvXyRNbBIFUXSrO03< z&epA49qtChT&Mc9d_3~-!?C&hzRu#qcYVZRmU7sPoF;*?vhRc1H{sF8AJrU{()#68E3=w3AVrH`6vBvm+Cjj-1qt%xK9>-d%S8q_^UyG>Cmvq7=r{W+Gtz( zVBfeOD(n~I;N){AYmb0yY}n;JbFTNl{{s#W$UbWeHE+U!pgKZm$R8sjD-!0;y+Esw zU$DV{lllnuS(64O@fta)Pm|A`?2sN~Fm`aXkU!x9z1JM_=O1ZY*v{bZ1E7<0!&q>ML_Q6ko9`pZT6P$zwe(1r6Hu96gUVuUhOD;fA_Oq*u<9)0vNIiKxxyv{uYcO1t5GJp&@%o608njGJW=;uuo-Z}nYO{$-@mw-RcEwOwP}tz zet5?Kd6&kp=blrTR;>j7p&~&1?7g3I`^8D*)YLx+i8g$^_1|@$ycS-_5F+V6dK~Fd z$#V<-j~72Uj-~yvXNULtq#SEUNlWG*cp8H*T5xgc2uAW_YJWAjEiaFS|CSjW@%I#M z;zFnBKY9Za&r6Q&hl?jZOBxYe>4Bb zjQ=>~PbgLPs{&UTZjg@%fnZ;Bm2KFKJISu(hh)viap14AHf0im<}yBJ{u9tTjpcPs z{t076g0AZF?-hSTj^1xdoJvw&*YG#y3~G)Ee+jG+LV4FDN}iWljuF3-MHSGm^Xfsp z|8JI!++h-WoqY*}l$i$Sp{eAqMo`M;Q=-zzGPn|My{k0oKDhm{BRcU!W@9~wV3IoK z9K~R6E`uidcgVApji3pqvtj-EVy9N!#E}UM{_)Z#B#;l$3x6?L;erQ#5|=#Ekx<1= z{%yj~4Bf} z&vfON3Doi6pRN#QDA@2|UAcUPz55BFg-14|vC?bh%9UQl!UozGDl8Vt7ZgyC%<3^V zLmoMLlxXe_4=Z?3UOdkaEB|hJof85DZ$|3q2ziR{(;i2xWZ5G_B}ywowYazv?{2Fu zgeZv2V#uGQQU3lY%P(~%_BkPa2xZjX-X7k>2~JK1-CQGkl&E9Jo#Rz3t5>hK+(TK# zdnt{F46;{yyV@DvLbMt3!3T;^@Dbt)uYU|z7(v2o2yf{MMfXIiNSZF!XnL>F(c9fte5g9blD!Q(f}YzWL7KqP!{tHW+A~ldcj2tO3&z4 z_*oS~3}{x^;Q{;4QUbI2GzvtXv0*by|Dg}X^7*r7+5;PJF67`D4@fx@elD~8xh{_u z{3CxKy2zJh?k4{62xh;EZmnL!dz8X!8=z2HG6DyT;GgRfKf;z_*-v9#j2~2dXPFZn8H6E2#L;B-Efc4tJ*XlZcA)mts<(fj;wFpHcsQPzHuJhtj0) zXY*1##XHsKBYO>(_#di$ zFR}+7#zB-*K62sYG8X@M;9|(6z2H&0OW{5piclGXRRpZ@MaoTLMibJHBl!1aDSzsh zMl^k_b`;y+)?RK3{YJcf_`-AUO@&@!oWtvy*!zr`R;C$XA}-Sg4#|`Hk1}?Y3><`R z+M%(AHjJmg2~1-p`-$Kvk)SAdDyUTdq+L`9o{=8=7-!k@jj=MPqy28t9t;3rlW9U| zB?wSg9qA$bPo6kgd(~~x{vGSQ?+xD7tOl~@pb}uXnW7L^^rJp9ahXTahAc+Ppi2Kt zAG||e-}H$b4fu8A`2Y{~*Gm4#`23l(yt0UTylBxPhePX_I?cu|`W*IEfKEv1Xz%c5 z^sEjegq~MlWZIhX>)uBqsug}J0&wF<36uQ&Jip91^e!^+Aid1*1SD3G1hhPkFm}aX zLZeg8`fl(ee^zTOSg^q3Cn5D-d+jxcJRxK!R2`53%zHw~DT4i6h!;OcD@@p1h_b-5 zciOb6G6vv$)a}(Kv{A+nLL2SYica?XVD%(k$A`4?V>IKi{;^_@&E3mGf(0jkLuKT- z41>Mqlxhlbw30t>^q%%tmP@`6J$L~RQy)TqMs`+R8l2uiGpoW_S&MTAE6>^JnYzT7 z#GH`vafIHZEH_wS3IYZg_V-{Vn-B2Em41UzaQ^DEja<0EtOaq3?&LO>^Bef#xK%GzM7l5-ROX8wB{|Fir zd~g|8NrLGnpL)aZe7XE{O^RUL{f25bKGjA!?&( zI>O6bbiN=HhwAaU3K!U+?=Dv7vZAj%n(%{*ym{P6)HUFDZz7nCd+ggWUiH%nB5QyK zMnZxyvc0|C-==SARV6EMF*?|A(}dsnl-Eaor<+Fp6X5jF{Xlw@vzmwWtjsOuj`sb7 zDBX7nBT7r?;U7k3`k98~6yQHr{;#|4T79GIyFJf65@D_Qr!L*|GxxZkDCL-0$uf5R zOAkvR6}M%+>QO1y6P3R~8b4Rikm)F|-c|VqO_!jv>MU4)1-*5kx4Sef)@{D#yE z|HgKr@&^ba%%tlgUzQd1sQ6Qk5=bSSmhw-pPqh9UYcKp~3R>b%4^IR?tU5pVB|y*k zkR3$vE)kINCl@*;O)njLPpL`35nxhA-55~L9Z4#v#vFM;)SRqD0zvh+N|^EI63=<# zobGfw6ZkWmmMN5r4n$iXS*rg=`7g`r49WjJ{M0p7vY#ON=eE_Y{XB|(gY@B~Np2rP z6zM*RBc~~QwUgBTm@wwAFqZF^3e*kD*Oo;S z|9#|9J53*~>lKCo&*m+gwprJSav$&Sx1~tK>zPmkXGuwe_siMxBt&@&Dn8&*itUvb zBE%h#@^XV#0=@A3ig}V8srhKj71cJ9%WwfYj{}Y7U_w0H?M8 zm-4KSJd6u%YAlVId83XILc(P)Vlz*1PIo#rjz91b{JG*zjW%AJuOll(N!IUH+^9K#5NH3VUs3{1l1ud5O9d0jwZF(Y985;m|g@ zCj8Sb8K0=*D5YtCn-sbQg&JjgNJ@6|*M#5HK(GI0#+8Vp*8VVTq40x#6jTlaaFp^t zTZ*VrqZC3>^$^9yE-CLa|Mm87gOy;S1on~0sN=^_jH2lRDZ|;wldvO{B`X&3Zk@Dw zqxK<~D8<`wugpP#=DimZOz?7K{FbP0>hg~i`fY)qN0GNor3ZS-i>CVDCZ+q~gL{gu zcec6DfUiDkk77`X)h08fI(~p-aM!x-f9 zk^3Lcgw;binR%(>$5WWSvEUEq0b=@>M-zV95^zXMJ3pX)B-*qed7L6IjueF6$OfUz zf5w~7&^BCcd4%Gs^Nf0pQW%9cp)}b8q)kdC=|AEF%0}c?duz4Vkk7FIIPGm5k~iboo#^ zy{-`IIymu#@$)3p!x=?5bC|hW%|HWTGwsD%p$Kh++F;D z9dFyV)!}AeU%K46*sF&zm~oSSh4GYq4+g7D2dWM<);ne4IEMOff{;~RI^rvfh7xbn zs%_?42H979Nv>^e@!g}WxkC7TBubaf_*4B6fWYSVr?i4$I2l3>e}0k6F3#yrrz7EK z&a{1p#!AVSl`(|uD(5KR%1qYyCnCUXZM2;jAY3fO(&omDR`@Uf1CAf(q~?d4 zfrI*M&ZBve#uCN^zIphL;-KvqiC{1<9HCXEHWK<}MOx+`qa1CGY}7USet;nUI(}&K ze|XaTlj}@gK9>Zl{joxxIs1{uUr+=Tqb%WZQI~(f2d~Cq$r`7-*7yS=PEEswKNRJ1 z$j}%-sAb@m@;8FO4zGbDew*kAl zoC5qAMV!-}PIdW%+I6V3zcr-hb<-gyDa|$FNHDq4<&T^EGj+`zS=9Mu;^f`PAEw!( zjlU#<0COtqUr8^usK$gYPp14cni__9R3d5MxUu|m=2WKxMuMbMbNzGjGg$vy;uk%c zq|A=bng3&G|5jdd@p~rmXa1Q2L3eNp zQ`N!n0;NGM=VoTA`+sfx!{wQj|9kj9(qG{wXkb-S zqH6d!Y3&c#Lc%{L*=5XAw|l*$18BleNT*@L6%s(NcIe~fZT;o;j~6*HlAn9-8HZk3 zym(QuTAO#WIjTLGQ8>m7)qKF76(@WsaAQdHKyih~82bsJT&N$-{NpW)*C@)h1@f%? zpa1h86vkkE@yH`TEFS*hBl7Ik$B8~%3BAL{^lU=UCc1o78?i^G!9~@n|J*ns~$%#f7JoX-$#-=uQ2%SknxC*T2?LCBhrZi z7%<(Y5M0WK@@EvD%6bM*yol5(t?pR;!baua`~G)}XPA ztoRLsT(rsHl+4vpZ+|F!P#kcKl9w_o393piw8$#RH4;b}F5@YNR6M@7ZQW)iea25Y z@DKh`lzTrB189vOLouryenT5N5^{+UTdyzG=J4OR&*g?9A4U0v^XDse|AgY^8*jEZ zC`$3fv;k-Q+_aK^g*_xs`pCl>`Q$q;tNS|t-G@7i!#lJW%+@7Z0e3)3{Qkv28CCmW zq*ou7VKm|gI-MpkB^kX`&^{R~Qyp}!3ZHI!#Se)kX-!#JowarATMjpe!Dh4!T<&+9 z(gD6+{zhloD*iEmZkD$?Uc>_iY89pwfjLQU_z6RZaT~91LQZa$!R?@Al=H>J9&8eo zy!}z=W{h?D<1ubKn8y@SByB_DqXEC3VU$UBFr^hF+AMN{OU}AMQH!CU&_^6c;-7GQ z!-h$*Bsg!$xO}!k#W6;(`iA)YePvL@!PPSrzZpLSpx|X+ptbVwW-qt5v@g{J z?StU5RC3s294q6n1GHokGNS#VNFl5hudFQ1Urb8ALrxYbc>(%GZA=bc%apV7(;n*w zcZ_+!;hMd&*joT<%z<38In%H8Lm|sSLOm==^F6EJ6v9bmz=7hKKDy3-9d$Si1Qy^M zm(RkhLZ@H(#b5YEkKIozq~?PPd-}o)FDtCj)5gypMTELz9&qzbH%kdP+WX*uJ7C3c z5BwPs33VK){GCAjcX!HZW#xl1Vjgrm?>9<&+l`woI<@Z@@RB^7UOzqXQ-9@(kf;#k?0NTsUdr0{9xt4cOQ75c>0;AJs+~+!1d2W_ZWX*CMbnV4*Iree*@GH zu!4(?%$tw8{4=MOqyR&I8As+H!_o2;%jJyof(;D9@U%{$wJ;d5f@z4xAB?!<4&DP2ztq2jGAgk` z2gB&Pb?fX%^w?vM@fwocH

#JBt~-=;rcPJ2j3bPhtL-F?s9HoUQ#@f-JjL$Y{Y z#@7Sp9|Q3S?S*xrj5~y;Wo0U%^qN2$R$cx)I2!+|MkSmOjcAh5=Fm=7t?biYi4yhj z3Htt#F?*n#Sd`u{$q4!6uN^({>!l3;G?Eg&#-46MPTm3A&w}m$W`6(LL0$rg&BJrGXG}G zsrJWi$j zLr%vie-cZMWzke58cbdO!GEN$vEp?6{J6=#BrIQ)Odd=7k4(MtpJCR{KW_XV@AyyA zGd{U&-Imp!Er5_hz5drirFHA0aH~9RsH)=Nq^jAvFWlr%0wxZ z?wwp|gQCbv`dp|!^EhCp*^2XJCQdK@AkiPHkg0#AY|ZDtb^cWjsVL5j{NKa>6DfZ_ zf(L7}@bUB2%4lP{w-PUTk5MOmoc#7j&&QEH4ReD(QvF9^LrluZN{0)9#Fam+RS#>6 zzxmt0DPDN)Iejek)#QD6arfPy@G2b?wRj!&>#wgUDX)mh{onrTuZlPHQEEEqYJmd-CX{$=Mwxz0zM4G@ge2$^I#9QOa8^<$r}IIkeq#y z9*|<_jWw%_#~Z@=~+P8=};1~p5R>4fML`IsIUV6Fs zhrj7gZ3@>p~$L4*`Q- zcz)`=;k7P*bjI`}c-f;AuPauNL#}_owa2y5RRq@YLlUbw_%Ofco}bnp9e3GyylmNW zt-xF7l~`Oq``oj|fhP_W-@5;P?dNq)8;Cqc0>}6(e125J54Xk)Jj;PLpfE2Q)6J`{ zW3`KTEnz8fFZGYK7)apXvAh z?$idetOm#u2cgm_FR82Fgi?<>I;J`d8I&2nU{Tjeo#{$9hDExD@( zN*10I73pa@MGi6NaB!Djez_btF47)DpY&cGtiE~ml~)xGY?bB#+lu?Y^{wIuKX}M1 zI&QoDL&b+~zfA@*tuP7jfYH%}KRDC#kXb^UP6@x?DyPb;TLv4abs6ZH6z8Eti4tny zAK0zRU(Zr%!-{L_Li15Qi8Q+Rg=h_Cf;X}uYasY6v!>>0b1#@vy!z@Z#nW;Qc=3go z9Aap)=05}E@PUKG%NjQUc-2)`IgDO~O-)wwzSlLc`u_L7FGJZw4lg=K;c4g0nd=Z- zI0NC)kD-!Pb*opelp$!DoodP!oyH&FLKY;`{@Ev^Vm8q&I&uwBav!;-k=UsK;EUjY z>$a`M_rLdj?Wy)pTA}ccjT$#xf4!C8BS(&wf_a#6F(xzrV=tPOD_0ilWQYO`2eidC z*hD#l7){s*Z{sjpQu`wC(-v&x)H7@~I1?D46Cnk?P+4bZQuEJufZ8JmD@rMkS+i#= ze>R$#3YV|I8y>O)mZ=dC=G;RRM%9NNGH1Br%FByOFI!lANc%=^)E++UqqBV3Qit7Q zb=9MfKBj%To^V*!sne$yzy52#E@Q$FkMcjgRTOt zJ9OXi4uHDJBsTHyWIS^vQZmT_n#iE1rX^=}T0L#NkF@bF=TSS-co*~OcvEI-#&0$l z_cPpFyD}^&5k`0>ZT|L1U^Cu)YnqkbEBw?qdF<7Ep4CS_n()87@)tdFDmk$El?Zz) zz+;ew$-1nYnZ%PN{|Y6D%Da=ne}MZjk$=hBk>p<{`tg;2E}>&C|7aOi*Y@Mge`YSx zd{XLvhLvIeIP-s;_0Oy@Q;9wwTMS{OaXjUT$1J5eNAsSV+fEEBp=^kW5e=UVAsT+; z$WIzYSR<0b#x*NQ;Emr3M9c$pXP^N&Lv1{BCrnD}y#C24a=v_ywDDG;PcnYE2!ivk zZcWeW!GEUte-D2y@2FuvY4!h%mA{n5(yB&N3(@=c)XTs62<()X9vgdC-v92EQiZ76 zKgu{l%0Mih*%3~M&^U@EEHCS|Yu7qV!=%aMWyqLX%$PnyD^7+fZuoGAC?mX%J`Du7 zTi)0y-ngFRFc z8RJ5gL|2RrPU9a|L)-BH06+jqL_t*3T+#28<+C4${@)bU$SUif$me5_S9v1ESi!$Y z9#?)3M@oOP$3GN5gyF)YeXl|e5h{&+XQ;C~wd#xTCwTUckw>-bReXJlkl3`IkRZ#K zFDrJ*GkDzCR5xeLlCf{RJ?V!EE*^};9VY|@9;^1EOyyiJH~2&(`EZ@pO(Xx*5j~;k zn^F^2ko}h4A#`90VMaI?@+W~BbSZ!3Cu|#GTXF*GU#|aze0xm>$<5lQf{onE*WP=k!c+9-x&Q#3yHk$bN-P$>CRy#6PP**q`LE zXd$E*211x&4~QI|k9{rr5wg)o#+%Q9AA<*dHLG+~;u?pf$Wyt*5%MPo@0?RVE%{fQ zbN%6*+Fxt>^*$gOD)J93{H7xiN})#hOoj85B1n}fzio;CkoG+wG!(e$hx*%_nbjwQ z?Sz1?w{yQjm7(};!k_ud2%wPgHS85c{U@v&4gyFZw|~--4*KI-zXBcgDKk~!s$`Ox zldeha4?}mi`Vsb77^!~N8|eB>+@VY==O zKk0ib|7QHqguK`XhCSfc$@zwrGK795Brah^2{nY%jmKYB&!q$WgjhuJzee&TU3+_n zRy0r7ik-1VM@PHEQV!7gfP7h5wdbAPGKjn>2yoLl{va`T_K9B);T9JUd{H|G|9YS| z)PHBvb=1GiKW&Hk!E)`52YswsopN5g_k?qJV1*xLwFzT#IPUcE9ycg@fvcYwe-dVw zq4@4p|468;IHIhfFq50{1EQQW>pd$p7&B98ru?b?mjDDu_1Iwq>6ev%od^5oYSqBd%dI-LJCQUE+#V?{j9(1iPCz3mB ztNaxlV3zW$J?;&^`xsWSD=h{&R!8Nr(%FTsUj9@dXd)yZ^Hq$4%sU*`Q}u3;9Le_Y zKcM{x6&6qLBf@}da^kmm3;2A9@sOt;AOy0;PrNVXmovm`j|)zr zy5u~Tik<`vrxrXw=A6y_4|q(q`+v1o1nnTep#%{WE5`3 zPYS0}Hp2fBE)e|G>AX6wqCVg$i*p@M`ICcCm|dL;@q2Ku`-d)!%$~dWWsmaji8t`) z-xw>AU&uc=PyE9~DfNo(Bk|u{|9a-H;P9?B|8UCD8h^Zt-<%>tE%DbA`8ub_XCCT0 z-{x~Xb&jLskD5bPXV1ixKoc0BGJ<^Op|107KF3q%I6D3+MVZ|f`K~0W1~tC}g|72$ zKG#x`qGf`3;opp*%GdDd}c8RTdA%yV7m+kE!ZOm{w~w48LDc>lxvPr5U7E^@rc z5dpvkLG*={;YLqcBF_Xe#N9|U6|OqsCWa#j)f*;=O5_2IAC7ci_HTMzg3(3JA8GaL zmj>oX{FLd-C)LxO|5V~P+S;fbRY6Z-SJXk@slHI>4T#0 z*}7$`V{sGXx;lE6Kk=BiZF|ezAR%A!o)%9%`Bbs=wbzT+wZi2}g<81%wp)v9ue~mm zq6vrL(x2#qgAi+kICJOEiy%eB2q$RO*;wkNPyKAG{)cQhpzrV01X|Z9-BH>Mk`i*z zz|jt$_C9&w0uM#vcfS4Y;)NGqEWUaFH;cdj`~OcHi_R%b4ZmO|%bBfz zDn#+EVKi8m2t<+iE|o~9Vf;gpIBwi{D_jV3vRdBL4nL%i;brpRWj~`U75;AKteGM= zF+Ja4ZKYZsM#hoAdu$56I4J-XD zCUWUW__@yVuj5C7hW9B-G}=7vA7#eWjt>77R~Ups&8(La>doRmec=nmOD{YxS#B=o z$}9YmOD{>v@PxbJ6jWvUTj6)|BoB*|Ec%O_ah>y<0Vy7skakI6R8u<;Y2sR@Z-Kv1 zXp~&nD2uK`okicnf`gnmjupSt>c`n6*cw*)V%isbA+Xm7W!Z7w6zvj@{95!s%8gg+ ztBV%N2)I*y>%roE3bDlMuD*(!KUv|tmao|By&1M_+2(Q%qfSQKh@ViJ8x>BB@+94) zNt3)8x>6fId?SAhJhpl0x+VX54_o#2m+1!UezYV;M}rxt3342 z@#=vr@1FRzmyO0X420mPUZW_Mx>g2aR(1|6x@6cPj9jOT&Sog#tFQ)kcxCT2_6q?w zA;lP<0-orF&6KyhTlEK4_)CnG@O06@zd92Po&3uOAw~)PwEgY3yjRq@=br2G%I`DS zs{XTSeJHM35i~@G5ER8-YR~i=&|ul>65I{=Gce=NRFXmm{M6)cK;?76QeMi!D4aCq zR~dm9!!i4TAgckYLnv4YGdD_qvuDpSJM1%r^Ty}D@cCks_NV*KcfR8=iWe%>DttE{ z0YB3ZUJE+4w=Dl$A4--qeiT|+=X-HR|KE?5b#U2||B}-Zz58DrdXOKy>WWn!%$-{C zZ?R?ADZPOiWg4G&kkeEbF1z+A?ZssaFY_KZtWITabCG1SYSn73;@oaW09G_()XVq* zw@+a|zxK7i@m@G16%OpvpZ+yD!p!zulJ^`HO2*>#(Kgc?_^ST$Rpg5HNB$Q5kCGyP zU<08|A+bytPk86&h5G!B+WTyY#{O?=1?uGDPOT{Wh{k?GQibzoN|;W_9R~*##KtOc z$R8Tu8+_EUw-xS;{if&xS+&%g{FzG-4vX+;z#S$-$!PVF5<+=oS}UqCrVc13s6R%z zPoK>GlQ-UQqYUC23sU_n0YDTqs(xVT#jy&>uwn_Pg~NJI+k{@ilVX%&uFCwKzZo(J zvHFy}gf9K^m%r@Q$&0mT-2L}|OB-unRb2kQ%R{_$GzovN^cWrfSpA^(G}E8u?+!urt81_JDm+LiVo86HzMC~( z=WHcBUF7_J*8)FnHPY)UXEd_tBy#>be#<+{D#^cONiZ@PE^_|f@bkP(??lZ%jc-d9 zYRMW?91R{BTS2J-Y`AQM-ZN*devz*+c>|;hZBHnT3F~)_09)m3Oi|Cvb*s0npfu-e zecvi)D-5l3=clcpIM(90rHpySv8*?jh8sG@=qOWnsry)bo;uxhssqSkvu7t&GCy!4Ax|BsVe1y9NL`fm;7mNCr>;=Q_*Y)EwM&1y!lxCzz05H@4)OaO*fJc`acwdFTC)g zH;5;%yIf}QIvj!`I!VK&&q=RD7HO2B29S8(n-rh@FaGO)^#|^h$>$dL{@l+>iJLvV zQ*!ZyLg!kA$QY%M)rWuhLwOdivm%TS5fp1@E360jUl)J#FPyIr*@NaY_vOv_pL_nf zV$JF`#X}E0R9q&duefmDeE0u}QuD-5{>b>T?*9>NtNJg+Al`E^;D$6%a42#7 zou=^*Z&QqL7&~5&@|{@vJLMU?Mk^>#I?R`%X@T}KK`EKb42AxxRVx+e`Yn}zzv43G zpE_-tjW)TS!v(yM2Zbcw#v9&TZ-psd*k!d#7q$zz4hH{O3F@-dBYVROB4V*P4L^QJ z!=6XyNh!|CkEQZfMv-#$)gKI+o8*t2cgwJY(P7Q%l{VbCE*U@jOKdAPZ`te(##v=E zWBSaZy+cMDJOI;?lDf1|G_6>%LUnwp-s+A1!+9w)@WU3F#BbUDNLmUa0oLidy2fR~v$yo5L!d=dmK^rgpR{W#bW#jk1{L8E)P^=% zq5J4#j}~{{ai{yz-th15+*dsLqbH=jIcKmI~SHM^|di29oR&7dV5 zd2)Wv9F6!b4A1||Hca{FgZi#eI~bK-e)%QG%^y2f9~W65P8ayek3x5aJo{Iwzp?RY z;zWnr#F$8XM@dR}z~^6hp}32^Y9`1yg|~Eq<2sw_UzfZQXs2t}uJP(P`YaT_c|RCu zF&*Gf5MW1_y?%d4PVi4^aK*XMULxaVs2S_kCrcJDaUY05H6NK>>OXlX`>*{!Un`a^ z*9u0J{U7|nA6VJQ%AJ4<5tW#7e&99AKhjXDZWCn7TEUFmnc{|2z)!`UQh=yU#;{Gr zzkKtX#iEyADHdM-zT(jxO>lT zud=2eAiUo6nKO%NQ>R<0nsIZ^_*s?r=EhCMqQ#3mjzJ~ZIlE>-h})l@>%aLiFF?_w zEQk!yPnDBWckKQ!PAHysA{xEjGtraZPu@PFiLVo}ppaCxHAIx5=e}tEt zr1Y#7!}B;5hN9|7#Oc8fmBY&~zEu3h@Y#CAY9dT@AdXB+Mib|Xb#nlgOP}!{$mts>kb^v_;bw%KkqUfuG`0e zf3S=O^dXFyo{K7+;3W$$@hVfJ)=$0tvC4*e^{0RKXP$S=Q7C5SNO*2wSSBRhYfE1* z)@nZZ^wUolx7>28%AGnAN2Wi^f0x3_JfU!QofSL6JJ%gwH(!DylzayT`B)6X^X4KcSQV#)F}Ttps0U5$-O|ljan$kE!uyT z|H$}rx)N4?P&)^N`fo1s-s@kL{mA(JHj-3Xny#wX75_Xd<$nVFXZ+3euTDbXum7GX z{}uFr3cMqfzmjLptMtHlxAJeoFQCWDf6fUVCI0;I2oQ36r^xC^ed`efJ(?YceM1K`2YroPyWd)#Pj&&StRsZ{bX46RB_#m zpQrK6-bLJ{LC|kbEB@eujt#+DO#puVnGFA!LrAL~&ft5$)z809{)4wOC;#{GQ;FV_ zf7AoZ!fozUwm%wo^nZ(9SyU`uvbcC#-oh+JZ^ln}7d*x`>Lc_W#ROpplBUiu%x4h)jA zkq@I~Qi8uI1sh(uWMFl3>!MUn0(&3iX%SD@iv+Czap8S zv@_}&epWr~+qbWH?9s=IA4%Cr*cHMA4bfgHkm~*qlJ!>|0EoWciF6yU-5zq%wuZX8!S>+^9{_zy0lR zxegIV4<6kog>})z88UEj*5IV_%=}wcD%(Kfd`OR5_D`BWZ=U1+FVTvH=bwAN*ekDG zl)BCRAD+KYKl7}NPpcdnE(~UrLCE|tt4*XNq)x(Hr@YQ-6LmNsC;fhfLVDtfA8DU~ zH;T7VOhJ#~a1KJ9PnSa!>Wc6-d`RzAxS4|r6_q#yTzO2EvVYptj$(q!WWCB^nL-b( zSiVwWDzagrOlq&+ty;2kwwV%S94q4O+|2Ead*O$B|1-cZWQUIfHpV~21bj1D)fnUD~z3(By2M^n; zl=Dh<%$a`}FdO;rt^8g8fB-IKfpRXOX^vK;;Mnl|i?Mk-D=8wJTY_#BVc33NMsrp@ zu2RTF`cgu;5z5kioq#e{7=`5@v>BCf1o)!(aPULGTJvD`mWJf?^OuQSCVmsP*kxZMv%-z3uFad7M89oprAANe<_L5`6U_316+oqC%i>eb^JK? zup*ke)2Y6QGPgsKfCjX{#rVc5@NYlxZI2=B6UR7V`UKQ%KA{H|{Jiv{_62%cd#7p4 z#Yp4V#t%h=o9rx}l{3Q|Qpof2l8Y`<-!?HQP55K}Tj$?UyfS9Qh>dTP7vNlG)T}CL@gYZOdl(i{sD*xjd|LN1u$Eo3LR#Ucltb9|(K0=`(gl7KV(0mJLu+179 zF!b@QL7zi9#=1){xx}j$H)cy*tNw?14zO@m8Z~l^90J;HM8cpS^5<9l z>lAHCclkoHa2kFS|JD32Bo#^ZQb)#580kSW%JXjjKEe~%=XOAh^p?GD%|9r3)o}F0 zA6cpYN=W(^{eSd-vBLM2S6;CZ@@=iAsltsW{K`&SeEzu?WFUUCIHdBQEu-T|wIj+5 zI)fyL3v~HemeH~F|J~~Ex(M-yktx?X_0?V_CD6^~FU09+fjaDd=FUGs zeTEiip7~|)cD(qLOpe4qc=(25o*kG1bNp5``6}J=9dh7Mt8Z{}DNzY1WK!aYoZ%m5gTrEWbUv{3A=GPkEEzkEQ%8++0=o^Yf$QS016w_&JyS(}>cM%ip)h%72wT zgQ=Z!{nMl4z;D#Yf&XOjp9w!Qeo{F_k|%QQO$eEPy;qh<)l~ml$p7g0gHprO&#~f< zTuu1np?`Dv2Y0m>4VPf8@qZlnO|SBDF6&v&l4lscy{gR(_@ykPBRkx9@1^%*-O;p0=)S~D# z;NeFF* zmo{FFJM@S0mScoIc=1G|9|I5{+pMM_hC3f0W8@`%mO@t$!eX$DF6U|W!2Ap57b~TB zUbSj<@uHMiQ>BzXOOt*=!9Zh|6jj~;$Ury0S49S>XP$XRp$|6u zkj#faM=+#^f}v|}`7u9nmmZcUB@ng~Eq|0M?`$o)_HE~@r#LJR{{d%>7Djn&mat7t zi8$Rg;P0c=0f+ghR!)z9d=SfUQ>A_P_3wDbKNK=kzOv96wSoeHb5K}dM?n*peS{<;%UXKrIqh%XFs5?5$bFPa3=9!u2 zCrYvY%X^o9N?QslmHz}O$S#<7f%k=A1>3IOdra4ua})wXO7Bc7^y1O^v=m`1VRbda!4Ou+qP}j=EIL_h0G>xA{`%LE>nQP ziVjYEfSx6sHCwWIQ&lgtI!!XiEBvC1E-uEOGfw^E*5ajCUJ|S|GVUKL z24Toh*)UyID5VIq%y`h_$mtS+dJmmt|C`e{ z_rJhIw)}D8jt<%fbyn!_9W}H-w`i^bYlq<_)ZaQo?TDyhTdkrzGbMQtA!T zO2fTY&Y9jf45i{?8ItKMwrC6=J9eD< zPL1odU-}S@eK`X(C)c1zao-&6+lag6=cU&6Msr^&i?>ttA3R9r4&*C1`q&OC;_ z%OFj&8P_>hV6quIo0{9`sQ!SXBDcctXZnFO(^n;O9&-6z`lW4BXW-xLs9f7HrYGnP z@G`~(vktmV2HS4>*+f{kjLzN{Bw?*iP5AYqC9S>4A2_T;8ma#H+)0z|pu;Lo`g`^Y zqYs!qW4h`B24p49w5nVft8f$`d=sIGFgVf=qnDlDo+i7sE450uCUy@>eNa~oIuEMQYstbFqvPzkmw#4lwY&JEG`x*yUzo^R2( z_~7@xZ|5TFOdI70^pch!0=nSub?qy+XZNn+)?02?A303(K#jvHFIE;Y*Jbq}#@Y2+ zxxzg8qKhvsCQ4E7Bk>b;LN~5hxrP8gjJ+3JaDm74*S5aq`FCH{iF3w`j{XO}^^ZRE zZPCyEl0SOuM&Q?FKvUl9r9CI9Z(wP z@4Gc8>7%i8#E7%i->GdRdXK68i@}f^!V7l&o9Z9DcC+Hfz(}J+I49(~9*N8LZxBbp zPhLsQFeE%*NB>hJ;0X0U(^;ja{^fQBjTKLW<n7luQ|)Hl|w@!Sw&s^?iQWx-ON zVl~_{!P~ZNtH#)iWVAU?jzAMFZ&OG?a_E%Dzf#UE_=hp`Ng428X>>Ax%s<~h-os2V z>HnEu?oV^UzM3QVb3a9vgd2Km_zlh=CC@-(Tsd{%0jp$|A99`L&ojLyZ+H_X3l5$`QCL3Vc=FIu*JV$` zn|UHr3;zAMIqkdPzXXx#Egu*|`speEGmYP5Hq&|v`L9cZ>l4Qx5K9)0Q~oE8|9IM8 zWBor_{JTpKu&PaD!G>(A-=6jF^zwgv_{~r%Pq?f4|2nTB|9)mfiL(&O3ZW{7;hZUb z?%1N%ky4q<94W5>RJpV80&e6nF#ySuH>9|Ybdf8r>H5K<^to3x_<(h~@Vn|MPB5s0 z9^u#MtNCMj_|iWnuzb!%B;z;U8PdNZ{?D}h-@~tZa|Y}G8J9mEnws$7Rq4sAJ`9Wg zQaYrTRkpEH(EjNE?!Nou@{ZnL{O<4nZgI=aw-)VEGNBZGTd|kdtXb>TEErpco;BPG zzI!ww8$CKNS1*c7FTGTg`@zLCN<%zxRzbY}`bFMDhP^^|D%{gzg~)jLhYuI~CKGqg3StJj~ZN)iKwtrYL)922eYXwKW|0}%*m@q+a{D)*8!NIBP z|Gna7_a+%{WNeeCE{dRH{5*Xm2j*kOPhD*5uMc^7-Qg)IPpYm1dt7b-BbNquAx*cZ zlimLd9v{t9r6gXs@Y3S($DfcgSl<3pEM0T$HL>4P6MmEu7hEt;b#IA2-k!4}<$yjq zQHU;BaG{>{_a>$*6!z!A2Oo0Cu?gcQc)t$}IV)GLaJK|l^XeaXX*73@{5O`r z-s&|ehD#CNAs+7j#NEX=zVY>9>C$DzXFl^=#RorlwUxUl&)5TIo0P!MKmVMREvvj= z#+6rIQ9Sv?Q^p$DwO^m=-((pa+dDd3uU}Og`_dP`C`Ir4R5!=j(~!E1r{W^5NZBh- z`pYg|sIu%Q-1iw)%zp$i^}l`e5jtni92+K4On>)#-&4q$6~z-$yz#Mo>utBFolJ~y zbAm8YUc|rr%fDRw$N%d;TIuuWfBxrT^qe-`tDpwTTNA@D8-qXaoo`Dy)LBfDapm4m z-dl_tKUOeNnpXIABRQ!CY5sxCqCW`PS%8*3k}QhL#U}^qWqJD%l_zh^s-TpM_Q0{kr_`_NaHoy4dm%dnh^{Zc%a%!By z_+9IMl+^<$M5vRi-&id}%VxF5A;tUO|Ni1*ANzRh|04VtAx219^3jiftZ1J)wfKj> z|NG(#U-(a24L7#9?z(G>X{!6wITW}r$pd_;Jj7S8BJ5D)nREVZmq=Cex>DJA^@95p zWe$c*5oG>dgt~$Mvi)VL_<5PdN-FM`^jH1;gxcyFjR(K?d%suQ zdFO{*|3{7-E#>TX83|rd$fzv}U-Khv;(fMPC;YU=$00+{GUNokn4>Xbr1q*?+ohGin`s(5b5C1^Qy;bg4H*0kt zdnKK#y-hHh?Uj*#`}XY`!xtA1s*k|2Wb~L(8V4>4L!t2oDIvSu^8~@B*FQO7Jm)uf z;TIhZoT)4Dv{bQ3gt*gj+}?GfJ^e}Z32<;_hHpzzd_ndLB@{5{3%=-X&WHr zyE1dYLzd}qjs!kGi?3NsIv?0^1b+5hnl!1cn9?yt zdx*VRyz$0bg@gLjf)HI}#*9(;ym7@w89Et%e(>GyyENM_(rg*dXmSV zY*=(#mkQIAWt2kfOaC1uVgA-hF@Dh{ms*)i_@$Lv zIY!95?FwJWs%s3E>^n#JU|>-`zyK!bS+PY}Qp$@xA3yuszg=8))%#^wo#?%xSbc%> z&=VS~mn~aXj2k;v`+r^GG-t_(k`G`3U7!s++JPULcJSPF*GIgv07LG-XuKvA+QaG- z*dt}g;Ilmcc|i_Fi(Xx9W&SQ1lIW{u&YV%SPn&9`_OPKcY)<17EPz^}P&-{BJlLyCO9oBFH14j7?)sKOIf z%3DFp*RExjf2;NvJ*GjF`~w4n!N2?Dztd`)CEDZZtHqbT^d;4`xpv4of7bb4k^h!t z$ZG1>Uwf_CEn~+>8E5YO9r-gsE;nD3v*fAk}d{Wu<6a>>Q&ABemFo~r$2{HBGsLf#6$+dtz4 zbVh@V#HJ)NVZg$G#L815D>(eBz9A=081H?zcJ18lahTOgKN4+c%ZYA|+WtL1b&s9% zdgC9ygG;5b@DN-gHsgl@9j2WhjE?GuN#;W|yT0+A6qzjvGn|rSkj?xDei9}9BM_80 z>RnKlKveh>j{KZ+z~$GNjuU_H<4=anO21Y52B?hVb?iA+=B`^hgH@`h)yk}(DyNIQ zk-8@T#6_@Bag;IniGMP*{3gSVJmu5ct#jzU_9$J~@aOV308+ji`Ip!mkR2EPocLYg z581fI)0WbaK~_&Pc`f+QiH{LKj*$1?|7{tP7kEqoWix)0A>>EIpWg-xIg8KyIIn+d z3DVnuTS0HepINF>WLi#~|B^OS7__}B{5|;Z$!8?#`Ml!)1n}qjZxBFyH}(G*@RLMG z(46Lfj9HO2odbWroG5qB{s>Ij5wbhVNSh(%r%na5iVY>qNcdtux5~d-zrC@5$fIpsMeuzWp8E zv0fp}cWF*2ulD|fi#`M7>_@8F2ex@HCeyDTr{SRJ)GvpEa)>{kZeHdO@Yo$csqk6R_ zkc4p|H(}b|)QTcL0xn&6u|B5XXT>rYz=L-*n^=D2qaX1H86UBH)U#4By#xYWaoIh)}!_-07V0kRgm_EbGrRMQhMQxAj z3+Byrs3t<&ZP6-#XP$Y=AE5nYz<>`{1K@eh2F90b9~?Yo_e!xGN+hI04a(9(P$4zA z_j2F#vck{%$j3QS>)vw00HttJGCtv@%<6?D`nX52v{K%LXO9?R0}C6q6SC;K>#jAd zUGioQ<&;_rpmpFeevbCexK(?%Jn+B+_MBg$uv64gR!X3JAAtXD5MQvi=>w(6bl>d-g(Cz+T41b_a4Ht z7daCmiq#2h+K!jz0Ieu`pEf$4A;r>cg_H8W7#5Cxz@J29N_@}rU^ev8v`DTBx<0<@__V3yD);9BxQHU@;c#!W`Up7ukxdr;bm@{`yF`N~7lAoXj%nUXj zxYW|6-uK@Bn3!Xz|8011tKFCz$=HTeVLul9Uj1mrfUvRRM&7s8k%R{QqND16NCCEt zqe_>bSMMSpp<6I?-*wkr-iw9$hryl?aUkt|XJ4^?!#e93P%K?8CG7$!)kmo9;Q4B$ zgXo~1ws*8kkJiT?x=(5K$X+S02%APIAB>%c)aEv8e==4;P3`C?u95+WP>2{KIjZso zUbH{IKw{E!R7Z_3$^k-2<9g#8?sU}B8M;&H9cf5U5?x1PopqsGRvS%|5)`jvluQ_b zmx%|)KSE}1k+NvtzD~7)iN#e{zF$U9g-MeECsuO>Y(NfB`q87t6t{oqL&Z=T8Ci|Q zIMpeK30AlbmST!A3z>Hw*l*chD5d#aDFnT;mCnqEpqYPQL$1!yt>eh$k8+6rly#&h zH_lnZ6%OkXDd{(9uNeN8E`8nm9AQ*uLv)Xwni~*O3ZuzIGB(YUaTH~w`2?KhC2CX# zCI=h|5BvvmUHQft$fSSynk3{QZK6|WjO!>x3FX>f27>iknZ>?Jqp2q{l3cEFe4zRj zR^DEBjrOpU0c^RHd+cq->Ozd~7|fV|?A^OxtC=?2u!up5Ilx%K!MF@wQ__Ur#OO^` zA9KQZ<6O1&uSrNaH~=lx!8R$T4Yp)8U*xu_w;8Mx2LD!OqtI^KC$I;LKKiQ?w#H8} zR7c>6N4idQCQg;C!jGW!nL1DaJE?!ri z!O4J?m9!PggV05t>VGjgAux zC|I$qNkX3wJQQNI(I2YM=u|(mSaXH9HE+gYiLi_8C*ll@ZguL>KE9DTO)p8bc zz-E;!22RFD!X0mvQI2^5`@St&v{=okOMT7(?*+(QecJS?n&-C{9UW8Emtg>DEq}8@ z0o3Y$S&n|0c+1yH#}ky_ZtJ?|Nt;5YAy=oSP;^x7E$*uOEGQ>)N;38ts14$^n!JrU zo#wi2%vTevI4M!06X@}>s{g4fmGZCffu|?`v{mA#r{tX{Ro;Y0Uo zY*??d!QpG<=#koA=yI*Fk;9AXTE-7{_HLZ5P?eM=;{f5(2#5BDoL!bLUtt9}P7bW* zq`w6g-(fhX(Z&ob^JPPEV%j`HH=J-9Wio*+D`BIE82uy|6MDBSW7KkLRfiETag7gJ##kC z!}a67N9byYA@<6DGk#|@9ptMU`YZeup&5D_{9a@k_t- z?@Pl?hF&Z1>XEN9!8QDP?x!u;KF0FTU`uTAAVBK6#Lktbi)D@1-q3SB3X)7>e>ALAvQgrrLR{sQye zDaD_ql+Pvp^1;7t`DZrs`91zmZ~f15&*#%E|3f?17l-$3lw$9lqR*g_MfX`_i+*Q! z)H;NdU;hJm^ndJCahAMj2_g2a`@iLn5MnkHW(dVAVN@=Z^5nMLZY|DLtp11@jFh7P z_s4QQJG%*?nL{4S>mLXkcY06TPRX7 z291YCUNpUB zZ*V*Y`G6<<4L3EItTS-q&zlnzx_6ONN+4QZQLM5 zlCN)Oj|*h1S`#XBHpUiV9Yep-@24jPZi{oR3`pXmc}V4C}mBv8oRoba=Tv z`dFtOpa7*`$VXo({0LKoLYmMad$kAFVi}Lti!bjHrL=gcLNlJgx7~J|L+^~2!3C*V zZV4Fe@f@{zR>=@*ih7kN+nKhIb7Vla81imczl4Y160L+=t@!V&6xNFR51E8Hq}>t@ z2nE_rGV*kEw7b7*#-DKj{Y2Yez)BD$H)MyWX4DjY)M`Up7_9T(D}E_&*}S={PxADv zB|Mq!k4=0j%TIjb6C$(Q9@uzWvcYyfFvgs#@uH)nLw)6kRlmkqmQgOj4K(3dJX%Wh zv1$t_{x?f$`ljOeuUo&)rA`ROfdjR9uwb#r%Ev$cafOUI+aLYls>^?*!g5kyF#b{I zlxaTd{P&l#fR&%D2pgk3!-t`C#_UJ)Dkq;YWb%Sw_@O!iu z!eM^>zOOqh=N^rZc%b%ETRux|X#V^KQsUjB@HOqKYck|#Kt8h)sc$h%isV~W|B)dI zzK4JCP_a&ih^~X|6>`X9C2fx}>gF47^eUb6G~U(^IKlYJ7)+R)5t1=|T(kTGf2N|_ zV=Dc}$dRMcm2*M`ym)sfSS*dpGt+%SroNOAv z>qD{_G^oGekFfk%?KUXwQ`A!ak*PRG@`vZK8ZYT5@{!A*{&%icO)glvR0fw3>fct{ zh)g|Tl>niss1LO7>uJxWJw z{Di<8thzf+E7qu+!-gtEsPJa~hYHTQYP+|ozV4E-k8zK&opawl{baD~UyRp^Q9|TS zQro!g)>}OGF!!CL5T5YY*G2`^8{wkAn4st5G%vsjf_pYXe?vUIv39o<_F7S?ehnq( z*)nEdaru=t4$hmWIim9CBbPsWE&_|XK1%W^*;PWGVYFl=__S%$JU2(7zfuNCjAYCc zkV>1{%oxe|JcW^E9>CmsK-umBA`U8-iS7szkX>`zsFy$dG}r%Qs(&^>3X+&49ALL(hJ2d&uO756|2qCct8Dr* z$5kfN$jkCbPZEOa{ZZOqNl;Jx?5Q|fWyT&v%=1@k&arv3zBx89zD0WE&c2yAIox&E zM~hKf;m5PoGl)8+)Hu}9(P4)j9EWHl7;WCxHw9>^Wc-X*oeITBTgGW< z+=OvT((OIqkUL=-X<3BJWS>zCs<&w_%ARsLRB3Pg^E{Uocr&%Wt}2P&?eUd2y(&0E2$5^I72Qd^6R-36-hLbwrzGG(=VDD1+K^z&tfrF3x zlLVG;!JU#J({T*dgigk}2^mC^_yr%%O&If-!{srhx%?B@x=7OX(aJx|CHOq)^0HVHobn(R-J*uh1}< zvpGxJm9(pb5J3@vf<3o?45yT+f3YZW&^;uN#uIc~V z-~M*2?)nZ^Fx?wI_AehrhkJ`w@zKWp&fPn0a0(rCew?hwpvuxE0~j1J`{ilHZdU(r zCDI@|89Wb%W+%8Ra0nl=>(_0>;5z6*hk~7Zt=_>P))B1ut8)?n6(}c-(uzBfd=%-1 zkPmheIDoAVm5E4EFSgWwJRg7u5_5GLKhn8Nh^AF|h$TB+Yw>Z*L+m-Q$Cdi*h_LRq zTG@c>ipvl>Ry-J<1BDOcL;oNqn7AFE=c{m1X&qL*u|vqgN1mb5>U4-Q^3MSyc492f zY}Ws1S1`$P=+;kaaIxBlU0lmIh5jv1!G}HujJ;6;_3h{{+B7f&|075DhQSBF7e@9! zpw*dN&A9Ze7viJSc-TsR{_dz8lfv9{lKAuXhviAW%X1>l002M$NkljB0I4%cAw0A(LVhe>~i5GM+G0qefUtN{865mh6iI) z{?v5?3a-%Qf$Z!6FXfpu80=`p%>hOBIGClSFloZo$?fPTeA@0F!pA2EQn;&zXN=JN z4DqhSz!1;9!EvbQ$V0v%lkAvFhmcoq|Jm6d1Pu0N9>nAgO_)$%}?fe+vDt+IPkjo$ShV@S!dE_d1))y+(3Hl$*E6)buIW|0x zhl90T{Yo17!Nkcc?jl;h78Ai34C5di2SZFUShAwLiGBns+&qyBi(=k-VKDra!RX!Q zM)?c%BdFgW3P_<6s_Z12z$)6&TFZkzq8fT+bEB+2E3c0v}1Dl-4+>Q2;Z3}lG zZ3YcG2LSp;8aNoGy27)F{I}vKFDSF*3n#RARtC?7Bdh_mvuoC^)}i9eKV>xnz}JcXb%V9F{t5LU_1_ZaIk~zKh1dT!HQ50YH-)bGStOu(ROo?oRdYpJg*CV zk%{!LmH)~VGuTG|hWFf!Z>gVz`o4z{0fXz%^`&RM0EGa`SeA5NC`QSc_^J0aby`Qe z8!D*xS8PJR@EHUkFzxVLKyh_c?b;v0N#ze(NDg->Sr(89mo;S&Jq8CoN`x3*>NP6yQnDtDq9nv zB>#ziR0-^>aR7n0=8R}88el)Te?e`UWrP_~ca$M%ntI$RjSJad;E&!fBd-uqy>6?G%}e4Kpc#5B*PVV<1R z%2q5CPUas(9fDJ&z~dfFWT6gX(YipBVfL?`OKktS6Zj$SI)h9jnHFFZ!}e ztNb;FF~E1{b)j)&H+YJ=7ZWZ^&$t}-IQiU)r^EP_HP2Kk6+^1)RPa-_0E4oB1br`l zC(ukZ&jIC5|Kl*puzK}c$t8C^)lkQ&Y}??MoZ>=LvIo$IA-uaWPQ~vg?w+PRY1bCy zgcEvHiB|rz{$szG`bW*t*))^}72oLgpKT=voQEL8JgcS#ee4B%<-9dBP@Z)Y_PU4bB%olfk5YBk`Nkppu5P34?Uq7@Hb^8Nh=#iUQv0$tW z-^Hgs6YVh0*8~q+-FWzicODGGd(m&dj%LWPt7RS9s3&2v^tffJbHrq2s&o2h#R{M% zKoih!)cnog{0+{(yDhxyU4O1JRlXS1M*lgn@&En7AE-Qj`?r7F0JL76DJ}e0G|}q` z@G?pI+3tV&t6zo5!7oS48bN13J@0u}$h3A2o9BW4$G`u(OuO&IxwxF<yQ+99Qn>eD7bpCp_)xm#HuPiI0CgY)7AzMV zv$OauZ@A_(d0t&OQY2=f+xST%^8-Acz_0u^!fUR2O}GgrTUjQ*`l~OMspg;m`6~=X zhDQ>acVoHq0FQT%O3b~%gK;+_=x20hAmq- zabYX5H~_$p+|(eUG2+ezx>WBNRK&ptI6Chf6io3MaRT}|5Zi}5^eykvhx2+2*7ER9 zYxii903Q?hc;Z_$4SEsQ+~q2JPbG14|e%_)zUdhp#|4CHyqAR_$Mgi5rlJkIM>vjUnv1 z!2~~7m?pp?B2gk7Me{KVd65oJDb)n@b9FTb?3SY==`t}9ezv__71y&8gCqF(+W=Ev z{9vVAa!|di6?Hl2LpNurCLaSbqeArL1v zAlIrKC<4sW=KVDks=Zbp{#;#hq9Cgq-3|?Sx8*)m#9O&S{Fb4|d#=xJ` zZ{-gkd5(`iMN*zp#)OKjAHhz_Kz)p|t=0caD8JMlb179D`R`qSM(A0CiEQc}&dZS5 z!_;X{DI-s^cYyYyZzq2#--wq|0YA&0gZnh|!qxBmAY(Z~_0Tpfk-lhfRJ=(k+u(;x zU?PJu0U?lH@E~RmkMbuQ~;o1k|r)FZZKsE1qm5BRJP(21Npejx8f zUqJdq6v{I%g+o;)x#aFr_Bpw$kP9!kQ;zKo+sIu0`XD#x1&`7{!ciFV7g?cV830Vy zm0X3*cBiKo?HtO7b%Y|sthD1lC-S&kDaY?^L@xitC;3O-Xi|}bbDV@>MyQwMGwUCv z5fd`{m07YIePEOcxFxzd0n2)a1Fc-tL7C!&topXdm%++Nh(u2){}afcme3yAW0N*0 zy9yQ|0J#+%vyJqH`~hjqzcYQN_zTVmS$a+4J{A0s3AW&z(57sy99|jLV%NXEIlxo) zol@J7Fy#+U9Q+U;J+simg=MHisps6SM*U&k#k!j+WAr0_%5ZwH$r`nl8Qh4jo&0(K zlRM86Ts*b%pY>{AKl+3H+$|I#CA55CvtV-HyMleJ0{?jR59Oa#F?SOrxGnf8?}fu6 zJn*8Y#}?nQU%+z`iI061PK*Jh-aXBD`15=wawaN&ES?FNe9Q+;tH@6S`7+T@kd%eV z;AaY&k7c3i&dOL|aCcVf9?OQF2~B#4e%U)9P6j_Sno>2<&k#7`j``Dj6MpmYEAc6- zg6O_u-7RKQsN-^oDzkf@3^PB!qyQT@1JIikQ!S_S;6X|MXA)G`#MA{V$n%W?XWErd|K!Pu?C5VRHSVOD~prMD8;F z(1-ph+yj%vzw`RvRa-!F?YF`T1M|qmNvA*NjBq}z6x?#l&EcQ^>4RD{`|4L;mCFCF zJMRpC^e2CeN!sD?Gnjx`hWh`Oo4*&{4PNZqy9YbovCAHgW_o#+@4@{Cu@C^}Q_lq4 z6&K))L%{vu2Q*=N6(+6dw!zZH{)79&-FM!Fop7+~@R&0-=Hg>kAN$zH!Zp`i8!o)? zN#W9qFUBH)J>g4V{<7e|4I3r66ESy^2FaPr#bnAqNp1wy{5~`J9}7QFd50+{K&YpO zKY?-j9ZW$0k>Zc_FY@K##Y6N<0RmYhcb+Cpcqsf*D%U@Gj79%6@iSTM2a^tSq$wjO z!;hB42xde@2Q_x6Fj#QrM*pex*cwweroW zW*tANa>7823Y+g@@-aX^2zK&WUV0Y&d@1QCN5}=<6Q8_-iD6OT!8#Q4g3gy{8xmyOC!Y!rnaE8bi1cbR^E^o?*k zf2_Zylb8f#Ugf5WAMr5)1#q0Gak0Qa5(bhnERuLR@7q6QUXvt{Z7+X)Wm6A~GsYfX z>7hs#lUI7Ccpa|)e1g;lC?l3B;^&IR{u)30UG9}>TxM7PC?n02K8D{oNj6SS|E9`+ z+c5!iSs3_kcC&+jO!>z|JWXMd{wnJ`4uGq^2csrY|5b42nLCY3=*78N@N!K2(=315 z9_H%u9t^G%8(orrD;)WFPR7NLGUp)aa!jn#d7Am6e+6BUMtZP%L;3KL`Lz}kHJ;iR z4%t~M=gqkE$GA%2@{c=r8$nqB%Uy)#Nav{k$w^MqiAEF|GZ|wJjbc7{33gBZOh^om zab@!LF9#+0v$?94`VZMpxu1mo74%PxpKWgg12bY2cBI-_R=^h-*Hr#uBXR;cNPKl3 z!-GS)oZRI=2&Pj3gOg^Myu|>oo8@6Fr)A3WHvxVFY|wcnu9VMF<&U-%gQpxo9qn59 z@A6NG9p-%X51gFfz!)_g23m=mj~&3z!Qx(+wd162;tydb*CG1jK({8cd9Fyr z=1-F?e@>eB<5!__MEX-!#hD0NfDJmY74t+;{D^$5_8(}%$ z^vp}g@kfqzLH@Kes}~b-Z59oX5Nkyyho6fCIDx)`{g|x&w~}Bvz>U(s$?$)2_!k2I zQH0QC>N6*LjV_Z>ai`@nHU5uFKNd5N&=e-?VPt{}7CHMw37)L}75!hNqW&p$vkt&( z?&UvnQT$+b$aHr}{$e)WUl~WdJZ>tX7%2-gh#6e*A^}SeR<;?BGW>V^^M2+ zymP}FfA@D`s&9?bUH+V(3vaplE#cZvTm$ou=WAiWT@>E&wzr3C5clphi{U_4FcYPbMgMq-@HFuh{>R<-~48n z%;dRML5l+3_t$@|v#B;=$0;2r!nfo6rQO)&^M`MGlS~5A|2Z(<`MF&w|-PiXHR#AkHg$(_7vW zp76NGGb(mU@70c{uU>auc=3yVL6g5s|1X$C;d#A(@<)FZ9&_fIihK0MzYyO3wzq{( zfaWKImJ_iHh#cl*F)cT|`OR0$tSlpQ2Qzn4U3cAA!!Nw}#meu`KKt1+G5&d+ugWvL zUJQSCyLRsiU;5IQ!#U@igUPTro1P%>ymQYDpZomhF#)z)6F1)ed%C8(RKxUR?D8-A zKbAI^C5P5Q{dbU={82sB*?+85@oeo0J!b(wX{RH)W0C(Po35lEOqc`t z7xU+i|Fq9srKtcY9VsY5D3 z1BRHn>Nsge3!fHz|GzAM<3LNfT7gfY{^LT1I(FO)qwU3GbqU(cB|Nubdi75QyN=av z_rWycsuM$PV1ov{t?f?IXk)n6(gRmh#TVbEhkwfSi;E@x(QGLBuR0RDwAmK2-zXX8 zE`_DG>=>h856<#{ zDa=X*laB~wcnjmlt$)+_qpD22#i}#G5I|fq`~?cb#`muEKZFeE(f`rTXwRVXIU2u3 zXCQtYR7kFZ9V#&K2(#nG??IS+d`RcUcr==OehB9vKA6Sh`HD2(MQjOU3;u6^>)Sdn zmlFy;X~QgRf$7;dzxgfU*I)KB%!8t@4fnOLeGTX5ZVu1A{PGN72$x)h^T;lIa`I~hC6}g28wNZP=Z>-OehGGwXwpXc3E`}>9*Z?Ny_)1O0LBJd`FQb* zUX&(n7)Fz9&$;|LFdcki0iNahT?J| z$1u!!KK}7fNRu`UScM&bXP^DVu;bAkFx|+VzX4}UJ{-P-9Y#;T?6NdzLt*10i|1YO zJe_I$W1OEx$MGlb!X#Xt1!$f@=TDvUM8Ji4!h@Iqa>pIbT;N5si{^|OG&;=1zYjh1 zaJUoaf6;s+-IFl!boJF&<6O(fTJ#Qn{}{kn7)`hNSN};znBkm$5s;)j$|v38*46KMsCkOBiQ>UrBMP#PLUscaBl7V0kTLCbY%}XISA~WK0CuMMGaoE0mV~EDd83 zIfd5%#6Z=i5Ew-mjo(&L#UupHh%qUXxSJLHM3!*dgKu}675sBee~Eu?&wy3^WJ-T-b|GcXI7Mc9fjF~2H)Zu0^q8)-M zJ}+sJ8{0pX{Y3O*<#l!WhS0zDV!*(}4R;IB#05UQ=@xwZHxd0^(7#gtivn5@@|O;TCPpOyVQD*wFyYZKu7@Qel3lFzdKL-8%- z@1Kt79|mb)BCUam8xs@s+j?*wQyI`fo|?lDCJLW zgI`MhTNwIB6M~JS`>oxBPSCtmbqQCi+n{QzT(f*9-TtF`#wk8w*3D7@PhWAGe#ncT@O>zk|InIPdrJOw04IOXdx)e}nva zrp&wF`(Bx6_5Rlo&e`0yZCkh+yGpo&R<2-=UhjM0KA7WO7Ea2}r?JuO3es*>9A4}k zw)=4|*kFEbB(Zfj+?zm;O#Pd5_ z9nVkobq-U%~qJSR#Mnb_6Ga{!s&hhg%~9L5STDaG@ElZ*W3 znOQVDTTIeG6jYCbA~HeF?yJ|V#$?l#GV%7NKm3Dm`Wa{7Y@o-4v(Gs@oOb#d+WqA4 zJ!K~L9%Nmq6d`)Id-p{29u{TGmx3l-L%O4-u7=#+B;jmr~JYxk>?#lWf+z=CtIi%HpMXX5sFvAZX20Tf*ws?|EO(c|Eozn$&%>0QUB2H{%W+3JZPF{w{Xvmwa<>V zxOW4;H^!Zizf|Ef%UOM2%3m`-#%}+}xC!)+QE>J_0|Of}1A+K7fotuqIL#PS;y=?W zWi*vY`ETb+`2$y+#b8p|{FL{rr6=8%46p~Rn>BdKi0kC~N!EMUOvmi~{h4@Vispg0vt z3og0nlBlOy|8STMmV=OIsixo(oV~I2cfb?0KOU{a^fMiDoDg?tzqQ=Emokk3v^r~5EUkyx&U6su zOaNflzbmhNz9y``alD83Irnq?Vh#kl8fICqC5R|F4 zaxchy_slmD2)$7(5rjyLjpwx89Pf;;t$l)|*zm+ld>1?@VCrBniah-;2=KBj@M^*4 zFF<${NXMZHtiU0x9wzujm|%4iKM@Ftav`!4Gd-xA_zi91w_cAW{+IL{2j)ut=bHcA zZG%B^uWu@_qZ_#6hIIs7H}wD1ZCho_G+p;U)$iXYAv=3h_6(8DDMB(!X0nBlJ;SkO zCwtEjvNt*Q=2(#x$KDPO&N0jTHT>8xmN!MHRQ+YzQv?@YAsH|H{axuJrpE%lSob?U z!cTa_V1Bp%GEoiSB(w?|TE!mvBIdh?ANsE2QRz@#iod@Ljq2TfnhDrP8jo+(9B*XH zI{FMmQ#6wG&^e$Epl+G8|0a-NyS5tavh1czxOAq%u{#Fen=$u80~c$#chR}$SFUtl zc8876ji+LGX{TT=3`Uyd#p64Iv-o;UT@%Hio-5}u#YyDP8;#Uro?t#0_vr)mz8F8$ zU*F%>-x{L{wOi=aS@BTP@_BXx{CZ*LKtYMCr=uGCT<#JNHCft~W*O)oDkv_vsp-<8K)YWBb)k<> ziJ=4Y=X<~PKXvPAg^m^umQ8XG=+W9l{3U5&=lf$+JNQyGkC=**V`y-+epnXiQNGl9 zecV7`?fP!sD^xOdVovn}u zQGY=DS@+;p9EONN%npzJ^TpVpVE+|DYq!7g`_`(e_L2^2k_l*&V87hxD!15@3+Mi1 zt6jFDfBa*RN;(ad96rm%$;W2*5c8<_&1Z%*jKut3BJIraB7 z$R&`EGUE$k0?3V;W)0CGco&Q|NtZUhrW&O^q5){Fn5WtHWPNqu7?UJC>e~hGKx=1Y z+dqW-;dP!$l9hi$`NAdXQc7%vbEjDZ=y31M+rk9%*BX6`EE54%dv^)~|2*T5`IqPr z_0Pv4l4ZK8Qe^ep(bdn(!tyK@rsqum{5X--=1vFwjo(&5hzhK650uc6(~`sDwsR>u zF{}4*=y8+I^mWq?u%FnRC}GVPiJjS`vcMyp{Nph6Ri1B#FNKDFQNZBpu# zNz2v~q|wm7dW~ye!sxVMicc1(&eKS|5=EbXlshyr{p66PQ-^tRs$qp!dm&B2w<}3& z^v6Xl05XwqH`ZC9U*= z`f2-TW+CqDK9;Ve<)(GGH#}7&C~(6vx->#Vg-S#(FZgB|QUUlaxps*@uV@b{`dQEF z)-I9fIWCy9_NK^D-$`nS{?qPA?BrAK{`JDKD#%QVDkR<#S;xnuDo%?_+XO0!Fq_b{ z<~QnCvo5)jueRpX;FdduHO{N8bK%y5*mDOf-A3|no-p5t(L^WU3UF24>;_EBEjPKY zwn9%?-6EZugDV3&zElvG?^i);znqa4qE8$KRG01EyhmKE@eJSBNc{ zMW+&`R-5LK?pp8A+%oOTKNdeF2`-J?gLLW<0C)DYko(ZEWqmu2$wZJ@kzx=^vrkCt zeo`N>5co!|&rv%KCl+k9?`IG)4~pDA66mQeGQfMhsn!Oc9QC(T)_x(<7_*{u)ilCX z7`y&P)aFq)EMaiV_A*J|CmyVwH1c_Kf9HMpl;Y?Bif$8eN)xhGpoP>z@nZMQG46PZ zRHYPu_cnTySaawri?*o)p;xZ`>PMI zNhj*8VRvux7(=hb?&EXn3SCuh+ati{n9S|%xvWolhSrb z;KQ+Wv?2LU1J_?|L7TJl=9}R2nyeu$ z{vMFYy|pQ`y5-_EdRPQ&;^RZEZ|cuPuED!$GNzGGzZiESQ$kR#Rj1s-XQd*zgah8;~!|Sakv+gCFtr3IYeZ=Akejnl2v#yg& z2dH#xYU+{db-+v9PjOLhJSuwra|Tc7^y)wuBy>zK_-XeJBk-}v;l7Of1Hi3UW=!1& z9B8z0w^5-#M7Vv;)}b8zBAsE& z2qtUj+WmmD;6r|&6Rz!BGG|bVP~2|#0pX)D0JiAp=mA`Wxp2Goe5j_}>1awatqyQb zhxtcg$B&}KuB;wk^pel;j8jDcOKV=c+Q$uLv(Ry&yu4#C<~XVmi{X0e!%e_MenBBUx*>$`>a8 zkw+hb-9aZgMr*##KY{jWNegs5<NWgk6wpwe+=DDA1YSJ6$10KQD8PM>|tp0|V9#asU zf&39$UzOb7so_T+iCunG;=AcD#0sm6j_l)c6K9*$FPZ9>j|Ke}ruR5@?z>yVZsf1)r0 zpyWt4q+fK`Eo6KnVZ1Pwbq$g*_p9W5=qg+G&4$Crmbj;dL5MqJ+TFZuH*a4V=KLfS zt$GS$Z(bONHbX)8ZGEBkJ~A61r@P@gUT>tq=_aS79a2(gy~l>JJ8%#>i^lxgKu$rE zf!HvpTOmT`1O{hgcx@d_%ePVh9HNI919y$7r###3Ct@Lf!1LRFV$1~rqz-#jXa6Lz z%Oj)CggWHdr;d!#(lge9LPv(-{qaKH`>3Ghs(W8q47F1CTWU9Pv(R_h-kNi=+N)0U~NRigE%$!ee&J!0TAdujB`-4+XcdRiHy z$`e@CzSb5s2)}EP-hZx8!A+zfY#=^s@CzSppr8cb)Y9^3=2~niBu^Vor_cEk=Km0gS)Eud~VSWi3w7dkFol>>z=8DVu$@pqn zr86nZvk-GqP)PM65HjzEhm5dkmm7}}BSJ;gIe!PrD2$Q%x}TWVenD}>+Dz5R)wtsL zT=NltXD&|Nd$>xm@MjH{)`8LF&hp4I29_+Zu6C@BaJJ$6NVWXN+L$7u{hA>82ztfh z3!7<513kI4B&_ZytUwQ)!^9A{mv`LPnAhlB?6n@f!^+Id96nhc<{G}JK<}M9R-_U8--klP)^kEPz=7HIV#;SbgHzft zF++r-{RDDjRSCpNa80$->bJeEat^f)y4m!z1LcF$?%T2;V=gpEf9!mBm&FVNXcz8x z9Q;iIH}L}p`9}7HCtkie8cJ;oiW|e!;fk~yPYZ|qDnr2f+$vv?GOmhGx;bcxZr6g1 z+p%H9hJ{enKZ6E>NQYlDYOT>;({lXX*UA6l+WlfQ+T5rV38EF;k^m6@p{ofeaqF9; zw%-&Auj-k&z23JKuwhQXSdqM-xv^}w2mEg9EdP?=xiXBYkIITEn-c%?;@Iz$hJ{9?PI$mHBUZf4Ur?uKfUd z(!G0BJ+RW^ye`~um<3kdf*0=>-QaHVtf(+_vkG@N$r89Y~`)h(5E-bX^~B}U;U3Kx-%gj zcf8gQZx#0gL_EbQ(8N|3LbI07S?_-SMoH?$Hag9_ndE;4F@`cLOQM{@&3b=fxPu1l z>0~Xm*9JA#-L2b0F0$(uPXErTqnXLpN&?j4n4r&D`l%^Ds@51k{7sMN)Zh@XNweWS z!E}Pj5PFdlj8YeGll@*J{+9m3WWgwmCD}UuJLZ*xNb>SNFxJx3m;B0-&zoqm=-*H4 zSJRWu3(03B>BT;9CW$kB^lP;0kHNrqBBmnOZVs?Q;oxKOA1`UCKZOZ7B4v9c3eAaE zI78|adUX+_kl)`7>F!N_fYmAyZc3Q&@<89apISP=E$8&`1tvhOmzH5qjvqPH+>jfd zl$XjysCM-~@OA2xD90Uggz&Xn5AJKuq>N9ZHNiJ``qq*?rgkHYcaTkLFzi@y#CDl) z?GBdzG4R|n`zk7=v|ADu!MAUXKzD@RfzsYJ8!_d1XZr{?&?Jdw#ny-K0G2O^`9`wk z{`})*8t>zwM)vt+(fw-V)aHlI&*ISJ*XRL8dS5viXt1tVP`Xe^kYB@VKiYpE5lL>M zm;46rYrvb{^8%7RPS(y7`=|;YED?#?pN{KAWQ2HGY&7wiB(NM5350bfk>ggCy( zzmEMeg?+rKNjHm5pbcejdzl{}qzP;Lj*^Si6X?~;Zf{Ma*4=bEXp-J;@ znmP7WFPHw&BO0NLx1)&?$H09fN_OVsB2@gO2XsFxA3NVyI51Wi1*o&{E_#YlSo#>g z0cHA_3G7MK!!C?$2xU1w*6w;V5_sX6K-ZgWXl%nKK#t+?1@)sZ52tUr~nTmgjFcQb$Q^El$efk&|u+s!FQSC zOXJJJYRT$gVd$FyL#G9W1r`nWB>YK>XC5OH>V8XlFE50+eeaVcN9kjw-k6LRW_k!A zv=x+UbP!GX%yQ(}eZ;~a2piw+R+*2#+xs|&ai1&i+5aaFJGdQ~Nm^A6KK~7WJ}jsG zuRQ&dQSOw~^k@Thjui<-5?2!m|1~u@4Ex|ykREY}PU#C~nM^lj30Vw$g_Ta1pF{XH^~mPc5LYU~X08K%~HizwpAGlFzv|8>@oS<;o+noc?Ty1i2& z(LY-rt@91`loZG!!pv^0%#3*>@ivP(FFip`bkO3QTPl9IDaG?S<`+5O$HbB=MlCaa%V0}r&{&P08!AMc89D5=qmBT*`326DEfEMTw7w z`4<>()h>V!hxJ4o{8Y-xA4P6zi_%P6LU7qXL0@;+()!u9G=+?)2GL))un$E2Tv z2T?L1fr_4!aGfWaC}O|H3(#P;?B?WcxaE~9CgiLGOi_oP+8E3h^4QOzFR`aI{_;%p z=gqqTVT+5`d0#y3NyQGByHEypigXuKOOL*gXA19|ONKB$`w>e*=6`1Gq)>%5y+Nhi zUQGkU%maqft(V_61s1c}?VfwsPQ%Q0mQ=39J^7!mrAl9biZ-@)Q72sJZ5SxcVb@oB z0;GgyhX6%*#qc5yyPs|RYz0xq-!5K)2R@o%*o!wp%UpC~L)1SOW(*B@@N~~9SDmO@P4EM>R$Tv{3xVv-ciqpzk5JgEr|{#5>F%USZWAzz)82kG{`X zZh5QJYr`>MHQle|_+b}XooBBHg3M%ML zZrR3@M?^_P3MxP!5^#+f{^#!@DEAvRg09VOV$*TX-I^NUIC3QF`Bo^|Zpr*Ll~vO7 zx@8Skc`ml~InWAC)~wpb%mPPDEfsrznW*m?@08dor#N?TTgD~T$E;W1MBUfF0V7-- z_mWYDPET9~VT4+~n$H-YCbF&IfA~RS?RVvX`Y~e-W|jP)n7K_g96xk})*`%iGtF|=24z(SlK>TZ^1`XjM;3L%PjEUAKg4+-!7+CTHNoE`bccJ0W^yr}mqJG#t$m~ieS0DD&3GWb`?Aoqd_I_Zp6Z?{ zoyA+803(FumKcI_w=R5Or&>{)Bj)j(2qnK8i((doa22B~+F%^$u*3OrHc&=c8dfvn zcIs3d7t6Yg{1`>V@t$J8h3#L(Eau%Ek&3Go`wCGONiSssQEPZITQ8{w(-H8~Y_amzqBl;og20!)gV6jn&iFpw3 z$>v>B+jnfkyxAh)`#>XR3igWtsZpL2x$JX)&qc$3kq-7dY>ciz%poDUjWQT(*kDo; z-RH=)v_yJcpm19MDTTA|?Dc<49_!_Zud~?(=Ryqf%>hwJ_e3DxF8wY~LyLpOH49+? z-^PZNpxKW<_kvV4WxmD8-&OWnS{-tPq&$ojJhl`wJhHbKCyT_^ywAQq90ykAYRrQ# zH2&;ftP!&Uxsx|pJ!rhzpve`$XoJ7o_T*>>#}bKTH}KSDVT?>BkfX$5mNS@Jto$8z zuxtuG_TDe4@LU?R|F~0+0l@75tGJQ5=RC}*0SlI*CyeS07GgDNu%810-8V#afW5da68 zGVN9Z23|gVGqMZd{t`Y5(|FkFQ;l)jWMbI<1qMCLKP=o&P##Q12g7V0y(>(XMa73? z$W>F;9Bi_0uXKH&u&R;f@?QRAOG!7h74WGadawDND4aP(v$1*VA=i`mA~uP}EpGw< z9+~_(b&sP2kq;-RDg0Hk8jhCI&=i{hIasMyZsUQi$!D%>6a`_uFV*d>M31WciyUNd zs}7{b1FRftu$?fH_OG7nxT%V;e>7Y*>`v!y{q$E7{-?7`>-8yV-@X>$50n@e zLc{tksV(thpiX`&&`0kpK0EKZ91=OdxTnqwH+2MzV2y$pm11H z0#tjJ5}1>;^5@auzbuWf0*T*00erhCD58n@uRZkTbhsC(q*UBc{>^*VPYz{R_LBaG z1KGx4^F-KJe25vIC{{^22%)Q8D~?wTn(xx{4&I>+Ok43|TISfe7_Z2qk&k?rPrCrH z+I3Q%sTK`Wj6GV$@@OL^qH9K3sc39!yf-j!yF&z4D>sxe|N3*qB1UHoqoP(XY#twv ztXF91(MnYtPyo_Y3F|#jQZhm4reT`YWi23L_sd%t#)9BAd1eF(x_55kdt_JzLo8bp z%vQsmfNWtdK$`st@S019kmoZCkbv^4vAQ_#1EQ3!i zq(+Ttd#>(;QHlrUib(c9>AxH?D|wX>OZ}KBWTBHm)sUF;w{O|E13(FFJ`^?^Rkj%ip`}uD#0NL;0?b$QAiJycp{W-FV5fNBhb~OSstd z>!};AWT#VeVx#*BP}h#57Xp!u2>Yj!i>9mHxKw4meKy(@<QOan8I z0%LZ-E#G&N5NJVBAvjn{=bB0>!MdHxg0?=Z_K;zhhXdn zXPPtqrhx(`lN*(ttESi~(P9cqh?5Gt~b3?k?ka`G_=g z{4I7AKQp}%^H_{arc%9W7K8Vp#f^}mSQKC0`^2Atc5={N+{p-3lwQ}BFWXa+=tbT!NpqM$$d8r!*kaSk}^{HWA_{&aJ&m37U1 zn6mKjV>OysXwky^2PTyU>6>do;pEy{47UcL?dzXjdZ(G1Mb;cc6@4(!0rc6u|H}-|667IQXl})HgaS1D~TE0?d#jD7g-_b z;|`W65CuAJ)f&|_0vy?)TUEMs{f?D}#lzmfXs6*QxBfKlcdyCv$+4^3{Jj?!dZw6I z$G5O~4svKIW*+~c?IiHsE;#63{nvU8!?Y@qFzv1x2%tPZ;R=>8;t=p9Y9f;<8G@Ok z1VwR22hzVv+npN7Iivn81NG8Phw&F&vBS9lqO2bV#gwNWqyM86K;N-Aa;*^~yz3Ts z8AH_8N)%(*pJy3GL3s4}>?u?9VMf$nO!_Wh=rWm|_D1a+&2HhZv+o)S52LJmZh`Wq zn8e}P=S?DseFH@t5gIML;(oF0GA4o>wMn@~*ks}JrTlwdPQUy6{$L_j-G(;r`L6#} zhMC|QF^$k*OGndT@dWmWREqU)SZZ=Ss}VM$dVM4-pNC;7WTLNeY@ z)w5@dpJu#1A>Eml@2qgDT+R1fJo2he2isaQ2mIlUnB05eJv&Q!6FTKSJR&7J36)!iYVK7hI z1e~y^390vO&TAs@CvY=Dc8w6d{rM2`!O!-^WC+To-)-lC@0)?n&@PW%y_8`w;8@RP z(nae%CdWqaBz}Tt$Ge3)q8|l+a~mAW?E`bQtI@>(nldQ~i#cq$x2wf)ubA5i*iNUW zDYF~RN|7z6(k&g}9LEaTLnI5PNMGgS0T~Q7Y0(cHDRN0eez^8eE$m5fpxH+@(qc}c zl3g9O;i6gDpU=4}^E84oZt2DWdU`KOfVthz?Cr==aocca{^6$Po9|aZZIsUFaLCyF zl_`^a7=U<o5iPyN^p-N$bQ6{&x0cK%&lYXPo%e{2dj55# zv}riB>FY1NG}%BQmck3KdNba-SKWhOr?mqEUanogB2_HVaTe??RePXq+J3N1f$Asg z-ML>l#thaPf6jP8M*L8IdKm}sP*J9##CFAmzWfBHP$OKG7lGmfgN8R!1`PGvL*|o? z#;cs0q(xZqOyt0mTm!|-5&J1KY^Obzl+?@?_&*LGz$V#dplA=Gyu7o zV2n(A#HKi(7Nw0o3qQ@}TGG+myp0CCbl>7Cw$378y3iy*G^}UIecGHbwRPqS63oN~ zXw(4rE0Do5FWqeR{=_Ze#%m1!h;xPG#E5B6&h4AdB|i*yyq3+8_s5PP|BYUkJSHqe zh(QNd^RGtHP(3L+6e9?>D`lbAzIo60&Br!~V+tndj5-W=SFGpsRLa0

yyH_6kNc!8*H~w9jUl(8B|T{qlp@pIdIK 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

nt3MQ1_-)Q$Zr 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

  • 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

    YB%rdDTjAWvjnDJuL#*p@6OI*!VN( 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 z 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∓Oqo)KN$qXyl;fWd``H{o`M)P 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ℑ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 o 支持,接入方式请参考“附录3:原子开发”。 +### 标准运维插件支持用户接入企业内IT系统吗? +> 支持,接入方式请参考“附录3:标准插件开发”。 ### 标准运维点击开始执行任务后报错:taskflow[id=1] get status error: node(nodee37e20…c7fb131) does not exist, may have not by executed,并且在任务列表中查看任务状态是“未知”,可能是什么原因? > 标准运维执行引擎依赖于蓝鲸的RabbitMQ服务和App启动的celery进程,请登录服务器确认服务已启动并正常运行,可以查看App的celery.log日志文件帮助定位问题原因。 -### 标准运维能执行任务,但是原子节点报错:Trackback…TypeError:int() argument must be a string or a number,not ‘NoneType’,可能是什么原因? -> 标准运维任务流程的执行状态和原子输入、输出等信息缓存依赖Redis服务,所以首次部署请务必按照“标准运维部署文档”,配置Redis环境变量后重新部署。 +### 标准运维能执行任务,但是插件节点报错:Trackback…TypeError:int() argument must be a string or a number,not ‘NoneType’,可能是什么原因? +> 标准运维任务流程的执行状态和插件输入、输出等信息缓存依赖Redis服务,所以首次部署请务必按照“标准运维部署文档”,配置Redis环境变量后重新部署。 diff --git a/docs/wiki/home.md b/docs/wiki/home.md index 10a7180534..4b928385c7 100644 --- a/docs/wiki/home.md +++ b/docs/wiki/home.md @@ -2,7 +2,7 @@ # 标准运维,一套成熟稳定的流程编排调度引擎! ## 导读 ->标准运维是腾讯蓝鲸体系中的一款SaaS产品,它助力运维实现跨系统的调度自动化。通过一套成熟稳定的流程编排调度引擎,基于蓝鲸PaaS平台的API网关服务对接企业内部各个系统API的能力,把在多系统间切换的工作模式整合到一个流程中,不仅可以将腾讯蓝鲸智云体系内的服务(如:配置平台、作业平台、通知服务等)进行整合,而且提供了自定义原子开发能力,让用户可以将自己企业内独有的系统接入并整合,实现一键自动化调度。 +>标准运维是腾讯蓝鲸体系中的一款SaaS产品,它助力运维实现跨系统的调度自动化。通过一套成熟稳定的流程编排调度引擎,基于蓝鲸PaaS平台的API网关服务对接企业内部各个系统API的能力,把在多系统间切换的工作模式整合到一个流程中,不仅可以将腾讯蓝鲸智云体系内的服务(如:配置平台、作业平台、通知服务等)进行整合,而且提供了自定义插件开发能力,让用户可以将自己企业内独有的系统接入并整合,实现一键自动化调度。 ![](https://github.com/Tencent/bk-sops/blob/master/docs/wiki/img/wiki_product.png) ## 功能特性 diff --git a/docs/wiki/img/wiki_blueking.png b/docs/wiki/img/wiki_blueking.png index e33835d591c2415c8667e836e92a6690e4ba9bd1..66f1769d7a0cd3f0592f8dfe6fa5944968ad4c94 100644 GIT binary patch literal 152788 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

    y}o^gt3V zx(U4mC?t-2pE^&4vuI4PV>(B`K_#X^Qf&MV6}4Gj&M zTqttPjJul*&G_-q#IKB(_t5yH{Ghs~Yc{V;eg0%h?dLkI++wUbVWeXonL3YaZRa$u zb*uTkjnykc86-gP569}~uYgffQ18e}*8wz${Pf8xb?QButEO_??btlxcwkA()Ke=M z?>^$oNTXF%yNo?C?{xwC)z|z$M=q+qp;YaVx$;FfAjFsDP|BfJOWi8xMk5Lc%CP~d zIJHv4*>?T-UMhKcnLSfIa-DlW7TnAJyf*);!na~^TeSK|*3T>_jlT9FLt{0dcR+h2J}`&JB3b1mNz9OtW5 z6kW*KDiJh)T9@n#fJ)iU!G32a4+kZZ-dTqecjhl7$Jg8PfJzm)KxNy6?PBfIe>hv0 z$N`3&xx_3Wv%7qY(cdIrIINH5drN#bWHYFF3skCil%>3n!(`smskG1RGc0>|o0)uA zAN8Jr;7d)h-IUsg8WFZCmD!siUZ-u%oALo?XQ%8a-HTF=5lQWKD;v4{82)?c8FsM5 zk(;Ys?I}Q>q3B(g;&--6Yn@>ew+UYsa!VJ8i63M?Z zXzHCO+cO@B2!MSPmX@;YC6?rCBMIZ{W2*0Zp&L^%Sv%5d*YGWPLc$1YquK#ETJ zw6fu92V*&BlM{#deyXsmzsTtbXyjIEU?DMtU6J zK;uRNSJ(`kz~z{TJ!vdFd*h3kdhlv z3KLGLkQ*!A*ATGIhNJ=tHC|W!H$8E%6w5HD6hL!nq)p*|u#>gIyw@l0&`m@k!R459 zY0uvd`Q;sCY3;9Dg(RUcf#nTWjyxK&LJUvJF1c{G1m6D$27rqZVU7Q*MxL2!DY zc-oG{1Fl)|ahSk;KhE{Cv!dpwv8z6(u0_9?9eeVNypvl+cK}B1q ztaxVh>oc2VFVwl~b#SG@ZsU&oq#l+#sx_jr*$gNiED}d97Q2eqC>u~!SH8YUR_`M% z3cnT<$}W;B4@z-IJsv5P*7nsYVw@GKc{-buYq<(7XLuum`CCzfDjkrCsm3;LZf%5Y zFFDvKW$N%YT%2qc9e1O+vWq*yQURUgsJ0D08*@M;2v9S4rdus^#GgLxb2{&;TyL`m zNTj-oKg_DVf;QiVx43)Gh95lfmfao&Wki#UV=pd!Jhm;cnJ9_5p!Avsx2lA>Z5-)7 zMTl=8Au*krFts(87@r~S`EvC@U3X(j6m6e9fjiH}Vrd_$H)v$?lJAwcNQSW9m;f!@ zns6}5K?>0)?XfUdb@i}hCF`rK=iJ}raha#s{!0Wy!3Eb38*e2n-K`pJj89hW+mwVq z{i6kd%!#WuR7D8RSsBU&&v=%O~EvWNjgf_b1l#h^rO76D_I+PB~3MVibVykQ!JETrbf zu8Oj{pFi0u6d2gPShRe-} zYWTRSP690iR{Dzx_uVheWMEJJaerjut@BTTTfgzg>rswC1Ln8$qzQ|K4*d@8JkkG zYvnzaYK7^t)MSdZ%ks8yxI~BMte5hS!)l~Jg^H&(Ik9n2*+!SSP2x@^(q#De$Gk=0 z>FE+nqWsn2G(`>pFt0+w>-kH+w^7&|2=#-$(vSt}NNZsC(Rjuvj;WyxY;mHrrSgC~ zXwdFB;n1GLUg0&ar|ZB^&dI?Xci?ozy*$0{;cCa(5AX$20&~Yw86`l6P2cj3*y#X| zAW$x(vYWWm5sgmhj{7QrS;iVDa3sTi$20v4s0NZVN@U!LSlm7V4)Xv0>|c7-|1SpQ z)}^1zds6)mH|@525?cVDB|L?K`%V^DH7!p0=SOhxjF*_QndKG}-fW zYBc&~-H{?I=cyJDJRRQ^R)yi3ToCgu7dSq8&bx7D!{ zn{tw|N(B=ejnRb@HC>vpskfOUG!4OFn1X;R(GBlE?L5po;$;%e76zVEdHz{V1U5`qW&(e|Rr~ z`2kTBSEzx++uvm9M`14VgtVP=c@Wh2Tj}t_it-9;J>II|#0d%W>kzFGN*1fJEfQcx ztSm7G3?o*4 z69KeGEJpY&U%oPB1U$w>tD$*BGdnwLfV^mJ75228TN+^FZG6^xc;44^YTta(a@yg( zn(7HQWsC-n@{OOr{{9j;JPD>=mm4Nc*`#ibD9Xvir4%Z%aO)m^vYU>WKaJHl^gJe^ zXz?5rBSB3tSChUaGW@^Q|Kb_7oFf;c=r>4H#4I^KS9kkV80&5wrpT^FKeB3K* zx?YiK_E|VjQ6RW*I!?qnft37vhkK9Tar&33hT@nMj)aswv$9fS;~Rh1$X=*jSk#`5 zDOsRdNSDvd937upQoDaT*y_C01->3bI<)ZWm25jDRN0KGF%OuUw|BC8tORRcoJN2C zjP6NUIZ^|`dcJGVoht16RrVMCKm7qZCP9dgDcs@qD~oD*=m)LSDTRPcsU^k}FE>w7 z$5N@VZC>G;I1X(CYv~BCLXmmjJcxR!CA05BD0WhkRE`ru5PDh1K^8?nwuQHvhE%;y zc&(kQs3aH7tK`7?JeKOP=kKz@Id%-OL%Le^j^11=bC#aX2P%!FZ5~F>%{7@fhMt>b9C>X~ z$|`EUSgdk!H$9UU+G(m3e&VB&@xv^aju9Ta>x*#g3a5bOiz`&Z9t(sRG@kZ`CLC@V zPsE*yliSRWZI)=+*P>%n-zWH=52h!YaV9a9xN(xmb<0kz%#C(1Jm5VXI3$lVrgr{D z5G51F2J6!-Rtqc(St=t%{dhr?8HV zgqixZU0ZZok`4;B3L0Hn-tAqSiVyadGZ#25e;X*wnn!oi`%+pySWbupBz~{ zoLEH!Owqv2#!^^?ZN&ftsncGs^zWVM@D0#sazRYL7H!7LQY9XXDdO0A z9t`hPSnm2XU-f_9g%tk@4t48pI8Hhyxc+rUpZ~@gpQ&b2ENV6JrM1}7{xjbyP`tD+ zzY^Xb&-D&Q^WVW~nyn?}*_lLA{U`K7pDT94J;JtjxivB6o%dH$Q=&Z5T zXseK`H&0hJ%n&z#4rzbhkYy4c-a;K~%bM{<^VFlD>udZ-O?ZF$cF4mH%KO9*4ALHJ zJvrM65ZI3$lw7T=-NGIWmeA1&y-DN-X&*+13=GE`J3u-y1gJk5Ze+qbLfpT1Dl(I4 zoqhw3@v?#+&YXu-|MG_Bj%KN49~=yP88nMg>;A*AzY%%r;(jLFEJ=2y8dVNf8Z#yi zJzeA+HDAmrK6&*W>9#)-=h3LJt~M=a7lHlhIU>Yji)dc%X4NhpqJf7uP0rWe8MvBe zUTSAz65tX1Wt2+7eLq`ZY5YEa=Lxzyt7LG*5%KBl7` zWx(O6%#}y=(t-S-K+;C`#~8143t5uA%V#HC4y=2_4l{WrCy3MdPCl>eU)cxC0_scO z;2bJ;hxId1d2L9_D~RF?N95?urNF!pOx2WdI(d4;vcYlVeY4^0bhLhFMuL0y{;zw3 zh~Y|3?1@EcL$@7Ay!x3>m$PY}1AEvc!?f>9$Ul&&k5oXDljnvSy)DM7Z1chNN)x+k z0?-hb55$avE{ah$hVsv1x$}}T6=Ja4RT)m?s&}y#l%Xfr-AUE_(iTN!VFque7hGS% z+~?`Pj@0Qj9bLYXY;j}Lv?otw=xV|{L{Y$au@md=F&rIM^&W$=>(8^P476e1KY! zbk9aq*?E7nIg+(&pRBRi_IR5815pZAF3^OCODkDp1b&~oFv!4Xbqp7J{en$Dr&VQj zuwCrsOGA$4GxGJkSRLAIxi}TM?R>O{c)e_FU2bKIIIS(HqAJxKMO5%^s{!6t<957_ z*;!*|_II_4AB2cvbxFpA*7P4Ukc(pv?>#cws%%2B9(<-Jkr26j?$Ne&Kdy7n!|jL} zYZILInW2nSUipJqPr4ni<&Kdm#|I=wsK)8+Y=_pDacxsS7PC@HtZ>=bw$yJ@u4 zrPK70Z#H7_)I$WfsY-No^FAOrPBLAvcXaq^c0{+`zPY}z%63jCo(+^;G=wWJ>~*TH zp45#eezOoiUtmj1AkeSesW61_OR!pQa#n(Ak6}Pt&O9n++>zBNaz|FCw`e}+R}QZ; zO@&LVXY*EGDa$GjXmg+F`B6Q60QQuguC=3QeZEQMlgI!o^o-R^f8|LaLTB)>8RVVj zGsY*FQFBW5T(`MhcO4??MX-ABcMnsx+v4EYu>U z2#;k}&XrqzQ&Uw~D@+JRU|--0Z|wg)mgTXkS(Go5LDm~&81(pD#<;j^GoQJ(JQGdi z_AuM$ffeTnRLiwLf*eD5R}LSa7!@uo4YpeJ4z^xpFYdA5TS_~d9fZ$6i;`h`4lhiv@A+_CPrm;%1QHOvn{2ZO2ganX3QfFYYs9SZf;U6{oX|g8M@@; zmtu$?f6lC(0U7%K>i34nvL6Ji3!~Jf1hXGwbr4HXdUj9Lsi<5zV7xp=mhApIE{ z>+vFvGBGlD_dg%&S9k1D3_2~zl?OJ2ZaQhj0*WyL`Y>Kg_Q-5G)xdO+cQWa_Z)6x* zU9$q~%Qo&{gE2C9UnypGa7j^muIV1!drZEogU5J8*_!32C~7lY#zV!s`l(!@Y($x6 zA%c}C%NvU2K*Wdq#+Z<0VdQTTx+9OWSZX|O7~JEIhk7FE5;-@6J{bSjAXiiKECC_o5- zMDd2;Pi!2$$1j#-KiU%MgpX(Wvo1Z0I2lR;yefTp#bjN3mD9u4>jZk&84KQ>H_Sdq zKX!UIcGk+V<5hRV1jL6P_1xza0mOm#;ehW>n`-u*qHSr{cRc=(cW^Bo&@0p|%-NYf zTSu%{fSLp6eKsNXeAn-rkK0>4N0!o#`f;BO0l~w=L)pcZH5L`@kL^bcDr}VAYxZ`} z{Y>-+m)~d9I>q=Md0OQei82psy|C}wE9Ft&f0N(`>1&GfK!WQ61@ge4-ndFd#yUe? z+WqPdCwDn<4`ynq{MmBnh@E=kBQ=NG_A|R_?1WmQd|YYQR zF8WL<@gA-&&~7yGujbm&gvR;(`Dr#`OoFnT7FWXi7#m@Oj?jk{a*QHox9UUmLq?IQ zY@J{BvSd8jsIk#J!+M6Q&rb3+xHqr0usEJ&QdU8Jwt7a`S%{$d_ z=`D&B<2Cc@&fRoqA+YoqdWV>G3oZ%I_i7c+?Zf*Mzg)F0Vk&Oj+x8QEU9RdV*cMtCF5Fog_d$5hWyGwA_;10peZ`T#fM!~uhll!oU?n39!))Pzu^-hU$lfy(oU_WtY7)+xrSk}iNxP= zUN(I5s-J*0fmiOO3FC!2xTGYvevd>fKr0bVH17bD7zY-3X`iCy0ZqfFU;cwe|3vG& z2I%4zh5vqbZ>xV8>|nf*`N&i5A)c?}9RnU{4&PsfVZ7ShYCstH{4_dmb?eSx?}phd zRk2wuIo}dL>jVyD{K;Wc`Mi866||}-wpG<-ezePi9m~zdXK?lW^>@lK;_Jux*X**S zW}oN#a(GHvM1vPSOO-m!*f=VQ2{Od7!V-L%9Ya)qOk!U{`;iBQq*ZavAz;^?)Mu-j z4SUdyAeZZjIWG4zW3Qfc>PZM59@E;R#82bjl_2c>A1ujyQ8aW7as6Xhiirps&hQCs z->}MI5WK@G1E-QW)ua|Eu(K-t7P$0JzTz*QE9f7sHt~x+@9owdieHZ0G>oR;hO>Cz z<$*5F=rjtxUNIdh+?~l1f@E)c1YIBO3|M$qBBlydio98-#UTs0AzU;n3g2^?^Ehx; zvGD=wadv)_7rc#4WYnEWSFLK(>$8RHr3WJ>wpk>RTco`ZEp%LbM53!IIex35m*6;W zOfzchDp|ummrRcGaxAo^xbPh*&P=g$ZLhz7WmTq|qMTg4j&_@=CwADi9J%hM_?RO% zm56-qq|w^37xCMkI{ALn$x0~nN;%srx%_(Hj(`Ayil^29X>dedkL*zimr#O(J z1Vnbvs7H$bs!$c3pagH#qkR$SIA#Z7fZC0WMoe77^bz4$yTLQdy{?~>q1Cj45&Z`w zV|VAP-mJjSpUj6lpsNkyC)IVnzCV48_WBv0e^a4$!mPX9bdrDDVhc|kv*$TrbPBRR#sU4Qtw{q=d1L9pXv#|+tiV>!W+QK0* z$)^%{RlfvJ-Zk3xB-0u3-dfi)JaAQ~k=mrY8~)tLAmE5GJfK& zsrVTmOmW<1{BGn$9ntgBUS5FmpeMe!d7`2d;8h=&^71|;ARowD+kSb99?0x;TD^fU zsXkbNmWcrw~ zfsV|g8VzMhdm$%0*CNR;yA45c^{N>*7Wx}kJp3+*g=6=q;P zBZxz<$7RxE!()pX*7q*Wn%fhtKR*XS$7CIKCT00aqYav3b*jA%59rnn{%#xgIzgVVN5AcYZJG`M$q>_BH$@BgP}2$ zhcL!ICuSa%d3P#)lIth1AqmPuF!FBxDc#_C##5=HZN9@Q#nK5`<2k{TWjzaYo2p{Xg1v{Sd%KUyQ^9y(oea7;tKBTuAjwTc#n=~h%ZTK%#wEm zN@$M*ut2-g<68T^NoE|vKfuK2nJ-g6PK?N}({UyA7CR8NqM6yClwEnP=lUD4qTz&- zhi34wwd*{c&PClGYV7+qR77&A#YQqWVTwyE!9Ky@Z%gsqLr?UA&t!-gu;1bODlj^) zJ?YqV`Z#SjXyy4Fn>sxGUfHxClB! zhTavtTm!*uVGPYb2^dR$BSAWPjU_56Bi5=ROJzd)+4Bp;W z=%tm>lQGelV(a4%f)0PHY!?mE4zE^SBm`=TY<-;3i&8DE@=PaF?3H5)iT_a4{G7$< z`D?l99iOK?^*W$Zy{WjBne(flN=(=*!tbW>07y^iiv#G9$TX)L!nI!qK+$A`@M_hb zOuqU3m|qs5`#YByq0G*ksh_B4E82>O#^8##dWKY)HHI|?Dm*G&SohpNh%V=NgHDNA zttiL|f;7~DA1zm(Xl~*u2<)!R4Db_oCsXtfuTl+USvWlg^FBo3J^KARWZ|ENC5H0vuDVQm^Z6KVleXhf z>m6~^=X^*w!fKj5vDZTosi-w&jb)dk-h8h*ay=Onjs2l;Vk)UO(LDKqdT7F&(t@JB z@H+5^5{KOTeuXNQG5cms+RWL^LgUbmSPA)XyezllR%+!puOvDsU-8ZpbX_2Z`*u)9 zR+nQyIt+0*i(YgGIU~Dm$lulStGjbLiRw>H$_|-2=1L z+3i#=oR-MEUS%G1kRZgNLtxwI=f;wBgQh)5%cnLs!3UL4(Vk!>gn?CrGNQLhi90?V zE`*{bzADs!mcouO#osL1Vc|8LQs5!RPc&bYZx?oG_ocrobhpdqg`}i{2r(98$yRP9 zC0u@^pKiM)m0KL4T!i28?!s$I>$uZ&la#HRB_sCK*dOmXcd1Tti$+6F*PJG&1-hz` z@wc4~4J>m&SctTCQ^jKo5f1pcMFh?Aq~dxg@cOD`SEXqInjPoboBzU@>^5*lWJ0xF zJeWbRRtk9LnKrp&IWiQ9u~BTn_RKt5wcJ_t%;1Shyn3{G?~uXN>iEhnQw+h#?021LwB*gjkm%{W)bvWl0%!>R9&G4#V3Mjl@%iC2upxUDGi_S= z=3;!g*7?zLKIGkrMz^psy#v73qXN`WbYnBFmbNlg<$ab3h59<#E*8k7#bLKH%;47y zZGZ)%Zc!+Zdeu)g`GINXw;~WLC<%nkU^em$w#*&H635^kARxDuJx@-TU+A@G}-$D!TJIMUw3I! zb;0>#-6g$Gx6kF)pA`mN56;z@1k`GLt-!XM1zkFKjI7W)HfS%}kZn;>QBYj5j5Y8loE3pDTZf1NIb&U; zFjdMM_gknn%R~9RLZd}4nuxc!a(K7vRgsEGzp(<(pH=ShtG?aD`TY~iylDv2 zQI80p@jhRXHTzthe0R8wS)sdcw*tT4b;+?AXjPUGH|cvp4uNhIt=3H7fySo(@Vo0x zS@&|8R@chr=M_8aYI9j?nx^l|o_r;FTe6=J|97);$#)h5XnsL=gMq#SAvg>uXE$SO ze?ctr#o7qR)p_Fk0vM&a-{zAGM#^2L9?5%+mRJ#ZdpqQH{u>Av_ti9gm{K%?!^rEH z_H|ts2SsfYqLIR$DKsYzZBKBlHl+ui=`V4e-_Y*n(CJ=j>DrX%d3hK6N@J;W!z9#7XkSJ-h=H5&uH}lRf(^9r)ase8}+JVW^#to^Hd!y8dJ^e{;2z;gKU_@j;xTuvXuRHn>Es!VG%78 zP>3DyS0{7sg{>}@M;o6Lkfr;D<3bg|u)NDpa@lpsD?^iv+C?7+g=p0sHRyE>U0aTo zTBLlStd~{`ej9*udGwh=r~%n{8&cv5I_I#%MnaM4GCie~a~wKHKkYR$R&M&aMbRDG zc=sR$!c=sf5YCr4Is|&5dk;F+JbnAr>K?`CesSjMl8L7YZ=ulztWXH2|CNX(dv=oA zwe&6H7Ql{O&~mxjXj^(i{tNML2LHH9RyJ|k8T1mW2 zDH8J1CAtl%vrlvkc8%(?MN1~e1fa9!l(oqXht2p>0TG?@Bh9d4do?LPDoy*6BoK#! zh-|3RH?`Vmms8kBlBLT>`ySW!$oAT{$RW{`Iq|Lc;gM0H0+`sPMWb$4Vf^!t3W<&jj&XNCA3K zj5vh?Hy0Q|sJ0gm-)apB?u>c*k%YUrt#uE&Jy!ctyVg0_yVQ)$64)7gK*NxDe1+cG zG-Y8u+A~zoY?H29adWKQH{t2~!3Ofy`<}9zJVV%HW9GAxd!}Q%Yl|ti?yaFuPb4}M z-}8@ik?|_Z>J_=iH#h#upAl06#SFHoJFq$K8(r_QYOJ=Z=-)(HLf9v@GhGCMrdqq> zJfpqpR&?DWM5<_oxxF3>)ex^El*xt&lq@DdN%7fMh%+HAp)xR zZnx45nMEL5h}vl)dw#%-*%Qm85~J&3KcdpQw+k*pJz{6t`EtK*=jh{7p%eSDrUhj! zM*h-k@a!1M=d@iZ-iY+A)7DI;*DaczS0@|zi3k?ZfRJPP>iL4v5hbV(GP-)~EyICv z>Mhc6;eQZv&=1rvBo#U|2wkOuayJj8kp1uc#?fzS^%@(lW9)abyT3LiA3wgAd&iL$ zM|3L_?A*|yTSOWdS%1HJ|Fo?W{||KpMC{-Qs8)_-nZPI(y#bx=n45l!ss=Mow9e9E z&lDK@uqh$)eUte@6iPQqur}^xr#;EyI%Ci6Sh?zLoWg3xN%C(r9T(6$nglVt^&y~# z@>QSkJc)$9+dk*Z7yGJC#c+PpfBARig_tgx#d0RT-P1YSofh)Hcn;rnAPmh}phtz7 zZj*N{1$ONdoTkpHvGwiMnpGoiN&hMd3mSWsNC%zNN%A#vf)fneNDbou@+H2jK%95N z#(9!gaQ;Op0fWl~fYT0AfyZb{{=@L_2jqu>VeTGUNE5;RRkm9aCD+Is?J||U7WUT< z`A#jt8+^?Ma~nyLW`H|CAmv~rF*)6vwIz)+72vK5NHE(n4Tkii9Smr~clt~nFtO?; zne<`rWBuJvvK;I}Sd@*SA z$BUds?8)|ZqqoijB3Jjfdp(SYh>ukfV5HA+e6c5iFRx&D2Ju1$y|#*9;Hraha3wXG7tV{ zH15Z_R4LI9EE}8~imG>>XM$pTE_d#?dIV8O1y&`o6 z5?seRG=|_Fr7yRayxWypW@Y1k!1Z#nnAvygfTB*GCka3YdlpH^|BDqrsog9^n|bu zoo2f;N4AFXqYf58TqXS-`MM0b+CwarC*S8vjbltZ2(^oK)6!1Ulg-$l8j2|bW*v&s zi{%BPbJWFvv@Zr`n5-9|} zL5+1NSU@l}_bTaU14#PhGZd0)6bf@*3<7%0-N3qt<;+K#u1?0`)L^VYNORtAV3y$F zCcGG6TCla%gd$)KU}B)RgE0U!myn=B@lwhQx0cfq0H5Eox&ENiewcR}=OI`M)>h4lMbp$@~u=H2|_U35VV5>A%hGg-YoEl>GZ!{Xe7h zf3pyjl=A-fU;o3Hgdl!O`eW@LTB{Rb{_UsyK{f^h8#(en;!MJyIP?Fnl0rt#L~70i z^TV60zf#1w&1^fMAuo+E5LR&(G7B{jv%2`3|^DA>`!;G*b1?(h^|E+Z0|m}%4%e1 z2`!SUgr70@I-8CZ>nzu+ck}>AtQWxyFcp;=txyAyuWTW0)b+|qZDUC=h`(kSrC2YL z_#-=@LRl;tsE36+REI(5@vU42fz_ad<8ZOC<#tr-LiVbfge?QbLIetVkqUJ^DnsgN z0@d6}Y{Ii@b%Q|vg@RfE_5cwucMZ@@Jy=8yPV_uU#f**XbPH-!#g>3S7lGEZhgQl2 zii%BiAfw=`a##5~w*yDZH6kEkrlk5SimPA|y^?4{NSR|DiV7i8n2^dknQ3$#FLK=~7#sd8*DI z>C*@F=hc1H(eDo#3z)NFl@NBui>yYbtE;b=_j(`TFgOBgDL#0`Y&UfEUzQGzAUFw zDw6`Q$%>*nKvfV(KwzgZxG|A9p5qUU`wp>`HI!PG;+08 z^%-PZ&5sR@3_q_`72RkLN>5D&=u>qbfAi`pw_Z-6QyuG6uYr13^+rbEtq+%Gt9MRPu+D;IAXa>hg93Op96BBprh$JYxK%iHGo7PkvgONjDFC zC$Nb|!+r14$-cXMYr>g#hf9aP!hxSki7s44hk|_%o5^%PRq#8Pwkq#S&euBB-sDE5 z!O`i;sNfHl;%6|tMA6{Z8d(9m)3dE4J%z^rX)P;Py-xGFpFCdgOloMSipK-ilAJVta$XRdHRKm?(*Kc=f_lf)AKxbnMAj$T%`ujTgWfA>upO zg*S$1BpFffU?v4G(SrCqEb5QOr858>z))!8q+-eCAU`+jaSz7PTlVgQZoI@O9wVU=BrC6Yn6w2LWe^OYhO&*4*zyrJJ zJ$dJYOEI6lMgGRSM3?z!;c}z9vP4#@A2|AO-zpVYqN}0lzPQ8`bGwbX)Ai}-Rj+9=RLSd}olAj7 zH~{B=A68C-^-iftty~gYtKTk;7VUK8u>A^sfjvS8e^KxKBX38-KEowcCghD!^BGJ+qQRFMFmpbg2|Zl zZdTF(BOzK+jAdrU`jJAhRPhSN9)|~~o-&aq-kZj8wN9%2$@O*&>#qzd!sG;SPKptD zeeR3d^z4(5P&POESVi!yQ*J*tzE2gKOHZ@|^>)MeM(-LfSbt6JHM(}zC zzdyWZ<8=Fql`N%x$G*6k<6zAFpaZ(50w$zEEjj25AtFE__lef={k8KHgjVqF#id@ENFfuhlGt za9lhnrV^C`?y<0qdQUla+OW)OUKzC9K$!5W+^>%RsTjKV+8+<*`aYaK;GGj#Y3Ieg zrl&A@C}{n`NmMoGdbDJX$JS(N?u8+A;aQmEHvF#MtqdEVOnKkbV)wIeILl0dvTI62 zMkdV={Wc|x-*x~xn{x~yun81|rPSFc_meV|f3a1Ibo6T!aBcZsVsF){ zq3QOOtj4jQ#Wl0Mu}vRL=yKY0WE6Mvl>vkExYhDfi^>$0L#fER9Yen6kuam$Pu+`g zu^*G8MQZRddGDyX<)A*(cUSOiys)y7yIjk7JLwNgh$7JBq-!Asd== zi-9ocnU6+0V4;b6)_6a<_SkfQmYt5vE=5tdrdmX^Pxlr6Sudla?I%&|_>Ik0Ij&~y z#rNT8$elri(SisKuK#EOTn|4hv7fANx>A=d@MMiYF_=>gCwDyN7`qR9|IjgQ)$sl$ zXV$fy-c-FxKoB|g-ZFuH8!=9Tt&V3`(do@6=BpE11OwAi04T z(4K?}zYQ8tI=>BqJ=c%d&M6pa9hB-J>uD9hW%ox9#bVdcUYAH>o$bLr&BV6s%i>@ydJUFH1_sEET3DSC~B`Ks~AKQ zrGZHrnHakHQM_BUwId1ms`;}a!Wp>eKtH7gE~wvLvEzB1>1MMN?DiI7eFPkI>fUs& z^W^Ry$4I?BfMl;mguF6H)Bw$;5EL6B-?c+4fr|93*~Tc>k4X5hzA?6@9(0 z>jV;0$k(2hvo9C|cF&Oumr7;W=+_<6$Y0;_M%JDG%wacp6Tq)Q$Hn7;E&lf>45IQJskZF zqR-z8$~KuZ>Cvk`3BG@$*Kbi1z-8MYI=9+uP|tA)f7>cxGMU}CQ7SWmYctA>OFL2w za2>^g#>X)+RgF}nkiSXj<$>*yMG3Nt)PUJE6oP(13Zfu>jn1%X?AEU*2~0y}=HV0! zOOEiWtxc5AK2dOVU~^LS>_F^fizHGBvSOaD+2l-P71s=@P~KV3eG$Df_{6FCtL1eK z(2|!>>0?l-Us~+vgelXvaG!3%Ie;StECHw5uu2r`UV>fS+G4J#N>DVSu4HQ z_U5w-_q+n61M3`tbtXLmuJ;PiimIHRP?)TyB}AP=o;rb3gkU z7HzGZEDUbM^`kM3=QO@2V5R(MhMAudP$z1Df)xqH&%3IFXYX4efqcDL){SZWE2x1e z$dYZ&D}u_3WyWCZSFE-T(}qHLl+GfHVjEbl713L{xLzl>FTXpM0)mx zOUe;LWJiuInDG>KqeSuqGZrX!s9a#UT6u$&C-+ig@5tFrBu75_;>ROWtQ1Z@|jYb znoEhU@55C}E$GIMBkzG=$H}ykqvpj80-83ri-b2H;*_0%8$I|e$KWCH8?8xX8s+ko zMAd243bH|}iAfCV%7q@cRJ2O!{@Z}?pUw6;%-18tX{>L8=2jtLeKWVkCQ%Usw`23) z-JF7Crp6nzgD$7rU)RW~#P9`ru$!dj)advgn6oyXbdl~tHuG3p>qx#KH8fK^u*OM?dCFv>R}hqYTBlB*c=$KWL5*-(cKj#;uLY=&|mJ9o+=PQ zy}f4t;@D#iKKE$`61^?4$1{Ff{XJI90_PqYHIlr&q?dzYOwlwpbB0 zsz;-KJ2Fo>ktm-UbehW`T#Vib-o_zQ4^XkvDJ%$l0 zD`yqAW>?O3XPx?zQTQp=wZu-@izsgFYx*+vvO3EKa|$eRBZ<#Re(UHtB&L z(a^o5o{Q0Ml7gcRx^GmSJJ9Wyg|)ws66--{v7a7Em4Mc`9*y@wca0VbRgEg;S|H$6 zy9hdj3(psX{yV3GaL2}yvqyJi5c|oxRG~BTOg*n6kzP?mJ5l!I1Fqox&PlD^yKt$J z=7bfNcpxxNzQlY~-_rNz@gD0fT$kR&FR+#$s_l20eIzK((tRn+>@<@nVC*{d)%!h6 znCM}vGpk5gb;8~2J&VE7FWLQ`abDr~R0#Suy-aF_dP!U!+M2d34-=a-u8eADHm|TB z_M7{$<1TkT32T0>B1kPg==e6pLf?gMW;%M{XU_YG9(V!TJRo1cTB|2Rp64Y!hA1Cg zv?NJIeV8_+Ws&K^rc+9^vBfcFPOdsycvEu1-i6m2m>*lrmBhV{35^MOX`A7YU@T5O zUgp;8iqw4%DUj$rrCUk492rOfg!<&rJecsF_vrJ-ris^i$q8-I&>eP7uUMboq#ZKS_7#7+?X^{ot&zQ?DlUf1d}G(>0hXZ#nNzQdWu z0NH@Pxd^v*bT6B-9*wv0Tq)^TA57od1rS?*J)7Fj6qw#RrQLp_fza-)1@*R-iaYoa zv0LO4ie{sz9HD;rf}Oc2$%M_M zTbd#fO_%^uj@FjTvP)xKHcf11TI*t*j1yE}BC>Ut98sFm^G-AjQBsMdUp8q2 zZ&F5X#!h0#LpEbGuape3XcMtu;do||=F_=Uge$*bDJJU;B0Mmp|DxE$jbm&-Rk*Af zzq4B!aP&$!F%r)-2e0ZIC_f_--hy9uJ%)#Q)f{q}#7*{aIk?otddt7^&9KGZxRK+l zK{tW7J3K9jq0Bwu?(b;8&<`K3s?)T6cfDcIo{3N54)O&r~>Lu|B&*m8#j->==sPt%zfKpks2qoo` zMowuqzhmW{rl|wZZ}<7)h!XL5abeUZX%ush#&qBo^FS+B65ezf#09>p_qk2N9?{I= zc}Sv44X;rJzg1xh2}TCDQ?r+6H)-?CN6R*}Uc9tUNvKTf0)Y#+CX(2CzJ9A1>_%-^ zdTp7f*$@_s3F|3VzQh-AK*Oju~~1!MMMP6JP<=YLP6lXP}g{acQAkdkn6m ziff#N*(jA)r>x2Y9HZTs8IAXGz{S-@1Oyvyoi3!g4hHuUP)wNr_cOx3keN>Y zz?x8@6^v)&Hs~PF!!g);-5}k9Z@yB2y3}L5+z_DCp2I!6+_h#B=OdW?Yow$o*i@{g z@@4(yrX;t#kmVi*^dN|zhf1n<19bmix z_UQHBll+Bb2DW-iU`8wQmf|lU2Nn)QLLu!L75N(+{1^oS2ftXcETsHBs^lOTF%&=t z|Ig#!#UZ2@tv`$y2A8eHsw{}+#p(GueNl--gk${g+enBZKtzQU1?qr2TI^8t@Fy*n zJnuO{yl>$SpXxux1pKE4l3#$xKwN7IW|ciWl022x8sxq{g3x6ItI84=;vRtc9!i-Hpsw>VNepC%B9Z?bGSLqK! zF~%M968B4*p`URAHQ#gl5Ocfx!Dd)#{`+0V3ZKPn9%^afI#z#m6m7msi6B8Ge(WPF@e`PN-1Haa{;3kM2}N) z6u3V<7on?({?l`mKEOVsW&!3LQf2zLLRx4d&{kcrPpf_R!Zz$DYJO(T`Ag-58El7(WBV` zalTU4*0x%$F^&W5&4nqdoudDHx1QeK?K-o2tTcM<&4139A=MSvncHgy?BN8x7bed!FC1sYO}p01`DxmzUEq6T$#J3*(N7tfNBQ5nS0;FWZ9dW! zY872e(J<-|-%|_Y#Dxm0hl8TT67W;8O|MQd4*R4qON|fX<)LIZ3eM~D;>=Y&$4q{U z&Hjfq{Bael!K{3>2}?>3p|Qe3z{vRcf|QaFZW>oU++3NOBu@jw1H9^IVs8X>5Jd}t z)0do(XCFJO%eoTicuTu?3wWVOx*!JWMUi;Ib!#0|5%4&Fe#__(dXF_<`&R1M=aS{( z>gOHib9V3$_9>vsVQkRFo5GmjU*c9EBZZ2>ISZ|JpBJ|wJfAMBA*Z1H{Jeer0Gc!i z@@o4l)~r72?z#i|SV?8y8oI%S9W|g{2`7ufRAJMgm)2&xPt#nb=72IrALxPnNTJMQ z+Z{lZ;=+%g&Rlg^!1#EIaLEX9F*aT0Pc^@4VucD(HJUt1Oiauq`*`Lf>W`hUs*F-R z;~IsmPYL+R^BmVF4P2Z{ZY#D>OH;yob{Ye+3MhkfRg=7+-FNEXPoe}e%>>V%JRHDJ(z?Y`yb4l5~v$FhwV zl0ox#MA(#mAP_Y~Y#{$p^~<5!?gvesHyW%w#2jC5ovu-d7o484?*F{LXGL^Gy(#^uXH^f3IE9&`w76GaE5deZv6k(6GlnhJ!C^B zC(#{_zaQX66zgmO%1X-dg)*h_N?mHIVFfm1B=yVO+~K%+PymL{VWl{su=ElCP6q<) zNvlDu(B)RADh#INj}7JO$!G)NP#xxs4E)M>#C+sz*cH>JIlh+Yv|hg1U~~(%ah@-y z%{lcV8Ij=*Umt6o|J^HUB?zaKik}}WL3C#kEo6+PKw^0IJ8 zz6E)geG)O!AS2G-R`~da1M-mG=+|I>d<^KXn=N2~j`K^nl19ct)fu<&cM)j}`J_83 z)SUADEP(=9Wvyr*`$726HzC2R0s>{mF|^-TCqNYIrJH9hIP)fa+QCk(Xor6X8k9T$ zYh7&;lSBHGhU8a$ab{bhQ!mQ~Cba*aaMd zRzOI9yq}N1Lb!AiEh$J{#(oqM>S6E%n0U4MMk0&PIqlHo(zZYoRTYJ&N;~|-!0SU1 zmew2;8UvRoPd!kX!3j%OwA8#_Z>iO#u-ezWPOsCc*C7PuR-70}0L$>7#_HW@hDU=Hgn-9pnoSB+3epFu%?$SrjPa{E?;X4F5J29(B!Sr2(i4`L zuOKGBp&G4)TN8JPP*A@^HDz$Q%wWA1I*?ilVd19%47RsO zehgc;eJN$P^}?|am7iDoLb3v9KnvuKP?v6DExL9ohlP$nw=C-`D(5&%)74_XeTO9L zS>hbKlp*OlIBuQbr66M~SC~YeVy_RLRLntPIzAB8rSWb++5HoT;=9G!8MM!ilM1ev z+!e^Tq)2F3gz4}Vd~@BuX`#)jUmKJT`qIP+``dCxyXG668uYM(#s!De{?`&*seZXk zBmo0*0>B!O`+~9eNy9qylF~l~_cwjL#m^tpJ~MqIXCVTE+dkQ~t|0p&C9yws#}nK_ zg#gmWgC@-puDjRHdxj-L(hzpdb~++1BZ2O$&tx2iVK5jZ+5-a$QW~gR)8W;YNNORV z@-nc~XX2nmQEFyn1@wQCVWFR>T<*V8t=DVRqlpAbxkm$WWh7-K<5`QOXt9B1$I7cc z^xU6JG5gObyTE<(N-Zv>i;M`oi|OP3SyqX_T5ohpG@h@O3&O_;w@`#*&N^kn)IC`o zrPaP~k*2j61T#MWR?eV?;)eM2%RuCNY%R!_ei5xn|F`=Sg6N@Ob{oN~%ys=bPu>jG zmIxi;a7&AMi)>5)N>^zrGZs^JN@*Brg1S5&4jn3g!*u;Rq>l@_$p0VoK!Lw9P9NgZ zKw{N=_p*BR@Q2>LlUo>tz%G~rw3Nza`U$)_N2FiL>Y&9!N50`d+YCaV(7Gk$qiM%% z{v?~fF1J4aY&RrKYoM;bk?OOS4)XjH&QQ{z#{r<7r&w;*070msq!egkW+v?^t`=}jhF;M(G`BXU?RxqXhzk-uicgL@#%ONWnEEon zwJ-%nB>1n+3r)ij@OjIq*(_PAhg^x(d;_@7KodHXVz?hpqdwZ*LA>^z56Y&}a_TH< zUMv&q8|ka^`F@m*k4H0IPLJx0e~gq?WhAADz*f#tv84~=8}hEbriu@*5ll=4eG&hP zC~%cGyX63 z-ZCoAFY6af2n0)T2~KdY;BHB9cXxM(;DJCA+}#Q8UKAQ2xQ5_T1StsaTF8C!cK^F` z`@a2Q)~q|T?o5BHbyl6{*xvhWJHP#+#A;G+UAWQ-+M%~ITg7CN^uR$2RE#KP3;G#w z`AR4{qVcma!uJ!MK@`W}l4^nR+7hQVD*mq@q@v4p9`VQk!b~PyHIi{v&Ukq~AVlevp{1WRYe#J2yen+L6=ur$e&7Vi4)C zm#rn{$3y3;^|rnF3&NMXp^xy*K*lfR|L$eD$NAdUOs2iDqiS}^z7MZWdOG`eg^p4TfqB*`2~Ys!{DeBJB*X9!jvjc1ju#Xb z(F+$+#Ssp0Av-U;`P?>HQLb$2^%h~gp5&@1$9!4zs9i^K*vFtVfM>x7) zbY9Iz-6L;HhIP_JBHKwMP!8~BVxFD;Z-*O+%jYAc@XCOIwhr~{)(cTI)QP0vt-o|f zyx6Z7%kTol^C6^>QG0-9SARR=nj2Ae|7ILwu_H#4%O&8@s!|tqR4@Ryg%iNh{--8? zxfI^f#uhzQE2N|MjWzR zYrkvVC2h7GeZOeBYt9}7Po4m9zsYb)TdZnWYzE`2miiHu8nlOh>+eS@-56l799z?v z%+p91D6xMzeKL2?_o_<`;;f~5^|m97y~YxS zb9a%9Dnc4={C;Q6q?lj#7ClgsOuf>dJr1JHaJBehc)qz&{O!hnP)VLWsUr9HBG^6B zuRLmygi~&rgucE7o^c^+Y7fdKF&JvMt_4ti7CZguVLpAs8Zet0ts3wpd@$q*z2#H) zr8W>!2(u*)vX2qM3*aMeK8WtQNc<@X3qcfs%?5uQCL>L$kMgtf=ItYbb>~vvUF>Yc zrUTej=#hQeKpFm_9N>^!)n9bxO99N7Q=;ycKOOFP!~g|^eoPnqn_&4HDm01}z}!6$ z4{hFmnx>RNuc^g)nJ7sIY#YISLd+_-$z2&#B zC=;;9F}7w*mj7p@wf)84mAD%T%j8ylamU)F*JnhB;3lU7dvR8xZwUo7DhtJHN4i;BhTIvuW2 zKbks8e(uUe=SaJSE6OQ(EnxIVdF=9rnl*OUDZ=E!xk`w))WJW9`JDtMZstCNCR-C@ z!n58^F?yi&t)CiA08AD;3~K$V)|4B%4=7$xKR7kKp2HeR%3EBb>_z9~ zAtS%*S!yDa&TF%PsvHFsNj^kbJ=1(Qd=tixs`{0-7Ty3>x4?26k{qnuMQsCsLr($# z-phL`0v|?oN_Z)}k1*zI&0-8cO#;D0=~fD4K_H2!MwXD zYB|_h?jU<+2QHMZX5T)UgUN8*A}{vX!SD6213KQsk)J5Vw$9Da+72jTX>3yt7A-*7?eRy=q9&1yIj>STdWn|~l(o4iZh zoBmOPl;2|Jt??3gWw=N|Z@J8UI*CxO|HqO?G?0`wc;uCt^JT#AK^QE%zrejTWFqzs z+j&L+9pX5S`JxP8vD|_{<0}c#H-;g)005%7F?h0LpV1ZYAMbEoeNcs8M)IHRdx^@` zn)ViWlv`f#Rmi7aeStRVrbfA1D)8;?t1K{mt_eY0d~z4HO0g{ft-=G311=xsklGH% zJIOS5x9qWi-vtDKdX^Ou65j;alo=qB7YBlrpD@TKotjWStbt8?ZTTzTkR*KT*aI-( z99DZH(4hf>4T2g+nps&e$K!gdA-!u|#vhxT#w;^tczR9N<9w`z%u%ch}rH?tq5!+rREdk${kDQbiZx z*o-==Hr(uN<=`!}M15+FB=JJkG(MfW!6M_=$AaxDZMSs;cegKAI5qU*O@u#E-N55X zODmw9xVUX#-pQ&tTV@jYx0~ZVW4bhmXUJNlZDH)yz++}O06$Yo=uwZZ9B5WVFnL4C z&Mq!|YA-3Mj#lOIi|Ed(&)$0nwcpKstE&BEruEB4Wb}T)DU6VRT9kSCxb6V2E2@U- z=Q|EO@y4g^Q&K*nyvlm!$QaHC`2jrRqxnioi>R05BM@CiN$#yNqx`_^vS)Tqva)ps zD#B$;6qL?sHL^J!2L^k}?=JV2s}pzCOV!F-6rsCezULFm{<_<_<7R)7m9j9>9wx~?4vL>va+?0($ z$1QZYL)2+w)FW@>Qh~zx<#gf=xQ5#zZ2+__?IfN0XxJp{{K=X2Cy%-0h2zcuttx%E zPkMn~yjWb|MY_57*?L>|X?%(^kF#Cx`J!Q|YgB~XXU4mH&Ev@$+cr|?T7t_?b{WOW z4C5`6Ni&FCt?x)MaXsTYpaXhS9NP zO+U$$^hu(fQJn*vZN9}Lqd}k$0zmZIV3G<|WVaSpimx#~GYi!$s}(0(XeDXL!V7wl@J41Ii_0RxL#4&(%m ztA4)0_tyw&}mT^XiJ&U-W_j=ZgiuM%@CZyeU|8e>KiY5;+HC9-ek?* zR%$oSROu_;-)rGkEcjKLGp{fMPdWz4hSK2&pOsEEB25NEweLbyszW1^(JLma*huIn zC(ZMBY~F2jwPuzXN4NSkGMy|;T*Bs#aXl$Gi$iSJle(N_R*EU`8Ghn0I=3lsJY0_j?VFbCYit>QEUTH%GW8ESI(#C zq|zb388G3O(%EdDJs62o!7P%t@kqy$yRd)$aB{2;vC&Q^^|)Mct|R~hc5Qg-BcJ5F zFMhl*t;!b^f|kDJ?eMV-gtGaaMv@Jn*7|qh#*@MtmN9|WjxEHQRq^{hgkdN)J zem>t1*8SpxZ_o#z=QeC@g+CyM%d>x^ihQhwrR_E<(6m1N>a1$Wh>w-k0DeP9^KF=s zHC=iTr`KZPEKPb%qpEq&uQvM`G6wmix5CpONwq*x72JZ9N?o3$o1qhLTL6dFa$oZL z_4R1C!q0o(7MVH$al7e~vLE8dzZ29E!_RvOvmHQB;9*5<=a?eI<^IlutcFZUOj_|p zQOgDrkxtDz#4oCbid8tUA66=^Rm&~88wrXRconk!_6!pgK$SMw&b<$86GP5XJ3RN- z&+BfbuQ80?-KQy9n0{F~RkDrXS`w}}nJn*tO#*c;M0RJKuWEP!$ieoIB(?j=!Xyem z8AgqkkRR`r67GM4(hq-ty0+S+U1=K;Q!Ke<&<|`r)O!&)YvQjw5tU=f3*iDVjwfFN z3BaaaUM9$WN_UIr@Vndj<u*bb+ao?S+Rb~k+ zjux5Ezs5K@DL)*L*vi57XKHimk#4_S5o|kLX@>O$s2Uv7))!s`&qqqc2+TpOpVtwJ z&Kw574;U|`802$%F!;x2X6&6s?=2Gij;hOS1>&l8r==5+l*)JR2*wyM;zSIX29%iG zb*;bPo<&1FB7O?lF3>^lvL@PReClTwhI@r9D{hL#I*2+Yj_x*QrT5Q#nSNoA*N@5J z9PiqAj3V}+Z(2|#qndOwoIV2uRIFeILTN6f=2{T<(kv}qktwF+4E?V60Z8viqWa}; z01|4)kUx!{&=2DDG)B(l}+NV`&T!P5{ z$gJEiO>wW!w&^K$4`$7W)uHQ7++9~KS%caCo=%4*e={kuyTamDJ!r3C{`%K;M{)=`%$yCrLQW`ZC`Q_Vl-3tv-RhThHHW zDiJp#X;PsZVT*OkUZT=ZcQ~Au!VB2DQlPr+t_>6VhWwR=1PA=>b?yr;5fcX(eOKcV z6zh1OWMjV$?&Ot3EO_hkZB-FAPl_2FR9WC(tWJ5e33Wzf7?!_3_Wu^(J5DNX+xtLgh2fNu#Nhub$)M=W!j3 z8P$}`nT|r+lzS}*bBM5K+qAx+2au?oK7hX{e&xhPM+bCGN-p+lTMetjJs7*)m>*at z8EL&Z$CtJ{;DV$vD;nQZ3(VD5Q1TNsY?Em1{!@-8?hm0#Kb7q^x6QRt3Z`nst9Y>R z_VG>SDkf&?jT~ZM?mVV8eDwnb6q%!eMew!V?81(CosdmtWm)9Ms<-!|H z9u>z_D5)wMAH`o#50-`y(R%6v_#0t%=293l+VK}_JeYH5h>*nW%#78^KYP*^h* z;ICo%^swaJ{v$o(>$~~hExvK`&F;NDPDNKJkA3PZfz-`e%at4Mui%xtT-zzQbpJ&j zCfbh)(PQ^O8F!P&mn-*JE=2Xm!nYI9RkQZ+S2{=Ny{m}!iF`rS58yG>!g0ey=DVrv z**599f+oSK(6sA|J22ZEHrauI1mSUNhs@qAx~1pwRqk^R)B4UevK`pK`j$qR_KWqS zgE-x}p(HuPP%tK-A!Z*wT4LBGaO7ft-niu;!qw%b(G78nMe3u8w3ImGsvoe z$`H}7rN+E;8hxVP`ik1FR7JI>v$|Uh(SstdY!ca;Jet9~0fE;Zk?$xhtJ^LNzwu`{ z-&YN>8VGu!Py`-+81GrMr%}w6N9*fNQ%xQ8iEQE;+B>?<3oOol1PHU<09%4G9hns`{n7=p3UY|?@=oz zYCmBb)$eBLes9tHlKX_5+vgs#VtLU#9Bk38(f+1(x~s8;We_lTzlId(^Ux&Pf!a$@ zweKZ<r> zoU^J2UZl)vAv9ttC1k+w?(XUbh^ox~z+?pZ%NFyy``b{*bHNDn zfPl(+I;s~^<}Kb~^@zOx^9zAOI5Xw5jP0AH8j}ww zj|Fa)&4(ox*-z!#WXYagB`HF=mH4-<`B$5%H>zzoyAAX6Pf=mDs`%>HtGg2Y$0zH& zB0;LOFZw}rR(0ZEL)P+kY%73@2`9^#qOEeNE6~*pt+R5Y>Z-`4woK1aVs7*JmbrRS zxBe!*m@1cu4b+l*8UJl}#rk8`p)p=ZaSmq$lJ#$t>B@eS*-4rF-%x!+$eB06mnGzR z`#NR&!UcBLzNKi8*2b!mz?~<${*ME>9fvpCewBN7mjFedBdWsnQ z_N#t}r}YZYD$_gy`S*x-SGXC-h1ykWcP{qFtgn3#U8gpA3c_VT6slISUyr`yTFj1x zc@;e~Os^Pv6co2kCo_JqkHcis@H17JiYkd20opI+lC%j?C(S$Y7fIW~xm3OG&W2y|6MB?|zi@ffAx zEzp(Lo+kLwKPri%5I;s-&uwHlN978-y+tThen~&!QQ%4|m1}F=yBpt1sf9-KI9o2r zex_2jbkZ60@`Y1U(N;c|bkx@hZ}dWw<$YB-c_x&%*uQ>+YKh_Dc&br;bz?-brU{eD z9O`@4Pb#XAl)50sVzDMw+k!Dfw5vVhGAb4W>yZdXDCT@7)ju%d)A@f@>jnf_!Qm$Z^&ax)? zGM<4(08f&e)2Ap9S@Hg7A z@Kh`YM&NJpR9Q=8%Gd$D+6VloKKUB7^dp=8K8yu?yMi9WBHiw|c- z5u?-rR{3F6Jo+yz0P`?x3WRxjvCa{Zb@gh1zL@wY3*~beR(YX4RIrFRECg8UBmYWL zUJ(sYBk<+ICL8@OtVlU8IAWc9FKVZRFc$)9h^#oJ9O5rK9R#^1Ea?xA?l_(UQQ5?# z!{0MvNdL`lg;tlI5>jg{h?KEBk8gArPzE0%5d9vOZ?b{otyw042+kh`?GZx(vR2lO z_xY2oB>=K!^`rUt2U(;2ChG>8b3i`+#V67cKv&%>>1Y4sO)NYFls<7AnVrY~Y>OoT zx;7ley#R`;|GhIM10q)BhspS}FU+5DCV=oDdp5N+^lVD${F zGQxkY6PWenZ+Y;ajr)Ip3fX9>oHNBTCK>MR@ z8yBFaoR|E6Oa$>gz$E{loLrFXwv{*rmUPb7;ND@2v0&Od6EnlOwCO5HRKr|eoO*e@ zp1F|X>qiK+fLJwkTV+6OqI-M;n<=31-p@pM9`|YPgV-RJcIQi_fE=!6)SmOEa>gi< zsf02OCPMFH3uev1NPct+wSW#T8)d0CjU3r7JKHp zj}TzL=cmujo5V`}dwvCZe!XvBU33|9o+3&{XJmRPxVV>+OjWYtGi?lX(=z8P)nW#H z#mTKkYO*QSCZZGTWbuvqWUPO&P%)DD?j{pS)opPnUJtS{8^^A&6 zTV41jrU7dJ16Yt}v!&o{e2R9R0rkl^Q&8csmS7O4(~qLm*;2LEk9$jXrGmTw5OBr2 z+|S;tFOVx)nqHtpy#MyTCr?%BeTU{w#%F}&HvkFzqXqcAlq6cLDIImcLVWh}Vqt2!ITnLAa7V{mjp4sk z2J-4HTtb4~$fI1G7dY&=({j;WE2cvEagIfoYM`DiXv>~;z>^99kX>ACaMD)nJn*Ex5UpE@oyz>rg)s-tTej6T6{23Oi9TvqcT61SkbC!QC`a@FalG;bj@;ym^J;2`|!b zJtyIjtt4J7$jlDGdM{=QEG^81iU3hI9-w;~o0KZMmoHMPE*S6&*)x`i7d4sjE%LCi zP&k0~#OkHABxwN0Qn%om#>gA&V#)WEDW!L(H_vfjH>eCZDM-wQ2B7Px%GYT_g20Yn zcRaz09QJ|}mbH&|8??C>&Xu_!0=kngFzCFQ+!&U05}@K}xOT~WqFDdgV4=%Bp9+=% zsFGz9TA@)-X9G);UJFaOkN0%&lBKa-aIrrZ1lh0DRBQX*IaKop1^H4Lz8F)_jCx4;x#*XJ^i^l7Qoq-p7msnh*CmC zF^?DH@E^UIYP&|a7|ZnLaJXSf6LD)=^4@J+UDKuzfR6y-y50Okvm4zPL?l?BWhlP~ z@H^d8d9Q7!z?w3u&Y9rE*$za5*f@ zIru)@T|)bpU%!L~K#LR{Psaj9_sE#ee7~)>TckKAjYUG=^MXT2@qodD_gh7wgI78bTMvDt@y>_K)QzpJ{us=T0zr7CW>IJz@*8kfR(BFt z-c{+AA?sPLb~$EH@M!IxxC!V`&vB1Xk3E%w& zpCJSwlwLG~I>_npU0pYFq41mfgq1#pSg#cdF{6mwZVbeD>R8*(rGgfsnozeQ()#JL zef@hU?MpnpGzB#gwNYkyJF)j-O(-;rv&pPRFE6Ypk}kIPePM7Q(qKMoAmH1&Y6MUb z5(ySVvRK{SNy1|zS#fdkkjc%Qz!}+!&fppWYdLnqorfmQ-sXe!h@RKAS?#cgs>Cc^ z9=G6&n4ZA-_*}%Mcfgz@`|@Mi%yzB zG=t}N>^22TWRl-bD_IGS9m#_PG}V+i(uGFRM1qD;_)jpIw~&xFi;J6194{`>{M`=Husj0RiDakI%KH3kT6?gfQ8+& zY=jg>)*NcKSG<#aYLAroHRs2sG#EpWR-?7c2*cy`F&WqpK>p}dHkq|NC3mqtbT$O9 z_%+^cLHn29tRrOkO#mSrj*Cmt?$<7D$b&o6fy2U=qS#~ohWCRXMcOap4B_YUJZTLM z^XdV2cc5uXu%ZAfDy1@Bkorx!(IcpDwLxLbcp?=DG;S~!V!BKH{VuFSQ{B!P1K}mG z8N-eS0;zJ3L-`%L!TACt@@+z<4tDyPK{kf8gsIMm& zky1>p{lEo244&FN`1pZ|#!80MY=#uF{gIgl>O#sNCLR`%a@`F35tA^`+>LHgmvrDi>(fDr@={>YW0Dq zV@?M_U-whQa2kM7xHvmIwz76kM2@d|dP6Kg@>gc@8)e||naXs*Q#4M8x{1S+4nsVf zsaISk!hV!}eaHReo6*1m9~UEH0N2T*jY&^HVriAre{_gvo9Pu`*}zm1eMskWf^t;} zrmsiyPf39D=y6NRH3vQ5fQR_V3Kx2BwXZwPqV((#&b#;0^7U~cVHTOl?U3E!pbR}Z zfQ$2yTx1oO(UA)%sg;(pSFvD*fXE?EIo)A78*tIfYYrwiFwbx(8@?2cPD}!IG7@I` zrbpg8wB4?BvbpsN?tK2R5t;%`d}w8BP%;{RTOKDhfm-kb6g5hp`_RElE}cK(xi#P{ zpuK4~EeO0bMl!KWFlET;PN31eFY}vzPhq^M%@9S9I(z}ZBv~4eZyasv<L8E=jtmW3y3t5i(x_A?B+4+|*uD$2cTjm)Kr5HrYSw5s z{p?bT(B(7`3ZDoZS-iM(IZVAA7M!4tyE8&u-{WNS(9#AwzR~v0uw6ZX9EQE7!z=2& z$??fzC|h4Vzr~DyTjg}2Ns!MyBe?CXaalzM+gv%FU6y00Uez-aKW{WpBf* zCELDz82HPk7(d$Zdw+v=mOw+2-eH^3LC0N7^ZA9S^lhBHnLPqnROsxN+t|mGrFtcT z`W0PpKzoHzXBVWV4hf584(rDqrZDv;0#Jxx@-46gPlZnO9$fvq^XvP5qi=MbY`Sgg z@Lmp`HtVnj7M|E~)>(2R^N=(6&15S$o`%0{&tAzA`!oB zCfi7TAfF-=N!t^(ykx`lslqR3RdPF((qHMuD`&$THOlSN-lkZ)I6~G%3`UE^lB=~f z3N~jyX51bdcnAi*0=4b%Nzyijq<`+RjXLrkf%(L#pdgr7Qy>a+iuHw{lLU z?X!>gkFTi1Tc2&cR5nFa-M5393j~UfBISn)9s~?PY|yWtJ25P`dL`O$T851VSF1DD zO1S*83#hYC;RS9>Ii;)fQ=i+?6!ZJwUPqgYCI{W2Sd*SYvrnFNvRb|MSi;DCl6>n( zYA2~twW3EDXFnLy91z#zSM|%P>I_C5mQ<59)M_|8429)VFF$L89INBYr!IH=F@=+A zjQ1!G+HZ!?+w7MPJF67s(d`r9Olt~M!DNDZIbs6-tSx6eBqG^Q-<4n-j%9O>dk2Ln zZmkqoU)$6e7@`&|fUHJR*Xh39K+c!yKkZFA44Vq#(kaH#=NwcIWt2HyTL+uUG}e{GE~mzTAq~_)JFlCboo|=ZS4@v;pojoq;r#VQN63z11wP?zQSk z+XJk{zAd>a<#w*HVBnOXiVifKmXAr67}|hlsc*4-}z5+*>ngmtmVIOVeQ`j*y1CU8fr4x{scPIrO;rWsb1X&TMJnxjjyztx62XTVP{85=Z1GlK{P4 ze@sbe;&nAk3&BncQ2Q_5*C=;7I+W_Qe$<<(QzbIcaqQ_6(y6l#O`Q+9wyCIf@YtU7 zks2HvWXyRkUn%z-AcImHG&F>uSHRi4kbo?Sy<$rl&DJjTnD?Zo1nEI^XDaoKiU^VB zJ5&s8)T^V_2QBc=zUk&@)5-wzh;M)pAmUJqb;?JoO_;s}Y*~p?APeR%CzO~h;*o6J z|GiK{&>ue8Fu>g;J133!_#eJdEUw=^Sv!@TKVm4cIDp?Pu_g}X5C5z6Z=dW;{uJ^b zZL~mFMiXl6Kju5}+dcNbtN|-hty_}nA7eiHKO;u-pN;#wNB;k6aO*!C_rGi7_>qW% zH5vcp)xRXgKbU+F_iH?rw`IX!(Uia9qJOZwGy+59llcmDw14vQzx+$=1X1|~{dgqa zAMWda`H3L&DAa{ABT4p;DCi%a?cYD8vmc=W@44a-{{1+VsJX8&%@|*=sT({cGQU%$d>~SaX7vB-+0pCy3^KH(%_iY~eqo z??3kRug}mZ0c$=Pk^Uoo^)LHR84GM2a-B{o-am!nzkDWW16Z?SHWA~$9|tiW*f=pB z=A=JD$A7H%_s>`%V9kS^)JXq+95Ea*6Vd_8Le;;f|G(~FJUy`H{}9W+9^!w9<-cR3 z{}9W6$4LK?EdRnif4fTlpCguBRZ2UFLdsZL1SBM?A6B4PB)Md(Z8UTApfgmiGH}-K zaO1{CL5`LRKa1XZ%&mxbm3mdImO9s%xN$koT&fWO#5HfYGgXm2?Rpe2z+}iVjujN| zBf0^L5W1XxO2kEHRN;h0sl0%a8tHBgMsr;ihp3i@D3rW2N^EKkI{8KwTX~6e8OX9g z%Ittx=kbuz$bY0Vu<8?mbe!zV|=q0$`N?XQEF72%;l8sjimpo zRHeL9#<(vNsqWpptc`wWv@Qwnh_%Yc$V?^;X2)31O3&DRTZfGAZGg{wp0dUdMx4gy z(NwXV$lUJbkn~*+*iHsT4(7)Q^M0a2m*-Ef-D!r_aI7WS;!F^v_RD7akS(=rM&MLE zQIeiI^s$4#w{a#T0^K}SjPCH^8DZtOy5Y7og)saqbn)B`6c&AASMgf2gb^mFY}Hf! z(l+d)1C2xIsQI0Oj{Rc`7rN4TEgsZ&m$r?gmyUGRuygk6aSINolVC9(ly{e9UWb+^ z#75B)I+-%r8yc>_oIcR#y&Zu=7zS!a^CO3AdH!vL9J#5UjQRxi#$V*_g;_5_`HLPXgRF`1=S!<^F_<1qEe2r`RMv|Ohl$Brp~V&Him3*cN04muslsD`{BmJV!Dj`Q#wzmF5<|9v0xe7K7gZPB$}V#*&sF2IHe?>ayu{8j_W&m}N9X)GM6Z zvY*bme4=yhrL~gE%n&h)7CK+DTQ&1q35Zg!RHbd}biDI{oR59#hKD&$RjTP7JRC-0 zfB*C#r2F(aIa6{mAu&%0J$=r*g1s7l(}>nIRfuXZ+PaX&3*3LFn*~k&R(sj^C+${* z|I0_b-{NsHF1q_Iv5KHC>On2wg@~%$TgeKiyK2@H(nMb+6@RmgMp020vbkkfz$>to@O-^*`%*g|UD#X-aHy zk?Fn0_;z&r9Ps~Bc{G*NS`yhOe_G5y-u5X zn$YnXGyC{-nZ_GO$g1o0b_zR(OMQ9th2S9`XBAmykt1lPa?!MQsmKGpRK3=81H(89`a=me0jjW?u_;C3P#H^k!)&J4SSQg;B|F zwrravqLcjO%kb)`mk73={#duwlTOdh3nM*^X>hM+)hjo3vXX`@aMyv>Yuv;R+VqgNBU|EOgu*q(=CV$E8lS-rQwDUci zY34(VhYiJ+{B6%Pm(w5FK>suE)OY~OestH0z7mjca6^6oZTujg!86Pn0=66#J=u$J z8Uo@|jQ&1{%+vwItbq^pngqa;vz5E62wj}nB*wteqxfN$eo`Fh1rLw?+)sz0J^oWz z-{JxK;i9B?Vt<(6!>RSR>(_$cQPCt&$V&7f@eTI1A8rqW#+QS_ZO?ss3$5g$9Kdl> zIez?^L;7m!rST-t>K5--yDd-CK!T_K{9F~r7*g`CWuYcO2iU%JpKrT}?89J zA18VB*uY7fV_K?Fu7xltrk<+__~wZvwR?NViA1!!L7iN-+TZowrQ1ar1(5CL1Aq<# zz5YsGLu)AwBW{~)&i%dz-A* zrLX^YO4@Io6L*EPBEBJ)4n262O2U`AS98l?BkF8D z6v5`d#LbpOQYXO(#Ywk>+_%K`rhO!*?}AP%x0pG;Ghua-Nh=Q>m#8`r*G54Lg3cmD zaE<*n+NIrtMnv8#$GO}Ncl(vT-of$l6qA0D~{kdggF7aIn*V*^+U9dgx2C37$JO*dvR$H>h*>e!K7`hEMt8 z08)O-w>Dc7JTnOl$|GQtcXz(a+bnS=G>c{CC+iRaXe}i~4k|4%qVO_hA3%pI0l{@#i!M8?W}pK^=uJy+hReXH6~wlQ6653#@s3Z z;1h%*jv`srkP|;IvU<%6ef?ArtbUx&@LmN>21FwxZ|iwB4tj>_M|q}yXUZ39L|A5z z31(7|3}Rn7EFpSd-aVd#tdF@4$w>9f-;RPs2Y6TR8QL!vIZYy*L0@V+A6_2%A3@H3 zL1m)(%W5+4LD>&pkei`^O>eR*WkTkMmK#$8clPuC(JR!z@M~13c~hxv--FWo;pTl_ z=#4a;d}ak~x5CjFgVnvG`3dMeaB(@J|JVCLN8uI%qGi9J&a)js4!2EGe&7k#(nv5B zu5;a6)Fr?E52lWR_tS?6Hgh$GOLmKH2VuoV9`{hE&eEJzc%FUe?^KHqF(TEoWt2b= zF`R4B1s-W&d!*H~v1mfw;Kb$jAw8oXlQX$fl$zvOgM?uqDZ8xy&DO4)pwz{R6DGg& zL;F&G*?qJ9o3GS0rZ6VRVOR0;!Fh{w%^>=A$g1dF*{-bLm&02BGyj?Txe9x1=zVo3 zJ;^y_qDX<6|LW^qxI%(_i2N)l%?=m*4xtrXN(m;w}u^s!KywB(aHBdgD7kWQeiRp2SWObv254oEW zq!`XgD3%=;_QhlTz+zY@Pad!bl)mk4b?U4d5aLG-il>Tgd0Jc`s~tS6)8Za_y4>oy zEMQY1J81~tV>9wQH|UeCu{|gDKxJpkG&;QV{m7cygKTD>D!Q6<({ckhYW1}JF zEjx@pT=){f<+!BmIoIK$4_n&d4jdLN)6V4bPM7;J#Q0M&E~#9z+-ZFRIqQL{h?2|V zJ(Ai5^m3wpjP=w0qNxv@@rxqaf&ecGc=@h|EE=WgYlHDns-RQ5?vJV@mCif1&PdX7 z*{unq4^KT{3(TO;+9e<=Tu*c074u2=uoI!2>C%;G?|nGh8x4qg;Bhc(O$*N>#*%DLl01Apn-p!T550jE?Gv| z6BJO{iRY)HC|ErD_z4E#wV?A6RxyiX!BCfaVy}cH`Fa6k$GGq*jrZOlVc|phVM~DX z>a~^gL!YrmI%fOBDy3H28~B;5wvHc=k`U2OVHz4uwlF~6>X~39^+3Mc;BGxDNvDuT z=hOi&-J5HW8R7GEUTODoy9``H>A-c{9Gex-T~&1P&BX9Df1_j1sX2o5yh1) z9IqA6sEtic0upoX-em=_=ucUTgD`vJNdg^Odtn6VBW*g_i8gOFvd?_NxH=9=LVHj4 zr)O8ZW~=myo1Xm;ckvz9Uz*LH#}8*oXxF=~uUwOWmOR-uy!y2+uBroY|?Ps_+`L6nC-wc7&=~+KwEAKtAWi$_99I-I3js(rI(#t z#E`(w51U3<8nittFBF&^Wn#b0v{Lg7mA|1rt=}-v-Qcr0_GyP5zT<7Gd$(9drF34& zWDBB-!C3m4*qeOOj-6qC=!p-@{!unCA$qbAgowYMoLu99!lK>$_IYWC=kER-TtxF# z@617~M+!B@J}WN$9c^{{v3P~`q+Tbj?_sCch@0oDc{^_+@0I7!fV1k#A8JMxI0z6Scx?Y_x~}%azPj(vfnA~|6v#SOoh^8cS7<^zI6KIA^esozNiGG7I%Op1 z$#}m!%V8L{7=IP6nnH$VW|Y8Xvn1x&vC6@Y-Ysj}Xh*Sf`EV&|6nVy5-LWQ=GN`N3 zk)GsGG4Wb-BEQrx9zmZ|$6Z|H zgIV2PtsXD`&S#N>8=j-%i7(?2hw+80E~#w%`us@35ro}j!GjoYACQIsMOCmRQy0r9 zpwUm#a+{nMEgrD)WJHXK8USwsb?t>Bjy5>&EDnIMXkVksj^4p%{pLxzi4FrhjdY5w z{S!S|lsWkrBy_@v=eB#bzPwwT#U=UkEEsw;Q|Mk$R}JmKTL5#Qxy|RGHlo3CT7RJl z)ju+lm=iks4Dz!rq0pz%)^PH(ks8~0Hm4FY?1I4eV;|aKAlJa?ug@N1f|ldUaPoke zMb?X1%kfNS`_;?ANsHm-+)W17l;>2sH8Cu1<5Pudg4q7_x<&z)Jrmuf(9o7&rX`lW z5c_#q@4eD{(|S`Dphl6#0(emdIoH#Z!scRCf`K2Qb=M94Yjk|yy!r;PL6#y*w72bl z9s!w!(H>=UW|yLg`Yp_C!b-&4&z^@9W_YWIT#CG)H0x7zt}kY5-5|Asaa-&>^S(~< zT7v(QH^|7(V!~QOQVUKM($?2*w~W&6Ah>|~dKr+I>VXZW0`VhMGzpWE-O{L!jzJmU z?k7>*QV0gNV=5D*#z&KeF$a_CFIZy(K-DR|DrhT$#7okdRzQ{C791)R@Z89WD6Fq-Y^!4^Pv;EavULcXm9nwHB|a zvjlV(=sa9ER_L|jp6h<=P^wNyY9W=wpKi=JnM1$$9JtxdbZ{lu!`s5=kp3&e%FL#d}F4jQVr<>UGM>WMkxsyF$SSi&=vfNhuT2Cx}2Y4l4Tx$S>pM?$W35i_<{2 z^Z;1jE(nyEMWpxa#r4Jffz?^zy=5F@X?m*~j;@a*A!oJYmk*05 zW>Mtww~4e$o(S2)edR@8uAZi*b!R?X2GmKdDeu7hAMCy7Lz7*zKKg*52r7sa6%Ygg zDWUfcibxmfHFTr|r1wNXL_nJKE+D=4PUyXN2oR+AP!k}8ocP=OobzG7&-n+={*roU ztywGgtTk)qnrnu&2bR1^EKk;~#8OOHjmQkUPeSw2%~3}XxU;{CJXqv(D}rs$rWtFG zDEgu)%hh~Iy8y0+?&9hI6yhqGPrd~#a5rBbRQ%(1s7)RNh`>E45 z3F_W*i)kqUp*LG-xd~|)JP#*V*upW7n>-v5QfiJ+^kdP3Rg=9YGj*)3_g1iQdhU8gvu9K> zCz7=yARgzn=!d-C1-a^54xa8D&o*Zc?7(})fmb?-uA>sNDUR^hVg?`4y%QNs7QMGG zo$PP7M%Q+j9(|lsk^DIr(w`gE?jiQ&I8%I`)bw5Ayi}M(BE_6>Y>RRjuNcPw)nUXV z(1*`$RBD}(ZpZ)4Z<#RWU{P0;1G&DvRfP%>yfBKEt zLowceMp3gv{ZPJ~UjocW!D9~5f2k?rLpBG861C%BuAgmWjh&|D9^SFpR!Z$HVxB!d z(512JS?rvX1eGgInuUa!E3MPB^yrxPJ%=_N9!5;I$Yu-!O~|rZF7}c`;Yjg~et#P+ zXD*g&scMtkiR%>ng}AP~yUo|}7ge9-10*~(C<`?J3M|FVVLpN`8^=dQvMaPIiYvu$ zzC+SMXXZ^+NfPCkc+a_|!Tjp&oHs4{Uxhx{=zJGSeT^&YIg?R~w5iT-F@=x)^^go< z_E!tC=Og7q+{!7_GY_5e=XiTOG&L0q_YmD6XiKLGRbGf`?8rJo3fF4^JnL5n2)~kQv(sqv_))+zs(&S%+dLq0r6Oh zpu&OS%7z{H|3QH-YzTS%VGCbxbQHMrD0Y7;{;+l5X0M(zQBw24pq!N9tNf}D27^R+ zMBnviZqLs?)ecI^AQxTdcpkeNn(MTAw-J&aZs6dsJ8MZ+$Ls2?Pb2B=b9^rLTspk- z6^j!_+$VbdH|#IG9dzm@I!ug&;owYhztd2Kq6;%$8#Ai}!_d1=7)I)yt2*8((tFbG7ah#ARlELQqub@JI4jJVJQb zWan9q_ z>FUt?U3IDkx?{RMEY}C^FYMX%9cAN{p3I)IvBTorIuz(?Q!rYRBQ5(B;kqjIC)hXy zb6ovHizA1Lbe}HcNOWf?%UtS2T?EM^y4lSXHW=ng_WGv`4nW?0%Q=5>z%J#csz}T?i5!W{DD1x)Dx_~C%tT4HoqD#teoEnT(kHMs*Wf5A>C-ue z<|z7Aoj}oIu&w^lMdl+3HcOCS2mgNB>1Ang(YI<^A+uONKE98;#@ZkyiQp59J7-!t z4;5^3D9DZtuNGE)gp9Z1HfpmcQeL*>5)N|jEM$sMgQKJ`ex~_vg_|KXK9YK#%B(*C$e;aJGeprveAlPyh1)>TAG>{N=nL zhD)U%WF>+}qxgg;xnuSpMV6BA^#m@ls9if#tJ!s`gBK^HB}sU}1N2mP3x=pu)2RM~2cU3NOq#o6_tG~IR2+N=-OgdJ;S>G)0S5gOHgLdIVnZoQ&$$UFL;`K~Eh z-<$Wv_}1uV0TZbQ-$%C<9s1_Ek%-*QCv-*HrHmo8OU2QY{&|Bh{3Vh6$_%%fT-9?g zg^6Tv9%&x4o;=c2%5}4luW|NypKD`!^*T~{t>~xoK47eOq8v4Z4VOS8DUc25bryIP z&vyu~6-jPLgh)q8k=U%O*6q#a2BmrV`4Pqd{&DVGCJmlqZq}%jlXq{e%1LG1&g^yl z#olm;K+}U=z}h4AMf!4?Wn3>+@S>F}e3H;f!tRSduXO56%kKGHQ(W{8Q;cLjEGcl7 zBX&L8_iJOv468F|xsmZ?eO{%0qy0Fw_zs|1s@`me^ON7sokpK%J>Himi4G@;=0|64 z2^M2xg4r3$fYdJXkNIETdl`*~zh&Ji71m-(B|^7|C>h(WZPG(f)E^f&%2XESLDh*K z+W9zJU{W}qx}q#~hH*|U{T*You~R9H@QsBOe8kQJ>gpf7xfgBd1C7`FK!vFI0I{L& zrNH?b8?4&~H}r*0NpX(cGZzMC{KOYV18m`~-R^bq6;;T{Sa#(oogxi2rlqr!yI0QU z;J1&qCKqo<_j1Eq4)yhgicD4q6K97k_O|Ccd;Hmlnj+d#yFuK6u#JZkhD+_7=CV2fsFa~*A&NcFv{ca6 z@^uMs-15P8;f<13H&Tj!TsA&vM04F{7iRmE@fYw>3;4S)lhC|Hb>fcwZnLMpjxrlG zf^VDEB6=i*A<68`o&a$58(dh$qv0n9L7f<$;Z7fw1rH=w;RQIFBMS0-=0)DyS&gCW zcYS~fIQC}!w35_?M0uJzX;U0>%UGW|fF0HzQUjzm60)yt+UMYqyTL#EsxHSX(OI#1!QDT3j-(M>+?qYxfM+~;DU z!0_@~-gju54JW=wUsLYzq4Wz|cH$mIAHTZztbFF_oC@#$B9q(QFZDY%8dvj;XnOCJ zD-?&4S(<7h#l)t|AmZ--%>_{1Hd$x^+v#$I=c)G^&U0JiKXMermoA3BLl5ax=)XWM zVc&jS@GWBtQ+8W-Po(y7#8ntc^%Y9JNFAZ#38$?l^HB!$jEe4C@`iJAzeV48?sHs1 zCtJR!LNGeR9{rpU%q+ByuZb;mWUn^^HCumZF~}JPB1U~{i5P{Sm>aM54_bv2BDMGV zX=;8v%KH+jBd5@3Chd=JZ41j+W`4%&9n1AfS7UE(I0ijd#Q4yDvwuueXaFibU!bHs z^Rbtxt^o#7D_o=aHP`lYNhV33QdiTz4DcMaKkb(+qA-U%Hn#X~057{~uIQW})P-8h zN0bvUhXzwNWjL(`M;r zgexXS49zZ<;Z7FDDIifb&B2+&n!?L5p;Z4#x~d*9a`n;dPC zM?GqniPW<7lNxUswcjWAY!kcx1j^>~r7|Zn z{)^j~Je7p_7V{@O!AG36ZcFZoqkEYrtDj$`np;D*JTFQ;r4nFAKI64x?sG;)zXePD zpZYRI{5b@`S^wOC*15Hld}bRSvkD<7F8z4qGwZ>oOhsGblTb1LSeA%$d9Rr8Bk33E zD^Q@Sf+_c&?>BKvs;OJksfdx~Z~CO@E^g>8OQ~BxN0}WnsEirM^(c`n?9@i=`4X># ziu*N})+Cs&sEa*4a9YTG@q@FiXeMpIW9g_EQt4;3{2Dc+>nmuKo03tu!`NbmuUn!S z99yEty1o)#GUt+P@(eq^^WqHOXWYmfm-(bA%$qZV=^SgiJ~{eR5Cpwe z!xZ0=t#I2}8neG=hf98&JpcN3V-eem1H41-hvwg8K~9Y)gN*mo57)O^s*99C?zvjU z)~dLzi7*@&&J|BCqUzI0@OS&x5xh4!K=bvYtl2eH$K_`ehk0+Pf)pB>L3xBTC^xpD zr|F$u6GixqXv{^G1%|fqbbRn*YgmE0N$tVDjx4~2V^CpF?oYm=hQaWNykO6s^Bzs( zGLmwmSJ<2*8Bi3-+z(M7iU$>M^*;#`>R*M+U0rRW2V5mf_8%OTW-(T9uKfoCYc>$dpKz1#hDgUb{mtMGkykcmbHZOI)$3r11- zM9(Ax9>{atv5BJpp4$U|j}+ywPr=SCd&(~gA6MW4Cr@k~$+vdugZ%IL+}SPMd@8N2 zXu<(z>n?ryrxA}wdDyEXuDgC|Uj3VYzD~|{i?HyW-a$Wl3qsl`g9Q=Cppk*WQlU#D ztKYo!R&lM&_~;FR^?QsWtu9~YY2a-XM%csD^(CxdqA z0S>Ww-z81Ls;Q-bo^DIC_nll>YgIYg^fgzb{x8XkrF}=#L%;3 zuKb9MN4nC@z=FwcIhYV&hI@M;`L$i+*!t^QsufvkAO3*RyjCAGM62BGkL}Ua?MHOk zxB7s~^@cmC*y<=lZV{mT^$7*X{QJBsKoy%ll|!W@EDE`9*_jLIoNMz>J;o;!^4}`M z7Uh<%kP5>;2P->qvAyscc5W>cKC^eJPE(3a!iavS{ewHAu)p5FV=((4WY-R zmHjCQNI+^RTLl^&*1%F;4kpm9f3#`u1XZFTH)xvqi)eXr2NF`Xb}=M5pr z^5Eb~8+MM9{6{ET+d z^1UAJo&T0gF^%tiyVSQM|6{goCp1vk_@E>wW7Y=s{2~#ur`Y!$@ZJs_;5o6I5Cna` z<>v=1A&C>RUHbI_bl7@)a8_P?F=&o@c?77jdkmTI-L){rz$nU*kFCKsn2sB?cgM}f zf_eCx>GYqCYE`E6pYwR?Y_o6CvqtaqME*2%bt;*7GW0@Nm`bM!4~G@1u9$?GJIk)i zc$mFfp1s=6@UL<;JZmarGUZou$O{{Ztn?wPQdsSlbRVzNwR$G)8=GYAf)X;c#Bbg! z>G>Oh6K=pisIBHY@O@uq@I725jSl#@w*hVA06Y6gY&&Tb1$eWw}JkjvFggvB*6r#7chRe2na}Z5p3{x?#&v=vi@pAJid^x-C?TeXjK7>ENbe9yLw*(4!NeB6>V% zzZ(%#P}x*k5qx^n;pFVFolV(mPq}*@96Yo$7Ib*^>aHLAIoAu1AZymFULTQMhXKo$tmNtH^ zK*WRU3SVUSJJ{mbgtPg%6`C9zCXQTZ0P;ECnj)jPTYmfS@DqpoRfSOW*VRQ|6hCkJ z7Inq$IEQ>?BZy$m%ne6Lo^|eL8SlH@|N3?)Lq_MVVk{1ZL+}q+aN}Mr#Xhdi9;XJrpY{)JL4u;pRi8V7H4)4s~uwE;0IrIQig{*Y+!2ACgmW&)# zW84hd^yR$&=+-Xsg$IUn7jVP&hM07c_}rU(%?ic+Jr||ALA=HI#($RSaj+U$6II?*33Q>2cI7pN@|0m+Dc3hF$UJMFZC^X zP0O)Kzy-Z@xPsqNZ{9AaoQca2Hu8;uDpMK;DaPhEi?F=9>Jmqgj zxCM3sWs;#aqdmdhdi=oVWH+kIqk^afbIV#L*SyzPCmin)&mJ>!-3>i$zPdcjt`>SR zwfjR|0)wlVP6k@Wxz_y0#AhC|EXoyc86HOm`83|Z4wriMo9E;D*E&1=eHx=)qIniI zF(au^Fb!u7Y3A;fO*5gH0|ZBI=xEwSmAyM}w#`^wDXLKnn=Xs}Qhq*2vPVrfoc# zH_C5l*;#ORjA_bVlfJagnEqf@aU}`9#*cq94Jns)vrlHa=UMv7`}$K0YW;F>TOBeI zO9?@1eybZ3|MhdaR6_%tTB-Q$N0eWi!H*uhm+9}v`^qKUbjl7saKC~iJN<#F6@2WM ze_PTLxlmelPb4m}VU6~hn+izMuFByQB+SP5HQszZOc z=p=Y7EqyfdnGn4{H}OE9tM!=Eh5&g$;?y8Jj-%JmwQ)gepdiaPiAp}=(n@(sVt2^9 zUmatjr1v?0XYr0v=3Yi5w|kCLC05s=?xB&RaaHrDwN5*@Ktei}+!1E2jlpFLdX6nH zB0}#PVz+6oDnFd}?Ac9fQl&O4@vDSCLOSp;(U43yWp^077=xb1C#KU+ol41lWA9ZG zzh11PFF&YUbKyM0rFc+xP5TM@44PL?&9|>)s1T{*s z`UB*+&xQtn;ni`D0ecGLG)eJv;OCpK1Hn|CXQRGQ`U09C&TWL|4tIMNY-kZ`^yBvG zl{hD>PAGTlX@(|6y0hI$SozMm&?SzFa;?-fd+G`WYVV~&hEccCA!E57T$XC?xKG>E z2m5MewW;VD3Ca7kHn}hHR?px1jn^MB4c&MkDh+i#kJ|4bKT^L0?#P%K=leksS=(;4 zTUIWk&sg7!b4JiL|GKf6dW2&s-(Pxj3GiE=8MDq@D&m-e{Zs4j=G#FnSr~cq~`vniY_#VdP1XT{rW;j0=Ss6N;T6=vWx3Oyx~R(Qq^Nt)rLUQ0Goac* zwx0NO$GdS7ksCcZZ={p-akeuj(}}G5eI&JmS-oD^oZ!A(=AZBy&MESm8o~PKTOOVC zvv!zF`YH_%TMZ4C0w=RG|CYD$Bl7VB$`H#aVwYRI#-<7rd2grg1VmyXNwzkDN!Yj( zh>rV$qhsWrD`z6bJ }$bpWA-``*9i6J8;ugQd&&W(+YrmgLgc)v-OgEY#bZ&vyx zqd=yguLk4ItI_YGo*}Gb)AIS*9h90zrmGhGP4s?)msRz(ppMH#y1-qNp&>X{+P2J1+9N~N7>Ttd8lJ*cy6;}^Q`IxJ)c`c(&H$$6D|qt zk0kz2Yn#nMPIbRaLo^JHjTbqerWRW9x8B^9IyqhSnjkpX_mn3Xs4Gv75P>rlas49-PANyFSatQQwe>l?{yWseux%iVR82ObQ}mKm}F zi#V;gXo~m#@vGrb7;3kU^(Og-f*jJ#*j^-9@1-sT0?2P}6*8Moo9<{}a}ALN2lFH3 z0k3(Ply%v<79KslRBbp{*m1kCl+*Ojn%7zm06uug>U&do>j;Y*Ll@U>zi0}qgOdx; zY6!1@5&XhU(}iygZS<}4u8?@A`Rvgk%YELFp}ekC4id*dabD;Qa9pHt~0UEf} zHJitmN-i}~xLA3*u7|uouh6O=nx3!uQ6&_)ehfTEIc?KSQed|r{a{cGk8k60sUz!w zyam^g4UW|E%hSr7CmeXt7WcWCA zUzmUo{gZhu)Vg`Gqj@*ueJC&OK+0|U2KeT7K~&4)?S|b%c`IA6hBt&oK35nxzV)Oj zrz!4)>i8_b7Ehh~Am8Y~spy)G|K-GK?e-T*{&xix$;H)AeTse_T-$TG1qE}rUT0`- z{3RYXQ`X|<23ISzTl@I&tq#R;@!0F!_%4)$fCj6Ar>6JjQWee7)-jHM5F_Ego9N&W zuoaH}pO?8fSkeQ|OglvNl#bt{MPQCJQp@N%2@ZxLz(Wn&8O=@7FroTqRBEDEJB(-b zq&d+DDDNm;vVV6n2a}Fs1El`vQj+B|lprPv=G_ zv#zp*&pE!1KFcuRE}o-md)EqbH_%EmJ>tx0@2FS0{F+&m_MXAtjGBF6@l;>@8UIIy8Tu89}w(U21cJ} zq0}+`aEWozxT(hTXxpIPE?MJQHx+O7Gl4BN+uJ~S$GfT)?%tkRW#KX3tL7f~;!r_K zS2C1#)?Y113JfYdN3?a%RbP`Pe!-Hnn4a#@vwO}vEZ{)t&2D)iyv(isP#+~d?lOo)FQqeV+o)=6bXjUFSM9H8-$5%+=-H)<~pGh2F6!u_v_WZqq*4}Pnudk#J7&I zCJxIEj9B6_Zj#G4RMV2yWa`r3o+yL@X6R&EqE(ty;`nt$SFoRc8QlDE&-d7!)li!t zG#&i-R7&jkkHuP7Sm{Rx-^SK5Di!9(k)nI1wo4TOe&@TU+p!G^;MK)XIS*Z?i*iYB zca-~ZHaRJz`U4ozH8$;Z65vRD?Q558s;PO>El)Tcemjj>$Uzit(BC_h>U zpI#f%H_M7D+lP&>*a>B+P*-=;Xk2q49CJOA@2^ICYm>MSKpkdT_S%{oKz25AGZ*NW%mE|YgLwVvHX09i0B`h z4}=Vuz`~_hdq0SKqmyp|AVj#zT+~gVB7-I({AU~X(D%r&7C%!2M|pNxJ6qZDl`DO5 z2=5y6%;{l@SLvsHz>kmN8}te{&w1a>QMpRU&PktGKhgJbO1~Eyj%X45c;A6|x-Y{^ zF*DcsMcxVVuf9Xyo1!6inGWIDhVMIRI6`riW$d%pgE|BF!OoB8^NVZeHOGQEH4buC zS0M0JsYhY&e;%_{S7F{Nm=Cl5p!Tp^P~qD1O@RqoU65el9)p~S7R+Kn4qM~Foh1^R zf?PvtZLr>Z!SqDkb0_D`ACdG<@OMRRR~`-G%XRJ~I5;`mNp`~EIx{AaBc6<$b9$|3 z$TC#z4fnXMl)IZ7RHN(qejaDzCm|K&_6F24)?jcUDOoi=RG6}GLn;1>!)l*!`y!;Y zlt=Abl0NA?KWaYb`l~SqMdFIJ%e6Uy(h@_4h7*l@}OyteLWx*KbygKclMQ7Ep{TPw+D6ga3;I18|;|J7{S9=H1 z<{u09lnvYq*J0V}d^zD!)$x@k^1f|W=F_;uXy5N|&$v`ikQ%!5pqcBde6}k-u#UrQ zZedI1U|^>R6=h_+Cw{UI(BYx?fHiUQ&sxL8NVTY+yLAHf#6wyv^SOrG-%Cc)aY(&K z3Hm&&YfT)CyyCfGGI>YXkJ^Q=h^xIHNQP2uzP8JGXQ&e*kUJR|th}Uk{q}JZl*TZr zL>AK&{4+`UZmP%eM)k|!8hO1UFe9KugG2;sRedFVl>pJ?@!lQ%qI_@zt!>YXQ zhur&@;+E><UFYjTa==2q6j8%SBI5aK$Eb=4=>6O3%xH^9FLF7OYAC=4 zlB`#9PyI7@hTGi4U8O2%B@ZIKNAOj@mKZybcd({DClO}f#sKB0wkalVv4BmPdW|JE zik^E`Y?DsJ@I{6LPnquLp!quTLF{awvCz(urE1rESq2y((bM`$LXZO7cPwZ+iW(4Etf~1)eg|1TOuI;LUPTN4oQZ$q(rKS~`ot^i=I$3aCE;7oamg45<*m8Df6woZ(3UEk0fddIonu0W=VE-`m2^k40_x$J zw=U&=jTQo9u>zhuw_@3^3IFFb{GA#;%`ab^X<@k)6*6VbTf~(y8$hpJ)#TITDL#*L zqQ>K!sr4jSYAmNgi_uZb_Dh?$ABSdcmYs}WZ$Qttd;@ft{^uBoETjIxTla7%zJr1* zA4HKG{<51ly&5Smi;#S&`5(so_g?8G+OSbkEg<@jlk)e1d}1=5BQ3B_ z>tO&D9;$V(&C}3i_p-IASHk9{`^5zv@Tv0O^xPxg8Gi(eYy6Sa){*OgkSVoLs@?^ywCF)79qR^~&51;PwXL#|EZ#~nHOX44{YNjD`6N1T? zt8Kc=C`Yl`WZQk5Ft&zYuPuMK7Zi1hids84spuJpyD; zts}ti_4n~el#=v)Z>w0jv3<7xIx7+3c>UXnzHM zf1iUyHBiRJPkLH7?B-y?Ah|Lw^Qq$eS5C$r{PmEHfe0H)WwVqfjT8TvwTFXiPpIDa z{T;wpVN(7)Jq9`imO}U?b2uxm9ET27%052K?gm%m@9si_clh-6ez%nAYa+LVFX6%uMmtZS?`W40$VBA!uVS=eK$pbk4bWcrrOPY!6Cgls=i;JTK z*4S^G0~*a#gV8IyXvgoW8K#`qr;^sf?TJYg_BXjD}T`Zs;( z$0zu~)O^hOFDkhziqoeI*oMH37Zx5sh@wiDUq`kcNr;wlV zkRhKRzwp)ng6SAC%&ZH+eepH?czy`~fYfB=x)3Cew?2Jcx4v$_UF|8&XcKyZf!>7{wgeTSicCLT(BHY$a!OOkd#%VT7mY8N zm(=xkTXmsdoVOfl?7qpU-LF9njesO%Ep!86Mz~4n&n;Cn6l2GAsUf>Hh8uK<(PBzX zZVpZ=I!epi|Gp%d4)oGAjSd!Sz!*J)9|~@4j9~e6p!7NQ@30#yC~eJ5j@DdO`?fYlV>VKFM|FxmCbKn%FwJO(^^i5ZbkkeavmH*O$j2mw2ngDtI zi%Cp&9QO~Ng*wRbdH8?spXe<$gX#a@1$h1Amb@HiiZsah=kyzwqc=CPLQ0yNm&FqA z{?e~{do%VOBycCvYP<@z71JKLeGalemcR#*R6y$vyNdr7I}k(Zw(0WQ4rwMjkiXvs z?=@9Go5+_K$E5;B=YcTYu5;D&x!=tG#TKeWmgVh-<=30^Qv&8Hvi}4;x=$<41}qaP zDtI&WU63Db&-v0sfk6rnId_?sL>!<(_I~qr5M{^WV73=cf?v3#ZcLBV)eSTx5Mzms z#MD{{svIs6LdSnDYFD@sQ~_7Zgl|sQSP8?LLuv`74r9+Qt^XUzV;jw1_byxx$-|YI@HnQn^3&(k%|wq@^OZZ zTN4-sXdP)58r2y>93LP5{E~=b!|yfm$)B42N@#a;e{Apv5d)blLp)lGJ&`VpO(Ixk zl;pQdrqX7WE4XW1hJcaiw|S;g4GC#_-_i-!@qj zDx6umS*i~Emkt6LaJnn|bV>f-c5$59JO9@r{7(ndzYB^iZkG# zjoV@7qNXZ4eOA<^XH#==A{Q$*T08awB_Ha!7(Ia|2PNBsIV7=-pAt47`JW)oD?75nP|{Asuh!g_ZC=FEaOD zyVvs!<()9-QGGBL?*6zfgZ$0kS6sb zv`!_hh!7I>Q`H{Mio_%-Tdj>tTs78#q8^u`05JINXW5tsyHnS-Mtr{jL>o3_c(W8bcz~lZB#=7;vVJhx;L)njjX59;p zLR(GMc>uD#*AVo;*C9vQcso&h8%M%4DVb5*YS0&qz7hS27lv=^Wu%VPERck{-*TZ3nkJnEz3N2mr@f3Ac^!8Qg0>k;gpA0rFL|zj#A>+Xit09 z*b+VXD{k;dZl|#an39So0OHNQK4g zc)$Ji!9sG@zM<7>9$SnGcLL?N@BOpeY|ZAb^_iVy8*EV z0cox>zW}7S)oL&Nxdr;EB}y+2#4MyUIe~Mp=cG0g_XyPS3Akg?g^!b3TNGK~v_ydf zG_s$U36 zRg||CNfR)|?>_gFQrOq}<%Dvwb1EWvgdF%`1=g<m{zGPg`cLOkfq!+0|~Qk0DjB)R$&`~y?_QFxS#_G-<7=r_{iKk(gu8g zV1IW;QKp>(?JXhTQFW0GgWalx*QP0Uom%|@Lk%m7a}Lgi!~E|>(XKAJ-yVv#$oROA z#M198@}rjqr)&>h?e{wGUiGY(N^_9DNaWVtA9$S_xn>-|5y>8B;lU9%CsjNb`x5{U z^2m07i*5HU1<;9S)UEVRD3z?L)?A5Q-=x^Zq-LB9p&yG`&pU-+F-_{d54obXX`XMQ zxCxM?Bm~Cia|VrAL*~;yCyJrH2vs$kVB2tmHpC(E^L;bp8Fh7B44G~i<0ZSXo`$U3 zu5&VQ+M2&TH0GMxZfn<$B}q4}Okdi`VtuNg6w=*I@Qj zo1o0a5~r=^y9UqEB%tE5Q(x3|Znnw>m86uUa}<7Z8{B`gVZi^hnfK*5%89xVr6-!}pExl3@kYe%BIEp^Kyp=sHE#sT+k}*?ipby#~ zp_l2}drF82^hd7G;;CUH;r2&S)e@*k9nl@f;=99hra0&%ySTmj_cKyrm5YJ3cluea zKga>Isk=?FcWfXCpXKsi5EWe*7=tFu`1 zV0RrgnM@_m4ltHIY6mS|#`{l1k5a~FOx_}?)f+LXS&~eSv-G(gx+E>X5HRYzcTqi0-Z&qEhX4nVyALaVqGH8iFMAV;5!x0a}7L>(_YZQ(p(8aD}W zJKElSPTjn5+)ip%Y|{~GjEM91TZHi)UsW1IpB!#jeNO(}>W?Z3gGl>ZybID(_vcW@ z=5Km+M#@H}z4jq*)Nu4?J8wpgDgzqg=C-zjt7UFqR=jC%4cia!+}}7s-9hk+{}DBN zAFy=glkVX_BpG?r^DL!IR$axR81xgdV#on>=r>YQMtF3{2A{6So^3L<%587i?EhBt zeAY~hq48Op8*Fu&+l^NMpc5r+SglJvu~BO5(^?L}E)!W&yUVpJ$@#vCGCX^CB+dMX zTm@hD^$L|6f^$1|Vw?$J%ezd=33lby#Q2Al6&C$nz4s!0oxCQwSrOW+Em7s-h3~n> zGwNv;MKT@$6Vs1xBsNesu~WsDPEON9WnHHmx;B*JtX$<2k38b zp=XsOb?H3Vr^utm=Ms4F5)bBw5o^W{njelh^mVvj8}gr$bIMPxai?wsc*;RZyYg=@ z8l@KG)yd@9F}@W27VxN>6mg8k^H=rI4Oa$3AIs!-!Giu7h>9(A5WQJ7GeAELvOQHk0&MCZU{HRT^c! z^O=;1$07CceFKm6vhT&j_y{yBd-{HmER$q-;l+BckRz_zQlB7wQE?wc|G8;sZ)yZz zoU!>4Ai6WKJ*v~+bJR1iA9?c)p!)n(QR3a@hmUAsKFOJ!b`Ki&I<`V*zO5?%!;Lls zrLx9FPAv^4+K-DFG@1lWFW1iD7Mfl)g|o~tnx0wRQfY=j^))@xa`buMmkY4>74*Ud z#sQ)~P$(uDV~QTdEY$!p0-yQ%^Wia3d!7+=)DoD?@v-P*i9Z|{1deas?AQ$NqN&6( z@zi%)rra_gaRKEUw!b1G^6V?J<9;o7qV{I;pG=ZLSW#a{AS4 zL7BZ1b(vC=KG+99kCMJ~o=E2I{Xh5~%!8g6t#&;~O%mkok@v%+y~@0cpS76Ps^;vs zCSBB2>y?N1JY1&B0;@Bw8AIv1KvR3PB6;nN*%#=Pw&6nt_pW5A!f_5ygjbGiWQyLe zt4V*KTHADq%drH6#y$_P$A^Fx@gaJ0he)jpd-@uGJ|y_6`7At*!K=h#@BRL2;}Rv# zBx!~vBy2W(A#??fo3s~lIdXNZ3fzx^NMHM46?~cIfxpcIVhYWqA26xT>5n}uAiLUU z4xn%EaOc@?b~_etra($BYOeRPGC_6?80tez)~0kSgYMMVyMI z4;ZYPx$^VM21NI1{p_U)4yu-!&KcnNeN?O1%Da)(yDs4R(xp7L_PbTpLm+?%Y{Im1 zW)kc;w}kE7;cY$NL538bYaB`#2K1uQiNQjkEG2& zl5()7CPqJFiBbQ6m^-Iwrj@nlKCSq#8vK6mrgAD&QsOw@TG#O{JoNVNHvbTBss5^3 z@1+`>hD1NFEOxrp^`-lkUteJ>mNO4_-JFnDGd!F>!PZ!Gh*z(nS6ue(3rh|*#_OZl z+8NJwvv^>EOplZ%2@bkiN>_qnbli}5gf7TAztMmd z^%s$}=RX88C2fFhN7SEx+j8m_8Qi6WhUOvq9a5_{>3bh*kCDFLq(oQ-_lTi{s z&`d3MhagNW^`gh~Qcybkt<;ByH%IaQ=R+`jGf;eft!{Se(0M57a{;LK(85~XmOa8g zAskV~M3SyWP4zp^t*rgNFV#-&QjGfV2EqNjMBlo2l8N+DN7Mw~>uf^Vqe_{!yVAfc@ZM&O!Mqxso^Nq6IPxyjY-wcVPugqRM^mfAO&GQ@V- z1fB(cB4#n3Q-~`7qeq{w+mM#OPBd(=!r-~f+}zOv{<`8~@?ly5NUQhw(#o#yRo~I< zseaW5b(bb|z(W}~jII1AsVfQo&AEp19ZJ1Ze>nTB^5&f&XZ@%R)>`3>H&{Ee)V?rd zu#=>GzP%}jh%m_1@u8f3%8zOk%GMwt!M(ZMITeO4)L!g+lphfQW)Lf`GKr4F=MnGz=vn-OZ4qsI;U=OG^(h zNDQHpL)XwC4MW2WIdC3)-}m=_^SaKr^W}Vm+0V20vt#XhueI)b`mkR7fk_YR#-SpFcH{H1XXRX-;s&LoH{Z^RLHnr}+7nUB5hu%nV(2lA_Ayg% z;{3+39dYWmA+eUs&EbWyJYqiK{sxk6YNxeobIH#wG=?%3Nk>hzn}F$yu8G?oZiUXgx<%eJZgu=c#1Ds$-n0*I~m_7yw{i7(ze2wWz-Gfi_zbH(^+3r zYEx`XvfVw(*j4uS{Fx&xzN632WS?qsj-&Hl;wg%Z50`W!u0k?#zy*tV?kVv+14Ow| zAgGOMBBWDIrAm83V%6vfa^gN@{PcoC^nokJyjqRVoR|SrzSKw#?^|7YcsQ+-lYng)M<=E$=)&U1CI^)ZKXaN+V_@5v# zuBqoo(5cmyBsw;8dTthfY~!&$vW%EA7;m`Xg*R;ZrM)Y58&qBIe5(b9%vIu>t>KD$ z6`tmfIX2JAaL`@f?Fu%(DkQ5*wYM;>G4Qn&8!Swigo<*Bct`+L-RE-mT zDbiC`2J>*Zq7Ub=ZGF|FZbbiezSsA5J+S%udw0zQUnyCFG_922uk7B+K@0=ufR+@;fu@Yotq))YxUIG zFp3049&R7r@=fk_8`ugVS$%5pN58k5Rxl*Y_CHK>Xof_iuHLPOL>ou{43iWNrV!jd z3dlYn$zB==M2LlC7!YL4nX%K5(o7c2J`Y~l6yvfrJ7=ptTz#B}JmbWNP%BR(H&TZIH#z^XYHI3m_hgVg7Uzy3ylJ!s4bBjSV~PiOeN6q#IVP zXk}%Q5smDf!pDrKC z%`7Uj*sxmsC4K1$`a(2#;Uh(!=__AM|5vXriakI?wMY44A^_Y$)J{)+L$sia!$fIlMnjW8obWV*YCDLQK%hhMs2ZMG!q3>rg*#0qhTnhfGvq1oI9@hm68}PEy zUbhWJPq`?+2^i3;z=0dRt@0a)M0kwnZhJN9v-jEZy;b2s%Xyt_gD$S9>iRnz7)fN? z5#W^hefl^wK$BUC^IicaG&n*!IusE6^V3Ct7^+y=vckC0%f?AZg0KOdWw2?Pg%u}9 zqVZYAw{NU(J)SEV^~V}iMs!S+RDrXs~=@|q)wNRNj4~Sl`PbFDJ#Qn%g%Gs zs~yX2$IbI1<*m)*sxKf(|PSOsy_ zSFuobuHi;GsZHd$l;+=bK6k`yl^PztUF@M|Jx()q_RXoMI0++vOPr&}z9DPwrs_|j zirF23#L%=Bk_-jLNyXeIWPr8hn*aubX5V48W7opcjQCK}@cauOX;Zoel)rSw)B(IG zCBvX`p7>H3*0LuFc@X|ZamIHAXOpM?QAo;)uzFmn1m$bkd7F$d8BJ^%;v&rp&B5>3 z-PW`5tU= zHLNVdw<3w&X-&ug27?2qr z#c6LvpM-0~$zX#Iml~akzxflMT+3b6{^SjMu9ELI+=^22%dy;B1INnM;MAR^m-`Fe zzAEAb*oQR--GokMOYzl=Q}1u4B*hwGdvYAMOzgLJ6)#l;zGIsZN793*JA*^kcW}B1 zW*n{~{a;A!7bg{gW2TJyeqv6hm{*>Jk{ldm6J)P^OaBb_4m8f*59tT)%k)_UAJg3L z9U>pafmuzjm`~T${xriVoMDJPK24VNt_|FtDSF^dFHDFym+;kB8JKDLuy?h72*lSq z_*oow(&7JfnAKz>C(7u}&KQ`U4EHOR3vt1Po_hCqrm`@zy}eB3^OdwBe@Dl9`5YrozuIL@XuO`V z+N&kpn!Vl)-xV={g}*(CQrqs@5#JfB$3`1hM3KUqYzMC>#uX0^-`!G-aK1%+f3qo@ zz??1mJGt@pPP_0&H)f84Z%Gu$inN0UMVueP9f?K>*6j8*Bewb1q*~nHkyahX$s0rk zZ(8i_)>DbXYRV)H)EPzuJ2z=01N?pasho>%?bWg46;qvD1V}j>+QHnKvUJmah`*e& z(rP?Ah-Y5$?$zKp->N-of@=iZx2Jd+8Eg!*AKe{!xv6DkJ~7q|k?||naUArVAmUL@ zJ{s_wmOpr1LelT3n-6#fo5V(5Fnb6BF3)Wo3AI{z39s?a()W+|hjkEv+V7_>)Qq|Y z+1WHqmKB?1=L$G6$eu7EQU*cU#)~wkE)T>7RLtQ`uI^YP?5UEna!#FZrJo>5^Vq)4 zkiCFzs^Bwo2AyB?%mkN@OvM3Z3+sntoxobCn4Ucx@-VQ@rYmBnveBqMvC~DK@kWFA zN@Ff!4C0X@FbgQpv0+Y8iB3l6Bpkf9Vq6GYHvi9!jmGCEHE%7F@k2_6M^7w|!?b&_ z%#omhO(2T(ZE@1a%C4ZDXHI}*3;E}`N9n;gcNZ;c;Bm9@gVkRFyeZq`9)quj`UuuLp zwGT(ajHGFdi{HM&!8{r!vkHIySgU(4^9UZQ@}H~TQv!7%zon-LER~1 zmPbtz-}5WlKj1Tk2^xXZD>H*JcvQ4ni@7!q1f{R?qdfwtdJb({N&96kn6GoQ=+P81WeR5qIj~0}gjdCX$$Wuk_qh~T;pIgLi_Et|( zb+b2ZV+wg~`vPjDJwG42_h{Se5~c?}%d&qSr^v{BValvTE}Xj7}w~v}deK;<5lVeY5l4Xs6k*nh$@mx-vTlJfs29At}YdYK9|> zpJW#K4Wk;;Ds^yGOc{P-O5b|@m2A2Pt@ZJx)2H|9%0+FS&oli~UTG5oc)jLIlPtk^ z5JcEI|EjSf?V-bXBE>lNKw@6cV0H<~!Lb|uXQ{OsA+sjN#w@Ax&21Z1MoW4XL5s(` zAAy+gZQ8T6z<_=_Zm6OcgIG5atTAu_ z(~1xnL%WjBSsyVy{?bK>d7or(rsndFiL-?fFHdecd95al^hzV%OF$~0kv-ozc$q&+ ztE)?C$qEqw0@#W4`S}OyLdeDZrXv`g$B$swqdTYap8%cxeG@g>DJrkD`%inN_j6*H zs`1(gY)qvjP0x1Oho;9LIr6Yql|3VvAI$czuQv7FHooNxx|jI*+Z6Y`i@1ynHO~}L z9fX%z$C;!xk28uW7>8Q|>{NTc(S3dk*m$jo9oD_vWr>hR6kHdMNLKdq2-dBd)GQ-q z9D-TT%%kOq)!F+vukfp!!R!+c^GS*+oGMxfr(Ac&{4g3M7&A|kaCbYgW&Wku6yu5T z0p1FwoUw-ZZmRMtgBNsz{De`McPB0q1X&UJ2`dbGb2*~rHi7wA2@2WSpk`MxjEmQl zBhPW@X62&(W`dP2zFt2%9gfqID3XVekU`HAF}y|ek=~zli_zC*yf~+AEOnQGrh4jd zo9y>DqR9E`NlN1|1z$Hhnu!LeWQaC9=_Kh7D?!cSr#?A6FK5@@`@O{FgTL~Tx7}K# z5R$d`87|Q)Jy+hk)+0eH84bQ*CAr>opcsjc=#As5&fm9`$B*JF_PWsOiL^B*^J~bg z7*S;Q3UG8&pDV@?r(%`A0=;D4ST417Euk&)vRlI&|catn1cimBnCIvk_tTfB#GMI!pa|tYRe@=Pt{O5bQ z-po$n^3mcY)t-HM+wc^`lz)%Lvj(Bchg*KIM(vpHybAHL1o@WMD6)WjUEZ--S&XXl z8hLQ@u2-~OvMmssCaqgRV5;|3LAI^1-s_@nP0bIAN={$&fErBO-yeFfo0<2h3=hA5 zELd*m(`i*wkYK5JyWAls-Ma3)s=p`)$0vr^Lv~cwHev2$WZkP@1my(=wQ97>AuTLt zOIr3Pg9aAw!07mwYN zjBc8ZxhY~5d zkMZGgeP`KXB70y)6%wM`?BcU`2sVqP5)VCm1)Dwxn-G^8R4~B%8h7gUt)j`Kyk`q) z6L|>sODWpA(heo(aWfAm%s=1+vy~$T|Mz+W^8k0sUq%gZ}X}wwcLw z)s&@Us@WJ#HAw^R4%PR(*ZqQoHRV}r8eTZcw()9L$Vh;#VK`eO4NoXEM#~>sX%)6F=h9qsIhoo_if=$Vi#n2AfHk(@cRn_U@`4t1YI!1|r}6#xcRw z6P9`4Yteq#KT33uHsy)2AFgrIUn%-xa#S?H7?>kNDZpxKk5%_V-1-@Fu6m7V6y**5 z`}^*C%>hhlWmr=b=mRmCZ}!273kVI)oX<(cM)dh}2`Ce2S&d?%5>=eM(?ZUC;WjV( z(hw`j-a~f7HLBECU4;tqfunX4zI;$^dnSj|a2+5F79%|$xz_S?FR_q)Ex_|T^$Dg- z5QMU*B5}7Wd{F#RH-{^_m^}~g%hUoHZQ#!xB0OIqwd^00-zW94E?jly9+2ovn0#hE zs%P@1PTUtU2omRKAXPa6lQ%kwi2Ro`8dW`V5c`|anR%;&%RCf)| zl^W(czxaL0?sUz@mM7A87?quI&c;y$a9slKLV5TL@187uSQnPg+P5Wb}yc$KgT3G5-yrez~*K-h@uBn!CGe5Xqai(5x zbKSAdc)}uEo?T-DGLAK&e3JbplHXs^j1f*DxH4?~eSe8~bJrU7g&%g8M&aE^smip; z=G_jww>Q@xI{Fupx0qLV`cM0Ijb0rr04dG0Y{=gLd=3E zgvbY7-JNfV$3+E1ra*3GxN#MmNcyc+EL5dDNbR$iCrsQN z(>Y@T46V>O6utkw^os9pT&O2KXwuIJ+vI^pc7<9EjywdJ6bY|PPx5SVl49EQ%x2i1 zOc1-B%bQ=Ni$>T_F>Zt&m-*<6rERvBR2qKOHu8cmk&8ysPf_5GAC4am+#{6f|-|n;8#Wf^hKs`FOOQK$D-UwYHnVpi@qGBzhtz|X}sV#(*KW%u1T2Of2*1ef?G zo`$anFG5?ZMwaTQyzDES^ zRcwHv!CjuB@RkhG*SKOJF7;!k#`w6(yh(i;^|Wr&x~@?Qa_Wm6k+da%U-TvHcYQg=QVoBw`a zE!FS!{_xHhCHl;*jkzS2nI_=OZ`s;4(rbr9aFC$P7bd0t18>tCBCF0asbA(Drm75( zNd6@^F}Rn?`n|7bfDz;iemf)hqZUa?e11k?tD;SX3V5~j%q((4((L1uGe+BW8>8Ow ztreasyrif+Cpd6?f?iv@RxDz^EID3YF|p>*;5zc@r2uhn6t&PJ($R+RkKbOi4QQ;~ z0@!%<;&vm&RR2~#z*M=p zIoAJBL#v7*vYrGfJsX4;xxZz( zN^n&a3S!g$o=xjnp4=TJtMhwuY$Z)v7fVd$Z|Sr|jW!>9K-j+%;$|jRtAs7Fp?u@g z317aQf8x|nM9N{Ib@?1UCQ?hV3nxsDjeADDa8bQag0(jD9YNzJMnsO}t6ycm93r9+ z_p6mV>;`|!C3bzB+4y|XDtfdlB6owownENE&WbRCF_v8OfFMiWkZSG(U-Z)p-m49jGq#^qXX8Ne@nW)Zp5UCMyv{Lr0Nph_KK3Q`>)a9 zSIcy(16$JJ+kt@nCev>4fBh!g46rP_X|eug2{Elu1RApTr!gW zCC7i&0!!q|s?K-pcC=w$BJf;!Ht0}AgtXLc$G_%$%WZsuwC23lRk>MI7kYQ|H*(Kk zzDHc2NfLMgyCzQXxQ+>8$niTey|AstgS3&+IPkFA-tH}E+pvz+G*uZC2mP02m3H?! z&*k$&*uS11aLgW&8j1)3;{GxQm}whGF1@3_+h$^r%jFFD7ou>EK9kOs{t~r3Tvj*^E^NYOns>WICOvKNhrk0Hekuth^NsLc0*6< z96f2BrX?mtzxK8qE|fG$sOLeymzb2!+_>L6!lPXO_oo4>>`mgT%O1?H{Otqaj+3Cn zUjEAt#GprK(?o_QevWb_IT77n*&EGu_^0KN4a2=ba;0uW(TnN+0p)Gs`oZ7j6hL25(&A5C6#snt#dmr{*d507YsxL3mlIjnp}TQ7yr{3X*9R_}iDg zCmbFT>40e4Sx%qWx_}X^kW`gV`AjkFxM z{Mh?sMNJA`T{HKQJOMXaz_;kR7_PXk>Hg>@L6Ta^&$+`+5?Iq4fZhI$srje5CyP&{H}U?~1QPnS zBdIcYUSW#zI-`*`2c>AbRN#9GQHJ5Bnz&Nt!2?O4duMKxr?(0$^L)U@6p#5&5vtwu zvD+V-pt}LQ_%Ur<-k&X@>^dGLFQ_ER!0EcO)K7GS>aqdmT)eQb#Dh}bQ0s0hxdvzq zDVzq{+uzGAE)GYpx@C~tSX;-GOhRiUvkvRx6O~@v*t-sz^ZvHVx#`f*MU)D1LjFv^ zJRWVu!M(l{C2Ou3M{y4tyyff86<6^I8v5!A_Ba=?IKVaZLh^r_n!$p^_EQZbM3i0} zJZg&N-bLu%`r||yWpi^)H+X5|y2hIRK=yIPw9nE=%~Ez@hFG5m(qIcWlt*?WF)m6* z!xvo~BhLWVfg*5U^|7+Hx=wJkca9CPOm~X=*5bWlFT0w& zJYLd`k{8jJNs}+K>$niQqH>Pj7{5AvGkB4B(fC!#B5lQ!zZj8ba=qPF@fE16>1_PF zsl&MiwQ}z!|HGK~3+eM{wCm_1lNVWvcwd}qYqj-TZ<~E8^mRu{dYo^ ziUrhd(+>|c+1Z8kHh9OXogJoDYUQp3Pu(mJzQ4k2aA#XRg+SC=fuA^?;UHorF__1e$~yGjlBul?XIqb zB9ALDezC39?>Rs~;$>eNpBX&2o-Qx8%e6x^1$UT{<@iI+zUH zTE~8u74@X()>H3q)%R(moS3id-o(~t>+c_1y|%2M4|{7TgzCxTnY8$x$8(Z=^J~~0 z6Svs|!-0X^K5YM0$%KNU=DA*?@?hPmt~s91|7t5*9*EmMp3Sqa`|C|&71=Q zp2fE85P3)ZZsDmpp6NYfI&bq`IfdnnB~^*@8Z>Cl9Iw3X-Q%{}H3|&uuQe(4c`sr= zb$2`PzP2ZWKC49ZZAyq5aliD%pxr#zz4)-OE!Q@ixN57tuQ7&gcLZ|gf{kJwTkWOO zcYUsoHZub)NyElFKAzvdr8E%LvrwK zoPw<#aw@?ds#|)j#2szL-xWe8!x{kFm@JhRKP`?+mHd$yK8BG1F2zk__=VQFXPohfuD3^+-6C&7LzX>j6Qs8mlud89e>Hb*rgXp6tV1J)$ zC(I`d5EZu%G|0g%_7gWXN?Z1JvqNpktjnqzDQ3NkX?|_W!GZuiRgFTh2p}>}UH{l* zkx*=8!s8D`#GaIk`fnBghDw9&$;%nqh385z`V}9{zSP(!lnL99YU!BRT!;1& z{ithMRB=ecd&5(1w79PbsEu5sA6BnRN)ij%vb0Srr22g~ysHar!md*KG}wfT1YRu#c zvQIo_`J=?|BVmBMzD}D;;F*AjhgEh-a6FL+LIc*&5PQ<@tk<2jwef4774u&V_NA3~ zmLN*-;OI;TXtB5&cY*GZE9a*C{gr>Nfk^^ar^IMmtIA96aHHUU^%JHy*awyBcX-49 z4)d6R+yX_+?^wmg+Fk`=t67)+>dbF#y0Ts%GpDSaDHmz>bLQ5O?ZV4(J(ygb-PWT%YJT+taKgs%NVH8Atj=h+MbI(lw#w;GeD1e(Dnr4$ zMv#jOYZ(%J@pg4V4_G+g%()a$MBktq%M70P3D%&66cDGcq?VGrQiKij9?Ph15TJ`CL$R`*;- z2u$Rp2TD&DI?iMWvo9^@)V)_#X%>Z&|3kDWh8&wXsU%SdDf})s-5ET?R%sRxm^M5- zDjv?w%NaXQSje;Ck~pN4Gb*?Ds?JK-n#mCf-Q2p{>yR|4!J+bq!Hk$r{kBmq zEK*l2*p1klq-=u`!pp#PUD0$pRQ06s_z{gzyH~WMrP|f7hB*<(oMg!(xc@tQYYnq~DVI#5kFz zYwQn_{&bSOZ&*{hq-HvX{ligg?T97Us_&}LVuh6@Se5C>P(y<|Kg~5Yf?jGct@wKl z<^7CYsYsrnnWE1{2mM&^dw@4aP*|vw%EZxm&lKb|??*yPMmuG4f+F=-C+J&PI?buO zGZJ}v&Tb0Gef-}r_2&g)Rw0JT9w$~cB)*FGf0=wHe{7RtqwV72OLS9w&`7}O^{VxB zv;M99G(=lE<$?TG#@=f~R9ZMoX_+ke#27$1J!R7_har&58*9;T5R0Km;99_5NyRPL z#e)^pka`-o`O`@2bYXq3ZnLd#OP}7Nm3I&Cl*mF1D{aI`CO~5*x+`=kM;MeZc6OVh z&`)SqL$TIVq^ak$AVP$-?n~-AHKSd&=i)ICMH)di?x`gSpO9ZrSyPm8#wWk=HTKO zn0#b)MM6R?>j$6g7g`s564nt_I5kqk z3ikTrueBLNjXm-y_H&+ae;niz`Y7@Izl1)@M!RRqW$()}pK)^5!Kw3A69EkRW|5yX z`3@f0Mi>;o7!#hI=?B6^DA1FSYWNBru^Dh99?w!q{_mh9$vS5oU>(WOU-KxG z#H^o59foBMNDWye$a?iq8EV!)9Ca#A4957f=WZpwTn&Dk?wTmnVEc~FWfkiV-2WKm zWwADRYj208uOqq)1I2#{!XEL=?OdYDpyK!6!9fP6uA5QnbYG(WO{(&uuHu;Wyw+Y- z4|8GTp2%L0*F4(3wYM6Oiba>&0ZBp-y}5OofEpBg^p@sYkKSs?^4#; z22&lsq>Q^sC$(qzWoc?oe--|)o{a2US_@Uca5Nd}=J*33Z6AAEotSRQK=#e$U|Q5S zclRZA0q8hKy>E-(b+y^vi4=8t$dP1ymS4LhlPoq%o$9#p?vBQ2?hnmPFIqdClpf>q zVIueKM!3T6Ey}NaF5y8dxZ-_DmL-|7EB`FPT4l?qUYvINea{jnx5GIdbD_a)+^y~J0C zKc3Tc>&@e;0MWUwf-g#)@V2(Q&#aKU!cGJH;|-Se@pk2YX9ZakI1^kY>Q^H4ufMw^ z`z2*mHm8pK4yzpU5U=llhfXmL(~t@M@-cioX1&z7l#fsE1O>_Ca?6UpIJiIVp^`9c ztNyicXr=R@HvEV0^s;RQRG+q_WOUi6T}KQbI0<=#50$zT#jLYwebN%aBGb@#-N@(t z8tDBeH&;7YrOBx};()a$`w352%jts{agwr+exXYLjNZ*l^AS8nUak@c_i)bBHVIhD z`BI+f0RXQs$E87SKAgi_C+_8SkJ$Ymv(?lADr#rqgeFG*X=tVyHdMa|GttZ$|N)fz6bT_Zy(a^t(@s0B;H&4-*&FAa&IE^s7H^mB%+q z)g_7rK4+i5L>o*B&A`H2g98$F%Q=A@yn8mBmBC^XU-Rf0`3#{-wiu7zPEKWyAvtxO z=T8W4@ALl8p0B;OdW~zN?`rIC9n|3(qZ1U%?|zrDp>~iM6mX`EvMQ1k4n|f=Ilf_9F)R zHH`)|G_-M$?p|YshXIWTTjSH6NQYw|w_5vws;fF0X`b98g^uFl&L+H03%%B~fauq= zU-FlK1wepg8Y*Cl%{$R=GG| zNO#Iv*rZJWea@cH+cA^UNl__+cy$4gLbF#;}VMa4PHNw^HB0ErH`U^;nJ7XbtP2=R$2Sz@VF|JujyJ zC+t-yZ2o3hWZ6?kVphmLm0r_nm^Ev{E>vCJ%N!mamLvMemKZ#p=cXKB+!&wWK@N{Z zCWeOMkJmZWpZ3>oY8Y_7QS5kZAG|=6T~t-G%gOHSDCPE67fq(GD=b;?{5!Q9m4sCI zThjFv+=$Aonc)ZZ!1q}p(4V1yY?1#rLb6lXv?5L(uUd_i!ZmMj&(wL;Px-+!07=8b zS~Xo0kHUlE)q%6It%kkz$-RN$zSNaE4<0Y<@03iQaK&~;4k@rs2TQaR*Q6bG%Svpl znb>Chg2l$_hb;^G#_FJB?oAtetOMg)M!E6`2q~WcJ+XB^!=M{gNsR4ux^VOKR((YL z*;%GFSe&y(T#_XQ{N7fwa?SeQUm)}^uUtR082}(+6k4Pkljzq(jlQ!X(Go5581(dG zwkXC0?xk}M^(RIK!RP}R`V-euTZRdb$n*|NVewRFGJ2fKIPNmvN8c)aSaN$UUro)n ze9Wla?&rkUKCAi7lSt4a3w^`3Oh(U86%7fb{pbU~%fbCut;t_2Tnp3=?)PRzDr)|7 zX$6}G^GIk&#@pDwwMatDcm6YYM|&y!#~;5Nlt2m# z6?IAtSVl%h_}xY&^`Z8;0zK*V>IzEh?{&B$c3uNbdh#(xGu_tOK0Y!93TR4>KmrzC z=93CPo4rl~a3ts_%s%$ix`?rH z(&oVz9gu(qs~&&{X!Iej zk@gb}J%zb=THJwFWen3fPGt;cE%#3=R{#%CzdZsG+i0ijzSBi9>;jpZxeH(h z@;%=w0yi0xdt{PF7W;5b!Fw2#fLhFMJ+3Q@NK=2X1mGKwdgGt|@zN7yK)kq?oHCqI zX9F`%zl`}ql$v2GHcg7163;q0uW$lq3Vpuj6}?fXM>Ih}?6{W-la-Ty;D8qya1FX#1y zLWDzg-Z1zLci}78^ypZNJXW@;QtSs{HkW0tK5j7 z^whnVncZ2)W{Oa8In!{w=ur>3LSxXKS zFOcRb)NDL^H^<)9;(S@(Bri?3nG?pxe z+D_w~CJtlVMeae8wB^0n6^{4CG-(|lzCcPDF7B_*f&aiJd06u*B@a-KnD#HjYUjeA zL;w1vy+nF_Pl=zBY#`#4f4Dg!2Q%$&mS3^^wn#@`K}5I3XAvjvJVtciO4wo+G{&Zfsh+@gG&M6!1{A5{@17&HK4%S@JpkA|2aq& z|58z8F7olnKdtkxrU$zNK|8g4VdVdgUwGx!>SZ&F)m-+uYuvFvYO zyLPD$q~z8}_Z`EJ^sgMs8aJQ}G{jVm5T+XANwk+Gf)%?ew zvf@C2e9e?!KIA|C`R5L!zVvy9h>&XkSL}0;11OL-QB3?#IP}X1|Nm0~m=C~IxJ;;N zL1o(#TEqu!@`NXqC5|A4Ewo?-*MQS*y6nZwEq;6Fz)rZb!}L0>+?MY&AKyjI^P{Kg zB|^&bOeuI9m8&18_m*N=!gB7n8a)*??ppS`>LJer!(J0No_FJbO(s;|iRr;!J2C8X zX8~k#8{ZU|v=MR}P!irey-I9x6capHU98+T92o|j>0S~6CR3G?*ND{vMPf!kr=5V& z)M%MBLBVD6Y<~Rmr&K+j8&f=XZGA4c`H|&ZQOr1OHjIOOr%tvmD(T2@??fUJ&2qg- zwoW=}zU=vms$%ok{SAFLN+NFK#;1*X^~NU$8@!JRa@ls`XR-@9t85c6jYiq-Oe(PZ-A5*Yo{#hknbdK z^<5&bEbJ|-&{OIgCtpMu$nT@uJo6IhZ(7@5%Q@-oQ+MGXBpr<#2ijJNJJomXP~dKI zbW51arRB7<<&6H(=$i7(2ce@yu!7ObR6=Uze8< z!^2&wO_<7Igvh&1iiNf)+W;PYuk+n5P@N2Kl8d=#VhHJ!h((1HY(Kp_twuIfm*his zl&I)pwY_h-C0zIzX+-wUp-9Rr;~sm)?OA9~p0Ea@mqOIpzVU452eS{5v^=$E=>H=u zwK_036`ZNg;8Ui?aANiNhs|fH+KZ0>8S;qPXS33`7BkWTC(Eeu68SKjVZsfFpi*I~ zb=K!oc>Er41RBPCE}Nr&E5K0}D6i9B65hes_?#O9UhITllq5|WclJjPe|XBz_d5!x zy0L>8>5NErOI`7k{%ntNsWE=fM3!o_gGSnO}K67_HBMW;o z8fszvm>*^UAnm({GDkTS5s*61?NM#sy18rA{Y_2^BP-pYRonqmX=_F?=L^^)<8V~7 z^tC_~vZ(|8iN

    f}N4qA3Z5x0R>!~nCB^FSo2S9?1u|LuLny&K1IIc7Iuw>>_8f? z>+;U6V}qVr`(sX@#oZOlX(}_=VXJ#2f<4I`0q#=CWw;A^QKxEuIm`aoL(h^1Svk9_Bufl`%ah7G*gVeb6 zYhZ(yeaYJ@;N`V;_>Wz4^IiZ<;}Qd!n(R%|`JzXK?+(dmK=;rHo#T^p>53-nrDcE# zIWyJV2})VM+<3aO!w*iM=Qtfo9v`pq>`O~j8%u-ejwRgE0(fSQ;!V!oA65Y3kQIi0 z@+ARHPmPg5S3fiv>D)MOz1=sHgOajOdUfIS>qeR0x6v{)y)$4j3EXdlF|v9ul3<53 zl~uVE6B_64{ey`$5s${>VY*}2nQ(7l-+4wzWU(!k_G9s1Mxw(KL4l)hE#3jCrcU@nKfwt;T5OW;Aw%ysPH|D^DkF@wo}$09-JEq zEbbUpTCPvICJQ(DwjR=aYOxjij%YZ!g%qs{-xqYX|gLSgcV}#F=97v0MiW^ zDK|e@2O%)5hd1F}ksc+td@*ftZWi7B+=$XZ|6DEUWPQwSipi^Xe?(>_gHIWJH7I!v zZ|pA>7jv%-)@IjxAV=lU^sxLY>*p8SM8eGu-`eAr;AM>o)kxtVQ%OAbv!x}5?&s8l zxytf2YR?CBe0G;=rWPaixge`_C_m)z6f7->+0b#E%Orr@&>Deq7Cptyv0)5d#WW{SISv7Czz{6Q1 z#+B@p-PDK6-pB5HNk0*x*EnPL`^4n-_FTWi8wjB1?HMZM%DNA>B6s&rQW!hd^63_y zn))J#J)N?BVWzv%*`8FVvJt%I=y6RoQM7Ziq~)iEgLR1kzWS9A0?LkLnhl>*7*T9W z3RkUo*pPJmN-yZ9ag$Yazdkpu+|gJZU#+a}QR_Q`QEEEho!jGqvoIiQ+&d1o4cpBS zZ3^3LD(3moYJ>=IE^-;ow{B$4vyuOdDrx6p6qh!#8 zH5cDhQ(B*%8|*%%z1TN7967Nx{oeNIc)BOhYy17Vl?;hEBL(VWQH34`+|D%(s$G30 zPy}1r^pc5X^)>t6wJv1m@%k)#%jNS$#FRhPxK{@3h7oLFw35&CgM)Q2FYVIpqOtdM zeMcu5hP>>8_}*w3tP3f z8LHEs^6<$zCQ>oc;%J{SkQ$>dj438>YZBuCp&1i-76kA6&4RNA^63xM_s_W=w;=0h zuHrq}ZerH;^^B0ws!75BWOC}U!T69*og?n8^u00{KPupc0ru$L4|a^4AMlDemuivw z7M*oUwdVta9gn@D*=w(O=|?Wjyg~#}fM;iraD;AG%Fq{r2zj#J;h>6+LuD@8hEX;7 zWrOCUeK8u9blqDwp_`k7K>lyrOk&X%iaC;|T@Pi8lAlHy4u|NzS@&CmwL+MCw`C;c zOQ@cW6am{tBA^_)TDkE)8orpUUc~6N*w!m^Pg#vIjwKwS)!~%Roe(Map=|FDU-S*~ z^4U|$Vw94iO(E$=ePqB;iC%@$hAk2>=s#dn*f>RCI;N}jDYuSU zD|SmegMY!n>ZrD_wF`RJ$tSt1E=H!K0%d%BEEfwj^ zggCuKRT2zMm&J0src+`&klT_bo?{59vspX+*0D|{qs9*LRM>H95qeRahwJ@wNyOvF zrXs)D${lFo$JVE4UJ!#)#XwVLO{(ks^9P7ii$Sdl5OXUpPsX0yJ;KEjC&mtWdNG~0 z2!=Jv@ppZdLPjl3LQAbwFU`8sw={B zQ@oWlTlB=1=f3Xeja?|bx92tuMU>1k z9U`gGJfN_}P!nS=9uU+S?sdSZEVPekx&WO}9ee<80aVZ&b1#KF=D+T&y17j|sZ8t2>D5I}d(qw@lRV3r z@|~RKrSD^<5p|qaV$r;b%ZzI;=$J1|4N(cnM+(0+KJtG0h7O`!du=PdFnF@xZU%JK zJ!fM&>GjhAh6{w*dpGjPn!5VglEBcj-3Un$=A(A9q>i(Mtjq$DL7(2RtH;Usj++({ z3GnSA>K`Pq*rO)2%RsHeh}Fyb#H{vd35yP4`m;~D8Tmfr34`@+BjUN12@uW}^6Ki5 z9~%5)3hS$`z%pJC4=Cea%Pq~N5io%^J`%Ps9KPaPsK<0xAoXS4e7nYBL-lGW6MFKZZDa+;eVtKbyipe)t>qALcM^TEIWp2KmFXLcU1VoFAiV zW|BHH{5ia)_sfkxe2oKKy}Ki$73|QNKn6cUN~CtTj_qlrc~kAiXp!!r0YT|kl3g-v z!n@r4_Bd^9?jNIG)4~v2d(jdM&Q`hUforNhhnV+!adv!RMAnZlwi{LkoE>K*>HWd2 zxmL;<1(Kp6f&_(6Fi{ZMSO*E6&feZcdswJI`?OX4fWH*jeZ+E{_r8^wHY0dX?(nRx zh_B!S?>vqw-hEXZu+Bu4O>TB>Um-N*s;bP-TgoCYT9B&ZpNHz>zw>UFr|2&8>Cut? zKka>IR8w8lrXYxlfC_?w6samr5rT9S0Wnepr9+S+9i;aJupqsIfK&nLAwUQ%1Vn1+ z9YRrh3%!TH-1vUq%zSIU`8z*mz5d8r2s!uObNAV2pS_>w*|K>3x6~zRti+3mm~h1KUgl$ zci6>0Wagd_=6qiDN_lI18o;Dkx}uY%k9NW9naDk(1L--z2(Rff3vl(?Ou5@fXuxe~ z8`*aKf^>vf;7DLEhS+59z+x=q=r}B8yo@=#uRE0w-Al3?ThEiISehI(-wcyF-kGUFKA(h=? zWXZu2eNXUwK^gsvzD84@S)rO90|(}!e92RO;i?`)v~JH6f?OP4wyL*1iR)!nx@<8^%LHcF@RHe8%qHzM@nv0lwZmU-KJ zI!^3{It>wqL%4mOa8p@wnp=&Iq(*6X(5Ty})l$Z9k1AUTEp8bxjhv*gX9p}h;gs>- z%U9g_+oI&s-?&V+;gw~L5t*7oLlZ5=2$S8eAM@=+^EX6XR6a3S=~M9&Z2jG48L4mD zj^C%@WJlKe315})j@A28_ z=L1(JXm^D1yn>i>4wnb5ihZ@i)y+lOjlDL!clM>@o{XNdLV8~QLkA3p4%ErF#PD&Y zroi2FtE-hT)RjaQNgbMm;=-tOtKU%D8)nGyE35H$bXb$P&evMJ2o{+<@eO{NswIp`ZsNoPc-5rNy=C3~9-YG=?8OBWWfc(2Id>wPV54Mf&)T}`28jnmr z2KA^tv*NA;hi-lI?e7zsSM+@Q>wF4z>k0tH1`A8_&&03L2|lm)ZMH!Kcwp*IJ641p zV3nrxHmv@K1x5Pk%JEeYEV7Gkpj`RD2J00lUq+Ga)-b9e*l-NP5P)9r4uugLvAg z`YTjEje+vUV}2ulj>-J2kZ}xCU(_5^-Ml4&CRgq!2sQP4>Do{`x|R<$lFNbgE8z9R zXj`VE8SL37akq+yrxlmTi%0Ly0g0m}A2*7^1$X30iS4k>d(97~wO81Iyim~soCS#l6&}6C?ss27RC(*uV*0w|n^i+PDRY>F z`5Lt315{fJ?b%GNvxdNRlW^?bp|%qS%%4)uJbl9FLC(hz4;c+E2r88W5y!OeA#2wr zFL5@ZWm`AGINElmnj#vg1xEBWN8h_GaN~1$t}((nyl#6O_lJQ6X_qyeC@|R+NC}=e z6K6{E@SbqPXAeZe>vhkcWuElHPI0M1#LlHxnT2FC=&grcK&x`UqGyZA5zroGdfxWh zS-#IqxU<5@)%K$CkRdGjrh8zQEX$HL}8=LjOEUUDD)hFTY(cE~mo_dNQsh*|Ceb zWU)Pw?TiTCba?#Ag~gF?cfA!>t9m-Un(5cvk8GF&W7^>EPeIOTYi2vYr+o8-$$N}T z4AnY(rnsy<X@y5PY&-ZZj+O|D`WF5C+LejvLc z8^_5B7I153PqWwcAIBw3;zlA@*@S2ogDN@JCLQB#)aDB4$D&t#A{`~gl$ESY-VquZ zQ*Fl$T5IL(rv<7_icB4a8P8Sv``R}vX&7ku7Sa|84fo-iUmYZrj|m8(%7?tBIxbhg zI^UWyYYEP`_o(~N-2N+a#z!}0?Mi*cT@t`F0QyW{{7b8L3jD(hfkPXM!6_eZG2J>n z_!VS@pSxl~v*Ox{CKzvh-mD1l%fa4aKpWf_vz4%^LX6kW+@j=>w+OUw)X~l{(49Ii z-SZ@x`TY2hQI5SE;wzR~7`+a)9Cx`)-p=^ttdMKWNA1u4*(sc05f9~Pz7IRbO(Gaq z=dY@38#v^1t}*JZ#q77qBj(Sso&Cvfd&9gt>U^&CG9#|7N0}XVr>+ZF!CVVg&uhO; z^0ULXtBs*&)dz!<%8?H$RWNpQrIZ8CqKV6nP^TPfZJEu@0igz4M@jRw`ag7i2&(n( ziN8m#6uhx+-CY~$g8+Xf!`tYC zb?1qPLAA{2&3+cipMEtyb&-_OkM17{XW z*jbZ$^+Br7u!;l4-ZwAmy=v8yuYZ&{4cN@3ZqXan#om2{NoSS4bsZgX;0sgDFKczE z^;DlEQZkPc3HXDW3P!)<-8h+pQRMh)uq@)1pP+bY&Pmlu$j+pn(Z-}QU(C&{C!4kF zUe5+*eg!AkPk*6o5??*5O$celvKry`1%ErD%;U6n%_j?Ir<@vRPi{&~#Uj)zli0|O z-*4>+qpCRyS%=gk+T9yveNK`Wc%X9%s>IjI6N5^75x2kIvEP3BqrltavJ87Rmr?8+ zfxFc|A`Xdf^*&KE`Vg#dS^8H9viFIDmCq8en5jH3`2!<1*lwvkVeNd`+#0bkuyE=$ zYlCX(`Q(V>7r*Ph1_wCBd55^lgSturs=lDNudP|g;(6i8xD3vAeaXF8WUdQd*)GHU z3|=TLS8ceK5azs?f}49m(~E1HuGxZmsiFPk z)W<0P>iv;wo~!}wW}o6r96+jVa^kvb9#HS+Q{#_dZ3_Gp`jc#S`4RLYdjie6iZGpRky5{=lu#Ftl-WC>k}f8~PENGBj%PjWXH|*d%m}^~;4o zcYBl!V3Nx&UbA?*S-aroi=t`roBrCA@SMIy( z9RnvD$cPQIFN<13m0C_Nq>;QPG(lhh8{|IZdPn&)|NE8p)}=Or+3w3l8!!Dc2gjQE z^!2kFwZC|c_0Rj1Q(B-K><*p2J^p!{XyCWhXZe#52GzL5rDvU%Mns;y9M!#OLF@;GX`k$`^FNwm_gkm&l$`0DWUT1j@PVv8>u&@EeukHSzW~ihq=~Zb$L5tedquxGSC8KwThXheBt`cf4;(VHEsjqos zEr(<~#HZW^c-q2oF7(Rqf&B2c0I6m=eL12^Ubq_b4gFRn7oYj(s*SI1GQZ?b@4Q0k zkKU_u}M*&rg%Y>JtHuGx_FS($h_JGnRxAdtlb7yXqAhdYzrJaGok z>KfdVbbUZJJMQmU+((gY(Qp{1H47PEZyygD0WeJ)GHzb(7igDQpvKcw`(&|gzf7jw z(elX$(#NN1g!HSz=PG*gCMS~!OKx?GAg3f90p;TG?Nn(C{l_M^(ZW6s))LTz6k9jV z0-wn_KjYF-CH8cWeU+(&3F01eRH#t;%i}El_ny;zK40bq!r$2K4^B^>^lXCLyVV({ zuF?G@XJkMcPPn&s4O+js_snj$C_V?9P)%TGb&9HuG;9?dJ?$YQL|&G2%h#AOyfN`Y zIZu~r)yT#?7C*LQs%n2tZ!N4u^{2S+;nmcSc#Q*16_xyn?L=60Fb$Nj%3f=c5Hkbu zkiA=s`XPn*Bva!Np8|uSePnK&=^B?vxG+|Y`JWX^e1T;q3i0R*-1MFPpk6g3=oXY( z8X}Z)d=^f*OfR^w5I>YmS123%a$h*_XbhEE+M5%D5LWZq&^s{CoT}&A5Ht!`_3SHf zdp3C2nUYQ1Hh?gVSrySwx_&*yH~anuFf;%6oFmkv(m3IIN^ z=x81n`cw2s2JQs_y5q!Wk7C43>q+>L62jS;ck8H6!uaH$#Zx( z3uxs~nYl{#?S`HBA4r!>DMi4-J(D9PJY(T6pJL=b9#(Udh?wF;qKBjK%@dcXugN!z zkkiYha)QJ|Zh%v69pTIm)f8NpS=Pl^cFU(_efTWWV#~e^raD-KxZ5}PTWVajx*V{UJ9>$5_2@VyX?^%6W5Q*#t(bWSEh4oy z_8uSG4Uclrtu$3Di)JOC@wPcHZ@sZat-`>-ef>EqT+2^YAkJngmfNS~8E%_v!{hAg zMhu;v%w=uPmhTn>mjCRz4m073J3E143ifC~N2%c*sujAji%D{wPKE4y-xadUFD$cs zujm7TFHpWKCWw znx2GIZ_Bo@=J+fZ=^E1~y0tf4yQ27Mdl<1Uc3vT7H*l5lE@Cievji+HHevGEqQh@v zH5*E8#=fdYm~Yb~h%Fc^;PlHX`+?_h#U?!RO23l{op0Q-C^J>a+9>iv@1^itY$cDj z8WW`U2x0Y!|H(*d2gtXyJ+fy7xebPY+<&XOvsH@|?2mTRjqi9&5HqlXc01ojpE-jv z4b2j+)vj@G)Sn@6b19B6juAtzw-a4BlRO}P{9}w#>7(BDurXimL#L#)w#Z6^Fh3_4I%?=r411ir zx%CAyy^7i^d98lB)z)D{?0105M7~>W(`VW^HC9}x-vfy2sr9RH$7!?n1&?Vr zzM~b`o5V`ooQ1LcxDqqqQrnrUR`HtVb({SunueO3Kz`N(Ad@hxO&`cG(!Ribw&zBw zetGx(6_?iaBHij213ItiXoL8(=Os2OoF?NkL*3dm{AI+iZ&PD=Y1wWj?{@n{dN^7OPx;!`t@DYB9=%mncn2on7wrF>Qw=g9n|0E{x_!(;y*7_LO=5mf;?1@it@_k5c1n>6?Bmq@R>C1h z)CZsN$i+N6_j~E>dPaeWH;hFEgTejx=U>uv>Tm8RMvhFZKT1z%rs4I$?JC{$>7lP? z&%Gykx#pcshRo@>N8PLY8-7}1FL+Or#UKw`sY*KGN95rDKn-N*QR`l2PVvX_@3ZtT z6zHL~`A`tF+FFMxKj`9e6hcxQkWM$fpl#0@`u5}xN^U?RB`vY~*k`j*IjyqU^n;rK z+=(u{cr+uvOoRxCAbl?~KpD^8cx2I+l_PWppC>CR9F=uAoJTqnQV(i9Tf)VOs!EaL zO~iHNNKugi=E6n zj+XEg(fDS9LpNJ!q^>ki&8Xw#z}}0)Mc4NkG~3n739vSVGW-47h@0!C_un1m7+*T+ z_F)JAP|K`Qbo{V*QIw=x@iQR$vIyQXBFM!tVw{(VHa{`bp!6BX?|tHOiV zIzH7Dy&qWEL=z_s8jd5A-GB1hmtX5tRtmdaas~3uXx=JOczVyXY$fLvEB zNbo7wSN3!bG3UqHu#*M?&U_s>WuJ~3s`5wQ)0u!|eb*_Bs4RB)Q37DY@${Qs8{-u+ zwmq9uNv3X*^)dZQYqWj0>p{$f!Xw0ovC87U59Qh4*$fmy!q@hFmb3HkU2ss>)10mu z_xVrOw+4(1jM@aK^+D5CF7j^paTRat_Z|n=q?Q{>*PW=yK20-hHJCm~H1y0hFx3G^ zoS9@@aMxMN{++JP^4x@fbfYyu5;6dsns{W)vUfs9?T|sBi#_B6j4&^S9eP-?j-vX} zNukZ^Xq|W~tIJo~5b9?40(2EIn1=RbpbOJq z7j#61&N2Ngf8l@zJ8Or!2l1U(lErL~*P4p+yU&-*JJ&Cx=ZF1 z_*+B?@i5fw){}2TWt5c3>~()-(dC86k(ed>Zr`|oy4R^x%IqWDkq+?61c&fl zTu!l?Qg!arbsu#tspX|V>8yo(fnrpS)?PVb0=-Mc2`JZXblY|#>IP8d2o7USyT|kD zLs-ymXI!k((5cwVo_1}1u-JT4XnK76J;GcYKPJR4j8UL|CEz;3rJM2Gw1-umLuFDM225+1zS<{7^yT`sC%+ zJ5dYdvAJEY%2fv?nXg8zp;h%#bwl2l29n)YfAKOejUp62I4`IrpL{Cn2WRc~mRAyw z_e%C|Vg|+y9g>;^_CT=T}~%rvS|z^7?_^2ouLSns#l% zo}8y!;^JA%mmwxl=L(5*l@d zaj8G&`>4Hg$5-#LHe@i^2_0@FPdcM?CT|7FRq%-KE@S$tyeiJ=~CP%5AQI3Ft z&KWCwpn`#24Jc$<$2!489wFRTA+dv)Ch}jXx~pQl-c$ucH_42tMS=UhKiNk6ItcZ@ zQ8BLSlCjo4{jd1%{~eSk|Iz;;jPn12!aGN<2JqEk7ytkLH8)2ur`$*}GAHkG08)>{ zal3fQGyT?-<#V%|-SuyMUsKEs0OCg{Ma-5+rn*Oa8ZBXM~jfN_4t9yTrnU8gJ zI$u)KGy8r-mjo}x3YW&KSN9A;!RC84G~T$SsqsoT@R-+oOg5!E>dlvv)1>Q1?sts5 z{KiAvu32@Ha~)f>vG;Vwu5r__{2^$%oUYD{UduD!xG@cYY71(Obk7GY2mk=m91c(V z2eeQ5Unx&tVz`mm0Voz&H05?_YU=aulPLh~h6O{EOeJ5VUUYPCSV|8TI{{&Uz``W@xU6Kc-a?qH&Spyoxd0ldZMNPlsg38fF3|JeG)nsY?` zUW2IPzuW-PPv?jhT6fDMGcJqbAAHET|H={gh5;EN=7HbvQ;(hc2if>WXOq8HZ!Ij3 zN!VBIB>TIjL<50ua&eReSCF9c!(G_MJO1+a$pIpy?P;1)0(jj^8fY+CL zA-ONoh!<1=)c-#tHPBN3BEi{ECH3>7lYSGFjzxS5V-^;NGXd=^05=T1mVwy?gEb;E07NeB z3-Bv-imRh<1D;{HJ*7CU)>Pg{k`TVXmC2696YnEq}@n9IG8W28l1;xvHZC!jy&v6Ek1E0tFuU5NL8 zU5JWwp$c-hzgYauTGE9Kz8oLvaeUVdP3M0;NtzpT>X*r&0laBvTWSoNzw+-L`pfrI zE{(*fb<+NQL|MS28E998N z8hB~{4)E_B{A&mD|E>kV%l<#G1M}B5m$c*a|9cH#lHV7hxcT_ zv4r3MZ$ugYy8U*N)Zo7Z{5uC%+tgZ=#(04}K8lvSIme>R+9ldf=zc<(J5LZk zIM}b!Ji~T$#sS#y_CZ43gq?L#I-g+Wv_7gMG0fHf_sxHH+^7CfLBZtc4}W*==Vd^k z6caG!%RwP>A4!pw`}#U5Dhu@YBQL>~s%RJK3A2dX=T`=OTNALJEXb*FND`Ki7>kKb z#RoQ3N*g%dI)->Deu_)9y;@!O^o3Z1p`m6LN^`6XsawgIsEspT)fUXQZQbv$HZy4N zo&mZpJeK}@$gyG|J4PzKHRt+k=GH>;u%rc=&Odk(Gm#Z&^arq*xC25$Ug(vXh6@-V zwbu~w34+^(94M_IcS+615@vz;iHYN%U4Q~;%X^dY{UM~5&oZt&^g>j5;IHRKf1?Or zP9TDc{hY!4_Zsz#Km_Hsqanc#Fg*9)e%Igu0$9US77tn(Qc~uiTb~ARySQlT3GV+DWBu&{1VHKHSBL)c7dL@OHAgr( z-~|Oqu~nWW!UkZ>PLgAFiW4cpIw9ff_}-FmhTZjb-0Q0es4*$r!uX3l~etU6B8K|L#C=~c$xn_0VzHecKp1GvW77C%V?iM1r>de5 z`WK*ln4^Fj4v+-YtSUQ-D8ZuQ&Yvo52VS@{kMddPi;z<)SO7x>yt^xp8NR}js_>UZ zn}-5kI=bESJUJ4Wijw#sCV+AFoP5Xi<9f)@>g3&-x915ep(hg@Z!k(mVAt#DBp1dP zW0lU!gPFxwhFov_qtmj$1&rxCp3L=E|Jtew7_$lQ$w$5gkf~c^-%0?o_(~>S$4`^Q zVEKg`zXOf?Wlgw3Rs$=qwNCdKtZCX_Vd*uHtaQ{GG4TAWdBM>@zH3Y7AYBka3T1oE zfhbv3sVgEm6EKN)qf56%$d|b{i2$kGp@}!K=I!&dsbyCyu?UOqpB6%`2-OI2Q>!Q8 zBYJO5Ld(HjGaCmAJ1 z;K_Xi_VTM#Lo5Sk0dpTSTMS5sauv!tS{nV0Inyuq!u#MyyXvtvBuYm8^$bilW_O6) zoLL7D-ewjT3i|AyPH`V8k^*9C2TT*FEi90uEpU}8`4@Z@A)UkL@+N`&aE>aLu|F3% z<;rcZ{q9|O(`asNqu&wU?jAfZ%INbhoo~quGnH;@U@=dQ2r=l$fwL}JiY~@b?E7Ed zooF#|Vwv?CfQzN^7?7g;6JB}Pn5W=V;3L5fI8~6hxUnEE0LNDOhHVu=<9dBy9e$pk zTA8{u8ctP*N3dfuJ0(Zx2m6?_c zxPpK9iMLWF2hl98l4CQ)l1DI#%{<$aMU+Ar^^0E`9kMVBJPm!Mvy&=6aQrfKJVwqP zm${KFIiF%lIF?@(mShO2H0A+jy(3WhB1h>5a)6;4&BH%j)jmc#WLl!S`>PdjtP?g% zcotXl?V0()i6wIbky42I@@R>d`e~)wfL7>!_kPKos6!m)5r|ZudIr1gd|8aGrGcpkw`@S7y?w2XLx zS8m6-^td(?6L!97MhTEqp0J9uyBGkVEb=*lv;jBZETd2A49BcBul1$J3DWw=&iJv=EU z*{sl|^Ws`Y!$Ov+c){qqLYx=Smy5d_*C@EX|M~LV(zAes{U+y6#m2R-YTRu`dR4b% z|N0PMW{!R=FOQrIFb2i!691~BJu>>WapMQK!KEsJZyU190+E;E` z^{KdX;vI@mmLRvF%Km!$yNNsFG@qm@Sf@z(ucD+=Yt$SXarBI`?%EWP$DsG4Uj55t$~#9) zmOHxwOu(4XAfOkJ3YvbHiuczmv|->@W! z;AK=_0$xIGGw>27Wd~`2`-}u05`#-V?VrZe?~X?|Jzf%gPQ3O!reXWds>PqOHx926 z_$-&8N|CAz6c+L=+o){p!ezUux@Po1_XA=5dVPIV+erJx9qYmi-rFExi&iH&xC(xv z{`>KeWI%iE77plMeaW;qqGhw!sh2Iy+hbrXhT7K?A)@HHwBNY(pbY2r!Y zu|b7qjR&5S>6?ds#=!BGRH@3DZ}MdK#hc=_yo>(V^6r(o6M2)6Ci$z61(ltq(~N9O z2ETx(fU1t~W*;}rP0Kbh9b*oF8Bkcc$Cu`<^3GSz0Kn()0rj7E$Pwma^V7iQ?FImW zh=O=@@$?(Pio}(?b`gu_!{3g=5&4@SeU!s8`S>47sl$f)=S9<1Dhb8<{D3V_4%fKa z@lm2{tLe{6Re4R3HmpOn3RmIad90mHcvy6N>H%@GEQ6a>${v&PzM$pAKEQt zbi9v$1ILeboX{4D-*UW2Y9Ht?c5_HE;~`}TxMMDbeW8{egRXIlNegFqR$Lr$=6B+C z^mbo*d8EK;ljP9y zv^bK87IWR=D;e>8X=n>qgvCe0yL zG1Gf*MTmsQ@$@5H^Cqw!)GjWj`ITK^2R%N~&!SrzxgLMHSQ(=&Cp@eKWUKE)0Um^) z=Q5ArGk*WokFXo3r7l}J?$0W0GBL^(X1~4Bu2mlg=up1a+KjIvZh%brB#wT4UyVO) z2d6F(#a!2V)oA6`8opZR*0}{j)nT`G8DAO`f$n}i34&a|!2uiZgku0jVn7{|P6RA^%qMw} z@PTeZd7tIc{d~eE$hZVj@ouU8qiNUH5XQq}xlgPb#y$nDCMB`mpJm)5h{4l_nI?}9 zU|4OLBnfRT&D*b(Uxe_bL-p!YB(SOr-lx?+YPvd8FweaY*6&nb`qr5Z*_m7QQ2)<~ z+-0=tICY*p4&Ux{fw#rv@ZVl>I*GFUR%Tfh7HB3L-C74O1$N+a^law=OmyqfJwZVimkmR&F)z&$q8tX08f`BK zV6-}X$r2!IcRx~ohe5Z>E}ohZ_tCQb3M1^aS!cVW%7fLphs|idKeRjI=#z=rAKs%y z%({z2oM7Uh1@maQ&gI=b1Bc^kPp{HkKN+L?q*Jt^({goxp`}&7w3Hd~B-HUE@5btQ zyQ;Yf&UU2U2yL0w(;gxBvr;|X*m)8t!*$u7JIBDO^6bfLrq)6m&m)(f$XKuBAJ`5O zwkP)9E-fZu>4PrW*0X7Y>AkYuP~4YH;yl4C)ciE&hN)bIPi$6JeOM8&&#B(+eNEKg zy)*Vpf>B^UWd3=Dil1rxE#|wGCWv@?^~31e1AvSapA`)4auPdaKSo{{*ir&^?neQ+ z>%#Wt>q9tr1tPWxMCBiE$0}`pkMjbJK-433xlH2@W7^p^@v#Y!4`TLjQ-+Iw5=uwT zoUw2&9oybnL~_DUhv?>#{XZTi*%u=R^!%^2EKk(jW+A^up70yGf+{yM&W)BDInx~d zqRO+|t3->ls{l!86qUJ-y+{5<*x zPMm5ThWGMYot}(HP0S;>n2mVi8JSPcg%H!|VY6 zPkuM5;Iu#Q{$8u`XSFi?4MM8<`Ojaq(C@6`h32jbMzLAn5?>$)}0;W$mY zE`tdM9$|5vo!<*B6GKdpQ*~qLo;}ku^m;NlTdQ?{Xt*2;wcC9IY-KCo6sM-D2qjY3 zWU*EA-Mr}awKBmSO`TCQg2;8pxkNNu;j`{{?5lg8*cRAfaM;L%o;K}&aEZjUk;2yx zP8MG=$=@8sq#L?6-cm_-Emh)K(S4BNsD9+#aytng%jLd4sx87*zcjR^ZA?1FCqK)` zCy1@;tXC24AbQ?YZ?7DwC2ek5_G2LI;?adUUrX!4#V5Dvh->WM{Tj$b*1HZSEd4N0 zbOB{3&C<^uwM5K>d!lbPZs`Z^rlhC*C=i#u?6U$KEOU4a4Nxv?ph&L4?0P2HNQS_s z4RTawNwGdsNj6pb4X6#+6;MhAh9O_jg`l2lfieb`)J@v5&2Q~ME-IZY#KuMiH6c8?lqHB1~#O>%wHeE^z zYeRQiXZ`48{*;(Y?EWUs^?o==^q5N5C|(D21W1TzKhGqzWyd09`BLLciN(&?CM=q2 z7@nGwI4hfZ6rS$6qFDVWapVOyL9i~-s6pa{dj+s>hUet!%Olt2O>Y4H0UVIKCd@?! zV1#H6T;-ok+W>^quj%RhRO{lB&Ta=)NaIwS*fayLMReq3m!|IRq8-Y$?-EgF;rHG7 zm5Bq&ix(dg2WPVqc=vZnya0bEQ`^wmg1G5`U>k&S6p)>v%17q$lS^@E7#gljO+J-c zd>xmA)ouee_CG>n;q?OI+J1I}#YQoN32Hc&-4U%2an#pHlXg<92(7R9a(Io+7S@L? z13xWaRT7SbI^>HRdmpJD?botTfR$ODG@gFXvbRX-?5;nYIOvVtZZTkQBh1Q0^Sg>r zf(!oy_2<6fFK*EvtMCiFBsUl=NlI&^k!BVz#ssb3=ShfscwBH3E*pJdk$hnV!KYCE z%Yc^PX&wG~L-ZLR8FT)lTJ=~eb}z}yx-XT0SACBE#XbP%acE8kasaaAs$&pu8_b<+y`go-H4Hi9?Z=kEjcev;V;uxs3)m7f|pAh$b#4-%>tS|O3r0B}L`7|An zA7hD8CFLsev&ZPj?=hBMQv(I-eVP(+D+|cIpRRhOIR*6y#O_!TDx&qqk`J8vEwyr9 zDsSm`w~C-UQ7@I3#_t*#ygOLe)-H%0Lb_Ob+H0>R`vo#d3>LZ>rx63832imaBHA>8i0sLg>w+k3AXU=8)jJA8)X|dFz6TZ|J3X zwq^ewnv$QA_WN4XxdZVN?#w3rO5dCbfSmuw?K>fOllm1M&|5|a0@DH1Grr{M*vRHU z3aw+>t{)?x#pzN3`n0ORx54H7{f)ei^*hmK(o6n*rY<$V_!BB;LaonY&-@-Wb-`SY z^IKOOhhCy;RHN98-gPBy1U9>GgW?-ap;St!D?J0RfHbFM<^9%=@>c?YoRax$uKjob zQ|&~LElh&8tqLI1idC)Z>2*|vOnVR`nXP8!|g zAra*w$mDEXQg<}$DULnaINM-%&WZSm#D*~!lBoF(T9xT`s?8>rMfN{s`Q0zQvFB-|Wc zzcR8S`3sO41tQsqctH8Y^oU-{Z6%ve5LZ<%H04taufXaFeo~ZUb+V8M^T_UnHxGY@ zgyMf{0!z}7v}HrQ_XNeqjDY=kuC1w6yD2q~epnCagQ?+Ax9r$o@P>NKwr6tU1_-3l z7D5@q2iwo_&GpNg%nBvGtDVa#&tlT?k@ag4s6L8B=@=v|#oEtjPRk>U9d#}OM_bSx zV=z^~l~iQ^!Wy8DFP}_ZWLW-WK}cVS6^Durkj&J(ibV}ruF!2nTv7!RsrmMwjrfCB z=3E%RMd;X(f8tE_Yz*m|v9;7sN!_gD9Z{!9h)9A%Yxfq1 zzyBGf<|KS?_)Gdqn48eW?<5$kOx5k;!IG;E^s5i%>i7wo5a;RN9DIHmyCoCK6k zm@C3FFu|uHOM;`1_xMaE9!JHw@TJ3suw9cZi6H@oI%+2{%BV~5h^B~at&8yFKfXs}m{aA~P&@r-Q&)gO$Wk>_5 z$=^u5`!+9ONtfNu)??!sPVHH2KFjx0kWS&NNiKj?uBJPiA;&&tV4(jc1{>Ng_65O& z+o>mxb3z}u!8;Ov<%BWRKw1g?NmEDe7&$mrZV9ySN(T~4XXC$w#j;5Fki#E9_W&X( z@fW~*Mz;a%$B zTCE;+bN%Dp^gfO5cdpz> zq6#pV@YP!%i~ArKGUGKN%0P=y$MZJ+{%{Hb6KSj_z1_sxipBDMZ;y?cz_$8=yYbdh z4L}{ld^to+^OfH6HUlo(J?yT-RUSt`NYEds&`@S)GV7`W@%+y%AQLCg@dCiGT;}dd z1ME@n1E}%O)dvpb=I#OV8kB3`rhcGX-cf;@!yJM&C|q{Ew-O1|XOi2ueWywln{&#% zCokyLLd~j(+dIw{^3!bn^{U|Xk+c<3sx%zHGz}l-s#Yr=BXbAeL4b$(2E2<8lgGP> zjSg~{!8CsaL_g4*t1{4sog}p@vhl=U&&2Y4>S{xY|rB)wnHl2=448 z7oVphWvYN&GbEI6wr3t#S$0gMW{=ClfbkcB+=&)cMAp%y>3~KX3D{7AKLRuUVf=5| z;lKH~N8k2xEN$!|klG<7ul|n@V15ArQGoO6cMb0Dn&9pZm-{Zi`oEe_Q#CbJ zZ)(25q4()N=X9^V))u0a6{S%S2@xS6AW&q!NvJ|Vz{WyAz`!8DK|nxO3p&b!{{ZQ# zDlG<4Jw<#B0U-(@Bk@(;3-T-nwiA01Zy4?R=;9&`^Q#0#U9AACD2852Pjpbwj~_)r zvXS_arY0e#@Bp`O%h05PVuXh1EM9My8Qz{A9-iEm9v&W#p4*mN8}XNXt_M?_QBam) zRJ`bs&QP#souDIO1X`HiBg&zzMX=E9M)c0x?y1?2fcSLKd6`d{<&UquQxIgMCI^%AJ?v~ZLCMZLg_ zEtB(HTz0cdDNXBPS6WDE8iiE+e7&haj^Fe5$)dh=sh$*!D7hHSk4!49a_!vijMtbs zSR>hqD4enMFih!h%77)2;NRG7K22k8r*WG{3uW^IOD$#*++(@G(uR7@z|%B^ES)XXa~<@Xk0q6Jpbz)Rmrs0Z^ZX5fn#Hc zKvU;KlO{Y4($72A`tR!T+J9GVWw&pqu?Mm2up-)H52zY)VbLtraGn z?#wUU*UWLm0%5Xgj512X9%MMQqK#J9h}1&A0%0ZJZ%;6~+&C~8?1$kb1T7EafPs;_ zZ!!Be3V7UOh0dm1(?a=z%(d6Iip1`r@*$UHtm6UF;t0 zz#1h-b2)`gIXpKjIi5|YVi(+F|7{X=fU*hO7Nna=>4WUM@%w&M#0+VV`eX*xo%Jzl zQ^JPQ!!5qf=ql6NfvlR@4^T}@5DV(bsixBk15}EW?Q%rR+@EC)I{+$~a5*tK?6O{O=9W$L;< zIlNDNPMaMycOhb9+>?PU*NY#qgBi(?S34ffU?d~Dkgu5EVMK=sTuSb2~^r)-%LH$qYpGT{2J~|N27}29c%5&2%AHu^o%@vzlI~`3n!J39 zTcPUN2-Hz=a=VnO7&}I_^oZusH3m< zB(&wVl76(+AiKv6{lksGsG)b!1-_NV>tsUZh^#>D z*CsR4aHw09`tJgrWGc6&BuT5j%s=fUGab-uY{?jbBP90k3~1_&a}M@ zrN#74R``k>!|*pl)aT|Rl@=`XLrixfr2*t8SiVa})@2`2Nm5}8#QPIxqQx=|1M4WG z0@b2O-W31V)C!&%Z~NQH=mbGx;Jxgl#B{B1Iic?7P#<3LO? zyvw`E2^8dB0!*GkIfms*@#$y)f$fyCgU1_)WBRT0!pBov?ur3@Em6q>`O1NtLB==D zDZ|IDvDuwXyDaOa(rx;H0Gyx+tXN8hupe(U6ptXm5hx0a-F^1s?|STKZD=VM8QZj# zHT~&%_)bqCYGvL$dnT!gh53~+ebM#_PSh!+*J!a z=+0jX1z(2#!UuoDh+G>qEP@O5!Ab`2d$xVj2Y};zSBT1#cYpOn-w&^+1+iZMdLJ0$ z#KK`=W=Q0#qlEVe!b^=hW~k`O5Xc%nsLEf~1T-iNY^qNEu_jV*`b`K8hS+kV zP&Y_=x#EvFml@OY__(XcLMiUZ;6r345gh-E0z#5o9L=0W93uJ*Uj^o3r0yB1Lm`Kmn5i$B~ zs=qE@c3;lgpFy>f7T94Cazjw#Btlf8VUb^|t+MSYsk;(uqM`gT1&v-`M(tfhJ8t&f9JLT$Vqnx&lXbqnb!%Vg4!g1XC&I&LcC#fw;VRJk8+ znB+s$mv^kQb}xCnJf8T*5K8IHTJh7C(;esC2O;$?RlXkVC)cSLjbHIqS*>BqcANVx zf;3`@(3H{B$Q}lQ%~skB=YGLUNG57EMx~{#hvb!jRSG(6X|uf9HZWGU+l}8`D3LJ;!QNJxQ+=KKm-B@)3XH$c6|2wo-%wsg zkR=}=;b#9}9W5+*?NdDwP8<#puL_DU{Dpv0{tk}-X~3!k2G(2(8z%_xmxc}vV*Uk& zFz#t|F5Vyr>{UoHQM?JP+H-h}ZiVSjid%lB!!!dwNNW5D{yJYfS&zOQ-uz%9itAI%x~$JG4vbpX22{#8-8@jK2YO}9qhr9`db->RX z-p)$@y%o9?Z!v$Y@2v1Y7%dwwUHN8-uZv541u(jv;b*bZqgc?RBGOt&KFbP=a{6~y zEGz+;d)}<3@cb8Al?IlxPBc}4QNLHZQ+}DR++OHe<$IA0m#LKk1dtF=0r*eDzM6Nljlt9xF}U=$-T7$2)r zm#OsoL}R*s9?n5WY`44&7@N}UnH4ylckIkGratJ@G6<;C(gk3=!4{#Bd8F>pI6L4f zZ3)r{+iPn2;Z-ZbYUyq#gr(wUU09Q}o0VqCNh6(9YPp+M_$I79&PrWKz$+!|_oKB${e;-Z~{I;=<|? zshsHV`mE8!qYrT>;gm!w&I!pbt_kj8Vwt+F(SP8frYL{bMsIW#Ho*Mpl3Asy{`{|x z(s+G=vT|$Co8rA%s$$4}$1mjpdHNbRBX2ue>+rOn?V8h2So{2E{w_{Nm<>EaN2+wd zJ}v2RiKX@OpXjo%-1f-;%^hPyVN=%@)B3hwwIggYxH-+K;8UWxVa2ElrXPuvF+TRx z5R%O}JcKdWkhCsEBL#+fpF|Vw2jhk)B_X1T>FNQ?n&6YC=UiC#4Wk#0@_$TX>=+z4 zap}O^=3AmX(G$|FJx|4UWta<%-Cj8fXqLn2eEysynw)t$sAO_9??v{@|Cmr z(Zf^5-HH&+v1ztwVtSZxGin5*+Nwx2cRNeTLP>$E?3b;g-N#P?o1=9k{BG*rgZModqw}NAqjlFr_qa8yCmEA<|L#Xmd_k=t zMBMhpY`dj&L=n=l7?*_Oo-WyM^)en4Uzk8mw$D0!TaufUc~euxVz6-uG+i^#?%Lhi zsnX3g+XRJ@4EaIF99e>Cbh^W<>0NW$3A^;r;kZ;}ss3U1eK+&ZTVD+rzlK z+uavWvxiALwQ#T399Pn0?XwndqtWQZ{ICVenFS6fbb#ETnqtdWG=jo`dm_#?`@GZ~ zU(L>;B_@${pr@Lw`taWhXJBi5sd=tYPHM$H@b5pfXwcC$GLyr@vWQK9&O_uk&-!Fw z$}0$!nD2El+h~f}sOkNzGY_vdPI^r3VDWM?es%>r+>KT{>$y+y+fdZSoO!cBc{R40L2szY!V(=+Bqjmnx@qg$- z@22CwByqlB^dK&eSlXFHr%$3${nQaI@e~l${|7FhzjXi=JahtR`o44NUK6G=D2J?R zG&&`;M5&@$f0YwNifGlsLNn8DbB531&p8)nP0pV>&$Q+OOQkA`oZ+;Nl}fLUqUz~P zEl_<=jFio6nokksa6dl2{O6&3P_J^)DG#Q@%6!xx76s*#tjAkFbI@w~?NRb{4~Gr3 zGda2n)K|JXuW(d7Hf5zgA?}aQB~lGjuIZ?wLP^0uO-0Rf zuv-trC^4Ad-rQKd0S>JvLXTxzm%Cc#_N>X~#ukZ=(zih>bFqZiu|z!1{NV7#S3bTr z^=^F~SvjTBC8jKf)wLE|$v{SJ`NI~+!qA5L`ZDK2pXj_>xYGbEmg1fr4K5y~Pw_F1 zTPc{^Bpc2@t#qO*(yRl~H(eoB^2VdYa*`&1|2&Hehz8deSFd@5_J|hwvJ;(u$fh%w z`6Gqw-W?M^9KIMRG;)K8*jP5@?*<|yvOrX0W7H>eDF7RSraQcG;36ik!ozEe2;SUV zPuffdhh?K!eGdz2o+xyle|9{XQlW0s4_~@RUoyYyMKy3tNVg-PVg1RxL-)(S=danT zAj8%Praa-z5wa#eHnhK)4(ZD2QzTpz9JS{H9(1yASJ0kxK!avel;u^v%SP zJ$!5o*BwZa4mLExW#oop(}-hZ6R($xW=XQx6zz7|ggv*cvt1{3bQM|;?*{_{9wqeN zgbNkoAF-WRG~yB)4Tjmmoe(Czwl+@dlUL5~f0GBof6E`MI^2&1^{~lzW*r^6+f3yx zR{-~B#CwFlx>{oD$AmBksKZ?o5>e2AMV(sj z>e9&1%nQqv;XzAq82k~P#ZdYl}YuCkLuXGgoA~Uc!p1m)Z@@&on zznD+|F!@^Rv{I$tq$r@A8c7a17y6Q-P0Qj~vr&$l$ztKyW2X#k>oeY((Y&A5qnZ-j z3A$7NE2`j4f3;`L(M0L{c&_zkr@v>}8&51ZKL_nC6`L#ZqL3GO(YcKcdjP%X=?wRG z`X`fKo$j;hd1>DCq9w`^+B&8Z=6vMB=4%Qa3ML1D1k;evqfP#H}14C>c zMKbZpz?Bt}wk{+rq#9NlLYA1AX3ypS&4u6~v}oPMM`f};~Kb+D7^BK_Wj(v z`Bx3W=~B;G{0b6#kIQchkBH0P)KIbRS-qHNQ~L??O7(?on+7r0A%DRiti~@o!rX)o z|4SxinZG^@Q6XU1xjR1sYA&2t#IMS2s+}ntJFv|>*{PU5=2O8yEnx;>>WyPHNd^bm zyP8hdP2x?b;nIq_Jus?hT`!1C`#v@P;{$ziqra|PHfohbDLC$mMBNi{fA2|%dLZ>| z5^5^dZ3o%8XOh3})l4bRJ^AC6-fl}McV+9|q{&FYbEtz-4*|XbDu^8*iEW3x@|S)f zXqmiVo2R_kD0kNospYZ4>#gUj`L$|>xP<%QE8ogFf5FA%I}4-ycZb}V%MgQwN7E4> zyeOWpZuU}~H_g3ja5_U)WL(s_cMK|rLpyLc-wW^@)jK@=-v#)J*lz>w&Ls|c$m!FH z4hTS4v)LLF-eS+jYPE zlQOQC4oDh5S~J7?U$PV&^!>EMs$m)(4ID-9k?ya|#}r3C3y=58QT4b`VXxm$Nw~T- z>~V$*Ad_T`H=1pf=}bC4O_iX!*-pI%5?&^SbboHw@5KJzQ=1zT+9yIYRtL51neVwJ z%2vty*hOUs$?(uw_jiS`7PD@*wv?6cy~Opo=cG@=m>DR~qqV*-SAOmRs99n_(|5=N zCI?cj(QX}>Ejb(TM8AuGU{#dZJb(`u&=Qw-s>6&p)^T3;X?I!Hubn>SP`*olq9-l? z6+9m#53lPHk67r>@C@D(d3zL{;a;BT$|eZ8wUmrV#rX>FIKpBVdc^MB$y#Z3%vvQ6 zGp{$@q0VY&uW%E&BK%0Np7^G!t4r!KlqA3Kp7;|2dtUD1jV#L*7- z--dsqnFd~@67oB$-w;kMFk;8>`EyfAq1ut zV9`(P3iEq_jfUNAB^e@RB{@>OpGL`?ZhQT&qba_<;!*Q#SSAUuFD!>7g~>`B^cC-Y zN14LecMT}yP&$NiYTa}yGEgYFwkI<#C}S>{T3g2TXkj{pDSb-oIlLeH^G$RId2<-G zaI?XRjx|Bx3*+@CXL=@`POHX!?E8oNrIiMb*~Y$H|2hF;thA?Xg=f#Cb%kM*^SXkU zHR2@=y^iES+xjZ|0ycQ`zet0hoqelV@Z{1+WY6THok?r7j0=$@bKAi&GW)XEGL;+~ zNEwTm=7HTbVT0cR0|Rb-heyOeYmc^>P>;gem?cic*zjQwa!+x*F1LVV#!tOT%rlby z^7<>+?dVnHJ4cweGx+9B6&dMF$#8?64jM9Olsf2~v{6nGzec&U z?hJPL+)e?Ii!Bt~sl^OwU1+@c{~pVx(jE|))5ji%()mp>boxI++N@XR+LLeyQs3e8qP5wrs(ghV32MwBc@bjM-Xba*2V2qN+5g}~(0seM~(EzG)@W)gc zOc<&nhoEl$L3t8M4@v8+eqHFyfUx2MJ#&4RtUk8`d*K9E)1%cp<$3yYTJdfk6zmXs zt(A~!oisldCjf9y_R-WN(KG<(uI_!Ie=&hK86q)m7YvJ=?8Y`a(iARrJS_T=*%>AR zVBjW;Sa2YirMo=NZR)Y7&A*1~c0h*ks!!W|o*nkz=;$bQo43VwmoM3|WBmKy!kR|b z;qka}XA(`m_uSBpr+%ihJ?p$4z^e8eIX5tXD}L8J^X|0Y=6K*KFiqqr=`!Hem4ZY` zF8yl_kfjH7j)UhQAxh1x*+`4S2-vE)+cSIK9>J`_VbTp{?goS`UC2?ou%eK#sg&6s-z?t!12fBt8ii7x?dQllp5&3CCC3ff=?DLBpKzJ=e|3Yd z(Fg^cGYb|R<^7E;kbLu~<0C}i%GYf@W6-u6(T%*<$~Ac$nN;eZUZxAl(Cu;1C`J^x zmw*cQdbpJ%mNz1S)bl(3MxuW6aVX=yI~q`0`aX%=8x$;Uv1HQSS2r+BlZZ;azBGme z53x&%CMIbg;gNE!3NbCC)iA|eeuY35eMR%Jl!D-C!2;UmG`??W4CIb;U?P-q(ebEB zOXib9r_X@b!qeG zAYM$CKV;u!eU$;c`&t!kG19LFOnk+Bz zIzOPH(0g909#HQ%U*6`zc?!>r^Yl)-Q{m6u+H+gQ%rlrbW$Jkedm?-fXwP%PQ%Pkn z&jSVaWLiD2Yw@c1i^GGIh>*_#*uH$9uiOHT0}0`e<_EHYQ5H-eqcn>5aAw{F|q1lumL_7vM5!fKKO^-w;u!1m$KYpQQb0a?h zBdVEUD1K03>eJOV^3LJyonB{T?B&H=0t3^ndMEOvJ@E@$ecsCW%iT$fc< z>aL*?a@7aoyXb`CNHc4iF4A5`3R3sOy1`@)LZuE|6zglk&D}j*9<(WgR#7>f(N!6o6T%3ZYr~mm=w`P6>*_i3h&Q3 zpCsO#R3_2mE&ZL0KVSbT4_g!mo%j9prq7Cw=HY`qU9#VlIoIVx;O^M=i~ptgjbXo~ zlr-wJ`Qj$h*@9Ia*5iN{>X9DISJ!lPpT<@I4A%vVdR+$*n5$3A+i8Ytt#mr;y!GN0 zL-Bz#F8((TRiNzvP{o1e^oDnjwFzG{)2KiSujX6hM6z!CywHs(@U6m|)8dWOJlTJ% z;ZS6dVR*#X_85(*BV`BJNGx}jtYxI!`I1MFUqS>ar0-!1^hGz z))KWfGHXonM{7;x4AOOnA~aJJ#qM*D?z2g$DfO;so4(5mFIF|4)5lmjyxjhvyWJF) zAiITHQXwx;&Wl|pDC;sHU(eyFBy2UA!VpP6-;S=O^(T}?0u;yo{Ze$oMy1^%JsK(Z zSAha(l0p5cC`HG7zh|N02e9mIbRK6{B+lwqst3!SE#|<7VwL31A&U992ium5IW2;E zk@B=(3EaR$;}%0!-4A zZ7)zR71fQ?{2So725Z#*v7A_%AMzUpduLlblPOK_*~qs6^i0*dq)pJ#VG10gC}7c9 zeyUKZE{4T>BB3KzXMwht;200koo0Rx_mjav?V|0@KHXfG5L z>kzJ}1P*u*xp5jq?8hwsV-m#H3_)2A0f`O)UXO9?B&LKn_($~GAn+(ybQM^HAP9tC z)DUJLj}iib5EKLp9>o+CNe`Yw6ue@5vj!Ly(vKM#$-$!_CDb85)?)Fg7ysj7|C3(%rQ=ZXp#qMOlqGU z*JWbTt5w%5s02NB)}wo*?#u7`L>GC-yHwysUUz&aMIG1bbG+6wv&FE!OtOx}^M1UZ zNCv1h{M`i0>0S6N?T0vK&?MXLa}u^wk<&4!Op7+6YN%*SbG_6(=e^jhr72X5sv zNG=6D`IT1ju$K+1^tjdDWDCMT4;Py?3(d~1_0zhy1C<-|BtmHi1jV5o97=>k()9I` zC|Z+~?g3hrCk&s{FvQ%?Pr`L6U7oe7R{v^v=k{0|2RIbE7~<%ltCXobr8ZXM=nMN- z4{6*}Jo#hr=9U;Hj=KTtekFQ~NzLn!X*uh{!Fw^X4Ly4FsOZQ7RJx+;EeprwkibPP zg}9T1bo~oN`VY4r+d?f?Lz*Sqe*LMk@6I*I*vCB5FtaJgWc2sVR!iCyf#8CcyA#{_ zF*vVP@)Wt?l=3;)aAuc@w#XspC_l`R+vA^C>ODGdn9B;6%el zpC&AS6i#-TP?VQQAr|^NUnclY7W{4>xjEEZn5?eSHBU+=Usow0cVO@ zJ2zUh?-~TD{zX$`fD=TK%eHa)z_D^h-t+2sDZb8KZ4Yp=!RK14U=Lb?I@;?nN&@-x zYAVNfqde^fpXZvX#S3+WvkO%9D6DdGJkR?hodxf$EA$6n6g^Jplj9l8-&(1R8(?N3=N-PW#01n^7p)sj_e9;Pui?l0`-vggY=Zw zy~#9hM#(nlc^T83TgYwTRM(Alzj1=Xr@Hlya%@C-Iy3K(?CO|+!1PO=)VOA4e!8Kz z!FuaSILZk<)J9?weG0u2{x(ylXhfV>93l?=HxhyDih;VnUL6nRa^hziPOHP)l6NEW z1q@RZCrp}7PY~}{CR#f0kXH|765G)@g<+!-B9$ur)x=xfRXbuPxg*0_Zk}%BvV4r< zv#Z-Kg+9$c;cq%PEY$`P_W@4-`rMQrvp#};CH2K}Nbg}*;Dp@RkdS#G$dWYQ@>N)( zWy4EDf*QK0X9J%DvT%%Zk`wM?$1HmrWHN-0QVesfaz?VW|2OlXJx(UE>Ovdw0t zdUb;)Z!+KKKDPAoriEM!ZPS0*hzhR8waK=Fd9l8}J}RA2E`?Unuh_PQL0Qy3nI_yX zHg~%l#Tok)zT=*#W#%EpASF3jZhi~+YpHS_FyOe6BF|yzFCzkcNykik_NK&@(V8hA zTlE@SWm=}gDf4Tqm&Gbo%+q}Ep<)2u24vP0p#)xAn@@vUnKP;-Gw;r}x)MCj*W|{v zs*87r=dEs+&fTtNOm?0)EC&*)^(P56j#Ev5M|JR*8lgkssc|f1Z)aYChxW@V$8*%F zUbyOsl#)jPK+P$2PKscs(e)+&AX!u(nmYx(M#|B>Z>S0`))@4T?BuQLQT#1~f3`wbndlUON>Y3~WiNU8 z37Qe@ySMU{d`wG$WD)?JqKpoFI+8KPO)D9Vtr^<_T_Nc<`E*sT&2@F27H9F&DZYwV zwU1j}hv-139$qKg5I3CDJ7gwKcu&)`Yjq$E#YL^K_H+dubt5glO;&V_0l(OVGnNiX z9R$|owlLt77Mm;kgqOo4HErC=tB}sK$0Hdmly#{-fZv14gOcEe`08y>f#hPDe_{B2 z6EB0%@v)7Oc}}N9B7MAh?y=nRH~FF`-oUHw3-umD`d%| zCheD7dS&bTcnpKOoR0Ddf=)b}e!$dv!X4_#L>8gaFsgrbXGC7$*ky_4At#O{sq+bj zqT{z>ll=xPqAm~nX$<&LIO;t4UD1|t0fww3^7lAjAPM2sT|Ya%Q(nJXDn2+(ZA(;W zVfOEs9A1es5shdxSTF8>yiBKgOY?Pty-#T#wQHy4Q?7vHOucW(Xs9xB9b<^lhyNR( zgd9(!%VzazYd#9?{_H|V4uAMfi7Y(e@zto+u&A&SK;P1bYCVnRY)9-h2&ZgF&xX82uTd@Ee+Q zSDnvzk~iq@Pvnn#c%b)Ate}orL4WvIDD)sUR0xF8|J*7(*!c?37NUI2iy#V~34;9d ze=eE??4r+q$8vwTXmSWh{9TBk|9vm8yANSs0~(qCzu#?c!{uGd7S+Kqh)l$W zP>1=EqnkioTSOAz1=cQ(P|s<{4LM@No7qXgI{&wRj^I%4A+ABKpK;l5q3!a!ENt+n zCt9f7rLH$omjf?uII=JD1>>2oiphC}k2zE?bR>OGR?fw9vzINFXk)mZgHOp(40wJ? zqQ|ClctC&sDgyWrjRN8%Xm7a>oFK>);71l3rBKK77K0g?Q=DNvpDcT>n9yJLglZU=vYusb**q+cd zY|dBD?{}%=Z}_A}mb@#v@k>wgoPBZMuA-hDJk=06^!_Wf2x@<_d7aNgNIOI#H6?Ld zMdjMM0O9dqoTln6YTmPF(RkG|&?(l_)T@ht$T+5jdKd<&FZ&53wnY>;b@vQ@$-5~q z6p$?+yRMx&8YNf_Di%brP>k_P-mS71=uK0-_?Z6nZcOvJG73-42}T z@-v{=9v^BSmgKm5#*z@sNE%K}ajg5Sp=AE+(N(i7w%$b}1FYIu^4uKc)$>#MqpKC7 z4jfg0uAsQ75qYBBe`Y1hK0aSkne;LZiC2a%X~FnwJu;4!D)=UO^uf5sSbDH0tqY9; z;**l(J!h*>xCiDhX?*UWHG%`jM1E?|Vw-&WSC`zUF8&T`sVXeF6so?6OB-$NwrX1_ z++w;!r$MoHWB3#%n0-v>I_V;jhomCRo@~{?tL^>jA0&6ZiXcY=)O*B2X;-9a061(Z8Q zQzpWzBlR!bXE&Eq>F0Cj5+sCxs(MA=T&viZexG&Aw9FlEF$YzJ)W?MBXsmeN@0LPh z>K#ytcGCdij-9(<%)HPoo!`xjD0P-1!Upt;stFalv!^>Eqt)5aHPk*299q1D!XkKp zKc0twUN4oAZ%UZft=At6WWRRhpNmLn^ZyHY^6sv`bWZ1QA`~!%;IdDu`AR8CxYL8n zTzdHa_|qcNDC?$Mbt*d0pIHlq4b9Wgt zddZ=&VR|L;F1)Oi*sw2NMiIZ zGLr##927e+#ihS3FMD_ktl^n$sfb4aqx88I=BnWwAZ~BL!pLj% zGHRj3Sf*1_%o-ex01_`t9Vs_%3@2dX(32~ICA+Xr<-?D3`T*~#z=S8nx{6;&aostQ zz)Cb?iylsW!4O8Or`pr!X2P2Af>)yx;>%(Ri=IxG-K}HycqMZ7iB}||GT`N!JV}eN zi0e-?P1n`O?YnegFAKrDXPPF`(>PY5g=@!7IWAlELd)Ef@!CoZn5#( z%}^PRjXCqqLqn*?*o6IB&dgl1UTvYM0nL?f)z`FYX|e?gT-uYI_OT)MBk_LMfC;JS z2}U+e0Zw`sd;C!@Qu8qwEdR^jMiwI_4dUau4LJM-jz^xaA+9)$6v{{UYf2_W{`uFa;legMVX|{sWs^F=`(M(Hu0WAfTcY zjP*_+*8-okmC+HSEfe%OD<$`3(~;=|DZlf(apur#(Iz8^YYZWnWwRCxiJntBF#ebyR0 z3l!5Id}#>!au`S&tjHEJ{Hk_JA>Ri^rZ-QdCTrciXdDF>EQ*@l+k}c-X5fI#TBCmg zwMgrZu$fXjf^=AK64z+TOWspBhQ7q7E99ihyDPW1!X281L)zK1LniN6#c4a)Unt4R z**N3;b~CQi+0>+2Tj=9tdOaDh4G;Ylv1V}QvT4d=wfTmfJ{5F~zX-DWBKj;ojp$6m z+IL=xvg+}S`C|Q*^DZRAmqx=Q4}}c+`Wb$I@lp~RC?TB7NJ$K^P6_u4u^8) zOFk5GeW;u_!uM2rD#S9)5$#JO0Z>S8Pf>6E{cmV!NsDk;uTCAx?2H;y z;=|QT2F2BG+BRhk_G@!hsMp#?er*Zi+WoCUL4_cZ2SJq7zf-0NOpu?w)OZrAwW;zL z3_lkZPyrZ!E!Su&c<^!uhd}%f;w+$+Vws8@8&S!&(4fQc2A9U?m zmCt#b**H+8Fh`)FR6ZL=P(CAYz^IXOv++ zwtnRoa1?<{WdZ(!`Pz&?#}Oe%21hhZM8z>aj%{tGsQ#v9 zr-Lp1Vzp+}(>&9x)7wZ9)|ORjx~FC*@|V>^s!Y7NSU3{P<~HM>PY=KTqk{ zBf$F5r<*uX=dxq{4>aKy+3PVs_V-sZkW#IS$ z;L&*t%yk%#58>X{))t+Yki2Vs94)dC*z@-836QiKbzH-DWhr(}^_7TUpZwpx(1vg;dp?YCS*6DnoxgeCF-wxIr8n+AsC(SeSgu;;U z=K9{Cdo{G&X8WcE?|&a8lpL;tD<+AemwPpt#20GW6FKYM888f-QD^s=A}@L(Y3~tc zzdC0Vi^$wrX?>{s`py94&VWt(&evvsjmg9S*}P=H&%f;2LM?QkUYahmzO)_2EzWdY zPHVO^yB~(7)69Uw07q_`X(f)t>EABOhJ9z{sEoA2{njV7V$3A{bK>74*hgbHWIzI! zfh8#!cL%RyhC>XH5$_zp0&;8ZRb$y6;tJu3Cuo)O3T-$a907<}cFfMc**Nfm%-;bBPB*wM8P85&i*XB&5~*PFdt${P>bqP9H0VA&{!&b#6gC>}!Mors z8Zx4et=t;DVXy9HJ)on!O!xmD+kSW>rRbMCQIkb~_28Uy`F7xLvm^fO!+d`RmbQ)6 zgoD;m&PR#EnqV#0xLa+oo|aj+Pl0y!_>0}eg6bCS1Qd$d0pe|O$Xj#!KQ$C~h1a-`Fy};^=6uM34v{C?*B8ngkl0GkVB{KhWK=hPq&Fag6 z7yHlv=*chxVbsJQZZ1f)@zcPfIN2N0XRB|M_)r9)s3XVioR)D*$WBk*< zp^l$g#r%`mS-uQkn>Q)j68v(^(W?YHX~G&x5_Q7~{&gTX8!w9$i1kx2gw0}aha0WIF=V2O0|KBC<~o?`Ur za3pNnBX?!TjqJ*@*}o<=Ht)%$idc@|xKh~}SWNwCm2xj8lkVA0nl@_ydGTwZ>q~8=V(Mkh8!UOPTvVr(Um(6=@;M065ez(XYGH2hSUpVTy zn2B-+rVi*eKo8!UCfpvseO*E!zaU(T;@OBM7_!{d0v5c+Ye#KAY=zb%vtybv^(fQu zU5g9qXuLu^_}>7 zL6n+$x1E>B!Ak{C;@sP465n@oOSM@_W^eOc^!nw|ak2{SWOFg1UC~puT)0$AoyBrZ z&ArQvFa7YSr1?rBdE)7Yb5V2grSr49){W}ftIz}%-CAvKqXqA7NY>9VKXjJC75J3= zJ^p%YjpjrjJ%n+f>qa+vt>)MvRniT{o>$)usbgybH~GEQ)b{j?^8k)i#^b;ouk)oG zH^Ue>UH_|4sop$BZ!x#Pg!M9TV_r(TFWF+5L5QNIxk_Du975Po-8TqF3X{xVEQgd;L;Ewg#(?&Q1>2fiGbYI_(f&?j}~kzTRI??u8-Y z6dj=0s;R2}izKlc=1`nTOX*rDGDIm?{o_7*wn`QXjWvSth{s}(C4WC?Hjz5GZ}*v| zjFBVF;Lu|d$`hGS?90!i`cO7h9dqUX5Tlaj=gc_v(ym0@e{e|(4(437=3{?Ajk36J}L+^Vp5(Is1GtC2SzEqXsp!W4^;I6gHiu(xaxmkLI;K{Ip+fQ56nPF z0Mjn74Q0d+d&Z9x51pbq+y~12!vNE+1R~iF`=Da5J=0*+*atF^3xYA{pR+jKhkb1d zgdz6#|I4O#f>+Ri7WU%?Y2f5jGd2x9^hccO3QUb6hEa+?ZqTa=zCqfKg!%s;pC-1h zm{*11rgZ0<{*AElim$rnvKc<*FRiZ)UDba@ap2ebF3t_O*TsAFF7ZK$n|Cn(W z8Hy765ObbR2-ysTR)S8I6Txw4OTwo+RZ6= zW7@0(FN!S01!!dfA6d2{v)H{}`=NG5(=Jf{n2-ZFwkb@tgj6Cwiuv;U!1Eii(N|ck(8yQq`-@D-y;ULd(L*h6nEQMJAWuhyw)`a=6BY zhCfPDq`DRoh7|p>LL8p8Ds`n@b{mz1LGhkW|822l7)G5EW3k6=Uxtqkp!YZ1D56@e zq3*KK{VgUo5!P0aS@dOnbq>HOUraa6C;$|3(RK^RgpBsF4F(t>$1R3Z>C>pX*$Tl4 zJ~wcmklW23U08-v6<^%;W5 zqY@pp7$`k07sH1_<;Uy9#Z{u&nBlvC(^cf%S~E*#AR^P>(m^p{%<=R)1He!7wZ9#4 z#%kaa+Rpleec0~nVL-N)B(B7jy?Ld}+n+fN3*pfQrbgT?5HhH(4MI_|t6!E{F zOptwx&*>;L3E@|7j4VG6b8Glsb;BxDR_1%$z|vC+ZdDXM$(R*8n|%X`H3(I3Oj@%ZBhI_@TVU;VcK3shxZ<%C-L`!^!vQRt$N{z-yv#E!z%Xg=61s?8En&*@+XU^dMPYi?E zA4e^5Ho~LN@u(O3-P($G!=f5+Xl`G8Kx73ya2W0w^$q=OO2S)H*?fgu!)IPUxV%;> zWc9%W8E`sCa%?~$;sI_(`)w%XsP*vsSSnj`Q(`s0&W%A)_N; zdVAc0&jUA_?hJgo_EnSdxq269dIHP7nB7(cjcWC;F}rp3aVC1`u>m7*)N;6`@6&?i zi)Ky3m}VO#8XWxr;7X)M%)nu$Wm?~NXQfMiqm?bDuCHBdvR->~(UvH?T?5~l8&1{3hwp{n)?Lu(t3J5x zw#=(LGOnhyqnk-(onN9wK~s%B-DCeJjS_cvZv4DqXX4R`W;t8)sqA3nzaKs6w3}w) zj5@9Z4b*ym zde>!Ab8c>zGwdA&Ld30GoKKfTJmpILaG(T-@jRH3_NukKQ7oF~FA~#6rG)0(6E3^l z;Yb=IxLOn2chox>SIJs{*YX{hmvPr>!$y@uQr&?{=}2J>``@bZSbjn?`8f5x{T#wZ ziZ}PE0arhjW&e4>8T2^VOTvMf#Wm9wUHoNZ{rqSaY*I_{%qo;6xXOWf_Ad0*nV%uX z&}$Xgtj9fI*IT?hN)S<@RZ)3H;{)s*YkZno7?t&BqM#w5Yu zC_mD2`Hdy$CU1oP(4;oz+G_L7=K*Swc|XBs2(if)JC9?2RqSXaV|0bQA6A<0?|BNk zOB&fGWr`|}V``?y(F<~Fy*DsU`^KZ^ERM6kv<-iIe%9=Cm1V$7v!Wbxl}F;MDcpYC zD$3&rkB1Sk6A(_zD5oLXsg^?1u_x*@pi-|fZ?dn;D1P6Ty%&2OwpkTzFl11gp6uB# zFhSRd(f)qlU_jzt*ZyTswCPYSF$bjsOgdEqyn!8;5RB`n_LpRo6qCrJ}T1DX&SYxj5w$r zC%oibTc||$xYV_soq!deE2L1M6rhi371)^Hj9^vitaT8)+|O7>mwi}G>X#;*w4-Tt zp+i6*Fc6HrK8-_#?|2he1qAKkq&qe2y_qTVhfJ8P`U4KXrMEscDYszGX^}pMNURmz zCWn^e_{uH3>T74(dBum?YSKwRpAsa}uzV5-=@OYl-{ALswq1?^xt5YR=8wW;+vVn4 z!2lU?7@U7-Jj~z`qSMd6biawaGu^V7E0OXhhLlpQu7f$Z1IN+twG+OKPo;rOiwkqN z-Lk`m|CCM_mjVPJsq5Le{RG$hfcaRs7)w>RDke)reUB#DM-HDx<_=As#bH#ZgWWU+ z+vQ#@T)xt;5rOD#`oEQ(w)X5Pd{%=QhO?Ol7JRS&D3&R=zB&|g3!MTQs!nQslbmjj zX;~s70tq}rw4fvzI&4%t0UoF1$M34KEeEIU1=}++*0;$w`G=r=4gv{h$oD!G-c(RW zZRi!h*|z^wiHJZU=_6^WNu|a4Y$i!N3ed_^PpO-851H@W+ox*{B~j;_T0ZtI+v0QI z|Dlv^Y&}p7&F`e5{Srwn%06;Wn?$yMl{UP;+_9ex6QW3_&AtiT1EJ24=t}xXI>}^G z%bTDR$x!j?$@EgL$et^7946Gp*E-J{wIBD1SV+1rR%s>#OFd7~@$#=tao8~CnJC9g z>&Lqp;B#S>>x9|DM7B$HC<4S`jC%{wk665258D(HE|+v7?NKlK#Amyo(gRD4xr$E?V`~J{b?(5wk9twmBQipJiIC_k5@3@iXrPyWEx2X|~aXTi_G7?maQ0hDoG5 zO}EsQ@Wj2IXhj8<^FMi$D54va4)2fry?6hFl5GA>EdBR9`5LZ2+m5>+hJl2cf*Agne>q!wo_Vy&C0MUTJEvXuNX3;PwGMZUEcXa~@%o4j@sxBO~A3mZ4-I=d?*>>uJ90^4Vq2?ZHq5~C5<9~ z;+^^vzDMwV!OV6kiD3Q|i+{xglFtm`e7q<3{sA_;KtfdTkE>*XOp+X(ZG9)K zEsR|a_F-nGskxpZJ2C-F=O?_FFKROBJh7oOC{#R$sacnu^_?WRbK-3XZZQ==t3Y%c z=pSPhZyOE0ARFc@M{T~xEsqeVzx5j8csKA(P+Ri7O(e+qlLF>Hu9F8`=d)vm{^Ytg z;Ff!mioE#0`5;V2Y&ATtbl$3xX#cJ%*T;C>JX5K*1m;v+{Eqe4V>GhYRf{tDy7?zK zfIPanF9`nnb<}q)NqU7x;xss@$}rUDNYZKcg*xwgvSa;g(@e@YP7&ihDWP|?Txf?_ zSG)wxm)(1ZydRxB5%QQ)2)1hkj{p{6Uwo+CZi%xxljQlj{bWe#zT5R>-uyA?rgzem z7-|?xhN_3)#U?17_pmt&a$9y1ilzR@hj6x z-V;vuY~{a9|JI}Xb3-OOy}vf8QA@T>`$Eq>+Orv;Rakt{j`Dnbo0nos$?NgWY?XK; z2b?`WuAoX9@Eju6W22;lESR+nyM;p4{f0%4D4RshV@#Ih&gAGuUtrcB<*k>CtZsI|mKN<1h za4j_uOWPDvl^ne#$rS0mnh*pegqCtPKcx63ms28b`k)4sBuB5nqPorgaQmWx6TnH8 z9B8!}D*>S-Qru~k{ZjAd+bJDOsnm$eo#=htf7im@b0w9mn=+D9pDniMkQu2+;SO6; zVmz>=mYkLR_W1J^Cr@kp%K$t9`0^rD?cf7%l4!4l)^Yzs399%!%!P?ekaRzbU$8Lp z=&+#Z^uy+uQ0Q7q4)8is!5enq%9duoL}20B7d_t~BSXm(g{f+cy;*t@8)k?|O3YcW+G)^=m)!yEjY!CM0$UuxO(VOWWN*s#oLeeW)T! z|Kmtq8JOMZL*eW)=m}Zy-Fgwn&i}kRiDq9H-v;Gm^w@z#Iys!taX9TeKh5fzU}pvM zD-uMM1CO`h(W7#z_K|X$xI3nSkrA{hChcW=fOJXnL#Q$Vv@b#b?%(6t^r|e)@UG+`vbVU3kzG4CC0RW-5}ZL?IbqCOvkv#LX+Ox2DI6# z-;6lK(1U@n#}#_YH#iy@87?=r>6TL>{OGlaM`!B#LyP+*nuE)qDvd0T(BVMC> z!Si7qo?2rpS9;FA(tKo)`IP!)0H+h;a*LeWHO<+VS%z)o7b^fda{}wfiui2$ zE$VB_wjJq=+?@>DJ3CWnq65=UOzLeGf}awN>ZW;Vu+T*@y1Z?gD*Wnq8+I!U39HhO zsQC!J*2ucidacniw|+eH0r`Drn>;~YhUHCehz5^*XqumjSvEuMoi4TIO}tplsLHqA z;ZFVP{au*O__TNPH?s%g35^TC`H7G1jv6H7Knnuo$|}fMr8JRS#H0+ofrpX9y#PTq z`E?g!zucX7EU2LQLzX&>ZDGI>4<$$B)}tbKdFrjV4@^ z?#_MKYsdQ<%{Ix+m`I?5`eKx1x?J7EliIvuy6o!tHu^qHB>DM*bW<6p?xH9b*NiAi z0^>DP(_IB6B@Aq|l!^nOFEaP`!a{NX$QuCT;!VD4vs;RB>ALcGpDz-6w8%4g7_Vfg zG|C}s{h43|Qb`PkoC@{Iv3uWahLZ}vRftaBs-$Y?Jrgp`ThB~x;U4?ywbJB$SaVB? z^Ki@c={n=pLg9YJYMlUQL#-aaT66N~O%+ZZLbPXVN_pZa-Bl);X+P^c(CZ|?xHQeD z+xD0IoO(Hv4?K)1Tda7tf3fec zT)?Ee>#K~ykw$c2NKIj6?F*aB@hncEONyBfSyS(cXhc_KD&H4AzM7Fdy*O-=T0Bmu z1t-6aFifj9SU6Eih%>y=(k47Ixj+>)qm#=kZ$#Onz7Q@IG$ENay>*1ay{U zf*4JmL`aZ8Ky(zmNz%YiG;k)u^;_#AK3h+%$9{L7YFH3F?Cta1xiXH)(cN?Z4XEJa zMO@pPP2Ltx<&hS^C(y~y)(Hb${VCN>3n#UyLIa&y{G?Um*9h8cLMNo?11Bv)dWb-3 z$)RMmwU8>?He!5zKT7~%Z~r-p&Gw}uT(fz)bv6d4+r5W2QKo-McTklIu zGxwq;xEg+@KRVES^4g^NBh!b*ZWiLNK_^bQhp{qWXuX!X=3=Ip)6BPsba- zS=0bJ!pt6mD^=QjnjaEiZfocCW`l(Homzo8Jh9~l|R*A=iS496a( zQ3N_0Vm~iDaYuz$Fqo|)FM{i}W~FR`)pGh@2=sK6sFmu(xdr@F%@-qmuZElty&m9e zr_-qUoPsD*Jw__`864)jh0QTaaYkV9ca4O_94PK@Baop9!}IPfGWQfWStRGPNVvU@xF_LY)}bP|pYrXp2E}hR?^F9JsOS>>h{S=%v0m!e*u0Pt-u~?8FWP(w=a2_~^Q117E z=E>}4)H1|LO-@08LA&fly@e80Nn2QasZ?KW7^{kLCUZX`g$>di3cS~ZC6FqW$WGsq za-@)V2*8euh@5=NB}kJZ=0|1s)nevz@uJ_3UIU){m^q*H2|>I!t> z^<0aEMTQhZy5q2uX}WXYiKRs*6q^J3F^Ne;E9v@Zs$|kgXlCnEo?-s;F*!c9Tv3Ev zL0asVGNO_)1u1%7!NE~(W4oak_9lbOON~~z=j6WxH~P%rBSC%Nz|x~%?obr-d1p%k z6zH3J$^IM{VOcCTRV{xHkMbd6{zDI1h7m5b z4?0&OM$lL|Ra$Wn8xr3J6{6L7U3?n*v+pwi+=InpabLauzzQ5qJ_` zQ5J8+M)Fj=Cw&{?_rZw0%b4HV=5(7Btg2hOaR>gu1yuzIbHBKb&(1+Z8sIrW{HeN$ zlI$`j>bb;{36g9wCCYV^Cx!@G&bk znGF|lW@I|1w_eGX!X8eheB79;h&Xg_U!2V6fBga1-_8AFtS$LAUWaOMDs(eJr6xFa zw&?3m_+f!q#y^~eE_(mA`{yH80@Ng_!u7-3?W`xaAg_+1n(Dmdx4_2uq;LHKZngtRPMjfq`r z&m~L02O%UEW<~T2b6T$-a?tvGjLmvP{0VgH>)vc~eA9Eb*jjj2Ty&%w|0awCK|W`^ zXzgnKbEUS2FQ~W;fi&YZS=%z z{+lYB(xTjtEAasS6QqMHTngKDJkZf5LR)CAc%T1kdfoOU-g@L?^#@^R@>MQ4-Sw@J zeFam;`@pZ@mRZ6xaMm$;aCY}`JSR9+HX@i~Ohx2BB)`|0Lu{_kQqB3|MjFi3m?}0h zI5_n=ER;z*jAPa*h@!#eF9koRIWzYIt$qB!162n7_h;eUZ%0BYC-bV;Q4t$$(o1E= z1i0W-C32^CFE(TRRs8PfP#y@TAW^g4i|FKg9FE+NYW?XZnL+iVCVBLZN6kS*r@+xa={h<^ zS8yK$;gc9#pu!EtN#EXEEiRN?F)JhI?uT|c(jenE#h>6Gp23m4Xed02kro~8*}n7a zaaLPhC$PCwOX*<^niW$dd95Myo`%K;RhepK-4fK)UB&2ANXUtS^#aZmy+nKUzSSX% zgY0Te?Cudz&=g||G!EYbNsc^~3cdpw{hUJA^QUL!&VBiV-R8{dfnEaeDPXU!k zvjAxo`C;M71F=eZ1r&NHUkj&v3rN{x+x$)aGKbD4(*BRA#6RyzJAfEqxI6Sh0Kor02?Ljd zNbQ6Kc&y7Ea8ec(<~i_2c@Kw}dix$?sk~O)euvVePp901g-mo_fN{0*n}ywH=FA2{ z_}dKvFfGWv`8}&JtR^eaFFKB0D6)KW6Kz)Lo)^xaddtaGX=ecq!Ld)BYP32{XjuZD z$#32{WmN-@`=`h4uhS7bpeGQUK}jqkCEK?1F36@MHv@^*lhJT1a-U-uC#os$M(Z>L zt;g6f?C4nL{HKtGeC-Rt4uONbxHSQ&XOQO#567&X4Y6X5rUlOxq1aWsXrf1;Sx4g% zwWcxOO0gppgJJPV^LaN&?kmh+bQlegbv)om1SEX+_CVm72Isf&13BuHLg*WbC(2oc zpKn4m-JI84&Srl&%<@_+75E!Ox&Tj?NVXpQi+$~M(m8_dFJ$ta9qs1b1$a&)QDwOX z0b}kq?WGyDOxg|X6xfV11JhHbVkes$&WwXf**PM%vw4U^P4h)OLFLicBe8u_)t_ucIk^jIh_I!1dW zqZJFow;}oRowE**B;%QKWpg{2pqADTek;4hs5}4Ahqt|799gS&gUU#cd;}*APrU$eT+`86 zo+Z1hT+>6!#YybuRy@o%m6|H;TG$jFUmukb9g6OU7r2tHfBZn=Ep|67Q*5U#G&P#) z!qHRRBtNko=eO^Dd$s;3I-KURzg(9nFp$Kk8a|xNAZj^ho#!fa9qDs#EI4)tLG44U zGpK0=&smn91rcFwZ!8{isOx^5Uc;7GbK_3SK?a>WCaddZ$O*ilb0O4gc6f=;f1uiz z6KCJeP#sSr1v|p(Pv&xABUXv}KrpNs5sLrDzSh1S7++ydI(v^vShK$1uTr$(&%* zk`UaMOFmFbMrVDjmQTwiq9Y%Wos1ulRhgL5@fp1~*J{HQC^G4v3LU@xBW-Qv@Q!}k z=$lSeiBfZ3WM1{oz0B2$djPY^VX0`V8ld(~iVy2=mAd`rn{0m5AH7$7Lk_|Fb71(S zD_W+RpFTAjov5-IWeNzs%op<6wnhUqfJF9E+$e(C;;qBhl@^NW^Ef~ac>de%xev^< zmsvN$DK#XDgb904z*Qcsg)lyyI z%wcFI-@^R{R(n57l+AGVE=CSNGsowP@Y_e-GF+1UCO5*?PL{)W(wL7rjdYAf0KTAD zOUUD~LI>TcT;>oR=g-=g!80`f%4M@wM6b+lr65UQI^BN(xwT|e?Oumn7uTi)Ynilc zERB@-r4p?>tzysk4&r(^Z=DTKz1jsko9g;rvhUYcsCwEge-gH0&Uh`V&E?zdj|}2x zj$B%+Q*#&yCxYxZ6O1DH= zL}Q$(+Tufy3CrCHjfz0oxOCEwpQQxVg}btS22O~nZk8vQs-MOAMdQ+<&l5vY9m&)9

    $FprmmR6A4B9oklYSPkJ=C>i; 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

      -GcBsCPv*9SGvb3iS8TGhG~UR=NyD08R~EFos?0 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 z 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
        (Pe5ghSBLjEKDKwGrbEBJ>*or;Xd$$cGoWb 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 TS=&Gdr__~o?iAd%eDr?+^7}n< diff --git a/docs/wiki/version-guideline.md b/docs/wiki/version-guideline.md index 4044a2acc0..073c3a53c3 100644 --- a/docs/wiki/version-guideline.md +++ b/docs/wiki/version-guideline.md @@ -6,7 +6,7 @@ * 第一段: 3代表整个标准运维的大版本,目前是3。只有在标准运维进行大的版本调整时才会变更。 * 第二段: - 1代表一个版本迭代周期,该周期内包含大的结构调整或者依赖的蓝鲸原子平台需要升级。当迭代周期向前演进时会进行调整。 + 1代表一个版本迭代周期,该周期内包含大的结构调整或者依赖的蓝鲸插件平台需要升级。当迭代周期向前演进时会进行调整。 * 第三段: 32代表当前的迭代周期,包含了一个特性、多个bugfix等内容。随着开发节奏不定期进行调整。一般为1~3周的周期。 * pre-release-type: diff --git a/pipeline/blueflow/.babelrc b/frontend/desktop/.babelrc similarity index 100% rename from pipeline/blueflow/.babelrc rename to frontend/desktop/.babelrc diff --git a/pipeline/blueflow/.editorconfig b/frontend/desktop/.editorconfig similarity index 100% rename from pipeline/blueflow/.editorconfig rename to frontend/desktop/.editorconfig diff --git a/pipeline/blueflow/.eslintignore b/frontend/desktop/.eslintignore similarity index 100% rename from pipeline/blueflow/.eslintignore rename to frontend/desktop/.eslintignore diff --git a/frontend/desktop/.eslintrc.js b/frontend/desktop/.eslintrc.js new file mode 100644 index 0000000000..41c827c69c --- /dev/null +++ b/frontend/desktop/.eslintrc.js @@ -0,0 +1,489 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + }, + extends: [ + 'plugin:vue/recommended', + 'standard' + ], + // required to lint *.vue files + plugins: [ + 'vue' + ], + globals: { + // value 为 true 允许被重写,为 false 不允许被重写 + NODE_ENV: true, + SITE_URL: true, + gettext: true, + getCookie: true, + $: true + }, + // add your custom rules hered + rules: { + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/array-bracket-spacing.md + 'vue/array-bracket-spacing': ['error', 'never'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/arrow-spacing.md + 'vue/arrow-spacing': ['error', {'before': true, 'after': true}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/attribute-hyphenation.md + 'vue/attribute-hyphenation': ['error', 'always'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/attributes-order.md + // 属性顺序,不限制 + 'vue/attributes-order': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/block-spacing.md + 'vue/block-spacing': ['error', 'always'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/brace-style.md + 'vue/brace-style': ['error', '1tbs', {'allowSingleLine': false}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/camelcase.md + // 后端数据字段经常不是驼峰,所以不限制 properties,也不限制解构 + // 'vue/camelcase': ['error', {'properties': 'never', 'ignoreDestructuring': true}], + // @todo: 驼峰问题统一修改 + 'vue/camelcase': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/comma-dangle.md + // 禁止使用拖尾逗号,如 {demo: 'test',} + 'vue/comma-dangle': ['error', 'never'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/comment-directive.md + // vue 文件 template 中允许 eslint-disable eslint-enable eslint-disable-line eslint-disable-next-line + // 行内注释启用/禁用某些规则,配置为 1 即允许 + 'vue/comment-directive': 1, + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/component-name-in-template-casing.md + // 组件 html 标签的形式,连字符形式,所有 html 标签均会检测,如引入第三方不可避免,可通过 ignores 配置,支持正则,不限制 + 'vue/component-name-in-template-casing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/dot-location.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/794 合入 + // 'vue/dot-location': ['error', 'property'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/eqeqeq.md + 'vue/eqeqeq': ['error', 'always', {'null': 'ignore'}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-closing-bracket-newline.md + // 单行写法不需要换行,多行需要,不限制 + 'vue/html-closing-bracket-newline': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-closing-bracket-spacing.md + 'vue/html-closing-bracket-spacing': ['error', { + 'startTag': 'never', + 'endTag': 'never', + 'selfClosingTag': 'always' + }], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-end-tags.md + 'vue/html-end-tags': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-indent.md + 'vue/html-indent': ['error', 4, { + 'attribute': 1, + 'baseIndent': 1, + 'closeBracket': 0, + 'alignAttributesVertically': false, + 'ignores': [] + }], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-quotes.md + 'vue/html-quotes': ['error', 'double'], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/html-self-closing.md + // html tag 是否自闭和,不限制 + 'vue/html-self-closing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/jsx-uses-vars.md + // 当变量在 `JSX` 中被使用了,那么 eslint 就不会报出 `no-unused-vars` 的错误。需要开启 eslint no-unused-vars 规则才适用 + 'vue/jsx-uses-vars': 1, + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/key-spacing.md + 'vue/key-spacing': ['error', {'beforeColon': false, 'afterColon': true}], + + // 关键字周围空格一致性,在关键字前后保留空格,如 if () else {} + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/keyword-spacing.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/795 合入 + // 'vue/keyword-spacing': ['error', {'before': true, 'after': true}], + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/match-component-file-name.md + // 组件名称属性与其文件名匹配,不限制 + 'vue/match-component-file-name': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/max-attributes-per-line.md + // 每行属性的最大个数,不限制 + 'vue/max-attributes-per-line': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/multiline-html-element-content-newline.md + // 在多行元素的内容前后需要换行符,不限制 + 'vue/multiline-html-element-content-newline': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/mustache-interpolation-spacing.md + // template 中 {{var}},不限制 + 'vue/mustache-interpolation-spacing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/name-property-casing.md + 'vue/name-property-casing': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-async-in-computed-properties.md + 'vue/no-async-in-computed-properties': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-boolean-default.md + 'vue/no-boolean-default': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-confusing-v-for-v-if.md + 'vue/no-confusing-v-for-v-if': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-dupe-keys.md + // 二级属性名禁止重复 + 'vue/no-dupe-keys': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-duplicate-attributes.md + // 禁止 html 元素中出现重复的属性 + 'vue/no-duplicate-attributes': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-empty-pattern.md + // 等待 https://github.com/vuejs/eslint-plugin-vue/pull/798 合入 + // 禁止解构中出现空 {} 或 [] + // 'vue/no-empty-pattern': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-multi-spaces.md + // 删除 html 标签中连续多个不用于缩进的空格 + 'vue/no-multi-spaces': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-parsing-error.md + // 禁止语法错误 + 'vue/no-parsing-error': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-reserved-keys.md + // 禁止使用保留字 + 'vue/no-reserved-keys': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-restricted-syntax.md + // 禁止使用特定的语法 + 'vue/no-restricted-syntax': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-shared-component-data.md + // data 属性必须是函数 + 'vue/no-shared-component-data': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-side-effects-in-computed-properties.md + // 禁止在计算属性对属性进行修改,不限制 + 'vue/no-side-effects-in-computed-properties': 'off', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-spaces-around-equal-signs-in-attribute.md + 'vue/no-spaces-around-equal-signs-in-attribute': 'error', + + // https://github.com/vuejs/eslint-plugin-vue/blob/master/docs/rules/no-template-key.md + // 禁止在 - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue b/frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue similarity index 65% rename from pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue rename to frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue index 7c2592472a..c4296edeed 100644 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue +++ b/frontend/desktop/src/components/common/PipelineCanvas/MenuBar.vue @@ -18,28 +18,29 @@ :class="[ 'node-type-item', `common-icon-node-${item.type}`, - {'node-type-has-sub': isNodeTypeHasSub(item.type)}, - {'node-source': !isNodeTypeHasSub(item.type)}, - {'active-node-type' : activeNodeType === item.type && showNodeList}, - {'startpoint-unavailable':item.type === 'startpoint' ? isDisableStartPoint : false}, - {'endpoint-unavailable':item.type === 'endpoint' ? isDisableEndPoint : false} + { 'node-type-has-sub': isNodeTypeHasSub(item.type) }, + { 'node-source': !isNodeTypeHasSub(item.type) }, + { 'active-node-type': activeNodeType === item.type && showNodeList }, + { 'startpoint-unavailable': item.type === 'startpoint' ? isDisableStartPoint : false }, + { 'endpoint-unavailable': item.type === 'endpoint' ? isDisableEndPoint : false } ]" :data-type="item.type" v-bktooltips.right="item.name" @click.stop="onSelectNode(item.type)"> - +
        {{i18n[item.type]}} - +
        -
        - +
        +
        - +
        @@ -51,7 +52,7 @@ class="collapse-panel"> diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue b/frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue similarity index 92% rename from pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue rename to frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue index 28806a3f6d..3cb6ec6710 100644 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeCanvas.vue +++ b/frontend/desktop/src/components/common/PipelineCanvas/NodeCanvas.vue @@ -14,10 +14,10 @@
        - - diff --git a/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue b/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue new file mode 100644 index 0000000000..9eced1c0b3 --- /dev/null +++ b/frontend/desktop/src/components/common/PipelineCanvas/NodeTemplate.vue @@ -0,0 +1,217 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + diff --git a/frontend/desktop/src/components/common/PipelineCanvas/index.vue b/frontend/desktop/src/components/common/PipelineCanvas/index.vue new file mode 100644 index 0000000000..ef5c09d847 --- /dev/null +++ b/frontend/desktop/src/components/common/PipelineCanvas/index.vue @@ -0,0 +1,681 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/FormGroup.vue b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue new file mode 100644 index 0000000000..bb17335d29 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/FormGroup.vue @@ -0,0 +1,226 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/FormItem.vue b/frontend/desktop/src/components/common/RenderForm/FormItem.vue new file mode 100644 index 0000000000..39ce300ccc --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/FormItem.vue @@ -0,0 +1,365 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue similarity index 64% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue index 86bd693e80..35a1cec48b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/ConditionItem.vue @@ -26,97 +26,97 @@ {{i18n.notEmpty}}
        - - + +
        - - - - diff --git a/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue new file mode 100644 index 0000000000..ff8d681387 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/DynamicIp.vue @@ -0,0 +1,198 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue similarity index 65% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue index 0f95519136..2e191a0db1 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/IpSearchInput.vue @@ -16,41 +16,41 @@ class="search-input" :placeholder="placeholder" v-model="keyword" - @input="onInputChange"/> + @input="onInputChange" />
        - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue similarity index 54% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue index 7de225feb4..a1bb8337da 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/SelectCondition.vue @@ -20,7 +20,7 @@ - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue similarity index 64% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue index 3d16a99689..1c52577770 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/SingleIpSelector.vue @@ -15,9 +15,9 @@
        - + {{selector.name}}
        @@ -26,62 +26,62 @@ v-show="activeSelector === 'ip'" ref="ip" :editable="editable" - :staticIpList="staticIpList" - :staticIps="staticIps" + :static-ip-list="staticIpList" + :static-ips="staticIps" @change="onStaticIpChange"> - - diff --git a/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue new file mode 100644 index 0000000000..4614c36435 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIp.vue @@ -0,0 +1,361 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue similarity index 59% rename from pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue rename to frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue index d6db856267..1d1796af5b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue +++ b/frontend/desktop/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue @@ -38,11 +38,11 @@ - {{item.bk_host_name}} + {{item.cloud[0] && item.cloud[0].bk_inst_name}} {{item.bk_host_innerip}} {{item.agent ? 'Agent' + i18n.normal : 'Agent' + i18n.error}} @@ -69,112 +69,112 @@ diff --git a/frontend/desktop/src/components/common/RenderForm/RenderForm.vue b/frontend/desktop/src/components/common/RenderForm/RenderForm.vue new file mode 100644 index 0000000000..9a8ec623b6 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/RenderForm.vue @@ -0,0 +1,273 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/formMixins.js b/frontend/desktop/src/components/common/RenderForm/formMixins.js similarity index 97% rename from pipeline/blueflow/src/components/common/RenderForm/formMixins.js rename to frontend/desktop/src/components/common/RenderForm/formMixins.js index be44e4dc78..b731a87258 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/formMixins.js +++ b/frontend/desktop/src/components/common/RenderForm/formMixins.js @@ -42,7 +42,8 @@ const COMMON_ATTRS = { default: true }, formMode: { - type: Boolean + type: Boolean, + default: true }, parentValue: { type: [String, Number, Boolean, Array, Object] @@ -133,7 +134,7 @@ export function getFormMixins (attrs = {}) { this._tag_init && this._tag_init() // 组件插入到 DOM 后, 在父父组件上发布该 Tag 组件的 init 事件,触发标准插件配置项里监听的函数 - this.$nextTick(()=>{ + this.$nextTick(() => { this.$parent.$parent.$emit(`${this.tagCode}_init`, this.value) }) }, @@ -141,7 +142,7 @@ export function getFormMixins (attrs = {}) { updateForm (val) { const fieldsArr = [this.tagCode] this.$emit('change', fieldsArr, val) - this.$nextTick(()=> { + this.$nextTick(() => { this.onChange() this.validate() }) @@ -223,8 +224,12 @@ export function getFormMixins (attrs = {}) { this.$emit('onShow') }, hide () { + this.changeHook(false) this.$emit('onHide') }, + changeHook (val) { + this.$parent.onHookForm(val) + }, // 获取 form 项实例 get_form_instance () { return this.$parent diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue similarity index 58% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue index e686cef762..013a8cedac 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagCheckbox.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagCheckbox.vue @@ -23,53 +23,53 @@ diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue similarity index 70% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue index 01fbd441ae..d20669498b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagDatetime.vue @@ -26,36 +26,36 @@ - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue similarity index 54% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue index 8e9ff5eda6..cacfb745a5 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInput.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagInput.vue @@ -40,100 +40,100 @@ - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue similarity index 67% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue index 993d95f6b4..e72e52029b 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagInt.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagInt.vue @@ -24,37 +24,37 @@ diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue new file mode 100644 index 0000000000..fc56fe15e5 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagMember_selector.vue @@ -0,0 +1,50 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue new file mode 100644 index 0000000000..a3796c6867 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagPassword.vue @@ -0,0 +1,102 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + + diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue similarity index 62% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue index d5d7b91729..4aa806838e 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagRadio.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagRadio.vue @@ -23,48 +23,48 @@ diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagText.vue similarity index 75% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagText.vue index cf6145e586..9f4aaed790 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagText.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagText.vue @@ -15,20 +15,18 @@ - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue similarity index 65% rename from pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue rename to frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue index 47acee870f..853b392abb 100644 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTextarea.vue +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagTextarea.vue @@ -14,10 +14,9 @@ @@ -25,39 +24,39 @@ - - - diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue new file mode 100644 index 0000000000..87390cf38b --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagTree.vue @@ -0,0 +1,193 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue b/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue new file mode 100644 index 0000000000..3ab53e8278 --- /dev/null +++ b/frontend/desktop/src/components/common/RenderForm/tags/TagUpload.vue @@ -0,0 +1,153 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + diff --git a/pipeline/blueflow/src/components/common/base/BaseCheckbox.vue b/frontend/desktop/src/components/common/base/BaseCheckbox.vue similarity index 77% rename from pipeline/blueflow/src/components/common/base/BaseCheckbox.vue rename to frontend/desktop/src/components/common/base/BaseCheckbox.vue index b37472205a..f7d861881e 100644 --- a/pipeline/blueflow/src/components/common/base/BaseCheckbox.vue +++ b/frontend/desktop/src/components/common/base/BaseCheckbox.vue @@ -11,33 +11,33 @@ */ - - diff --git a/pipeline/blueflow/src/components/common/base/BaseSearch.vue b/frontend/desktop/src/components/common/base/BaseSearch.vue similarity index 79% rename from pipeline/blueflow/src/components/common/base/BaseSearch.vue rename to frontend/desktop/src/components/common/base/BaseSearch.vue index 6b896c4369..2de3df221d 100644 --- a/pipeline/blueflow/src/components/common/base/BaseSearch.vue +++ b/frontend/desktop/src/components/common/base/BaseSearch.vue @@ -18,35 +18,35 @@
        - + - diff --git a/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue b/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue new file mode 100644 index 0000000000..0cadfa430b --- /dev/null +++ b/frontend/desktop/src/components/common/dataTable/DataTablePagination.vue @@ -0,0 +1,359 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + + + diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode401.vue b/frontend/desktop/src/components/common/modal/ErrorCode401.vue similarity index 73% rename from pipeline/blueflow/src/components/common/modal/ErrorCode401.vue rename to frontend/desktop/src/components/common/modal/ErrorCode401.vue index c5f3d8c0b5..3cbbc3bb26 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode401.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode401.vue @@ -16,23 +16,23 @@ - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode405.vue b/frontend/desktop/src/components/common/modal/ErrorCode405.vue similarity index 64% rename from pipeline/blueflow/src/components/common/modal/ErrorCode405.vue rename to frontend/desktop/src/components/common/modal/ErrorCode405.vue index ebed9c8288..34c593074f 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode405.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode405.vue @@ -27,29 +27,29 @@ - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode406.vue b/frontend/desktop/src/components/common/modal/ErrorCode406.vue similarity index 65% rename from pipeline/blueflow/src/components/common/modal/ErrorCode406.vue rename to frontend/desktop/src/components/common/modal/ErrorCode406.vue index 927b79ff11..046970e2b0 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode406.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode406.vue @@ -25,27 +25,27 @@ - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode407.vue b/frontend/desktop/src/components/common/modal/ErrorCode407.vue similarity index 73% rename from pipeline/blueflow/src/components/common/modal/ErrorCode407.vue rename to frontend/desktop/src/components/common/modal/ErrorCode407.vue index 94693ea565..8e2727cb8d 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode407.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode407.vue @@ -19,19 +19,19 @@ - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCode500.vue b/frontend/desktop/src/components/common/modal/ErrorCode500.vue similarity index 76% rename from pipeline/blueflow/src/components/common/modal/ErrorCode500.vue rename to frontend/desktop/src/components/common/modal/ErrorCode500.vue index bf8cad489b..bf3a357134 100644 --- a/pipeline/blueflow/src/components/common/modal/ErrorCode500.vue +++ b/frontend/desktop/src/components/common/modal/ErrorCode500.vue @@ -17,19 +17,19 @@ - diff --git a/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue b/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue new file mode 100644 index 0000000000..70180d7a27 --- /dev/null +++ b/frontend/desktop/src/components/common/modal/ErrorCodeModal.vue @@ -0,0 +1,110 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/common/modal/UserLoginModal.vue b/frontend/desktop/src/components/common/modal/UserLoginModal.vue similarity index 81% rename from pipeline/blueflow/src/components/common/modal/UserLoginModal.vue rename to frontend/desktop/src/components/common/modal/UserLoginModal.vue index 7326d3ddb3..046391a01d 100644 --- a/pipeline/blueflow/src/components/common/modal/UserLoginModal.vue +++ b/frontend/desktop/src/components/common/modal/UserLoginModal.vue @@ -32,23 +32,22 @@ - diff --git a/pipeline/blueflow/src/components/layout/BizSelector.vue b/frontend/desktop/src/components/layout/BizSelector.vue similarity index 53% rename from pipeline/blueflow/src/components/layout/BizSelector.vue rename to frontend/desktop/src/components/layout/BizSelector.vue index 6989de5fa3..aa02dae709 100644 --- a/pipeline/blueflow/src/components/layout/BizSelector.vue +++ b/frontend/desktop/src/components/layout/BizSelector.vue @@ -11,24 +11,24 @@ */ - diff --git a/pipeline/blueflow/src/components/layout/CopyrightFooter.vue b/frontend/desktop/src/components/layout/CopyrightFooter.vue similarity index 75% rename from pipeline/blueflow/src/components/layout/CopyrightFooter.vue rename to frontend/desktop/src/components/layout/CopyrightFooter.vue index 2de9e0b3b2..8d5306a348 100644 --- a/pipeline/blueflow/src/components/layout/CopyrightFooter.vue +++ b/frontend/desktop/src/components/layout/CopyrightFooter.vue @@ -23,28 +23,28 @@ - diff --git a/frontend/desktop/src/components/layout/Navigator.vue b/frontend/desktop/src/components/layout/Navigator.vue new file mode 100644 index 0000000000..e3c62094fa --- /dev/null +++ b/frontend/desktop/src/components/layout/Navigator.vue @@ -0,0 +1,422 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/components/layout/NotFoundComponent.vue b/frontend/desktop/src/components/layout/NotFoundComponent.vue similarity index 63% rename from pipeline/blueflow/src/components/layout/NotFoundComponent.vue rename to frontend/desktop/src/components/layout/NotFoundComponent.vue index 7f2513af0d..9c80c7d06d 100644 --- a/pipeline/blueflow/src/components/layout/NotFoundComponent.vue +++ b/frontend/desktop/src/components/layout/NotFoundComponent.vue @@ -10,31 +10,31 @@ * specific language governing permissions and limitations under the License. */ diff --git a/pipeline/blueflow/src/components/tags/TagTestDatetime.vue b/frontend/desktop/src/components/tags/TagTestDatetime.vue similarity index 71% rename from pipeline/blueflow/src/components/tags/TagTestDatetime.vue rename to frontend/desktop/src/components/tags/TagTestDatetime.vue index e03569300e..f7f631807e 100644 --- a/pipeline/blueflow/src/components/tags/TagTestDatetime.vue +++ b/frontend/desktop/src/components/tags/TagTestDatetime.vue @@ -25,29 +25,29 @@ - - diff --git a/pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue b/frontend/desktop/src/pages/appmaker/AppEditDialog.vue similarity index 54% rename from pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue rename to frontend/desktop/src/pages/appmaker/AppEditDialog.vue index a40ba2b7f7..7020fee355 100644 --- a/pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue +++ b/frontend/desktop/src/pages/appmaker/AppEditDialog.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ - diff --git a/frontend/desktop/src/pages/appmaker/index.vue b/frontend/desktop/src/pages/appmaker/index.vue new file mode 100644 index 0000000000..9f0dba97e4 --- /dev/null +++ b/frontend/desktop/src/pages/appmaker/index.vue @@ -0,0 +1,468 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/audit/index.vue b/frontend/desktop/src/pages/audit/index.vue new file mode 100644 index 0000000000..5ce75f1010 --- /dev/null +++ b/frontend/desktop/src/pages/audit/index.vue @@ -0,0 +1,713 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/config/index.vue b/frontend/desktop/src/pages/config/index.vue similarity index 57% rename from pipeline/blueflow/src/pages/config/index.vue rename to frontend/desktop/src/pages/config/index.vue index 97e2f45434..3f09916a36 100644 --- a/pipeline/blueflow/src/pages/config/index.vue +++ b/frontend/desktop/src/pages/config/index.vue @@ -13,11 +13,11 @@

        {{i18n.title}}

        -
        +
        - +
        @@ -50,85 +50,85 @@
        - - diff --git a/pipeline/blueflow/src/pages/error/index.vue b/frontend/desktop/src/pages/error/index.vue similarity index 53% rename from pipeline/blueflow/src/pages/error/index.vue rename to frontend/desktop/src/pages/error/index.vue index 2923e1a3e2..0af71ab789 100644 --- a/pipeline/blueflow/src/pages/error/index.vue +++ b/frontend/desktop/src/pages/error/index.vue @@ -18,41 +18,41 @@
        diff --git a/pipeline/blueflow/src/pages/home/HomeSummary.vue b/frontend/desktop/src/pages/home/HomeSummary.vue similarity index 92% rename from pipeline/blueflow/src/pages/home/HomeSummary.vue rename to frontend/desktop/src/pages/home/HomeSummary.vue index 6366f2d20b..4a399fc5e3 100644 --- a/pipeline/blueflow/src/pages/home/HomeSummary.vue +++ b/frontend/desktop/src/pages/home/HomeSummary.vue @@ -81,23 +81,23 @@
        - diff --git a/pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue b/frontend/desktop/src/pages/home/SelectTemplateDialog.vue similarity index 72% rename from pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue rename to frontend/desktop/src/pages/home/SelectTemplateDialog.vue index d2542f0a3a..9938f99a2e 100644 --- a/pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue +++ b/frontend/desktop/src/pages/home/SelectTemplateDialog.vue @@ -23,10 +23,10 @@
        + v-bkloading="{ isLoading: submitting || selectTemplateLoading, opacity: 1 }">
        @@ -46,7 +46,7 @@ v-for="item in group.list" :key="item.id" @click="onSelectTemplate(item)"> - + {{item.name}} @@ -60,7 +60,7 @@ :key="item.id" @click="onSelectTemplate(item)" class="template-item"> - + {{item.name}} @@ -106,106 +106,105 @@ - diff --git a/pipeline/blueflow/src/pages/home/TaskFeeds.vue b/frontend/desktop/src/pages/home/TaskFeeds.vue similarity index 54% rename from pipeline/blueflow/src/pages/home/TaskFeeds.vue rename to frontend/desktop/src/pages/home/TaskFeeds.vue index e31c8e984f..84ac66d937 100644 --- a/pipeline/blueflow/src/pages/home/TaskFeeds.vue +++ b/frontend/desktop/src/pages/home/TaskFeeds.vue @@ -13,9 +13,9 @@

        {{i18n.feeds}}

        {{i18n.viewMore}} -
        +
          -
        • +
        • @@ -46,115 +46,115 @@
        - - diff --git a/frontend/desktop/src/pages/home/TaskPercentChart.vue b/frontend/desktop/src/pages/home/TaskPercentChart.vue new file mode 100644 index 0000000000..9b97580784 --- /dev/null +++ b/frontend/desktop/src/pages/home/TaskPercentChart.vue @@ -0,0 +1,85 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/home/index.vue b/frontend/desktop/src/pages/home/index.vue new file mode 100644 index 0000000000..de38d6dfb8 --- /dev/null +++ b/frontend/desktop/src/pages/home/index.vue @@ -0,0 +1,290 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue b/frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue similarity index 62% rename from pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue rename to frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue index b93aa0c95f..0c6b836d05 100644 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue +++ b/frontend/desktop/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue @@ -19,39 +19,38 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeletePeriodicConfrim" @cancel="onDeletePeriodicCancel"> -
        +
        {{deleteInfo}}
        - diff --git a/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue b/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue new file mode 100644 index 0000000000..11aa638ea0 --- /dev/null +++ b/frontend/desktop/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue @@ -0,0 +1,242 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue b/frontend/desktop/src/pages/periodic/PeriodicList/index.vue similarity index 60% rename from pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue rename to frontend/desktop/src/pages/periodic/PeriodicList/index.vue index 7e7113e6f4..c5b1783d6c 100644 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue +++ b/frontend/desktop/src/pages/periodic/PeriodicList/index.vue @@ -15,7 +15,7 @@ @@ -24,7 +24,7 @@
        {{i18n.creator}} - +
        {{i18n.enabled}} @@ -46,7 +46,7 @@
        - +
        @@ -76,19 +76,19 @@ @@ -133,15 +133,15 @@ :loading="modifyDialogLoading" :constants="constants" :cron="selectedCron" - :taskId="selectedPeriodicId" - :isModifyDialogShow="isModifyDialogShow" + :task-id="selectedPeriodicId" + :is-modify-dialog-show="isModifyDialogShow" @onModifyPeriodicConfirm="onModifyPeriodicConfirm" @onModifyPeriodicCancel="onModifyPeriodicCancel"> @@ -150,232 +150,228 @@ diff --git a/frontend/desktop/src/pages/statistics/Instance/index.vue b/frontend/desktop/src/pages/statistics/Instance/index.vue new file mode 100644 index 0000000000..7789a4244b --- /dev/null +++ b/frontend/desktop/src/pages/statistics/Instance/index.vue @@ -0,0 +1,854 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + diff --git a/frontend/desktop/src/pages/statistics/Template/index.vue b/frontend/desktop/src/pages/statistics/Template/index.vue new file mode 100644 index 0000000000..7473eb20a7 --- /dev/null +++ b/frontend/desktop/src/pages/statistics/Template/index.vue @@ -0,0 +1,689 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue b/frontend/desktop/src/pages/statistics/dataStatistics/index.vue similarity index 66% rename from pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue rename to frontend/desktop/src/pages/statistics/dataStatistics/index.vue index bafc9a1aa0..2ef5959f6b 100644 --- a/pipeline/blueflow/src/pages/statistics/dataStatistics/index.vue +++ b/frontend/desktop/src/pages/statistics/dataStatistics/index.vue @@ -17,70 +17,70 @@

        {{dimension.name || dimension.time}}

        + :class="[dimension.value ? 'chart-statistics-chart' : 'chart-statistics-normal']" + :style="{ width: `${dimension.value ? dealProcess(dimension.value, totalValue) : 0.3}%` }">
        {{dimension.value}} / {{getPercentage(dimension.value)}}%
        - - diff --git a/pipeline/blueflow/src/pages/task/NodePreview.vue b/frontend/desktop/src/pages/task/NodePreview.vue similarity index 67% rename from pipeline/blueflow/src/pages/task/NodePreview.vue rename to frontend/desktop/src/pages/task/NodePreview.vue index 7889f7424a..32fa276533 100644 --- a/pipeline/blueflow/src/pages/task/NodePreview.vue +++ b/frontend/desktop/src/pages/task/NodePreview.vue @@ -14,10 +14,10 @@
        -
        +
        diff --git a/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue b/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue new file mode 100644 index 0000000000..830730f998 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskCreate/TaskSelectNode.vue @@ -0,0 +1,994 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/task/TaskCreate/index.vue b/frontend/desktop/src/pages/task/TaskCreate/index.vue new file mode 100644 index 0000000000..896c56c451 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskCreate/index.vue @@ -0,0 +1,179 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue similarity index 54% rename from pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue rename to frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue index 29b85203f8..6b33fb5042 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/ExecuteInfo.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ diff --git a/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue b/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue new file mode 100644 index 0000000000..e9e8026bd0 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/ModifyTime.vue @@ -0,0 +1,186 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue b/frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue similarity index 69% rename from pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue rename to frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue index 87e4c208d7..824eb5dfd1 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/NodeTree.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/NodeTree.vue @@ -19,15 +19,15 @@ }" @click.stop="onSelectNode(item, true)"> - + {{item.name}} @@ -36,49 +36,49 @@ - - diff --git a/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue b/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue new file mode 100644 index 0000000000..ecfc28126d --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/RetryNode.vue @@ -0,0 +1,187 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue b/frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue similarity index 55% rename from pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue rename to frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue index 708eca2fa6..9e5fe64d5a 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/TaskFunctionalization.vue @@ -11,7 +11,7 @@ */ + diff --git a/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue b/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue new file mode 100644 index 0000000000..18d51bf83e --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/ViewParams.vue @@ -0,0 +1,196 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/task/TaskExecute/index.vue b/frontend/desktop/src/pages/task/TaskExecute/index.vue new file mode 100644 index 0000000000..8d1bb96047 --- /dev/null +++ b/frontend/desktop/src/pages/task/TaskExecute/index.vue @@ -0,0 +1,138 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue b/frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue similarity index 69% rename from pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue rename to frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue index 1869b708f8..752c383b47 100644 --- a/pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue +++ b/frontend/desktop/src/pages/task/TaskExecute/revokeDialog.vue @@ -27,25 +27,25 @@ diff --git a/pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue b/frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue similarity index 61% rename from pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue rename to frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue index 2368fd1351..a574d88e4d 100644 --- a/pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue +++ b/frontend/desktop/src/pages/task/TaskList/TaskCloneDialog.vue @@ -20,7 +20,7 @@ @confirm="onConfirm" @cancel="onCancel">
        -
        +
        @@ -37,45 +37,45 @@ - diff --git a/pipeline/blueflow/src/pages/task/TaskList/index.vue b/frontend/desktop/src/pages/task/TaskList/index.vue similarity index 50% rename from pipeline/blueflow/src/pages/task/TaskList/index.vue rename to frontend/desktop/src/pages/task/TaskList/index.vue index 3c4e248cae..5a8e68154a 100644 --- a/pipeline/blueflow/src/pages/task/TaskList/index.vue +++ b/frontend/desktop/src/pages/task/TaskList/index.vue @@ -15,7 +15,7 @@ @@ -65,15 +65,15 @@
        {{i18n.creator}} - +
        {{i18n.executor}} - +
        {{i18n.status}} -
        -
        ID{{item.creator}} {{ item.total_run_count }} - - {{item.enabled? i18n.start: i18n.pause}} + + {{item.enabled ? i18n.start : i18n.pause}} - {{!item.enabled? i18n.start: i18n.pause}} + {{!item.enabled ? i18n.start : i18n.pause}} {{ i18n.edit }} @@ -110,7 +110,7 @@
        -
        +
        +
        @@ -133,7 +133,7 @@ @@ -153,8 +153,8 @@ @@ -169,395 +169,393 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeleteConfirm" @cancel="onDeleteCancel"> -
        +
        {{i18n.deleleTip + '"' + theDeleteTaskName + '"?'}}
        diff --git a/pipeline/blueflow/src/pages/task/TaskStep.vue b/frontend/desktop/src/pages/task/TaskStep.vue similarity index 66% rename from pipeline/blueflow/src/pages/task/TaskStep.vue rename to frontend/desktop/src/pages/task/TaskStep.vue index 28079bd3e5..117185008b 100644 --- a/pipeline/blueflow/src/pages/task/TaskStep.vue +++ b/frontend/desktop/src/pages/task/TaskStep.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ - diff --git a/pipeline/blueflow/src/pages/task/index.vue b/frontend/desktop/src/pages/task/index.vue similarity index 90% rename from pipeline/blueflow/src/pages/task/index.vue rename to frontend/desktop/src/pages/task/index.vue index adbebd58cc..25a08c5b89 100644 --- a/pipeline/blueflow/src/pages/task/index.vue +++ b/frontend/desktop/src/pages/task/index.vue @@ -13,8 +13,8 @@ diff --git a/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue new file mode 100644 index 0000000000..5acaa7f109 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/NodeConfig.vue @@ -0,0 +1,1246 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue b/frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue similarity index 56% rename from pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue rename to frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue index 90673b3c25..d30fb159a2 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/ReuseVarDialog.vue @@ -35,7 +35,7 @@
        - +
        @@ -46,7 +46,7 @@ + v-validate="variableNameRule" /> {{ errors.first('variableName') }} @@ -56,7 +56,7 @@ + v-validate="variableKeyRule" /> {{ errors.first('variableKey') }} @@ -66,115 +66,114 @@ - diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue new file mode 100644 index 0000000000..1a8a16e2e7 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue @@ -0,0 +1,567 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + + diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue new file mode 100644 index 0000000000..87f5b536c5 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue @@ -0,0 +1,324 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue similarity index 51% rename from pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue rename to frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue index 505dded312..eb6eb4fb94 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue @@ -10,7 +10,7 @@ * specific language governing permissions and limitations under the License. */ diff --git a/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue new file mode 100644 index 0000000000..729f914975 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue @@ -0,0 +1,556 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + +© 2019 GitHub, Inc. +Terms +Privacy +Security +Status +Help +Contact GitHub +Pricing +API +Training +Blog +About diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue similarity index 62% rename from pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue rename to frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue index fe7305b18f..e83df2ba26 100644 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue +++ b/frontend/desktop/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue @@ -23,7 +23,7 @@ @@ -31,37 +31,37 @@ - - diff --git a/frontend/desktop/src/pages/template/TemplateEdit/index.vue b/frontend/desktop/src/pages/template/TemplateEdit/index.vue new file mode 100644 index 0000000000..d8fc8f5ff5 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateEdit/index.vue @@ -0,0 +1,936 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue b/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue new file mode 100644 index 0000000000..64e8a68334 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/AuthorityManageDialog.vue @@ -0,0 +1,178 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue b/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue new file mode 100644 index 0000000000..1109654a41 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/ExportTemplateDialog.vue @@ -0,0 +1,529 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + diff --git a/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue b/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue new file mode 100644 index 0000000000..87019c75b8 --- /dev/null +++ b/frontend/desktop/src/pages/template/TemplateList/ImportTemplateDialog.vue @@ -0,0 +1,546 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ + + + + diff --git a/pipeline/blueflow/src/pages/template/TemplateList/index.vue b/frontend/desktop/src/pages/template/TemplateList/index.vue similarity index 53% rename from pipeline/blueflow/src/pages/template/TemplateList/index.vue rename to frontend/desktop/src/pages/template/TemplateList/index.vue index dbfb65d200..6a993093c4 100644 --- a/pipeline/blueflow/src/pages/template/TemplateList/index.vue +++ b/frontend/desktop/src/pages/template/TemplateList/index.vue @@ -41,7 +41,7 @@ @@ -90,7 +90,7 @@
        {{i18n.creator}} - +
        {{i18n.query}} @@ -99,7 +99,7 @@
        -
        +
        ID
        -
        +
        @@ -113,7 +113,7 @@ - + - @@ -141,10 +141,10 @@ class="create-template-btn" :to="getEditTemplateUrl(item.id)"> {{ i18n.edit }} - - - - + - + @@ -218,16 +218,16 @@ - @@ -241,14 +241,14 @@ :is-show.sync="isDeleteDialogShow" @confirm="onDeleteConfirm" @cancel="onDeleteCancel"> -
        +
        {{i18n.deleleTip + '"' + deleteTemplateName + '"' + '?' }}
        - diff --git a/pipeline/blueflow/src/pages/template/index.vue b/frontend/desktop/src/pages/template/index.vue similarity index 90% rename from pipeline/blueflow/src/pages/template/index.vue rename to frontend/desktop/src/pages/template/index.vue index adbebd58cc..25a08c5b89 100644 --- a/pipeline/blueflow/src/pages/template/index.vue +++ b/frontend/desktop/src/pages/template/index.vue @@ -13,8 +13,8 @@ diff --git a/pipeline/blueflow/src/routers/index.js b/frontend/desktop/src/routers/index.js similarity index 98% rename from pipeline/blueflow/src/routers/index.js rename to frontend/desktop/src/routers/index.js index 925d41d3a4..9b51262519 100644 --- a/pipeline/blueflow/src/routers/index.js +++ b/frontend/desktop/src/routers/index.js @@ -22,7 +22,7 @@ const Template = () => import('@/pages/template/index.vue') const TemplateEdit = () => import('@/pages/template/TemplateEdit/index.vue') const TemplateList = () => import('@/pages/template/TemplateList/index.vue') -const Task = () => import( '@/pages/task/index.vue') +const Task = () => import('@/pages/task/index.vue') const TaskList = () => import('@/pages/task/TaskList/index.vue') const TaskCreate = () => import('@/pages/task/TaskCreate/index.vue') const TaskExecute = () => import('@/pages/task/TaskExecute/index.vue') @@ -261,9 +261,9 @@ const routers = new VueRouter({ ] }) -routers.beforeEach ((to, from, next) => { +routers.beforeEach((to, from, next) => { // 生产环境 404 页面头部导航跳转统一设置为首页 - if (process.env.NODE_ENV === "production" && to.name === 'notFoundPage') { + if (process.env.NODE_ENV === 'production' && to.name === 'notFoundPage') { store.commit('setNotFoundPage', true) } else { store.commit('setNotFoundPage', false) @@ -275,5 +275,4 @@ routers.beforeEach ((to, from, next) => { next() }) - export default routers diff --git a/pipeline/blueflow/src/scss/analysis.scss b/frontend/desktop/src/scss/analysis.scss similarity index 100% rename from pipeline/blueflow/src/scss/analysis.scss rename to frontend/desktop/src/scss/analysis.scss diff --git a/pipeline/blueflow/src/scss/animation/.gitkeep b/frontend/desktop/src/scss/animation/.gitkeep similarity index 100% rename from pipeline/blueflow/src/scss/animation/.gitkeep rename to frontend/desktop/src/scss/animation/.gitkeep diff --git a/pipeline/blueflow/src/scss/animation/collapse.scss b/frontend/desktop/src/scss/animation/collapse.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/collapse.scss rename to frontend/desktop/src/scss/animation/collapse.scss diff --git a/pipeline/blueflow/src/scss/animation/make-transitions.scss b/frontend/desktop/src/scss/animation/make-transitions.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/make-transitions.scss rename to frontend/desktop/src/scss/animation/make-transitions.scss diff --git a/pipeline/blueflow/src/scss/animation/operate.scss b/frontend/desktop/src/scss/animation/operate.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/operate.scss rename to frontend/desktop/src/scss/animation/operate.scss diff --git a/pipeline/blueflow/src/scss/animation/slide.scss b/frontend/desktop/src/scss/animation/slide.scss similarity index 100% rename from pipeline/blueflow/src/scss/animation/slide.scss rename to frontend/desktop/src/scss/animation/slide.scss diff --git a/pipeline/blueflow/src/scss/app.scss b/frontend/desktop/src/scss/app.scss similarity index 100% rename from pipeline/blueflow/src/scss/app.scss rename to frontend/desktop/src/scss/app.scss diff --git a/pipeline/blueflow/src/scss/button.scss b/frontend/desktop/src/scss/button.scss similarity index 100% rename from pipeline/blueflow/src/scss/button.scss rename to frontend/desktop/src/scss/button.scss diff --git a/pipeline/blueflow/src/scss/common.scss b/frontend/desktop/src/scss/common.scss similarity index 83% rename from pipeline/blueflow/src/scss/common.scss rename to frontend/desktop/src/scss/common.scss index 29a1bcecbd..0f1acc7e47 100644 --- a/pipeline/blueflow/src/scss/common.scss +++ b/frontend/desktop/src/scss/common.scss @@ -96,9 +96,11 @@ color: #ff5757; } -// 覆盖原始弹窗按钮宽度 +// 弹窗按钮 .bk-dialog-wrapper .bk-dialog-footer .bk-dialog-outer button { width: 90px; + height: 32px; + line-height: 30px; } .common-warning-tip { display: inline-block; @@ -116,8 +118,11 @@ white-space: nowrap; text-overflow: ellipsis; } -// 表单下拉框高度统一 +// 表单下拉框 .bk-selector-wrapper { + .bk-selector-icon { + top: 10px; + } .bk-selector-icon.clear-icon { top: 7px; } @@ -126,3 +131,22 @@ line-height: 32px; } } +// 列表分页 +.panagation { + .bk-page .page-item { + float: none; + } + .bk-page .page-item.cur-page { + background: #3c96ff; + } + .bk-page .page-item .page-button { + padding: 0 7px; + } + .bk-page .page-item.disabled .page-button { + padding: 0 5px; + color: #737987; + &:hover { + color: #737987; + } + } +} diff --git a/pipeline/blueflow/src/scss/config.scss b/frontend/desktop/src/scss/config.scss similarity index 100% rename from pipeline/blueflow/src/scss/config.scss rename to frontend/desktop/src/scss/config.scss diff --git a/pipeline/blueflow/src/scss/datastatistics/datastatistics.scss b/frontend/desktop/src/scss/datastatistics/datastatistics.scss similarity index 100% rename from pipeline/blueflow/src/scss/datastatistics/datastatistics.scss rename to frontend/desktop/src/scss/datastatistics/datastatistics.scss diff --git a/pipeline/blueflow/src/scss/iconfont.scss b/frontend/desktop/src/scss/iconfont.scss similarity index 100% rename from pipeline/blueflow/src/scss/iconfont.scss rename to frontend/desktop/src/scss/iconfont.scss diff --git a/pipeline/blueflow/src/scss/mixins/clearfix.scss b/frontend/desktop/src/scss/mixins/clearfix.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/clearfix.scss rename to frontend/desktop/src/scss/mixins/clearfix.scss diff --git a/pipeline/blueflow/src/scss/mixins/multiLineEllipsis.scss b/frontend/desktop/src/scss/mixins/multiLineEllipsis.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/multiLineEllipsis.scss rename to frontend/desktop/src/scss/mixins/multiLineEllipsis.scss diff --git a/pipeline/blueflow/src/scss/mixins/scrollbar.scss b/frontend/desktop/src/scss/mixins/scrollbar.scss similarity index 100% rename from pipeline/blueflow/src/scss/mixins/scrollbar.scss rename to frontend/desktop/src/scss/mixins/scrollbar.scss diff --git a/pipeline/blueflow/src/scss/reset.scss b/frontend/desktop/src/scss/reset.scss similarity index 100% rename from pipeline/blueflow/src/scss/reset.scss rename to frontend/desktop/src/scss/reset.scss diff --git a/pipeline/blueflow/src/store/index.js b/frontend/desktop/src/store/index.js similarity index 80% rename from pipeline/blueflow/src/store/index.js rename to frontend/desktop/src/store/index.js index 5b1cd65baf..9f6ea47738 100644 --- a/pipeline/blueflow/src/store/index.js +++ b/frontend/desktop/src/store/index.js @@ -12,7 +12,7 @@ import Vue from 'vue' import Vuex from 'vuex' import modules from './modules/index.js' -import api from "@/api" +import api from '@/api' Vue.use(Vuex) @@ -52,7 +52,8 @@ const store = new Vuex.Store({ isSuperUser: window.IS_SUPERUSER === 1, v1_import_flag: window.IMPORT_V1_FLAG, rsa_pub_key: window.RSA_PUB_KEY, - businessTimezone: window.BUSINESS_TIMEZONE + businessTimezone: window.BUSINESS_TIMEZONE, + allBusinessList: [] }, mutations: { setAppId (state, id) { @@ -73,36 +74,43 @@ const store = new Vuex.Store({ setNotFoundPage (state, val) { state.notFoundPage = val }, - setCategorys (state,data) { + setCategorys (state, data) { state.categorys = data }, - setSingleAtomList (state,data) { + setSingleAtomList (state, data) { state.components = data }, setBusinessTimezone (state, data) { state.businessTimezone = data + }, + setAllBusinessList (state, data) { + state.allBusinessList = data } }, actions: { - getBizList ({commit}) { - api.getBizList().then(response => { - commit('setBizList', response.data.objects) + getBizList ({ commit }, isAll) { + api.getBizList(isAll).then(response => { + if (isAll) { + commit('setAllBusinessList', response.data.objects) + } else { + commit('setBizList', response.data.objects) + } }) }, - changeDefaultBiz ({commit}, ccId) { + changeDefaultBiz ({ commit }, ccId) { return api.changeDefaultBiz(ccId).then(response => response.data) }, - getCategorys ({commit}) { + getCategorys ({ commit }) { api.getCategorys().then(response => { commit('setCategorys', response.data.data) }) }, - getSingleAtomList ({commit}) { + getSingleAtomList ({ commit }) { api.getSingleAtomList().then(response => { commit('setSingleAtomList', response.data.objects) }) }, - getBusinessTimezone ({commit}) { + getBusinessTimezone ({ commit }) { api.getBusinessTimezone().then(response => { const data = response.data if (data.time_zone === undefined) { @@ -110,16 +118,15 @@ const store = new Vuex.Store({ } else { commit('setBusinessTimezone', data.time_zone) } - }) }, - getHostInCC ({commmit}, fields) { + getHostInCC ({ commmit }, fields) { return api.loadHostInCC(fields).then(response => response.data) }, - getTopoTreeInCC ({commmit}) { + getTopoTreeInCC ({ commmit }) { return api.loadTopoTreeInCC().then(response => response.data) }, - getTopoModelInCC ({commit}) { + getTopoModelInCC ({ commit }) { return api.loadTopoModelInCC().then(response => response.data) } }, diff --git a/pipeline/blueflow/src/store/modules/appmaker.js b/frontend/desktop/src/store/modules/appmaker.js similarity index 78% rename from pipeline/blueflow/src/store/modules/appmaker.js rename to frontend/desktop/src/store/modules/appmaker.js index 6cc3493d76..228388a061 100644 --- a/pipeline/blueflow/src/store/modules/appmaker.js +++ b/frontend/desktop/src/store/modules/appmaker.js @@ -18,25 +18,25 @@ const appmaker = { mutations: { }, actions: { - loadAppmakerSummary ({commit}, data) { + loadAppmakerSummary ({ commit }, data) { return api.loadAppmakerSummary(data).then(response => response.data) }, - loadAppmakerDetail ({commit}, id) { + loadAppmakerDetail ({ commit }, id) { return api.loadAppmakerDetail(id).then(response => response.data) }, - appmakerEdit ({commit}, data) { + appmakerEdit ({ commit }, data) { return api.appmakerEdit(data).then(response => response.data) }, - appmakerDelete ({commit}, id) { + appmakerDelete ({ commit }, id) { return api.appmakerDelete(id).then(response => response.data) }, - queryAppmakerData ({commit}, data) { + queryAppmakerData ({ commit }, data) { return api.queryAppmaker(data).then(response => response.data) }, - loadAppmaker ({commit}) { - return api.loadAppmaker().then(response => response.data) + loadAppmaker ({ commit }, data) { + return api.loadAppmaker(data).then(response => response.data) } } } -export default appmaker \ No newline at end of file +export default appmaker diff --git a/pipeline/blueflow/src/store/modules/atomForm.js b/frontend/desktop/src/store/modules/atomForm.js similarity index 81% rename from pipeline/blueflow/src/store/modules/atomForm.js rename to frontend/desktop/src/store/modules/atomForm.js index 802eae0a74..b0463952bc 100644 --- a/pipeline/blueflow/src/store/modules/atomForm.js +++ b/frontend/desktop/src/store/modules/atomForm.js @@ -11,13 +11,6 @@ */ import Vue from 'vue' import api from '@/api/index.js' -import { debug } from 'util' - -const VAR_TYPE = { - 'var_ip_picker': 'variable', - 'password': 'variable', - 'select': 'variable' -} const META_FORM_TYPE = { 'select': 'select_meta' @@ -36,7 +29,7 @@ const atomForm = { state.fetching = status }, setAtomForm (state, payload) { - let atomType = payload.isMeta ? META_FORM_TYPE[payload.atomType] : payload.atomType + const atomType = payload.isMeta ? META_FORM_TYPE[payload.atomType] : payload.atomType Vue.set(state.form, atomType, payload.data) }, setAtomConfig (state, payload) { @@ -53,16 +46,16 @@ const atomForm = { } }, actions: { - loadAtomConfig ({commit, state}, payload) { - const { atomType, isMeta } = payload - const atomClassify = VAR_TYPE[atomType] || 'component' + loadAtomConfig ({ commit, state }, payload) { + const { atomType, classify, isMeta } = payload + const atomClassify = classify || 'component' return api.$getAtomForm(atomType, atomClassify, isMeta || 0).then( response => response.data ).catch(e => { Promise.reject(e) }) }, - loadSubflowConfig ({commit}, payload) { + loadSubflowConfig ({ commit }, payload) { const { templateId, version, common } = payload return api.getFormByTemplateId(templateId, version, common).then( response => response.data @@ -71,4 +64,4 @@ const atomForm = { } } -export default atomForm \ No newline at end of file +export default atomForm diff --git a/pipeline/blueflow/src/store/modules/atomList.js b/frontend/desktop/src/store/modules/atomList.js similarity index 91% rename from pipeline/blueflow/src/store/modules/atomList.js rename to frontend/desktop/src/store/modules/atomList.js index be0e8aa68b..323e6da97c 100644 --- a/pipeline/blueflow/src/store/modules/atomList.js +++ b/frontend/desktop/src/store/modules/atomList.js @@ -19,10 +19,10 @@ const atomList = { searchAtomResult: [] }, mutations: { - setSingleAtom (state, data){ + setSingleAtom (state, data) { state.singleAtom = [...data] }, - setSubAtom (state, data){ + setSubAtom (state, data) { state.subAtom = [...data] }, searchAtom (state, payload) { @@ -38,13 +38,13 @@ const atomList = { } }, actions: { - loadSingleAtomList ({commit}) { + loadSingleAtomList ({ commit }) { return api.getSingleAtomList().then(response => response.data.objects) }, - loadSubAtomList ({commit}, data) { + loadSubAtomList ({ commit }, data) { return api.getSubAtomList(data).then(response => response.data.objects) }, - queryAtomData ({commit}, data) { + queryAtomData ({ commit }, data) { return api.queryAtom(data).then(response => response.data) } }, @@ -75,4 +75,4 @@ const atomList = { } } -export default atomList \ No newline at end of file +export default atomList diff --git a/pipeline/blueflow/src/store/modules/audit.js b/frontend/desktop/src/store/modules/audit.js similarity index 91% rename from pipeline/blueflow/src/store/modules/audit.js rename to frontend/desktop/src/store/modules/audit.js index 252e0b70f7..afde6b870a 100644 --- a/pipeline/blueflow/src/store/modules/audit.js +++ b/frontend/desktop/src/store/modules/audit.js @@ -9,7 +9,6 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import Vue from 'vue' import api from '@/api/index.js' const auditTask = { @@ -19,7 +18,7 @@ const auditTask = { mutations: { }, actions: { - loadAuditTaskList ({commit}, data) { + loadAuditTaskList ({ commit }, data) { return api.loadAuditTaskList(data).then( response => response.data ) @@ -27,4 +26,4 @@ const auditTask = { } } -export default auditTask \ No newline at end of file +export default auditTask diff --git a/pipeline/blueflow/src/store/modules/config.js b/frontend/desktop/src/store/modules/config.js similarity index 93% rename from pipeline/blueflow/src/store/modules/config.js rename to frontend/desktop/src/store/modules/config.js index ae432d09bb..cc5077226d 100644 --- a/pipeline/blueflow/src/store/modules/config.js +++ b/frontend/desktop/src/store/modules/config.js @@ -14,7 +14,7 @@ import api from '@/api/index.js' const config = { namespaced: true, actions: { - configBizExecutor ({commit}, data) { + configBizExecutor ({ commit }, data) { return api.configBizExecutor(data).then(response => response.data) }, loadBizConfig () { @@ -25,4 +25,4 @@ const config = { } } -export default config \ No newline at end of file +export default config diff --git a/pipeline/blueflow/src/store/modules/function.js b/frontend/desktop/src/store/modules/function.js similarity index 86% rename from pipeline/blueflow/src/store/modules/function.js rename to frontend/desktop/src/store/modules/function.js index 895e04d31e..02908474ed 100644 --- a/pipeline/blueflow/src/store/modules/function.js +++ b/frontend/desktop/src/store/modules/function.js @@ -9,7 +9,6 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import Vue from 'vue' import api from '@/api/index.js' const functionTask = { @@ -19,17 +18,17 @@ const functionTask = { mutations: { }, actions: { - loadFunctionTaskList ({commit}, data) { + loadFunctionTaskList ({ commit }, data) { return api.getFunctionTaskList(data).then( response => response.data ) }, - loadFunctionBusinessList ({commit}) { + loadFunctionBusinessList ({ commit }) { return api.loadFunctionBusinessList().then( response => response.data ) }, - loadFunctionTemplateList ({commit},cc_id) { + loadFunctionTemplateList ({ commit }, cc_id) { return api.loadFunctionTemplateList(cc_id).then( response => response.data ) @@ -37,4 +36,4 @@ const functionTask = { } } -export default functionTask \ No newline at end of file +export default functionTask diff --git a/pipeline/blueflow/src/store/modules/index.js b/frontend/desktop/src/store/modules/index.js similarity index 100% rename from pipeline/blueflow/src/store/modules/index.js rename to frontend/desktop/src/store/modules/index.js diff --git a/pipeline/blueflow/src/store/modules/periodic.js b/frontend/desktop/src/store/modules/periodic.js similarity index 77% rename from pipeline/blueflow/src/store/modules/periodic.js rename to frontend/desktop/src/store/modules/periodic.js index 91d138808e..f95efd8182 100644 --- a/pipeline/blueflow/src/store/modules/periodic.js +++ b/frontend/desktop/src/store/modules/periodic.js @@ -9,37 +9,35 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import api from "@/api/index.js" -import tools from '@/utils/tools.js' +import api from '@/api/index.js' const periodic = { namespaced: true, - mutations: { - }, + mutations: {}, actions: { - loadPeriodicList ({commit}, data) { + loadPeriodicList ({ commit }, data) { return api.getPeriodicList(data).then(response => response.data) }, - createPeriodic ({state},data) { + createPeriodic ({ state }, data) { return api.createPeriodic(data).then(response => response.data) }, - setPeriodicEnable ({commit}, data) { + setPeriodicEnable ({ commit }, data) { return api.setPeriodicEnable(data).then(response => response.data) }, - modifyPeriodicCron ({commit}, data) { + modifyPeriodicCron ({ commit }, data) { return api.modifyPeriodicCron(data).then(response => response.data) }, - getPeriodic ({commit}, data) { + getPeriodic ({ commit }, data) { return api.getPeriodic(data).then(response => response.data) }, - modifyPeriodicConstants ({commit}, data) { + modifyPeriodicConstants ({ commit }, data) { return api.modifyPeriodicConstants(data).then(response => response.data) }, - deletePeriodic ({commit}, taskId) { + deletePeriodic ({ commit }, taskId) { return api.deletePeriodic(taskId).then(response => response.data) } }, getters: {} } -export default periodic \ No newline at end of file +export default periodic diff --git a/pipeline/blueflow/src/store/modules/task.js b/frontend/desktop/src/store/modules/task.js similarity index 70% rename from pipeline/blueflow/src/store/modules/task.js rename to frontend/desktop/src/store/modules/task.js index 78490d9439..4f0841aeb5 100644 --- a/pipeline/blueflow/src/store/modules/task.js +++ b/frontend/desktop/src/store/modules/task.js @@ -22,89 +22,89 @@ const task = { } }, actions: { - loadTaskScheme ({commit}, payload) { - const { cc_id, template_id} = payload - return api.getTaskScheme({cc_id, template_id}).then(response => response.data.objects) + loadTaskScheme ({ commit }, payload) { + const { cc_id, template_id } = payload + return api.getTaskScheme({ cc_id, template_id }).then(response => response.data.objects) }, - createTaskScheme ({commit}, payload) { + createTaskScheme ({ commit }, payload) { return api.createTaskScheme(payload).then(response => response.data) }, - deleteTaskScheme ({commit}, schemeId) { + deleteTaskScheme ({ commit }, schemeId) { return api.deleteTaskScheme(schemeId).then(response => response.data) }, - getSchemeDetail ({commit}, schemeId) { + getSchemeDetail ({ commit }, schemeId) { return api.getSchemeDetail(schemeId).then(response => response.data) }, - loadPreviewNodeData ({commit}, payload) { + loadPreviewNodeData ({ commit }, payload) { return api.getPreviewNodeData(payload).then(response => response.data) }, - createTask ({commit}, data) { + createTask ({ commit }, data) { return api.createTask(data).then(response => response.data) }, - getTaskInstanceData ({commit}, instance_id) { + getTaskInstanceData ({ commit }, instance_id) { return api.getTaskInstanceData(instance_id).then(response => response.data) }, - claimFuncTask ({commit}, data) { + claimFuncTask ({ commit }, data) { return api.claimFuncTask(data).then(response => response.data) }, - getInstanceStatus ({commit}, data) { + getInstanceStatus ({ commit }, data) { return api.getInstanceStatus(data).then(response => response.data) }, - instanceStart ({commit}, instance_id) { + instanceStart ({ commit }, instance_id) { return api.instanceStart(instance_id).then(response => response.data) }, - instancePause ({commit}, instance_id) { + instancePause ({ commit }, instance_id) { return api.instancePause(instance_id).then(response => response.data) }, - subInstancePause ({commit}, data) { + subInstancePause ({ commit }, data) { return api.subInstancePause(data).then(response => response.data) }, - instanceResume ({commit}, instance_id) { + instanceResume ({ commit }, instance_id) { return api.instanceResume(instance_id).then(response => response.data) }, - subInstanceResume ({commit}, data) { + subInstanceResume ({ commit }, data) { return api.subInstanceResume(data).then(response => response.data) }, - instanceRevoke ({commit}, instance_id) { + instanceRevoke ({ commit }, instance_id) { return api.instanceRevoke(instance_id).then(response => response.data) }, - instanceModifyParams ({commit}, data) { + instanceModifyParams ({ commit }, data) { return api.instanceModifyParams(data).then(response => response.data) }, - getNodeActDetail ({commit}, data) { + getNodeActDetail ({ commit }, data) { return api.getNodeActDetail(data).then(response => response.data) }, - getNodeActInfo ({commit}, data) { + getNodeActInfo ({ commit }, data) { return api.getNodeActInfo(data).then(response => response.data) }, - instanceRetry ({commit}, data) { + instanceRetry ({ commit }, data) { return api.instanceRetry(data).then(response => response.data) }, - setSleepNode ({commit}, data) { + setSleepNode ({ commit }, data) { return api.setSleepNode(data).then(response => response.data) }, - instanceNodeSkip ({commit}, data) { + instanceNodeSkip ({ commit }, data) { return api.instanceNodeSkip(data).then(response => response.data) }, - skipExclusiveGateway ({commit}, data) { + skipExclusiveGateway ({ commit }, data) { return api.instanceBranchSkip(data).then(response => response.data) }, - pauseNodeResume ({commit}, data) { + pauseNodeResume ({ commit }, data) { return api.pauseNodeResume(data).then(response => response.data) }, loadAppmakerSummary () { return api.loadAppmakerSummary().then(response => response.data) }, - loadTaskCount ({commit}, params) { + loadTaskCount ({ commit }, params) { return api.loadTaskCount(params).then(response => response.data) }, - queryInstanceData ({commit}, data) { + queryInstanceData ({ commit }, data) { return api.queryInstance(data).then(response => response.data) }, - loadCreateMethod ({commit}) { + loadCreateMethod ({ commit }) { return api.loadCreateMethod().then(response => response.data) }, - getJobInstanceLog ({commit}, data) { + getJobInstanceLog ({ commit }, data) { return api.getJobInstanceLog(data).then(response => response.data) } } diff --git a/pipeline/blueflow/src/store/modules/taskList.js b/frontend/desktop/src/store/modules/taskList.js similarity index 87% rename from pipeline/blueflow/src/store/modules/taskList.js rename to frontend/desktop/src/store/modules/taskList.js index ef8703cc32..7acb8681b7 100644 --- a/pipeline/blueflow/src/store/modules/taskList.js +++ b/frontend/desktop/src/store/modules/taskList.js @@ -9,7 +9,7 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import api from "@/api/index.js" +import api from '@/api/index.js' const taskList = { namespaced: true, @@ -22,17 +22,17 @@ const taskList = { } }, actions: { - loadTaskList ({commit}, data) { + loadTaskList ({ commit }, data) { return api.getTaskList(data).then(response => response.data) }, - deleteTask ({commit}, task_id) { + deleteTask ({ commit }, task_id) { return api.deleteTask(task_id).then(response => response.data.objects) }, - cloneTask ({commit}, data) { + cloneTask ({ commit }, data) { return api.cloneTask(data).then(response => response.data) } }, getters: {} } -export default taskList \ No newline at end of file +export default taskList diff --git a/pipeline/blueflow/src/store/modules/template.js b/frontend/desktop/src/store/modules/template.js similarity index 92% rename from pipeline/blueflow/src/store/modules/template.js rename to frontend/desktop/src/store/modules/template.js index 58d598b96a..59680dcf26 100644 --- a/pipeline/blueflow/src/store/modules/template.js +++ b/frontend/desktop/src/store/modules/template.js @@ -47,7 +47,6 @@ function generateInitLocation () { type: 'endpoint' } ] - } // 默认流程模板,activities 字段 function generateInitActivities (location, line) { @@ -174,8 +173,8 @@ const template = { setSubprocessUpdated (state, subflow) { state.subprocess_info.details.some(item => { if ( - subflow.template_id === item.template_id && - subflow.subprocess_node_id === item.subprocess_node_id + subflow.template_id === item.template_id + && subflow.subprocess_node_id === item.subprocess_node_id ) { item.expired = false subflow.version && (item.version = subflow.version) @@ -204,7 +203,7 @@ const template = { pipelineTreeOrder.forEach(key => { let val = pipelineData[key] - if (key !== 'constants'){ + if (key !== 'constants') { val = nodeFilter.convertInvalidIdData(key, val) // convert old invalid data =_=! } if (key === 'location') { @@ -226,7 +225,6 @@ const template = { } state[key] = val }) - }, setBusinessBaseInfo (state, data) { state.businessBaseInfo = data @@ -256,7 +254,7 @@ const template = { // 重置模板数据 resetTemplateData (state) { state.name = '' - state.activities = {} + state.activities = {} state.end_event = {} state.flows = {} state.gateways = {} @@ -287,7 +285,7 @@ const template = { const constant = state.constants[key] const { source_info } = constant - for (let id in source_info) { + for (const id in source_info) { if (state.activities[id]) { source_info[id].forEach(item => { let data @@ -310,7 +308,7 @@ const template = { }, // 配置全局变量 source_info 字段 setVariableSourceInfo (state, payload) { - const {type, id, key, tagCode} = payload + const { type, id, key, tagCode } = payload const constant = state.constants[key] if (!constant) return const sourceInfo = constant.source_info @@ -325,7 +323,7 @@ const template = { Vue.delete(sourceInfo, id) } else { let atomIndex - sourceInfo[id].some((item, index)=> { + sourceInfo[id].some((item, index) => { if (item === tagCode) { atomIndex = index return true @@ -337,7 +335,7 @@ const template = { }, // 配置分支网关条件 setBranchCondition (state, condition) { - const {id, nodeId, name} = condition + const { id, nodeId, name } = condition state.gateways[nodeId]['conditions'][id].evaluate = name }, // 节点增加、删除、编辑操作,数据更新 @@ -364,7 +362,7 @@ const template = { }, // 节点拖动,位置更新 setLocationXY (state, location) { - const {id, x, y} = location + const { id, x, y } = location state.location.some(item => { if (item.id === id) { item.x = x @@ -376,13 +374,11 @@ const template = { // 增加、删除节点连线操作,更新模板各相关字段数据 setLine (state, payload) { const { type, line } = payload - let lineIndex const isLineExist = state.line.some((item, index) => { if ( - item.source.id === line.source.id && - item.target.id === line.target.id + item.source.id === line.source.id + && item.target.id === line.target.id ) { - lineIndex = index return true } }) @@ -428,8 +424,8 @@ const template = { state.line.push(newLine) } else if (type === 'delete') { // async activities、flows、gateways、start_event、end_event let deletedLine - for (let item in state.flows) { - const flow = state.flows[item] + for (const item in state.flows) { + const flow = state.flows[item] if (flow.source === line.source.id && flow.target === line.target.id) { deletedLine = Object.assign({}, flow) } @@ -444,7 +440,9 @@ const template = { if (state.gateways[sourceNode]) { const gatewayNode = state.gateways[sourceNode] if (Array.isArray(gatewayNode.outgoing)) { - gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { return item !== deletedLine.id}) + gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { + return item !== deletedLine.id + }) if (gatewayNode.type === ATOM_TYPE_DICT['branchgateway']) { const conditions = gatewayNode.conditions conditions[deletedLine.id] && Vue.delete(conditions, deletedLine.id) @@ -456,7 +454,9 @@ const template = { if (state.gateways[targetNode]) { const gatewayNode = state.gateways[targetNode] if (Array.isArray(gatewayNode.incoming)) { - gatewayNode.incoming = gatewayNode.incoming.filter(item => { return item !== deletedLine.id}) + gatewayNode.incoming = gatewayNode.incoming.filter(item => { + return item !== deletedLine.id + }) } else { gatewayNode.incoming = '' } @@ -477,13 +477,13 @@ const template = { }, error_ignorable: false, id: location.id, - incoming: "", + incoming: '', loop: null, name: location.name, optional: false, - outgoing: "", + outgoing: '', stage_name: gettext('步骤1'), - type: "ServiceActivity", + type: 'ServiceActivity', can_retry: true, isSkipped: true } @@ -492,15 +492,15 @@ const template = { constants: {}, hooked_constants: [], id: location.id, - incoming: "", + incoming: '', loop: null, name: location.name, optional: false, - outgoing: "", + outgoing: '', stage_name: gettext('步骤1'), template_id: location.atomId, version: location.atomVersion, - type: "SubProcess" + type: 'SubProcess' } } } @@ -530,7 +530,9 @@ const template = { if (state.gateways[sourceNode]) { const gatewayNode = state.gateways[sourceNode] if (Array.isArray(gatewayNode.outgoing)) { - gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { return item !== line}) + gatewayNode.outgoing = gatewayNode.outgoing.filter(item => { + return item !== line + }) if (gatewayNode.type === ATOM_TYPE_DICT['branchgateway']) { const conditions = gatewayNode.conditions conditions[line] && Vue.delete(conditions, line) @@ -542,7 +544,9 @@ const template = { if (state.gateways[targetNode]) { const gatewayNode = state.gateways[targetNode] if (Array.isArray(gatewayNode.incoming)) { - gatewayNode.incoming = gatewayNode.incoming.filter(item => { return item !== line}) + gatewayNode.incoming = gatewayNode.incoming.filter(item => { + return item !== line + }) } else { gatewayNode.incoming = '' } @@ -550,7 +554,7 @@ const template = { Vue.delete(state.flows, line) } }) - for (let cKey in state.constants) { + for (const cKey in state.constants) { const constant = state.constants[cKey] const sourceInfo = constant.source_info @@ -603,7 +607,6 @@ const template = { return item !== line }) } - } if (sourceGateway && sourceNode !== location.id) { if (typeof sourceGateway.outgoing === 'string') { @@ -630,16 +633,16 @@ const template = { if (!state.start_event.id) { state.start_event = { id: location.id, - incoming: "", + incoming: '', name: location.name, - outgoing: "", - type: "EmptyStartEvent" + outgoing: '', + type: 'EmptyStartEvent' } } } else if (type === 'delete') { let targetNode let lineId - for (let item in state.flows){ + for (const item in state.flows) { if (state.flows[item].source === location.id) { targetNode = state.flows[item].target lineId = state.flows[item].id @@ -668,16 +671,16 @@ const template = { if (!state.end_event.id) { state.end_event = { id: location.id, - incoming: "", + incoming: '', name: location.name, - outgoing: "", - type: "EmptyEndEvent" + outgoing: '', + type: 'EmptyEndEvent' } } } else if (type === 'delete') { let sourceNode let lineId - for (let item in state.flows){ + for (const item in state.flows) { if (state.flows[item].target === location.id) { sourceNode = state.flows[item].source lineId = state.flows[item].id @@ -717,7 +720,7 @@ const template = { // 修改state中的模板数据 replaceTemplate (state, template) { if (template !== undefined) { - for (let prop in template) { + for (const prop in template) { state[prop] = template[prop] } } @@ -725,7 +728,7 @@ const template = { // 修改lines和locations replaceLineAndLocation (state, payload) { // 需要做一次深层拷贝 - const {lines, locations} = tools.deepClone(payload) + const { lines, locations } = tools.deepClone(payload) state.line = lines state.location = locations } @@ -734,11 +737,14 @@ const template = { loadBusinessBaseInfo () { return api.getBusinessBaseInfo().then(response => response.data) }, - loadTemplateData ({commit}, data) { + loadTemplateData ({ commit }, data) { return api.getTemplateData(data).then(response => response.data) }, + loadCustomVarCollection () { + return api.getCustomVarCollection().then(response => response.data.objects) + }, // 保存模板数据 - saveTemplateData ({state}, {templateId, ccId, common}) { + saveTemplateData ({ state }, { templateId, ccId, common }) { const { activities, constants, end_event, flows, gateways, line, location, outputs, start_event, notify_receivers, notify_type, time_out, category } = state @@ -756,8 +762,15 @@ const template = { }) // 完整的画布数据 const fullCanvasData = JSON.stringify({ - activities, constants, end_event, flows, gateways, line, - location: pureLocation, outputs, start_event + activities, + constants, + end_event, + flows, + gateways, + line, + location: pureLocation, + outputs, + start_event }) const data = { ccId, @@ -775,20 +788,20 @@ const template = { }) }, // 收藏模板,批量操作 - templateCollectSelect ({commit}, list) { + templateCollectSelect ({ commit }, list) { return api.templateCollectSelect(list).then(response => response.data) }, // 删除收藏模板,单个删除 - templateCollectDelete ({commit}, id) { + templateCollectDelete ({ commit }, id) { return api.templateCollectDelete(id).then(response => response.data) }, - queryTemplateData ({commit}, data) { + queryTemplateData ({ commit }, data) { return api.queryTemplate(data).then(response => response.data) }, - loadTemplateSummary ({commit}, data) { + loadTemplateSummary ({ commit }, data) { return api.loadTemplateSummary(data).then(response => response.data) }, - loadTemplateCollectList ({commit}) { + loadTemplateCollectList ({ commit }) { return api.loadTemplateCollectList().then(response => response.data) } }, diff --git a/pipeline/blueflow/src/store/modules/templateList.js b/frontend/desktop/src/store/modules/templateList.js similarity index 70% rename from pipeline/blueflow/src/store/modules/templateList.js rename to frontend/desktop/src/store/modules/templateList.js index 332ff892ee..4ece5eb12c 100644 --- a/pipeline/blueflow/src/store/modules/templateList.js +++ b/frontend/desktop/src/store/modules/templateList.js @@ -9,45 +9,51 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ -import api from "@/api" +import api from '@/api' const templateList = { namespaced: true, state: { - templateListData: [] + templateListData: [], + commonTemplateData: [] }, mutations: { - setTemplateListData (state, data) { - state.templateListData = data + setTemplateListData (state, payload) { + const { list, isCommon } = payload + if (isCommon) { + state.commonTemplateData = list + } else { + state.templateListData = list + } } }, actions: { - loadTemplateList ({commit}, data) { + loadTemplateList ({ commit }, data) { return api.getTemplateList(data).then(response => response.data) }, - deleteTemplate ({commit}, template_id) { + deleteTemplate ({ commit }, template_id) { return api.deleteTemplate(template_id).then(response => response.data.objects) }, getBizPerson () { return api.getBizPerson().then(response => response.data) }, - getTemplatePersons ({commit}, data) { + getTemplatePersons ({ commit }, data) { return api.getTemplatePersons(data).then(response => response.data) }, - saveTemplatePersons ({commit}, data) { + saveTemplatePersons ({ commit }, data) { return api.saveTemplatePersons(data).then(response => response.data) }, - templateUploadCheck ({commit}, data) { + templateUploadCheck ({ commit }, data) { return api.templateUploadCheck(data).then(response => response.data) }, - templateImport ({commit}, data) { + templateImport ({ commit }, data) { return api.templateImport(data).then(response => response.data) }, - templateExport ({commit}, data) { + templateExport ({ commit }, data) { return api.templateExport(data).then(response => response.data) } }, getters: {} } -export default templateList \ No newline at end of file +export default templateList diff --git a/pipeline/blueflow/src/utils/atomFilter.js b/frontend/desktop/src/utils/atomFilter.js similarity index 97% rename from pipeline/blueflow/src/utils/atomFilter.js rename to frontend/desktop/src/utils/atomFilter.js index 5df984e964..3d9e86dd99 100644 --- a/pipeline/blueflow/src/utils/atomFilter.js +++ b/frontend/desktop/src/utils/atomFilter.js @@ -14,7 +14,7 @@ import tools from './tools.js' const atomFilter = { formFilter (tag_code, config) { let formConfig - if (tag_code && config){ + if (tag_code && config) { config.some(item => { if (item.tag_code === tag_code) { formConfig = item @@ -33,7 +33,7 @@ const atomFilter = { return formConfig }, getFormItemDefaultValue (config) { - let value = {} + const value = {} config.forEach(item => { if (item.type === 'combine') { value[item.tag_code] = this.getFormItemDefaultValue(item.attrs.children) @@ -77,7 +77,6 @@ const atomFilter = { break default: val = '' - } } @@ -89,4 +88,4 @@ const atomFilter = { } } -export default atomFilter \ No newline at end of file +export default atomFilter diff --git a/pipeline/blueflow/src/utils/bus.js b/frontend/desktop/src/utils/bus.js similarity index 97% rename from pipeline/blueflow/src/utils/bus.js rename to frontend/desktop/src/utils/bus.js index 8a8dbdc453..4aa4fe1766 100644 --- a/pipeline/blueflow/src/utils/bus.js +++ b/frontend/desktop/src/utils/bus.js @@ -13,4 +13,4 @@ import Vue from 'vue' const bus = new Vue() -export default bus \ No newline at end of file +export default bus diff --git a/pipeline/blueflow/src/utils/checkDataType.js b/frontend/desktop/src/utils/checkDataType.js similarity index 99% rename from pipeline/blueflow/src/utils/checkDataType.js rename to frontend/desktop/src/utils/checkDataType.js index e3790ad939..129b29729b 100644 --- a/pipeline/blueflow/src/utils/checkDataType.js +++ b/frontend/desktop/src/utils/checkDataType.js @@ -12,4 +12,4 @@ export function checkDataType (data) { const typeString = Object.prototype.toString.call(data) return typeString.slice(8, -1) -} \ No newline at end of file +} diff --git a/pipeline/blueflow/src/utils/dom.js b/frontend/desktop/src/utils/dom.js similarity index 85% rename from pipeline/blueflow/src/utils/dom.js rename to frontend/desktop/src/utils/dom.js index 6e439b8018..2ad52417f9 100644 --- a/pipeline/blueflow/src/utils/dom.js +++ b/frontend/desktop/src/utils/dom.js @@ -11,15 +11,17 @@ */ const dom = { nodeContains: function (root, el) { - if (root.compareDocumentPosition) + if (root.compareDocumentPosition) { return root === el || !!(root.compareDocumentPosition(el) & 16) - if (root.contains && el.nodeType === 1){ + } + if (root.contains && el.nodeType === 1) { return root.contains(el) && root !== el } - while ((el = el.parentNode)) + while ((el = el.parentNode)) { if (el === root) return true + } return false } } -export default dom \ No newline at end of file +export default dom diff --git a/pipeline/blueflow/src/utils/draft.js b/frontend/desktop/src/utils/draft.js similarity index 73% rename from pipeline/blueflow/src/utils/draft.js rename to frontend/desktop/src/utils/draft.js index fc1ad44118..57d08bd1f2 100644 --- a/pipeline/blueflow/src/utils/draft.js +++ b/frontend/desktop/src/utils/draft.js @@ -21,8 +21,8 @@ const draft = { let index = 0 while (remainingLocalStorageSize < minDraftLength) { // 大小不足96KB时清除一部分本地缓存 从最早创建的本地缓存开始删除 - let key = localStorage.key(index++) - let keyArray = key.split('_') + const key = localStorage.key(index++) + const keyArray = key.split('_') if (keyArray.length !== 4) { continue } @@ -30,19 +30,19 @@ const draft = { remainingLocalStorageSize = 1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length } // 当前时间戳 - let timestamp = new Date().getTime() + const timestamp = new Date().getTime() // 当前年月日时分秒时间 - let localTime = moment.unix(timestamp / 1000).format('YYYY-MM-DD HH:mm:ss') + const localTime = moment.unix(timestamp / 1000).format('YYYY-MM-DD HH:mm:ss') // 数据 - let descriptionData = {'time': localTime , 'message': message} + const descriptionData = { 'time': localTime, 'message': message } // 存储数据 - let key = [username, ccId, templateId, timestamp].join('_') + const key = [username, ccId, templateId, timestamp].join('_') // 超过50个本地缓存需要进行删除 let draftNumber = 0 - let localStorageLength = localStorage.length + const localStorageLength = localStorage.length const regex = this.getKeyRegex(username, ccId, templateId) - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) // 获取key字段的所有切割信息 if (regex.test(key)) { draftNumber++ @@ -52,7 +52,7 @@ const draft = { } } try { - localStorage[key] = JSON.stringify({'template': templateData , 'description': descriptionData}) + localStorage[key] = JSON.stringify({ 'template': templateData, 'description': descriptionData }) } catch (e) { // 用户浏览器不支持localStorage } @@ -69,19 +69,19 @@ const draft = { // 用于替换第一次创建模板id为 uuid 的id draftReplace (username, ccId, templateId, templateUUID) { const regex = this.getKeyRegex(username, ccId, templateUUID) - for (let key in localStorage) { + for (const key in localStorage) { // 获取key字段的所有切割信息 - let keyArray = key.split('_') + const keyArray = key.split('_') // 切割完的长度应该为4且原先的模板id uuid 时才需要使用 // username重复的几率比较大放置最后判断 if (regex.test(key)) { // 原先的模板数据 - let draftData = localStorage[key] + const draftData = localStorage[key] // 将原先信息删除 localStorage.removeItem(key) keyArray[2] = templateId // 重新创建key值 - let newKey = keyArray.join('_') + const newKey = keyArray.join('_') localStorage[newKey] = draftData } } @@ -89,12 +89,12 @@ const draft = { // 获取当前本地缓存 getDraftArray (username, ccId, templateId) { const regex = this.getKeyRegex(username, ccId, templateId) - let draftArray = [] - let localStorageLength = localStorage.length - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + const draftArray = [] + const localStorageLength = localStorage.length + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) if (regex.test(key)) { - draftArray.push({'key': key,'data': JSON.parse(localStorage[key])}) + draftArray.push({ 'key': key, 'data': JSON.parse(localStorage[key]) }) } } return draftArray @@ -102,9 +102,9 @@ const draft = { // 删除没有template_id 的模板 deleteAllDraftByUUID (username, ccId, uuid) { const regex = this.getKeyRegex(username, ccId, uuid) - let localStorageLength = localStorage.length - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + const localStorageLength = localStorage.length + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) // uuid 需要加上""变为字符串 if (regex.test(key)) { localStorage.removeItem(key) @@ -114,26 +114,26 @@ const draft = { // 复制并替换本地缓存(模板克隆时使用) copyAndReplaceDraft (username, ccId, templateId, uuid) { const regex = this.getKeyRegex(username, ccId, templateId) - for (let key in localStorage) { + for (const key in localStorage) { // 获取key字段的所有切割信息 - let keyArray = key.split('_') + const keyArray = key.split('_') if (regex.test(key)) { // 原先的模板数据 - let draftData = localStorage[key] + const draftData = localStorage[key] keyArray[2] = uuid // 重新创建key值并进行创建 - let newKey = keyArray.join('_') + const newKey = keyArray.join('_') localStorage[newKey] = draftData } } }, // 获取最近的一个本地缓存 getLastDraft (username, ccId, templateId) { - let localStorageLength = localStorage.length + const localStorageLength = localStorage.length // 动态生成正则表达式 const regex = this.getKeyRegex(username, ccId, templateId) - for (let index = localStorageLength - 1; index >= 0 ; index--) { - let key = localStorage.key(index) + for (let index = localStorageLength - 1; index >= 0; index--) { + const key = localStorage.key(index) if (regex.test(key)) { return localStorage[key] } @@ -145,4 +145,4 @@ const draft = { } } -export default draft \ No newline at end of file +export default draft diff --git a/pipeline/blueflow/src/utils/errorHandler.js b/frontend/desktop/src/utils/errorHandler.js similarity index 100% rename from pipeline/blueflow/src/utils/errorHandler.js rename to frontend/desktop/src/utils/errorHandler.js diff --git a/pipeline/blueflow/src/utils/formatPosition.js b/frontend/desktop/src/utils/formatPosition.js similarity index 87% rename from pipeline/blueflow/src/utils/formatPosition.js rename to frontend/desktop/src/utils/formatPosition.js index 5ffbb03715..d3625ab948 100644 --- a/pipeline/blueflow/src/utils/formatPosition.js +++ b/frontend/desktop/src/utils/formatPosition.js @@ -9,6 +9,8 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ +import tools from '@/utils/tools.js' + const gatewayShiftX = 210 // 起始位置 const startPointX = 40 @@ -75,17 +77,15 @@ let nowTier = -1 // 用于计算线段比例 let nextLineNodeY = 0 -import tools from '@/utils/tools.js' - const formatPositionUtils = { formatPosition (oldLines, oldLocations) { lastLocations = oldLocations lines = oldLines overBorderLine = [] // 分组信息 - for (let line of lines) { - let sourceId = line.source.id - let targetId = line.target.id + for (const line of lines) { + const sourceId = line.source.id + const targetId = line.target.id if (group[sourceId]) { group[sourceId].push(targetId) } else { @@ -93,19 +93,17 @@ const formatPositionUtils = { } } // 循环旧节点 - for (let location of oldLocations) { - let type = location['type'] + for (const location of oldLocations) { + const type = location['type'] if (type === 'startpoint') { // 用于放置至最开始 lastPoint = location nowId = location.id - } - else if (type === 'endpoint') { + } else if (type === 'endpoint') { // 用于放置至最后 endPoint = location - } - else { - let locationId = location.id + } else { + const locationId = location.id // 添加进入循环数组 newLocations[locationId] = location // 获取一一对应的网关关系 @@ -113,24 +111,24 @@ const formatPositionUtils = { gatewayCycleList[locationId] = {} gatewayCycleExecute[locationId] = {} // 递归获得分支或并行网关执行序列 - let [gatewayRecursionList] = this.recursionGateway(gatewayStack, locationId, oldLocations) - for (let x in gatewayRecursionList) { - for (let y in gatewayRecursionList[x]) { - let nodeId = gatewayRecursionList[x][y] + const [gatewayRecursionList] = this.recursionGateway(gatewayStack, locationId, oldLocations) + for (const x in gatewayRecursionList) { + for (const y in gatewayRecursionList[x]) { + const nodeId = gatewayRecursionList[x][y] gatewayCycleList[locationId][nodeId] = oldLocations.find(location => location.id === nodeId) } // 用于控制递归继续执行序列 // 需要减去最后的多余的结束节点数量 - gatewayCycleExecute[locationId][x] = gatewayRecursionList[x].length - 1 + gatewayCycleExecute[locationId][x] = gatewayRecursionList[x].length - 1 } } } } // 清除多余的locations中的相关节点 - for (let x in gatewayCycleList){ - for (let y in gatewayCycleList[x]) { - for (let z in gatewayCycleList[x][y]){ - let id = gatewayCycleList[x][y][z] + for (const x in gatewayCycleList) { + for (const y in gatewayCycleList[x]) { + for (const z in gatewayCycleList[x][y]) { + const id = gatewayCycleList[x][y][z] if (newLocations[id] === undefined) { continue } @@ -141,7 +139,7 @@ const formatPositionUtils = { // 重新赋值节点位置 locations = [] // 先添加起始节点 - let locationJson = tools.deepClone(lastPoint) + const locationJson = tools.deepClone(lastPoint) // 绘制开始节点 locationJson['x'] = startPointX locationJson['y'] = startPointY @@ -153,7 +151,7 @@ const formatPositionUtils = { // 结束节点最后绘制 this.computeAndDrawNode(endPoint) // 需要重新赋值全局变量 防止第二次点击编排按钮时出现问题 - const result = {'lines': lines, 'locations': locations, 'overBorderLine': overBorderLine} + const result = { 'lines': lines, 'locations': locations, 'overBorderLine': overBorderLine } this.initData() return result }, @@ -166,22 +164,22 @@ const formatPositionUtils = { */ recursionGateway (gatewayStack, locationId, oldLocations, tier = 0) { // 全部分支递归分支数组 - let gatewayRecursionList = [] + const gatewayRecursionList = [] // 获取网关的执行序列 - let groupLocationList = group[locationId] + const groupLocationList = group[locationId] // 某一条分支的递归数组 let recursionList = [] // 当前id let findId = null - for (let locationIndex in groupLocationList) { + for (const locationIndex in groupLocationList) { gatewayStack.push(locationId) // 获得网关的第一个节点 findId = groupLocationList[locationIndex] while (true) { // 获取节点 - let findLocation = oldLocations.find(location => location.id === findId) - let findType = findLocation['type'] + const findLocation = oldLocations.find(location => location.id === findId) + const findType = findLocation['type'] if (findType === 'convergegateway') { // 继续进行下一条分支 只有最后一次需要执行下面的逻辑 if (locationIndex + 1 !== groupLocationList.length) { @@ -189,16 +187,14 @@ const formatPositionUtils = { recursionList.push(findId) break } - } - else if (findType === 'parallelgateway' || findType === 'branchgateway') { + } else if (findType === 'parallelgateway' || findType === 'branchgateway') { tier++ recursionList.push(findId) // 进行递归 获取网关中最后节点 - let result = this.recursionGateway(gatewayStack, findId, oldLocations, tier) + const result = this.recursionGateway(gatewayStack, findId, oldLocations, tier) // 需要传递网关最后的节点 findId = result[1] - } - else { + } else { recursionList.push(findId) } // 继续找下一个节点 @@ -216,24 +212,26 @@ const formatPositionUtils = { * @param {*} newLastNodeX 当前x值 * @param {*} newLastNodeY 当前y值 */ - recursionData (newLocations, newLastNodeX = null , newLastNodeY = null) { + recursionData (newLocations, newLastNodeX = null, newLastNodeY = null) { // 循环执行节点 - for (let i in newLocations) { + /* eslint-disable */ + for (const i in newLocations) { + /* eslint-enable */ // 某个节点的下一个执行序列 - let lastList = group[nowId] + const lastList = group[nowId] // 出现undefined或空节点即可结束 if (lastList === undefined || newLocations[lastList[0]] === undefined) { break } // 上一个Id - let lastId = nowId + const lastId = nowId if (newLastNodeX === null) { newLastNodeX = lastNodeX } if (newLastNodeY === null) { newLastNodeY = lastNodeY } - let executeLength = lastList.length + const executeLength = lastList.length for (let executeNodeIndex = 0; executeNodeIndex < executeLength; executeNodeIndex++) { nowId = lastList[executeNodeIndex] let location = newLocations[nowId] @@ -298,18 +296,18 @@ const formatPositionUtils = { } // 绘制汇聚网关 if (executeNodeIndex + 1 === executeLength && executeNodeIndex > 0) { - let location = newLocations[gatewayGroup[lastId]] + const location = newLocations[gatewayGroup[lastId]] // 存储层级及最大高度 // 获得最大的X位置 const nowTierMaxWidth = convergegatewayMaxWidthTier[nowTier] - if (nowTierMaxWidth){ + if (nowTierMaxWidth) { convergegatewayMaxWidthTier[nowTier] = nowTierMaxWidth } else { convergegatewayMaxWidthTier[nowTier] = lastNodeX } const [resultNodeX] = this.computeAndDrawNode(location, executeLength, 0, convergegatewayMaxWidthTier[nowTier], newLastNodeY) - if (nowTierMaxWidth){ - convergegatewayMaxWidthTier[nowTier] = Math.max(resultNodeX, nowTierMaxWidth) + if (nowTierMaxWidth) { + convergegatewayMaxWidthTier[nowTier] = Math.max(resultNodeX, nowTierMaxWidth) } else { convergegatewayMaxWidthTier[nowTier] = resultNodeX } @@ -333,14 +331,14 @@ const formatPositionUtils = { * @param {*} gatewayIndex 节点所处网关节点的inex * @param {*} gatewayCycleExecuteLength 网关执行序列长度 */ - computeAndDrawNode (location, executeLength = null, executeNodeIndex = 0, newLastNodeX = null , newLastNodeY = null, gatewayIndex = 0, gatewayCycleExecuteLength = 0) { + computeAndDrawNode (location, executeLength = null, executeNodeIndex = 0, newLastNodeX = null, newLastNodeY = null, gatewayIndex = 0, gatewayCycleExecuteLength = 0) { if (location === undefined) { // 空节点不需要继续 return } // 拷贝一份location用于替换x,y值 - let locationJson = tools.deepClone(location) - let type = location['type'] + const locationJson = tools.deepClone(location) + const type = location['type'] if (type === 'tasknode' || type === 'subflow') { // 是否是在网关中的节点 let gatewayFlag = null @@ -352,15 +350,15 @@ const formatPositionUtils = { } // 在网关当中 if (gatewayFlag) { - let nodeY = newLastNodeY - deviationY + const nodeY = newLastNodeY - deviationY newLastNodeX += shiftX * 1.2 locationJson['x'] = newLastNodeX locationJson['y'] = nodeY locations.push(locationJson) gatewayShiftYList.push(nodeY + deviationY) - let sourceLine = lines.find(line => line.target.id === location.id) - let targetLine = lines.find(line => line.source.id === location.id) + const sourceLine = lines.find(line => line.target.id === location.id) + const targetLine = lines.find(line => line.source.id === location.id) // 入线模式尾箭头为左入 sourceLine.target.arrow = 'Left' if (executeNodeIndex === 0) { @@ -373,7 +371,7 @@ const formatPositionUtils = { // 网关第N行(N>2)第一个节点 sourceLine.source.arrow = 'Bottom' targetLine.source.arrow = 'Right' - if ( gatewayCycleExecuteLength === 1) { + if (gatewayCycleExecuteLength === 1) { // 只有一个节点 连线需要接到汇聚网关下方 targetLine.target.arrow = 'Bottom' } else { @@ -422,13 +420,13 @@ const formatPositionUtils = { // 添加网关信号 用于重置Y轴值 resetGatewayList.push(true) // 修改输出的箭头方向 - let targetLine = lines.find(line => line.target.id === location.id) + const targetLine = lines.find(line => line.target.id === location.id) targetLine.target.arrow = 'Left' if (executeNodeIndex === 0) { targetLine.source.arrow = 'Right' } else { // 上一个节点的type - const {type: lastNodeType} = this.getPreviousPoint(location.id) + const { type: lastNodeType } = this.getPreviousPoint(location.id) if (lastNodeType === 'parallelgateway' || lastNodeType === 'branchgateway') { targetLine.source.arrow = 'Bottom' } else { @@ -470,7 +468,7 @@ const formatPositionUtils = { newLastNodeX = lastNodeX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else { newLastNodeX += shiftX * 1.5 locationJson['x'] = newLastNodeX @@ -486,9 +484,9 @@ const formatPositionUtils = { locationJson['x'] = lastNodeX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else { - lastNodeX += shiftX / 1.2 + lastNodeX += shiftX / 1.2 locationJson['x'] = lastNodeX } locationJson['y'] = lastNodeY @@ -511,14 +509,13 @@ const formatPositionUtils = { delete convergegatewayMaxWidthTier[nowTier] nowTier-- return [lastNodeX, null] - } else if (type === 'convergegateway') { resetGatewayList.pop() // 更换分支网关连接线段箭头 const sourceLine = lines.find(line => line.target.id === location.id) const targetLine = lines.find(line => line.source.id === location.id) targetLine.source.arrow = 'Right' - if (lastLocations.find(location => sourceLine.source.id === location.id).type === 'convergegateway'){ + if (lastLocations.find(location => sourceLine.source.id === location.id).type === 'convergegateway') { // 设置连接分支网关的线在左部 sourceLine.target.arrow = 'Left' } @@ -541,17 +538,16 @@ const formatPositionUtils = { } else { return [lastNodeX, lastNodeY] } - } - else if (type === 'endpoint') { + } else if (type === 'endpoint') { // 需要切换箭头 - let line = lines.find(line => line.target.id === location.id) + const line = lines.find(line => line.target.id === location.id) line.target.arrow = 'Left' line.source.arrow = 'Right' if (isStartPoint) { lastNodeX = startPointX isStartPoint = false const line = lines.find(line => line.target.id === location.id) - this.addOverBorderLine({'source': line.source.id, 'target': line.target.id}) + this.addOverBorderLine({ 'source': line.source.id, 'target': line.target.id }) } else if (lastPointType === 'tasknode' || lastPointType === 'subflow' || lastPointType === 'startpoint') { // 结束节点前是个标准插件节点需要增加1.5倍距离 lastNodeX += shiftX * 1.5 @@ -562,7 +558,6 @@ const formatPositionUtils = { locationJson['x'] = lastNodeX locationJson['y'] = lastNodeY locations.push(locationJson) - return } }, isOverBorder () { @@ -629,12 +624,12 @@ const formatPositionUtils = { }, isLocationAllNode (locations) { const typeList = ['startpoint', 'endpoint', 'tasknode', 'subflow'] - return locations.every((location) =>{ + return locations.every((location) => { return typeList.includes(location.type) }) }, - addOverBorderLine ({source, target}) { - overBorderLine.push({'source': source, 'target': target ,'midpoint': Number(gatewayShiftY / nextLineNodeY).toFixed(2)}) + addOverBorderLine ({ source, target }) { + overBorderLine.push({ 'source': source, 'target': target, 'midpoint': Number(gatewayShiftY / nextLineNodeY).toFixed(2) }) gatewayShiftY = 0 } } diff --git a/pipeline/blueflow/src/utils/i18n.js b/frontend/desktop/src/utils/i18n.js similarity index 100% rename from pipeline/blueflow/src/utils/i18n.js rename to frontend/desktop/src/utils/i18n.js diff --git a/pipeline/blueflow/src/utils/nodeFilter.js b/frontend/desktop/src/utils/nodeFilter.js similarity index 88% rename from pipeline/blueflow/src/utils/nodeFilter.js rename to frontend/desktop/src/utils/nodeFilter.js index 4007c9df0d..a482e510c8 100644 --- a/pipeline/blueflow/src/utils/nodeFilter.js +++ b/frontend/desktop/src/utils/nodeFilter.js @@ -42,20 +42,22 @@ const nodeFilter = { case 'activities': case 'flows': case 'gateways': - for (let key in primaryData) { + for (const key in primaryData) { const newKey = this.getNewValidId(key) newData[newKey] = primaryData[key] keysOfIdRelated.forEach(item => { - let val = newData[newKey][item] - if (val != undefined && val !== '') { + const val = newData[newKey][item] + if (val !== undefined && val !== '') { if (typeof val === 'string') { newData[newKey][item] = this.getNewValidId(val) } else if (Array.isArray(val)) { - newData[newKey][item] = val.map(v => {return this.getNewValidId(v)}) + newData[newKey][item] = val.map(v => { + return this.getNewValidId(v) + }) } if (item === 'conditions') { const newVal = {} - for (let conditionId in val) { + for (const conditionId in val) { const newConditionId = this.getNewValidId(conditionId) newVal[newConditionId] = val[conditionId] newVal[newConditionId].tag = newVal[newConditionId].tag.split('_').map((id, index) => { @@ -68,18 +70,16 @@ const nodeFilter = { }) } return newData - break case 'end_event': case 'start_event': newData = Object.assign({}, primaryData) keysOfIdRelated.forEach(item => { - let val = newData[item] - if (val != undefined && val !== '') { + const val = newData[item] + if (val !== undefined && val !== '') { newData[item] = this.getNewValidId(val) } }) return newData - break case 'line': newData = [...primaryData] newData.forEach((item, index) => { @@ -88,19 +88,16 @@ const nodeFilter = { item.target.id = this.getNewValidId(item.target.id) }) return newData - break case 'location': newData = [...primaryData] newData.forEach((item) => { item.id = this.getNewValidId(item.id) }) return newData - break default: return primaryData - break } } } -export default nodeFilter \ No newline at end of file +export default nodeFilter diff --git a/pipeline/blueflow/src/utils/tools.js b/frontend/desktop/src/utils/tools.js similarity index 98% rename from pipeline/blueflow/src/utils/tools.js rename to frontend/desktop/src/utils/tools.js index dc9c9c6e11..ae93541395 100644 --- a/pipeline/blueflow/src/utils/tools.js +++ b/frontend/desktop/src/utils/tools.js @@ -22,8 +22,8 @@ const tools = { let timer return function () { - let context = this - let args = arguments + const context = this + const args = arguments clearTimeout(timer) @@ -54,7 +54,6 @@ const tools = { last = now fn.apply(context, args) }, threshhold) - } else { last = now fn.apply(context, args) diff --git a/pipeline/blueflow/src/utils/uuid.js b/frontend/desktop/src/utils/uuid.js similarity index 99% rename from pipeline/blueflow/src/utils/uuid.js rename to frontend/desktop/src/utils/uuid.js index 929f99396c..3b660db022 100644 --- a/pipeline/blueflow/src/utils/uuid.js +++ b/frontend/desktop/src/utils/uuid.js @@ -21,4 +21,4 @@ export function uuid () { id += random4() } return id -} \ No newline at end of file +} diff --git a/pipeline/blueflow/src/utils/validatePipeline.js b/frontend/desktop/src/utils/validatePipeline.js similarity index 77% rename from pipeline/blueflow/src/utils/validatePipeline.js rename to frontend/desktop/src/utils/validatePipeline.js index 9cfc990154..2375cb0f4d 100644 --- a/pipeline/blueflow/src/utils/validatePipeline.js +++ b/frontend/desktop/src/utils/validatePipeline.js @@ -11,17 +11,16 @@ */ import { NODE_DICT } from '@/constants/index.js' - const NODE_RULE = { - "startpoint": { + 'startpoint': { min_in: 0, max_in: 0, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "branchgateway", "parallelgateway", "endpoint", "subflow"], + allowed_out: ['tasknode', 'branchgateway', 'parallelgateway', 'endpoint', 'subflow'], unique: true }, - "endpoint": { + 'endpoint': { min_in: 1, max_in: 1, min_out: 0, @@ -29,44 +28,44 @@ const NODE_RULE = { allowed_out: [], unique: true }, - "tasknode": { + 'tasknode': { min_in: 1, max_in: 1, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway", "endpoint"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway', 'endpoint'], unique: false }, - "branchgateway": { + 'branchgateway': { min_in: 1, max_in: 1, min_out: 2, max_out: 1000, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway'], unique: false }, - "parallelgateway": { + 'parallelgateway': { min_in: 1, max_in: 1, min_out: 2, max_out: 1000, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway'], unique: false }, - "convergegateway": { + 'convergegateway': { min_in: 2, max_in: 1000, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "convergegateway", "endpoint"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'convergegateway', 'endpoint'], unique: false }, - "subflow": { + 'subflow': { min_in: 1, max_in: 1, min_out: 1, max_out: 1, - allowed_out: ["tasknode", "subflow", "branchgateway", "parallelgateway", "endpoint", "convergegateway"], + allowed_out: ['tasknode', 'subflow', 'branchgateway', 'parallelgateway', 'endpoint', 'convergegateway'], unique: false } } @@ -94,19 +93,19 @@ const validatePipeline = { let isLoop = false if (sourceRule.max_out === 0) { - const i18n_text = gettext("只能添加输入连线") + const i18n_text = gettext('只能添加输入连线') const message = `${NODE_DICT[sourceNode.type]}${i18n_text}` return this.getMessage(false, message) } if (targetRule.max_in === 0) { - const i18n_text = gettext("只能添加输出连线") + const i18n_text = gettext('只能添加输出连线') const message = `${NODE_DICT[targetNode.type]}${i18n_text}` return this.getMessage(false, message) } if (sourceRule.allowed_out.indexOf(targetNode.type) === -1) { - const i18n_text = gettext("不能连接") + const i18n_text = gettext('不能连接') const message = `${NODE_DICT[sourceNode.type]}${i18n_text}${NODE_DICT[targetNode.type]}` return this.getMessage(false, message) } @@ -126,22 +125,22 @@ const validatePipeline = { }) if (isLoop) { - const message = gettext("相同节点不能回连") + const message = gettext('相同节点不能回连') return this.getMessage(false, message) } if (isSameLine) { - const message = gettext("重复添加连线") + const message = gettext('重复添加连线') return this.getMessage(false, message) } else { - const i18n_text1 = gettext("已达到") + const i18n_text1 = gettext('已达到') if (sourceLinesLinked >= sourceRule.max_out) { - const i18n_text2 = gettext("最大输出连线条数") + const i18n_text2 = gettext('最大输出连线条数') const message = `${i18n_text1}${NODE_DICT[sourceNode.type]}${i18n_text2}` return this.getMessage(false, message) } if (targetLinesLinked >= targetRule.max_in) { - const i18n_text2 = gettext("最大输入连线条数") + const i18n_text2 = gettext('最大输入连线条数') const message = `${i18n_text1}${NODE_DICT[targetNode.type]}${i18n_text2}` return this.getMessage(false, message) } @@ -151,9 +150,11 @@ const validatePipeline = { isLocationValid (loc, data) { const rule = NODE_RULE[loc.type] if (rule.unique) { // 节点唯一性 - const isLocationOverMount = data.some(item => { return item.type === loc.type && item.id !== loc.id}) + const isLocationOverMount = data.some(item => { + return item.type === loc.type && item.id !== loc.id + }) if (isLocationOverMount) { - const i18n_text = gettext("在模板中只能添加一个") + const i18n_text = gettext('在模板中只能添加一个') const message = `${NODE_DICT[loc.type]}${i18n_text}` return this.getMessage(false, message) } @@ -185,21 +186,21 @@ const validatePipeline = { subflow += 1 } data.lines.forEach(line => { - if (line.source.id == loc.id) { + if (line.source.id === loc.id) { targetLinesLinked += 1 } if (line.target.id === loc.id) { sourceLinesLinked += 1 } }) - const i18n_text1 = gettext("至少需要") + const i18n_text1 = gettext('至少需要') if (sourceLinesLinked < rule.min_in) { - const i18n_text2 = gettext("条输入连线") + const i18n_text2 = gettext('条输入连线') message = `${name}${i18n_text1}${rule.min_in}${i18n_text2}` return false } if (targetLinesLinked < rule.min_out) { - const i18n_text2 = gettext("条输出连线") + const i18n_text2 = gettext('条输出连线') message = `${name}${i18n_text1}${rule.min_out}${i18n_text2}` return false } @@ -211,12 +212,12 @@ const validatePipeline = { } if ((tasknode + subflow) === 0) { - message = gettext("请添加任务节点") + message = gettext('请添加任务节点') return this.getMessage(false, message) } if (branchAndParallelGateways !== convergegateways) { - message = gettext("并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用") + message = gettext('并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用') return this.getMessage(false, message) } diff --git a/gcloud/apigw/api_doc.md b/gcloud/apigw/api_doc.md deleted file mode 100644 index e05c1353dd..0000000000 --- a/gcloud/apigw/api_doc.md +++ /dev/null @@ -1,2124 +0,0 @@ -# API DOC - -请通过 APIGW 或者 ESB 访问 - -## get_template_list - -### 功能描述 -查询业务下的模板列表 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | - -### 返回结果说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | list | result=true时模板列表,详细信息见下面说明 | -| message | string | result=false时错误信息 | - -#### data[] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| bk_biz_id | string | 业务ID | -| bk_biz_name | string | 业务名称 | -| id | int | 模板ID | -| name | string | 模板名称 | -| category | string | 模板分类,分类信息见下面说明 | -| creator | string | 模板创建人 | -| create_time | string | 模板创建时间 | -| editor | string 或者 null | 模板编辑人 | -| edit_time | string | 模板最新编辑时间 | - -#### data[][category] 说明 -``` -CATEGORY = { - "OpsTools": u"运维工具", - "MonitorAlarm": u"监控告警", - "ConfManage": u"配置管理", - "DevTools": u"开发工具", - "EnterpriseIT": u"企业IT", - "OfficeApp": u"办公应用", - "Other": u"其它", -} -``` - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_template_list/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2" -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": [ - { - "category": "Other", - "edit_time": "2018-04-23 17:30:48 +0800", - "create_time": "2018-04-23 17:26:40 +0800", - "name": "testname", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 32, - "editor": "admin" - }, - { - "category": "Other", - "edit_time": "2018-04-19 12:04:42 +0800", - "create_time": "2018-04-19 12:04:42 +0800", - "name": "new201804191218", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 31, - "editor": null - }, - { - "category": "Other", - "edit_time": "2018-04-18 17:09:39 +0800", - "create_time": "2018-04-16 21:43:15 +0800", - "name": "new20180416213944", - "bk_biz_id": "2", - "creator": "admin", - "bk_biz_name": "blueking", - "id": 30, - "editor": "admin" - }, - ] -} -``` - -## get_template_info - -### 功能描述 -查询业务下的单个模板详情 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_id | string | 是 | 模板ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时模板详情,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| bk_biz_id | string | 业务ID | -| bk_biz_name | string | 业务名称 | -| id | int | 模板ID | -| name | string | 模板名称 | -| category | string | 模板分类,分类信息见下面说明 | -| creator | string | 模板创建人 | -| create_time | string | 模板创建时间 | -| editor | string 或者 null | 模板编辑人 | -| edit_time | string | 模板最新编辑时间 | -| pipeline_tree | dict | 模板任务树信息,详细信息见下面说明 | - -##### data[category] 说明 -``` -CATEGORY = { - "OpsTools": u"运维工具", - "MonitorAlarm": u"监控告警", - "ConfManage": u"配置管理", - "DevTools": u"开发工具", - "EnterpriseIT": u"企业IT", - "OfficeApp": u"办公应用", - "Other": u"其它", -} -``` - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs|component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs|component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_template_list/30/1/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "1", - "template_id": "30", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "category": "Other", - "edit_time": "2018-04-27 16:24:24 +0800", - "create_time": "2018-04-16 21:43:15 +0800", - "name": "new20180416213944", - "bk_biz_id": "2", - "creator": "admin", - "pipeline_tree": { - "activities": { - "631b6576cc5dfbdcaa4f510ce88a7e67": { - "outgoing": "44ab36ebf4cf119edaf2d20401da87e4", - "incoming": "fb2f3a8b533ca5c67e2440b4164f7632", - "name": "node_1", - "error_ignorable": false, - "component": { - "code": "job_fast_execute_script", - "data": { - "account": { - "hook": false, - "value": "root" - }, - "ip_list": { - "hook": false, - "value": "127.0.0.1" - }, - "script_timeout": { - "hook": true, - "value": "${script_timeout}" - }, - "content": { - "hook": false, - "value": "${content}" - }, - "script_param": { - "hook": false, - "value": "${params}" - }, - "script_type": { - "hook": true, - "value": "${script_type}" - } - } - }, - "optional": false, - "type": "ServiceActivity", - "id": "631b6576cc5dfbdcaa4f510ce88a7e67", - "loop": null - } - }, - "end_event": { - "type": "EmptyEndEvent", - "outgoing": "", - "incoming": "44ab36ebf4cf119edaf2d20401da87e4", - "id": "60c81e383d048d8a3c574d3436e1b82c", - "name": "" - }, - "outputs": [], - "flows": { - "fb2f3a8b533ca5c67e2440b4164f7632": { - "is_default": false, - "source": "48afea1016ab70ee37179fa0eb1e1a14", - "id": "fb2f3a8b533ca5c67e2440b4164f7632", - "target": "631b6576cc5dfbdcaa4f510ce88a7e67" - }, - "44ab36ebf4cf119edaf2d20401da87e4": { - "is_default": false, - "source": "631b6576cc5dfbdcaa4f510ce88a7e67", - "id": "44ab36ebf4cf119edaf2d20401da87e4", - "target": "60c81e383d048d8a3c574d3436e1b82c" - } - }, - "start_event": { - "type": "EmptyStartEvent", - "outgoing": "fb2f3a8b533ca5c67e2440b4164f7632", - "incoming": "", - "id": "48afea1016ab70ee37179fa0eb1e1a14", - "name": "" - }, - "constants": { - "${script_type}": { - "source_tag": "job_fast_execute_script.script_type", - "source_info": { - "631b6576cc5dfbdcaa4f510ce88a7e67": [ - "script_type" - ] - }, - "name": "script type", - "index": 0, - "custom_type": "radio", - "value": "4", - "show_type": "show", - "source_type": "component_inputs", - "key": "${script_type}", - "validation": "^.*$", - "desc": "" - }, - "${content}": { - "source_tag": "", - "source_info": {}, - "name": "content", - "index": 2, - "custom_type": "textarea", - "value": "", - "show_type": "show", - "source_type": "custom", - "key": "${content}", - "desc": "" - }, - "${script_timeout}": { - "source_tag": "job_fast_execute_script.script_timeout", - "source_info": { - "631b6576cc5dfbdcaa4f510ce88a7e67": [ - "script_timeout" - ] - }, - "name": "timeout", - "index": 1, - "custom_type": "input", - "value": "", - "show_type": "show", - "source_type": "component_inputs", - "key": "${script_timeout}", - "validation": "^.*$", - "desc": "" - }, - "${params}": { - "source_tag": "", - "source_info": {}, - "name": "params", - "index": 3, - "custom_type": "input", - "value": "", - "show_type": "show", - "source_type": "custom", - "key": "${params}", - "desc": "" - } - }, - "gateways": {} - }, - "bk_biz_name": "blueking", - "id": 30, - "editor": "admin" - }, -} -``` - -## create_task - -### 功能描述 -通过流程模板创建任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 业务ID | -| template_id | string | 是 | 模板ID | -| template_source | string | 否 | 流程模板来源,business:默认值,业务流程,common:公共流程 | -| name | string | 是 | 任务名称 | -| flow_type | string | 否 | 任务流程类型,common: 常规流程,common_func:职能化流程 | -| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | -| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | - -##### constants 说明 -KEY:变量 KEY,${key} 格式 - -VALUE:变量值,value 的类型和从模板获取的全局变量中 value 类型保持一致 - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| task_id | int | 任务实例 ID | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "name": "tasktest", - "flow_type": "common", - "constants": { - "${content}": "echo 1", - "${params}": "", - "${script_timeout}": 20 - } -} -response = requests.post("http://{stageVariables.domain}/apigw/create_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "name": "tasktest", - "flow_type": "common", - "constants": { - "${content}": "echo 1", - "${params}": "", - "${script_timeout}": 20 - } -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "1", - "template_id": "30", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "task_id": 10 - } -} -``` - -## start_task - -### 功能描述 -开始执行任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务ID | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 任务是否执行 | -| data | dict | result=true 时成功返回数据 | -| message | string | result=false 时错误信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.post("http://{stageVariables.domain}/apigw/start_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": "Success" -} -``` - -## operate_task - -### 功能描述 -操作任务,如开始、暂停、继续、终止等 - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务ID | -| action | string | 是 | 操作类型 | - -##### action 说明 -``` -CATEGORY = { - "start": u"开始任务" # 等效于调用 start_task 接口 - "pause": u"暂停任务,任务处于执行状态时调用" - "resume": u"继续任务,任务处于暂停状态时调用" - "revoke": u"终止任务" -} -``` - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时返回数据 | -| message | string | result=false 时错误信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "action": "start" -} -response = requests.post("http://{stageVariables.domain}/apigw/operate_task/10/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "action": "start" -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.api_test(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": "Success" -} -``` - -## get_task_status - -### 功能描述 -查询任务或任务节点执行状态 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| task_id | string | 是 | 任务或节点ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| state | string | 任务或节点状态,详细信息见下面说明 | -| id | string | 任务或节点执行态ID,不等于 task_id | -| skip | bool | 是否跳过执行 | -| retry | int | 重试和跳过总次数 | -| start_time | string | 任务或节点执行开始时间 | -| finish_time | string | 任务或节点执行结束时间 | -| children | dict | 任务节点执行详情,详细信息见下面说明 | - - -##### data[state] 说明 -```python -STATE = { - "CREATED": u"未执行" - "RUNNING": u"执行中" - "FAILED": u"失败" - "SUSPENDED": u"暂停" - "REVOKED": u"已撤销" - "FINISHED": u"已完成" -} -``` - -##### data[children] 说明 - -KEY: -任务节点 执行态ID - -VALUE: -同 data 格式 - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_status/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_status(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "result": true, - "data": { - "retry": 0, - "name": "", - "finish_time": "", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": { - "62d4784e20483f1585149ce90ed954c9": { - "retry": 0, - "name": "", - "finish_time": "2018-04-26 16:08:34 +0800", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": {}, - "state": "FINISHED", - "version": "7447cc2801b630f497768493c02fb488", - "id": "62d4784e20483f1585149ce90ed954c9", - "loop": 1 - }, - "e8b128dff46637368b9b1bd921abc14e": { - "retry": 0, - "name": "", - "finish_time": "2018-04-26 16:08:46 +0800", - "skip": false, - "start_time": "2018-04-26 16:08:34 +0800", - "children": {}, - "state": "FAILED", - "version": "914d35fe7d143c2186e6d3532870b37d", - "id": "e8b128dff46637368b9b1bd921abc14e", - "loop": 1 - } - }, - "state": "FAILED", - "version": "", - "id": "5a1622f9f43e3429acb604e18dbd100a", - "loop": 1 - } -} -``` - - -## get_task_detail - -### 资源描述 -查询任务执行详情 - -### 输入参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务 ID | -| task_id | string | 是 | 任务 ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 查询成功与否 | -| data | dict | result=true 时返回数据,详细信息见下面说明 | -| message | string | result=false 时错误信息 | - -#### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| id | int | 任务 ID,即 task_id | -| name | string | 任务名称 | -| business_id | int | 所属业务 ID | -| business_name | string | 所属业务名称 | -| template_id | int | 创建任务所用的流程模板 ID | -| create_time | string | 任务创建时间 | -| create_method | string | 任务创建方式 | -| start_time | string | 任务执行时间 | -| finish_time | string | 任务完成时间 | -| elapsed_time | int | 任务执行耗时(秒) | -| creator | string | 任务创建人 | -| executor | string | 任务执行人 | -| constants | dict | 输入的全局变量,详情见下面说明 | -| outputs | list | 任务输出参数,详情见下面说明 | - -###### data[constants] 说明 -KEY: -全局变量 KEY,${key} 格式 - -VALUE: -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - -###### data[outputs][] 说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| name | string | 输出字段 | -| value | string、int、bool、dict、list | 输出参数值 | -| key | string | 输出参数 KEY | -| preset | bool | 是否是标准插件定义中预设输出变量 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_detail/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_detail(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "creator": "admin", - "outputs": [ - { - "value": "1", - "key": "${job_script_type}", - "name": "脚本类型" - }, - { - "value": "127.0.0.1", - "key": "${IP}", - "name": "IP" - }, - { - "value": "0", - "key": "${EXIT}", - "name": "EXIT" - } - ], - "start_time": "2019-01-17 04:13:08", - "business_id": 2, - "create_time": "2019-01-17 04:13:03", - "business_name": "蓝鲸", - "id": 10, - "constants": { - "${IP}": { - "source_tag": "var_ip_picker.ip_picker", - "source_info": {}, - "name": "IP", - "index": 2, - "custom_type": "ip", - "value": { - "var_ip_custom_value": "127.0.0.1", - "var_ip_method": "custom", - "var_ip_tree": [] - }, - "show_type": "show", - "source_type": "custom", - "validator": [], - "key": "${IP}", - "desc": "", - "validation": "", - "is_meta": false - }, - "${job_script_type}": { - "source_tag": "job_fast_execute_script.job_script_type", - "source_info": { - "node554316ea019a341f8c28cc6a7da9": [ - "job_script_type" - ] - }, - "name": "脚本类型", - "index": 0, - "custom_type": "", - "value": "1", - "show_type": "show", - "source_type": "component_inputs", - "key": "${job_script_type}", - "validation": "", - "desc": "" - }, - "${EXIT}": { - "source_tag": "", - "source_info": {}, - "name": "EXIT", - "index": 1, - "custom_type": "input", - "value": "0", - "show_type": "show", - "source_type": "custom", - "validator": [], - "key": "${EXIT}", - "validation": "^.+$", - "desc": "" - } - }, - "create_method": "app", - "elapsed_time": 7, - "ex_data": "", - "instance_name": "job输出变量测试_20190117121300", - "end_time": "2019-01-17 04:13:15", - "executor": "admin", - "template_id": "266" - }, - "result": true -} -``` - - -## get_task_node_detail - -### 资源描述 -查询任务节点执行详情 - -### 输入参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 所属业务ID | -| task_id | string | 是 | 任务ID | -| act_id | string | 是 | 节点 ID | -| component_code| string | 否 | 标准插件编码,请求标准插件执行详情必填 | -| subprocess_stack| string | 否 | 子流程堆栈,json 格式的列表 | - -### 返回结果说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 成功与否 | -| data | dict | result=true 时返回数据,详情见下面说明 | -| message | string | result=false 时错误信息 | - -#### data说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| id | string | 节点 ID | -| start_time | string | 最后一次执行开始时间 | -| finish_time | string | 最后一次执行结束时间 | -| elapsed_time | int | 最后一次执行耗时,单位秒 | -| state | string | 最后一次执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | -| skip | bool | 是否手动跳过 | -| retry | int | 重试次数 | -| inputs | dict | 输入参数,key:value格式 | -| outputs | list | 输出参数,详情见下面说明 | -| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | -| histories | list | 重试记录详情,详情见下面说明 | - -##### outputs[]说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| name | string | 输出字段 | -| value | string、int、bool、dict、list | 输出参数值 | -| key | string | 输出参数 KEY | -| preset | bool | 是否是标准插件定义中预设输出变量 | - - -##### histories[]说明 -| 名称 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_time | string | 执行开始时间 | -| finish_time | string | 执行结束时间 | -| elapsed_time | int | 执行耗时 | -| state | string | 执行状态,CREATED:未执行,RUNNING:执行中,FAILED:失败,NODE_SUSPENDED:暂停,SUSPENDED:成功 | -| skip | bool | 是否手动跳过 | -| retry | int | 重试次数 | -| histories | list | 重试记录详情,详情见下面说明 | -| inputs | dict | 输入参数,key:value格式 | -| outputs | dict | 输出参数,key:value格式 | -| ex_data | string | 节点执行失败详情,json字符串或者HTML字符串、普通字符串 | - - -### HTTP 请求调用示例 -```python -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "bk_biz_id": "2", - "task_id": "10", - "node_id": "node0df0431f8f553925af01a94854bd" - "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", - "component_code": "job_fast_execute_script", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_task_node_detail/10/2/", kwargs) -result = response.json() -``` - -### ESB SDK 调用示例 -```python -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "node_id": "node0df0431f8f553925af01a94854bd" - "subprocess_stack": "[\"nodeaaa0ce51d2143aa9b0dbc27cb7df\"]", - "component_code": "job_fast_execute_script", -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", - "task_id": "10", -} -result = client.api.get_task_node_detail(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "inputs": { - "job_account": "root", - "job_script_timeout": "", - "job_script_source": "manual", - "job_script_list_public": "", - "job_content": "echo 0\nexit 0", - "job_script_type": "1", - "job_script_param": "", - "job_script_list_general": "", - "job_ip_list": "127.0.0.1" - }, - "retry": 0, - "name": "", - "finish_time": "2019-01-17 22:02:46 +0800", - "skip": false, - "start_time": "2019-01-17 22:02:37 +0800", - "children": {}, - "histories": [], - "ex_data": null, - "elapsed_time": 9, - "outputs": [ - { - "value": 407584, - "name": "JOB任务ID", - "key": "job_inst_id" - }, - { - "value": "", - "name": "JOB任务链接", - "key": "job_inst_url" - }, - { - "value": true, - "name": "执行结果", - "key": "_result" - } - ], - "state": "FINISHED", - "version": "23ac8c29f62b3337aafcf1f538d277f8", - "error_ignorable": false, - "id": "node0df0431f8f553925af01a94854bd", - "loop": 1 - }, - "result": true -} -``` - - -## query_task_count - -### 功能描述 -查询任务实例分类统计总数 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | -| group_by | string | 是 | 分类统计维度,status:按任务状态(未执行、执行中、已完成)统计,category:按照任务类型统计,flow_type:按照流程类型统计,create_method:按照创建方式 | -| conditions | dict | 否 | 任务过滤条件 | - - -##### conditions 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| template_id | string | 创建任务的模板ID | -| name | string | 任务名称 | -| creator | string | 创建人 | -| create_time__gte | string | 任务创建时间起始时间 | -| create_time__lte | string | 任务创建时间截止时间 | -| executor | string | 执行人 | -| start_time__gte | string | 任务执行时间起始时间 | -| start_time__lte | string | 任务执行时间截止时间 | -| is_started | bool | 任务是否启动 | -| is_finished | bool | 任务是否完成 | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| total | int | 按照过滤条件获取的任务总数 | -| groups | list | 按照过滤条件分类分类统计详情 | - -##### groups[] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| code | string | 分类统计类型编码 | -| name | string | 分类统计类型名称 | -| value | string | 当前分类任务数量 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "conditions": {"create_time__lte": "2018-07-12 10:00:00", "is_started": True}, - "group_by": "flow_type" -} -response = requests.post("http://{stageVariables.domain}/apigw/query_task_count/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "conditions": {"create_time__lte": "2018-07-12 10:00:00", "is_started": True}, - "group_by": "flow_type" -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", -} -result = client.api.query_task_count(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "total": 180, - "groups": [ - { - "code": "common", - "name": "默认任务流程", - "value": 166 - }, - { - "code": "common_func", - "name": "职能化任务流程", - "value": 14 - } - ] - }, - "result": true -} -``` - - -## get_periodic_task_list - -### 功能描述 -获取某个业务下所有的周期任务 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| bk_biz_id | string | 是 | 模板所属业务ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务ID | -| template_id | string | 用于创建该任务的模板ID | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_periodic_task_list/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "bk_biz_id": "2", -} -result = client.api.get_periodic_task_list(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": [ - { - "cron": "*/1 15 * * * (m/h/d/dM/MY)", - "total_run_count": 1, - "name": "from api 3", - "creator": "admin", - "last_run_at": "2018-11-28 15:57:01 +0900", - "enabled": false, - "id": 11, - "template_id": "2" - }, - { - "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "from api 1", - "creator": "admin", - "last_run_at": "", - "enabled": false, - "id": 6, - "template_id": "2" - }, - { - "cron": "*/5 * * * * (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "定时", - "creator": "admin", - "last_run_at": "", - "enabled": false, - "id": 4, - "template_id": "2" - } - ], - "result": true -} -``` - - -## get_periodic_task_info - -### 功能描述 -获取某个周期任务的详情 - -### 请求方法 -GET - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务 ID | -| template_id | string | 用于创建该任务的模板 ID | -| form | dict | 该周期任务的参数表达对象 | -| pipeline_tree | dict | 该周期任务的实例树 | - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[form], data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", -} -response = requests.get("http://{stageVariables.domain}/apigw/get_periodic_task_info/8/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { -} -# 路径参数 -path_kwargs = { - "task_id": "8", - "bk_biz_id": "2", -} -result = client.api.get_periodic_task_info(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "cron": "1,2,3-19/2 2 3 4 5 (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "定时2", - "form": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "2", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "creator": "admin", - "pipeline_tree": { - "activities": { - "nodea5c396a3ef0f9f3cd7d4d7695f78": { - "outgoing": "linef69b59d165fb8c0061b46588c515", - "incoming": "linecf7b7f10c87187a88b72c5f91177", - "name": "暂停", - "error_ignorable": false, - "component": { - "code": "pause_node", - "data": {} - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "loop": {} - }, - "node76393dcfedcf73dbc726f1c4786d": { - "outgoing": "linecf7b7f10c87187a88b72c5f91177", - "incoming": "linecd597f19606c1455d661f71a582d", - "name": "定时", - "error_ignorable": false, - "component": { - "code": "sleep_timer", - "data": { - "bk_timing": { - "hook": true, - "value": "${bk_timing}" - } - } - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "node76393dcfedcf73dbc726f1c4786d", - "loop": {} - } - }, - "end_event": { - "incoming": "linef69b59d165fb8c0061b46588c515", - "outgoing": "", - "type": "EmptyEndEvent", - "id": "node375320830be9c46cd89f4069857d", - "name": "" - }, - "outputs": [], - "flows": { - "linef69b59d165fb8c0061b46588c515": { - "is_default": false, - "source": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "id": "linef69b59d165fb8c0061b46588c515", - "target": "node375320830be9c46cd89f4069857d" - }, - "linecd597f19606c1455d661f71a582d": { - "is_default": false, - "source": "node4e87796ddd76b0d59337b08f385d", - "id": "linecd597f19606c1455d661f71a582d", - "target": "node76393dcfedcf73dbc726f1c4786d" - }, - "linecf7b7f10c87187a88b72c5f91177": { - "is_default": false, - "source": "node76393dcfedcf73dbc726f1c4786d", - "id": "linecf7b7f10c87187a88b72c5f91177", - "target": "nodea5c396a3ef0f9f3cd7d4d7695f78" - } - }, - "gateways": {}, - "line": [ - { - "source": { - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "arrow": "Right" - }, - "target": { - "id": "node375320830be9c46cd89f4069857d", - "arrow": "Left" - }, - "id": "linef69b59d165fb8c0061b46588c515" - }, - { - "source": { - "id": "node4e87796ddd76b0d59337b08f385d", - "arrow": "Right" - }, - "id": "linecd597f19606c1455d661f71a582d", - "target": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Left" - } - }, - { - "source": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Right" - }, - "target": { - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78", - "arrow": "Left" - }, - "id": "linecf7b7f10c87187a88b72c5f91177" - } - ], - "start_event": { - "incoming": "", - "outgoing": "linecd597f19606c1455d661f71a582d", - "type": "EmptyStartEvent", - "id": "node4e87796ddd76b0d59337b08f385d", - "name": "" - }, - "constants": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "2", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "location": [ - { - "stage_name": "步骤1", - "name": "暂停", - "y": 133, - "x": 631, - "type": "tasknode", - "id": "nodea5c396a3ef0f9f3cd7d4d7695f78" - }, - { - "y": 150, - "x": 80, - "type": "startpoint", - "id": "node4e87796ddd76b0d59337b08f385d" - }, - { - "y": 149, - "x": 1092, - "type": "endpoint", - "id": "node375320830be9c46cd89f4069857d" - }, - { - "stage_name": "步骤1", - "name": "定时", - "y": 133, - "x": 300, - "type": "tasknode", - "id": "node76393dcfedcf73dbc726f1c4786d" - } - ] - }, - "last_run_at": "", - "enabled": true, - "id": 5, - "template_id": "2" - }, - "result": true -} -``` - -## create_periodic_task - -### 功能描述 -创建一个周期任务 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| template_id | string | 是 | 用于创建周期任务的模板ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| name | string | 是 | 要创建的周期任务名称 | -| cron | dict | 是 | 要创建的周期任务调度策略 | -| constants | dict | 否 | 任务全局参数,详细信息见下面说明 | -| exclude_task_nodes_id | list | 否 | 跳过执行的节点ID列表 | - -##### constants 说明 -KEY:变量 KEY,${key} 格式 - -VALUE:变量值 - -#### cron 说明 - - | 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| minute | string | 否 | 分,默认为 * | -| hour | string | 否 | 时,默认为 * | -| day_of_week | string | 否 | 一周内的某些天,默认为 * | -| day_of_month | string | 否 | 一个月中的某些天,默认为 * | -| month_of_year | string | 否 | 一年中的某些月份,默认为 * | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 周期调度表达式 | -| total_run_count | int | 周期任务运行次数 | -| name | string | 周期任务名 | -| creator | string | 创建者 | -| last_run_at | string | 上次运行时间 | -| enabled | bool | 是否激活 | -| id | int | 周期任务 ID | -| template_id | string | 用于创建该任务的模板 ID | -| form | dict | 该周期任务的参数表达对象 | -| pipeline_tree | dict | 该周期任务的实例树 | - -##### data[pipeline_tree] 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| start_event | dict | 开始节点信息 | -| end_event | dict | 结束节点信息 | -| activities | dict | 任务节点(标准插件和子流程)信息 | -| gateways | dict | 网关节点(并行网关、分支网关和汇聚网关)信息 | -| flows | dict | 顺序流(节点连线)信息 | -| constants | dict | 全局变量信息,详情见下面 | -| outputs | list | 模板输出信息,标记 constants 中的输出字段 | - -###### data[form], data[pipeline_tree][constants] 说明 - -KEY: -全局变量 KEY,${key} 格式 - -VALUE: - -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs|component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs|component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "name": "from api 3", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, - "constants": {"${bk_timing}": "100"}, - "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] -} -response = requests.get("http://{stageVariables.domain}/apigw/create_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "name": "from api 3", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, - "constants": {"${bk_timing}": "100"}, - "exclude_task_nodes_id": ["nodea5c396a3ef0f9f3cd7d4d7695f78"] -} -# 路径参数 -path_kwargs = { - "template_id": "1", - "bk_biz_id": "2", -} -result = client.api.create_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "message": "", - "data": { - "cron": "*/1 15 * * * (m/h/d/dM/MY)", - "total_run_count": 0, - "name": "from api 3", - "form": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "100", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "creator": "admin", - "pipeline_tree": { - "activities": { - "node76393dcfedcf73dbc726f1c4786d": { - "outgoing": "linecf7b7f10c87187a88b72c5f91177", - "incoming": "linecd597f19606c1455d661f71a582d", - "name": "定时", - "error_ignorable": false, - "component": { - "code": "sleep_timer", - "data": { - "bk_timing": { - "hook": true, - "value": "${bk_timing}" - } - } - }, - "stage_name": "步骤1", - "optional": false, - "type": "ServiceActivity", - "id": "node76393dcfedcf73dbc726f1c4786d", - "loop": {} - } - }, - "end_event": { - "incoming": "linecf7b7f10c87187a88b72c5f91177", - "outgoing": "", - "type": "EmptyEndEvent", - "id": "node375320830be9c46cd89f4069857d", - "name": "" - }, - "outputs": [], - "flows": { - "linecd597f19606c1455d661f71a582d": { - "is_default": false, - "source": "node4e87796ddd76b0d59337b08f385d", - "id": "linecd597f19606c1455d661f71a582d", - "target": "node76393dcfedcf73dbc726f1c4786d" - }, - "linecf7b7f10c87187a88b72c5f91177": { - "is_default": false, - "source": "node76393dcfedcf73dbc726f1c4786d", - "id": "linecf7b7f10c87187a88b72c5f91177", - "target": "node375320830be9c46cd89f4069857d" - } - }, - "gateways": {}, - "line": [ - { - "source": { - "id": "node4e87796ddd76b0d59337b08f385d", - "arrow": "Right" - }, - "id": "linecd597f19606c1455d661f71a582d", - "target": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Left" - } - }, - { - "source": { - "id": "node76393dcfedcf73dbc726f1c4786d", - "arrow": "Right" - }, - "target": { - "id": "node375320830be9c46cd89f4069857d", - "arrow": "Left" - }, - "id": "linecf7b7f10c87187a88b72c5f91177" - } - ], - "start_event": { - "incoming": "", - "outgoing": "linecd597f19606c1455d661f71a582d", - "type": "EmptyStartEvent", - "id": "node4e87796ddd76b0d59337b08f385d", - "name": "" - }, - "constants": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "index": 0, - "custom_type": "", - "value": "100", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "location": [ - { - "y": 150, - "x": 80, - "type": "startpoint", - "id": "node4e87796ddd76b0d59337b08f385d" - }, - { - "y": 149, - "x": 1092, - "type": "endpoint", - "id": "node375320830be9c46cd89f4069857d" - }, - { - "stage_name": "步骤1", - "name": "定时", - "y": 133, - "x": 300, - "type": "tasknode", - "id": "node76393dcfedcf73dbc726f1c4786d" - } - ] - }, - "last_run_at": "", - "enabled": false, - "id": 11, - "template_id": 2 - }, - "result": true -} -``` - -## set_periodic_task_enabled - -### 功能描述 -设置一个周期任务是否激活 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| enabled | bool | 否 | 该周期任务是否激活,不传则为 false | - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| enabled | bool | 当前周期任务是否已经激活 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "enabled": False -} -response = requests.get("http://{stageVariables.domain}/apigw/set_periodic_task_enabled/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "enabled": False -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.set_periodic_task_enabled(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "enabled": false - }, - "result": true -} -``` - -## modify_cron_for_periodic_task - -### 功能描述 -修改一个周期任务的调度策略 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| cron | dict | 否 | 调度策略对象 | - -#### cron 说明 - - | 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| minute | string | 否 | 分,默认为 * | -| hour | string | 否 | 时,默认为 * | -| day_of_week | string | 否 | 一周内的某些天,默认为 * | -| day_of_month | string | 否 | 一个月中的某些天,默认为 * | -| month_of_year | string | 否 | 一年中的某些月份,默认为 * | - - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| cron | string | 调度策略表达式 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, -} -response = requests.get("http://{stageVariables.domain}/apigw/modify_cron_for_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "cron" : {"minute": "*/1", "hour": "15", "day_of_week":"*", "day_of_month":"*", "month_of_year":"*"}, -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.modify_cron_for_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "cron": "*/1 15 * * * (m/h/d/dM/MY)" - }, - "result": true -} -``` - -## modify_constants_for_periodic_task - -### 功能描述 -修改一个周期任务的全局变量 - -### 请求方法 -POST - -### 请求参数说明 -| 字段 | 参数类型 | 必须 | 参数说明 | -| ------------ | ------------ | ------ | ---------------- | -| app_code | string | 是 | 蓝鲸应用编码 | -| app_secret | string | 是 | 蓝鲸应用私密key | -| access_token | string | 否 | 用户登录票据,bk_token 为空时必填 | -| bk_token | string | 否 | 用户登录票据,access_token 为空时必填 | -| task_id | string | 是 | 周期任务ID | -| bk_biz_id | string | 是 | 模板所属业务ID | -| constants | dict | 否 | 全局参数设置 | - -#### constants 说明 - -KEY:变量 KEY,${key} 格式 - -VALUE:变量值 - -### 返回结果说明 -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| result | bool | true/false 操作是否成功 | -| data | dict | result=true 时成功数据,详细信息请见下面说明 | -| message | string | result=false 时错误信息 | - -##### data 说明 -KEY: -全局变量 KEY,${key} 格式 - -VALUE: -| 字段 | 类型 | 说明 | -| ------------ | ---------- | ------------------------------ | -| key | string | 同 KEY | -| name | string | 变量名字 | -| index | int | 变量在模板中的显示顺序 | -| desc | string | 变量说明 | -| source_type | string | 变量来源, 取值范围 custom: 自定义变量,component_inputs: 从标准插件输入参数勾选,component_outputs:从标准插件输出结果中勾选 | -| custom_type | string | source_type=custom 时有效,自定义变量类型, 取值范围 input: 输入框,textarea: 文本框,datetime: 日期时间,int: 整数| -| source_tag | string | source_type=component_inputs/component_outputs 时有效,变量的来源标准插件 | -| source_info | dict | source_type=component_inputs/component_outputs 时有效,变量的来源节点信息 | - - -### HTTP 请求调用示例 -```python -import json -import requests -kwargs = { - "app_code": "app_code", - "app_secret": "app_secret", - "access_token": "access_token", - "constants": {"${bk_timing}": "15"} -} -response = requests.get("http://{stageVariables.domain}/apigw/modify_constants_for_periodic_task/1/2/", json.dumps(kwargs)) -result = response.json() -``` - -### ESB SDK 调用示例 -``` -from bkapigw.app_code.shortcuts import get_client_by_request -client = get_client_by_request(request) -# 填充参数 -kwargs = { - "constants": {"${bk_timing}": "15"} -} -# 路径参数 -path_kwargs = { - "task_id": "1", - "bk_biz_id": "2", -} -result = client.api.modify_constants_for_periodic_task(kwargs, path_kwargs) -``` - -### 返回结果示例 -``` -{ - "data": { - "${bk_timing}": { - "source_tag": "sleep_timer.bk_timing", - "source_info": { - "node76393dcfedcf73dbc726f1c4786d": [ - "bk_timing" - ] - }, - "name": "定时时间", - "custom_type": "", - "index": 0, - "value": "15", - "show_type": "show", - "source_type": "component_inputs", - "key": "${bk_timing}", - "validation": "", - "desc": "" - } - }, - "result": true -} -``` diff --git a/gcloud/apigw/decorators.py b/gcloud/apigw/decorators.py index 65262774db..aaa330cf38 100644 --- a/gcloud/apigw/decorators.py +++ b/gcloud/apigw/decorators.py @@ -27,7 +27,7 @@ from gcloud.tasktmpl3.models import TaskTemplate from gcloud.conf import settings -if not sys.argv[1:2] == ['test'] and settings.RUN_VER == 'clouds': +if not sys.argv[1:2] == ['test'] and settings.USE_BK_OAUTH: try: from bkoauth.decorators import apigw_required except ImportError: @@ -36,6 +36,7 @@ apigw_required = None WHITE_APPS = {'bk_fta', 'bk_bcs'} +WHETHER_PREPARE_BIZ = getattr(settings, 'WHETHER_PREPARE_BIZ_IN_API_CALL', True) def check_white_apps(request): @@ -172,7 +173,7 @@ def decorator(view_func): @wraps(view_func, assigned=available_attrs(view_func)) def _wrapped_view(request, *args, **kwargs): # 应用白名单,免用户校验 - if is_request_from_trust_apps_and_inject_user(request, prepare_biz=True): + if is_request_from_trust_apps_and_inject_user(request, prepare_biz=WHETHER_PREPARE_BIZ): if not business_exist(kwargs): return JsonResponse({ 'result': False, @@ -180,7 +181,7 @@ def _wrapped_view(request, *args, **kwargs): }) return view_func(request, *args, **kwargs) - info = get_user_and_biz_info_and_inject_user(request, kwargs, prepare_biz=True) + info = get_user_and_biz_info_and_inject_user(request, kwargs, prepare_biz=WHETHER_PREPARE_BIZ) if not info['result']: return JsonResponse(info) user = info['data']['user'] diff --git a/gcloud/apigw/urls.py b/gcloud/apigw/urls.py index a59b8eab0a..8fb2e82356 100644 --- a/gcloud/apigw/urls.py +++ b/gcloud/apigw/urls.py @@ -32,4 +32,5 @@ views.modify_constants_for_periodic_task), url(r'^get_task_detail/(?P\d+)/(?P\d+)/$', views.get_task_detail), url(r'^get_task_node_detail/(?P\d+)/(?P\d+)/$', views.get_task_node_detail), + url(r'^node_callback/(?P\d+)/(?P\d+)/$', views.node_callback), ] diff --git a/gcloud/apigw/views.py b/gcloud/apigw/views.py index 084473c7d1..6cd84b50a1 100644 --- a/gcloud/apigw/views.py +++ b/gcloud/apigw/views.py @@ -24,6 +24,7 @@ from pipeline.exceptions import PipelineException from pipeline.engine import api as pipeline_api +from gcloud.conf import settings from gcloud.apigw.decorators import api_check_user_perm_of_business, api_check_user_perm_of_task from gcloud.apigw.schemas import APIGW_CREATE_PERIODIC_TASK_PARAMS, APIGW_CREATE_TASK_PARAMS from gcloud.core.models import Business @@ -33,9 +34,8 @@ from gcloud.commons.template.constants import PermNm from gcloud.tasktmpl3.models import TaskTemplate from gcloud.commons.template.models import CommonTemplate -from gcloud.conf import settings -if not sys.argv[1:2] == ['test'] and settings.RUN_VER == 'clouds': +if not sys.argv[1:2] == ['test'] and settings.USE_BK_OAUTH: try: from bkoauth.decorators import apigw_required except ImportError: @@ -206,7 +206,13 @@ def create_task(request, template_id, bk_biz_id): flow_type=params.get('flow_type', 'common'), current_flow='execute_task' if params.get('flow_type', 'common') == 'common' else 'func_claim', ) - return JsonResponse({'result': True, 'data': {'task_id': task.id}}) + return JsonResponse({ + 'result': True, + 'data': { + 'task_id': task.id, + 'task_url': task.url, + 'pipeline_tree': task.pipeline_tree + }}) @login_exempt @@ -598,6 +604,41 @@ def get_task_node_detail(request, task_id, bk_biz_id): node_id = request.GET.get('node_id') component_code = request.GET.get('component_code') - subprocess_stack = json.loads(request.GET.get('subprocess_stack', '[]')) + try: + subprocess_stack = json.loads(request.GET.get('subprocess_stack', '[]')) + except Exception: + return JsonResponse({ + 'result': False, + 'message': 'subprocess_stack is not a valid array json' + }) result = task.get_node_detail(node_id, component_code, subprocess_stack) return JsonResponse(result) + + +@login_exempt +@csrf_exempt +@require_POST +@apigw_required +@api_check_user_perm_of_business('manage_business') +def node_callback(request, task_id, bk_biz_id): + try: + params = json.loads(request.body) + except Exception: + return JsonResponse({ + 'result': False, + 'message': 'invalid param format' + }) + + try: + task = TaskFlowInstance.objects.get(id=task_id, business__cc_id=bk_biz_id) + except TaskFlowInstance.DoesNotExist: + message = 'task[id={task_id}] of business[bk_biz_id={bk_biz_id}] does not exist'.format( + task_id=task_id, + bk_biz_id=bk_biz_id) + logger.exception(message) + return JsonResponse({'result': False, 'message': message}) + + node_id = params.get('node_id') + callback_data = params.get('callback_data') + + return JsonResponse(task.callback(node_id, callback_data)) diff --git a/gcloud/conf/sites/community/ver_settings.py b/gcloud/conf/sites/community/ver_settings.py index 80dcb0c7aa..85c355adca 100644 --- a/gcloud/conf/sites/community/ver_settings.py +++ b/gcloud/conf/sites/community/ver_settings.py @@ -50,6 +50,10 @@ IMPORT_V1_TEMPLATE_FLAG = False +USE_BK_OAUTH = False + +WHETHER_PREPARE_BIZ_IN_API_CALL = True + RSA_PUB_KEY = "-----BEGIN PUBLIC KEY-----\\n" + \ "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA2XZvbf++4M6YLSgS93kYJS34\\n" + \ "e2TZvq/s6r0yFDz0je38ekW02aH5efPTNijbJgHIbqfXzm8lBpmBbk9VlUHaJVyZ\\n" + \ diff --git a/gcloud/contrib/appmaker/admin.py b/gcloud/contrib/appmaker/admin.py index 999da77cae..6e3ecf85c1 100755 --- a/gcloud/contrib/appmaker/admin.py +++ b/gcloud/contrib/appmaker/admin.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/contrib/appmaker/models.py b/gcloud/contrib/appmaker/models.py index 03d63b05ef..cd967c1e84 100755 --- a/gcloud/contrib/appmaker/models.py +++ b/gcloud/contrib/appmaker/models.py @@ -1,4 +1,3 @@ -# coding=utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/core/api_adapter/sites/open/user_info.py b/gcloud/core/api_adapter/sites/open/user_info.py index b79789ad69..b40f603731 100644 --- a/gcloud/core/api_adapter/sites/open/user_info.py +++ b/gcloud/core/api_adapter/sites/open/user_info.py @@ -15,7 +15,7 @@ def get_user_info(request): - client = settings.ESB_GET_CLIENT_BY_REQUEST(request) + client = settings.ESB_GET_CLIENT_BY_USER(request.user.username) auth = getattr(client, settings.ESB_AUTH_COMPONENT_SYSTEM) _get_user_info = getattr(auth, settings.ESB_AUTH_GET_USER_INFO) user_info = _get_user_info({}) diff --git a/gcloud/core/apps.py b/gcloud/core/apps.py index 00e218dbd4..58f9a1cd89 100644 --- a/gcloud/core/apps.py +++ b/gcloud/core/apps.py @@ -17,7 +17,6 @@ from django.apps import AppConfig from django.conf import settings - logger = logging.getLogger('root') @@ -35,7 +34,8 @@ def ready(self): 'port': EnvironmentVariables.objects.get_var('BKAPP_REDIS_PORT'), 'password': EnvironmentVariables.objects.get_var('BKAPP_REDIS_PASSWORD'), 'service_name': EnvironmentVariables.objects.get_var('BKAPP_REDIS_SERVICE_NAME'), - 'mode': EnvironmentVariables.objects.get_var('BKAPP_REDIS_MODE') + 'mode': EnvironmentVariables.objects.get_var('BKAPP_REDIS_MODE'), + 'db': EnvironmentVariables.objects.get_var('BKAPP_REDIS_DB'), } except Exception: logger.error(traceback.format_exc()) diff --git a/gcloud/core/command.py b/gcloud/core/command.py index 41141759be..5352cd1c3e 100644 --- a/gcloud/core/command.py +++ b/gcloud/core/command.py @@ -1,4 +1,4 @@ -# coding=utf-8 +# -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available. diff --git a/gcloud/taskflow3/api.py b/gcloud/taskflow3/api.py index ccd75d396a..a567cd5bcf 100644 --- a/gcloud/taskflow3/api.py +++ b/gcloud/taskflow3/api.py @@ -10,22 +10,22 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ - +import copy import json import logging import traceback -from cryptography.fernet import Fernet +from cryptography.fernet import Fernet from django.conf import settings from django.http import JsonResponse, HttpResponseForbidden from django.views.decorators.csrf import csrf_exempt from django.views.decorators.http import require_GET, require_POST +from blueapps.account.decorators import login_exempt from pipeline.engine import api as pipeline_api from pipeline.engine import exceptions, states from pipeline.engine.models import PipelineModel -from blueapps.account.decorators import login_exempt from gcloud.taskflow3.constants import TASK_CREATE_METHOD from gcloud.taskflow3.models import TaskFlowInstance from gcloud.commons.template.models import CommonTemplate @@ -215,12 +215,18 @@ def preview_task_tree(request, biz_cc_id): return HttpResponseForbidden() exclude_task_nodes_id = json.loads(request.POST.get('exclude_task_nodes_id', '[]')) pipeline_tree = template.get_pipeline_tree_by_version(version) + template_constants = copy.deepcopy(pipeline_tree['constants']) try: TaskFlowInstance.objects.preview_pipeline_tree_exclude_task_nodes(pipeline_tree, exclude_task_nodes_id) except Exception as e: logger.exception(e) return JsonResponse({'result': False, 'message': e.message}) - return JsonResponse({'result': True, 'data': {'pipeline_tree': pipeline_tree}}) + constants_not_referred = {key: value for key, value in template_constants.items() + if key not in pipeline_tree['constants']} + return JsonResponse({ + 'result': True, + 'data': {'pipeline_tree': pipeline_tree, 'constants_not_referred': constants_not_referred} + }) @require_POST @@ -304,11 +310,7 @@ def node_callback(request, token): 'message': 'invalid request body' }, status=400) - result, message = TaskFlowInstance.objects.callback(node_id, callback_data) - return JsonResponse({ - 'result': result, - 'message': message - }) + return JsonResponse(TaskFlowInstance.objects.callback(node_id, callback_data)) def get_taskflow_root_context(request, taskflow_id): diff --git a/gcloud/taskflow3/models.py b/gcloud/taskflow3/models.py index 80ea4c2fe3..5ac1e9f05e 100644 --- a/gcloud/taskflow3/models.py +++ b/gcloud/taskflow3/models.py @@ -745,9 +745,15 @@ def callback(self, act_id, data): try: result = pipeline_api.activity_callback(activity_id=act_id, callback_data=data) except Exception as e: - return False, e.message + return { + 'result': False, + 'message': e.message + } - return result.result, result.message + return { + 'result': result.result, + 'message': result.message + } class TaskFlowInstance(models.Model): @@ -956,7 +962,8 @@ def get_node_data(self, node_id, component_code=None, subprocess_stack=None): logger.exception(message) outputs = {'ex_data': message} else: - outputs_data = outputs.get('outputs', {}) + # for some special empty case e.g. '' + outputs_data = outputs.get('outputs') or {} # 在标准插件定义中的预设输出参数 archived_keys = [] for outputs_item in outputs_format: @@ -1093,6 +1100,10 @@ def task_action(self, action, username): logger.exception(message) return {'result': False, 'message': message} + except TypeError: + logger.exception(traceback.format_exc()) + return {'result': False, 'message': 'redis connection error, check redis configuration please'} + except Exception as e: message = u"task[id=%s] action failed:%s" % (self.id, e) logger.exception(message) @@ -1231,7 +1242,9 @@ def get_task_detail(self): 'start_time': format_datetime(self.start_time), 'finish_time': format_datetime(self.finish_time), 'executor': self.executor, - 'elapsed_time': self.elapsed_time + 'elapsed_time': self.elapsed_time, + 'pipeline_tree': self.pipeline_tree, + 'task_url': self.url } exec_data = self.pipeline_instance.execution_data # inputs data @@ -1251,3 +1264,12 @@ def get_task_detail(self): 'ex_data': outputs.get('ex_data', '') }) return data + + def callback(self, act_id, data): + if not self.has_node(act_id): + return { + 'result': False, + 'message': 'task[{tid}] does not have node[{nid}]'.format(tid=self.id, nid=act_id) + } + + return TaskFlowInstance.objects.callback(act_id, data) diff --git a/gcloud/tasktmpl3/api.py b/gcloud/tasktmpl3/api.py index 2c771e950d..3e276ad1c8 100644 --- a/gcloud/tasktmpl3/api.py +++ b/gcloud/tasktmpl3/api.py @@ -180,7 +180,7 @@ def save_perms(request, biz_cc_id): return JsonResponse(ctx) -# TODO: 该方法已迁移至 code/api/get_basic_info ,等待前端完成迁移后删除 +# TODO: 该方法已迁移至 core/api/get_basic_info ,等待前端完成迁移后删除 @require_GET def get_business_basic_info(request, biz_cc_id): """ diff --git a/gcloud/tasktmpl3/sites/open/import_data.py b/gcloud/tasktmpl3/sites/open/import_data.py index a86be44fcb..1df0c10cdd 100644 --- a/gcloud/tasktmpl3/sites/open/import_data.py +++ b/gcloud/tasktmpl3/sites/open/import_data.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py b/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py index 42bf5681bd..5f9fb1fd84 100644 --- a/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py +++ b/gcloud/tasktmpl3/sites/open/import_data_2_to_3.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tasktmpl3/sites/utils.py b/gcloud/tasktmpl3/sites/utils.py index 29c68cc8e8..60d00d09c6 100644 --- a/gcloud/tasktmpl3/sites/utils.py +++ b/gcloud/tasktmpl3/sites/utils.py @@ -1,4 +1,3 @@ -# -*- coding=utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/gcloud/tests/apigw/test_apigw.py b/gcloud/tests/apigw/test_apigw.py index 77ab4589ef..befbba570e 100644 --- a/gcloud/tests/apigw/test_apigw.py +++ b/gcloud/tests/apigw/test_apigw.py @@ -18,8 +18,7 @@ import logging import jsonschema -from django.test import TestCase -from django.test import Client +from django.test import TestCase, Client from pipeline.exceptions import PipelineException @@ -57,8 +56,14 @@ def wrapper(*args, **kwargs): TEST_APP_CODE = 'app_code' TEST_TEMPLATE_ID = '1' # do not change this to non number TEST_TASKFLOW_ID = '2' # do not change this to non number +TEST_TASKFLOW_URL = 'url' +TEST_TASKFLOW_PIPELINE_TREE = 'pipeline_tree' TEST_PERIODIC_TASK_ID = '3' # do not change to this non number TEST_DATA = 'data' +TEST_NODE_ID = 'node_id' +TEST_CALLBACK_DATA = 'callback_data' +TEST_COMPONENT_CODE = 'component_code' +TEST_SUBPROCESS_STACK = '[1, 2, 3]' class APITest(TestCase): @@ -78,6 +83,9 @@ def setUpClass(cls): cls.SET_PERIODIC_TASK_ENABLED_URL = '/apigw/set_periodic_task_enabled/{task_id}/{bk_biz_id}/' cls.MODIFY_PERIODIC_TASK_CRON_URL = '/apigw/modify_cron_for_periodic_task/{task_id}/{bk_biz_id}/' cls.MODIFY_PERIODIC_TASK_CONSTANTS_URL = '/apigw/modify_constants_for_periodic_task/{task_id}/{bk_biz_id}/' + cls.GET_TASK_DETAIL = '/apigw/get_task_detail/{task_id}/{bk_biz_id}/' + cls.GET_TASK_NODE_DETAIL = '/apigw/get_task_node_detail/{task_id}/{bk_biz_id}/' + cls.NODE_CALLBACK = '/apigw/node_callback/{task_id}/{bk_biz_id}/' super(APITest, cls).setUpClass() @@ -296,15 +304,16 @@ def test_get_template_info__for_common_template_does_not_exists(self): @mock.patch(TASKINSTANCE_CREATE, MagicMock(return_value=MockTaskFlowInstance(id=TEST_TASKFLOW_ID))) @mock.patch(APIGW_VIEW_JSON_SCHEMA_VALIDATE, MagicMock()) def test_create_task__success(self): - pt1 = MockPipelineTemplate(id=1, - name='pt1') + pt1 = MockPipelineTemplate(id=1, name='pt1') tmpl = MockTaskTemplate(id=1, pipeline_template=pt1) biz = MockBusiness(cc_id=TEST_BIZ_CC_ID, cc_name=TEST_BIZ_CC_NAME) with mock.patch(BUSINESS_GET, MagicMock(return_value=biz)): with mock.patch(TASKTEMPLATE_SELECT_RELATE, MagicMock(return_value=MockQuerySet(get_result=tmpl))): - assert_data = {'task_id': TEST_TASKFLOW_ID} + assert_data = {'task_id': TEST_TASKFLOW_ID, + 'task_url': TEST_TASKFLOW_URL, + 'pipeline_tree': TEST_TASKFLOW_PIPELINE_TREE} response = self.client.post(path=self.CREATE_TASK_URL.format(template_id=TEST_TEMPLATE_ID, bk_biz_id=TEST_BIZ_CC_ID), data=json.dumps({'name': 'name', @@ -345,7 +354,9 @@ def test_create_task__success(self): tmpl = MockCommonTemplate(id=1, pipeline_template=pt1) with mock.patch(COMMONTEMPLATE_SELECT_RELATE, MagicMock(return_value=MockQuerySet(get_result=tmpl))): - assert_data = {'task_id': TEST_TASKFLOW_ID} + assert_data = {'task_id': TEST_TASKFLOW_ID, + 'task_url': TEST_TASKFLOW_URL, + 'pipeline_tree': TEST_TASKFLOW_PIPELINE_TREE} response = self.client.post(path=self.CREATE_TASK_URL.format(template_id=TEST_TEMPLATE_ID, bk_biz_id=TEST_BIZ_CC_ID), data=json.dumps({'name': 'name', @@ -941,3 +952,97 @@ def test_modify_constants_for_periodic_task__modify_constants_raise(self): self.assertFalse(data['result']) self.assertTrue('message' in data) + + def test_get_task_detail__success(self): + mock_taskflow = MockTaskFlowInstance(get_task_detail_return=TEST_DATA) + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_taskflow)): + assert_data = TEST_DATA + response = self.client.get(path=self.GET_TASK_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID)) + + data = json.loads(response.content) + + self.assertTrue(data['result']) + self.assertEqual(data['data'], assert_data) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_get_task_detail__success__taskflow_does_not_exists(self): + response = self.client.get(path=self.GET_TASK_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID)) + + data = json.loads(response.content) + + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_get_task_node_detail__success(self): + mock_taskflow = MockTaskFlowInstance(get_node_detail_return={'result': True, 'data': TEST_DATA}) + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_taskflow)): + assert_data = TEST_DATA + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': TEST_SUBPROCESS_STACK}) + + data = json.loads(response.content) + + self.assertTrue(data['result']) + self.assertEqual(data['data'], assert_data) + mock_taskflow.get_node_detail.assert_called_once_with(TEST_NODE_ID, + TEST_COMPONENT_CODE, + json.loads(TEST_SUBPROCESS_STACK)) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_get_task_node_detail__taskflow_doest_not_exist(self): + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': TEST_SUBPROCESS_STACK}) + + data = json.loads(response.content) + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_get_task_node_detail__with_invalid_subprocess_stack(self): + response = self.client.get(path=self.GET_TASK_NODE_DETAIL.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data={'node_id': TEST_NODE_ID, + 'component_code': TEST_COMPONENT_CODE, + 'subprocess_stack': 'abcdefg'}) + + data = json.loads(response.content) + self.assertFalse(data['result']) + self.assertTrue('message' in data) + + def test_node_callback__success(self): + mock_instance = MockTaskFlowInstance() + with mock.patch(TASKINSTANCE_GET, MagicMock(return_value=mock_instance)): + response = self.client.post(path=self.NODE_CALLBACK.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data=json.dumps({ + 'node_id': TEST_NODE_ID, + 'callback_data': TEST_CALLBACK_DATA + }), + content_type='application/json') + + data = json.loads(response.content) + + self.assertTrue(data['result']) + mock_instance.callback.assert_called_once_with(TEST_NODE_ID, TEST_CALLBACK_DATA) + + @mock.patch(TASKINSTANCE_GET, MagicMock(side_effect=TaskFlowInstance.DoesNotExist())) + def test_node_callback__taskflow_does_not_exists(self): + response = self.client.post(path=self.NODE_CALLBACK.format(task_id=TEST_TASKFLOW_ID, + bk_biz_id=TEST_BIZ_CC_ID), + data=json.dumps({ + 'node_id': TEST_NODE_ID, + 'callback_data': TEST_CALLBACK_DATA + }), + content_type='application/json') + + data = json.loads(response.content) + + self.assertFalse(data['result']) + self.assertTrue('message' in data) diff --git a/gcloud/tests/mock.py b/gcloud/tests/mock.py index b22264e1e8..989c062035 100644 --- a/gcloud/tests/mock.py +++ b/gcloud/tests/mock.py @@ -19,6 +19,18 @@ from django.utils.timezone import now +class MockRequest(object): + def __init__(self, method, data): + self.method = method + setattr(self, method, data) + self.user = MagicMock() + + +class MockJsonResponse(object): + def __call__(self, dct): + return dct + + class MockBusiness(object): def __init__(self, **kwargs): self.cc_id = kwargs.get('cc_id', 'cc_id') @@ -42,7 +54,9 @@ def __init__(self, **kwargs): self.name = kwargs.get('name', 'name') self.category = kwargs.get('category', 'category') self.pipeline_template = kwargs.get('pipeline_template', MockPipelineTemplate()) - self.pipeline_tree = {'line': 'line', 'location': 'location', 'activities': []} + self.pipeline_tree = kwargs.get('pipeline_tree', + {'line': 'line', 'location': 'location', 'activities': []}) + self.get_pipeline_tree_by_version = MagicMock(return_value=self.pipeline_tree) class MockTaskTemplate(MockBaseTemplate): @@ -62,6 +76,13 @@ def __init__(self, **kwargs): 'side_effect': kwargs.get('get_status_raise')}) self.format_pipeline_status = MagicMock(**{'return_value': kwargs.get('format_pipeline_status_return'), 'side_effect': kwargs.get('format_pipeline_status_raise')}) + self.url = kwargs.get('url', 'url') + self.pipeline_tree = kwargs.get('pipeline_tree', 'pipeline_tree') + self.callback = MagicMock(return_value=kwargs.get('callback_return', {'result': True, + 'message': 'success'})) + self.get_task_detail = MagicMock(return_value=kwargs.get('get_task_detail_return', 'task_detail')) + self.get_node_detail = MagicMock(return_value=kwargs.get('get_node_detail_return', {'result': True, + 'data': 'data'})) class MockPeriodicTask(object): diff --git a/gcloud/tests/mock_settings.py b/gcloud/tests/mock_settings.py index d858a86308..3c37301c32 100644 --- a/gcloud/tests/mock_settings.py +++ b/gcloud/tests/mock_settings.py @@ -25,6 +25,9 @@ TASKINSTANCE_FORMAT_STATUS = 'gcloud.taskflow3.models.TaskFlowInstance.format_pipeline_status' TASKINSTANCE_EXTEN_CLASSIFIED_COUNT = 'gcloud.taskflow3.models.TaskFlowInstance.objects.extend_classified_count' TASKINSTANCE_PREVIEW_TREE = 'gcloud.taskflow3.models.TaskFlowInstance.objects.preview_pipeline_tree_exclude_task_nodes' +TASKINSTANCE_OBJECTS_CALLBACK = 'gcloud.taskflow3.models.TaskFlowInstance.objects.callback' +TASKINSTANCE_CALLBACK = 'gcloud.taskflow3.models.TaskFlowInstance.callback' +TASKINSTANCE_HAS_NODE = 'gcloud.taskflow3.models.TaskFlowInstance.has_node' PERIODIC_TASK_FILTER = 'gcloud.periodictask.models.PeriodicTask.objects.filter' PERIODIC_TASK_GET = 'gcloud.periodictask.models.PeriodicTask.objects.get' diff --git a/gcloud/tests/taskflow3/models/test_taskflow_instance.py b/gcloud/tests/taskflow3/models/test_taskflow_instance.py new file mode 100644 index 0000000000..2d82c91cdb --- /dev/null +++ b/gcloud/tests/taskflow3/models/test_taskflow_instance.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. +""" + +from django.test import TestCase + +from gcloud.taskflow3.models import TaskFlowInstance +from gcloud.tests.mock import * # noqa +from gcloud.tests.mock_settings import * # noqa + + +class TaskflowTestCase(TestCase): + + def test_callback(self): + instance = TaskFlowInstance() + + objects_callback_return = {'result': True, 'message': 'success'} + + with mock.patch(TASKINSTANCE_OBJECTS_CALLBACK, MagicMock(return_value=objects_callback_return)): + with mock.patch(TASKINSTANCE_HAS_NODE, MagicMock(return_value=False)): + result = instance.callback('act_id', 'data') + self.assertFalse(result['result']) + self.assertTrue('message' in result) + TaskFlowInstance.objects.callback.assert_not_called() + + with mock.patch(TASKINSTANCE_HAS_NODE, MagicMock(return_value=True)): + result = instance.callback('act_id', 'data') + self.assertTrue(result['result']) + self.assertTrue('message' in result) + TaskFlowInstance.objects.callback.assert_called_once_with('act_id', 'data') diff --git a/gcloud/tests/taskflow3/test_api.py b/gcloud/tests/taskflow3/test_api.py new file mode 100644 index 0000000000..d468509644 --- /dev/null +++ b/gcloud/tests/taskflow3/test_api.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. +""" + +from __future__ import absolute_import + +from copy import deepcopy + +from django.test import TestCase, Client + +from pipeline.utils.uniqid import node_uniqid + +from gcloud.tests.mock import * # noqa +from gcloud.tests.mock_settings import * # noqa +from gcloud.taskflow3 import api + + +TEST_BIZ_CC_ID = '2' # do not change this to non number +TEST_ID_LIST = [node_uniqid() for i in range(10)] +TEST_PIPELINE_TREE = { + 'id': TEST_ID_LIST[0], + 'name': 'name', + 'start_event': { + 'id': TEST_ID_LIST[1], + 'name': 'start', + 'type': 'EmptyStartEvent', + 'incoming': None, + 'outgoing': TEST_ID_LIST[5] + }, + 'end_event': { + 'id': TEST_ID_LIST[2], + 'name': 'end', + 'type': 'EmptyEndEvent', + 'incoming': TEST_ID_LIST[7], + 'outgoing': None + }, + 'activities': { + TEST_ID_LIST[3]: { + 'id': TEST_ID_LIST[3], + 'type': 'ServiceActivity', + 'name': 'first_task', + 'incoming': TEST_ID_LIST[5], + 'outgoing': TEST_ID_LIST[6], + 'optional': True, + 'component': { + 'code': 'test', + 'data': { + 'input_test': { + 'hook': False, + 'value': '${custom_key1}', + }, + 'radio_test': { + 'hook': False, + 'value': '1', + }, + }, + } + }, + TEST_ID_LIST[4]: { + 'id': TEST_ID_LIST[4], + 'type': 'ServiceActivity', + 'name': 'first_task', + 'incoming': TEST_ID_LIST[6], + 'outgoing': TEST_ID_LIST[7], + 'optional': True, + 'component': { + 'code': 'test', + 'data': { + 'input_test': { + 'hook': True, + 'value': '${custom_key2}' + }, + 'radio_test': { + 'hook': False, + 'value': '2' + }, + }, + } + }, + }, + 'flows': { # 存放该 Pipeline 中所有的线 + TEST_ID_LIST[5]: { + 'id': TEST_ID_LIST[5], + 'source': TEST_ID_LIST[1], + 'target': TEST_ID_LIST[3] + }, + TEST_ID_LIST[6]: { + 'id': TEST_ID_LIST[6], + 'source': TEST_ID_LIST[3], + 'target': TEST_ID_LIST[4] + }, + TEST_ID_LIST[7]: { + 'id': TEST_ID_LIST[7], + 'source': TEST_ID_LIST[4], + 'target': TEST_ID_LIST[2] + }, + }, + 'gateways': { # 这里存放着网关的详细信息 + }, + 'constants': { + '${custom_key1}': { + 'index': 0, + 'name': 'input1', + 'key': '${custom_key1}', + 'desc': '', + 'validation': '^.*$', + 'show_type': 'show', + 'value': 'value1', + 'source_type': 'custom', + 'source_tag': '', + 'source_info': {}, + 'custom_type': 'input', + }, + '${custom_key2}': { + 'index': 1, + 'name': 'input2', + 'key': '${custom_key2}', + 'desc': '', + 'validation': '^.*$', + 'show_type': 'show', + 'value': 'value1', + 'source_type': 'custom', + 'source_tag': '', + 'source_info': {}, + 'custom_type': 'input', + }, + }, + 'outputs': ['${custom_key1}'], +} + + +class APITest(TestCase): + + def setUp(self): + self.PREVIEW_TASK_TREE_URL = '/taskflow/api/preview_task_tree/{biz_cc_id}/' + self.client = Client() + + @mock.patch('gcloud.taskflow3.api.JsonResponse', MockJsonResponse()) + def test_preview_task_tree__constants_not_referred(self): + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data1 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s"]' % TEST_ID_LIST[3] + } + result = api.preview_task_tree(MockRequest('POST', data1), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key1}']) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data2 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s"]' % TEST_ID_LIST[4] + } + result = api.preview_task_tree(MockRequest('POST', data2), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key2}']) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data3 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '[]' + } + result = api.preview_task_tree(MockRequest('POST', data3), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), []) + + with mock.patch(TASKTEMPLATE_GET, + MagicMock(return_value=MockBaseTemplate(id=1, pipeline_tree=deepcopy(TEST_PIPELINE_TREE)))): + data4 = { + 'template_source': 'business', + 'template_id': 1, + 'version': 'test_version', + 'exclude_task_nodes_id': '["%s", "%s"]' % (TEST_ID_LIST[3], TEST_ID_LIST[4]) + } + result = api.preview_task_tree(MockRequest('POST', data4), TEST_BIZ_CC_ID) + self.assertTrue(result['result']) + self.assertEquals(result['data']['constants_not_referred'].keys(), ['${custom_key1}', '${custom_key2}']) diff --git a/gcloud/webservice3/resources.py b/gcloud/webservice3/resources.py index 52c4fe6403..31747b2c84 100644 --- a/gcloud/webservice3/resources.py +++ b/gcloud/webservice3/resources.py @@ -12,12 +12,13 @@ """ import datetime +import logging from django.utils import timezone from django.db.models import Q from django.forms.fields import BooleanField from django.utils.translation import ugettext_lazy as _ -from django.http.response import HttpResponseForbidden, HttpResponse +from django.http.response import HttpResponseForbidden from guardian.shortcuts import get_objects_for_user from haystack.query import SearchQuerySet from tastypie import fields @@ -30,16 +31,20 @@ from pipeline.component_framework.library import ComponentLibrary from pipeline.component_framework.models import ComponentModel -from pipeline.core.data.library import VariableLibrary -from pipeline.models import VariableModel - +from pipeline.variable_framework.models import VariableModel from gcloud import exceptions from gcloud.core.models import Business +from gcloud.core.utils import ( + name_handler, + prepare_user_business, +) from gcloud.core.api_adapter import is_user_functor, is_user_auditor -from gcloud.core.utils import name_handler, prepare_user_business from gcloud.core.constant import TEMPLATE_NODE_NAME_MAX_LENGTH +logger = logging.getLogger('root') + + def pipeline_node_name_handle(pipeline_tree): for value in pipeline_tree.values(): if isinstance(value, dict): @@ -259,9 +264,7 @@ def apply_filters(self, request, applicable_filters): query = applicable_filters.pop('q') else: query = None - queryset = super(GCloudModelResource, self).apply_filters( - request, - applicable_filters) + queryset = super(GCloudModelResource, self).apply_filters(request, applicable_filters) return queryset.filter(query) if query else queryset def wrap_view(self, view): @@ -322,13 +325,9 @@ def get_object_list(self, request): try: # fetch business from CMDB biz_list = prepare_user_business(request) - except exceptions.Unauthorized: - return HttpResponse(status=401) - except exceptions.Forbidden: - # target business does not exist (irregular request) - return HttpResponseForbidden() - except exceptions.APIError as e: - return HttpResponse(status=503, content=e.error) + except (exceptions.Unauthorized, exceptions.Forbidden, exceptions.APIError) as e: + logger.error(u'get business list[username=%s] from CMDB raise error: %s' % (request.user.username, e)) + return super(BusinessResource, self).get_object_list(request) cc_id_list = [biz.cc_id for biz in biz_list] return super(BusinessResource, self).get_object_list(request).filter(cc_id__in=cc_id_list) @@ -340,7 +339,7 @@ class ComponentModelResource(ModelResource): null=True) class Meta: - queryset = ComponentModel.objects.filter(status=1).order_by('name') + queryset = ComponentModel.objects.filter(status=True).order_by('name') resource_name = 'component' excludes = ['status', 'id'] detail_uri_name = 'code' @@ -378,27 +377,32 @@ def alter_detail_data_to_serialize(self, request, data): class VariableModelResource(ModelResource): + name = fields.CharField( + attribute='name', + readonly=True, + null=True) + form = fields.CharField( + attribute='form', + readonly=True, + null=True) + type = fields.CharField( + attribute='type', + readonly=True, + null=True) + tag = fields.CharField( + attribute='tag', + readonly=True, + null=True) + meta_tag = fields.CharField( + attribute='meta_tag', + readonly=True, + null=True) + class Meta: - queryset = VariableModel.objects.filter(status=1) + queryset = VariableModel.objects.filter(status=True) resource_name = 'variable' excludes = ['status', 'id'] detail_uri_name = 'code' ordering = ['id'] authorization = ReadOnlyAuthorization() limit = 0 - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - var = VariableLibrary.get_var_class(bundle.data['code']) - bundle.data['form'] = var.form - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - var = VariableLibrary.get_var_class(bundle.data['code']) - is_meta = request.GET.get('meta', False) - form = getattr(var, 'meta_form') if bool(int(is_meta)) else var.form - bundle.data['form'] = form - - return data diff --git a/issue_template.md b/issue_template.md index c7eef6dcb6..a5b383a397 100644 --- a/issue_template.md +++ b/issue_template.md @@ -1,23 +1,23 @@ 问题描述 ======= -<这里写问题描述> + 重现方法 ======= -<列出如何重现的方法或操作步骤> + -**重要提醒**: 请优先尝试部署使用最新发布的版本 (发布清单: https://github.com/Tencent/bk-sops/releases), 如果问题不能在最新发布的版本里重现,说明此问题已经被修复。 + 关键信息 ======= -**重要提醒**: 这些关键信息会辅助我们快速定位问题。 + 请提供以下信息: - - [x] bk_sops 版本 (发布版本号 或 git tag): `<示例: V3.1.32-ce 或者 git sha. 请不要使用 "最新版本" 或 "当前版本"等无法准确定位代码版本的语句描述>` - - [ ] 蓝鲸PaaS 版本: `<示例:PaaS 3.0.58、PaaSAgent 3.0.9>` - - [ ] bk_sops 异常日志 + - [x] bk-sops 版本 (发布版本号 或 git tag): + - [ ] 蓝鲸PaaS 版本: + - [ ] bk_sops 异常日志: diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index f4ed5c52e81e132f179ba15d2143134535e94038..b9f292993073f8ff629e73bf0980ee2008254a17 100644 GIT binary patch delta 9432 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 qIw^VXx+xvqt5O+D{C2k7Kc=3wkJb}u(f\n" "Language: en\n" @@ -18,2046 +18,1761 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: bk_api/sites/clouds/utils.py:40 bk_api/utils.py:78 -msgid "请求返回数据格式错误!" -msgstr "Request return data format error!" - -#: bk_api/sites/clouds/utils.py:41 bk_api/utils.py:79 -msgid "调用远程服务失败,Http请求返回数据格式错误!" -msgstr "Remote service called failed, HTTP request data return format error!" - -#: bk_api/utils.py:81 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" -msgstr "Remote service called failed, HTTP request error status error: %(code)s, request url: %(url)s" - -#: bk_api/sites/bkopen/app_maker.py:49 bk_api/sites/clouds/app_maker.py:73 -#, python-format -msgid "调用创建app maker接口失败,错误信息:%s" -msgstr "Creating app maker API called failed, error: %s" - -#: bk_api/sites/bkopen/app_maker.py:50 bk_api/sites/clouds/app_maker.py:74 -msgid "调用创建app maker接口失败" -msgstr "App maker API called failed" - -#: bk_api/sites/bkopen/app_maker.py:83 bk_api/sites/bkopen/app_maker.py:103 -#: bk_api/sites/clouds/app_maker.py:109 bk_api/sites/clouds/app_maker.py:129 -#, python-format -msgid "调用修改app maker接口失败,错误信息:%s" -msgstr "Updating app maker API called failed, error: %s" - -#: bk_api/sites/bkopen/app_maker.py:84 bk_api/sites/bkopen/app_maker.py:104 -#: bk_api/sites/clouds/app_maker.py:110 bk_api/sites/clouds/app_maker.py:130 -msgid "调用修改app maker接口失败" -msgstr "Updating app maker API called failed" - -#: bk_api/sites/clouds/app_maker.py:151 -#, python-format -msgid "调用修改 LOGO 接口失败,错误信息:%s" -msgstr "todo:%s" - -#: bk_api/sites/clouds/app_maker.py:152 -msgid "调用修改 LOGO 接口失败" -msgstr "todo" - -#: bk_api/sites/clouds/utils.py:43 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%s" -msgstr "Remote service called failed, HTTP request error status error: %s" - -#: blueapps/account/admin.py:13 +#: blueapps/account/admin.py:25 msgid "Personal info" msgstr "Personal info" -#: blueapps/account/admin.py:14 +#: blueapps/account/admin.py:26 msgid "Permissions" msgstr "Permissions" -#: blueapps/account/admin.py:16 +#: blueapps/account/admin.py:28 msgid "Important dates" msgstr "Important dates" -#: blueapps/account/apps.py:9 +#: blueapps/account/apps.py:21 msgid "account" msgstr "account" -#: blueapps/account/models.py:53 +#: blueapps/account/models.py:65 msgid "username" msgstr "username" -#: blueapps/account/models.py:56 blueapps/account/models.py:147 +#: blueapps/account/models.py:68 blueapps/account/models.py:159 msgid "Required. 64 characters or fewer. Letters, digits and underlined only." msgstr "Required. 64 characters or fewer. Letters, digits and underlined only." -#: blueapps/account/models.py:60 +#: blueapps/account/models.py:72 msgid "Enter a valid openid. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid openid. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:66 +#: blueapps/account/models.py:78 msgid "A user with that openid already exists." msgstr "A user with that openid already exists." -#: blueapps/account/models.py:71 +#: blueapps/account/models.py:83 msgid "nick name" msgstr "nick name" -#: blueapps/account/models.py:74 +#: blueapps/account/models.py:86 msgid "Required. 64 characters or fewer." msgstr "Required. 64 characters or fewer." -#: blueapps/account/models.py:77 +#: blueapps/account/models.py:89 msgid "staff status" msgstr "staff status" -#: blueapps/account/models.py:79 +#: blueapps/account/models.py:91 msgid "Designates whether the user can log into this admin site." msgstr "Designates whether the user can log into this admin site." -#: blueapps/account/models.py:83 +#: blueapps/account/models.py:95 msgid "active" msgstr "active" -#: blueapps/account/models.py:85 +#: blueapps/account/models.py:97 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." -#: blueapps/account/models.py:89 +#: blueapps/account/models.py:101 msgid "date joined" msgstr "date joined" -#: blueapps/account/models.py:99 +#: blueapps/account/models.py:111 msgid "user" msgstr "user" -#: blueapps/account/models.py:100 +#: blueapps/account/models.py:112 msgid "users" msgstr "users" -#: blueapps/account/models.py:151 +#: blueapps/account/models.py:163 msgid "Enter a valid key. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid key. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:160 +#: blueapps/account/models.py:172 msgid "user property" msgstr "user property" -#: blueapps/account/models.py:161 +#: blueapps/account/models.py:173 msgid "user properties" msgstr "user properties" -#: config/default.py:141 +#: config/default.py:152 msgid "English" msgstr "English" -#: config/default.py:142 +#: config/default.py:153 msgid "简体中文" msgstr "简体中文" -#: django_signal_valve/models.py:36 +#: django_signal_valve/models.py:48 msgid "信号模块名" msgstr "Signal module name" -#: django_signal_valve/models.py:37 +#: django_signal_valve/models.py:49 msgid "信号属性名" msgstr "Signal property name" -#: django_signal_valve/models.py:38 +#: django_signal_valve/models.py:50 msgid "信号参数" msgstr "Signal parameters" -#: gcloud/exceptions.py:27 +#: gcloud/exceptions.py:39 msgid "请求第三方系统" msgstr "Requesting third party system" -#: gcloud/exceptions.py:29 +#: gcloud/exceptions.py:41 msgid "接口" msgstr "API" -#: gcloud/exceptions.py:31 +#: gcloud/exceptions.py:43 msgid "异常" msgstr "exception" -#: gcloud/exceptions.py:33 +#: gcloud/exceptions.py:45 msgid "请联系第三方系统负责人处理" msgstr "Please contact the API system maintenance person to handle" -#: gcloud/commons/message/common.py:6 +#: gcloud/commons/message/common.py:18 msgid "【标准运维APP通知】执行失败" msgstr "[SOPS APP Notice] Task Field" -#: gcloud/commons/message/common.py:7 +#: gcloud/commons/message/common.py:19 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "Your task[{task_name}] in business[{cc_name}] executed failed, current failed node is [{node_name}], executor is [{executor}].Please go to SOPS[{url}] to view details." -#: gcloud/commons/message/common.py:19 +#: gcloud/commons/message/common.py:31 msgid "【标准运维APP通知】执行完成" msgstr "[SOPS APP Notice] Task Finished" -#: gcloud/commons/message/common.py:20 +#: gcloud/commons/message/common.py:32 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "Your task[{task_name}] in business[{cc_name}] executed successfully, executor is [{executor}].Please go to SOPS[{url}] to view details." -#: gcloud/commons/message/common.py:31 +#: gcloud/commons/message/common.py:43 msgid "【标准运维APP通知】周期任务启动失败" msgstr "[BK_SOPS Notification]Periodic task start failed" -#: gcloud/commons/message/common.py:32 +#: gcloud/commons/message/common.py:44 msgid "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" msgstr "Periodic task[{task_name}]in business [{cc_name}] which should be schedule at [{start_time}] started failed, error message: [{ex_data}]" -#: gcloud/commons/template/models.py:162 +#: gcloud/commons/template/models.py:174 msgid "模板类型" msgstr "Template Type" -#: gcloud/commons/template/models.py:172 +#: gcloud/commons/template/models.py:184 msgid "收藏模板的人" msgstr "Template favorited by" -#: gcloud/commons/template/models.py:174 +#: gcloud/commons/template/models.py:186 msgid "流程事件通知方式" msgstr "Events Notify Types" -#: gcloud/commons/template/models.py:179 +#: gcloud/commons/template/models.py:191 msgid "流程事件通知人" msgstr "Events Notify personnel" -#: gcloud/commons/template/models.py:182 +#: gcloud/commons/template/models.py:194 msgid "流程超时时间(分钟)" msgstr "Time-out" -#: gcloud/commons/template/models.py:185 gcloud/contrib/appmaker/models.py:279 -#: gcloud/taskflow3/models.py:768 pipeline/models.py:272 +#: gcloud/commons/template/models.py:197 gcloud/contrib/appmaker/models.py:292 +#: gcloud/taskflow3/models.py:780 pipeline/models.py:284 msgid "是否删除" msgstr "Deleted" -#: gcloud/commons/template/models.py:330 gcloud/commons/template/models.py:331 +#: gcloud/commons/template/models.py:342 gcloud/commons/template/models.py:343 msgid "公共流程模板 CommonTemplate" msgstr "Common Template" -#: gcloud/commons/template/models.py:341 gcloud/commons/template/models.py:342 +#: gcloud/commons/template/models.py:353 gcloud/commons/template/models.py:354 msgid "通用流程模板ID" msgstr "Common Template ID" -#: gcloud/commons/template/models.py:348 gcloud/commons/template/models.py:349 +#: gcloud/commons/template/models.py:360 gcloud/commons/template/models.py:361 msgid "公共流程模板权限 CommonTmplPerm" msgstr "Common Template Permission" -#: gcloud/conf/sites/community/ver_settings.py:29 +#: gcloud/conf/sites/community/ver_settings.py:41 msgid "蓝鲸智云社区版" msgstr "BK Community Edition" -#: gcloud/conf/sites/enterprise/ver_settings.py:29 -#: gcloud/conf/sites/ieod/ver_settings.py:32 -msgid "蓝鲸智云企业版" -msgstr "BK Enterprise Edition" - -#: gcloud/contrib/appmaker/api.py:36 +#: gcloud/contrib/appmaker/api.py:48 #, python-format msgid "参数格式错误:%s" msgstr "Parameters format error: %s" -#: gcloud/contrib/appmaker/api.py:44 +#: gcloud/contrib/appmaker/api.py:56 msgid "请上传 jpg 或 png 格式的图片" msgstr "Please upload a picture in jpg or png format" -#: gcloud/contrib/appmaker/api.py:48 +#: gcloud/contrib/appmaker/api.py:60 msgid "LOGO 文件大小必须小于 100K" msgstr "The size of LOGO must less than 100K" -#: gcloud/contrib/appmaker/api.py:53 +#: gcloud/contrib/appmaker/api.py:65 msgid "图片格式非法" msgstr "Illegal picture format" -#: gcloud/contrib/appmaker/models.py:58 +#: gcloud/contrib/appmaker/models.py:71 msgid "保存失败,引用的流程模板不存在!" msgstr "Save failed, the referenced flow template does not exist " -#: gcloud/contrib/appmaker/models.py:101 +#: gcloud/contrib/appmaker/models.py:114 #, python-format msgid "创建轻应用失败:%s" msgstr "Failed to create Mini-App: %s" -#: gcloud/contrib/appmaker/models.py:118 +#: gcloud/contrib/appmaker/models.py:131 msgid "保存失败,当前操作的轻应用不存在或已删除!" msgstr "Save failed, Mini-App of current operation does not exist or has been deleted!" -#: gcloud/contrib/appmaker/models.py:136 +#: gcloud/contrib/appmaker/models.py:149 #, python-format msgid "编辑轻应用失败:%s" msgstr "Failed to edit Mini-App: %s" -#: gcloud/contrib/appmaker/models.py:172 +#: gcloud/contrib/appmaker/models.py:185 msgid "当前操作的轻应用不存在或已删除!" msgstr "Mini-App of current operation does not exist or has been deleted!" -#: gcloud/contrib/appmaker/models.py:183 gcloud/contrib/appmaker/models.py:189 +#: gcloud/contrib/appmaker/models.py:196 gcloud/contrib/appmaker/models.py:202 #, python-format msgid "删除失败:%s" msgstr "Delete failed: %s" -#: gcloud/contrib/appmaker/models.py:266 gcloud/tasktmpl3/models.py:434 +#: gcloud/contrib/appmaker/models.py:279 gcloud/tasktmpl3/models.py:446 msgid "所属业务" msgstr "Business" -#: gcloud/contrib/appmaker/models.py:267 +#: gcloud/contrib/appmaker/models.py:280 msgid "APP名称" msgstr "APP name" -#: gcloud/contrib/appmaker/models.py:268 +#: gcloud/contrib/appmaker/models.py:281 msgid "APP编码" msgstr "APP code" -#: gcloud/contrib/appmaker/models.py:269 +#: gcloud/contrib/appmaker/models.py:282 msgid "APP基本信息" msgstr "APP basic information" -#: gcloud/contrib/appmaker/models.py:270 +#: gcloud/contrib/appmaker/models.py:283 msgid "APP描述信息" msgstr "APP description information" -#: gcloud/contrib/appmaker/models.py:271 +#: gcloud/contrib/appmaker/models.py:284 msgid "轻应用logo存放地址" msgstr "Mini-App logo url" -#: gcloud/contrib/appmaker/models.py:272 +#: gcloud/contrib/appmaker/models.py:285 msgid "gcloud链接" msgstr "gcloud link" -#: gcloud/contrib/appmaker/models.py:273 +#: gcloud/contrib/appmaker/models.py:286 msgid "创建人" msgstr "Creator" -#: gcloud/contrib/appmaker/models.py:274 pipeline/engine/models/core.py:803 -#: pipeline/models.py:66 pipeline/models.py:264 pipeline/models.py:578 +#: gcloud/contrib/appmaker/models.py:287 pipeline/engine/models/core.py:815 +#: pipeline/models.py:78 pipeline/models.py:276 pipeline/models.py:590 msgid "创建时间" msgstr "Creation time" -#: gcloud/contrib/appmaker/models.py:275 +#: gcloud/contrib/appmaker/models.py:288 msgid "编辑人" msgstr "Last Modified" -#: gcloud/contrib/appmaker/models.py:276 +#: gcloud/contrib/appmaker/models.py:289 msgid "编辑时间" msgstr "Date modified" -#: gcloud/contrib/appmaker/models.py:277 +#: gcloud/contrib/appmaker/models.py:290 msgid "关联模板" msgstr "Referenced template" -#: gcloud/contrib/appmaker/models.py:278 +#: gcloud/contrib/appmaker/models.py:291 msgid "执行方案" msgstr "Executing Plan" -#: gcloud/contrib/appmaker/models.py:303 gcloud/contrib/appmaker/models.py:304 +#: gcloud/contrib/appmaker/models.py:316 gcloud/contrib/appmaker/models.py:317 msgid "轻应用 AppMaker" msgstr "Mini-APP" -#: gcloud/contrib/function/models.py:11 +#: gcloud/contrib/function/models.py:23 msgid "未认领" msgstr "To be claim" -#: gcloud/contrib/function/models.py:12 +#: gcloud/contrib/function/models.py:24 msgid "已认领" msgstr "Claimed" -#: gcloud/contrib/function/models.py:13 +#: gcloud/contrib/function/models.py:25 msgid "已驳回" msgstr "Rejected" -#: gcloud/contrib/function/models.py:14 +#: gcloud/contrib/function/models.py:26 msgid "已执行" msgstr "Executed" -#: gcloud/contrib/function/models.py:15 gcloud/taskflow3/models.py:441 -#: gcloud/tasktmpl3/models.py:195 +#: gcloud/contrib/function/models.py:27 gcloud/taskflow3/models.py:453 +#: gcloud/tasktmpl3/models.py:207 msgid "已完成" msgstr "Finished" -#: gcloud/contrib/function/models.py:23 +#: gcloud/contrib/function/models.py:35 msgid "职能化单" msgstr "Functional bill" -#: gcloud/contrib/function/models.py:24 +#: gcloud/contrib/function/models.py:36 msgid "提单人" msgstr "Submitter" -#: gcloud/contrib/function/models.py:25 +#: gcloud/contrib/function/models.py:37 msgid "提单时间" msgstr "Date submitted" -#: gcloud/contrib/function/models.py:26 +#: gcloud/contrib/function/models.py:38 msgid "认领人" msgstr "Claimer" -#: gcloud/contrib/function/models.py:27 +#: gcloud/contrib/function/models.py:39 msgid "认领时间" msgstr "Date claimed" -#: gcloud/contrib/function/models.py:28 +#: gcloud/contrib/function/models.py:40 msgid "驳回人" msgstr "Rejecter" -#: gcloud/contrib/function/models.py:29 +#: gcloud/contrib/function/models.py:41 msgid "驳回时间" msgstr "Date rejected" -#: gcloud/contrib/function/models.py:30 +#: gcloud/contrib/function/models.py:42 msgid "转单人" msgstr "Predecessor" -#: gcloud/contrib/function/models.py:31 +#: gcloud/contrib/function/models.py:43 msgid "转单时间" msgstr "Date transferred" -#: gcloud/contrib/function/models.py:32 +#: gcloud/contrib/function/models.py:44 msgid "单据状态" msgstr "Bill Status" -#: gcloud/contrib/function/models.py:38 gcloud/contrib/function/models.py:39 +#: gcloud/contrib/function/models.py:50 gcloud/contrib/function/models.py:51 msgid "职能化认领单 FunctionTask" msgstr "Functional Bill" -#: gcloud/core/api.py:24 +#: gcloud/core/api.py:36 msgid "用户默认业务切换成功" msgstr "Change default business successfully" -#: gcloud/core/api.py:59 +#: gcloud/core/api.py:71 #, python-format msgid "所有%s" msgstr "All %ss" -#: gcloud/core/constant.py:7 +#: gcloud/core/constant.py:18 msgid "运维工具" msgstr "OPS Tools" -#: gcloud/core/constant.py:8 +#: gcloud/core/constant.py:19 msgid "监控告警" msgstr "Alarm" -#: gcloud/core/constant.py:9 +#: gcloud/core/constant.py:20 msgid "配置管理" msgstr "Conf Manage" -#: gcloud/core/constant.py:10 +#: gcloud/core/constant.py:21 msgid "开发工具" msgstr "Dev Tools" -#: gcloud/core/constant.py:11 +#: gcloud/core/constant.py:22 msgid "企业IT" msgstr "Enterprise IT" -#: gcloud/core/constant.py:12 +#: gcloud/core/constant.py:23 msgid "办公应用" msgstr "Office App" -#: gcloud/core/constant.py:13 +#: gcloud/core/constant.py:24 msgid "其它" msgstr "Others" -#: gcloud/core/constant.py:18 +#: gcloud/core/constant.py:29 msgid "默认任务流程" msgstr "Default Task Flow" -#: gcloud/core/constant.py:19 +#: gcloud/core/constant.py:30 msgid "职能化任务流程" msgstr "Functional Task Flow" -#: gcloud/core/constant.py:26 gcloud/core/constant.py:32 +#: gcloud/core/constant.py:37 gcloud/core/constant.py:43 msgid "步骤选择" msgstr "Step Selection" -#: gcloud/core/constant.py:27 +#: gcloud/core/constant.py:38 msgid "参数填写" msgstr "Parameter Enter" -#: gcloud/core/constant.py:28 gcloud/core/constant.py:35 +#: gcloud/core/constant.py:39 gcloud/core/constant.py:46 msgid "任务执行" msgstr "Task Execution" -#: gcloud/core/constant.py:29 gcloud/core/constant.py:36 +#: gcloud/core/constant.py:40 gcloud/core/constant.py:47 msgid "完成" msgstr "Complete" -#: gcloud/core/constant.py:33 +#: gcloud/core/constant.py:44 msgid "提交需求" msgstr "Submit Request" -#: gcloud/core/constant.py:34 +#: gcloud/core/constant.py:45 msgid "职能化认领" msgstr "Task Claim" -#: gcloud/core/constant.py:55 +#: gcloud/core/constant.py:66 msgid "任务准备" msgstr "Preparation" -#: gcloud/core/constant.py:56 +#: gcloud/core/constant.py:67 msgid "操作执行" msgstr "Execution" -#: gcloud/core/constant.py:57 +#: gcloud/core/constant.py:68 msgid "DB变更" msgstr "DB Change" -#: gcloud/core/constant.py:58 +#: gcloud/core/constant.py:69 msgid "DB备份" msgstr "DB Backup" -#: gcloud/core/constant.py:59 +#: gcloud/core/constant.py:70 msgid "现网测试" msgstr "Test" -#: gcloud/core/constant.py:60 +#: gcloud/core/constant.py:71 msgid "空闲时间" msgstr "Idle Time" -#: gcloud/core/constant.py:65 +#: gcloud/core/constant.py:76 msgid "微信" msgstr "WeChat" -#: gcloud/core/constant.py:66 +#: gcloud/core/constant.py:77 msgid "短信" msgstr "SMS" -#: gcloud/core/constant.py:67 +#: gcloud/core/constant.py:78 msgid "邮件" msgstr "Email" -#: gcloud/core/constant.py:68 +#: gcloud/core/constant.py:79 msgid "语音" msgstr "Voice" -#: gcloud/core/middlewares.py:64 +#: gcloud/core/middlewares.py:76 msgid "您没有权限进行此操作" msgstr "You have no permissions to make such operation" -#: gcloud/core/models.py:25 +#: gcloud/core/models.py:37 msgid "生命周期" msgstr "Life Cycle" -#: gcloud/core/models.py:26 +#: gcloud/core/models.py:38 msgid "任务执行者" msgstr "Task Executor" -#: gcloud/core/models.py:28 +#: gcloud/core/models.py:40 msgid "业务状态" msgstr "Business State" -#: gcloud/core/models.py:29 +#: gcloud/core/models.py:41 msgid "是否始终使用任务执行者" msgstr "Force to use executor" -#: gcloud/core/models.py:39 gcloud/core/models.py:40 +#: gcloud/core/models.py:51 gcloud/core/models.py:52 msgid "业务 Business" msgstr "Business" -#: gcloud/core/models.py:54 +#: gcloud/core/models.py:66 msgid "用户QQ" msgstr "User QQ" -#: gcloud/core/models.py:55 +#: gcloud/core/models.py:67 msgid "默认业务" msgstr "Default business" -#: gcloud/core/models.py:61 gcloud/core/models.py:62 +#: gcloud/core/models.py:73 gcloud/core/models.py:74 msgid "用户默认业务 UserBusiness" msgstr "User default business UserBusiness" -#: gcloud/core/models.py:72 gcloud/core/models.py:73 +#: gcloud/core/models.py:84 gcloud/core/models.py:85 msgid "业务用户组 BusinessGroupMembership" msgstr "Business user group BusinessGroupMembership" -#: gcloud/core/models.py:90 +#: gcloud/core/models.py:102 msgid "变量KEY" msgstr "Variable KEY" -#: gcloud/core/models.py:91 +#: gcloud/core/models.py:103 msgid "变量描述" msgstr "Variable Description" -#: gcloud/core/models.py:92 +#: gcloud/core/models.py:104 msgid "变量值" msgstr "Variable Value" -#: gcloud/core/models.py:100 gcloud/core/models.py:101 +#: gcloud/core/models.py:112 gcloud/core/models.py:113 msgid "环境变量 EnvironmentVariables" msgstr "EnvironmentVariables" -#: gcloud/core/roles.py:15 gcloud/core/roles/sites/clouds/roles.py:15 -#: gcloud/core/roles/sites/ieod/roles.py:15 -#: gcloud/core/roles/sites/open/roles.py:15 +#: gcloud/core/roles.py:27 gcloud/core/roles/sites/open/roles.py:27 msgid "运维人员" msgstr "Maintainer" -#: gcloud/core/roles.py:16 gcloud/core/roles/sites/clouds/roles.py:16 -#: gcloud/core/roles/sites/ieod/roles.py:16 -#: gcloud/core/roles/sites/open/roles.py:16 +#: gcloud/core/roles.py:28 gcloud/core/roles/sites/open/roles.py:28 msgid "产品人员" msgstr "Productor" -#: gcloud/core/roles.py:17 gcloud/core/roles/sites/clouds/roles.py:17 -#: gcloud/core/roles/sites/ieod/roles.py:17 -#: gcloud/core/roles/sites/open/roles.py:17 +#: gcloud/core/roles.py:29 gcloud/core/roles/sites/open/roles.py:29 msgid "合作商" msgstr "Partner" -#: gcloud/core/roles.py:18 gcloud/core/roles/sites/clouds/roles.py:18 -#: gcloud/core/roles/sites/ieod/roles.py:18 -#: gcloud/core/roles/sites/open/roles.py:18 +#: gcloud/core/roles.py:30 gcloud/core/roles/sites/open/roles.py:30 msgid "业务创建人" msgstr "Business Creator" -#: gcloud/core/roles.py:19 gcloud/core/roles/sites/clouds/roles.py:19 -#: gcloud/core/roles/sites/ieod/roles.py:19 -#: gcloud/core/roles/sites/open/roles.py:19 +#: gcloud/core/roles.py:31 gcloud/core/roles/sites/open/roles.py:31 msgid "超级管理员" msgstr "Administrator" -#: gcloud/core/roles.py:20 gcloud/core/roles/sites/clouds/roles.py:20 -#: gcloud/core/roles/sites/ieod/roles.py:20 -#: gcloud/core/roles/sites/open/roles.py:20 +#: gcloud/core/roles.py:32 gcloud/core/roles/sites/open/roles.py:32 msgid "职能化人员" msgstr "Functional Personnel" -#: gcloud/core/roles.py:21 gcloud/core/roles/sites/clouds/roles.py:21 -#: gcloud/core/roles/sites/ieod/roles.py:21 -#: gcloud/core/roles/sites/open/roles.py:21 +#: gcloud/core/roles.py:33 gcloud/core/roles/sites/open/roles.py:33 msgid "测试人员" msgstr "Tester" -#: gcloud/core/roles.py:22 gcloud/core/roles/sites/clouds/roles.py:22 -#: gcloud/core/roles/sites/ieod/roles.py:22 -#: gcloud/core/roles/sites/open/roles.py:22 +#: gcloud/core/roles.py:34 gcloud/core/roles/sites/open/roles.py:34 msgid "开发人员" msgstr "Developer" -#: gcloud/core/roles.py:23 gcloud/core/roles/sites/clouds/roles.py:23 -#: gcloud/core/roles/sites/ieod/roles.py:23 -#: gcloud/core/roles/sites/open/roles.py:23 +#: gcloud/core/roles.py:35 gcloud/core/roles/sites/open/roles.py:35 msgid "审计人员" msgstr "Auditor" -#: gcloud/periodictask/models.py:63 gcloud/taskflow3/models.py:743 +#: gcloud/core/api_adapter/utils.py:90 +msgid "请求返回数据格式错误!" +msgstr "Request return data format error!" + +#: gcloud/core/api_adapter/utils.py:91 +msgid "调用远程服务失败,Http请求返回数据格式错误!" +msgstr "Remote service called failed, HTTP request data return format error!" + +#: gcloud/core/api_adapter/utils.py:93 +#, python-format +msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" +msgstr "Remote service called failed, HTTP request error status error: %(code)s, request url: %(url)s" + +#: gcloud/periodictask/models.py:75 gcloud/taskflow3/models.py:755 msgid "业务" msgstr "Business" -#: gcloud/periodictask/models.py:67 +#: gcloud/periodictask/models.py:79 msgid "pipeline 层周期任务" msgstr "Periodic task in pipeline" -#: gcloud/periodictask/models.py:68 gcloud/taskflow3/models.py:753 +#: gcloud/periodictask/models.py:80 gcloud/taskflow3/models.py:765 msgid "创建任务所用的模板ID" msgstr "Template ID for task creation" -#: gcloud/periodictask/models.py:73 gcloud/periodictask/models.py:74 +#: gcloud/periodictask/models.py:85 gcloud/periodictask/models.py:86 msgid "周期任务 PeriodicTask" msgstr "Periodic Task" -#: gcloud/periodictask/models.py:118 +#: gcloud/periodictask/models.py:130 #, python-format msgid "模板不存在,错误信息:%s" msgstr "Template not exist, error message: %s" -#: gcloud/periodictask/models.py:157 +#: gcloud/periodictask/models.py:169 msgid "pipeline 层周期任务历史" msgstr "Periodic task history in pipeline" -#: gcloud/periodictask/models.py:158 gcloud/taskflow3/constants.py:10 -#: pipeline/contrib/periodic_task/models.py:383 +#: gcloud/periodictask/models.py:170 gcloud/taskflow3/constants.py:22 +#: pipeline/contrib/periodic_task/models.py:395 msgid "周期任务" msgstr "Periodic Task" -#: gcloud/periodictask/models.py:159 +#: gcloud/periodictask/models.py:171 msgid "流程实例" msgstr "Flow Instance" -#: gcloud/periodictask/models.py:160 -#: pipeline/contrib/periodic_task/models.py:391 pipeline/log/models.py:35 +#: gcloud/periodictask/models.py:172 +#: pipeline/contrib/periodic_task/models.py:403 pipeline/log/models.py:47 msgid "异常信息" msgstr "Exception" -#: gcloud/periodictask/models.py:161 -#: pipeline/contrib/periodic_task/models.py:392 -#: pipeline/engine/models/core.py:804 pipeline/engine/models/core.py:895 -#: pipeline/engine/models/loop_activity.py:56 +#: gcloud/periodictask/models.py:173 +#: pipeline/contrib/periodic_task/models.py:404 +#: pipeline/engine/models/core.py:816 pipeline/engine/models/core.py:907 +#: pipeline/engine/models/loop_activity.py:67 msgid "开始时间" msgstr "Date Started" -#: gcloud/periodictask/models.py:162 -#: pipeline/contrib/periodic_task/models.py:393 +#: gcloud/periodictask/models.py:174 +#: pipeline/contrib/periodic_task/models.py:405 msgid "是否启动成功" msgstr "Start Success" -#: gcloud/taskflow3/constants.py:7 +#: gcloud/taskflow3/constants.py:19 msgid "手动" msgstr "Manual" -#: gcloud/taskflow3/constants.py:8 +#: gcloud/taskflow3/constants.py:20 msgid "API网关" msgstr "API Gateway" -#: gcloud/taskflow3/constants.py:9 +#: gcloud/taskflow3/constants.py:21 msgid "轻应用" msgstr "Mini-APP" -#: gcloud/taskflow3/constants.py:15 +#: gcloud/taskflow3/constants.py:27 msgid "业务流程" msgstr "Business Flow" -#: gcloud/taskflow3/constants.py:16 +#: gcloud/taskflow3/constants.py:28 msgid "公共流程" msgstr "Common Flow" -#: gcloud/taskflow3/models.py:430 gcloud/tasktmpl3/models.py:184 +#: gcloud/taskflow3/models.py:442 gcloud/tasktmpl3/models.py:196 msgid "未执行" msgstr "Created" -#: gcloud/taskflow3/models.py:435 gcloud/tasktmpl3/models.py:189 +#: gcloud/taskflow3/models.py:447 gcloud/tasktmpl3/models.py:201 msgid "执行中" msgstr "Executing" -#: gcloud/taskflow3/models.py:751 +#: gcloud/taskflow3/models.py:763 msgid "任务类型,继承自模板" msgstr "Task type, inherited from flow" -#: gcloud/taskflow3/models.py:754 +#: gcloud/taskflow3/models.py:766 msgid "流程模板来源" msgstr "Template source" -#: gcloud/taskflow3/models.py:757 +#: gcloud/taskflow3/models.py:769 msgid "创建方式" msgstr "Creation method" -#: gcloud/taskflow3/models.py:761 +#: gcloud/taskflow3/models.py:773 msgid "创建任务额外信息(App maker ID或者APP CODE)" msgstr "Create additional task data (App maker ID or APP CODE)" -#: gcloud/taskflow3/models.py:763 +#: gcloud/taskflow3/models.py:775 msgid "任务流程类型" msgstr "Task flow type" -#: gcloud/taskflow3/models.py:767 +#: gcloud/taskflow3/models.py:779 msgid "当前任务流程阶段" msgstr "Current task flow phase" -#: gcloud/taskflow3/models.py:776 gcloud/taskflow3/models.py:777 +#: gcloud/taskflow3/models.py:788 gcloud/taskflow3/models.py:789 msgid "流程实例 TaskFlowInstance" msgstr "TaskFlowInstance" -#: gcloud/tasktmpl3/models.py:34 +#: gcloud/tasktmpl3/models.py:46 msgid "新建任务" msgstr "New Task" -#: gcloud/tasktmpl3/models.py:35 +#: gcloud/tasktmpl3/models.py:47 msgid "填写参数" msgstr "Fill params" -#: gcloud/tasktmpl3/models.py:36 -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:80 +#: gcloud/tasktmpl3/models.py:48 msgid "执行任务" msgstr "New task" -#: gcloud/tasktmpl3/models.py:445 gcloud/tasktmpl3/models.py:446 +#: gcloud/tasktmpl3/models.py:457 gcloud/tasktmpl3/models.py:458 msgid "流程模板 TaskTemplate" msgstr "TaskTemplate" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:16 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:28 msgid "测试" msgstr "Testing" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:17 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:29 msgid "体验" msgstr "Staging" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:18 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:30 msgid "正式" msgstr "Production" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:22 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:34 msgid "关闭" msgstr "Closed" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:23 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:35 msgid "开放" msgstr "Open" -#: gcloud/utils/forms.py:31 +#: gcloud/utils/forms.py:43 msgid "invalid json string" msgstr "invalid json string" -#: gcloud/utils/forms.py:49 +#: gcloud/utils/forms.py:61 msgid "json.loads result is not instance of list or tuple " msgstr "json.loads result is not instance of list or tuple" -#: gcloud/utils/forms.py:67 +#: gcloud/utils/forms.py:79 msgid "json.loads result is not list" msgstr "json.loads result is not list" -#: gcloud/webservice3/resources.py:308 +#: gcloud/webservice3/resources.py:299 msgid "停运" msgstr "Closed" -#: pipeline/models.py:65 +#: pipeline/models.py:77 msgid "快照字符串的md5sum" msgstr "Snapshot Md5sum" -#: pipeline/models.py:72 pipeline/models.py:73 +#: pipeline/models.py:84 pipeline/models.py:85 msgid "模板快照" msgstr "Template Snapshot" -#: pipeline/models.py:146 +#: pipeline/models.py:158 #, python-format msgid "子流程引用链中存在循环引用:%s" msgstr "Subprocess reference has circle: %s" -#: pipeline/contrib/statistics/models.py:8 -#: pipeline/contrib/statistics/models.py:44 pipeline/models.py:262 -#: pipeline/models.py:449 +#: pipeline/contrib/statistics/models.py:20 +#: pipeline/contrib/statistics/models.py:56 pipeline/models.py:274 +#: pipeline/models.py:461 msgid "模板ID" msgstr "Template ID" -#: pipeline/models.py:263 +#: pipeline/models.py:275 msgid "模板名称" msgstr "Template Name" -#: pipeline/contrib/periodic_task/models.py:298 pipeline/models.py:265 -#: pipeline/models.py:577 +#: pipeline/contrib/periodic_task/models.py:310 pipeline/models.py:277 +#: pipeline/models.py:589 msgid "创建者" msgstr "Creator" -#: pipeline/models.py:266 pipeline/models.py:582 +#: pipeline/models.py:278 pipeline/models.py:594 msgid "描述" msgstr "Description" -#: pipeline/models.py:267 +#: pipeline/models.py:279 msgid "修改者" msgstr "Editor" -#: pipeline/models.py:268 pipeline/models.py:492 +#: pipeline/models.py:280 pipeline/models.py:504 msgid "修改时间" msgstr "Date Edit" -#: pipeline/models.py:269 +#: pipeline/models.py:281 msgid "模板结构数据" msgstr "Template Data" -#: pipeline/models.py:270 +#: pipeline/models.py:282 msgid "是否含有子流程" msgstr "Has Subprocess" -#: pipeline/models.py:274 +#: pipeline/models.py:286 msgid "表示当前模板是否删除" msgstr "Deleted" -#: pipeline/models.py:280 pipeline/models.py:281 pipeline/models.py:574 +#: pipeline/models.py:292 pipeline/models.py:293 pipeline/models.py:586 msgid "Pipeline模板" msgstr "Pipeline Template" -#: pipeline/models.py:423 +#: pipeline/models.py:435 msgid "根模板ID" msgstr "Root flow ID" -#: pipeline/models.py:424 +#: pipeline/models.py:436 msgid "子流程模板ID" msgstr "Subprocess flow ID" -#: pipeline/models.py:425 +#: pipeline/models.py:437 msgid "子流程节点 ID" msgstr "Subprocess node ID" -#: pipeline/models.py:426 pipeline/models.py:450 pipeline/models.py:479 +#: pipeline/models.py:438 pipeline/models.py:462 pipeline/models.py:491 msgid "快照字符串的md5" msgstr "Snapshot string md5" -#: pipeline/models.py:477 +#: pipeline/models.py:489 msgid "模板 ID" msgstr "Template ID" -#: pipeline/models.py:478 +#: pipeline/models.py:490 msgid "模板数据 ID" msgstr "Template Data ID" -#: pipeline/models.py:480 +#: pipeline/models.py:492 msgid "添加日期" msgstr "Datetime added" -#: pipeline/models.py:489 +#: pipeline/models.py:501 msgid "对应模板 ID" msgstr "Template ID" -#: pipeline/models.py:490 +#: pipeline/models.py:502 msgid "方案唯一ID" msgstr "Schema Unique ID" -#: pipeline/models.py:491 +#: pipeline/models.py:503 msgid "方案名称" msgstr "Schema Name" -#: pipeline/models.py:493 +#: pipeline/models.py:505 msgid "方案数据" msgstr "Schema Data" -#: pipeline/contrib/statistics/models.py:23 -#: pipeline/contrib/statistics/models.py:58 pipeline/models.py:575 +#: pipeline/contrib/statistics/models.py:35 +#: pipeline/contrib/statistics/models.py:70 pipeline/models.py:587 msgid "实例ID" msgstr "Instance ID" -#: pipeline/models.py:576 +#: pipeline/models.py:588 msgid "实例名称" msgstr "Instance Name" -#: pipeline/models.py:579 +#: pipeline/models.py:591 msgid "执行者" msgstr "Executor" -#: pipeline/models.py:580 +#: pipeline/models.py:592 msgid "启动时间" msgstr "Date Started" -#: pipeline/engine/models/core.py:896 -#: pipeline/engine/models/loop_activity.py:57 pipeline/models.py:581 +#: pipeline/engine/models/core.py:908 +#: pipeline/engine/models/loop_activity.py:68 pipeline/models.py:593 msgid "结束时间" msgstr "Date Finished" -#: pipeline/models.py:583 +#: pipeline/models.py:595 msgid "是否已经启动" msgstr "Started" -#: pipeline/models.py:584 +#: pipeline/models.py:596 msgid "是否已经完成" msgstr "Finished" -#: pipeline/models.py:586 +#: pipeline/models.py:598 msgid "是否已经删除" msgstr "Deleted" -#: pipeline/models.py:588 +#: pipeline/models.py:600 msgid "表示当前实例是否删除" msgstr "Deleted" -#: pipeline/models.py:593 +#: pipeline/models.py:605 msgid "实例结构数据,指向实例对应的模板的结构数据" msgstr "Template data for this instance" -#: pipeline/models.py:599 +#: pipeline/models.py:611 msgid "用于实例执行的结构数据" msgstr "Used for execution" -#: pipeline/models.py:605 +#: pipeline/models.py:617 msgid "提前计算好的一些流程结构数据" msgstr "Some structure info have been precomputed" -#: pipeline/models.py:611 pipeline/models.py:612 +#: pipeline/models.py:623 pipeline/models.py:624 msgid "Pipeline实例" msgstr "Pipeline Instance" -#: pipeline/models.py:772 +#: pipeline/models.py:784 msgid "变量编码" msgstr "Variable Code" -#: pipeline/models.py:773 +#: pipeline/models.py:785 msgid "变量是否可用" msgstr "Available" -#: pipeline/models.py:776 pipeline/models.py:777 +#: pipeline/models.py:788 pipeline/models.py:789 msgid "Variable变量" msgstr "Variable" -#: pipeline/component_framework/models.py:28 -#: pipeline/contrib/statistics/models.py:7 -#: pipeline/contrib/statistics/models.py:22 +#: pipeline/component_framework/models.py:40 +#: pipeline/contrib/statistics/models.py:19 +#: pipeline/contrib/statistics/models.py:34 msgid "组件编码" msgstr "Component Code" -#: pipeline/component_framework/models.py:29 +#: pipeline/component_framework/models.py:41 msgid "组件名称" msgstr "Component Name" -#: pipeline/component_framework/models.py:30 +#: pipeline/component_framework/models.py:42 msgid "组件是否可用" msgstr "Available" -#: pipeline/component_framework/models.py:35 -#: pipeline/component_framework/models.py:36 +#: pipeline/component_framework/models.py:47 +#: pipeline/component_framework/models.py:48 msgid "组件 Component" msgstr "Component" -#: pipeline/contrib/periodic_task/models.py:23 +#: pipeline/contrib/periodic_task/models.py:35 msgid "Days" msgstr "Days" -#: pipeline/contrib/periodic_task/models.py:24 +#: pipeline/contrib/periodic_task/models.py:36 msgid "Hours" msgstr "Hours" -#: pipeline/contrib/periodic_task/models.py:25 +#: pipeline/contrib/periodic_task/models.py:37 msgid "Minutes" msgstr "Minutes" -#: pipeline/contrib/periodic_task/models.py:26 +#: pipeline/contrib/periodic_task/models.py:38 msgid "Seconds" msgstr "Seconds" -#: pipeline/contrib/periodic_task/models.py:27 +#: pipeline/contrib/periodic_task/models.py:39 msgid "Microseconds" msgstr "Microseconds" -#: pipeline/contrib/periodic_task/models.py:32 +#: pipeline/contrib/periodic_task/models.py:44 msgid "every" msgstr "every" -#: pipeline/contrib/periodic_task/models.py:34 +#: pipeline/contrib/periodic_task/models.py:46 msgid "period" msgstr "period" -#: pipeline/contrib/periodic_task/models.py:38 -#: pipeline/contrib/periodic_task/models.py:157 +#: pipeline/contrib/periodic_task/models.py:50 +#: pipeline/contrib/periodic_task/models.py:169 msgid "interval" msgstr "interval" -#: pipeline/contrib/periodic_task/models.py:39 +#: pipeline/contrib/periodic_task/models.py:51 msgid "intervals" msgstr "intervals" -#: pipeline/contrib/periodic_task/models.py:59 +#: pipeline/contrib/periodic_task/models.py:71 msgid "every {0.period_singular}" msgstr "every {0.period_singular}" -#: pipeline/contrib/periodic_task/models.py:60 +#: pipeline/contrib/periodic_task/models.py:72 msgid "every {0.every:d} {0.period}" msgstr "every {0.every:d} {0.period}" -#: pipeline/contrib/periodic_task/models.py:73 +#: pipeline/contrib/periodic_task/models.py:85 msgid "minute" msgstr "minute" -#: pipeline/contrib/periodic_task/models.py:74 +#: pipeline/contrib/periodic_task/models.py:86 msgid "hour" msgstr "hour" -#: pipeline/contrib/periodic_task/models.py:76 +#: pipeline/contrib/periodic_task/models.py:88 msgid "day of week" msgstr "day of week" -#: pipeline/contrib/periodic_task/models.py:79 +#: pipeline/contrib/periodic_task/models.py:91 msgid "day of month" msgstr "day of month" -#: pipeline/contrib/periodic_task/models.py:82 +#: pipeline/contrib/periodic_task/models.py:94 msgid "month of year" msgstr "month of year" -#: pipeline/contrib/periodic_task/models.py:87 -#: pipeline/contrib/periodic_task/models.py:161 +#: pipeline/contrib/periodic_task/models.py:99 +#: pipeline/contrib/periodic_task/models.py:173 msgid "crontab" msgstr "crontab" -#: pipeline/contrib/periodic_task/models.py:88 +#: pipeline/contrib/periodic_task/models.py:100 msgid "crontabs" msgstr "crontabs" -#: pipeline/contrib/periodic_task/models.py:151 +#: pipeline/contrib/periodic_task/models.py:163 msgid "name" msgstr "name" -#: pipeline/contrib/periodic_task/models.py:152 +#: pipeline/contrib/periodic_task/models.py:164 msgid "Useful description" msgstr "Useful description" -#: pipeline/contrib/periodic_task/models.py:154 +#: pipeline/contrib/periodic_task/models.py:166 msgid "task name" msgstr "task name" -#: pipeline/contrib/periodic_task/models.py:163 +#: pipeline/contrib/periodic_task/models.py:175 msgid "Use one of interval/crontab" msgstr "Use one of interval/crontab" -#: pipeline/contrib/periodic_task/models.py:166 +#: pipeline/contrib/periodic_task/models.py:178 msgid "Arguments" msgstr "Arguments" -#: pipeline/contrib/periodic_task/models.py:167 +#: pipeline/contrib/periodic_task/models.py:179 msgid "JSON encoded positional arguments" msgstr "JSON encoded positional arguments" -#: pipeline/contrib/periodic_task/models.py:170 +#: pipeline/contrib/periodic_task/models.py:182 msgid "Keyword arguments" msgstr "Keyword arguments" -#: pipeline/contrib/periodic_task/models.py:171 +#: pipeline/contrib/periodic_task/models.py:183 msgid "JSON encoded keyword arguments" msgstr "JSON encoded keyword arguments" -#: pipeline/contrib/periodic_task/models.py:174 +#: pipeline/contrib/periodic_task/models.py:186 msgid "queue" msgstr "queue" -#: pipeline/contrib/periodic_task/models.py:175 +#: pipeline/contrib/periodic_task/models.py:187 msgid "Queue defined in CELERY_QUEUES" msgstr "Queue defined in CELERY_QUEUES" -#: pipeline/contrib/periodic_task/models.py:178 +#: pipeline/contrib/periodic_task/models.py:190 msgid "exchange" msgstr "exchange" -#: pipeline/contrib/periodic_task/models.py:181 +#: pipeline/contrib/periodic_task/models.py:193 msgid "routing key" msgstr "routing key" -#: pipeline/contrib/periodic_task/models.py:184 +#: pipeline/contrib/periodic_task/models.py:196 msgid "expires" msgstr "expires" -#: pipeline/contrib/periodic_task/models.py:187 +#: pipeline/contrib/periodic_task/models.py:199 msgid "enabled" msgstr "enabled" -#: pipeline/contrib/periodic_task/models.py:197 +#: pipeline/contrib/periodic_task/models.py:209 msgid "description" msgstr "description" -#: pipeline/contrib/periodic_task/models.py:203 +#: pipeline/contrib/periodic_task/models.py:215 msgid "djcelery periodic task" msgstr "djcelery periodic task" -#: pipeline/contrib/periodic_task/models.py:204 +#: pipeline/contrib/periodic_task/models.py:216 msgid "djcelery periodic tasks" msgstr "djcelery periodic tasks" -#: pipeline/contrib/periodic_task/models.py:281 +#: pipeline/contrib/periodic_task/models.py:293 msgid "周期任务名称" msgstr "Periodic task name" -#: pipeline/contrib/periodic_task/models.py:286 +#: pipeline/contrib/periodic_task/models.py:298 msgid "周期任务对应的模板" msgstr "Periodic task template" -#: pipeline/contrib/periodic_task/models.py:289 +#: pipeline/contrib/periodic_task/models.py:301 msgid "调度策略" msgstr "Crontab" -#: pipeline/contrib/periodic_task/models.py:290 +#: pipeline/contrib/periodic_task/models.py:302 msgid "celery 周期任务实例" msgstr "Celery periodic task" -#: pipeline/contrib/periodic_task/models.py:294 +#: pipeline/contrib/periodic_task/models.py:306 msgid "用于创建流程实例的结构数据" msgstr "Flow data" -#: pipeline/contrib/periodic_task/models.py:296 +#: pipeline/contrib/periodic_task/models.py:308 msgid "执行次数" msgstr "Execution times" -#: pipeline/contrib/periodic_task/models.py:297 +#: pipeline/contrib/periodic_task/models.py:309 msgid "上次运行时间" msgstr "Last run at" -#: pipeline/contrib/periodic_task/models.py:299 +#: pipeline/contrib/periodic_task/models.py:311 msgid "额外信息" msgstr "Extra info" -#: pipeline/contrib/periodic_task/models.py:388 +#: pipeline/contrib/periodic_task/models.py:400 msgid "Pipeline 实例" msgstr "Pipeline instance" -#: pipeline/contrib/statistics/models.py:9 -#: pipeline/contrib/statistics/models.py:24 +#: pipeline/contrib/statistics/models.py:21 +#: pipeline/contrib/statistics/models.py:36 msgid "节点ID" msgstr "Node ID" -#: pipeline/contrib/statistics/models.py:10 -#: pipeline/contrib/statistics/models.py:25 +#: pipeline/contrib/statistics/models.py:22 +#: pipeline/contrib/statistics/models.py:37 msgid "是否子流程引用" msgstr "Subprocess referred" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "子流程堆栈" msgstr "Subprocess stack" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "JSON 格式的列表" msgstr "JSON format of list" -#: pipeline/contrib/statistics/models.py:14 -#: pipeline/contrib/statistics/models.py:15 +#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:27 msgid "Pipeline标准插件被引用数据" msgstr "Pipeline standard plugins reference" -#: pipeline/contrib/statistics/models.py:27 +#: pipeline/contrib/statistics/models.py:39 msgid "标准插件执行开始时间" msgstr "Standard Plugins execution started time" -#: pipeline/contrib/statistics/models.py:28 +#: pipeline/contrib/statistics/models.py:40 msgid "标准插件执行结束时间" msgstr "Standard Plugins execution finished time" -#: pipeline/contrib/statistics/models.py:29 +#: pipeline/contrib/statistics/models.py:41 msgid "标准插件执行耗时(s)" msgstr "Standard Plugins execution Elapsed(s)" -#: pipeline/contrib/statistics/models.py:30 +#: pipeline/contrib/statistics/models.py:42 msgid "是否执行成功" msgstr "Success" -#: pipeline/contrib/statistics/models.py:31 pipeline/engine/models/core.py:801 -#: pipeline/engine/models/core.py:898 +#: pipeline/contrib/statistics/models.py:43 pipeline/engine/models/core.py:813 +#: pipeline/engine/models/core.py:910 msgid "是否跳过" msgstr "Skip OR Not" -#: pipeline/contrib/statistics/models.py:32 +#: pipeline/contrib/statistics/models.py:44 msgid "是否重试记录" msgstr "Retried Record OR Not" -#: pipeline/contrib/statistics/models.py:35 -#: pipeline/contrib/statistics/models.py:36 +#: pipeline/contrib/statistics/models.py:47 +#: pipeline/contrib/statistics/models.py:48 msgid "Pipeline标准插件执行数据" msgstr "Standard Plugins execution data" -#: pipeline/contrib/statistics/models.py:45 -#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:57 +#: pipeline/contrib/statistics/models.py:71 msgid "标准插件总数" msgstr "Total number of Standard Plugins" -#: pipeline/contrib/statistics/models.py:46 -#: pipeline/contrib/statistics/models.py:60 +#: pipeline/contrib/statistics/models.py:58 +#: pipeline/contrib/statistics/models.py:72 msgid "子流程总数" msgstr "Subprocess Count" -#: pipeline/contrib/statistics/models.py:47 -#: pipeline/contrib/statistics/models.py:61 +#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:73 msgid "网关总数" msgstr "Gateways Count" -#: pipeline/contrib/statistics/models.py:50 -#: pipeline/contrib/statistics/models.py:51 +#: pipeline/contrib/statistics/models.py:62 +#: pipeline/contrib/statistics/models.py:63 msgid "Pipeline模板引用数据" msgstr "Pipeline Template Reference Data" -#: pipeline/contrib/statistics/models.py:64 -#: pipeline/contrib/statistics/models.py:65 +#: pipeline/contrib/statistics/models.py:76 +#: pipeline/contrib/statistics/models.py:77 msgid "Pipeline实例引用数据" msgstr "Pipeline Instance Reference Data" -#: pipeline/contrib/web/forms.py:37 +#: pipeline/contrib/web/forms.py:49 msgid "无效的节点 ID" msgstr "Invalid node ID" -#: pipeline/contrib/web/forms.py:46 +#: pipeline/contrib/web/forms.py:58 msgid "无效的实例 ID" msgstr "Invalid Task ID" -#: pipeline/contrib/web/forms.py:55 +#: pipeline/contrib/web/forms.py:67 msgid "无效的模板 ID" msgstr "Invalid flow ID" -#: pipeline/contrib/web/forms.py:72 +#: pipeline/contrib/web/forms.py:84 msgid "无效的组件代码" msgstr "Invalid component code" -#: pipeline/contrib/web/forms.py:85 +#: pipeline/contrib/web/forms.py:97 #, python-format msgid "该字段的类型必须为 %s" msgstr "The type of this field must be: %s" -#: pipeline/contrib/web/forms.py:87 -#: pipeline/contrib/web/webresource/resource.py:82 -#: pipeline/contrib/web/webresource/resource.py:101 -#: pipeline/contrib/web/webresource/resource.py:208 -#: pipeline/contrib/web/webresource/resource.py:228 +#: pipeline/contrib/web/forms.py:99 +#: pipeline/contrib/web/webresource/resource.py:94 +#: pipeline/contrib/web/webresource/resource.py:113 +#: pipeline/contrib/web/webresource/resource.py:220 +#: pipeline/contrib/web/webresource/resource.py:240 msgid "JSON 格式不合法" msgstr "JSON format invalid" -#: pipeline/contrib/web/views_v1.py:347 +#: pipeline/contrib/web/views_v1.py:359 msgid "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" msgstr "Timing node does not exist or has been finished, or task status does not allow reset timing" -#: pipeline/contrib/web/views_v1.py:352 +#: pipeline/contrib/web/views_v1.py:364 msgid "重试计时器失败,请稍后再次尝试" msgstr "Reset timing failed, please try again later" -#: pipeline/contrib/web/webresource/resource.py:201 -#: pipeline/contrib/web/webresource/resource.py:290 +#: pipeline/contrib/web/webresource/resource.py:213 +#: pipeline/contrib/web/webresource/resource.py:302 msgid "模板不存在" msgstr "Template does not exist" -#: pipeline/core/flow/activity.py:151 +#: pipeline/core/flow/activity.py:162 msgid "执行结果" msgstr "Execution Result" -#: pipeline/engine/admin.py:109 +#: pipeline/engine/admin.py:120 msgid "打开所选的功能" msgstr "Open Functions Selected" -#: pipeline/engine/admin.py:110 +#: pipeline/engine/admin.py:121 msgid "关闭所选的功能" msgstr "Close Functions Selected" -#: pipeline/engine/conf/function_switch.py:10 +#: pipeline/engine/conf/function_switch.py:21 msgid "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" msgstr "Used to freeze engine. In which period all signals and processes will be shielded and all request refused." -#: pipeline/engine/models/core.py:41 +#: pipeline/engine/models/core.py:53 msgid "pipeline 运行时数据" msgstr "Pipeline Runtime" -#: pipeline/engine/models/core.py:146 +#: pipeline/engine/models/core.py:158 msgid "Process ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:147 +#: pipeline/engine/models/core.py:159 msgid "根 pipeline 的 ID" msgstr "Root Process ID" -#: pipeline/engine/models/core.py:148 +#: pipeline/engine/models/core.py:160 msgid "当前推进到的节点的 ID" msgstr "Current Node ID" -#: pipeline/engine/models/core.py:149 +#: pipeline/engine/models/core.py:161 msgid "遇到该 ID 的节点就停止推进" msgstr "Pause Node ID" -#: pipeline/engine/models/core.py:150 +#: pipeline/engine/models/core.py:162 msgid "父 process 的 ID" msgstr "Father Process ID" -#: pipeline/engine/models/core.py:151 +#: pipeline/engine/models/core.py:163 msgid "收到子节点 ACK 的数量" msgstr "ACK Received" -#: pipeline/engine/models/core.py:152 +#: pipeline/engine/models/core.py:164 msgid "需要收到的子节点 ACK 的数量" msgstr "ACK Needed" -#: pipeline/engine/models/core.py:153 +#: pipeline/engine/models/core.py:165 msgid "该 process 是否还有效" msgstr "Available" -#: pipeline/engine/models/core.py:154 +#: pipeline/engine/models/core.py:166 msgid "该 process 是否正在休眠" msgstr "Sleep" -#: pipeline/engine/models/core.py:155 +#: pipeline/engine/models/core.py:167 msgid "该 process 是否被冻结" msgstr "Freeze" -#: pipeline/engine/models/core.py:531 +#: pipeline/engine/models/core.py:543 msgid "祖先 ID" msgstr "Ancestor ID" -#: pipeline/engine/models/core.py:532 +#: pipeline/engine/models/core.py:544 msgid "后代 ID" msgstr "Descendant ID" -#: pipeline/engine/models/core.py:533 +#: pipeline/engine/models/core.py:545 msgid "距离" msgstr "Distance" -#: pipeline/engine/models/core.py:796 pipeline/engine/models/core.py:843 -#: pipeline/engine/models/core.py:938 pipeline/engine/models/core.py:1096 -#: pipeline/engine/models/loop_activity.py:25 pipeline/log/models.py:38 +#: pipeline/engine/models/core.py:808 pipeline/engine/models/core.py:855 +#: pipeline/engine/models/core.py:950 pipeline/engine/models/core.py:1108 +#: pipeline/engine/models/loop_activity.py:36 pipeline/log/models.py:50 msgid "节点 ID" msgstr "Node ID" -#: pipeline/engine/models/core.py:797 +#: pipeline/engine/models/core.py:809 msgid "状态" msgstr "Status" -#: pipeline/engine/models/core.py:798 +#: pipeline/engine/models/core.py:810 msgid "节点名称" msgstr "Node Name" -#: pipeline/engine/models/core.py:799 +#: pipeline/engine/models/core.py:811 msgid "重试次数" msgstr "Retry Times" -#: pipeline/engine/models/core.py:800 pipeline/engine/models/core.py:897 +#: pipeline/engine/models/core.py:812 pipeline/engine/models/core.py:909 msgid "循环次数" msgstr "Circle Times" -#: pipeline/engine/models/core.py:802 +#: pipeline/engine/models/core.py:814 msgid "是否出错后自动忽略" msgstr "Error Ignorable" -#: pipeline/engine/models/core.py:805 +#: pipeline/engine/models/core.py:817 msgid "归档时间" msgstr "Date Archived" -#: pipeline/engine/models/core.py:806 +#: pipeline/engine/models/core.py:818 msgid "版本" msgstr "Version" -#: pipeline/engine/models/core.py:844 pipeline/engine/models/core.py:852 +#: pipeline/engine/models/core.py:856 pipeline/engine/models/core.py:864 msgid "输入数据" msgstr "Input Data" -#: pipeline/engine/models/core.py:845 pipeline/engine/models/core.py:853 +#: pipeline/engine/models/core.py:857 pipeline/engine/models/core.py:865 msgid "输出数据" msgstr "Output Data" -#: pipeline/engine/models/core.py:846 pipeline/engine/models/core.py:854 +#: pipeline/engine/models/core.py:858 pipeline/engine/models/core.py:866 msgid "异常数据" msgstr "Exceptions" -#: pipeline/engine/models/core.py:894 -#: pipeline/engine/models/loop_activity.py:54 -#: pipeline/engine/models/loop_activity.py:88 +#: pipeline/engine/models/core.py:906 +#: pipeline/engine/models/loop_activity.py:65 +#: pipeline/engine/models/loop_activity.py:99 msgid "节点 id" msgstr "Node ID" -#: pipeline/engine/models/core.py:937 -#: pipeline/engine/models/loop_activity.py:24 +#: pipeline/engine/models/core.py:949 +#: pipeline/engine/models/loop_activity.py:35 msgid "ID 节点ID+version" msgstr "ID Node+Version" -#: pipeline/engine/models/core.py:939 +#: pipeline/engine/models/core.py:951 msgid "Pipeline 进程 ID" msgstr "Pipeline process ID" -#: pipeline/engine/models/core.py:940 -#: pipeline/engine/models/loop_activity.py:26 +#: pipeline/engine/models/core.py:952 +#: pipeline/engine/models/loop_activity.py:37 msgid "被调度次数" msgstr "Schedule times" -#: pipeline/engine/models/core.py:941 -#: pipeline/engine/models/loop_activity.py:27 +#: pipeline/engine/models/core.py:953 +#: pipeline/engine/models/loop_activity.py:38 msgid "是否是回调型调度" msgstr "Schedulable" -#: pipeline/engine/models/core.py:942 -#: pipeline/engine/models/loop_activity.py:28 +#: pipeline/engine/models/core.py:954 +#: pipeline/engine/models/loop_activity.py:39 msgid "回调数据" msgstr "Callback Data" -#: pipeline/engine/models/core.py:943 +#: pipeline/engine/models/core.py:955 msgid "待调度服务" msgstr "To be Scheduled" -#: pipeline/engine/models/core.py:944 +#: pipeline/engine/models/core.py:956 msgid "是否已完成" msgstr "Finished" -#: pipeline/engine/models/core.py:945 -#: pipeline/engine/models/loop_activity.py:29 +#: pipeline/engine/models/core.py:957 +#: pipeline/engine/models/loop_activity.py:40 msgid "Activity 的版本" msgstr "Activity Version" -#: pipeline/engine/models/core.py:946 +#: pipeline/engine/models/core.py:958 msgid "是否正在被调度" msgstr "Dispatch" -#: pipeline/engine/models/core.py:1004 +#: pipeline/engine/models/core.py:1016 msgid "子流程 ID" msgstr "Subprocess ID" -#: pipeline/engine/models/core.py:1005 +#: pipeline/engine/models/core.py:1017 msgid "对应的进程 ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:1037 +#: pipeline/engine/models/core.py:1049 msgid "pipeline 进程 ID" msgstr "Pipeline Process ID" -#: pipeline/engine/models/core.py:1038 pipeline/engine/models/core.py:1065 -#: pipeline/engine/models/core.py:1097 +#: pipeline/engine/models/core.py:1050 pipeline/engine/models/core.py:1077 +#: pipeline/engine/models/core.py:1109 msgid "celery 任务 ID" msgstr "Celery Task ID" -#: pipeline/engine/models/core.py:1064 +#: pipeline/engine/models/core.py:1076 msgid "schedule ID" msgstr "schedule ID" -#: pipeline/engine/models/data.py:31 +#: pipeline/engine/models/data.py:43 msgid "对象唯一键" msgstr "Object Key" -#: pipeline/engine/models/data.py:32 +#: pipeline/engine/models/data.py:44 msgid "对象存储字段" msgstr "Object data" -#: pipeline/engine/models/function.py:43 +#: pipeline/engine/models/function.py:55 msgid "功能名称" msgstr "Function name" -#: pipeline/engine/models/function.py:44 +#: pipeline/engine/models/function.py:56 msgid "功能描述" msgstr "Functional Desc" -#: pipeline/engine/models/function.py:45 +#: pipeline/engine/models/function.py:57 msgid "是否激活" msgstr "Active" -#: pipeline/engine/models/loop_activity.py:30 +#: pipeline/engine/models/loop_activity.py:41 msgid "当前调度所处的循环计数" msgstr "Current Cycle Count" -#: pipeline/engine/models/loop_activity.py:55 +#: pipeline/engine/models/loop_activity.py:66 msgid "本次循环计数" msgstr "Cycle Count" -#: pipeline/engine/models/loop_activity.py:59 +#: pipeline/engine/models/loop_activity.py:70 msgid "执行状态" msgstr "Status" -#: pipeline/engine/models/loop_activity.py:89 +#: pipeline/engine/models/loop_activity.py:100 msgid "本次循环次数" msgstr "Planning Cycle Count" -#: pipeline/engine/models/loop_activity.py:90 +#: pipeline/engine/models/loop_activity.py:101 msgid "实际循环次数" msgstr "Real Cycle Count" -#: pipeline/engine/models/loop_activity.py:91 +#: pipeline/engine/models/loop_activity.py:102 msgid "所需循环次数" msgstr "Cycle Count Required" -#: pipeline/log/models.py:32 +#: pipeline/log/models.py:44 msgid "logger 名称" msgstr "Logger name" -#: pipeline/log/models.py:33 +#: pipeline/log/models.py:45 msgid "日志等级" msgstr "Log level" -#: pipeline/log/models.py:34 +#: pipeline/log/models.py:46 msgid "日志内容" msgstr "Log message" -#: pipeline/log/models.py:36 +#: pipeline/log/models.py:48 msgid "输出时间" msgstr "Log time" -#: pipeline/log/models.py:39 +#: pipeline/log/models.py:51 msgid "节点执行历史 ID" msgstr "Log history ID" -#: pipeline/validators/connection.py:30 +#: pipeline/validators/connection.py:41 #, python-format msgid "不能连接%s类型节点\n" msgstr "cannot connect to %s type nodes\n" -#: pipeline/validators/connection.py:32 +#: pipeline/validators/connection.py:43 #, python-format msgid "节点的入度最大为%s,最小为%s\n" msgstr "Incoming of node cannot larger than %s or smaller than %s\n" -#: pipeline/validators/connection.py:34 +#: pipeline/validators/connection.py:45 #, python-format msgid "节点的出度最大为%s,最小为%s\n" msgstr "Outgoing of node cannot larger than %s or smaller than %s\n" -#: pipeline/validators/gateway.py:117 pipeline/validators/gateway.py:168 +#: pipeline/validators/gateway.py:128 pipeline/validators/gateway.py:179 msgid "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" msgstr "Exclusive Gateways in a Parallel Gateway must be connected to one Converge Gateway" -#: pipeline/validators/gateway.py:178 +#: pipeline/validators/gateway.py:189 msgid "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" msgstr "All branches of one Exclusive Gateway must be connected to one Converge Gateway" -#: pipeline/validators/gateway.py:188 +#: pipeline/validators/gateway.py:199 msgid "非法网关,请检查其分支是否符合规则" msgstr "Invalid gateway, please check where the branch conforms the rules" -#: pipeline/validators/gateway.py:205 +#: pipeline/validators/gateway.py:216 msgid "汇聚网关只能汇聚来自同一个并行网关的分支" msgstr "All incoming of Converge Gateway must come from one Parallel Gateway" -#: pipeline/validators/gateway.py:210 +#: pipeline/validators/gateway.py:221 msgid "汇聚网关没有汇聚其对应的并行网关的所有分支" msgstr "Converge Gateway has not converge all branches" -#: pipeline/validators/gateway.py:313 +#: pipeline/validators/gateway.py:324 msgid "无法获取该网关距离开始节点的距离" msgstr "Cannot get the distance between gateway and start node" -#: pipeline_plugins/cmdb_ip_picker/query.py:60 -#: pipeline_plugins/cmdb_ip_picker/query.py:118 -#: pipeline_plugins/cmdb_ip_picker/utils.py:68 -#: pipeline_plugins/cmdb_ip_picker/utils.py:176 -#: pipeline_plugins/cmdb_ip_picker/utils.py:182 -#: pipeline_plugins/components/collections/sites/open/cc.py:16 +#: pipeline_plugins/cmdb_ip_picker/query.py:72 +#: pipeline_plugins/cmdb_ip_picker/query.py:130 +#: pipeline_plugins/cmdb_ip_picker/utils.py:80 +#: pipeline_plugins/cmdb_ip_picker/utils.py:188 +#: pipeline_plugins/cmdb_ip_picker/utils.py:194 +#: pipeline_plugins/components/collections/sites/open/cc.py:28 msgid "配置平台(CMDB)" msgstr "Conf System(CC)" -#: pipeline_plugins/cmdb_ip_picker/query.py:86 +#: pipeline_plugins/cmdb_ip_picker/query.py:98 msgid "管控平台(GSE)" msgstr "Control System(GSE)" -#: pipeline_plugins/cmdb_ip_picker/utils.py:192 +#: pipeline_plugins/cmdb_ip_picker/utils.py:204 msgid "集群" msgstr "Set" -#: pipeline_plugins/cmdb_ip_picker/utils.py:198 +#: pipeline_plugins/cmdb_ip_picker/utils.py:210 msgid "模块" msgstr "Module" -#: pipeline_plugins/components/collections/common.py:13 -#: pipeline_plugins/components/collections/controller.py:16 -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:10 -#: pipeline_plugins/components/collections/sites/ieod/bk.py:14 -#: pipeline_plugins/components/collections/sites/open/bk.py:14 +#: pipeline_plugins/components/collections/common.py:25 +#: pipeline_plugins/components/collections/controller.py:28 +#: pipeline_plugins/components/collections/sites/open/bk.py:26 msgid "蓝鲸服务(BK)" msgstr "BK Service(BK)" -#: pipeline_plugins/components/collections/common.py:45 +#: pipeline_plugins/components/collections/common.py:57 #, python-format msgid "请求异常,详细信息: %s" msgstr "Catch exception when request, details: %s" -#: pipeline_plugins/components/collections/common.py:56 +#: pipeline_plugins/components/collections/common.py:68 msgid "请求响应数据格式非 JSON" msgstr "Response data is not valid JSON" -#: pipeline_plugins/components/collections/common.py:62 +#: pipeline_plugins/components/collections/common.py:74 #, python-format msgid "请求失败,状态码: %s,响应: %s" msgstr "Request failed, status code: %s, response content: %s" -#: pipeline_plugins/components/collections/common.py:72 +#: pipeline_plugins/components/collections/common.py:84 msgid "响应内容" msgstr "Response Content" -#: pipeline_plugins/components/collections/common.py:73 +#: pipeline_plugins/components/collections/common.py:85 msgid "状态码" msgstr "Status Code" -#: pipeline_plugins/components/collections/common.py:78 +#: pipeline_plugins/components/collections/common.py:90 msgid "HTTP 请求" msgstr "HTTP Request" -#: pipeline_plugins/components/collections/common.py:79 +#: pipeline_plugins/components/collections/common.py:91 msgid "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" msgstr "Notes: 1.Request URL needs to be accessible under the current network, otherwise it will timeout failure 2.The response status code is between 200-300 (excluding 300), and the corresponding content is JSON format will be executed successfully" -#: pipeline_plugins/components/collections/controller.py:35 +#: pipeline_plugins/components/collections/controller.py:47 msgid "暂停" msgstr "Suspend" -#: pipeline_plugins/components/collections/controller.py:73 +#: pipeline_plugins/components/collections/controller.py:85 #, python-format msgid "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" msgstr "Input[%s] does not match format [second(s) or datetime(%%Y-%%m-%%d %%H:%%M:%%S)]" -#: pipeline_plugins/components/collections/controller.py:100 +#: pipeline_plugins/components/collections/controller.py:112 msgid "定时" msgstr "Timing" -#: pipeline_plugins/components/collections/test.py:15 -msgid "TEST" -msgstr "TEST" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:14 -msgid "GseAgent" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:139 -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:125 -msgid "安装" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:225 -msgid "卸载" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:77 -msgid "短信通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:78 -msgid "短信通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:79 -msgid "邮件通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:80 -msgid "邮件通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:81 -msgid "微信通知结果" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:82 -msgid "微信通知返回信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:87 -msgid "消息通知" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:10 -msgid "游戏区服管理(GCLOUD)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:71 -msgid "批量更新区服标注" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:131 -msgid "批量更新区服状态" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:167 -msgid "预发布大区" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:201 -msgid "发布大区" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:13 -msgid "游戏云存储平台(GCS)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:166 -msgid "权限申请" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:255 -msgid "权限回收提单" -msgstr "Privileges Revoke" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:349 -msgid "执行变更单据" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:442 -msgid "数据库备份" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:502 -msgid "变更提单" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:36 -#: pipeline_plugins/components/collections/sites/open/job.py:39 -msgid "作业平台(JOB)" -msgstr "JOB System(JOB)" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:85 -#: pipeline_plugins/components/collections/sites/clouds/job.py:386 -msgid "无法从 JOB 读取错误信息" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:89 -#: pipeline_plugins/components/collections/sites/clouds/job.py:390 -#, python-format -msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" -msgstr "todo: %s %s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:180 -#: pipeline_plugins/components/collections/sites/open/job.py:163 -msgid "执行作业" -msgstr "Execution JOB" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:239 -#: pipeline_plugins/components/collections/sites/open/job.py:231 -msgid "快速分发文件" -msgstr "Quick File Distribution" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:285 -#: pipeline_plugins/components/collections/sites/open/job.py:301 -msgid "快速执行脚本" -msgstr "Quick Script Execution" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:424 -msgid "本地文件列表为空,请确认本地文件是否已经上传" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:451 -#, python-format -msgid "获取 S3 对象下载链接失败:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:460 -msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:516 -msgid "分发本地文件" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:16 -msgid "蓝鲸监控(Monitor)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:92 -msgid "告警屏蔽" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:16 -msgid "GseProxy" -msgstr "GseProxy" - -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:11 -msgid "AutoTCM(TCM)" -msgstr "AutoTCM(TCM)" - -#: pipeline_plugins/components/collections/sites/ieod/bk.py:39 -#: pipeline_plugins/components/collections/sites/open/bk.py:39 +#: pipeline_plugins/components/collections/sites/open/bk.py:51 msgid "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" msgstr "todo" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:107 -#: pipeline_plugins/components/collections/sites/open/bk.py:107 +#: pipeline_plugins/components/collections/sites/open/bk.py:119 msgid "返回码" msgstr "Response Code" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:108 -#: pipeline_plugins/components/collections/sites/open/bk.py:108 +#: pipeline_plugins/components/collections/sites/open/bk.py:120 msgid "信息" msgstr "Message" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:147 -#: pipeline_plugins/components/collections/sites/open/bk.py:147 +#: pipeline_plugins/components/collections/sites/open/bk.py:159 msgid "发送通知" msgstr "Send Message" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:151 -msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:15 -msgid "负载均衡业务(CLB)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:143 -msgid "扫描域名证书" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:147 -msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:12 -msgid "企业微信(QYWEIXIN)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:36 -#, python-format -msgid "企业微信拉群失败,组件返回错误消息:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:52 -#, python-format -msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" -msgstr "todo:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:62 -msgid "企业微信拉群" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:15 -msgid "消息通知服务(TOF)" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:50 -msgid "获取员工直属Leader" -msgstr "todo" - -#: pipeline_plugins/components/collections/sites/open/bk.py:151 +#: pipeline_plugins/components/collections/sites/open/bk.py:163 msgid "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" msgstr "API Gateway defines the Interface Protocols for these message notification components and gives component examples (see components/generic/templates/cmsi/ in the project). However, the component content is not fully implemented and the user can override the component of this part based on the interface protocol. To reduce the difficulty of implementing a message notification component, the API Gateway provides solutions to update the component configuration online without writing a component code.Please check PaaS->API Gateway->Guide for details." -#: pipeline_plugins/components/collections/sites/open/cc.py:69 +#: pipeline_plugins/components/collections/sites/open/cc.py:81 msgid "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" msgstr "querying Conf System(CC) API cc.search_host showing there is IP which is not belong to current business" -#: pipeline_plugins/components/collections/sites/open/cc.py:174 +#: pipeline_plugins/components/collections/sites/open/cc.py:186 msgid "转移主机模块" msgstr "Transfer Host Module" -#: pipeline_plugins/components/collections/sites/open/cc.py:213 +#: pipeline_plugins/components/collections/sites/open/cc.py:225 msgid "所属运营商校验失败,请重试并修改为正确的所属运营商" msgstr "Isp name in invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:228 +#: pipeline_plugins/components/collections/sites/open/cc.py:240 msgid "所在国家校验失败,请重试并修改为正确的所在国家" msgstr "State name is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:241 +#: pipeline_plugins/components/collections/sites/open/cc.py:253 msgid "所在省份校验失败,请重试并修改为正确的所在省份" msgstr "Province name is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:266 +#: pipeline_plugins/components/collections/sites/open/cc.py:278 msgid "更新主机属性" msgstr "Update Host Property" -#: pipeline_plugins/components/collections/sites/open/cc.py:360 -#: pipeline_plugins/components/collections/sites/open/cc.py:364 +#: pipeline_plugins/components/collections/sites/open/cc.py:372 +#: pipeline_plugins/components/collections/sites/open/cc.py:376 #, python-format msgid "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" msgstr "No information about %s found, please check whether they exist in current business" -#: pipeline_plugins/components/collections/sites/open/cc.py:426 +#: pipeline_plugins/components/collections/sites/open/cc.py:438 #, python-format msgid "成功替换的机器: %s" msgstr "Machine replaced successfully: %s" -#: pipeline_plugins/components/collections/sites/open/cc.py:436 +#: pipeline_plugins/components/collections/sites/open/cc.py:448 msgid "故障机替换" msgstr "Fault Host Replacement" -#: pipeline_plugins/components/collections/sites/open/cc.py:475 +#: pipeline_plugins/components/collections/sites/open/cc.py:487 msgid "清空集群中主机" msgstr "Empty Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:516 +#: pipeline_plugins/components/collections/sites/open/cc.py:528 msgid "删除集群" msgstr "Delete Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:559 +#: pipeline_plugins/components/collections/sites/open/cc.py:571 msgid "修改集群服务状态" msgstr "Update Set Service Status" -#: pipeline_plugins/components/collections/sites/open/cc.py:602 -#: pipeline_plugins/components/collections/sites/open/cc.py:684 +#: pipeline_plugins/components/collections/sites/open/cc.py:614 +#: pipeline_plugins/components/collections/sites/open/cc.py:696 msgid "环境类型校验失败,请重试并修改为正确的环境类型" msgstr "Environment is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:617 -#: pipeline_plugins/components/collections/sites/open/cc.py:669 +#: pipeline_plugins/components/collections/sites/open/cc.py:629 +#: pipeline_plugins/components/collections/sites/open/cc.py:681 msgid "服务状态校验失败,请重试并修改为正确的服务状态" msgstr "Service status is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:636 +#: pipeline_plugins/components/collections/sites/open/cc.py:648 msgid "创建集群" msgstr "Create Set" -#: pipeline_plugins/components/collections/sites/open/cc.py:713 +#: pipeline_plugins/components/collections/sites/open/cc.py:725 msgid "更新集群属性" msgstr "Update Set Attribute" -#: pipeline_plugins/components/collections/sites/open/cc.py:757 +#: pipeline_plugins/components/collections/sites/open/cc.py:769 msgid "模块类型校验失败,请重试并填写正确的模块类型" msgstr "Module type is invalid, please enter the correct" -#: pipeline_plugins/components/collections/sites/open/cc.py:786 +#: pipeline_plugins/components/collections/sites/open/cc.py:798 msgid "更新模块属性" msgstr "Update Module Attribute" -#: pipeline_plugins/components/collections/sites/open/cc.py:831 +#: pipeline_plugins/components/collections/sites/open/cc.py:843 msgid "转移主机至空闲机" msgstr "Transfer Host To Idle Module" -#: pipeline_plugins/components/collections/sites/open/job.py:88 +#: pipeline_plugins/components/collections/sites/open/job.py:50 +msgid "作业平台(JOB)" +msgstr "JOB System(JOB)" + +#: pipeline_plugins/components/collections/sites/open/job.py:99 #, python-format msgid "任务执行失败,前往作业平台(JOB)查看详情" msgstr "JOB task failed,GOTO(JOB)" -#: pipeline_plugins/components/collections/sites/open/job.py:99 +#: pipeline_plugins/components/collections/sites/open/job.py:110 msgid "JOB任务ID" msgstr "JOB Task ID" -#: pipeline_plugins/components/collections/sites/open/job.py:100 +#: pipeline_plugins/components/collections/sites/open/job.py:111 msgid "JOB任务链接" msgstr "JOB Task URL" -#: pipeline_plugins/components/query/common_query.py:33 +#: pipeline_plugins/components/collections/sites/open/job.py:174 +msgid "执行作业" +msgstr "Execution JOB" + +#: pipeline_plugins/components/collections/sites/open/job.py:242 +msgid "快速分发文件" +msgstr "Quick File Distribution" + +#: pipeline_plugins/components/collections/sites/open/job.py:312 +msgid "快速执行脚本" +msgstr "Quick Script Execution" + +#: pipeline_plugins/components/query/common_query.py:45 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" msgstr "Get topology tree of business[app_id=%s] from CC by API[cc.get_topo_tree_by_app_id] failed: %s" -#: pipeline_plugins/components/query/common_query.py:45 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:199 +#: pipeline_plugins/components/query/common_query.py:57 msgid "所有集群(all)" msgstr "Set(all)" -#: pipeline_plugins/components/query/common_query.py:69 +#: pipeline_plugins/components/query/common_query.py:81 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" msgstr "Get all module of business[app_id=%s] from CC by API[cc.get_modules] failed: %s" -#: pipeline_plugins/components/query/common_query.py:79 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:208 +#: pipeline_plugins/components/query/common_query.py:91 msgid "所有模块(all)" msgstr "Modules(all)" -#: pipeline_plugins/components/query/common_query.py:93 +#: pipeline_plugins/components/query/common_query.py:105 #, python-format msgid "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" msgstr "Get cloud list from CC by API[cc.get_plat_id] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:32 -#, python-format -msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" -msgstr "todo[biz_id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:42 -#, python-format -msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" -msgstr "tod[id=%s]" - -#: pipeline_plugins/components/query/sites/clouds/query.py:54 -#, python-format -msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" -msgstr "todo%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:77 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" -msgstr "todo[biz_id=%s, tcm_app_id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:104 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" -msgstr "todo[biz_id=%s, tcm_app_id=%s][id=%s]%s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:198 -msgid "文件上传失败, 文件大小超过2GB" -msgstr "todo" +#: pipeline_plugins/components/query/sites/open/query.py:270 +msgid "文件上传失败, 文件大小超过500M" +msgstr "Upload file failed, which size is greater than 500M" -#: pipeline_plugins/components/query/sites/clouds/query.py:204 -#: pipeline_plugins/components/query/sites/open/query.py:264 +#: pipeline_plugins/components/query/sites/open/query.py:276 msgid "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" msgstr "Upload file failed, which name should not contain chinese or \\/:*?\"<>|" -#: pipeline_plugins/components/query/sites/clouds/query.py:233 -#: pipeline_plugins/components/query/sites/open/query.py:301 +#: pipeline_plugins/components/query/sites/open/query.py:286 +msgid "非法业务 ID" +msgstr "Invalid business id" + +#: pipeline_plugins/components/query/sites/open/query.py:313 msgid "文件上传失败,路径不合法或者程序异常" msgstr "Upload file failed, which path is invalid" -#: pipeline_plugins/components/query/sites/clouds/query.py:243 -#: pipeline_plugins/components/query/sites/open/query.py:311 +#: pipeline_plugins/components/query/sites/open/query.py:323 #, python-format msgid "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" msgstr "Get job of business[app_id=%s] from JOB by API[job.get_task] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:266 -#: pipeline_plugins/components/query/sites/open/query.py:334 +#: pipeline_plugins/components/query/sites/open/query.py:346 #, python-format msgid "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" msgstr "Get job detail of business[app_id=%s] from JOB by API[job.get_task_detail] failed: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:277 -#: pipeline_plugins/components/query/sites/open/query.py:345 +#: pipeline_plugins/components/query/sites/open/query.py:357 msgid "脚本" msgstr "Script" -#: pipeline_plugins/components/query/sites/clouds/query.py:278 -#: pipeline_plugins/components/query/sites/open/query.py:346 +#: pipeline_plugins/components/query/sites/open/query.py:358 msgid "文件" msgstr "File" -#: pipeline_plugins/components/query/sites/open/query.py:258 -msgid "文件上传失败, 文件大小超过500M" -msgstr "Upload file failed, which size is greater than 500M" - -#: pipeline_plugins/components/query/sites/open/query.py:274 -msgid "非法业务 ID" -msgstr "Invalid business id" - -#: pipeline_plugins/components/utils/common.py:44 +#: pipeline_plugins/components/utils/common.py:56 msgid "调用{system}接口{api_name}返回失败, params={params}, error={error}" msgstr "{system} API {api_name} returned false, params={params}, error={error}" -#: pipeline_plugins/components/utils/sites/clouds/utils.py:156 -#, python-format -msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" -msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s" - #~ msgid "循环测试" #~ msgstr "Cycle test" @@ -2079,3 +1794,174 @@ msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s #~ msgid "单据审核失败,请联系DBA查看详情" #~ msgstr "todo" +#~ msgid "调用创建app maker接口失败,错误信息:%s" +#~ msgstr "Creating app maker API called failed, error: %s" + +#~ msgid "调用创建app maker接口失败" +#~ msgstr "App maker API called failed" + +#~ msgid "调用修改app maker接口失败,错误信息:%s" +#~ msgstr "Updating app maker API called failed, error: %s" + +#~ msgid "调用修改app maker接口失败" +#~ msgstr "Updating app maker API called failed" + +#~ msgid "调用修改 LOGO 接口失败,错误信息:%s" +#~ msgstr "todo:%s" + +#~ msgid "调用修改 LOGO 接口失败" +#~ msgstr "todo" + +#~ msgid "调用远程服务失败,Http请求错误状态码:%s" +#~ msgstr "Remote service called failed, HTTP request error status error: %s" + +#~ msgid "蓝鲸智云企业版" +#~ msgstr "BK Enterprise Edition" + +#~ msgid "TEST" +#~ msgstr "TEST" + +#~ msgid "GseAgent" +#~ msgstr "todo" + +#~ msgid "安装" +#~ msgstr "todo" + +#~ msgid "卸载" +#~ msgstr "todo" + +#~ msgid "短信通知结果" +#~ msgstr "todo" + +#~ msgid "短信通知返回信息" +#~ msgstr "todo" + +#~ msgid "邮件通知结果" +#~ msgstr "todo" + +#~ msgid "邮件通知返回信息" +#~ msgstr "todo" + +#~ msgid "微信通知结果" +#~ msgstr "todo" + +#~ msgid "微信通知返回信息" +#~ msgstr "todo" + +#~ msgid "消息通知" +#~ msgstr "todo" + +#~ msgid "游戏区服管理(GCLOUD)" +#~ msgstr "todo" + +#~ msgid "批量更新区服标注" +#~ msgstr "todo" + +#~ msgid "批量更新区服状态" +#~ msgstr "todo" + +#~ msgid "预发布大区" +#~ msgstr "todo" + +#~ msgid "发布大区" +#~ msgstr "todo" + +#~ msgid "游戏云存储平台(GCS)" +#~ msgstr "todo" + +#~ msgid "权限申请" +#~ msgstr "todo" + +#~ msgid "权限回收提单" +#~ msgstr "Privileges Revoke" + +#~ msgid "执行变更单据" +#~ msgstr "todo" + +#~ msgid "数据库备份" +#~ msgstr "todo" + +#~ msgid "变更提单" +#~ msgstr "todo" + +#~ msgid "无法从 JOB 读取错误信息" +#~ msgstr "todo" + +#~ msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" +#~ msgstr "todo: %s %s" + +#~ msgid "本地文件列表为空,请确认本地文件是否已经上传" +#~ msgstr "todo" + +#~ msgid "获取 S3 对象下载链接失败:%s" +#~ msgstr "todo:%s" + +#~ msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" +#~ msgstr "todo" + +#~ msgid "分发本地文件" +#~ msgstr "todo" + +#~ msgid "蓝鲸监控(Monitor)" +#~ msgstr "todo" + +#~ msgid "告警屏蔽" +#~ msgstr "todo" + +#~ msgid "GseProxy" +#~ msgstr "GseProxy" + +#~ msgid "AutoTCM(TCM)" +#~ msgstr "AutoTCM(TCM)" + +#~ msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" +#~ msgstr "todo" + +#~ msgid "负载均衡业务(CLB)" +#~ msgstr "todo" + +#~ msgid "扫描域名证书" +#~ msgstr "todo" + +#~ msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" +#~ msgstr "todo" + +#~ msgid "企业微信(QYWEIXIN)" +#~ msgstr "todo" + +#~ msgid "企业微信拉群失败,组件返回错误消息:%s" +#~ msgstr "todo:%s" + +#~ msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" +#~ msgstr "todo:%s" + +#~ msgid "企业微信拉群" +#~ msgstr "todo" + +#~ msgid "消息通知服务(TOF)" +#~ msgstr "todo" + +#~ msgid "获取员工直属Leader" +#~ msgstr "todo" + +#~ msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" +#~ msgstr "todo[biz_id=%s]%s" + +#~ msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" +#~ msgstr "tod[id=%s]" + +#~ msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" +#~ msgstr "todo%s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" +#~ msgstr "todo[biz_id=%s, tcm_app_id=%s]%s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" +#~ msgstr "todo[biz_id=%s, tcm_app_id=%s][id=%s]%s" + +#~ msgid "文件上传失败, 文件大小超过2GB" +#~ msgstr "todo" + +#~ msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" +#~ msgstr "Get business[app_id=%s] info from CC by API[cc.get_app_by_id] failed: %s" + diff --git a/locale/en/LC_MESSAGES/djangojs.mo b/locale/en/LC_MESSAGES/djangojs.mo index 2a82631b9f0b5e71f9e4e54a7b1bc160c9e75b68..3dce8af43904b8e23b88e1c82d3c51e289bf20a5 100644 GIT binary patch delta 14002 zcmZA72YgT0|HtwB4Pp}!v58gGO6*N2Qae@&szF4IL?u*;e$Co7u01MdQTuDvs@CYx zmbO}@L#sri)va1O{;zlL$K&VmzmLbs^L#$%+;h%7cO?4g=D9gm9uD$<6`FII!!a<( zamrxMqK;ENhvWQEMOnvLRF@nsHkV^=;x(8bH(7oUj`umv0gNDDqrT%5!p`^v_P00# zLx}evQ~I4#RF051jbGxV296VsaSa_O4?c^f@p;t5%ds53Z1D-qOMKS6fCY%JU?^r< z{x35}Bd@(+wtmMcMJ1SyRZ$bwM*2D(vpYD>RP!ZsjkyikDCZz*hh9T1(Pq>*hfxbZgSv&6Q2p6CqE4}!Aq83iM%MzdMtq7qS}APa(e&oQ_+AWc{kJ{0yS|h zi(8vrP*)UZ?ISEd8Fhto%}wTU)Tj9q)Og>c#{Uezck?W2Mqm!|wJeT8P0$jxkXY2jBdmQ2>H-&7ywu_i-PnJ1+-40YQ7b!d@h8^t zI%;dPEPod@VGzF{G+{B+dtTe(_U0heLMNccorJoe7cF+Xv;S&XM?wR=f?DY*>+lvP z5r2p}v01EV3|8?uPH)ufII)N4YScKdq56M>8vh#VAe;z;&$^mYP<`mexG7J{1!D%alY5u8Gj@db*PV8VKnN*QJ5Q3 zt$iZu#M$Ns%O6Ee{1)=JiF4KR#d~|>Rz{r{Wp+gE*buMX?@aS5&O+<37J2TRgQzRZ z*~c3w%&cJ6Hk+9-sD<}NEogwnDHu*X9`oP=)Gb+#+3$ZwcExdaS;J9_&!7hU5Ov~b zmjA~55p`t`Q2oN5@+^(o(Tb?{I%bUJO#TF^pst>w3)Uk!ULal$&BF+ViFvi9#$3;5OIzfrGcj(*;P z3S%+i@)kG1NaA+L8|#cm&3DfHxF7Go5?@>5j(OkA%~wh7VVHsyPzzX$+JQCJ{;GKd zOOQWneuaA2?pb?ye{Z}>W@LZ%UlX(-Q4%{^!%&<+{48p~+gJ;84Dhx#3QG|;wzwy1 zVR5L3ZzyWq=dd)+KwUrvYMv1O3aN^Z`>E(2_CO8L4_o38)WjQ69gm?-{1!FAKd1>p zp7s`27Pa-AQ2pak6VE~Y>9)mu3w2%=>H_?KSf$7yezTFNiFI)SYQR&d2|q<`c^2wJ z@|WdnJ>%tDqf5R!mcttujydAJaY~tyW_#oU{muX?y7Ft?2zt57>|62tWS|2!4lg0HRNmiaqsVZI^Wg!xfBQrhAuGun(r zjT4Vrz;M(=vrxBWsd*eV?hUNR{LYV5bYjJ!-U-!F9U5BP+U#P+q53D9$*3I}XYowb z#PiKn=2ld{fW@aV`~AO2MFW0m4L8hR%zsf&fBpn-;3lXmY>zrG!5n4nsi3EybnuW)Ri{H9N59^gu%q!P*>as)o&PT zVX3HjUmV8%>q-_`!yeQ?Z=y~-XYr@l+Q)A<%uT-ZaPPnQRKi@u)ldW0MzuG_$@FiH zj}f0t^8TH16I&AhY;hg`2)hCdqM-v`!jAYFmLKUjMequ${d?4ce?(1GaFjPeF;v_f z^WYPx1$Dvv_>?&Wa}uXuF#6M|=t?J|J~;DG18m0XxCF&7{QPsPihLCa#ZM zu+tp1(3Yr)qfrxeL4Ck_VL?pBLVEuvQBlWvm=9N=R=yFn(w!FXv-V?Hko-B+0xqHY z-#|_9qnRh!`{#T`EI__B7R4@D2;;G!-v2RFw15{-9p_>pT!Gs9t*C_^LEY=qSP0+2 z&iI+-tE712)IdE$jZoi0h;rKk(rj)n0cYT;*57jg;xYPd>8E4qzZ`CU}Uzsx+(dIJ^5 zg5)cq?sXJupn9k)Y=T9wCF&XKj_ThJ^^7E9aZEv7(5z?Ke|6YQLMz{o`mOak>Y@1@ zwZQABd-p3=z~HgofYne7kHjc!hI+k5qt4%H?E%!SIEmR;j#}{5vFyJp*GLq>8`kg# zY6l*m2FjP}O;iN6pfae3ttM*W?Xf8KM2(Y(Wij326}h3DhmPjCyE-)4dZ5pdPkj7>OM$o`8*rcVKh8j#_wmR--F^3^h&z zRK6KD)%)Lu%5j`*4NWI{9imZRwiwjPd!V*M37>x&?bJK7o1*K1VI& z4#wa;)I6;x+gmf4{nr)sB%u{Pjf#hu$*76bQ7fK?T7Zjs7Pg_bb}t^s*HJq%=>_k+ z>8SJOV{u$(`Gcr01-0Y;U#MuHKTucpFKVEIQ$5454smJJK%Fog2cdRsJgWb6)K1Ms zjkgr_Fs?;Syu_03rWXZxD0dR8uaT*GN|aa+k=|mC~BZLExv?W`4`v;Gf@-Q zebHN3OMKEt8|qxdOOx03lMif^@~GYzzEdakYdh3J*=Cs5Waza zUD-uTTtzJ)3wfQL`YqzF1py;p^~VbsEC@U7V1OP z2xGA4V)kE&wIu4}5!6oHLG8d_7=^i+y)rgI{f>AVi{NA|j0;iE&U$QsTT!?23yXh4 zJ%rU=?^%n+YQ!U5_Fn@mC82NhX7devn)oY>#uiJxc0Yy@uf?Lc54ELdQ6HLb&A*Vl zKWd&sJv<+ww)iq?L0PD${+{KXmEO*UqVg3{ z_qc}T8=#(zc32)eVF-@2coIhF{a;H(9Zz6aJdL`Sp{u+FltfKX1NAV~x40E*!WdNl z9;k8pSv<(vhoR0NW2U1na2f{b{hwutxu^jaTD;8S)u<0p25L*UVS7A=dIo}4d#_nI z>ikI5f*PV;%NAG)JE9hxfO`E>Fqhu{7pUkS&ae)vtivYMO829_T!&Eu9z)%dw^0Lr zigoa7)N32E#yc+*6&FWcKuOej6;Ka-9nAjkf32)TXRJU&FVr(J9yP!;)V-U5`lc_l z{I@jzPTU5gDMKlB>Clwihm^-CsT3WRY17dRU!dHi1pBoA9CZoyP;@lb3>=Xj&UMQ_ zg&nM|1og+LSE5g0JS!>Mjb6l0;1c@i6>Mkc@1xEJWgi8}aShHL&A*@E4QtR<>j+|y zA-IUP*;t$M3`Ivy+Aez4>{qH1eY7nhSe9~%@GCrkVGh>?`WlqkxVwEc?upAU6B zPQMXeHT&mbewL*4rxd5p=Ikv0GQ#6N=HFxq@h=@VSo{|rwL!1p^OhI}IucMBG6dwzDcoe1WDT~`v_fd3Y|NlSwjW(0=0%aFvwKZ1bgwL%`+S#EW98XjJ zA>aCu3G~ZLM>7v6$CgY7kl@g^PCJXk^OT&KL=4t(a;t@wLy=d zetUg}&rt?i{y%a*Q~%y#{bOVor4IRH6dmU%MH!D@FWJWheonOK&r<&*o+`iSocok8 z2GVzbFY4Gz`G9(LN^43B;(3%l)?Q0j!=X=gUaKqaNBbXm7pqv`V|xEfQJPrC3e-a> z7bwx>s^a^cl!~#a-`O`PI(AapQ{GmGv)5cPMXB@1h2dWa{<3s?(qPTI!YQ zpS}N62>3h1$wguh&Y|dd)g$}oRetLK5q^b}&peWUw3>&u5c=r&i87J6QFi40_>Xuw zMZb)`pae93E)wM^I)XWQ3iU&jCX@-3aPlLt8)YhGHswW13;GVvK8tSxv5rjS4A0^QvJI%k@=+Kw?IEsaELOLY)Qez#tV3B( z>8zMR7gG*rQz*gIdr@XkuSnlp)E81;N-0ZS$5`tAV*Ge`G@I_pEU( zxq6m=f&m+n-(qb8$lsv!Bd$q_pgcusK+$oWvdYeVD?7ula!k|px1lnh@&z6C;%VGQ zsYU%G>_E|>zYP8+y6$KP{U4I zWSy$e;Q+b&mal4)?I4b!)Ocjzvb1H9`;GF!Bl%L)e<4?g_IY@jvW5~u{tTAU`=3Ja z6aGMHPR9cHB)P%(24y>CA0?8uT;!)wuSfk)>fUe-LG?cf_ImnI9 zZsD(5bFAsuIeLj&QfdQ=qOKI1;f#axHaC2aKOJA~JlQ=kq1^y%t zbK16Bt7l}co1V35(TyVuzB?4C;EYO1OsVz!a3}SDeKPlN$Xq+;yWOv6t=R2#uHdA_ zr;enXyQ51Z_q#5?yZO6CxUt=e2F7&T?+e7mX8GJMJ%{DXTCvNyIrGqsBfA0@d-{Ct zPrd5o$eJ?8jq1HR@JsJpL2li?p@kRRdS$P3bJ14Ho||*Gxug4baR2Fh#?2kq-0d7U zz^&H5OrT5uygv7t0c!&>0|y5ME)L4@1t!O@^M$;cHD!I~^1U~Y9ldev*v+{c0t<#T z49YXl&78A1Gh?xPEn%{oG;E<8kyy@+PaGWhFflGD&~ijIUod@duG$s|9@R4_ur)cC z&pnb-z&)R`(oG-J)IBw3U?A>Uzt6oswz8WqwOsBsyE8Lpv6U~UZuGew#x-~6j%yjX zKCXz*y+3}ZyX(1`?xYC~1IH(j_#^#-``+^<0tF|g1-b6zK7rCN%n1tYo08~rTTeS0 zlC|MACu_>;TkE&nIC3m&<4U*T^eng1j0$e-jM47d8E@sQUn?pyqHa{v$VP$XGhYny zMY(fkS8*rJ?o(LzHlk-*eA>9wrrcMz$h^{SkGaR((0T6##m2fJ8DT}oB#a%Ml$x59 zlAP+@$b@8f_M&RJv+ox5tVK25a*O|SD=w+%rY;E$xJ#D#0(FKjRGbSZ9EwFW0%OLm1JrD9mr=^We8a$54bL^YrF5mZrdu?CWK;8X=d?kCPj2k;7 zA)vM;`IXz#m^f3ueucWk534x-gi~8IeXG*zU&kS*ook{vXYfqXS literal 50468 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 diff --git a/locale/en/LC_MESSAGES/djangojs.po b/locale/en/LC_MESSAGES/djangojs.po index f981e7c984..da3daabf26 100644 --- a/locale/en/LC_MESSAGES/djangojs.po +++ b/locale/en/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,3814 +17,3382 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:47 -#, javascript-format -msgid "Available %s" -msgstr "Available %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:53 -#, javascript-format -msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." -msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:69 -#, javascript-format -msgid "Type into this box to filter down the list of available %s." -msgstr "Type into this box to filter down the list of available %s." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:74 -msgid "Filter" -msgstr "Filter" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -msgid "Choose all" -msgstr "Choose all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -#, javascript-format -msgid "Click to choose all %s at once." -msgstr "Click to choose all %s at once." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:84 -msgid "Choose" -msgstr "Choose" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:86 -msgid "Remove" -msgstr "Remove" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:92 -#, javascript-format -msgid "Chosen %s" -msgstr "Chosen %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:98 -#, javascript-format -msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." -msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -msgid "Remove all" -msgstr "Remove all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -#, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "Click to remove all chosen %s at once." - -#: blueapps/conf/project_template/static/admin/js/actions.js:48 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:2 -msgid "%(sel)s of %(cnt)s selected" -msgid_plural "%(sel)s of %(cnt)s selected" -msgstr[0] "%(sel)s of %(cnt)s selected" -msgstr[1] "%(sel)s of %(cnt)s selected" - -#: blueapps/conf/project_template/static/admin/js/actions.js:117 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:4 -msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." -msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." - -#: blueapps/conf/project_template/static/admin/js/actions.js:129 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." -msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." - -#: blueapps/conf/project_template/static/admin/js/actions.js:131 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." -msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:74 -#, javascript-format -msgid "Note: You are %s hour ahead of server time." -msgid_plural "Note: You are %s hours ahead of server time." -msgstr[0] "Note: You are %s hour ahead of server time." -msgstr[1] "Note: You are %s hours ahead of server time." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:82 -#, javascript-format -msgid "Note: You are %s hour behind server time." -msgid_plural "Note: You are %s hours behind server time." -msgstr[0] "Note: You are %s hour behind server time." -msgstr[1] "Note: You are %s hour behind server time." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:109 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:160 -msgid "Now" -msgstr "Now" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:127 -msgid "Choose a Time" -msgstr "Choose a Time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:157 -msgid "Choose a time" -msgstr "Choose a time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:165 -msgid "Midnight" -msgstr "Midnight" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:170 -msgid "6 a.m." -msgstr "6 a.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:175 -msgid "Noon" -msgstr "Noon" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:180 -msgid "6 p.m." -msgstr "6 p.m" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:188 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:348 -msgid "Cancel" -msgstr "Cancel" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:253 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:333 -msgid "Today" -msgstr "Today" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:270 -msgid "Choose a Date" -msgstr "Choose a Date" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:327 -msgid "Yesterday" -msgstr "Yesterday" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:339 -msgid "Tomorrow" -msgstr "Tomorrow" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:12 -msgid "January" -msgstr "January" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:13 -msgid "February" -msgstr "February" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:14 -msgid "March" -msgstr "March" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:15 -msgid "April" -msgstr "April" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:16 -msgid "May" -msgstr "May" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:17 -msgid "June" -msgstr "June" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:18 -msgid "July" -msgstr "July" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:19 -msgid "August" -msgstr "August" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:20 -msgid "September" -msgstr "September" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:21 -msgid "October" -msgstr "October" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:22 -msgid "November" -msgstr "November" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:23 -msgid "December" -msgstr "December" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:26 -msgctxt "one letter Sunday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:27 -msgctxt "one letter Monday" -msgid "M" -msgstr "M" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:28 -msgctxt "one letter Tuesday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:29 -msgctxt "one letter Wednesday" -msgid "W" -msgstr "W" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:30 -msgctxt "one letter Thursday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:31 -msgctxt "one letter Friday" -msgid "F" -msgstr "F" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:32 -msgctxt "one letter Saturday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:10 -#: blueapps/conf/project_template/static/admin/js/collapse.js:21 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Show" -msgstr "Show" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:18 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Hide" -msgstr "Hide" - -#: blueapps/conf/project_template/static/remote/v3/assets/jquery-ui-1.11.0.custom/jquery-ui.min.js:10 -msgid "'" -msgstr "'" - -#: pipeline/blueflow/src/api/interceptors.js:40 +#: pipeline/blueflow/src/api/interceptors.js:51 msgid "接口数据返回为空" msgstr "No data returned by API" -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "接口异常," msgstr "API error, " -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "HTTP状态码:" msgstr "HTTP Status:" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:50 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:61 msgid "错误码" msgstr "ErrorCode" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:51 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:62 msgid "请输入 IP" msgstr "Please enter IP" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:56 -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:138 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:67 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:149 msgid "请输入名称" msgstr "Please enter a name" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:57 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:82 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:68 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:93 msgid "新建流程" msgstr "New Flow" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:58 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:69 msgid "编辑流程" msgstr "Edit Flow" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:59 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:137 -#: pipeline/blueflow/src/pages/config/index.vue:64 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:119 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:186 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:70 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:148 +#: pipeline/blueflow/src/pages/config/index.vue:75 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:130 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:116 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:197 msgid "保存" msgstr "Save" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:60 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:71 msgid "返回" msgstr "Return" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:137 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:148 msgid "工具" msgstr "Tools" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:139 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:200 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:150 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:211 msgid "开始" msgstr "Start" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:140 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:201 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:151 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:212 msgid "结束" msgstr "End" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:141 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:85 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:152 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:96 msgid "个" msgstr " " -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:192 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:203 msgid "复位" msgstr "Reset zoom" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:193 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:204 msgid "放大" msgstr "Zoom in" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:194 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:205 msgid "缩小" msgstr "Zoom out" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:195 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:206 msgid "节点框选" msgstr "Selection" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:196 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:207 msgid "排版" msgstr "Layout" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:197 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:118 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:115 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:208 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:129 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:126 msgid "全选" msgstr "Select All" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:198 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:209 msgid "反选" msgstr "Inverse Select" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:199 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:210 msgid "已添加" msgstr " Added" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:200 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:39 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:211 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:50 msgid "个节点" msgstr " Nodes" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:254 -#: pipeline/blueflow/src/store/modules/template.js:29 -#: pipeline/blueflow/src/store/modules/template.js:56 -#: pipeline/blueflow/src/store/modules/template.js:474 -#: pipeline/blueflow/src/store/modules/template.js:489 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:265 +#: pipeline/blueflow/src/store/modules/template.js:40 +#: pipeline/blueflow/src/store/modules/template.js:67 +#: pipeline/blueflow/src/store/modules/template.js:485 +#: pipeline/blueflow/src/store/modules/template.js:500 msgid "步骤1" msgstr "Stage1" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:452 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:463 msgid "排版自动保存" msgstr "Automatic saved" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:453 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:464 msgid "排版完成,原内容在本地缓存中" msgstr "Layout completed, see last version in the Local Caches" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:92 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:125 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:103 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:240 msgid "取消勾选" msgstr "Check to cancel" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:93 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:126 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:228 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:104 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:137 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 msgid "勾选参数作为全局变量" msgstr "Check to adding the parameter to Global Variables" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:34 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:154 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:199 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:45 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:165 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:322 msgid "请选择" msgstr "Please select" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:35 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:46 msgid "输入筛选条件,多条筛选条件换行隔开" msgstr "Enter filter condition, multiple filter condition are separated by line breaks" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:36 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:42 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 -#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:181 -#: pipeline/blueflow/src/main.js:62 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:47 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:53 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:122 +#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:192 +#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:71 msgid "必填项" msgstr "Required" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:38 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:99 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:119 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:49 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:130 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:124 msgid "已选择" msgstr " Selected" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:40 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:51 msgid "搜索节点" msgstr "Search Nodes" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:41 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:70 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:98 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:89 -#: pipeline/blueflow/src/components/common/base/NoData.vue:26 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:197 -#: pipeline/blueflow/src/pages/functor/index.vue:319 -#: pipeline/blueflow/src/pages/functor/index.vue:324 -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:52 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:121 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:81 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/base/NoData.vue:37 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:208 +#: pipeline/blueflow/src/pages/functor/index.vue:330 +#: pipeline/blueflow/src/pages/functor/index.vue:335 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 msgid "无数据" msgstr "No Data" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:16 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:27 msgid "搜索IP,多个以逗号隔开" msgstr "Search IP, multiple ips are separated by commas" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:30 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:41 msgid "(同时满足)" msgstr "(All match)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:31 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:42 msgid "增加一条筛选条件" msgstr "Add one filter condition" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:93 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 msgid "复制IP" msgstr "Copy IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:94 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 msgid "复制Agent未安装IP" msgstr "Copy Not Installed IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:95 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 msgid "清空IP" msgstr "Remove IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:96 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 msgid "清空Agent未安装IP" msgstr "Remove Not Installed IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:97 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:66 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:77 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:153 msgid "添加" msgstr "Add" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:98 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 msgid "更多操作" msgstr "More Operations" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 msgid "个静态IP(未安装agent" msgstr " Static IP(not installed " -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:101 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:112 msgid "个)" msgstr " )" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:102 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:67 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:78 msgid "云区域" msgstr "Cloud Area" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:103 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:68 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:94 -#: pipeline/blueflow/src/pages/audit/index.vue:161 -#: pipeline/blueflow/src/pages/functor/index.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:223 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:114 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:79 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:105 +#: pipeline/blueflow/src/pages/audit/index.vue:114 +#: pipeline/blueflow/src/pages/functor/index.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:199 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:251 msgid "状态" msgstr "Status" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:69 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:115 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:80 msgid "异常" msgstr "Exceptions" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:140 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:196 -#: pipeline/blueflow/src/pages/audit/index.vue:162 -#: pipeline/blueflow/src/pages/functor/index.vue:164 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:224 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:286 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:116 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:151 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:207 +#: pipeline/blueflow/src/pages/audit/index.vue:115 +#: pipeline/blueflow/src/pages/functor/index.vue:175 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 msgid "操作" msgstr "Operation" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:117 msgid "移除" msgstr "Remove" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:71 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:118 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:82 msgid "正常" msgstr "normal" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:119 msgid "无数据,点击" msgstr "No data, click" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:120 msgid "服务器" msgstr "Host" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:72 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:138 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:121 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:41 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:187 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:83 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:149 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:132 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:52 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:117 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:198 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:170 msgid "取消" msgstr "Cancel" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:57 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:68 msgid "静态IP" msgstr "Static IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:58 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:69 msgid "动态IP" msgstr "Dynamic IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:59 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:70 msgid "筛选条件" msgstr "Filter Condition" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:71 msgid "排除条件" msgstr "Exclusion condition" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:139 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:36 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:177 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:150 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:47 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 msgid "编辑" msgstr "Edit" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:141 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:37 -#: pipeline/blueflow/src/pages/appmaker/index.vue:85 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:97 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:116 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:152 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:48 +#: pipeline/blueflow/src/pages/appmaker/index.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:127 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 msgid "删除" msgstr "Delete" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:276 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:287 msgid "请求表头数据失败,使用预置表头" msgstr "Requesting table titles failed, please config columns" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:25 -#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:24 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:36 +#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:35 msgid "请选择日期时间" msgstr "Please select a datetime" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:38 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:49 msgid "要修改密码请点击后重新输入密码" msgstr "Please enter a new password when modifying" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:111 msgid "加载中" msgstr "Loading" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:195 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:154 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:206 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:165 msgid "请求数据失败" msgstr "Get data failed" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:80 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:137 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 msgid "点击上传" msgstr "Upload" -#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:23 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:172 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 +#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:34 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:256 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:326 msgid "高级搜索" msgstr "Advanced Search" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:14 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:25 msgid "您需要登录蓝鲸智云" msgstr "You need login BlueKing" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:15 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:26 msgid "立即登录" msgstr "Login" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:28 msgid "对不起,您没有当前应用的访问权限" msgstr "Sorry, you have no access permissions of this app" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:18 -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:18 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:29 msgid "请尝试如下操作:" msgstr "Please try the following operations:" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:30 msgid "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" msgstr "Contact system admin to add user or IP whitelist for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:26 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:37 msgid "对不起,您没有当前操作需要的的权限" msgstr "Sorry, you have no access permissions of this operation" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:27 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:40 msgid "1.联系业务运维为您添加" msgstr "1.Contact business maintainers to add " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:28 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:39 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:41 msgid "配置平台" msgstr "Conf System " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:29 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:40 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:42 msgid "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" msgstr "business roles like maintainer, productor, developer, tester" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:41 msgid "2.联系业务运维为您添加需要操作的流程模板的权限" msgstr "2.Contact business maintainers to add flow permissions for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:42 msgid "3.或者前往" msgstr "3.Or goto " -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:32 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:33 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:43 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:44 msgid "创建属于自己的业务" msgstr "to Creating you own business" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:28 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:39 msgid "对不起,您没有业务权限" msgstr "Sorry, you have no access permissions of business" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:32 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:43 msgid "2.或者前往" msgstr "2.Or goto " -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:28 msgid "对不起,您没有当前应用的管理员权限" msgstr "Sorry, you have no management permissions of APP" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:30 msgid "联系“管理员”为您添加管理员权限" msgstr "Contact \"admin\" to add admin permissions for you" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:16 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:27 msgid "应用出现异常" msgstr "System error occurred" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:17 -#: pipeline/blueflow/src/utils/errorHandler.js:33 -#: pipeline/blueflow/src/utils/errorHandler.js:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:28 +#: pipeline/blueflow/src/utils/errorHandler.js:44 +#: pipeline/blueflow/src/utils/errorHandler.js:49 msgid "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" msgstr "System error occurred. Please record error scenario and contact developer, thanks!" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:29 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:40 msgid "QQ咨询" msgstr "QQ" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:30 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:41 msgid "蓝鲸官网" msgstr "Official Website" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:31 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:42 msgid "蓝鲸论坛" msgstr "Blueking Forum" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:32 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:43 msgid "蓝鲸智云 版权所有" msgstr " " -#: pipeline/blueflow/src/components/layout/Navigator.vue:75 +#: pipeline/blueflow/src/components/layout/Navigator.vue:86 msgid "职能化中心" msgstr "Functional" -#: pipeline/blueflow/src/components/layout/Navigator.vue:83 -#: pipeline/blueflow/src/pages/audit/index.vue:152 +#: pipeline/blueflow/src/components/layout/Navigator.vue:94 +#: pipeline/blueflow/src/pages/audit/index.vue:105 msgid "审计中心" msgstr "Audit" -#: pipeline/blueflow/src/components/layout/Navigator.vue:90 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:134 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:219 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/components/layout/Navigator.vue:101 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:145 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:203 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "流程模板" msgstr "Flows" -#: pipeline/blueflow/src/components/layout/Navigator.vue:94 -#: pipeline/blueflow/src/pages/functor/index.vue:196 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:278 +#: pipeline/blueflow/src/components/layout/Navigator.vue:105 +#: pipeline/blueflow/src/pages/functor/index.vue:207 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 msgid "业务流程" msgstr "Business Flow" -#: pipeline/blueflow/src/components/layout/Navigator.vue:99 -#: pipeline/blueflow/src/components/layout/Navigator.vue:136 -#: pipeline/blueflow/src/pages/functor/index.vue:200 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:279 +#: pipeline/blueflow/src/components/layout/Navigator.vue:110 +#: pipeline/blueflow/src/components/layout/Navigator.vue:147 +#: pipeline/blueflow/src/pages/functor/index.vue:211 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 msgid "公共流程" msgstr "Common Flow" -#: pipeline/blueflow/src/components/layout/Navigator.vue:108 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:171 +#: pipeline/blueflow/src/components/layout/Navigator.vue:119 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 msgid "周期任务" msgstr "Periodic Tasks" -#: pipeline/blueflow/src/components/layout/Navigator.vue:113 -#: pipeline/blueflow/src/components/layout/Navigator.vue:193 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:216 +#: pipeline/blueflow/src/components/layout/Navigator.vue:124 +#: pipeline/blueflow/src/components/layout/Navigator.vue:204 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:111 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 msgid "任务记录" msgstr "Tasks" -#: pipeline/blueflow/src/components/layout/Navigator.vue:118 +#: pipeline/blueflow/src/components/layout/Navigator.vue:129 msgid "业务配置" msgstr "Configs" -#: pipeline/blueflow/src/components/layout/Navigator.vue:123 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:83 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/components/layout/Navigator.vue:134 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:94 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:254 msgid "轻应用" msgstr "Mini-APP" -#: pipeline/blueflow/src/components/layout/Navigator.vue:127 +#: pipeline/blueflow/src/components/layout/Navigator.vue:138 msgid "管理员入口" msgstr "Admin Entrance" -#: pipeline/blueflow/src/components/layout/Navigator.vue:131 -#: pipeline/blueflow/src/pages/statistics/index.vue:56 +#: pipeline/blueflow/src/components/layout/Navigator.vue:142 +#: pipeline/blueflow/src/pages/statistics/index.vue:67 msgid "运营数据" msgstr "Analysis" -#: pipeline/blueflow/src/components/layout/Navigator.vue:155 +#: pipeline/blueflow/src/components/layout/Navigator.vue:166 msgid "logo-zh" msgstr "logo-en" -#: pipeline/blueflow/src/components/layout/Navigator.vue:157 +#: pipeline/blueflow/src/components/layout/Navigator.vue:168 msgid "帮助文档" msgstr "Help" -#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:14 +#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:25 msgid "没找到页面!" msgstr "Page not found!" -#: pipeline/blueflow/src/config/setting.js:47 +#: pipeline/blueflow/src/config/setting.js:58 msgid "提示" msgstr "Prompt" -#: pipeline/blueflow/src/constants/index.js:2 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:161 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:231 -#: pipeline/blueflow/src/pages/audit/index.vue:243 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:92 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:348 +#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:172 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:242 +#: pipeline/blueflow/src/pages/audit/index.vue:196 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:103 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:268 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:359 msgid "未执行" msgstr "Created" -#: pipeline/blueflow/src/constants/index.js:3 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:185 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:228 -#: pipeline/blueflow/src/pages/audit/index.vue:169 -#: pipeline/blueflow/src/pages/audit/index.vue:275 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:112 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:373 +#: pipeline/blueflow/src/constants/index.js:14 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:196 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:239 +#: pipeline/blueflow/src/pages/audit/index.vue:122 +#: pipeline/blueflow/src/pages/audit/index.vue:228 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:123 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:384 msgid "执行中" msgstr "Executing" -#: pipeline/blueflow/src/constants/index.js:4 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:189 -#: pipeline/blueflow/src/pages/audit/index.vue:170 -#: pipeline/blueflow/src/pages/audit/index.vue:279 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:117 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:178 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:209 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:171 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:189 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:675 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:377 +#: pipeline/blueflow/src/constants/index.js:15 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:200 +#: pipeline/blueflow/src/pages/audit/index.vue:123 +#: pipeline/blueflow/src/pages/audit/index.vue:232 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:220 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:182 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:200 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:686 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:388 msgid "暂停" msgstr "Suspend" -#: pipeline/blueflow/src/constants/index.js:5 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:193 -#: pipeline/blueflow/src/pages/audit/index.vue:283 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:122 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:381 +#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 +#: pipeline/blueflow/src/pages/audit/index.vue:236 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:133 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 msgid "节点暂停" msgstr "Node Suspended" -#: pipeline/blueflow/src/constants/index.js:6 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:197 -#: pipeline/blueflow/src/pages/audit/index.vue:287 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:127 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:385 +#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:208 +#: pipeline/blueflow/src/pages/audit/index.vue:240 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:138 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:396 msgid "失败" msgstr "Failed" -#: pipeline/blueflow/src/constants/index.js:7 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:155 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:225 -#: pipeline/blueflow/src/pages/audit/index.vue:237 -#: pipeline/blueflow/src/pages/functor/index.vue:265 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:84 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:259 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:342 +#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:166 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:190 +#: pipeline/blueflow/src/pages/functor/index.vue:276 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:95 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:270 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:353 msgid "完成" msgstr "Finished" -#: pipeline/blueflow/src/constants/index.js:8 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:201 -#: pipeline/blueflow/src/pages/audit/index.vue:291 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:163 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:389 +#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:212 +#: pipeline/blueflow/src/pages/audit/index.vue:244 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:174 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:400 msgid "撤销" msgstr "Revoke" -#: pipeline/blueflow/src/constants/index.js:12 +#: pipeline/blueflow/src/constants/index.js:23 msgid "开始节点" msgstr "Start Node" -#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/constants/index.js:24 msgid "结束节点" msgstr "End Node" -#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/constants/index.js:27 msgid "并行网关" msgstr "Parallel Gateway" -#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/constants/index.js:28 msgid "分支网关" msgstr "Exclusive Gateway" -#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/constants/index.js:29 msgid "汇聚网关" msgstr "Converge Gateway" -#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/constants/index.js:30 msgid "标准插件节点" msgstr "Standard Plugins Node" -#: pipeline/blueflow/src/constants/index.js:20 +#: pipeline/blueflow/src/constants/index.js:31 msgid "子流程节点" msgstr "Subprocess Node" -#: pipeline/blueflow/src/main.js:66 +#: pipeline/blueflow/src/main.js:77 msgid "流程名称不能为空" msgstr "Flow name cannot be empty" -#: pipeline/blueflow/src/main.js:67 +#: pipeline/blueflow/src/main.js:78 msgid "流程名称不能包含" msgstr "Flow name cannot contain " -#: pipeline/blueflow/src/main.js:67 pipeline/blueflow/src/main.js:72 -#: pipeline/blueflow/src/main.js:76 pipeline/blueflow/src/main.js:81 -#: pipeline/blueflow/src/main.js:99 pipeline/blueflow/src/main.js:104 -#: pipeline/blueflow/src/main.js:112 pipeline/blueflow/src/main.js:120 -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:78 pipeline/blueflow/src/main.js:83 +#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:92 +#: pipeline/blueflow/src/main.js:110 pipeline/blueflow/src/main.js:115 +#: pipeline/blueflow/src/main.js:123 pipeline/blueflow/src/main.js:131 +#: pipeline/blueflow/src/main.js:140 msgid "非法字符" msgstr " " -#: pipeline/blueflow/src/main.js:68 +#: pipeline/blueflow/src/main.js:79 msgid "流程名称长度不能超过" msgstr "Length of flow name cannot be larger than " -#: pipeline/blueflow/src/main.js:68 pipeline/blueflow/src/main.js:73 -#: pipeline/blueflow/src/main.js:77 pipeline/blueflow/src/main.js:82 -#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:100 -#: pipeline/blueflow/src/main.js:105 pipeline/blueflow/src/main.js:113 -#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:121 -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:79 pipeline/blueflow/src/main.js:84 +#: pipeline/blueflow/src/main.js:88 pipeline/blueflow/src/main.js:93 +#: pipeline/blueflow/src/main.js:98 pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:127 pipeline/blueflow/src/main.js:132 +#: pipeline/blueflow/src/main.js:141 msgid "个字符" msgstr " characters" -#: pipeline/blueflow/src/main.js:71 +#: pipeline/blueflow/src/main.js:82 msgid "节点名称不能为空" msgstr "Node name cannot be empty" -#: pipeline/blueflow/src/main.js:72 +#: pipeline/blueflow/src/main.js:83 msgid "节点名称不能包含" msgstr "Node name cannot contain " -#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/main.js:84 msgid "节点名称长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:76 +#: pipeline/blueflow/src/main.js:87 msgid "步骤名称不能包含" msgstr "Stage name cannot contain " -#: pipeline/blueflow/src/main.js:77 +#: pipeline/blueflow/src/main.js:88 msgid "步骤名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:80 +#: pipeline/blueflow/src/main.js:91 msgid "变量名称不能为空" msgstr "Variable name cannot be empty" -#: pipeline/blueflow/src/main.js:81 +#: pipeline/blueflow/src/main.js:92 msgid "变量名称不能包含" msgstr "Variable name cannot contain " -#: pipeline/blueflow/src/main.js:82 +#: pipeline/blueflow/src/main.js:93 msgid "变量名称长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:85 +#: pipeline/blueflow/src/main.js:96 msgid "变量KEY值不能为空" msgstr "KEY cannot be empty" -#: pipeline/blueflow/src/main.js:86 +#: pipeline/blueflow/src/main.js:97 msgid "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" msgstr "KEY is composed of letters, numbers, underline and cannot begin with number" -#: pipeline/blueflow/src/main.js:87 +#: pipeline/blueflow/src/main.js:98 msgid "变量KEY值长度不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:88 +#: pipeline/blueflow/src/main.js:99 msgid "变量KEY值已存在" msgstr "KEY cannot repeat" -#: pipeline/blueflow/src/main.js:91 +#: pipeline/blueflow/src/main.js:102 msgid "变量隐藏时默认值不能为空" msgstr "Default cannot be empty where variable is hide" -#: pipeline/blueflow/src/main.js:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:399 +#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:410 msgid "默认值不满足正则校验" msgstr "Default does not match validation" -#: pipeline/blueflow/src/main.js:95 +#: pipeline/blueflow/src/main.js:106 msgid "正则校验不是合法的正则表达式" msgstr "Regular validation invalid" -#: pipeline/blueflow/src/main.js:98 +#: pipeline/blueflow/src/main.js:109 msgid "任务名称不能为空" msgstr "Task name cannot be empty" -#: pipeline/blueflow/src/main.js:99 +#: pipeline/blueflow/src/main.js:110 msgid "任务名称不能包含" msgstr "Task name cannot contain " -#: pipeline/blueflow/src/main.js:100 +#: pipeline/blueflow/src/main.js:111 msgid "任务名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/main.js:114 msgid "方案名称不能为空" msgstr "Scheme name cannot be empty" -#: pipeline/blueflow/src/main.js:104 +#: pipeline/blueflow/src/main.js:115 msgid "方案名称不能包含" msgstr "Scheme name cannot contain " -#: pipeline/blueflow/src/main.js:105 +#: pipeline/blueflow/src/main.js:116 msgid "方案名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:108 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:135 +#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:146 msgid "流程模板不能为空" msgstr "Flow cannot be empty" -#: pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:122 msgid "应用名称不能为空" msgstr "Name cannot be empty" -#: pipeline/blueflow/src/main.js:112 +#: pipeline/blueflow/src/main.js:123 msgid "应用名称不能包含" msgstr "App name cannot contain " -#: pipeline/blueflow/src/main.js:113 +#: pipeline/blueflow/src/main.js:124 msgid "应用名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:116 +#: pipeline/blueflow/src/main.js:127 msgid "应用简介不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/main.js:130 msgid "定时流程名称不能为空" msgstr "Flow name cannot be empty" -#: pipeline/blueflow/src/main.js:120 +#: pipeline/blueflow/src/main.js:131 msgid "定时流程名称包含" msgstr "Flow name cannot contain " -#: pipeline/blueflow/src/main.js:121 +#: pipeline/blueflow/src/main.js:132 msgid "定时流程名称不能超过" msgstr "Length of flow name cannot be larger than" -#: pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:135 msgid "定时表达式不能为空" msgstr "Default cannot be empty where variable is hide" -#: pipeline/blueflow/src/main.js:125 +#: pipeline/blueflow/src/main.js:136 msgid "输入定时表达式非法,请校验" msgstr "Invalid crontab, check it please" -#: pipeline/blueflow/src/main.js:128 +#: pipeline/blueflow/src/main.js:139 msgid "本地缓存名称不能为空" msgstr "Name cannot be empty" -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:140 msgid "本地缓存名称包含" msgstr "Cache name contains " -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:141 msgid "本地缓存名称不能超过" msgstr "Length cannot be larger than " -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:38 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:49 msgid "流程模板:" msgstr "Flow:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:39 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:50 msgid "应用简介:" msgstr "App Introduction:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:56 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:67 msgid "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" msgstr "Mini-APP cannot be opened outside Blueking desktop, please open it in Blueking App market" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 -#: pipeline/blueflow/src/pages/appmaker/index.vue:83 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 +#: pipeline/blueflow/src/pages/appmaker/index.vue:94 msgid "新建轻应用" msgstr "New Mini-APP" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 msgid "修改轻应用" msgstr "Update Mini-APP" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:136 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:147 msgid "应用名称" msgstr "App Name" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:137 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:126 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:148 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:137 msgid "执行方案" msgstr "Execution Scheme" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:138 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:149 msgid "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" msgstr "You can add schemes when creating a task if the flow contains optional nodes.After selecting a scheme, you can only create tasks according to the fixed execution scheme with this Mini-APP." -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:139 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:150 msgid "应用简介" msgstr "Introduction" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:140 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:151 msgid "应用LOGO" msgstr "LOGO" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:141 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:152 msgid "点击更换" msgstr "Change" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:142 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:153 msgid "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" msgstr "Only JPG/PNG type files can be uploaded. The recommended size is 100px*100px, which cannot exceed 100K" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:206 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:217 msgid "图片大小不能超过 100K" msgstr "Size cannot exceed 100K" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:87 -#: pipeline/blueflow/src/pages/audit/index.vue:153 -#: pipeline/blueflow/src/pages/functor/index.vue:156 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:277 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 +#: pipeline/blueflow/src/pages/audit/index.vue:106 +#: pipeline/blueflow/src/pages/functor/index.vue:167 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 msgid "请输入ID或流程名称" msgstr "Please enter ID or flow name" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:88 -#: pipeline/blueflow/src/pages/audit/index.vue:155 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:218 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 +#: pipeline/blueflow/src/pages/audit/index.vue:108 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 msgid "执行开始" msgstr "Execution started" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:89 -#: pipeline/blueflow/src/pages/audit/index.vue:156 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:219 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 +#: pipeline/blueflow/src/pages/audit/index.vue:109 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 msgid "执行结束" msgstr "Execution finished" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:90 -#: pipeline/blueflow/src/pages/audit/index.vue:157 -#: pipeline/blueflow/src/pages/functor/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:128 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:95 -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:49 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:217 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:101 +#: pipeline/blueflow/src/pages/audit/index.vue:110 +#: pipeline/blueflow/src/pages/functor/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:294 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:139 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:107 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:60 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 msgid "任务名称" msgstr "Task Name" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:91 -#: pipeline/blueflow/src/pages/audit/index.vue:158 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:102 +#: pipeline/blueflow/src/pages/audit/index.vue:111 msgid "任务类型" msgstr "Task types" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:92 -#: pipeline/blueflow/src/pages/audit/index.vue:159 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:173 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:221 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:285 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:103 +#: pipeline/blueflow/src/pages/audit/index.vue:112 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:219 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 msgid "创建人" msgstr "Creator" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:93 -#: pipeline/blueflow/src/pages/audit/index.vue:160 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:222 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:104 +#: pipeline/blueflow/src/pages/audit/index.vue:113 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 msgid "执行人" msgstr "Executor" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:95 -#: pipeline/blueflow/src/pages/audit/index.vue:164 -#: pipeline/blueflow/src/pages/functor/index.vue:171 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:106 +#: pipeline/blueflow/src/pages/audit/index.vue:117 +#: pipeline/blueflow/src/pages/functor/index.vue:182 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 msgid "共" msgstr " " -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:96 -#: pipeline/blueflow/src/pages/audit/index.vue:165 -#: pipeline/blueflow/src/pages/functor/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:107 +#: pipeline/blueflow/src/pages/audit/index.vue:118 +#: pipeline/blueflow/src/pages/functor/index.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 msgid "条记录" msgstr "records" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:97 -#: pipeline/blueflow/src/pages/audit/index.vue:166 -#: pipeline/blueflow/src/pages/functor/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:108 +#: pipeline/blueflow/src/pages/audit/index.vue:119 +#: pipeline/blueflow/src/pages/functor/index.vue:184 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 msgid "," msgstr "," -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 -#: pipeline/blueflow/src/pages/audit/index.vue:167 -#: pipeline/blueflow/src/pages/functor/index.vue:174 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:109 +#: pipeline/blueflow/src/pages/audit/index.vue:120 +#: pipeline/blueflow/src/pages/functor/index.vue:185 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 msgid "当前第" msgstr "current" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 -#: pipeline/blueflow/src/pages/audit/index.vue:168 -#: pipeline/blueflow/src/pages/functor/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:110 +#: pipeline/blueflow/src/pages/audit/index.vue:121 +#: pipeline/blueflow/src/pages/functor/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 msgid "页" msgstr "page" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 -#: pipeline/blueflow/src/pages/audit/index.vue:294 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:135 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:215 +#: pipeline/blueflow/src/pages/audit/index.vue:247 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:146 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:403 msgid "未知" msgstr "Unknown" -#: pipeline/blueflow/src/pages/appmaker/index.vue:84 +#: pipeline/blueflow/src/pages/appmaker/index.vue:95 msgid "请输入轻应用名称" msgstr "Please enter name" -#: pipeline/blueflow/src/pages/appmaker/index.vue:86 +#: pipeline/blueflow/src/pages/appmaker/index.vue:97 msgid "确认删除轻应用?" msgstr "Are you sure to delete this APP?" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "未找到相关轻应用" msgstr "No Mini-APP found" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "暂未添加轻应用" msgstr "No Mini-APP found in business" -#: pipeline/blueflow/src/pages/audit/index.vue:154 -#: pipeline/blueflow/src/pages/functor/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:148 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:192 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:197 +#: pipeline/blueflow/src/pages/audit/index.vue:107 +#: pipeline/blueflow/src/pages/functor/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 msgid "所属业务" msgstr "Business" -#: pipeline/blueflow/src/pages/audit/index.vue:163 -#: pipeline/blueflow/src/pages/functor/index.vue:166 +#: pipeline/blueflow/src/pages/audit/index.vue:116 +#: pipeline/blueflow/src/pages/functor/index.vue:177 msgid "查看" msgstr "View" -#: pipeline/blueflow/src/pages/audit/index.vue:171 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:271 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:220 +#: pipeline/blueflow/src/pages/audit/index.vue:124 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 msgid "任务分类" msgstr "Task Category" -#: pipeline/blueflow/src/pages/audit/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 +#: pipeline/blueflow/src/pages/audit/index.vue:125 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:205 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:249 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:323 msgid "搜索" msgstr "Search" -#: pipeline/blueflow/src/pages/audit/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/audit/index.vue:126 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:206 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:250 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:324 msgid "清空" msgstr "Empty" -#: pipeline/blueflow/src/pages/audit/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 +#: pipeline/blueflow/src/pages/audit/index.vue:127 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:317 msgid "请选择分类" msgstr "Choose category please" -#: pipeline/blueflow/src/pages/audit/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 +#: pipeline/blueflow/src/pages/audit/index.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:197 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:319 msgid "请输入创建人" msgstr "Input creator please" -#: pipeline/blueflow/src/pages/audit/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 msgid "请输入执行人" msgstr "Input executor please" -#: pipeline/blueflow/src/pages/audit/index.vue:177 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/audit/index.vue:130 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:198 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:202 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:248 msgid "请选择状态" msgstr "Choose status please" -#: pipeline/blueflow/src/pages/config/index.vue:59 +#: pipeline/blueflow/src/pages/config/index.vue:70 msgid "执行者配置" msgstr "Executor Config" -#: pipeline/blueflow/src/pages/config/index.vue:60 +#: pipeline/blueflow/src/pages/config/index.vue:71 msgid "任务执行者" msgstr "Task Executor" -#: pipeline/blueflow/src/pages/config/index.vue:61 +#: pipeline/blueflow/src/pages/config/index.vue:72 msgid "强制生效" msgstr "Force to take effect" -#: pipeline/blueflow/src/pages/config/index.vue:62 +#: pipeline/blueflow/src/pages/config/index.vue:73 msgid "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" msgstr "This field takes effect by default when a non-maintainer executes a task" -#: pipeline/blueflow/src/pages/config/index.vue:63 +#: pipeline/blueflow/src/pages/config/index.vue:74 msgid "开启后,所有任务都使用任务执行者身份来执行" msgstr "All tasks will be executed using identity of the task executor if opened" -#: pipeline/blueflow/src/pages/config/index.vue:104 -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:92 +#: pipeline/blueflow/src/pages/config/index.vue:115 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:103 msgid "保存成功" msgstr "Saved successfully" -#: pipeline/blueflow/src/pages/functor/index.vue:158 +#: pipeline/blueflow/src/pages/functor/index.vue:169 msgid "提单时间" msgstr "Date submitted" -#: pipeline/blueflow/src/pages/functor/index.vue:159 +#: pipeline/blueflow/src/pages/functor/index.vue:170 msgid "认领时间" msgstr "Claim ime" -#: pipeline/blueflow/src/pages/functor/index.vue:161 +#: pipeline/blueflow/src/pages/functor/index.vue:172 msgid "提单人" msgstr "Creator" -#: pipeline/blueflow/src/pages/functor/index.vue:162 +#: pipeline/blueflow/src/pages/functor/index.vue:173 msgid "认领人" msgstr "Claimant" -#: pipeline/blueflow/src/pages/functor/index.vue:165 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:98 +#: pipeline/blueflow/src/pages/functor/index.vue:176 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:110 msgid "认领" msgstr "Claim" -#: pipeline/blueflow/src/pages/functor/index.vue:167 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:39 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:287 +#: pipeline/blueflow/src/pages/functor/index.vue:178 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:50 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 msgid "新建任务" msgstr "NewTask" -#: pipeline/blueflow/src/pages/functor/index.vue:168 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:152 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:194 +#: pipeline/blueflow/src/pages/functor/index.vue:179 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 msgid "选择业务" msgstr "Business" -#: pipeline/blueflow/src/pages/functor/index.vue:169 +#: pipeline/blueflow/src/pages/functor/index.vue:180 msgid "选择模板" msgstr "Flow" -#: pipeline/blueflow/src/pages/functor/index.vue:170 +#: pipeline/blueflow/src/pages/functor/index.vue:181 msgid "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" msgstr "If there is no flow you want, please contact business maintainers to add 'New Task' permission for you or all the functors" -#: pipeline/blueflow/src/pages/functor/index.vue:268 +#: pipeline/blueflow/src/pages/functor/index.vue:279 msgid "未认领" msgstr "Submitted" -#: pipeline/blueflow/src/pages/functor/index.vue:271 +#: pipeline/blueflow/src/pages/functor/index.vue:282 msgid "已驳回" msgstr "Rejected" -#: pipeline/blueflow/src/pages/functor/index.vue:390 +#: pipeline/blueflow/src/pages/functor/index.vue:401 msgid " 无数据 " msgstr " No Data " -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:80 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:91 msgid "进入" msgstr "Enter" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:81 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:92 msgid "执行任务" msgstr "Execution Task" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:84 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:95 msgid "次" msgstr " " -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:66 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:77 msgid "快速新建任务" msgstr "New Task Quickly" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:67 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:78 msgid "取消常用流程" msgstr "cancel commonly used flow" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:68 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:118 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:79 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:129 msgid "添加常用流程" msgstr "Add Flows" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:69 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:80 msgid "业务下无常用流程," msgstr "No commonly used flow found in business. " -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:70 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:81 msgid "立即添加" msgstr "Add now" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:139 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:150 msgid "业务下无流程模板,为您跳转至新建流程" msgstr "No flow found in business, jump to Flows page for you" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:112 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 msgid "请输入流程名称" msgstr "Please enter flow name" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:120 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:114 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:131 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:125 msgid "项" msgstr " " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:121 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:132 msgid ",最多可选" msgstr " , no more than " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:122 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:133 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:121 msgid "搜索结果为空" msgstr "Search result is empty" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:134 msgid "该业务下暂无流程," msgstr "No flow found in business. " -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:124 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:135 msgid "立即创建" msgstr "New Flow" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:175 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:186 msgid "最多只能添加10项" msgstr "Flows selected must not more than 10" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:53 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:64 msgid "业务动态" msgstr "Timeline" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:54 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:65 msgid "查看更多" msgstr "More" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:55 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:66 msgid "查看详情" msgstr "Detail" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:56 -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:149 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 msgid "耗时" msgstr "time-consuming" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:78 msgid "创建了一个" msgstr "has created a" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:69 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:80 msgid "执行了一个" msgstr "has executed a" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:72 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:83 msgid "任务" msgstr "task" -#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:24 +#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:35 msgid "任务分类占比" msgstr "Task Categories" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:26 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 msgid "确认删除" msgstr "Are you sure to delete " -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:32 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:43 msgid "?" msgstr "? " -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:66 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:77 msgid "周期信息" msgstr "Periodic Info" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:67 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:78 msgid "修改周期任务" msgstr "Modify Periodic Task" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:68 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:170 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:79 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 msgid "周期规则" msgstr "Corntab" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:69 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:80 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:108 msgid "参数信息" msgstr "Parameters" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:70 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:81 msgid "图片出错" msgstr "Rrror with image" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:76 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:157 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:168 msgid "task-zh" msgstr "task-en" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:106 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:117 msgid "输入周期表达式非法,请校验" msgstr "Invalid contab, check it please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:148 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:159 msgid "修改周期任务信息成功" msgstr "Modify periodic task success" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:153 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:164 msgid "修改周期任务参数成功,但表达式修改未成功,请重试" msgstr "Can not modify crontab, retry please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:158 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:169 msgid "修改周期任务表达式成功,但任务参数未修改成功,请重试" msgstr "Can not modify constants, retry please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:194 msgid "修改周期任务失败,请联系管理员" msgstr "Modify Periodic task failed, contact admin please" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:178 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:189 msgid "修改周期任务表达式成功" msgstr "Modify crontab success" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:169 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 msgid "上次运行时间" msgstr "Last run at" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:208 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:219 msgid "启动" msgstr "Activate" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:179 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 msgid "运行次数" msgstr "Run times" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:196 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 msgid "请输入任务名称" msgstr "Please enter ID or task name" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:94 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:102 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:178 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:200 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:113 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:189 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:325 msgid "名称" msgstr "Name" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:201 msgid "请暂停任务后再执行编辑操作" msgstr "Deactivate task before edit it" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:204 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:221 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 msgid "执行历史" msgstr "History" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:329 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:340 msgid "删除周期任务成功" msgstr "Task delete success" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:147 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 msgid "轻应用分类" msgstr "Mini-APP Category" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:149 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 msgid "轻应用创建时间" msgstr "Creation Date: " -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:150 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 msgid "轻应用详情" msgstr "Mini-APP Detail" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:151 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:274 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:193 -msgid "选择分类" -msgstr "Category" - -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:153 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 +msgid "选择分类" +msgstr "Category" + +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:164 msgid "选择时间" msgstr "Time" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:155 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:166 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "标准插件" msgstr "Standard Plugins" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:156 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:278 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:200 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:394 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:167 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:405 msgid "全部分类" msgstr "All Categories" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:201 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:386 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:397 msgid "全部业务" msgstr "All Businesses" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:169 msgid "轻应用名称" msgstr "App Name" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:170 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:220 msgid "创建时间" msgstr "Date Created" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 msgid "更新时间" msgstr "Date Updated" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:172 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 msgid "更新人" msgstr "Editor" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:56 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:173 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:215 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:67 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 msgid "分类" msgstr "Category" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:174 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:224 msgid "创建任务数" msgstr "Number Of Tasks Created" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:268 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 msgid "引用次数" msgstr "Reference Number" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:269 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:196 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 msgid "流程详情" msgstr "Flow Detail" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:270 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:274 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 msgid "执行耗时" msgstr "Time-consuming" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:271 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 msgid "任务详情" msgstr "Task Detail" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:195 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 msgid "时间范围" msgstr "Time Range" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 msgid "任务开始时间" msgstr "Task Execution Date" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:141 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 msgid "流程名称" msgstr "Flow Name" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:216 msgid "标准插件数" msgstr "Number of StandardPlugins" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:217 msgid "子流程数" msgstr "Number of SubProcess" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:301 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:218 msgid "网关数" msgstr "Number of Gateways" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:303 msgid "执行次数" msgstr "Number of executions" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:304 msgid "失败次数" msgstr "Number of failures" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:305 msgid "平均执行耗时(秒)" msgstr "Avg time-consuming(s)" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:306 msgid "失败率" msgstr "Failure rate" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:278 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 msgid "时间维度" msgstr "Time Dimension" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:279 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 msgid "天" msgstr "Day" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:301 msgid "月" msgstr "Month" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:302 msgid "耗时(秒)" msgstr "Time-consuming(s)" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:191 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 msgid "流程分类" msgstr "Flow Category" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:198 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 msgid "流程引用" msgstr "Flow Reference" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:214 msgid "业务" msgstr "Business" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:222 msgid "创建轻应用数" msgstr "Number Of Mini-APPs Created" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:223 msgid "被引用为子流程数" msgstr "Number Of Referred As Subprocess" -#: pipeline/blueflow/src/pages/statistics/index.vue:30 +#: pipeline/blueflow/src/pages/statistics/index.vue:41 msgid "流程统计" msgstr "Flows" -#: pipeline/blueflow/src/pages/statistics/index.vue:35 +#: pipeline/blueflow/src/pages/statistics/index.vue:46 msgid "任务统计" msgstr "Tasks" -#: pipeline/blueflow/src/pages/statistics/index.vue:40 +#: pipeline/blueflow/src/pages/statistics/index.vue:51 msgid "标准插件统计" msgstr "Standard Plugins" -#: pipeline/blueflow/src/pages/statistics/index.vue:45 +#: pipeline/blueflow/src/pages/statistics/index.vue:56 msgid "轻应用统计" msgstr "Mini-APPs" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:127 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:94 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:106 msgid "任务信息" msgstr "Task Info" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:129 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:140 msgid "流程类型" msgstr "Flow Type" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:130 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:141 msgid "默认任务流程" msgstr "Default Flow" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:131 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:142 msgid "职能化任务流程" msgstr "Functional Flow" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:133 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:144 msgid "上一步" msgstr "Previous" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:134 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:122 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:145 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:133 msgid "下一步" msgstr "Next" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:135 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:146 msgid "立即执行" msgstr "Immediately" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:136 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:147 msgid "周期执行" msgstr "Periodically" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:137 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:148 msgid "周期表达式" msgstr "Crontab" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:149 msgid "执行计划" msgstr "Execution Plan" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:116 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:127 msgid "执行方案列表" msgstr "Execution Scheme" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:93 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:280 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 msgid "新建" msgstr "New" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:120 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:131 msgid "取消全选" msgstr "Cancel All" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:123 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:134 msgid "执行方案保存" msgstr "Save Scheme" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:135 msgid "方案名称" msgstr "Scheme Name" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:125 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:136 msgid "预览模式:" msgstr "Preview Mode:" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:291 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:302 msgid "方案名称已存在" msgstr "Scheme name cannot repeat" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:326 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:337 msgid "方案添加成功" msgstr "Scheme saved successfully" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:401 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:412 msgid "方案删除成功" msgstr "Scheme deleted successfully" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:37 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:37 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:48 msgid "节点选择" msgstr "Node Selection" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:42 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:41 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:53 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:52 msgid "参数填写" msgstr "Parameter Filling" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:47 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:101 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:113 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:118 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:45 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:40 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:58 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:112 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:56 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:51 msgid "任务执行" msgstr "Task Execution" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:108 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:119 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:98 msgid "职能化认领" msgstr "Functional Claiming" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:145 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 msgid "执行详情" msgstr "Execution Detail" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:146 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 msgid "执行信息" msgstr "Execution Info" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:147 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 msgid "开始时间" msgstr "Date Started" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:148 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 msgid "结束时间" msgstr "Date Finished" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:150 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 msgid "失败后跳过" msgstr "Skipped" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:151 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:162 msgid "失败自动忽略" msgstr "Auto Ignored" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:152 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:224 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 msgid "输入参数" msgstr "Input Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:153 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:225 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:164 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 msgid "输出参数" msgstr "Output Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:154 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:100 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:165 msgid "参数名" msgstr "Name" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:155 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:159 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:166 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:59 msgid "参数值" msgstr "Value" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:167 msgid "异常信息" msgstr "Exceptions" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:168 msgid "执行记录" msgstr "Execution History" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:101 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:112 msgid "序号" msgstr "Index" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:345 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:350 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:356 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:361 msgid "是" msgstr "Yes" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:346 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:351 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:171 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:357 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:362 msgid "否" msgstr "No" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:172 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:244 msgid "手动重试" msgstr "Manual Retry" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:48 msgid "请选择执行分支" msgstr "Please select a execution branch" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:38 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:49 msgid "可选执行分支" msgstr "Branches" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:51 msgid "修改全局参数" msgstr "Modify Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:102 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:113 msgid "参数修改成功" msgstr "Modified successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:39 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:50 msgid "修改定时时间" msgstr "Reset Timing" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:40 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:51 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:51 msgid "确定" msgstr "OK" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:140 msgid "修改成功" msgstr "Updated successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:39 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:636 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:50 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:647 msgid "重试" msgstr "Retry" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:140 msgid "重试成功" msgstr "Retried successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:97 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:109 msgid "预览" msgstr "Preview" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:99 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:111 msgid "任务流程预览" msgstr "Preview Task Flow" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:157 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:183 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:168 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:194 msgid "执行" msgstr "Execution" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:177 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:669 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:681 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:188 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:680 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:692 msgid "继续" msgstr "Continue" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:218 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:229 msgid "查看参数" msgstr "Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:219 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:230 msgid "修改参数" msgstr "Modify Parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:372 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:383 msgid "任务开始执行" msgstr "Task started" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:400 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:411 msgid "任务暂停成功" msgstr "Task suspended" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:429 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:440 msgid "任务继续成功" msgstr "Task Continued" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:448 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:459 msgid "任务撤销成功" msgstr "Task Revoked" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:471 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:494 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:482 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:505 msgid "跳过成功" msgstr "Skip successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:516 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:527 msgid "继续成功" msgstr "Continued successfully" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:637 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:663 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:648 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:674 msgid "跳过" msgstr "Skip" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:638 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:649 msgid "流程模板中该标准插件节点未配置失败处理方式,不可操作" msgstr "There is not failure process set to this node when editing flow, you can not operate" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:657 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:668 msgid "修改时间" msgstr "Reset Timer" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:49 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:60 msgid "查看标准插件参数" msgstr "View parameters of Standard Plugins" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 msgid "请点击标准插件节点查看参数" msgstr "Please click Standard Plugins node to view parameters" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:26 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:37 msgid "是否撤销该任务?" msgstr "Whether to revoke the task?" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:27 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:38 msgid "任务撤销" msgstr "Task Revoke" -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:48 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:59 msgid "任务克隆" msgstr "Task Clone" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:214 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 msgid "全部" msgstr "All" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:215 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 msgid "请输入ID或任务名称" msgstr "Please enter ID or task name" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 msgid "克隆" msgstr "Clone" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:252 msgid "创建方式" msgstr "Create Method" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:253 msgid "应用内" msgstr "APP" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:255 msgid "请选择创建方式" msgstr "Choose create method please" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:269 msgid "未完成" msgstr "Unfinished" -#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:138 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:552 +#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:563 msgid "输入值不满足正则校验" msgstr "Input does not match validation" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:218 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:55 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:66 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:84 msgid "基础信息" msgstr "Basic Info" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:220 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 msgid "节点名称" msgstr "Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:42 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 msgid "步骤名称" msgstr "Stage Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:222 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 msgid "自动忽略" msgstr "Auto Ignore" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:223 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 msgid "是否可选" msgstr "Optional" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:227 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 msgid "引用" msgstr "Referred" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:241 msgid "不能为空" msgstr "Cannot be empty" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:242 msgid "版本更新" msgstr "Update Version" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:243 msgid "手动跳过" msgstr "Manual Skip" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:245 msgid "失败处理" msgstr "Failure Processing" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:246 msgid "说明:" msgstr "Description: " -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:247 msgid "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" msgstr "Auto Ignore: this node will set to success automatically if failed;" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:248 msgid "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" msgstr "Manual Skip: you can skip this node if it failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:249 msgid "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" msgstr "Manual Skip: you can skip this node if it failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:250 msgid "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" msgstr "No failure process set, you won't be able to operate it if this node failed" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1021 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1032 msgid "变量KEY已存在" msgstr "KEY cannot repeat" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:85 msgid "复用变量" msgstr "Reuse Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:75 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:86 msgid "新建变量" msgstr "New" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:76 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:87 msgid "变量名称" msgstr "Variable Name" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:77 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:88 msgid "变量KEY" msgstr "Variable KEY" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:106 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:117 msgid "变量KEY已存在,请创建新变量" msgstr "KEY repeated, please use new variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:119 msgid "是否复用变量" msgstr "Whether To Reuse Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:143 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:72 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:126 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:25 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:83 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:36 msgid "全局变量" msgstr "Global Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 msgid "属性" msgstr "Attribute" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 msgid "输入" msgstr "Input" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 msgid "输出" msgstr "Output" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:160 msgid "属性:" msgstr "Attribute:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:161 msgid "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" msgstr "Format is like \"Source/Show\".Source type is Input means variables are created by the user or referenced by input parameters of Standard Plugins/SubProcess, Source type is Output means variables are created by referring output parameters of Standard Plugins/SubProcess;Show type means whether the variable is displayed when filling parameters, output type variables are always Hide." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:162 msgid "输出:" msgstr "Output: " -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:163 msgid "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" msgstr "Represent whether the variable will be one of output parameters of the flow, which can by referred by other flows using this flow as a subprocess." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:164 msgid "无数据,请手动新增变量或者勾选标准插件参数自动生成" msgstr "No Data" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:165 msgid "删除变量" msgstr "Delete Variable" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:166 msgid "确认删除该变量?" msgstr "Are you sure to delete this variable?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:167 msgid "已复制" msgstr "Copied" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:168 msgid "复制" msgstr "Copy" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:185 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:173 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:196 msgid "显示" msgstr "Show" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:174 msgid "隐藏" msgstr "Hide" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:85 msgid "本地缓存" msgstr "Local Caches" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 msgid "替换" msgstr "Replace" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 msgid "保存时间" msgstr "Date Saved" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:109 msgid "无数据,请手动添加缓存或等待自动保存" msgstr "No data, please manually add a cache or wait for automatic save" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:99 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:110 msgid "替换模板" msgstr "Replacement" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:100 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:111 msgid "是否替换模板?" msgstr "Whether to replace the flow?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:114 msgid "简述:" msgstr "Introduction:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:115 msgid "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" msgstr "Local Caches can be used to record all information about the current flow, including node arrangement, global variables, the name, and attributes of the flow. The Caches support up to 50 recent records for each flow, which is stored in the localStorage of the local browser, and each user can only view and edit their own caches." -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:118 msgid "重置模板" msgstr "Reset template" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:57 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:68 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:18 msgid "通知方式" msgstr "Notification Method" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:69 msgid "超时时间(分钟)" msgstr "Timeout(s) " -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:59 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:44 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:70 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:55 msgid "通知分组" msgstr "Notification Group" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:144 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 msgid "普通变量" msgstr "Common Variables" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 msgid "输入框" msgstr "Input" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:158 msgid "文本框" msgstr "Textarea" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:159 msgid "日期时间" msgstr "Datetime" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:160 msgid "整数" msgstr "Integer" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:161 msgid "IP选择器(简单版)" msgstr "IP Picker(Simple)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:151 -#: pipeline_plugins/variables/static/variables/password.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 +#: pipeline_plugins/variables/static/variables/password.js:18 msgid "密码" msgstr "Password" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:166 msgid "元变量" msgstr "Meta Variables" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 -#: pipeline_plugins/variables/static/variables/select.js:44 -#: pipeline_plugins/variables/static/variables/select_meta.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:168 +#: pipeline_plugins/variables/static/variables/select.js:55 +#: pipeline_plugins/variables/static/variables/select_meta.js:18 msgid "下拉框" msgstr "Select" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:179 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:190 msgid "说明" msgstr "Description" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:180 -#: pipeline_plugins/variables/static/variables/select_meta.js:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:191 +#: pipeline_plugins/variables/static/variables/select_meta.js:69 msgid "默认值" msgstr "Default" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:181 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:192 msgid "配置" msgstr "Config" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:182 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:193 msgid "编辑表格" msgstr "Edit Table" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:183 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:194 msgid "正则校验" msgstr "Regular Check" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:184 -#: pipeline_plugins/variables/static/variables/select_meta.js:43 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:195 +#: pipeline_plugins/variables/static/variables/select_meta.js:54 msgid "类型" msgstr "Type" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:260 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:271 msgid "组件" msgstr "Component" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:35 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:46 msgid "编辑变量" msgstr "Edit" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:89 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:100 msgid "流程编辑" msgstr "Flow Edit" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:90 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:101 msgid "离开页面" msgstr "Leave" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:102 msgid "系统不会保存您所做的更改,确认离开?" msgstr "System have not saved you change, are you going to leave?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:93 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:104 msgid "任务节点参数错误,请点击错误节点查看详情" msgstr "Parameters of task nodes raise error, please click error node to see details" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:94 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:105 msgid "删除本地缓存成功" msgstr "Local Caches deleted successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:106 msgid "该本地缓存不存在,删除失败" msgstr "Local Cache deleted failed because it does not exist" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:107 msgid "替换流程成功" msgstr "Flow Replaced successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:97 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:108 msgid "新增流程本地缓存成功" msgstr "Local Cache added successfully" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:109 msgid "替换流程自动保存" msgstr "Replacement saved" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:70 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:81 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 msgid "权限管理" msgstr "Permissions" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:71 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:82 msgid "新建任务权限" msgstr "New Task" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:72 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:83 msgid "认领任务权限" msgstr "Claim Task" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:84 msgid "执行任务权限" msgstr "Execution Task" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:119 msgid "导出流程" msgstr "Export" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:109 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:120 msgid "选择流程" msgstr "Flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:111 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:122 msgid "请选择需要导出的流程" msgstr "Please select flows to export" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 msgid "上传文件" msgstr "Upload File" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:138 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 msgid "重新上传" msgstr "Re-upload" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:139 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 msgid "导入流程" msgstr "Import" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:140 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 msgid "导入列表" msgstr "Flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:143 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 msgid "是否覆盖" msgstr "Overwrite" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 msgid "上传了" msgstr "Uploaded " -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 msgid "条流程" msgstr " flows" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 msgid "只显示冲突项" msgstr "Show only conflicting items" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 msgid "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" msgstr "Flows imported inherit the ID in file, and the flow with the same ID in current business will be overwritten(If the flow with the same ID is not in current business, you cannot overwrite)." -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:161 msgid "导入的流程会使用新的流程ID,不会对现有的流程造成影响" msgstr "Flows imported use new ID, without affecting flows existed" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:162 msgid "模板文件上传为空" msgstr "The file is empty" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:163 msgid "模板上传内容不合法,请重新选择文件" msgstr "The content of file is illegal, please select the file again" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:164 msgid "该文件后缀不为.dat" msgstr "The file suffix is not .dat" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:165 msgid "其中" msgstr "And " -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:166 msgid "保留ID,并提交" msgstr "Keep ID and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:167 msgid "使用新ID, 并提交" msgstr "Use new ID and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:168 msgid "覆盖冲突项, 并提交" msgstr "Override conflict items and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:169 msgid "保留两者, 并提交" msgstr "Keep both and commit" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:171 msgid "条流程与系统已有流程存在冲突" msgstr " conflict with existing flows" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:284 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 msgid "子流程更新" msgstr "Subprocess Updated" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 msgid "导入 V1 模板" msgstr "Import From V1" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 msgid "导出" msgstr "Export" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 msgid "导入" msgstr "Import" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 msgid "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" msgstr "No data, please contact business maintainer to add flow permissions for you if you are not a maintainer." -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:318 msgid "请选择子流程更新" msgstr "Choose subprocess status" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:320 msgid "来源" msgstr "Source" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:321 msgid "请选择来源" msgstr "Choose source please" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:327 msgid "搜索流程名称" msgstr "Search by flow name" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:347 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:358 msgid "无子流程" msgstr "Has No Subprocess" -#: pipeline/blueflow/src/utils/draft.js:5 +#: pipeline/blueflow/src/utils/draft.js:16 msgid "自动保存" msgstr "Automatic saved" -#: pipeline/blueflow/src/utils/errorHandler.js:13 +#: pipeline/blueflow/src/utils/errorHandler.js:24 msgid "当前访问的页面不存在" msgstr "Page not found" -#: pipeline/blueflow/src/utils/errorHandler.js:18 +#: pipeline/blueflow/src/utils/errorHandler.js:29 msgid "sorry,您没有访问权限!" msgstr "sorry, you have no access permissions!" -#: pipeline/blueflow/src/utils/errorHandler.js:23 -#: pipeline/blueflow/src/utils/errorHandler.js:28 +#: pipeline/blueflow/src/utils/errorHandler.js:34 +#: pipeline/blueflow/src/utils/errorHandler.js:39 msgid "Sorry,您的权限不足!" msgstr "Sorry, you have no permissions" -#: pipeline/blueflow/src/utils/tools.js:122 +#: pipeline/blueflow/src/utils/tools.js:133 msgid " 秒" msgstr " Second" -#: pipeline/blueflow/src/utils/tools.js:124 +#: pipeline/blueflow/src/utils/tools.js:135 msgid " 分" msgstr " Minute" -#: pipeline/blueflow/src/utils/tools.js:126 +#: pipeline/blueflow/src/utils/tools.js:137 msgid " 小时" msgstr " Hour" -#: pipeline/blueflow/src/utils/tools.js:128 +#: pipeline/blueflow/src/utils/tools.js:139 msgid " 天" msgstr " Day" -#: pipeline/blueflow/src/utils/validatePipeline.js:86 +#: pipeline/blueflow/src/utils/validatePipeline.js:97 msgid "只能添加输入连线" msgstr " can add input flow only" -#: pipeline/blueflow/src/utils/validatePipeline.js:92 +#: pipeline/blueflow/src/utils/validatePipeline.js:103 msgid "只能添加输出连线" msgstr " can add output flow only" -#: pipeline/blueflow/src/utils/validatePipeline.js:98 +#: pipeline/blueflow/src/utils/validatePipeline.js:109 msgid "不能连接" msgstr " cannot be connected to " -#: pipeline/blueflow/src/utils/validatePipeline.js:118 +#: pipeline/blueflow/src/utils/validatePipeline.js:129 msgid "相同节点不能回连" msgstr "Same node cannot be connected to self" -#: pipeline/blueflow/src/utils/validatePipeline.js:123 +#: pipeline/blueflow/src/utils/validatePipeline.js:134 msgid "重复添加连线" msgstr " cannot add repeated flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:126 +#: pipeline/blueflow/src/utils/validatePipeline.js:137 msgid "已达到" msgstr " has reached " -#: pipeline/blueflow/src/utils/validatePipeline.js:128 +#: pipeline/blueflow/src/utils/validatePipeline.js:139 msgid "最大输出连线条数" msgstr " max number of output flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:133 +#: pipeline/blueflow/src/utils/validatePipeline.js:144 msgid "最大输入连线条数" msgstr " max number of input flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:145 +#: pipeline/blueflow/src/utils/validatePipeline.js:156 msgid "在模板中只能添加一个" msgstr " can add just one in a flow template" -#: pipeline/blueflow/src/utils/validatePipeline.js:184 +#: pipeline/blueflow/src/utils/validatePipeline.js:195 msgid "至少需要" msgstr " need as least " -#: pipeline/blueflow/src/utils/validatePipeline.js:186 +#: pipeline/blueflow/src/utils/validatePipeline.js:197 msgid "条输入连线" msgstr " input flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:191 +#: pipeline/blueflow/src/utils/validatePipeline.js:202 msgid "条输出连线" msgstr " output flows" -#: pipeline/blueflow/src/utils/validatePipeline.js:203 +#: pipeline/blueflow/src/utils/validatePipeline.js:214 msgid "请添加任务节点" msgstr "Please add a task node" -#: pipeline/blueflow/src/utils/validatePipeline.js:208 +#: pipeline/blueflow/src/utils/validatePipeline.js:219 msgid "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" msgstr "The sum of Parallel and Exclusive Gateway must be same with sum of Converge Gateway, and must be paired" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:18 msgid "请求方式" msgstr "Method" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:52 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:63 msgid "请输入正确的 URL" msgstr "Input a valid url please" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:10 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:21 msgid "微信" msgstr "Wechat" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:9 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:11 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:22 msgid "邮件" msgstr "Email" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:12 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:12 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:23 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:23 msgid "短信" msgstr "SMS" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:25 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:36 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:36 msgid "请至少选择一种通知方式" msgstr "Please select one notify method at lease" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:36 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:218 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:236 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:46 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:57 msgid "运维人员" msgstr "Maintainer" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:202 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:237 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:47 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:58 msgid "产品人员" msgstr "Productor" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:42 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:203 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:220 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:53 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:59 msgid "开发人员" msgstr "Developer" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:204 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:49 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:54 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:60 msgid "测试人员" msgstr "Tester" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:56 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:67 msgid "请至少选择一个通知分组" msgstr "Please select one receiver group ay lease" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:214 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:231 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:249 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:71 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:71 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:79 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:82 msgid "附加人员" msgstr "More Receivers" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:69 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:80 msgid "多个用 , 分隔" msgstr "are separated by [,]" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:61 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:102 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:102 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:88 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:113 msgid "通知主题" msgstr "Title" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:115 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:115 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:101 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:126 msgid "通知内容" msgstr "Content" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:18 msgid "定时时间" msgstr "Timing" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:8 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:19 msgid "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" msgstr "Seconds(s) or Datetime(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:16 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:27 msgid "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" msgstr "Fill in seconds(s) or datetime(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:18 msgid "脚本来源" msgstr "Script Source" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:10 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:21 msgid "手工录入" msgstr "Manual" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:22 msgid "业务脚本" msgstr "Business Script" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:12 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:23 msgid "公共脚本" msgstr "Common Script" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:46 msgid "脚本类型" msgstr "Script Type" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:59 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:63 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:70 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:74 msgid "请选择脚本类型" msgstr "Choose script Type" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:89 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:28 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:100 msgid "脚本内容" msgstr "Script Content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:102 msgid "填写执行脚本内容" msgstr "Please enter script content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:106 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:110 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:117 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:121 msgid "请输入脚本内容" msgstr "Please input script content" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:136 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:187 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:147 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:198 msgid "脚本列表" msgstr "Script List" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:157 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:161 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:208 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:212 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:168 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:172 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:219 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:223 msgid "请选择脚本" msgstr "Choose script please" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:57 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:42 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:249 msgid "脚本参数" msgstr "Script Parameter" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:184 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:43 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:250 msgid "可为空" msgstr "Empty is valid" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:247 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:51 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:258 msgid "超时时间" msgstr "Timeout(s) " -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:248 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:52 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:259 msgid "单位为秒,为空时使用 JOB 默认值" msgstr "The unit is second, empty is valid, defaulted as same with JOB" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:260 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:64 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:271 msgid "请输入数字" msgstr "Please enter a number" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:272 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:67 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:76 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:37 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:283 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:78 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:48 msgid "目标IP" msgstr "Target IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:273 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:77 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:116 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:156 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:173 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:66 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:66 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:284 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:79 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:77 msgid "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP format must be one of [set name|module name|IP], [cloud area ID:IP] or [IP], multiple IP are separated by Line breaks;[IP] format must ensure the input LAN IP are unique in the business on Configuration System" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:286 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:81 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:46 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:297 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:92 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:57 msgid "目标账户" msgstr "Target Account" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:287 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:82 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:47 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:298 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:93 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:58 msgid "请输入在蓝鲸作业平台上注册的账户名" msgstr "Please enter the account name" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:18 msgid "源文件" msgstr "Source File" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:65 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:49 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:68 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:74 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:92 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:98 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:115 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:155 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:172 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:65 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:65 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:26 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:76 msgid "IP" msgstr "IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:40 msgid "文件路径" msgstr "File" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:30 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:41 msgid "多个请用换行分隔" msgstr "use link breaker to separate it" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:73 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:55 msgid "执行账户" msgstr "Account" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:95 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:55 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:55 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:106 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:66 msgid "目标路径" msgstr "Target Path" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:96 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:56 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:107 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:67 msgid "请输入绝对路径" msgstr "Please enter absolute path" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:18 msgid "本地文件" msgstr "Local Files" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:22 msgid "文件名不能包含中文和特殊字符且大小不能超过500M" msgstr "File's name cannot contain chinese character and size cannot be larger than 500M" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:38 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:49 msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP format must be one of [cloud area ID:IP] or [IP], multiple IP are separated by Line breaks;[IP] format must ensure the input LAN IP are unique in the business on Configuration System" -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:7 -msgid "云区域ID" -msgstr "Cloud Area ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:30 -msgid "proxy内网IP" -msgstr "Proxy inner IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:32 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:41 -msgid "可为空,为空时使用Agent安装APP中业务默认值" -msgstr "Empty is valid, default is the business default value on Agent APP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:39 -msgid "proxy外网IP" -msgstr "Proxy outer IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:48 -msgid "目标主机操作系统" -msgstr "Target host operating system" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:32 -msgid "linux" -msgstr "linux" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:51 -msgid "windows" -msgstr "windows" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:66 -msgid "目标主机认证方式" -msgstr "Target host verification method" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:49 -msgid "密码认证" -msgstr "password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:69 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:50 -msgid "密钥认证" -msgstr "key" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:84 -msgid "目标主机详情" -msgstr "Host Detail" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:94 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:215 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:232 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:250 -msgid "多个用,分隔" -msgstr "multiple are separated by ," - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:107 -msgid "ssh账号" -msgstr "ssh account" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:120 -msgid "ssh端口" -msgstr "ssh port" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:133 -msgid "ssh密码" -msgstr "ssh password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:134 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:122 -msgid "密码认证,则必填" -msgstr "Required if it is password authentication" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:142 -msgid "ssh密钥" -msgstr "ssh key" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:143 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:147 -msgid "密钥认证,则必填" -msgstr "Required if it is key authentication" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:31 -msgid "多个用,或换行符分隔" -msgstr "multiple are separated by , or line break" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:27 -msgid "通知人" -msgstr "Receivers" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:205 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:222 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:240 -msgid "合作商" -msgstr "Cooperation" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:7 -msgid "游戏ID" -msgstr "Game ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:20 -msgid "Region" -msgstr "Region" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:23 -msgid "上海" -msgstr "Shanghai" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:24 -msgid "香港" -msgstr "Hong Kong" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:25 -msgid "新加坡" -msgstr "Singapore" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:38 -msgid "访问账号" -msgstr "Access account" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:52 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:51 -msgid "访问密码" -msgstr "Access password" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:65 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:64 -msgid "大区ID" -msgstr "Set ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:78 -msgid "区服ID(列表)" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:79 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:80 -msgid "整形,多个,或换行符分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:91 -msgid "服务态" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:93 -msgid "自动" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:94 -msgid "繁忙" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:95 -msgid "拥挤" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:96 -msgid "良好" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:97 -msgid "维护" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:93 -msgid "区服标注" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:96 -msgid "热" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:97 -msgid "荐" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:98 -msgid "新" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:99 -msgid "限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:100 -msgid "体验服" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:7 -msgid "GCS业务名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:8 -msgid "为空则使用在配置平台(CC)的业务名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:16 -msgid "DB类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:180 -msgid "应用类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:54 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:40 -msgid "备份选项" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:73 -msgid "字符集" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:95 -msgid "是否强制执行" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:113 -msgid "IP列表" -msgstr "IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:114 -msgid "IP列表,多个以逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:127 -msgid "变更详情" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:135 -msgid "SQL文件" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:148 -msgid "变更DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:161 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:100 -msgid "忽略DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:183 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:200 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:218 -msgid "变更描述" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:192 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:199 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:209 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:216 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:227 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:234 -msgid "关注人" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:16 -msgid "备份类型配置" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:23 -msgid "备份类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:83 -msgid "备份详情" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:92 -msgid "备份DB名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:108 -msgid "表名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:148 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:172 -msgid "目标参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:166 -msgid "IP/服ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:167 -msgid "IP/服ID列表,多个以逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_execute_bill.js:7 -msgid "单据ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:158 -msgid "访问发起IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:159 -msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:66 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:190 -msgid "目标域名/服ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:67 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:191 -msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:80 -msgid "DB名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:81 -msgid "支持通配符,多个请用 , 分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:16 -msgid "回收类型配置" -msgstr "Revoke Type Config" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:23 -msgid "回收类型" -msgstr "Revoke Type" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:25 -msgid "账号清理" -msgstr "Account Cleaning" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:26 -msgid "权限清理" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:40 -msgid "回收DB名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:76 -msgid "权限清理时必填,支持通配符,多个请用 , 分隔" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:75 -msgid "回收表名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:110 -msgid "回收权限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:204 -msgid "用户名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:205 -msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:7 -msgid "作业模板" -msgstr "Job" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:25 -msgid "步骤参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:28 -msgid "没选中作业模板或当前作业模板脚本步骤为空" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:136 -msgid "ID" -msgstr "ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:49 -msgid "步骤类型" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:110 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:141 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:209 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:236 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:275 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:302 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:224 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:224 -msgid "请求后台接口异常:" -msgstr "Server API error:" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:130 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:27 -msgid "没选中作业模板或当前作业模板全局变量为空" -msgstr "No job selected or global variable are empty" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:144 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:33 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:33 -msgid "参数名称" -msgstr "Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:151 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:40 -msgid "参数类型" -msgstr "Type" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:7 -msgid "屏蔽开始时间" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:40 -msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" -msgstr "Fill in datetime(%Y-%m-%d %H:%M:%S)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:32 -msgid "屏蔽结束时间" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:57 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:184 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:316 -msgid "集群名称" -msgstr "Set Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:76 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:250 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:351 -msgid "模块名称" -msgstr "Module Name" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:30 -msgid "主机操作系统" -msgstr "Host operating system" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:47 -msgid "主机认证方式" -msgstr "Host verification method" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:65 -msgid "内网IP" -msgstr "Inner IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:66 -msgid "请输入内网IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:79 -msgid "外网IP" -msgstr "Outer IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:80 -msgid "请输入外网IP" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:94 -msgid "SSH账号" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:108 -msgid "SSH端口" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:121 -msgid "SSH密码" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:133 -msgid "请输入密码" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:146 -msgid "SSH密钥" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:160 -msgid "请输入密钥" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:7 -msgid "TCM业务" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:29 -msgid "模板" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:85 -msgid "参数" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:93 -msgid "步骤ID" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:12 -msgid "语音" -msgstr "Voice" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:72 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:72 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:83 msgid "填写用户名,多个用户名用 , 分隔" msgstr "Enter username, multiple are separated by [,]" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:87 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:87 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:98 msgid "通知分组与附加人员不可同时为空" msgstr "Notification Group and More Receivers cannot be empty at the same time" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:18 msgid "集群" msgstr "Set" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:18 msgid "父实例" msgstr "Parent Instance" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:37 msgid "集群信息" msgstr "Set Instance" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:18 msgid "主机详情" msgstr "Host Detail" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:19 msgid "请至少添加一条数据" msgstr "Please add one at least" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:16 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:27 msgid "故障机IP" msgstr "Fault Host IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:40 msgid "替换机IP" msgstr "Replacement Host IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:18 msgid "主机内网IP" msgstr "Host Inner IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:19 msgid "请输入主机内网IP,多个用换行符分隔" msgstr "Please enter host inner IP, multiple are separated by Line breaks" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:32 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:18 msgid "模块" msgstr "Module" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:40 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:51 msgid "转移方式" msgstr "Transfer Type" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:43 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:54 msgid "覆盖" msgstr "cover" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:44 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:55 msgid "追加" msgstr "increment" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:32 msgid "主机属性" msgstr "Host Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:22 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:33 msgid "请选择需要更新的主机属性" msgstr "Please select a host attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:45 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:56 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:56 msgid "属性值" msgstr "Attribute Value" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:46 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:57 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:57 msgid "请输入更新后的属性值" msgstr "Please enter a new attribute value" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:37 msgid "模块属性" msgstr "Module Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:38 msgid "请选择需要更新的模块属性" msgstr "Please select a module attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:37 msgid "集群属性" msgstr "Set Attribute" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:38 msgid "请选择需要更新的集群属性" msgstr "Please select a set attribute to update" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:37 msgid "服务状态" msgstr "Service Status" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:40 msgid "开放" msgstr "Open" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:30 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:41 msgid "关闭" msgstr "Close" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/clb/scan_certificate.js:7 -msgid "扫描域名" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:56 -msgid "描述" -msgstr "Desc" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:7 -msgid "群聊名称" -msgstr "todo" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:20 -msgid "群聊成员" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:18 +msgid "作业模板" +msgstr "Job" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:22 -msgid "企业微信群成员,多个以逗号分隔" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:38 +msgid "没选中作业模板或当前作业模板全局变量为空" +msgstr "No job selected or global variable are empty" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:34 -msgid "推送消息" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:44 +msgid "参数名称" +msgstr "Name" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/tof/get_staff_leader.js:7 -msgid "员工英文名" -msgstr "todo" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:51 +msgid "参数类型" +msgstr "Type" -#: pipeline_plugins/components/static/components/atoms/test/test.js:7 -#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:7 -msgid "选择服务器" -msgstr "IP" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:67 +msgid "描述" +msgstr "Desc" -#: pipeline_plugins/variables/static/variables/select.js:19 -#: pipeline_plugins/variables/static/variables/select.js:23 +#: pipeline_plugins/variables/static/variables/select.js:30 +#: pipeline_plugins/variables/static/variables/select.js:34 msgid "非法下拉框数据源,请检查您的配置" msgstr "Data source is invalid, please check the config" -#: pipeline_plugins/variables/static/variables/select_meta.js:14 +#: pipeline_plugins/variables/static/variables/select_meta.js:25 msgid "数据源" msgstr "Data source" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "自定义" msgstr "custom" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "远程数据源" msgstr "remote" -#: pipeline_plugins/variables/static/variables/select_meta.js:29 +#: pipeline_plugins/variables/static/variables/select_meta.js:40 msgid "选项" msgstr "Type" -#: pipeline_plugins/variables/static/variables/select_meta.js:31 +#: pipeline_plugins/variables/static/variables/select_meta.js:42 msgid "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" msgstr "Please enter data source, custom data should be like [{\"text\": \"\", \"value\": \"\"}...}], remote data requires a url that returns the format data." -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "单选" msgstr "single" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "多选" msgstr "multiple" -#: pipeline_plugins/variables/static/variables/select_meta.js:59 +#: pipeline_plugins/variables/static/variables/select_meta.js:70 msgid "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" msgstr "Please enter the default value, \"value\" format if single, \"value, value...\" format if multiple" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:14 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:31 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:31 +#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:18 +msgid "选择服务器" +msgstr "IP" + +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:42 msgid "填参方式" msgstr "Method" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:16 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:33 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:33 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:44 msgid "自定义输入" msgstr "Custom Enter" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:17 -msgid "选择集群和模块自动获取" -msgstr "Select Sets and Modules" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:18 -msgid "输入集群名和模块名自动获取" -msgstr "Enter Sets and Modules" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:47 -msgid "值类型" -msgstr "Value Type" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:50 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:69 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:75 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:93 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:149 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:166 -msgid "DNS" -msgstr "DNS" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:51 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:70 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:94 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:152 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:169 -msgid "服ID" -msgstr "Region ID" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:150 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:167 -msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" -msgstr "DNS format must be one of [IP#port] or domain, multiple are separated by line breaks" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:153 -msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" -msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:170 -msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" -msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:318 -msgid "多个用,分隔,all代表所有集群" -msgstr "Multiple are separated by [,], 'all' represent all sets" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:353 -msgid "多个用,分隔,all代表所有模块" -msgstr "Multiple are separated by [,], 'all' represent all modules" - -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:34 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:34 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:45 msgid "通过配置平台拓扑获取" msgstr "Select from CMDB topology" -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:99 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:110 msgid "拓扑树" msgstr "Topology" +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:177 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:228 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:235 +msgid "请求后台接口异常:" +msgstr "Server API error:" + +#~ msgid "Available %s" +#~ msgstr "Available %s" + +#~ msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." +#~ msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." + +#~ msgid "Type into this box to filter down the list of available %s." +#~ msgstr "Type into this box to filter down the list of available %s." + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Choose all" +#~ msgstr "Choose all" + +#~ msgid "Click to choose all %s at once." +#~ msgstr "Click to choose all %s at once." + +#~ msgid "Choose" +#~ msgstr "Choose" + +#~ msgid "Remove" +#~ msgstr "Remove" + +#~ msgid "Chosen %s" +#~ msgstr "Chosen %s" + +#~ msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." +#~ msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." + +#~ msgid "Remove all" +#~ msgstr "Remove all" + +#~ msgid "Click to remove all chosen %s at once." +#~ msgstr "Click to remove all chosen %s at once." + +#~ msgid "%(sel)s of %(cnt)s selected" +#~ msgid_plural "%(sel)s of %(cnt)s selected" +#~ msgstr[0] "%(sel)s of %(cnt)s selected" +#~ msgstr[1] "%(sel)s of %(cnt)s selected" + +#~ msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." +#~ msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." + +#~ msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." +#~ msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." + +#~ msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." +#~ msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." + +#~ msgid "Note: You are %s hour ahead of server time." +#~ msgid_plural "Note: You are %s hours ahead of server time." +#~ msgstr[0] "Note: You are %s hour ahead of server time." +#~ msgstr[1] "Note: You are %s hours ahead of server time." + +#~ msgid "Note: You are %s hour behind server time." +#~ msgid_plural "Note: You are %s hours behind server time." +#~ msgstr[0] "Note: You are %s hour behind server time." +#~ msgstr[1] "Note: You are %s hour behind server time." + +#~ msgid "Now" +#~ msgstr "Now" + +#~ msgid "Choose a Time" +#~ msgstr "Choose a Time" + +#~ msgid "Choose a time" +#~ msgstr "Choose a time" + +#~ msgid "Midnight" +#~ msgstr "Midnight" + +#~ msgid "6 a.m." +#~ msgstr "6 a.m." + +#~ msgid "Noon" +#~ msgstr "Noon" + +#~ msgid "6 p.m." +#~ msgstr "6 p.m" + +#~ msgid "Cancel" +#~ msgstr "Cancel" + +#~ msgid "Today" +#~ msgstr "Today" + +#~ msgid "Choose a Date" +#~ msgstr "Choose a Date" + +#~ msgid "Yesterday" +#~ msgstr "Yesterday" + +#~ msgid "Tomorrow" +#~ msgstr "Tomorrow" + +#~ msgid "January" +#~ msgstr "January" + +#~ msgid "February" +#~ msgstr "February" + +#~ msgid "March" +#~ msgstr "March" + +#~ msgid "April" +#~ msgstr "April" + +#~ msgid "May" +#~ msgstr "May" + +#~ msgid "June" +#~ msgstr "June" + +#~ msgid "July" +#~ msgstr "July" + +#~ msgid "August" +#~ msgstr "August" + +#~ msgid "September" +#~ msgstr "September" + +#~ msgid "October" +#~ msgstr "October" + +#~ msgid "November" +#~ msgstr "November" + +#~ msgid "December" +#~ msgstr "December" + +#~ msgctxt "one letter Sunday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgctxt "one letter Monday" +#~ msgid "M" +#~ msgstr "M" + +#~ msgctxt "one letter Tuesday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Wednesday" +#~ msgid "W" +#~ msgstr "W" + +#~ msgctxt "one letter Thursday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Friday" +#~ msgid "F" +#~ msgstr "F" + +#~ msgctxt "one letter Saturday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgid "Show" +#~ msgstr "Show" + +#~ msgid "Hide" +#~ msgstr "Hide" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "云区域ID" +#~ msgstr "Cloud Area ID" + +#~ msgid "proxy内网IP" +#~ msgstr "Proxy inner IP" + +#~ msgid "可为空,为空时使用Agent安装APP中业务默认值" +#~ msgstr "Empty is valid, default is the business default value on Agent APP" + +#~ msgid "proxy外网IP" +#~ msgstr "Proxy outer IP" + +#~ msgid "目标主机操作系统" +#~ msgstr "Target host operating system" + +#~ msgid "linux" +#~ msgstr "linux" + +#~ msgid "windows" +#~ msgstr "windows" + +#~ msgid "目标主机认证方式" +#~ msgstr "Target host verification method" + +#~ msgid "密码认证" +#~ msgstr "password" + +#~ msgid "密钥认证" +#~ msgstr "key" + +#~ msgid "目标主机详情" +#~ msgstr "Host Detail" + +#~ msgid "多个用,分隔" +#~ msgstr "multiple are separated by ," + +#~ msgid "ssh账号" +#~ msgstr "ssh account" + +#~ msgid "ssh端口" +#~ msgstr "ssh port" + +#~ msgid "ssh密码" +#~ msgstr "ssh password" + +#~ msgid "密码认证,则必填" +#~ msgstr "Required if it is password authentication" + +#~ msgid "ssh密钥" +#~ msgstr "ssh key" + +#~ msgid "密钥认证,则必填" +#~ msgstr "Required if it is key authentication" + +#~ msgid "多个用,或换行符分隔" +#~ msgstr "multiple are separated by , or line break" + +#~ msgid "通知人" +#~ msgstr "Receivers" + +#~ msgid "合作商" +#~ msgstr "Cooperation" + +#~ msgid "游戏ID" +#~ msgstr "Game ID" + +#~ msgid "Region" +#~ msgstr "Region" + +#~ msgid "上海" +#~ msgstr "Shanghai" + +#~ msgid "香港" +#~ msgstr "Hong Kong" + +#~ msgid "新加坡" +#~ msgstr "Singapore" + +#~ msgid "访问账号" +#~ msgstr "Access account" + +#~ msgid "访问密码" +#~ msgstr "Access password" + +#~ msgid "大区ID" +#~ msgstr "Set ID" + +#~ msgid "区服ID(列表)" +#~ msgstr "todo" + +#~ msgid "整形,多个,或换行符分隔" +#~ msgstr "todo" + +#~ msgid "服务态" +#~ msgstr "todo" + +#~ msgid "自动" +#~ msgstr "todo" + +#~ msgid "繁忙" +#~ msgstr "todo" + +#~ msgid "拥挤" +#~ msgstr "todo" + +#~ msgid "良好" +#~ msgstr "todo" + +#~ msgid "维护" +#~ msgstr "todo" + +#~ msgid "区服标注" +#~ msgstr "todo" + +#~ msgid "热" +#~ msgstr "todo" + +#~ msgid "荐" +#~ msgstr "todo" + +#~ msgid "新" +#~ msgstr "todo" + +#~ msgid "限" +#~ msgstr "todo" + +#~ msgid "体验服" +#~ msgstr "todo" + +#~ msgid "GCS业务名称" +#~ msgstr "todo" + +#~ msgid "为空则使用在配置平台(CC)的业务名" +#~ msgstr "todo" + +#~ msgid "DB类型" +#~ msgstr "todo" + +#~ msgid "应用类型" +#~ msgstr "todo" + +#~ msgid "备份选项" +#~ msgstr "todo" + +#~ msgid "字符集" +#~ msgstr "todo" + +#~ msgid "是否强制执行" +#~ msgstr "todo" + +#~ msgid "IP列表" +#~ msgstr "IP" + +#~ msgid "IP列表,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "变更详情" +#~ msgstr "todo" + +#~ msgid "SQL文件" +#~ msgstr "todo" + +#~ msgid "变更DB名" +#~ msgstr "todo" + +#~ msgid "忽略DB名" +#~ msgstr "todo" + +#~ msgid "变更描述" +#~ msgstr "todo" + +#~ msgid "关注人" +#~ msgstr "todo" + +#~ msgid "备份类型配置" +#~ msgstr "todo" + +#~ msgid "备份类型" +#~ msgstr "todo" + +#~ msgid "备份详情" +#~ msgstr "todo" + +#~ msgid "备份DB名" +#~ msgstr "todo" + +#~ msgid "表名称" +#~ msgstr "todo" + +#~ msgid "目标参数" +#~ msgstr "todo" + +#~ msgid "IP/服ID" +#~ msgstr "todo" + +#~ msgid "IP/服ID列表,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "单据ID" +#~ msgstr "todo" + +#~ msgid "访问发起IP" +#~ msgstr "todo" + +#~ msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" +#~ msgstr "todo" + +#~ msgid "目标域名/服ID" +#~ msgstr "todo" + +#~ msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" +#~ msgstr "todo" + +#~ msgid "DB名称" +#~ msgstr "todo" + +#~ msgid "支持通配符,多个请用 , 分隔" +#~ msgstr "todo" + +#~ msgid "回收类型配置" +#~ msgstr "Revoke Type Config" + +#~ msgid "回收类型" +#~ msgstr "Revoke Type" + +#~ msgid "账号清理" +#~ msgstr "Account Cleaning" + +#~ msgid "权限清理" +#~ msgstr "todo" + +#~ msgid "回收DB名称" +#~ msgstr "todo" + +#~ msgid "权限清理时必填,支持通配符,多个请用 , 分隔" +#~ msgstr "todo" + +#~ msgid "回收表名" +#~ msgstr "todo" + +#~ msgid "回收权限" +#~ msgstr "todo" + +#~ msgid "用户名" +#~ msgstr "todo" + +#~ msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" +#~ msgstr "todo" + +#~ msgid "步骤参数" +#~ msgstr "todo" + +#~ msgid "没选中作业模板或当前作业模板脚本步骤为空" +#~ msgstr "todo" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "步骤类型" +#~ msgstr "todo" + +#~ msgid "屏蔽开始时间" +#~ msgstr "todo" + +#~ msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" +#~ msgstr "Fill in datetime(%Y-%m-%d %H:%M:%S)" + +#~ msgid "屏蔽结束时间" +#~ msgstr "todo" + +#~ msgid "集群名称" +#~ msgstr "Set Name" + +#~ msgid "模块名称" +#~ msgstr "Module Name" + +#~ msgid "主机操作系统" +#~ msgstr "Host operating system" + +#~ msgid "主机认证方式" +#~ msgstr "Host verification method" + +#~ msgid "内网IP" +#~ msgstr "Inner IP" + +#~ msgid "请输入内网IP" +#~ msgstr "todo" + +#~ msgid "外网IP" +#~ msgstr "Outer IP" + +#~ msgid "请输入外网IP" +#~ msgstr "todo" + +#~ msgid "SSH账号" +#~ msgstr "todo" + +#~ msgid "SSH端口" +#~ msgstr "todo" + +#~ msgid "SSH密码" +#~ msgstr "todo" + +#~ msgid "请输入密码" +#~ msgstr "todo" + +#~ msgid "SSH密钥" +#~ msgstr "todo" + +#~ msgid "请输入密钥" +#~ msgstr "todo" + +#~ msgid "TCM业务" +#~ msgstr "todo" + +#~ msgid "模板" +#~ msgstr "todo" + +#~ msgid "参数" +#~ msgstr "todo" + +#~ msgid "步骤ID" +#~ msgstr "todo" + +#~ msgid "语音" +#~ msgstr "Voice" + +#~ msgid "扫描域名" +#~ msgstr "todo" + +#~ msgid "群聊名称" +#~ msgstr "todo" + +#~ msgid "群聊成员" +#~ msgstr "todo" + +#~ msgid "企业微信群成员,多个以逗号分隔" +#~ msgstr "todo" + +#~ msgid "推送消息" +#~ msgstr "todo" + +#~ msgid "员工英文名" +#~ msgstr "todo" + +#~ msgid "选择集群和模块自动获取" +#~ msgstr "Select Sets and Modules" + +#~ msgid "输入集群名和模块名自动获取" +#~ msgstr "Enter Sets and Modules" + +#~ msgid "值类型" +#~ msgstr "Value Type" + +#~ msgid "DNS" +#~ msgstr "DNS" + +#~ msgid "服ID" +#~ msgstr "Region ID" + +#~ msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" +#~ msgstr "DNS format must be one of [IP#port] or domain, multiple are separated by line breaks" + +#~ msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" +#~ msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" + +#~ msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" +#~ msgstr "Region ID is used for GCS Standard Plugins getting domain, multiple are separated by space" + +#~ msgid "多个用,分隔,all代表所有集群" +#~ msgstr "Multiple are separated by [,], 'all' represent all sets" + +#~ msgid "多个用,分隔,all代表所有模块" +#~ msgstr "Multiple are separated by [,], 'all' represent all modules" + #~ msgid "模板编辑" #~ msgstr "Flow Editing" diff --git a/locale/zh_hans/LC_MESSAGES/django.mo b/locale/zh_hans/LC_MESSAGES/django.mo index 4dce39c2185cfb5034b09eb2875d077bd4725546..0f0d50fdb6ebef7faf1e404f3cd2f1d79bfa24a1 100644 GIT binary patch delta 9437 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 bK7)(Zt(lw@T_?FwQmQ|&@4bNkH;eyYu;yh* literal 36050 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 diff --git a/locale/zh_hans/LC_MESSAGES/django.po b/locale/zh_hans/LC_MESSAGES/django.po index 5f17de9e9f..991c3f58d0 100644 --- a/locale/zh_hans/LC_MESSAGES/django.po +++ b/locale/zh_hans/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: 2019-02-27 23:25+0800\n" "Last-Translator: FULL NAME \n" "Language: zh_Hans\n" @@ -18,2046 +18,1761 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: bk_api/sites/clouds/utils.py:40 bk_api/utils.py:78 -msgid "请求返回数据格式错误!" -msgstr "请求返回数据格式错误!" - -#: bk_api/sites/clouds/utils.py:41 bk_api/utils.py:79 -msgid "调用远程服务失败,Http请求返回数据格式错误!" -msgstr "调用远程服务失败,Http请求返回数据格式错误!" - -#: bk_api/utils.py:81 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" -msgstr "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" - -#: bk_api/sites/bkopen/app_maker.py:49 bk_api/sites/clouds/app_maker.py:73 -#, python-format -msgid "调用创建app maker接口失败,错误信息:%s" -msgstr "调用创建app maker接口失败,错误信息:%s" - -#: bk_api/sites/bkopen/app_maker.py:50 bk_api/sites/clouds/app_maker.py:74 -msgid "调用创建app maker接口失败" -msgstr "调用创建app maker接口失败" - -#: bk_api/sites/bkopen/app_maker.py:83 bk_api/sites/bkopen/app_maker.py:103 -#: bk_api/sites/clouds/app_maker.py:109 bk_api/sites/clouds/app_maker.py:129 -#, python-format -msgid "调用修改app maker接口失败,错误信息:%s" -msgstr "调用修改app maker接口失败,错误信息:%s" - -#: bk_api/sites/bkopen/app_maker.py:84 bk_api/sites/bkopen/app_maker.py:104 -#: bk_api/sites/clouds/app_maker.py:110 bk_api/sites/clouds/app_maker.py:130 -msgid "调用修改app maker接口失败" -msgstr "调用修改app maker接口失败" - -#: bk_api/sites/clouds/app_maker.py:151 -#, python-format -msgid "调用修改 LOGO 接口失败,错误信息:%s" -msgstr "调用修改 LOGO 接口失败,错误信息:%s" - -#: bk_api/sites/clouds/app_maker.py:152 -msgid "调用修改 LOGO 接口失败" -msgstr "调用修改 LOGO 接口失败" - -#: bk_api/sites/clouds/utils.py:43 -#, python-format -msgid "调用远程服务失败,Http请求错误状态码:%s" -msgstr "调用远程服务失败,Http请求错误状态码:%s" - -#: blueapps/account/admin.py:13 +#: blueapps/account/admin.py:25 msgid "Personal info" msgstr "Personal info" -#: blueapps/account/admin.py:14 +#: blueapps/account/admin.py:26 msgid "Permissions" msgstr "Permissions" -#: blueapps/account/admin.py:16 +#: blueapps/account/admin.py:28 msgid "Important dates" msgstr "Important dates" -#: blueapps/account/apps.py:9 +#: blueapps/account/apps.py:21 msgid "account" msgstr "account" -#: blueapps/account/models.py:53 +#: blueapps/account/models.py:65 msgid "username" msgstr "username" -#: blueapps/account/models.py:56 blueapps/account/models.py:147 +#: blueapps/account/models.py:68 blueapps/account/models.py:159 msgid "Required. 64 characters or fewer. Letters, digits and underlined only." msgstr "Required. 64 characters or fewer. Letters, digits and underlined only." -#: blueapps/account/models.py:60 +#: blueapps/account/models.py:72 msgid "Enter a valid openid. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid openid. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:66 +#: blueapps/account/models.py:78 msgid "A user with that openid already exists." msgstr "A user with that openid already exists." -#: blueapps/account/models.py:71 +#: blueapps/account/models.py:83 msgid "nick name" msgstr "nick name" -#: blueapps/account/models.py:74 +#: blueapps/account/models.py:86 msgid "Required. 64 characters or fewer." msgstr "Required. 64 characters or fewer." -#: blueapps/account/models.py:77 +#: blueapps/account/models.py:89 msgid "staff status" msgstr "staff status" -#: blueapps/account/models.py:79 +#: blueapps/account/models.py:91 msgid "Designates whether the user can log into this admin site." msgstr "Designates whether the user can log into this admin site." -#: blueapps/account/models.py:83 +#: blueapps/account/models.py:95 msgid "active" msgstr "active" -#: blueapps/account/models.py:85 +#: blueapps/account/models.py:97 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." msgstr "Designates whether this user should be treated as active. Unselect this instead of deleting accounts." -#: blueapps/account/models.py:89 +#: blueapps/account/models.py:101 msgid "date joined" msgstr "date joined" -#: blueapps/account/models.py:99 +#: blueapps/account/models.py:111 msgid "user" msgstr "user" -#: blueapps/account/models.py:100 +#: blueapps/account/models.py:112 msgid "users" msgstr "users" -#: blueapps/account/models.py:151 +#: blueapps/account/models.py:163 msgid "Enter a valid key. This value may contain only letters, numbers and underlined characters." msgstr "Enter a valid key. This value may contain only letters, numbers and underlined characters." -#: blueapps/account/models.py:160 +#: blueapps/account/models.py:172 msgid "user property" msgstr "user property" -#: blueapps/account/models.py:161 +#: blueapps/account/models.py:173 msgid "user properties" msgstr "user properties" -#: config/default.py:141 +#: config/default.py:152 msgid "English" msgstr "English" -#: config/default.py:142 +#: config/default.py:153 msgid "简体中文" msgstr "简体中文" -#: django_signal_valve/models.py:36 +#: django_signal_valve/models.py:48 msgid "信号模块名" msgstr "信号模块名" -#: django_signal_valve/models.py:37 +#: django_signal_valve/models.py:49 msgid "信号属性名" msgstr "信号属性名" -#: django_signal_valve/models.py:38 +#: django_signal_valve/models.py:50 msgid "信号参数" msgstr "信号参数" -#: gcloud/exceptions.py:27 +#: gcloud/exceptions.py:39 msgid "请求第三方系统" msgstr "请求第三方系统" -#: gcloud/exceptions.py:29 +#: gcloud/exceptions.py:41 msgid "接口" msgstr "接口" -#: gcloud/exceptions.py:31 +#: gcloud/exceptions.py:43 msgid "异常" msgstr "异常" -#: gcloud/exceptions.py:33 +#: gcloud/exceptions.py:45 msgid "请联系第三方系统负责人处理" msgstr "请联系第三方系统负责人处理" -#: gcloud/commons/message/common.py:6 +#: gcloud/commons/message/common.py:18 msgid "【标准运维APP通知】执行失败" msgstr "【标准运维APP通知】执行失败" -#: gcloud/commons/message/common.py:7 +#: gcloud/commons/message/common.py:19 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "您在【{cc_name}】业务中的任务【{task_name}】执行失败,当前失败节点是【{node_name}】,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" -#: gcloud/commons/message/common.py:19 +#: gcloud/commons/message/common.py:31 msgid "【标准运维APP通知】执行完成" msgstr "【标准运维APP通知】执行完成" -#: gcloud/commons/message/common.py:20 +#: gcloud/commons/message/common.py:32 msgid "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" msgstr "您在【{cc_name}】业务中的任务【{task_name}】执行成功,操作员是【{executor}】,请前往标准运维APP( {url} )查看详情!" -#: gcloud/commons/message/common.py:31 +#: gcloud/commons/message/common.py:43 msgid "【标准运维APP通知】周期任务启动失败" msgstr "【标准运维APP通知】周期任务启动失败" -#: gcloud/commons/message/common.py:32 +#: gcloud/commons/message/common.py:44 msgid "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" msgstr "您在【{cc_name}】业务中计划于【{start_time}】执行的周期任务【{task_name}】启动失败,错误信息:【{ex_data}】" -#: gcloud/commons/template/models.py:162 +#: gcloud/commons/template/models.py:174 msgid "模板类型" msgstr "模板类型" -#: gcloud/commons/template/models.py:172 +#: gcloud/commons/template/models.py:184 msgid "收藏模板的人" msgstr "收藏模板的人" -#: gcloud/commons/template/models.py:174 +#: gcloud/commons/template/models.py:186 msgid "流程事件通知方式" msgstr "流程事件通知方式" -#: gcloud/commons/template/models.py:179 +#: gcloud/commons/template/models.py:191 msgid "流程事件通知人" msgstr "流程事件通知人" -#: gcloud/commons/template/models.py:182 +#: gcloud/commons/template/models.py:194 msgid "流程超时时间(分钟)" msgstr "流程超时时间(分钟)" -#: gcloud/commons/template/models.py:185 gcloud/contrib/appmaker/models.py:279 -#: gcloud/taskflow3/models.py:768 pipeline/models.py:272 +#: gcloud/commons/template/models.py:197 gcloud/contrib/appmaker/models.py:292 +#: gcloud/taskflow3/models.py:780 pipeline/models.py:284 msgid "是否删除" msgstr "是否删除" -#: gcloud/commons/template/models.py:330 gcloud/commons/template/models.py:331 +#: gcloud/commons/template/models.py:342 gcloud/commons/template/models.py:343 msgid "公共流程模板 CommonTemplate" msgstr "公共流程模板 CommonTemplate" -#: gcloud/commons/template/models.py:341 gcloud/commons/template/models.py:342 +#: gcloud/commons/template/models.py:353 gcloud/commons/template/models.py:354 msgid "通用流程模板ID" msgstr "通用流程模板ID" -#: gcloud/commons/template/models.py:348 gcloud/commons/template/models.py:349 +#: gcloud/commons/template/models.py:360 gcloud/commons/template/models.py:361 msgid "公共流程模板权限 CommonTmplPerm" msgstr "公共流程模板权限 CommonTmplPerm" -#: gcloud/conf/sites/community/ver_settings.py:29 +#: gcloud/conf/sites/community/ver_settings.py:41 msgid "蓝鲸智云社区版" msgstr "蓝鲸智云社区版" -#: gcloud/conf/sites/enterprise/ver_settings.py:29 -#: gcloud/conf/sites/ieod/ver_settings.py:32 -msgid "蓝鲸智云企业版" -msgstr "蓝鲸智云企业版" - -#: gcloud/contrib/appmaker/api.py:36 +#: gcloud/contrib/appmaker/api.py:48 #, python-format msgid "参数格式错误:%s" msgstr "参数格式错误:%s" -#: gcloud/contrib/appmaker/api.py:44 +#: gcloud/contrib/appmaker/api.py:56 msgid "请上传 jpg 或 png 格式的图片" msgstr "请上传 jpg 或 png 格式的图片" -#: gcloud/contrib/appmaker/api.py:48 +#: gcloud/contrib/appmaker/api.py:60 msgid "LOGO 文件大小必须小于 100K" msgstr "LOGO 文件大小必须小于 100K" -#: gcloud/contrib/appmaker/api.py:53 +#: gcloud/contrib/appmaker/api.py:65 msgid "图片格式非法" msgstr "图片格式非法" -#: gcloud/contrib/appmaker/models.py:58 +#: gcloud/contrib/appmaker/models.py:71 msgid "保存失败,引用的流程模板不存在!" msgstr "保存失败,引用的流程模板不存在!" -#: gcloud/contrib/appmaker/models.py:101 +#: gcloud/contrib/appmaker/models.py:114 #, python-format msgid "创建轻应用失败:%s" msgstr "创建轻应用失败:%s" -#: gcloud/contrib/appmaker/models.py:118 +#: gcloud/contrib/appmaker/models.py:131 msgid "保存失败,当前操作的轻应用不存在或已删除!" msgstr "保存失败,当前操作的轻应用不存在或已删除!" -#: gcloud/contrib/appmaker/models.py:136 +#: gcloud/contrib/appmaker/models.py:149 #, python-format msgid "编辑轻应用失败:%s" msgstr "编辑轻应用失败:%s" -#: gcloud/contrib/appmaker/models.py:172 +#: gcloud/contrib/appmaker/models.py:185 msgid "当前操作的轻应用不存在或已删除!" msgstr "当前操作的轻应用不存在或已删除!" -#: gcloud/contrib/appmaker/models.py:183 gcloud/contrib/appmaker/models.py:189 +#: gcloud/contrib/appmaker/models.py:196 gcloud/contrib/appmaker/models.py:202 #, python-format msgid "删除失败:%s" msgstr "删除失败:%s" -#: gcloud/contrib/appmaker/models.py:266 gcloud/tasktmpl3/models.py:434 +#: gcloud/contrib/appmaker/models.py:279 gcloud/tasktmpl3/models.py:446 msgid "所属业务" msgstr "所属业务" -#: gcloud/contrib/appmaker/models.py:267 +#: gcloud/contrib/appmaker/models.py:280 msgid "APP名称" msgstr "APP名称" -#: gcloud/contrib/appmaker/models.py:268 +#: gcloud/contrib/appmaker/models.py:281 msgid "APP编码" msgstr "APP编码" -#: gcloud/contrib/appmaker/models.py:269 +#: gcloud/contrib/appmaker/models.py:282 msgid "APP基本信息" msgstr "APP基本信息" -#: gcloud/contrib/appmaker/models.py:270 +#: gcloud/contrib/appmaker/models.py:283 msgid "APP描述信息" msgstr "APP描述信息" -#: gcloud/contrib/appmaker/models.py:271 +#: gcloud/contrib/appmaker/models.py:284 msgid "轻应用logo存放地址" msgstr "轻应用logo存放地址" -#: gcloud/contrib/appmaker/models.py:272 +#: gcloud/contrib/appmaker/models.py:285 msgid "gcloud链接" msgstr "gcloud链接" -#: gcloud/contrib/appmaker/models.py:273 +#: gcloud/contrib/appmaker/models.py:286 msgid "创建人" msgstr "创建人" -#: gcloud/contrib/appmaker/models.py:274 pipeline/engine/models/core.py:803 -#: pipeline/models.py:66 pipeline/models.py:264 pipeline/models.py:578 +#: gcloud/contrib/appmaker/models.py:287 pipeline/engine/models/core.py:815 +#: pipeline/models.py:78 pipeline/models.py:276 pipeline/models.py:590 msgid "创建时间" msgstr "创建时间" -#: gcloud/contrib/appmaker/models.py:275 +#: gcloud/contrib/appmaker/models.py:288 msgid "编辑人" msgstr "编辑人" -#: gcloud/contrib/appmaker/models.py:276 +#: gcloud/contrib/appmaker/models.py:289 msgid "编辑时间" msgstr "编辑时间" -#: gcloud/contrib/appmaker/models.py:277 +#: gcloud/contrib/appmaker/models.py:290 msgid "关联模板" msgstr "关联模板" -#: gcloud/contrib/appmaker/models.py:278 +#: gcloud/contrib/appmaker/models.py:291 msgid "执行方案" msgstr "执行方案" -#: gcloud/contrib/appmaker/models.py:303 gcloud/contrib/appmaker/models.py:304 +#: gcloud/contrib/appmaker/models.py:316 gcloud/contrib/appmaker/models.py:317 msgid "轻应用 AppMaker" msgstr "轻应用 AppMaker" -#: gcloud/contrib/function/models.py:11 +#: gcloud/contrib/function/models.py:23 msgid "未认领" msgstr "未认领" -#: gcloud/contrib/function/models.py:12 +#: gcloud/contrib/function/models.py:24 msgid "已认领" msgstr "已认领" -#: gcloud/contrib/function/models.py:13 +#: gcloud/contrib/function/models.py:25 msgid "已驳回" msgstr "已驳回" -#: gcloud/contrib/function/models.py:14 +#: gcloud/contrib/function/models.py:26 msgid "已执行" msgstr "已执行" -#: gcloud/contrib/function/models.py:15 gcloud/taskflow3/models.py:441 -#: gcloud/tasktmpl3/models.py:195 +#: gcloud/contrib/function/models.py:27 gcloud/taskflow3/models.py:453 +#: gcloud/tasktmpl3/models.py:207 msgid "已完成" msgstr "已完成" -#: gcloud/contrib/function/models.py:23 +#: gcloud/contrib/function/models.py:35 msgid "职能化单" msgstr "职能化单" -#: gcloud/contrib/function/models.py:24 +#: gcloud/contrib/function/models.py:36 msgid "提单人" msgstr "提单人" -#: gcloud/contrib/function/models.py:25 +#: gcloud/contrib/function/models.py:37 msgid "提单时间" msgstr "提单时间" -#: gcloud/contrib/function/models.py:26 +#: gcloud/contrib/function/models.py:38 msgid "认领人" msgstr "认领人" -#: gcloud/contrib/function/models.py:27 +#: gcloud/contrib/function/models.py:39 msgid "认领时间" msgstr "认领时间" -#: gcloud/contrib/function/models.py:28 +#: gcloud/contrib/function/models.py:40 msgid "驳回人" msgstr "驳回人" -#: gcloud/contrib/function/models.py:29 +#: gcloud/contrib/function/models.py:41 msgid "驳回时间" msgstr "驳回时间" -#: gcloud/contrib/function/models.py:30 +#: gcloud/contrib/function/models.py:42 msgid "转单人" msgstr "转单人" -#: gcloud/contrib/function/models.py:31 +#: gcloud/contrib/function/models.py:43 msgid "转单时间" msgstr "转单时间" -#: gcloud/contrib/function/models.py:32 +#: gcloud/contrib/function/models.py:44 msgid "单据状态" msgstr "单据状态" -#: gcloud/contrib/function/models.py:38 gcloud/contrib/function/models.py:39 +#: gcloud/contrib/function/models.py:50 gcloud/contrib/function/models.py:51 msgid "职能化认领单 FunctionTask" msgstr "职能化认领单 FunctionTask" -#: gcloud/core/api.py:24 +#: gcloud/core/api.py:36 msgid "用户默认业务切换成功" msgstr "用户默认业务切换成功" -#: gcloud/core/api.py:59 +#: gcloud/core/api.py:71 #, python-format msgid "所有%s" msgstr "所有%s" -#: gcloud/core/constant.py:7 +#: gcloud/core/constant.py:18 msgid "运维工具" msgstr "运维工具" -#: gcloud/core/constant.py:8 +#: gcloud/core/constant.py:19 msgid "监控告警" msgstr "监控告警" -#: gcloud/core/constant.py:9 +#: gcloud/core/constant.py:20 msgid "配置管理" msgstr "配置管理" -#: gcloud/core/constant.py:10 +#: gcloud/core/constant.py:21 msgid "开发工具" msgstr "开发工具" -#: gcloud/core/constant.py:11 +#: gcloud/core/constant.py:22 msgid "企业IT" msgstr "企业IT" -#: gcloud/core/constant.py:12 +#: gcloud/core/constant.py:23 msgid "办公应用" msgstr "办公应用" -#: gcloud/core/constant.py:13 +#: gcloud/core/constant.py:24 msgid "其它" msgstr "其它" -#: gcloud/core/constant.py:18 +#: gcloud/core/constant.py:29 msgid "默认任务流程" msgstr "默认任务流程" -#: gcloud/core/constant.py:19 +#: gcloud/core/constant.py:30 msgid "职能化任务流程" msgstr "职能化任务流程" -#: gcloud/core/constant.py:26 gcloud/core/constant.py:32 +#: gcloud/core/constant.py:37 gcloud/core/constant.py:43 msgid "步骤选择" msgstr "步骤选择" -#: gcloud/core/constant.py:27 +#: gcloud/core/constant.py:38 msgid "参数填写" msgstr "参数填写" -#: gcloud/core/constant.py:28 gcloud/core/constant.py:35 +#: gcloud/core/constant.py:39 gcloud/core/constant.py:46 msgid "任务执行" msgstr "任务执行" -#: gcloud/core/constant.py:29 gcloud/core/constant.py:36 +#: gcloud/core/constant.py:40 gcloud/core/constant.py:47 msgid "完成" msgstr "完成" -#: gcloud/core/constant.py:33 +#: gcloud/core/constant.py:44 msgid "提交需求" msgstr "提交需求" -#: gcloud/core/constant.py:34 +#: gcloud/core/constant.py:45 msgid "职能化认领" msgstr "职能化认领" -#: gcloud/core/constant.py:55 +#: gcloud/core/constant.py:66 msgid "任务准备" msgstr "任务准备" -#: gcloud/core/constant.py:56 +#: gcloud/core/constant.py:67 msgid "操作执行" msgstr "操作执行" -#: gcloud/core/constant.py:57 +#: gcloud/core/constant.py:68 msgid "DB变更" msgstr "DB变更" -#: gcloud/core/constant.py:58 +#: gcloud/core/constant.py:69 msgid "DB备份" msgstr "DB备份" -#: gcloud/core/constant.py:59 +#: gcloud/core/constant.py:70 msgid "现网测试" msgstr "现网测试" -#: gcloud/core/constant.py:60 +#: gcloud/core/constant.py:71 msgid "空闲时间" msgstr "空闲时间" -#: gcloud/core/constant.py:65 +#: gcloud/core/constant.py:76 msgid "微信" msgstr "微信" -#: gcloud/core/constant.py:66 +#: gcloud/core/constant.py:77 msgid "短信" msgstr "短信" -#: gcloud/core/constant.py:67 +#: gcloud/core/constant.py:78 msgid "邮件" msgstr "邮件" -#: gcloud/core/constant.py:68 +#: gcloud/core/constant.py:79 msgid "语音" msgstr "语音" -#: gcloud/core/middlewares.py:64 +#: gcloud/core/middlewares.py:76 msgid "您没有权限进行此操作" msgstr "您没有权限进行此操作" -#: gcloud/core/models.py:25 +#: gcloud/core/models.py:37 msgid "生命周期" msgstr "生命周期" -#: gcloud/core/models.py:26 +#: gcloud/core/models.py:38 msgid "任务执行者" msgstr "任务执行者" -#: gcloud/core/models.py:28 +#: gcloud/core/models.py:40 msgid "业务状态" msgstr "业务状态" -#: gcloud/core/models.py:29 +#: gcloud/core/models.py:41 msgid "是否始终使用任务执行者" msgstr "是否始终使用任务执行者" -#: gcloud/core/models.py:39 gcloud/core/models.py:40 +#: gcloud/core/models.py:51 gcloud/core/models.py:52 msgid "业务 Business" msgstr "业务 Business" -#: gcloud/core/models.py:54 +#: gcloud/core/models.py:66 msgid "用户QQ" msgstr "用户QQ" -#: gcloud/core/models.py:55 +#: gcloud/core/models.py:67 msgid "默认业务" msgstr "默认业务" -#: gcloud/core/models.py:61 gcloud/core/models.py:62 +#: gcloud/core/models.py:73 gcloud/core/models.py:74 msgid "用户默认业务 UserBusiness" msgstr "用户默认业务 UserBusiness" -#: gcloud/core/models.py:72 gcloud/core/models.py:73 +#: gcloud/core/models.py:84 gcloud/core/models.py:85 msgid "业务用户组 BusinessGroupMembership" msgstr "业务用户组 BusinessGroupMembership" -#: gcloud/core/models.py:90 +#: gcloud/core/models.py:102 msgid "变量KEY" msgstr "变量KEY" -#: gcloud/core/models.py:91 +#: gcloud/core/models.py:103 msgid "变量描述" msgstr "变量描述" -#: gcloud/core/models.py:92 +#: gcloud/core/models.py:104 msgid "变量值" msgstr "变量值" -#: gcloud/core/models.py:100 gcloud/core/models.py:101 +#: gcloud/core/models.py:112 gcloud/core/models.py:113 msgid "环境变量 EnvironmentVariables" msgstr "环境变量 EnvironmentVariables" -#: gcloud/core/roles.py:15 gcloud/core/roles/sites/clouds/roles.py:15 -#: gcloud/core/roles/sites/ieod/roles.py:15 -#: gcloud/core/roles/sites/open/roles.py:15 +#: gcloud/core/roles.py:27 gcloud/core/roles/sites/open/roles.py:27 msgid "运维人员" msgstr "运维人员" -#: gcloud/core/roles.py:16 gcloud/core/roles/sites/clouds/roles.py:16 -#: gcloud/core/roles/sites/ieod/roles.py:16 -#: gcloud/core/roles/sites/open/roles.py:16 +#: gcloud/core/roles.py:28 gcloud/core/roles/sites/open/roles.py:28 msgid "产品人员" msgstr "产品人员" -#: gcloud/core/roles.py:17 gcloud/core/roles/sites/clouds/roles.py:17 -#: gcloud/core/roles/sites/ieod/roles.py:17 -#: gcloud/core/roles/sites/open/roles.py:17 +#: gcloud/core/roles.py:29 gcloud/core/roles/sites/open/roles.py:29 msgid "合作商" msgstr "合作商" -#: gcloud/core/roles.py:18 gcloud/core/roles/sites/clouds/roles.py:18 -#: gcloud/core/roles/sites/ieod/roles.py:18 -#: gcloud/core/roles/sites/open/roles.py:18 +#: gcloud/core/roles.py:30 gcloud/core/roles/sites/open/roles.py:30 msgid "业务创建人" msgstr "业务创建人" -#: gcloud/core/roles.py:19 gcloud/core/roles/sites/clouds/roles.py:19 -#: gcloud/core/roles/sites/ieod/roles.py:19 -#: gcloud/core/roles/sites/open/roles.py:19 +#: gcloud/core/roles.py:31 gcloud/core/roles/sites/open/roles.py:31 msgid "超级管理员" msgstr "超级管理员" -#: gcloud/core/roles.py:20 gcloud/core/roles/sites/clouds/roles.py:20 -#: gcloud/core/roles/sites/ieod/roles.py:20 -#: gcloud/core/roles/sites/open/roles.py:20 +#: gcloud/core/roles.py:32 gcloud/core/roles/sites/open/roles.py:32 msgid "职能化人员" msgstr "职能化人员" -#: gcloud/core/roles.py:21 gcloud/core/roles/sites/clouds/roles.py:21 -#: gcloud/core/roles/sites/ieod/roles.py:21 -#: gcloud/core/roles/sites/open/roles.py:21 +#: gcloud/core/roles.py:33 gcloud/core/roles/sites/open/roles.py:33 msgid "测试人员" msgstr "测试人员" -#: gcloud/core/roles.py:22 gcloud/core/roles/sites/clouds/roles.py:22 -#: gcloud/core/roles/sites/ieod/roles.py:22 -#: gcloud/core/roles/sites/open/roles.py:22 +#: gcloud/core/roles.py:34 gcloud/core/roles/sites/open/roles.py:34 msgid "开发人员" msgstr "开发人员" -#: gcloud/core/roles.py:23 gcloud/core/roles/sites/clouds/roles.py:23 -#: gcloud/core/roles/sites/ieod/roles.py:23 -#: gcloud/core/roles/sites/open/roles.py:23 +#: gcloud/core/roles.py:35 gcloud/core/roles/sites/open/roles.py:35 msgid "审计人员" msgstr "审计人员" -#: gcloud/periodictask/models.py:63 gcloud/taskflow3/models.py:743 +#: gcloud/core/api_adapter/utils.py:90 +msgid "请求返回数据格式错误!" +msgstr "请求返回数据格式错误!" + +#: gcloud/core/api_adapter/utils.py:91 +msgid "调用远程服务失败,Http请求返回数据格式错误!" +msgstr "调用远程服务失败,Http请求返回数据格式错误!" + +#: gcloud/core/api_adapter/utils.py:93 +#, python-format +msgid "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" +msgstr "调用远程服务失败,Http请求错误状态码:%(code)s, 请求url:%(url)s" + +#: gcloud/periodictask/models.py:75 gcloud/taskflow3/models.py:755 msgid "业务" msgstr "业务" -#: gcloud/periodictask/models.py:67 +#: gcloud/periodictask/models.py:79 msgid "pipeline 层周期任务" msgstr "pipeline 层周期任务" -#: gcloud/periodictask/models.py:68 gcloud/taskflow3/models.py:753 +#: gcloud/periodictask/models.py:80 gcloud/taskflow3/models.py:765 msgid "创建任务所用的模板ID" msgstr "创建任务所用的模板ID" -#: gcloud/periodictask/models.py:73 gcloud/periodictask/models.py:74 +#: gcloud/periodictask/models.py:85 gcloud/periodictask/models.py:86 msgid "周期任务 PeriodicTask" msgstr "周期任务 PeriodicTask" -#: gcloud/periodictask/models.py:118 +#: gcloud/periodictask/models.py:130 #, python-format msgid "模板不存在,错误信息:%s" msgstr "模板不存在,错误信息:%s" -#: gcloud/periodictask/models.py:157 +#: gcloud/periodictask/models.py:169 msgid "pipeline 层周期任务历史" msgstr "pipeline 层周期任务历史" -#: gcloud/periodictask/models.py:158 gcloud/taskflow3/constants.py:10 -#: pipeline/contrib/periodic_task/models.py:383 +#: gcloud/periodictask/models.py:170 gcloud/taskflow3/constants.py:22 +#: pipeline/contrib/periodic_task/models.py:395 msgid "周期任务" msgstr "周期任务" -#: gcloud/periodictask/models.py:159 +#: gcloud/periodictask/models.py:171 msgid "流程实例" msgstr "流程实例" -#: gcloud/periodictask/models.py:160 -#: pipeline/contrib/periodic_task/models.py:391 pipeline/log/models.py:35 +#: gcloud/periodictask/models.py:172 +#: pipeline/contrib/periodic_task/models.py:403 pipeline/log/models.py:47 msgid "异常信息" msgstr "异常信息" -#: gcloud/periodictask/models.py:161 -#: pipeline/contrib/periodic_task/models.py:392 -#: pipeline/engine/models/core.py:804 pipeline/engine/models/core.py:895 -#: pipeline/engine/models/loop_activity.py:56 +#: gcloud/periodictask/models.py:173 +#: pipeline/contrib/periodic_task/models.py:404 +#: pipeline/engine/models/core.py:816 pipeline/engine/models/core.py:907 +#: pipeline/engine/models/loop_activity.py:67 msgid "开始时间" msgstr "开始时间" -#: gcloud/periodictask/models.py:162 -#: pipeline/contrib/periodic_task/models.py:393 +#: gcloud/periodictask/models.py:174 +#: pipeline/contrib/periodic_task/models.py:405 msgid "是否启动成功" msgstr "是否启动成功" -#: gcloud/taskflow3/constants.py:7 +#: gcloud/taskflow3/constants.py:19 msgid "手动" msgstr "手动" -#: gcloud/taskflow3/constants.py:8 +#: gcloud/taskflow3/constants.py:20 msgid "API网关" msgstr "API网关" -#: gcloud/taskflow3/constants.py:9 +#: gcloud/taskflow3/constants.py:21 msgid "轻应用" msgstr "轻应用" -#: gcloud/taskflow3/constants.py:15 +#: gcloud/taskflow3/constants.py:27 msgid "业务流程" msgstr "业务流程" -#: gcloud/taskflow3/constants.py:16 +#: gcloud/taskflow3/constants.py:28 msgid "公共流程" msgstr "公共流程" -#: gcloud/taskflow3/models.py:430 gcloud/tasktmpl3/models.py:184 +#: gcloud/taskflow3/models.py:442 gcloud/tasktmpl3/models.py:196 msgid "未执行" msgstr "未执行" -#: gcloud/taskflow3/models.py:435 gcloud/tasktmpl3/models.py:189 +#: gcloud/taskflow3/models.py:447 gcloud/tasktmpl3/models.py:201 msgid "执行中" msgstr "执行中" -#: gcloud/taskflow3/models.py:751 +#: gcloud/taskflow3/models.py:763 msgid "任务类型,继承自模板" msgstr "任务类型,继承自模板" -#: gcloud/taskflow3/models.py:754 +#: gcloud/taskflow3/models.py:766 msgid "流程模板来源" msgstr "流程模板来源" -#: gcloud/taskflow3/models.py:757 +#: gcloud/taskflow3/models.py:769 msgid "创建方式" msgstr "创建方式" -#: gcloud/taskflow3/models.py:761 +#: gcloud/taskflow3/models.py:773 msgid "创建任务额外信息(App maker ID或者APP CODE)" msgstr "创建任务额外信息(App maker ID或者APP CODE)" -#: gcloud/taskflow3/models.py:763 +#: gcloud/taskflow3/models.py:775 msgid "任务流程类型" msgstr "任务流程类型" -#: gcloud/taskflow3/models.py:767 +#: gcloud/taskflow3/models.py:779 msgid "当前任务流程阶段" msgstr "当前任务流程阶段" -#: gcloud/taskflow3/models.py:776 gcloud/taskflow3/models.py:777 +#: gcloud/taskflow3/models.py:788 gcloud/taskflow3/models.py:789 msgid "流程实例 TaskFlowInstance" msgstr "流程实例 TaskFlowInstance" -#: gcloud/tasktmpl3/models.py:34 +#: gcloud/tasktmpl3/models.py:46 msgid "新建任务" msgstr "新建任务" -#: gcloud/tasktmpl3/models.py:35 +#: gcloud/tasktmpl3/models.py:47 msgid "填写参数" msgstr "填写参数" -#: gcloud/tasktmpl3/models.py:36 -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:80 +#: gcloud/tasktmpl3/models.py:48 msgid "执行任务" msgstr "执行任务" -#: gcloud/tasktmpl3/models.py:445 gcloud/tasktmpl3/models.py:446 +#: gcloud/tasktmpl3/models.py:457 gcloud/tasktmpl3/models.py:458 msgid "流程模板 TaskTemplate" msgstr "流程模板 TaskTemplate" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:16 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:28 msgid "测试" msgstr "测试" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:17 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:29 msgid "体验" msgstr "体验" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:18 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:30 msgid "正式" msgstr "正式" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:22 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:34 msgid "关闭" msgstr "关闭" -#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:23 +#: gcloud/tasktmpl3/sites/open/import_data_2_to_3.py:35 msgid "开放" msgstr "开放" -#: gcloud/utils/forms.py:31 +#: gcloud/utils/forms.py:43 msgid "invalid json string" msgstr "invalid json string" -#: gcloud/utils/forms.py:49 +#: gcloud/utils/forms.py:61 msgid "json.loads result is not instance of list or tuple " msgstr "json.loads result is not instance of list or tuple " -#: gcloud/utils/forms.py:67 +#: gcloud/utils/forms.py:79 msgid "json.loads result is not list" msgstr "json.loads result is not list" -#: gcloud/webservice3/resources.py:308 +#: gcloud/webservice3/resources.py:299 msgid "停运" msgstr "停运" -#: pipeline/models.py:65 +#: pipeline/models.py:77 msgid "快照字符串的md5sum" msgstr "快照字符串的md5sum" -#: pipeline/models.py:72 pipeline/models.py:73 +#: pipeline/models.py:84 pipeline/models.py:85 msgid "模板快照" msgstr "模板快照" -#: pipeline/models.py:146 +#: pipeline/models.py:158 #, python-format msgid "子流程引用链中存在循环引用:%s" msgstr "子流程引用链中存在循环引用:%s" -#: pipeline/contrib/statistics/models.py:8 -#: pipeline/contrib/statistics/models.py:44 pipeline/models.py:262 -#: pipeline/models.py:449 +#: pipeline/contrib/statistics/models.py:20 +#: pipeline/contrib/statistics/models.py:56 pipeline/models.py:274 +#: pipeline/models.py:461 msgid "模板ID" msgstr "模板ID" -#: pipeline/models.py:263 +#: pipeline/models.py:275 msgid "模板名称" msgstr "模板名称" -#: pipeline/contrib/periodic_task/models.py:298 pipeline/models.py:265 -#: pipeline/models.py:577 +#: pipeline/contrib/periodic_task/models.py:310 pipeline/models.py:277 +#: pipeline/models.py:589 msgid "创建者" msgstr "创建者" -#: pipeline/models.py:266 pipeline/models.py:582 +#: pipeline/models.py:278 pipeline/models.py:594 msgid "描述" msgstr "描述" -#: pipeline/models.py:267 +#: pipeline/models.py:279 msgid "修改者" msgstr "修改者" -#: pipeline/models.py:268 pipeline/models.py:492 +#: pipeline/models.py:280 pipeline/models.py:504 msgid "修改时间" msgstr "修改时间" -#: pipeline/models.py:269 +#: pipeline/models.py:281 msgid "模板结构数据" msgstr "模板结构数据" -#: pipeline/models.py:270 +#: pipeline/models.py:282 msgid "是否含有子流程" msgstr "是否含有子流程" -#: pipeline/models.py:274 +#: pipeline/models.py:286 msgid "表示当前模板是否删除" msgstr "表示当前模板是否删除" -#: pipeline/models.py:280 pipeline/models.py:281 pipeline/models.py:574 +#: pipeline/models.py:292 pipeline/models.py:293 pipeline/models.py:586 msgid "Pipeline模板" msgstr "Pipeline模板" -#: pipeline/models.py:423 +#: pipeline/models.py:435 msgid "根模板ID" msgstr "根模板ID" -#: pipeline/models.py:424 +#: pipeline/models.py:436 msgid "子流程模板ID" msgstr "子流程模板ID" -#: pipeline/models.py:425 +#: pipeline/models.py:437 msgid "子流程节点 ID" msgstr "子流程节点 ID" -#: pipeline/models.py:426 pipeline/models.py:450 pipeline/models.py:479 +#: pipeline/models.py:438 pipeline/models.py:462 pipeline/models.py:491 msgid "快照字符串的md5" msgstr "快照字符串的md5" -#: pipeline/models.py:477 +#: pipeline/models.py:489 msgid "模板 ID" msgstr "模板 ID" -#: pipeline/models.py:478 +#: pipeline/models.py:490 msgid "模板数据 ID" msgstr "模板数据 ID" -#: pipeline/models.py:480 +#: pipeline/models.py:492 msgid "添加日期" msgstr "添加日期" -#: pipeline/models.py:489 +#: pipeline/models.py:501 msgid "对应模板 ID" msgstr "对应模板 ID" -#: pipeline/models.py:490 +#: pipeline/models.py:502 msgid "方案唯一ID" msgstr "方案唯一ID" -#: pipeline/models.py:491 +#: pipeline/models.py:503 msgid "方案名称" msgstr "方案名称" -#: pipeline/models.py:493 +#: pipeline/models.py:505 msgid "方案数据" msgstr "方案数据" -#: pipeline/contrib/statistics/models.py:23 -#: pipeline/contrib/statistics/models.py:58 pipeline/models.py:575 +#: pipeline/contrib/statistics/models.py:35 +#: pipeline/contrib/statistics/models.py:70 pipeline/models.py:587 msgid "实例ID" msgstr "实例ID" -#: pipeline/models.py:576 +#: pipeline/models.py:588 msgid "实例名称" msgstr "实例名称" -#: pipeline/models.py:579 +#: pipeline/models.py:591 msgid "执行者" msgstr "执行者" -#: pipeline/models.py:580 +#: pipeline/models.py:592 msgid "启动时间" msgstr "启动时间" -#: pipeline/engine/models/core.py:896 -#: pipeline/engine/models/loop_activity.py:57 pipeline/models.py:581 +#: pipeline/engine/models/core.py:908 +#: pipeline/engine/models/loop_activity.py:68 pipeline/models.py:593 msgid "结束时间" msgstr "结束时间" -#: pipeline/models.py:583 +#: pipeline/models.py:595 msgid "是否已经启动" msgstr "是否已经启动" -#: pipeline/models.py:584 +#: pipeline/models.py:596 msgid "是否已经完成" msgstr "是否已经完成" -#: pipeline/models.py:586 +#: pipeline/models.py:598 msgid "是否已经删除" msgstr "是否已经删除" -#: pipeline/models.py:588 +#: pipeline/models.py:600 msgid "表示当前实例是否删除" msgstr "表示当前实例是否删除" -#: pipeline/models.py:593 +#: pipeline/models.py:605 msgid "实例结构数据,指向实例对应的模板的结构数据" msgstr "实例结构数据,指向实例对应的模板的结构数据" -#: pipeline/models.py:599 +#: pipeline/models.py:611 msgid "用于实例执行的结构数据" msgstr "用于实例执行的结构数据" -#: pipeline/models.py:605 +#: pipeline/models.py:617 msgid "提前计算好的一些流程结构数据" msgstr "提前计算好的一些流程结构数据" -#: pipeline/models.py:611 pipeline/models.py:612 +#: pipeline/models.py:623 pipeline/models.py:624 msgid "Pipeline实例" msgstr "Pipeline实例" -#: pipeline/models.py:772 +#: pipeline/models.py:784 msgid "变量编码" msgstr "变量编码" -#: pipeline/models.py:773 +#: pipeline/models.py:785 msgid "变量是否可用" msgstr "变量是否可用" -#: pipeline/models.py:776 pipeline/models.py:777 +#: pipeline/models.py:788 pipeline/models.py:789 msgid "Variable变量" msgstr "Variable变量" -#: pipeline/component_framework/models.py:28 -#: pipeline/contrib/statistics/models.py:7 -#: pipeline/contrib/statistics/models.py:22 +#: pipeline/component_framework/models.py:40 +#: pipeline/contrib/statistics/models.py:19 +#: pipeline/contrib/statistics/models.py:34 msgid "组件编码" msgstr "组件编码" -#: pipeline/component_framework/models.py:29 +#: pipeline/component_framework/models.py:41 msgid "组件名称" msgstr "组件名称" -#: pipeline/component_framework/models.py:30 +#: pipeline/component_framework/models.py:42 msgid "组件是否可用" msgstr "组件是否可用" -#: pipeline/component_framework/models.py:35 -#: pipeline/component_framework/models.py:36 +#: pipeline/component_framework/models.py:47 +#: pipeline/component_framework/models.py:48 msgid "组件 Component" msgstr "组件 Component" -#: pipeline/contrib/periodic_task/models.py:23 +#: pipeline/contrib/periodic_task/models.py:35 msgid "Days" msgstr "Days" -#: pipeline/contrib/periodic_task/models.py:24 +#: pipeline/contrib/periodic_task/models.py:36 msgid "Hours" msgstr "Hours" -#: pipeline/contrib/periodic_task/models.py:25 +#: pipeline/contrib/periodic_task/models.py:37 msgid "Minutes" msgstr "Minutes" -#: pipeline/contrib/periodic_task/models.py:26 +#: pipeline/contrib/periodic_task/models.py:38 msgid "Seconds" msgstr "Seconds" -#: pipeline/contrib/periodic_task/models.py:27 +#: pipeline/contrib/periodic_task/models.py:39 msgid "Microseconds" msgstr "Microseconds" -#: pipeline/contrib/periodic_task/models.py:32 +#: pipeline/contrib/periodic_task/models.py:44 msgid "every" msgstr "every" -#: pipeline/contrib/periodic_task/models.py:34 +#: pipeline/contrib/periodic_task/models.py:46 msgid "period" msgstr "period" -#: pipeline/contrib/periodic_task/models.py:38 -#: pipeline/contrib/periodic_task/models.py:157 +#: pipeline/contrib/periodic_task/models.py:50 +#: pipeline/contrib/periodic_task/models.py:169 msgid "interval" msgstr "interval" -#: pipeline/contrib/periodic_task/models.py:39 +#: pipeline/contrib/periodic_task/models.py:51 msgid "intervals" msgstr "intervals" -#: pipeline/contrib/periodic_task/models.py:59 +#: pipeline/contrib/periodic_task/models.py:71 msgid "every {0.period_singular}" msgstr "every {0.period_singular}" -#: pipeline/contrib/periodic_task/models.py:60 +#: pipeline/contrib/periodic_task/models.py:72 msgid "every {0.every:d} {0.period}" msgstr "every {0.every:d} {0.period}" -#: pipeline/contrib/periodic_task/models.py:73 +#: pipeline/contrib/periodic_task/models.py:85 msgid "minute" msgstr "minute" -#: pipeline/contrib/periodic_task/models.py:74 +#: pipeline/contrib/periodic_task/models.py:86 msgid "hour" msgstr "hour" -#: pipeline/contrib/periodic_task/models.py:76 +#: pipeline/contrib/periodic_task/models.py:88 msgid "day of week" msgstr "day of week" -#: pipeline/contrib/periodic_task/models.py:79 +#: pipeline/contrib/periodic_task/models.py:91 msgid "day of month" msgstr "day of month" -#: pipeline/contrib/periodic_task/models.py:82 +#: pipeline/contrib/periodic_task/models.py:94 msgid "month of year" msgstr "month of year" -#: pipeline/contrib/periodic_task/models.py:87 -#: pipeline/contrib/periodic_task/models.py:161 +#: pipeline/contrib/periodic_task/models.py:99 +#: pipeline/contrib/periodic_task/models.py:173 msgid "crontab" msgstr "crontab" -#: pipeline/contrib/periodic_task/models.py:88 +#: pipeline/contrib/periodic_task/models.py:100 msgid "crontabs" msgstr "crontabs" -#: pipeline/contrib/periodic_task/models.py:151 +#: pipeline/contrib/periodic_task/models.py:163 msgid "name" msgstr "name" -#: pipeline/contrib/periodic_task/models.py:152 +#: pipeline/contrib/periodic_task/models.py:164 msgid "Useful description" msgstr "Useful description" -#: pipeline/contrib/periodic_task/models.py:154 +#: pipeline/contrib/periodic_task/models.py:166 msgid "task name" msgstr "task name" -#: pipeline/contrib/periodic_task/models.py:163 +#: pipeline/contrib/periodic_task/models.py:175 msgid "Use one of interval/crontab" msgstr "Use one of interval/crontab" -#: pipeline/contrib/periodic_task/models.py:166 +#: pipeline/contrib/periodic_task/models.py:178 msgid "Arguments" msgstr "Arguments" -#: pipeline/contrib/periodic_task/models.py:167 +#: pipeline/contrib/periodic_task/models.py:179 msgid "JSON encoded positional arguments" msgstr "JSON encoded positional arguments" -#: pipeline/contrib/periodic_task/models.py:170 +#: pipeline/contrib/periodic_task/models.py:182 msgid "Keyword arguments" msgstr "Keyword arguments" -#: pipeline/contrib/periodic_task/models.py:171 +#: pipeline/contrib/periodic_task/models.py:183 msgid "JSON encoded keyword arguments" msgstr "JSON encoded keyword arguments" -#: pipeline/contrib/periodic_task/models.py:174 +#: pipeline/contrib/periodic_task/models.py:186 msgid "queue" msgstr "queue" -#: pipeline/contrib/periodic_task/models.py:175 +#: pipeline/contrib/periodic_task/models.py:187 msgid "Queue defined in CELERY_QUEUES" msgstr "Queue defined in CELERY_QUEUES" -#: pipeline/contrib/periodic_task/models.py:178 +#: pipeline/contrib/periodic_task/models.py:190 msgid "exchange" msgstr "exchange" -#: pipeline/contrib/periodic_task/models.py:181 +#: pipeline/contrib/periodic_task/models.py:193 msgid "routing key" msgstr "routing key" -#: pipeline/contrib/periodic_task/models.py:184 +#: pipeline/contrib/periodic_task/models.py:196 msgid "expires" msgstr "expires" -#: pipeline/contrib/periodic_task/models.py:187 +#: pipeline/contrib/periodic_task/models.py:199 msgid "enabled" msgstr "enabled" -#: pipeline/contrib/periodic_task/models.py:197 +#: pipeline/contrib/periodic_task/models.py:209 msgid "description" msgstr "description" -#: pipeline/contrib/periodic_task/models.py:203 +#: pipeline/contrib/periodic_task/models.py:215 msgid "djcelery periodic task" msgstr "djcelery periodic task" -#: pipeline/contrib/periodic_task/models.py:204 +#: pipeline/contrib/periodic_task/models.py:216 msgid "djcelery periodic tasks" msgstr "djcelery periodic tasks" -#: pipeline/contrib/periodic_task/models.py:281 +#: pipeline/contrib/periodic_task/models.py:293 msgid "周期任务名称" msgstr "周期任务名称" -#: pipeline/contrib/periodic_task/models.py:286 +#: pipeline/contrib/periodic_task/models.py:298 msgid "周期任务对应的模板" msgstr "周期任务对应的模板" -#: pipeline/contrib/periodic_task/models.py:289 +#: pipeline/contrib/periodic_task/models.py:301 msgid "调度策略" msgstr "调度策略" -#: pipeline/contrib/periodic_task/models.py:290 +#: pipeline/contrib/periodic_task/models.py:302 msgid "celery 周期任务实例" msgstr "celery 周期任务实例" -#: pipeline/contrib/periodic_task/models.py:294 +#: pipeline/contrib/periodic_task/models.py:306 msgid "用于创建流程实例的结构数据" msgstr "用于创建流程实例的结构数据" -#: pipeline/contrib/periodic_task/models.py:296 +#: pipeline/contrib/periodic_task/models.py:308 msgid "执行次数" msgstr "执行次数" -#: pipeline/contrib/periodic_task/models.py:297 +#: pipeline/contrib/periodic_task/models.py:309 msgid "上次运行时间" msgstr "上次运行时间" -#: pipeline/contrib/periodic_task/models.py:299 +#: pipeline/contrib/periodic_task/models.py:311 msgid "额外信息" msgstr "额外信息" -#: pipeline/contrib/periodic_task/models.py:388 +#: pipeline/contrib/periodic_task/models.py:400 msgid "Pipeline 实例" msgstr "Pipeline 实例" -#: pipeline/contrib/statistics/models.py:9 -#: pipeline/contrib/statistics/models.py:24 +#: pipeline/contrib/statistics/models.py:21 +#: pipeline/contrib/statistics/models.py:36 msgid "节点ID" msgstr "节点ID" -#: pipeline/contrib/statistics/models.py:10 -#: pipeline/contrib/statistics/models.py:25 +#: pipeline/contrib/statistics/models.py:22 +#: pipeline/contrib/statistics/models.py:37 msgid "是否子流程引用" msgstr "是否子流程引用" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "子流程堆栈" msgstr "子流程堆栈" -#: pipeline/contrib/statistics/models.py:11 -#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:23 +#: pipeline/contrib/statistics/models.py:38 msgid "JSON 格式的列表" msgstr "JSON 格式的列表" -#: pipeline/contrib/statistics/models.py:14 -#: pipeline/contrib/statistics/models.py:15 +#: pipeline/contrib/statistics/models.py:26 +#: pipeline/contrib/statistics/models.py:27 msgid "Pipeline标准插件被引用数据" msgstr "Pipeline标准插件被引用数据" -#: pipeline/contrib/statistics/models.py:27 +#: pipeline/contrib/statistics/models.py:39 msgid "标准插件执行开始时间" msgstr "标准插件执行开始时间" -#: pipeline/contrib/statistics/models.py:28 +#: pipeline/contrib/statistics/models.py:40 msgid "标准插件执行结束时间" msgstr "标准插件执行结束时间" -#: pipeline/contrib/statistics/models.py:29 +#: pipeline/contrib/statistics/models.py:41 msgid "标准插件执行耗时(s)" msgstr "标准插件执行耗时(s)" -#: pipeline/contrib/statistics/models.py:30 +#: pipeline/contrib/statistics/models.py:42 msgid "是否执行成功" msgstr "是否执行成功" -#: pipeline/contrib/statistics/models.py:31 pipeline/engine/models/core.py:801 -#: pipeline/engine/models/core.py:898 +#: pipeline/contrib/statistics/models.py:43 pipeline/engine/models/core.py:813 +#: pipeline/engine/models/core.py:910 msgid "是否跳过" msgstr "是否跳过" -#: pipeline/contrib/statistics/models.py:32 +#: pipeline/contrib/statistics/models.py:44 msgid "是否重试记录" msgstr "是否重试记录" -#: pipeline/contrib/statistics/models.py:35 -#: pipeline/contrib/statistics/models.py:36 +#: pipeline/contrib/statistics/models.py:47 +#: pipeline/contrib/statistics/models.py:48 msgid "Pipeline标准插件执行数据" msgstr "Pipeline标准插件执行数据" -#: pipeline/contrib/statistics/models.py:45 -#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:57 +#: pipeline/contrib/statistics/models.py:71 msgid "标准插件总数" msgstr "标准插件总数" -#: pipeline/contrib/statistics/models.py:46 -#: pipeline/contrib/statistics/models.py:60 +#: pipeline/contrib/statistics/models.py:58 +#: pipeline/contrib/statistics/models.py:72 msgid "子流程总数" msgstr "子流程总数" -#: pipeline/contrib/statistics/models.py:47 -#: pipeline/contrib/statistics/models.py:61 +#: pipeline/contrib/statistics/models.py:59 +#: pipeline/contrib/statistics/models.py:73 msgid "网关总数" msgstr "网关总数" -#: pipeline/contrib/statistics/models.py:50 -#: pipeline/contrib/statistics/models.py:51 +#: pipeline/contrib/statistics/models.py:62 +#: pipeline/contrib/statistics/models.py:63 msgid "Pipeline模板引用数据" msgstr "Pipeline模板引用数据" -#: pipeline/contrib/statistics/models.py:64 -#: pipeline/contrib/statistics/models.py:65 +#: pipeline/contrib/statistics/models.py:76 +#: pipeline/contrib/statistics/models.py:77 msgid "Pipeline实例引用数据" msgstr "Pipeline实例引用数据" -#: pipeline/contrib/web/forms.py:37 +#: pipeline/contrib/web/forms.py:49 msgid "无效的节点 ID" msgstr "无效的节点 ID" -#: pipeline/contrib/web/forms.py:46 +#: pipeline/contrib/web/forms.py:58 msgid "无效的实例 ID" msgstr "无效的实例 ID" -#: pipeline/contrib/web/forms.py:55 +#: pipeline/contrib/web/forms.py:67 msgid "无效的模板 ID" msgstr "无效的模板 ID" -#: pipeline/contrib/web/forms.py:72 +#: pipeline/contrib/web/forms.py:84 msgid "无效的组件代码" msgstr "无效的组件代码" -#: pipeline/contrib/web/forms.py:85 +#: pipeline/contrib/web/forms.py:97 #, python-format msgid "该字段的类型必须为 %s" msgstr "该字段的类型必须为 %s" -#: pipeline/contrib/web/forms.py:87 -#: pipeline/contrib/web/webresource/resource.py:82 -#: pipeline/contrib/web/webresource/resource.py:101 -#: pipeline/contrib/web/webresource/resource.py:208 -#: pipeline/contrib/web/webresource/resource.py:228 +#: pipeline/contrib/web/forms.py:99 +#: pipeline/contrib/web/webresource/resource.py:94 +#: pipeline/contrib/web/webresource/resource.py:113 +#: pipeline/contrib/web/webresource/resource.py:220 +#: pipeline/contrib/web/webresource/resource.py:240 msgid "JSON 格式不合法" msgstr "JSON 格式不合法" -#: pipeline/contrib/web/views_v1.py:347 +#: pipeline/contrib/web/views_v1.py:359 msgid "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" msgstr "计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器" -#: pipeline/contrib/web/views_v1.py:352 +#: pipeline/contrib/web/views_v1.py:364 msgid "重试计时器失败,请稍后再次尝试" msgstr "重试计时器失败,请稍后再次尝试" -#: pipeline/contrib/web/webresource/resource.py:201 -#: pipeline/contrib/web/webresource/resource.py:290 +#: pipeline/contrib/web/webresource/resource.py:213 +#: pipeline/contrib/web/webresource/resource.py:302 msgid "模板不存在" msgstr "模板不存在" -#: pipeline/core/flow/activity.py:151 +#: pipeline/core/flow/activity.py:162 msgid "执行结果" msgstr "执行结果" -#: pipeline/engine/admin.py:109 +#: pipeline/engine/admin.py:120 msgid "打开所选的功能" msgstr "打开所选的功能" -#: pipeline/engine/admin.py:110 +#: pipeline/engine/admin.py:121 msgid "关闭所选的功能" msgstr "关闭所选的功能" -#: pipeline/engine/conf/function_switch.py:10 +#: pipeline/engine/conf/function_switch.py:21 msgid "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" msgstr "用于冻结引擎, 冻结期间会屏蔽所有内部信号及暂停所有进程,同时拒绝所有流程控制请求" -#: pipeline/engine/models/core.py:41 +#: pipeline/engine/models/core.py:53 msgid "pipeline 运行时数据" msgstr "pipeline 运行时数据" -#: pipeline/engine/models/core.py:146 +#: pipeline/engine/models/core.py:158 msgid "Process ID" msgstr "Process ID" -#: pipeline/engine/models/core.py:147 +#: pipeline/engine/models/core.py:159 msgid "根 pipeline 的 ID" msgstr "根 pipeline 的 ID" -#: pipeline/engine/models/core.py:148 +#: pipeline/engine/models/core.py:160 msgid "当前推进到的节点的 ID" msgstr "当前推进到的节点的 ID" -#: pipeline/engine/models/core.py:149 +#: pipeline/engine/models/core.py:161 msgid "遇到该 ID 的节点就停止推进" msgstr "遇到该 ID 的节点就停止推进" -#: pipeline/engine/models/core.py:150 +#: pipeline/engine/models/core.py:162 msgid "父 process 的 ID" msgstr "父 process 的 ID" -#: pipeline/engine/models/core.py:151 +#: pipeline/engine/models/core.py:163 msgid "收到子节点 ACK 的数量" msgstr "收到子节点 ACK 的数量" -#: pipeline/engine/models/core.py:152 +#: pipeline/engine/models/core.py:164 msgid "需要收到的子节点 ACK 的数量" msgstr "需要收到的子节点 ACK 的数量" -#: pipeline/engine/models/core.py:153 +#: pipeline/engine/models/core.py:165 msgid "该 process 是否还有效" msgstr "该 process 是否还有效" -#: pipeline/engine/models/core.py:154 +#: pipeline/engine/models/core.py:166 msgid "该 process 是否正在休眠" msgstr "该 process 是否正在休眠" -#: pipeline/engine/models/core.py:155 +#: pipeline/engine/models/core.py:167 msgid "该 process 是否被冻结" msgstr "该 process 是否被冻结" -#: pipeline/engine/models/core.py:531 +#: pipeline/engine/models/core.py:543 msgid "祖先 ID" msgstr "祖先 ID" -#: pipeline/engine/models/core.py:532 +#: pipeline/engine/models/core.py:544 msgid "后代 ID" msgstr "后代 ID" -#: pipeline/engine/models/core.py:533 +#: pipeline/engine/models/core.py:545 msgid "距离" msgstr "距离" -#: pipeline/engine/models/core.py:796 pipeline/engine/models/core.py:843 -#: pipeline/engine/models/core.py:938 pipeline/engine/models/core.py:1096 -#: pipeline/engine/models/loop_activity.py:25 pipeline/log/models.py:38 +#: pipeline/engine/models/core.py:808 pipeline/engine/models/core.py:855 +#: pipeline/engine/models/core.py:950 pipeline/engine/models/core.py:1108 +#: pipeline/engine/models/loop_activity.py:36 pipeline/log/models.py:50 msgid "节点 ID" msgstr "节点 ID" -#: pipeline/engine/models/core.py:797 +#: pipeline/engine/models/core.py:809 msgid "状态" msgstr "状态" -#: pipeline/engine/models/core.py:798 +#: pipeline/engine/models/core.py:810 msgid "节点名称" msgstr "节点名称" -#: pipeline/engine/models/core.py:799 +#: pipeline/engine/models/core.py:811 msgid "重试次数" msgstr "重试次数" -#: pipeline/engine/models/core.py:800 pipeline/engine/models/core.py:897 +#: pipeline/engine/models/core.py:812 pipeline/engine/models/core.py:909 msgid "循环次数" msgstr "循环次数" -#: pipeline/engine/models/core.py:802 +#: pipeline/engine/models/core.py:814 msgid "是否出错后自动忽略" msgstr "是否出错后自动忽略" -#: pipeline/engine/models/core.py:805 +#: pipeline/engine/models/core.py:817 msgid "归档时间" msgstr "归档时间" -#: pipeline/engine/models/core.py:806 +#: pipeline/engine/models/core.py:818 msgid "版本" msgstr "版本" -#: pipeline/engine/models/core.py:844 pipeline/engine/models/core.py:852 +#: pipeline/engine/models/core.py:856 pipeline/engine/models/core.py:864 msgid "输入数据" msgstr "输入数据" -#: pipeline/engine/models/core.py:845 pipeline/engine/models/core.py:853 +#: pipeline/engine/models/core.py:857 pipeline/engine/models/core.py:865 msgid "输出数据" msgstr "输出数据" -#: pipeline/engine/models/core.py:846 pipeline/engine/models/core.py:854 +#: pipeline/engine/models/core.py:858 pipeline/engine/models/core.py:866 msgid "异常数据" msgstr "异常数据" -#: pipeline/engine/models/core.py:894 -#: pipeline/engine/models/loop_activity.py:54 -#: pipeline/engine/models/loop_activity.py:88 +#: pipeline/engine/models/core.py:906 +#: pipeline/engine/models/loop_activity.py:65 +#: pipeline/engine/models/loop_activity.py:99 msgid "节点 id" msgstr "节点 id" -#: pipeline/engine/models/core.py:937 -#: pipeline/engine/models/loop_activity.py:24 +#: pipeline/engine/models/core.py:949 +#: pipeline/engine/models/loop_activity.py:35 msgid "ID 节点ID+version" msgstr "ID 节点ID+version" -#: pipeline/engine/models/core.py:939 +#: pipeline/engine/models/core.py:951 msgid "Pipeline 进程 ID" msgstr "Pipeline 进程 ID" -#: pipeline/engine/models/core.py:940 -#: pipeline/engine/models/loop_activity.py:26 +#: pipeline/engine/models/core.py:952 +#: pipeline/engine/models/loop_activity.py:37 msgid "被调度次数" msgstr "被调度次数" -#: pipeline/engine/models/core.py:941 -#: pipeline/engine/models/loop_activity.py:27 +#: pipeline/engine/models/core.py:953 +#: pipeline/engine/models/loop_activity.py:38 msgid "是否是回调型调度" msgstr "是否是回调型调度" -#: pipeline/engine/models/core.py:942 -#: pipeline/engine/models/loop_activity.py:28 +#: pipeline/engine/models/core.py:954 +#: pipeline/engine/models/loop_activity.py:39 msgid "回调数据" msgstr "回调数据" -#: pipeline/engine/models/core.py:943 +#: pipeline/engine/models/core.py:955 msgid "待调度服务" msgstr "待调度服务" -#: pipeline/engine/models/core.py:944 +#: pipeline/engine/models/core.py:956 msgid "是否已完成" msgstr "是否已完成" -#: pipeline/engine/models/core.py:945 -#: pipeline/engine/models/loop_activity.py:29 +#: pipeline/engine/models/core.py:957 +#: pipeline/engine/models/loop_activity.py:40 msgid "Activity 的版本" msgstr "Activity 的版本" -#: pipeline/engine/models/core.py:946 +#: pipeline/engine/models/core.py:958 msgid "是否正在被调度" msgstr "是否正在被调度" -#: pipeline/engine/models/core.py:1004 +#: pipeline/engine/models/core.py:1016 msgid "子流程 ID" msgstr "子流程 ID" -#: pipeline/engine/models/core.py:1005 +#: pipeline/engine/models/core.py:1017 msgid "对应的进程 ID" msgstr "对应的进程 ID" -#: pipeline/engine/models/core.py:1037 +#: pipeline/engine/models/core.py:1049 msgid "pipeline 进程 ID" msgstr "pipeline 进程 ID" -#: pipeline/engine/models/core.py:1038 pipeline/engine/models/core.py:1065 -#: pipeline/engine/models/core.py:1097 +#: pipeline/engine/models/core.py:1050 pipeline/engine/models/core.py:1077 +#: pipeline/engine/models/core.py:1109 msgid "celery 任务 ID" msgstr "celery 任务 ID" -#: pipeline/engine/models/core.py:1064 +#: pipeline/engine/models/core.py:1076 msgid "schedule ID" msgstr "schedule ID" -#: pipeline/engine/models/data.py:31 +#: pipeline/engine/models/data.py:43 msgid "对象唯一键" msgstr "对象唯一键" -#: pipeline/engine/models/data.py:32 +#: pipeline/engine/models/data.py:44 msgid "对象存储字段" msgstr "对象存储字段" -#: pipeline/engine/models/function.py:43 +#: pipeline/engine/models/function.py:55 msgid "功能名称" msgstr "功能名称" -#: pipeline/engine/models/function.py:44 +#: pipeline/engine/models/function.py:56 msgid "功能描述" msgstr "功能描述" -#: pipeline/engine/models/function.py:45 +#: pipeline/engine/models/function.py:57 msgid "是否激活" msgstr "是否激活" -#: pipeline/engine/models/loop_activity.py:30 +#: pipeline/engine/models/loop_activity.py:41 msgid "当前调度所处的循环计数" msgstr "当前调度所处的循环计数" -#: pipeline/engine/models/loop_activity.py:55 +#: pipeline/engine/models/loop_activity.py:66 msgid "本次循环计数" msgstr "本次循环计数" -#: pipeline/engine/models/loop_activity.py:59 +#: pipeline/engine/models/loop_activity.py:70 msgid "执行状态" msgstr "执行状态" -#: pipeline/engine/models/loop_activity.py:89 +#: pipeline/engine/models/loop_activity.py:100 msgid "本次循环次数" msgstr "本次循环次数" -#: pipeline/engine/models/loop_activity.py:90 +#: pipeline/engine/models/loop_activity.py:101 msgid "实际循环次数" msgstr "实际循环次数" -#: pipeline/engine/models/loop_activity.py:91 +#: pipeline/engine/models/loop_activity.py:102 msgid "所需循环次数" msgstr "所需循环次数" -#: pipeline/log/models.py:32 +#: pipeline/log/models.py:44 msgid "logger 名称" msgstr "logger 名称" -#: pipeline/log/models.py:33 +#: pipeline/log/models.py:45 msgid "日志等级" msgstr "日志等级" -#: pipeline/log/models.py:34 +#: pipeline/log/models.py:46 msgid "日志内容" msgstr "日志内容" -#: pipeline/log/models.py:36 +#: pipeline/log/models.py:48 msgid "输出时间" msgstr "输出时间" -#: pipeline/log/models.py:39 +#: pipeline/log/models.py:51 msgid "节点执行历史 ID" msgstr "节点执行历史 ID" -#: pipeline/validators/connection.py:30 +#: pipeline/validators/connection.py:41 #, python-format msgid "不能连接%s类型节点\n" msgstr "不能连接%s类型节点\n" -#: pipeline/validators/connection.py:32 +#: pipeline/validators/connection.py:43 #, python-format msgid "节点的入度最大为%s,最小为%s\n" msgstr "节点的入度最大为%s,最小为%s\n" -#: pipeline/validators/connection.py:34 +#: pipeline/validators/connection.py:45 #, python-format msgid "节点的出度最大为%s,最小为%s\n" msgstr "节点的出度最大为%s,最小为%s\n" -#: pipeline/validators/gateway.py:117 pipeline/validators/gateway.py:168 +#: pipeline/validators/gateway.py:128 pipeline/validators/gateway.py:179 msgid "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" msgstr "并行网关中的分支网关必须将所有分支汇聚到一个汇聚网关" -#: pipeline/validators/gateway.py:178 +#: pipeline/validators/gateway.py:189 msgid "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" msgstr "分支网关的所有分支第一个遇到的汇聚网关必须是同一个" -#: pipeline/validators/gateway.py:188 +#: pipeline/validators/gateway.py:199 msgid "非法网关,请检查其分支是否符合规则" msgstr "非法网关,请检查其分支是否符合规则" -#: pipeline/validators/gateway.py:205 +#: pipeline/validators/gateway.py:216 msgid "汇聚网关只能汇聚来自同一个并行网关的分支" msgstr "汇聚网关只能汇聚来自同一个并行网关的分支" -#: pipeline/validators/gateway.py:210 +#: pipeline/validators/gateway.py:221 msgid "汇聚网关没有汇聚其对应的并行网关的所有分支" msgstr "汇聚网关没有汇聚其对应的并行网关的所有分支" -#: pipeline/validators/gateway.py:313 +#: pipeline/validators/gateway.py:324 msgid "无法获取该网关距离开始节点的距离" msgstr "无法获取该网关距离开始节点的距离" -#: pipeline_plugins/cmdb_ip_picker/query.py:60 -#: pipeline_plugins/cmdb_ip_picker/query.py:118 -#: pipeline_plugins/cmdb_ip_picker/utils.py:68 -#: pipeline_plugins/cmdb_ip_picker/utils.py:176 -#: pipeline_plugins/cmdb_ip_picker/utils.py:182 -#: pipeline_plugins/components/collections/sites/open/cc.py:16 +#: pipeline_plugins/cmdb_ip_picker/query.py:72 +#: pipeline_plugins/cmdb_ip_picker/query.py:130 +#: pipeline_plugins/cmdb_ip_picker/utils.py:80 +#: pipeline_plugins/cmdb_ip_picker/utils.py:188 +#: pipeline_plugins/cmdb_ip_picker/utils.py:194 +#: pipeline_plugins/components/collections/sites/open/cc.py:28 msgid "配置平台(CMDB)" msgstr "配置平台(CMDB)" -#: pipeline_plugins/cmdb_ip_picker/query.py:86 +#: pipeline_plugins/cmdb_ip_picker/query.py:98 msgid "管控平台(GSE)" msgstr "管控平台(GSE)" -#: pipeline_plugins/cmdb_ip_picker/utils.py:192 +#: pipeline_plugins/cmdb_ip_picker/utils.py:204 msgid "集群" msgstr "集群" -#: pipeline_plugins/cmdb_ip_picker/utils.py:198 +#: pipeline_plugins/cmdb_ip_picker/utils.py:210 msgid "模块" msgstr "模块" -#: pipeline_plugins/components/collections/common.py:13 -#: pipeline_plugins/components/collections/controller.py:16 -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:10 -#: pipeline_plugins/components/collections/sites/ieod/bk.py:14 -#: pipeline_plugins/components/collections/sites/open/bk.py:14 +#: pipeline_plugins/components/collections/common.py:25 +#: pipeline_plugins/components/collections/controller.py:28 +#: pipeline_plugins/components/collections/sites/open/bk.py:26 msgid "蓝鲸服务(BK)" msgstr "蓝鲸服务(BK)" -#: pipeline_plugins/components/collections/common.py:45 +#: pipeline_plugins/components/collections/common.py:57 #, python-format msgid "请求异常,详细信息: %s" msgstr "请求异常,详细信息: %s" -#: pipeline_plugins/components/collections/common.py:56 +#: pipeline_plugins/components/collections/common.py:68 msgid "请求响应数据格式非 JSON" msgstr "请求响应数据格式非 JSON" -#: pipeline_plugins/components/collections/common.py:62 +#: pipeline_plugins/components/collections/common.py:74 #, python-format msgid "请求失败,状态码: %s,响应: %s" msgstr "请求失败,状态码: %s,响应: %s" -#: pipeline_plugins/components/collections/common.py:72 +#: pipeline_plugins/components/collections/common.py:84 msgid "响应内容" msgstr "响应内容" -#: pipeline_plugins/components/collections/common.py:73 +#: pipeline_plugins/components/collections/common.py:85 msgid "状态码" msgstr "状态码" -#: pipeline_plugins/components/collections/common.py:78 +#: pipeline_plugins/components/collections/common.py:90 msgid "HTTP 请求" msgstr "HTTP 请求" -#: pipeline_plugins/components/collections/common.py:79 +#: pipeline_plugins/components/collections/common.py:91 msgid "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" msgstr "提示: 1.请求URL需要在当前网络下可以访问,否则会超时失败 2.响应状态码在200-300(不包括300)之间,并且相应内容是 JSON 格式才会执行成功" -#: pipeline_plugins/components/collections/controller.py:35 +#: pipeline_plugins/components/collections/controller.py:47 msgid "暂停" msgstr "暂停" -#: pipeline_plugins/components/collections/controller.py:73 +#: pipeline_plugins/components/collections/controller.py:85 #, python-format msgid "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" msgstr "输入参数%s不符合【秒(s) 或 时间(%%Y-%%m-%%d %%H:%%M:%%S)】格式" -#: pipeline_plugins/components/collections/controller.py:100 +#: pipeline_plugins/components/collections/controller.py:112 msgid "定时" msgstr "定时" -#: pipeline_plugins/components/collections/test.py:15 -msgid "TEST" -msgstr "TEST" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:14 -msgid "GseAgent" -msgstr "GseAgent" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:139 -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:125 -msgid "安装" -msgstr "安装" - -#: pipeline_plugins/components/collections/sites/clouds/agent.py:225 -msgid "卸载" -msgstr "卸载" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:77 -msgid "短信通知结果" -msgstr "短信通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:78 -msgid "短信通知返回信息" -msgstr "短信通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:79 -msgid "邮件通知结果" -msgstr "邮件通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:80 -msgid "邮件通知返回信息" -msgstr "邮件通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:81 -msgid "微信通知结果" -msgstr "微信通知结果" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:82 -msgid "微信通知返回信息" -msgstr "微信通知返回信息" - -#: pipeline_plugins/components/collections/sites/clouds/cmsi.py:87 -msgid "消息通知" -msgstr "消息通知" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:10 -msgid "游戏区服管理(GCLOUD)" -msgstr "游戏区服管理(GCLOUD)" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:71 -msgid "批量更新区服标注" -msgstr "批量更新区服标注" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:131 -msgid "批量更新区服状态" -msgstr "批量更新区服状态" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:167 -msgid "预发布大区" -msgstr "预发布大区" - -#: pipeline_plugins/components/collections/sites/clouds/gcloud.py:201 -msgid "发布大区" -msgstr "发布大区" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:13 -msgid "游戏云存储平台(GCS)" -msgstr "游戏云存储平台(GCS)" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:166 -msgid "权限申请" -msgstr "权限申请" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:255 -msgid "权限回收提单" -msgstr "权限回收提单" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:349 -msgid "执行变更单据" -msgstr "执行变更单据" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:442 -msgid "数据库备份" -msgstr "数据库备份" - -#: pipeline_plugins/components/collections/sites/clouds/gcs.py:502 -msgid "变更提单" -msgstr "变更提单" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:36 -#: pipeline_plugins/components/collections/sites/open/job.py:39 -msgid "作业平台(JOB)" -msgstr "作业平台(JOB)" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:85 -#: pipeline_plugins/components/collections/sites/clouds/job.py:386 -msgid "无法从 JOB 读取错误信息" -msgstr "无法从 JOB 读取错误信息" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:89 -#: pipeline_plugins/components/collections/sites/clouds/job.py:390 -#, python-format -msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" -msgstr "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:180 -#: pipeline_plugins/components/collections/sites/open/job.py:163 -msgid "执行作业" -msgstr "执行作业" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:239 -#: pipeline_plugins/components/collections/sites/open/job.py:231 -msgid "快速分发文件" -msgstr "快速分发文件" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:285 -#: pipeline_plugins/components/collections/sites/open/job.py:301 -msgid "快速执行脚本" -msgstr "快速执行脚本" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:424 -msgid "本地文件列表为空,请确认本地文件是否已经上传" -msgstr "本地文件列表为空,请确认本地文件是否已经上传" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:451 -#, python-format -msgid "获取 S3 对象下载链接失败:%s" -msgstr "获取 S3 对象下载链接失败:%s" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:460 -msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" -msgstr "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" - -#: pipeline_plugins/components/collections/sites/clouds/job.py:516 -msgid "分发本地文件" -msgstr "分发本地文件" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:16 -msgid "蓝鲸监控(Monitor)" -msgstr "蓝鲸监控(Monitor)" - -#: pipeline_plugins/components/collections/sites/clouds/monitor.py:92 -msgid "告警屏蔽" -msgstr "告警屏蔽" - -#: pipeline_plugins/components/collections/sites/clouds/proxy.py:16 -msgid "GseProxy" -msgstr "GseProxy" - -#: pipeline_plugins/components/collections/sites/clouds/tcm.py:11 -msgid "AutoTCM(TCM)" -msgstr "AutoTCM(TCM)" - -#: pipeline_plugins/components/collections/sites/ieod/bk.py:39 -#: pipeline_plugins/components/collections/sites/open/bk.py:39 +#: pipeline_plugins/components/collections/sites/open/bk.py:51 msgid "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" msgstr "从 CMDB 查询到业务不唯一,业务ID:{}, 返回数量: {}" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:107 -#: pipeline_plugins/components/collections/sites/open/bk.py:107 +#: pipeline_plugins/components/collections/sites/open/bk.py:119 msgid "返回码" msgstr "返回码" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:108 -#: pipeline_plugins/components/collections/sites/open/bk.py:108 +#: pipeline_plugins/components/collections/sites/open/bk.py:120 msgid "信息" msgstr "信息" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:147 -#: pipeline_plugins/components/collections/sites/open/bk.py:147 +#: pipeline_plugins/components/collections/sites/open/bk.py:159 msgid "发送通知" msgstr "发送通知" -#: pipeline_plugins/components/collections/sites/ieod/bk.py:151 -msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" -msgstr "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:15 -msgid "负载均衡业务(CLB)" -msgstr "负载均衡业务(CLB)" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:143 -msgid "扫描域名证书" -msgstr "扫描域名证书" - -#: pipeline_plugins/components/collections/sites/ieod/clb.py:147 -msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" -msgstr "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:12 -msgid "企业微信(QYWEIXIN)" -msgstr "企业微信(QYWEIXIN)" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:36 -#, python-format -msgid "企业微信拉群失败,组件返回错误消息:%s" -msgstr "企业微信拉群失败,组件返回错误消息:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:52 -#, python-format -msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" -msgstr "企业微信拉群发送消息失败,组件返回错误消息:%s" - -#: pipeline_plugins/components/collections/sites/ieod/qyweixin.py:62 -msgid "企业微信拉群" -msgstr "企业微信拉群" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:15 -msgid "消息通知服务(TOF)" -msgstr "消息通知服务(TOF)" - -#: pipeline_plugins/components/collections/sites/ieod/tof.py:50 -msgid "获取员工直属Leader" -msgstr "获取员工直属Leader" - -#: pipeline_plugins/components/collections/sites/open/bk.py:151 +#: pipeline_plugins/components/collections/sites/open/bk.py:163 msgid "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" msgstr "API 网关定义了这些消息通知组件的接口协议,但是,并没有完全实现组件内容,用户可根据接口协议,重写此部分组件。API网关为降低实现消息通知组件的难度,提供了在线更新组件配置,不需编写组件代码的方案。详情请查阅PaaS->API网关->使用指南。" -#: pipeline_plugins/components/collections/sites/open/cc.py:69 +#: pipeline_plugins/components/collections/sites/open/cc.py:81 msgid "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" msgstr "查询配置平台(CMDB)接口cc.search_host表明,存在不属于当前业务的IP: {ip}" -#: pipeline_plugins/components/collections/sites/open/cc.py:174 +#: pipeline_plugins/components/collections/sites/open/cc.py:186 msgid "转移主机模块" msgstr "转移主机模块" -#: pipeline_plugins/components/collections/sites/open/cc.py:213 +#: pipeline_plugins/components/collections/sites/open/cc.py:225 msgid "所属运营商校验失败,请重试并修改为正确的所属运营商" msgstr "所属运营商校验失败,请重试并修改为正确的所属运营商" -#: pipeline_plugins/components/collections/sites/open/cc.py:228 +#: pipeline_plugins/components/collections/sites/open/cc.py:240 msgid "所在国家校验失败,请重试并修改为正确的所在国家" msgstr "所在国家校验失败,请重试并修改为正确的所在国家" -#: pipeline_plugins/components/collections/sites/open/cc.py:241 +#: pipeline_plugins/components/collections/sites/open/cc.py:253 msgid "所在省份校验失败,请重试并修改为正确的所在省份" msgstr "所在省份校验失败,请重试并修改为正确的所在省份" -#: pipeline_plugins/components/collections/sites/open/cc.py:266 +#: pipeline_plugins/components/collections/sites/open/cc.py:278 msgid "更新主机属性" msgstr "更新主机属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:360 -#: pipeline_plugins/components/collections/sites/open/cc.py:364 +#: pipeline_plugins/components/collections/sites/open/cc.py:372 +#: pipeline_plugins/components/collections/sites/open/cc.py:376 #, python-format msgid "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" msgstr "无法查询到 %s 机器信息,请确认该机器是否在当前业务下" -#: pipeline_plugins/components/collections/sites/open/cc.py:426 +#: pipeline_plugins/components/collections/sites/open/cc.py:438 #, python-format msgid "成功替换的机器: %s" msgstr "成功替换的机器: %s" -#: pipeline_plugins/components/collections/sites/open/cc.py:436 +#: pipeline_plugins/components/collections/sites/open/cc.py:448 msgid "故障机替换" msgstr "故障机替换" -#: pipeline_plugins/components/collections/sites/open/cc.py:475 +#: pipeline_plugins/components/collections/sites/open/cc.py:487 msgid "清空集群中主机" msgstr "清空集群中主机" -#: pipeline_plugins/components/collections/sites/open/cc.py:516 +#: pipeline_plugins/components/collections/sites/open/cc.py:528 msgid "删除集群" msgstr "删除集群" -#: pipeline_plugins/components/collections/sites/open/cc.py:559 +#: pipeline_plugins/components/collections/sites/open/cc.py:571 msgid "修改集群服务状态" msgstr "修改集群服务状态" -#: pipeline_plugins/components/collections/sites/open/cc.py:602 -#: pipeline_plugins/components/collections/sites/open/cc.py:684 +#: pipeline_plugins/components/collections/sites/open/cc.py:614 +#: pipeline_plugins/components/collections/sites/open/cc.py:696 msgid "环境类型校验失败,请重试并修改为正确的环境类型" msgstr "环境类型校验失败,请重试并修改为正确的环境类型" -#: pipeline_plugins/components/collections/sites/open/cc.py:617 -#: pipeline_plugins/components/collections/sites/open/cc.py:669 +#: pipeline_plugins/components/collections/sites/open/cc.py:629 +#: pipeline_plugins/components/collections/sites/open/cc.py:681 msgid "服务状态校验失败,请重试并修改为正确的服务状态" msgstr "服务状态校验失败,请重试并修改为正确的服务状态" -#: pipeline_plugins/components/collections/sites/open/cc.py:636 +#: pipeline_plugins/components/collections/sites/open/cc.py:648 msgid "创建集群" msgstr "创建集群" -#: pipeline_plugins/components/collections/sites/open/cc.py:713 +#: pipeline_plugins/components/collections/sites/open/cc.py:725 msgid "更新集群属性" msgstr "更新集群属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:757 +#: pipeline_plugins/components/collections/sites/open/cc.py:769 msgid "模块类型校验失败,请重试并填写正确的模块类型" msgstr "模块类型校验失败,请重试并填写正确的模块类型" -#: pipeline_plugins/components/collections/sites/open/cc.py:786 +#: pipeline_plugins/components/collections/sites/open/cc.py:798 msgid "更新模块属性" msgstr "更新模块属性" -#: pipeline_plugins/components/collections/sites/open/cc.py:831 +#: pipeline_plugins/components/collections/sites/open/cc.py:843 msgid "转移主机至空闲机" msgstr "转移主机至空闲机" -#: pipeline_plugins/components/collections/sites/open/job.py:88 +#: pipeline_plugins/components/collections/sites/open/job.py:50 +msgid "作业平台(JOB)" +msgstr "作业平台(JOB)" + +#: pipeline_plugins/components/collections/sites/open/job.py:99 #, python-format msgid "任务执行失败,前往作业平台(JOB)查看详情" msgstr "任务执行失败,前往作业平台(JOB)查看详情" -#: pipeline_plugins/components/collections/sites/open/job.py:99 +#: pipeline_plugins/components/collections/sites/open/job.py:110 msgid "JOB任务ID" msgstr "JOB任务ID" -#: pipeline_plugins/components/collections/sites/open/job.py:100 +#: pipeline_plugins/components/collections/sites/open/job.py:111 msgid "JOB任务链接" msgstr "JOB任务链接" -#: pipeline_plugins/components/query/common_query.py:33 +#: pipeline_plugins/components/collections/sites/open/job.py:174 +msgid "执行作业" +msgstr "执行作业" + +#: pipeline_plugins/components/collections/sites/open/job.py:242 +msgid "快速分发文件" +msgstr "快速分发文件" + +#: pipeline_plugins/components/collections/sites/open/job.py:312 +msgid "快速执行脚本" +msgstr "快速执行脚本" + +#: pipeline_plugins/components/query/common_query.py:45 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" msgstr "查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s" -#: pipeline_plugins/components/query/common_query.py:45 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:199 +#: pipeline_plugins/components/query/common_query.py:57 msgid "所有集群(all)" msgstr "所有集群(all)" -#: pipeline_plugins/components/query/common_query.py:69 +#: pipeline_plugins/components/query/common_query.py:81 #, python-format msgid "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" msgstr "查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s" -#: pipeline_plugins/components/query/common_query.py:79 -#: pipeline_plugins/components/utils/sites/clouds/utils.py:208 +#: pipeline_plugins/components/query/common_query.py:91 msgid "所有模块(all)" msgstr "所有模块(all)" -#: pipeline_plugins/components/query/common_query.py:93 +#: pipeline_plugins/components/query/common_query.py:105 #, python-format msgid "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" msgstr "查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:32 -#, python-format -msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" -msgstr "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:42 -#, python-format -msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" -msgstr "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" - -#: pipeline_plugins/components/query/sites/clouds/query.py:54 -#, python-format -msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" -msgstr "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:77 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" -msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:104 -#, python-format -msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" -msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" - -#: pipeline_plugins/components/query/sites/clouds/query.py:198 -msgid "文件上传失败, 文件大小超过2GB" -msgstr "文件上传失败, 文件大小超过2GB" +#: pipeline_plugins/components/query/sites/open/query.py:270 +msgid "文件上传失败, 文件大小超过500M" +msgstr "文件上传失败, 文件大小超过500M" -#: pipeline_plugins/components/query/sites/clouds/query.py:204 -#: pipeline_plugins/components/query/sites/open/query.py:264 +#: pipeline_plugins/components/query/sites/open/query.py:276 msgid "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" msgstr "文件上传失败,文件名不能包含中文和\\/:*?\"<>|等特殊字符" -#: pipeline_plugins/components/query/sites/clouds/query.py:233 -#: pipeline_plugins/components/query/sites/open/query.py:301 +#: pipeline_plugins/components/query/sites/open/query.py:286 +msgid "非法业务 ID" +msgstr "非法业务 ID" + +#: pipeline_plugins/components/query/sites/open/query.py:313 msgid "文件上传失败,路径不合法或者程序异常" msgstr "文件上传失败,路径不合法或者程序异常" -#: pipeline_plugins/components/query/sites/clouds/query.py:243 -#: pipeline_plugins/components/query/sites/open/query.py:311 +#: pipeline_plugins/components/query/sites/open/query.py:323 #, python-format msgid "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" msgstr "查询作业平台(JOB)的作业模板[app_id=%s]接口job.get_task返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:266 -#: pipeline_plugins/components/query/sites/open/query.py:334 +#: pipeline_plugins/components/query/sites/open/query.py:346 #, python-format msgid "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" msgstr "查询作业平台(JOB)的作业模板详情[app_id=%s]接口job.get_task_detail返回失败: %s" -#: pipeline_plugins/components/query/sites/clouds/query.py:277 -#: pipeline_plugins/components/query/sites/open/query.py:345 +#: pipeline_plugins/components/query/sites/open/query.py:357 msgid "脚本" msgstr "脚本" -#: pipeline_plugins/components/query/sites/clouds/query.py:278 -#: pipeline_plugins/components/query/sites/open/query.py:346 +#: pipeline_plugins/components/query/sites/open/query.py:358 msgid "文件" msgstr "文件" -#: pipeline_plugins/components/query/sites/open/query.py:258 -msgid "文件上传失败, 文件大小超过500M" -msgstr "文件上传失败, 文件大小超过500M" - -#: pipeline_plugins/components/query/sites/open/query.py:274 -msgid "非法业务 ID" -msgstr "非法业务 ID" - -#: pipeline_plugins/components/utils/common.py:44 +#: pipeline_plugins/components/utils/common.py:56 msgid "调用{system}接口{api_name}返回失败, params={params}, error={error}" msgstr "调用{system}接口{api_name}返回失败, params={params}, error={error}" -#: pipeline_plugins/components/utils/sites/clouds/utils.py:156 -#, python-format -msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" -msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" - #~ msgid "循环测试" #~ msgstr "循环测试" @@ -2079,3 +1794,174 @@ msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回 #~ msgid "单据审核失败,请联系DBA查看详情" #~ msgstr "单据审核失败,请联系DBA查看详情" +#~ msgid "调用创建app maker接口失败,错误信息:%s" +#~ msgstr "调用创建app maker接口失败,错误信息:%s" + +#~ msgid "调用创建app maker接口失败" +#~ msgstr "调用创建app maker接口失败" + +#~ msgid "调用修改app maker接口失败,错误信息:%s" +#~ msgstr "调用修改app maker接口失败,错误信息:%s" + +#~ msgid "调用修改app maker接口失败" +#~ msgstr "调用修改app maker接口失败" + +#~ msgid "调用修改 LOGO 接口失败,错误信息:%s" +#~ msgstr "调用修改 LOGO 接口失败,错误信息:%s" + +#~ msgid "调用修改 LOGO 接口失败" +#~ msgstr "调用修改 LOGO 接口失败" + +#~ msgid "调用远程服务失败,Http请求错误状态码:%s" +#~ msgstr "调用远程服务失败,Http请求错误状态码:%s" + +#~ msgid "蓝鲸智云企业版" +#~ msgstr "蓝鲸智云企业版" + +#~ msgid "TEST" +#~ msgstr "TEST" + +#~ msgid "GseAgent" +#~ msgstr "GseAgent" + +#~ msgid "安装" +#~ msgstr "安装" + +#~ msgid "卸载" +#~ msgstr "卸载" + +#~ msgid "短信通知结果" +#~ msgstr "短信通知结果" + +#~ msgid "短信通知返回信息" +#~ msgstr "短信通知返回信息" + +#~ msgid "邮件通知结果" +#~ msgstr "邮件通知结果" + +#~ msgid "邮件通知返回信息" +#~ msgstr "邮件通知返回信息" + +#~ msgid "微信通知结果" +#~ msgstr "微信通知结果" + +#~ msgid "微信通知返回信息" +#~ msgstr "微信通知返回信息" + +#~ msgid "消息通知" +#~ msgstr "消息通知" + +#~ msgid "游戏区服管理(GCLOUD)" +#~ msgstr "游戏区服管理(GCLOUD)" + +#~ msgid "批量更新区服标注" +#~ msgstr "批量更新区服标注" + +#~ msgid "批量更新区服状态" +#~ msgstr "批量更新区服状态" + +#~ msgid "预发布大区" +#~ msgstr "预发布大区" + +#~ msgid "发布大区" +#~ msgstr "发布大区" + +#~ msgid "游戏云存储平台(GCS)" +#~ msgstr "游戏云存储平台(GCS)" + +#~ msgid "权限申请" +#~ msgstr "权限申请" + +#~ msgid "权限回收提单" +#~ msgstr "权限回收提单" + +#~ msgid "执行变更单据" +#~ msgstr "执行变更单据" + +#~ msgid "数据库备份" +#~ msgstr "数据库备份" + +#~ msgid "变更提单" +#~ msgstr "变更提单" + +#~ msgid "无法从 JOB 读取错误信息" +#~ msgstr "无法从 JOB 读取错误信息" + +#~ msgid "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" +#~ msgstr "任务执行失败,错误信息: %s 前往作业平台(JOB)查看详情" + +#~ msgid "本地文件列表为空,请确认本地文件是否已经上传" +#~ msgstr "本地文件列表为空,请确认本地文件是否已经上传" + +#~ msgid "获取 S3 对象下载链接失败:%s" +#~ msgstr "获取 S3 对象下载链接失败:%s" + +#~ msgid "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" +#~ msgstr "无法从 CC 获取到 IP 列表,请确认目标 IP 是否在当前业务下" + +#~ msgid "分发本地文件" +#~ msgstr "分发本地文件" + +#~ msgid "蓝鲸监控(Monitor)" +#~ msgstr "蓝鲸监控(Monitor)" + +#~ msgid "告警屏蔽" +#~ msgstr "告警屏蔽" + +#~ msgid "GseProxy" +#~ msgstr "GseProxy" + +#~ msgid "AutoTCM(TCM)" +#~ msgstr "AutoTCM(TCM)" + +#~ msgid "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" +#~ msgstr "由于 UWork 的限制,标准运维每天发送的语音通知有限,非紧急情况,请尽量避免使用语音通知" + +#~ msgid "负载均衡业务(CLB)" +#~ msgstr "负载均衡业务(CLB)" + +#~ msgid "扫描域名证书" +#~ msgstr "扫描域名证书" + +#~ msgid "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" +#~ msgstr "返回码说明,0: 当前证书可用 -1: 证书60天内过期 -2: 赛门铁克证书,不可信 -3: 查询失败 1: 当期域名无法扫描到证书" + +#~ msgid "企业微信(QYWEIXIN)" +#~ msgstr "企业微信(QYWEIXIN)" + +#~ msgid "企业微信拉群失败,组件返回错误消息:%s" +#~ msgstr "企业微信拉群失败,组件返回错误消息:%s" + +#~ msgid "企业微信拉群发送消息失败,组件返回错误消息:%s" +#~ msgstr "企业微信拉群发送消息失败,组件返回错误消息:%s" + +#~ msgid "企业微信拉群" +#~ msgstr "企业微信拉群" + +#~ msgid "消息通知服务(TOF)" +#~ msgstr "消息通知服务(TOF)" + +#~ msgid "获取员工直属Leader" +#~ msgstr "获取员工直属Leader" + +#~ msgid "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" +#~ msgstr "查询配置平台(CC)的业务[biz_id=%s]信息接口cc.get_app_by_id返回失败: %s" + +#~ msgid "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" +#~ msgstr "查询配置平台(CC)的业务[id=%s]信息接口cc.get_app_by_id返回为空" + +#~ msgid "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" +#~ msgstr "查询AutoTCM的业务接口tcm.get_app_by_user返回失败: %s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" +#~ msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板接口tcm.get_templates返回失败: %s" + +#~ msgid "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" +#~ msgstr "查询AutoTCM的业务[biz_id=%s, tcm_app_id=%s]模板[id=%s]详情接口tcm.get_template_info返回失败: %s" + +#~ msgid "文件上传失败, 文件大小超过2GB" +#~ msgstr "文件上传失败, 文件大小超过2GB" + +#~ msgid "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" +#~ msgstr "查询配置平台(CMDB)的业务[app_id=%s]接口cc.get_app_by_id返回失败: %s" + diff --git a/locale/zh_hans/LC_MESSAGES/djangojs.mo b/locale/zh_hans/LC_MESSAGES/djangojs.mo index 9a71310ee6338e9c8b3073701f279e49f7bd7146..b94ddb68d7c0449ae1f2274e0c0ab73d7dd9cc7d 100644 GIT binary patch literal 40072 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 z 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 PwQ6coUu*65wbuUt>pNCV literal 51146 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 diff --git a/locale/zh_hans/LC_MESSAGES/djangojs.po b/locale/zh_hans/LC_MESSAGES/djangojs.po index 90eae98120..ec8bbfb330 100644 --- a/locale/zh_hans/LC_MESSAGES/djangojs.po +++ b/locale/zh_hans/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-22 12:08+0800\n" +"POT-Creation-Date: 2019-04-10 21:07+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,3811 +18,3367 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:47 -#, javascript-format -msgid "Available %s" -msgstr "Available %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:53 -#, javascript-format -msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." -msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:69 -#, javascript-format -msgid "Type into this box to filter down the list of available %s." -msgstr "Type into this box to filter down the list of available %s." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:74 -msgid "Filter" -msgstr "Filter" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -msgid "Choose all" -msgstr "Choose all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:78 -#, javascript-format -msgid "Click to choose all %s at once." -msgstr "Click to choose all %s at once." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:84 -msgid "Choose" -msgstr "Choose" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:86 -msgid "Remove" -msgstr "Remove" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:92 -#, javascript-format -msgid "Chosen %s" -msgstr "Chosen %s" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:98 -#, javascript-format -msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." -msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -msgid "Remove all" -msgstr "Remove all" - -#: blueapps/conf/project_template/static/admin/js/SelectFilter2.js:108 -#, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "Click to remove all chosen %s at once." - -#: blueapps/conf/project_template/static/admin/js/actions.js:48 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:2 -msgid "%(sel)s of %(cnt)s selected" -msgid_plural "%(sel)s of %(cnt)s selected" -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/actions.js:117 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:4 -msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." -msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." - -#: blueapps/conf/project_template/static/admin/js/actions.js:129 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." -msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." - -#: blueapps/conf/project_template/static/admin/js/actions.js:131 -#: blueapps/conf/project_template/static/admin/js/actions.min.js:5 -msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." -msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:74 -#, javascript-format -msgid "Note: You are %s hour ahead of server time." -msgid_plural "Note: You are %s hours ahead of server time." -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:82 -#, javascript-format -msgid "Note: You are %s hour behind server time." -msgid_plural "Note: You are %s hours behind server time." -msgstr[0] "" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:109 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:160 -msgid "Now" -msgstr "Now" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:127 -msgid "Choose a Time" -msgstr "Choose a Time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:157 -msgid "Choose a time" -msgstr "Choose a time" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:165 -msgid "Midnight" -msgstr "Midnight" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:170 -msgid "6 a.m." -msgstr "6 a.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:175 -msgid "Noon" -msgstr "Noon" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:180 -msgid "6 p.m." -msgstr "6 p.m." - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:188 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:348 -msgid "Cancel" -msgstr "Cancel" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:253 -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:333 -msgid "Today" -msgstr "Today" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:270 -msgid "Choose a Date" -msgstr "Choose a Date" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:327 -msgid "Yesterday" -msgstr "Yesterday" - -#: blueapps/conf/project_template/static/admin/js/admin/DateTimeShortcuts.js:339 -msgid "Tomorrow" -msgstr "Tomorrow" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:12 -msgid "January" -msgstr "January" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:13 -msgid "February" -msgstr "February" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:14 -msgid "March" -msgstr "March" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:15 -msgid "April" -msgstr "April" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:16 -msgid "May" -msgstr "May" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:17 -msgid "June" -msgstr "June" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:18 -msgid "July" -msgstr "July" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:19 -msgid "August" -msgstr "August" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:20 -msgid "September" -msgstr "September" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:21 -msgid "October" -msgstr "October" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:22 -msgid "November" -msgstr "November" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:23 -msgid "December" -msgstr "December" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:26 -msgctxt "one letter Sunday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:27 -msgctxt "one letter Monday" -msgid "M" -msgstr "M" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:28 -msgctxt "one letter Tuesday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:29 -msgctxt "one letter Wednesday" -msgid "W" -msgstr "W" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:30 -msgctxt "one letter Thursday" -msgid "T" -msgstr "T" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:31 -msgctxt "one letter Friday" -msgid "F" -msgstr "F" - -#: blueapps/conf/project_template/static/admin/js/calendar.js:32 -msgctxt "one letter Saturday" -msgid "S" -msgstr "S" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:10 -#: blueapps/conf/project_template/static/admin/js/collapse.js:21 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Show" -msgstr "Show" - -#: blueapps/conf/project_template/static/admin/js/collapse.js:18 -#: blueapps/conf/project_template/static/admin/js/collapse.min.js:1 -msgid "Hide" -msgstr "Hide" - -#: blueapps/conf/project_template/static/remote/v3/assets/jquery-ui-1.11.0.custom/jquery-ui.min.js:10 -msgid "'" -msgstr "'" - -#: pipeline/blueflow/src/api/interceptors.js:40 +#: pipeline/blueflow/src/api/interceptors.js:51 msgid "接口数据返回为空" msgstr "接口数据返回为空" -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "接口异常," msgstr "接口异常," -#: pipeline/blueflow/src/api/interceptors.js:41 +#: pipeline/blueflow/src/api/interceptors.js:52 msgid "HTTP状态码:" msgstr "HTTP状态码:" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:50 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:61 msgid "错误码" msgstr "错误码" -#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:51 +#: pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue:62 msgid "请输入 IP" msgstr "请输入 IP" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:56 -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:138 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:67 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:149 msgid "请输入名称" msgstr "请输入名称" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:57 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:82 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:68 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:93 msgid "新建流程" msgstr "新建流程" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:58 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:69 msgid "编辑流程" msgstr "编辑流程" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:59 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:137 -#: pipeline/blueflow/src/pages/config/index.vue:64 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:119 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:186 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:70 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:148 +#: pipeline/blueflow/src/pages/config/index.vue:75 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:130 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:116 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:197 msgid "保存" msgstr "保存" -#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:60 +#: pipeline/blueflow/src/components/common/PipelineCanvas/ConfigBar.vue:71 msgid "返回" msgstr "返回" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:137 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:148 msgid "工具" msgstr "工具" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:139 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:200 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:150 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:211 msgid "开始" msgstr "开始" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:140 -#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:201 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:151 +#: pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue:212 msgid "结束" msgstr "结束" -#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:141 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:85 +#: pipeline/blueflow/src/components/common/PipelineCanvas/MenuBar.vue:152 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:96 msgid "个" msgstr "个" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:192 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:203 msgid "复位" msgstr "复位" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:193 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:204 msgid "放大" msgstr "放大" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:194 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:205 msgid "缩小" msgstr "缩小" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:195 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:206 msgid "节点框选" msgstr "节点框选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:196 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:207 msgid "排版" msgstr "排版" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:197 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:118 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:115 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:208 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:129 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:126 msgid "全选" msgstr "全选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:198 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:209 msgid "反选" msgstr "反选" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:199 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:210 msgid "已添加" msgstr "已添加" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:200 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:39 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:211 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:50 msgid "个节点" msgstr "个节点" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:254 -#: pipeline/blueflow/src/store/modules/template.js:29 -#: pipeline/blueflow/src/store/modules/template.js:56 -#: pipeline/blueflow/src/store/modules/template.js:474 -#: pipeline/blueflow/src/store/modules/template.js:489 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:265 +#: pipeline/blueflow/src/store/modules/template.js:40 +#: pipeline/blueflow/src/store/modules/template.js:67 +#: pipeline/blueflow/src/store/modules/template.js:485 +#: pipeline/blueflow/src/store/modules/template.js:500 msgid "步骤1" msgstr "步骤1" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:452 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:463 msgid "排版自动保存" msgstr "排版自动保存" -#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:453 +#: pipeline/blueflow/src/components/common/PipelineCanvas/index.vue:464 msgid "排版完成,原内容在本地缓存中" msgstr "排版完成,原内容在本地缓存中" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:92 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:125 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:103 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:240 msgid "取消勾选" msgstr "取消勾选" -#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:93 -#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:126 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:228 +#: pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue:104 +#: pipeline/blueflow/src/components/common/RenderForm/FormItem.vue:137 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 msgid "勾选参数作为全局变量" msgstr "勾选参数作为全局变量" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:34 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:154 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:199 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:45 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:165 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:322 msgid "请选择" msgstr "请选择" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:35 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:46 msgid "输入筛选条件,多条筛选条件换行隔开" msgstr "输入筛选条件,多条筛选条件换行隔开" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:36 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:42 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 -#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:181 -#: pipeline/blueflow/src/main.js:62 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/ConditionItem.vue:47 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:53 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:122 +#: pipeline/blueflow/src/components/common/RenderForm/formMixins.js:192 +#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:71 msgid "必填项" msgstr "必填项" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:38 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:99 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:119 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:49 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:130 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:124 msgid "已选择" msgstr "已选择" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:40 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:51 msgid "搜索节点" msgstr "搜索节点" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:41 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:110 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:70 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:98 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:89 -#: pipeline/blueflow/src/components/common/base/NoData.vue:26 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:197 -#: pipeline/blueflow/src/pages/functor/index.vue:319 -#: pipeline/blueflow/src/pages/functor/index.vue:324 -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue:52 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:121 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:81 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/base/NoData.vue:37 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:208 +#: pipeline/blueflow/src/pages/functor/index.vue:330 +#: pipeline/blueflow/src/pages/functor/index.vue:335 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 msgid "无数据" msgstr "无数据" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:16 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/IpSearchInput.vue:27 msgid "搜索IP,多个以逗号隔开" msgstr "搜索IP,多个以逗号分隔" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:30 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:41 msgid "(同时满足)" msgstr "(同时满足)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:31 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/SelectCondition.vue:42 msgid "增加一条筛选条件" msgstr "增加一条筛选条件" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:93 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 msgid "复制IP" msgstr "复制IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:94 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 msgid "复制Agent未安装IP" msgstr "复制Agent未安装IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:95 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 msgid "清空IP" msgstr "清空IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:96 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 msgid "清空Agent未安装IP" msgstr "清空Agent未安装IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:97 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:66 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:142 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:77 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:153 msgid "添加" msgstr "添加" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:98 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 msgid "更多操作" msgstr "更多操作" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:111 msgid "个静态IP(未安装agent" msgstr "个静态IP(未安装agent" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:101 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:112 msgid "个)" msgstr "个)" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:102 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:67 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:113 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:78 msgid "云区域" msgstr "云区域" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:103 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:68 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:94 -#: pipeline/blueflow/src/pages/audit/index.vue:161 -#: pipeline/blueflow/src/pages/functor/index.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:223 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:114 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:79 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:105 +#: pipeline/blueflow/src/pages/audit/index.vue:114 +#: pipeline/blueflow/src/pages/functor/index.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:199 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:251 msgid "状态" msgstr "状态" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:104 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:69 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:115 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:80 msgid "异常" msgstr "异常" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:105 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:140 -#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:196 -#: pipeline/blueflow/src/pages/audit/index.vue:162 -#: pipeline/blueflow/src/pages/functor/index.vue:164 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:224 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:286 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:116 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:151 +#: pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue:207 +#: pipeline/blueflow/src/pages/audit/index.vue:115 +#: pipeline/blueflow/src/pages/functor/index.vue:175 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 msgid "操作" msgstr "操作" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:106 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:117 msgid "移除" msgstr "移除" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:107 -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:71 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:118 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:82 msgid "正常" msgstr "正常" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:108 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:119 msgid "无数据,点击" msgstr "无数据,点击" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:109 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue:120 msgid "服务器" msgstr "服务器" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:72 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:138 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:121 -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:41 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:41 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:187 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIpAddingPanel.vue:83 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:149 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:132 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:52 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:52 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:117 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:198 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:170 msgid "取消" msgstr "取消" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:57 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:68 msgid "静态IP" msgstr "静态IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:58 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:69 msgid "动态IP" msgstr "动态IP" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:59 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:70 msgid "筛选条件" msgstr "筛选条件" -#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:60 +#: pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue:71 msgid "排除条件" msgstr "排除条件" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:139 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:36 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:177 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:150 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:47 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:188 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 msgid "编辑" msgstr "编辑" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:141 -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:37 -#: pipeline/blueflow/src/pages/appmaker/index.vue:85 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:97 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:116 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:152 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:48 +#: pipeline/blueflow/src/pages/appmaker/index.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:127 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 msgid "删除" msgstr "删除" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:276 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue:287 msgid "请求表头数据失败,使用预置表头" msgstr "请求表头数据失败,使用预置表头" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:25 -#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:24 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagDatetime.vue:36 +#: pipeline/blueflow/src/components/tags/TagTestDatetime.vue:35 msgid "请选择日期时间" msgstr "请选择日期时间" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:38 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue:49 msgid "要修改密码请点击后重新输入密码" msgstr "要修改密码请点击后重新输入密码" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:100 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:111 msgid "加载中" msgstr "加载中" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:195 -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:154 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue:206 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue:165 msgid "请求数据失败" msgstr "请求数据失败" -#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:80 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:137 +#: pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 msgid "点击上传" msgstr "点击上传" -#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:23 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:172 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 +#: pipeline/blueflow/src/components/common/base/BaseSearch.vue:34 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:256 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:326 msgid "高级搜索" msgstr "高级搜索" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:14 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:25 msgid "您需要登录蓝鲸智云" msgstr "您需要登录蓝鲸智云" -#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:15 +#: pipeline/blueflow/src/components/common/modal/ErrorCode401.vue:26 msgid "立即登录" msgstr "立即登录" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:28 msgid "对不起,您没有当前应用的访问权限" msgstr "对不起,您没有当前应用的访问权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:18 -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:18 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:29 msgid "请尝试如下操作:" msgstr "请尝试如下操作:" -#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode403.vue:30 msgid "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" msgstr "联系应用“管理员”为您添加应用访问白名单或者 IP 白名单" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:26 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:37 msgid "对不起,您没有当前操作需要的的权限" msgstr "对不起,您没有当前操作需要的的权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:27 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:29 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:40 msgid "1.联系业务运维为您添加" msgstr "1.联系业务运维为您添加" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:28 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:39 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:41 msgid "配置平台" msgstr "配置平台" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:29 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:40 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:42 msgid "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" msgstr "对应业务的角色,如运维人员、开发人员、产品人员、测试人员" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:30 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:41 msgid "2.联系业务运维为您添加需要操作的流程模板的权限" msgstr "2.联系业务运维为您添加需要操作的流程模板的权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:31 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:42 msgid "3.或者前往" msgstr "3.或者前往" -#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:32 -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:33 +#: pipeline/blueflow/src/components/common/modal/ErrorCode405.vue:43 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:44 msgid "创建属于自己的业务" msgstr "创建属于自己的业务" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:28 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:39 msgid "对不起,您没有业务权限" msgstr "对不起,您没有业务权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:32 +#: pipeline/blueflow/src/components/common/modal/ErrorCode406.vue:43 msgid "2.或者前往" msgstr "2.或者前往" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:17 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:28 msgid "对不起,您没有当前应用的管理员权限" msgstr "对不起,您没有当前应用的管理员权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:19 +#: pipeline/blueflow/src/components/common/modal/ErrorCode407.vue:30 msgid "联系“管理员”为您添加管理员权限" msgstr "联系“管理员”为您添加管理员权限" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:16 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:27 msgid "应用出现异常" msgstr "应用出现异常" -#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:17 -#: pipeline/blueflow/src/utils/errorHandler.js:33 -#: pipeline/blueflow/src/utils/errorHandler.js:38 +#: pipeline/blueflow/src/components/common/modal/ErrorCode500.vue:28 +#: pipeline/blueflow/src/utils/errorHandler.js:44 +#: pipeline/blueflow/src/utils/errorHandler.js:49 msgid "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" msgstr "系统出现异常, 请记录下错误场景并与开发人员联系, 谢谢!" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:29 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:40 msgid "QQ咨询" msgstr "QQ咨询" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:30 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:41 msgid "蓝鲸官网" msgstr "蓝鲸官网" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:31 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:42 msgid "蓝鲸论坛" msgstr "蓝鲸论坛" -#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:32 +#: pipeline/blueflow/src/components/layout/CopyrightFooter.vue:43 msgid "蓝鲸智云 版权所有" msgstr "蓝鲸智云 版权所有" -#: pipeline/blueflow/src/components/layout/Navigator.vue:75 +#: pipeline/blueflow/src/components/layout/Navigator.vue:86 msgid "职能化中心" msgstr "职能化中心" -#: pipeline/blueflow/src/components/layout/Navigator.vue:83 -#: pipeline/blueflow/src/pages/audit/index.vue:152 +#: pipeline/blueflow/src/components/layout/Navigator.vue:94 +#: pipeline/blueflow/src/pages/audit/index.vue:105 msgid "审计中心" msgstr "审计中心" -#: pipeline/blueflow/src/components/layout/Navigator.vue:90 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:134 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:219 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/components/layout/Navigator.vue:101 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:145 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:203 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "流程模板" msgstr "流程模板" -#: pipeline/blueflow/src/components/layout/Navigator.vue:94 -#: pipeline/blueflow/src/pages/functor/index.vue:196 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:278 +#: pipeline/blueflow/src/components/layout/Navigator.vue:105 +#: pipeline/blueflow/src/pages/functor/index.vue:207 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 msgid "业务流程" msgstr "业务流程" -#: pipeline/blueflow/src/components/layout/Navigator.vue:99 -#: pipeline/blueflow/src/components/layout/Navigator.vue:136 -#: pipeline/blueflow/src/pages/functor/index.vue:200 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:279 +#: pipeline/blueflow/src/components/layout/Navigator.vue:110 +#: pipeline/blueflow/src/components/layout/Navigator.vue:147 +#: pipeline/blueflow/src/pages/functor/index.vue:211 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 msgid "公共流程" msgstr "公共流程" -#: pipeline/blueflow/src/components/layout/Navigator.vue:108 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:171 +#: pipeline/blueflow/src/components/layout/Navigator.vue:119 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 msgid "周期任务" msgstr "周期任务" -#: pipeline/blueflow/src/components/layout/Navigator.vue:113 -#: pipeline/blueflow/src/components/layout/Navigator.vue:193 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:216 +#: pipeline/blueflow/src/components/layout/Navigator.vue:124 +#: pipeline/blueflow/src/components/layout/Navigator.vue:204 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:111 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 msgid "任务记录" msgstr "任务记录" -#: pipeline/blueflow/src/components/layout/Navigator.vue:118 +#: pipeline/blueflow/src/components/layout/Navigator.vue:129 msgid "业务配置" msgstr "业务配置" -#: pipeline/blueflow/src/components/layout/Navigator.vue:123 -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:83 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/components/layout/Navigator.vue:134 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:94 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:254 msgid "轻应用" msgstr "轻应用" -#: pipeline/blueflow/src/components/layout/Navigator.vue:127 +#: pipeline/blueflow/src/components/layout/Navigator.vue:138 msgid "管理员入口" msgstr "管理员入口" -#: pipeline/blueflow/src/components/layout/Navigator.vue:131 -#: pipeline/blueflow/src/pages/statistics/index.vue:56 +#: pipeline/blueflow/src/components/layout/Navigator.vue:142 +#: pipeline/blueflow/src/pages/statistics/index.vue:67 msgid "运营数据" msgstr "运营数据" -#: pipeline/blueflow/src/components/layout/Navigator.vue:155 +#: pipeline/blueflow/src/components/layout/Navigator.vue:166 msgid "logo-zh" msgstr "logo-zh" -#: pipeline/blueflow/src/components/layout/Navigator.vue:157 +#: pipeline/blueflow/src/components/layout/Navigator.vue:168 msgid "帮助文档" msgstr "帮助文档" -#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:14 +#: pipeline/blueflow/src/components/layout/NotFoundComponent.vue:25 msgid "没找到页面!" msgstr "没找到页面!" -#: pipeline/blueflow/src/config/setting.js:47 +#: pipeline/blueflow/src/config/setting.js:58 msgid "提示" msgstr "提示" -#: pipeline/blueflow/src/constants/index.js:2 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:161 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:231 -#: pipeline/blueflow/src/pages/audit/index.vue:243 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:92 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:348 +#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:172 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:242 +#: pipeline/blueflow/src/pages/audit/index.vue:196 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:103 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:268 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:359 msgid "未执行" msgstr "未执行" -#: pipeline/blueflow/src/constants/index.js:3 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:185 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:228 -#: pipeline/blueflow/src/pages/audit/index.vue:169 -#: pipeline/blueflow/src/pages/audit/index.vue:275 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:112 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:373 +#: pipeline/blueflow/src/constants/index.js:14 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:196 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:239 +#: pipeline/blueflow/src/pages/audit/index.vue:122 +#: pipeline/blueflow/src/pages/audit/index.vue:228 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:123 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:257 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:384 msgid "执行中" msgstr "执行中" -#: pipeline/blueflow/src/constants/index.js:4 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:189 -#: pipeline/blueflow/src/pages/audit/index.vue:170 -#: pipeline/blueflow/src/pages/audit/index.vue:279 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:117 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:178 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:209 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:171 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:189 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:675 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:377 +#: pipeline/blueflow/src/constants/index.js:15 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:200 +#: pipeline/blueflow/src/pages/audit/index.vue:123 +#: pipeline/blueflow/src/pages/audit/index.vue:232 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:220 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:182 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:200 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:686 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:388 msgid "暂停" msgstr "暂停" -#: pipeline/blueflow/src/constants/index.js:5 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:193 -#: pipeline/blueflow/src/pages/audit/index.vue:283 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:122 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:381 +#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 +#: pipeline/blueflow/src/pages/audit/index.vue:236 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:133 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 msgid "节点暂停" msgstr "节点暂停" -#: pipeline/blueflow/src/constants/index.js:6 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:197 -#: pipeline/blueflow/src/pages/audit/index.vue:287 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:127 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:385 +#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:208 +#: pipeline/blueflow/src/pages/audit/index.vue:240 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:138 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:396 msgid "失败" msgstr "失败" -#: pipeline/blueflow/src/constants/index.js:7 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:155 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:225 -#: pipeline/blueflow/src/pages/audit/index.vue:237 -#: pipeline/blueflow/src/pages/functor/index.vue:265 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:84 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:259 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:342 +#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:166 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:190 +#: pipeline/blueflow/src/pages/functor/index.vue:276 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:95 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:270 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:353 msgid "完成" msgstr "完成" -#: pipeline/blueflow/src/constants/index.js:8 -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:201 -#: pipeline/blueflow/src/pages/audit/index.vue:291 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:163 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:389 +#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:212 +#: pipeline/blueflow/src/pages/audit/index.vue:244 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:174 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:400 msgid "撤销" msgstr "撤销" -#: pipeline/blueflow/src/constants/index.js:12 +#: pipeline/blueflow/src/constants/index.js:23 msgid "开始节点" msgstr "开始节点" -#: pipeline/blueflow/src/constants/index.js:13 +#: pipeline/blueflow/src/constants/index.js:24 msgid "结束节点" msgstr "结束节点" -#: pipeline/blueflow/src/constants/index.js:16 +#: pipeline/blueflow/src/constants/index.js:27 msgid "并行网关" msgstr "并行网关" -#: pipeline/blueflow/src/constants/index.js:17 +#: pipeline/blueflow/src/constants/index.js:28 msgid "分支网关" msgstr "分支网关" -#: pipeline/blueflow/src/constants/index.js:18 +#: pipeline/blueflow/src/constants/index.js:29 msgid "汇聚网关" msgstr "汇聚网关" -#: pipeline/blueflow/src/constants/index.js:19 +#: pipeline/blueflow/src/constants/index.js:30 msgid "标准插件节点" msgstr "标准插件节点" -#: pipeline/blueflow/src/constants/index.js:20 +#: pipeline/blueflow/src/constants/index.js:31 msgid "子流程节点" msgstr "子流程节点" -#: pipeline/blueflow/src/main.js:66 +#: pipeline/blueflow/src/main.js:77 msgid "流程名称不能为空" msgstr "流程名称不能为空" -#: pipeline/blueflow/src/main.js:67 +#: pipeline/blueflow/src/main.js:78 msgid "流程名称不能包含" msgstr "流程名称不能包含" -#: pipeline/blueflow/src/main.js:67 pipeline/blueflow/src/main.js:72 -#: pipeline/blueflow/src/main.js:76 pipeline/blueflow/src/main.js:81 -#: pipeline/blueflow/src/main.js:99 pipeline/blueflow/src/main.js:104 -#: pipeline/blueflow/src/main.js:112 pipeline/blueflow/src/main.js:120 -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:78 pipeline/blueflow/src/main.js:83 +#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:92 +#: pipeline/blueflow/src/main.js:110 pipeline/blueflow/src/main.js:115 +#: pipeline/blueflow/src/main.js:123 pipeline/blueflow/src/main.js:131 +#: pipeline/blueflow/src/main.js:140 msgid "非法字符" msgstr "非法字符" -#: pipeline/blueflow/src/main.js:68 +#: pipeline/blueflow/src/main.js:79 msgid "流程名称长度不能超过" msgstr "流程名称长度不能超过" -#: pipeline/blueflow/src/main.js:68 pipeline/blueflow/src/main.js:73 -#: pipeline/blueflow/src/main.js:77 pipeline/blueflow/src/main.js:82 -#: pipeline/blueflow/src/main.js:87 pipeline/blueflow/src/main.js:100 -#: pipeline/blueflow/src/main.js:105 pipeline/blueflow/src/main.js:113 -#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:121 -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:79 pipeline/blueflow/src/main.js:84 +#: pipeline/blueflow/src/main.js:88 pipeline/blueflow/src/main.js:93 +#: pipeline/blueflow/src/main.js:98 pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:116 pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:127 pipeline/blueflow/src/main.js:132 +#: pipeline/blueflow/src/main.js:141 msgid "个字符" msgstr "个字符" -#: pipeline/blueflow/src/main.js:71 +#: pipeline/blueflow/src/main.js:82 msgid "节点名称不能为空" msgstr "节点名称不能为空" -#: pipeline/blueflow/src/main.js:72 +#: pipeline/blueflow/src/main.js:83 msgid "节点名称不能包含" msgstr "节点名称不能包含" -#: pipeline/blueflow/src/main.js:73 +#: pipeline/blueflow/src/main.js:84 msgid "节点名称长度不能超过" msgstr "节点名称长度不能超过" -#: pipeline/blueflow/src/main.js:76 +#: pipeline/blueflow/src/main.js:87 msgid "步骤名称不能包含" msgstr "步骤名称不能包含" -#: pipeline/blueflow/src/main.js:77 +#: pipeline/blueflow/src/main.js:88 msgid "步骤名称不能超过" msgstr "步骤名称不能超过" -#: pipeline/blueflow/src/main.js:80 +#: pipeline/blueflow/src/main.js:91 msgid "变量名称不能为空" msgstr "变量名称不能为空" -#: pipeline/blueflow/src/main.js:81 +#: pipeline/blueflow/src/main.js:92 msgid "变量名称不能包含" msgstr "变量名称不能包含" -#: pipeline/blueflow/src/main.js:82 +#: pipeline/blueflow/src/main.js:93 msgid "变量名称长度不能超过" msgstr "变量名称长度不能超过" -#: pipeline/blueflow/src/main.js:85 +#: pipeline/blueflow/src/main.js:96 msgid "变量KEY值不能为空" msgstr "变量KEY值不能为空" -#: pipeline/blueflow/src/main.js:86 +#: pipeline/blueflow/src/main.js:97 msgid "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" msgstr "变量KEY由英文字母、数字、下划线组成,且不能以数字开头" -#: pipeline/blueflow/src/main.js:87 +#: pipeline/blueflow/src/main.js:98 msgid "变量KEY值长度不能超过" msgstr "变量KEY值长度不能超过" -#: pipeline/blueflow/src/main.js:88 +#: pipeline/blueflow/src/main.js:99 msgid "变量KEY值已存在" msgstr "变量KEY值已存在" -#: pipeline/blueflow/src/main.js:91 +#: pipeline/blueflow/src/main.js:102 msgid "变量隐藏时默认值不能为空" msgstr "变量隐藏时默认值不能为空" -#: pipeline/blueflow/src/main.js:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:399 +#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:410 msgid "默认值不满足正则校验" msgstr "默认值不满足正则校验" -#: pipeline/blueflow/src/main.js:95 +#: pipeline/blueflow/src/main.js:106 msgid "正则校验不是合法的正则表达式" msgstr "正则校验不是合法的正则表达式" -#: pipeline/blueflow/src/main.js:98 +#: pipeline/blueflow/src/main.js:109 msgid "任务名称不能为空" msgstr "任务名称不能为空" -#: pipeline/blueflow/src/main.js:99 +#: pipeline/blueflow/src/main.js:110 msgid "任务名称不能包含" msgstr "任务名称不能包含" -#: pipeline/blueflow/src/main.js:100 +#: pipeline/blueflow/src/main.js:111 msgid "任务名称不能超过" msgstr "任务名称不能超过" -#: pipeline/blueflow/src/main.js:103 +#: pipeline/blueflow/src/main.js:114 msgid "方案名称不能为空" msgstr "方案名称不能为空" -#: pipeline/blueflow/src/main.js:104 +#: pipeline/blueflow/src/main.js:115 msgid "方案名称不能包含" msgstr "方案名称不能包含" -#: pipeline/blueflow/src/main.js:105 +#: pipeline/blueflow/src/main.js:116 msgid "方案名称不能超过" msgstr "方案名称不能超过" -#: pipeline/blueflow/src/main.js:108 -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:135 +#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:146 msgid "流程模板不能为空" msgstr "流程模板不能为空" -#: pipeline/blueflow/src/main.js:111 +#: pipeline/blueflow/src/main.js:122 msgid "应用名称不能为空" msgstr "应用名称不能为空" -#: pipeline/blueflow/src/main.js:112 +#: pipeline/blueflow/src/main.js:123 msgid "应用名称不能包含" msgstr "应用名称不能包含" -#: pipeline/blueflow/src/main.js:113 +#: pipeline/blueflow/src/main.js:124 msgid "应用名称不能超过" msgstr "应用名称不能超过" -#: pipeline/blueflow/src/main.js:116 +#: pipeline/blueflow/src/main.js:127 msgid "应用简介不能超过" msgstr "应用简介不能超过" -#: pipeline/blueflow/src/main.js:119 +#: pipeline/blueflow/src/main.js:130 msgid "定时流程名称不能为空" msgstr "定时流程名称不能为空" -#: pipeline/blueflow/src/main.js:120 +#: pipeline/blueflow/src/main.js:131 msgid "定时流程名称包含" msgstr "定时流程名称包含" -#: pipeline/blueflow/src/main.js:121 +#: pipeline/blueflow/src/main.js:132 msgid "定时流程名称不能超过" msgstr "定时流程名称不能超过" -#: pipeline/blueflow/src/main.js:124 +#: pipeline/blueflow/src/main.js:135 msgid "定时表达式不能为空" msgstr "定时表达式不能为空" -#: pipeline/blueflow/src/main.js:125 +#: pipeline/blueflow/src/main.js:136 msgid "输入定时表达式非法,请校验" msgstr "输入定时表达式非法,请校验" -#: pipeline/blueflow/src/main.js:128 +#: pipeline/blueflow/src/main.js:139 msgid "本地缓存名称不能为空" msgstr "本地缓存名称不能为空" -#: pipeline/blueflow/src/main.js:129 +#: pipeline/blueflow/src/main.js:140 msgid "本地缓存名称包含" msgstr "本地缓存名称包含" -#: pipeline/blueflow/src/main.js:130 +#: pipeline/blueflow/src/main.js:141 msgid "本地缓存名称不能超过" msgstr "本地缓存名称不能超过" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:38 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:49 msgid "流程模板:" msgstr "流程模板:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:39 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:50 msgid "应用简介:" msgstr "应用简介:" -#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:56 +#: pipeline/blueflow/src/pages/appmaker/AppCard.vue:67 msgid "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" msgstr "外链不支持打开轻应用,请在蓝鲸市场中打开此链接" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 -#: pipeline/blueflow/src/pages/appmaker/index.vue:83 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 +#: pipeline/blueflow/src/pages/appmaker/index.vue:94 msgid "新建轻应用" msgstr "新建轻应用" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:133 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:144 msgid "修改轻应用" msgstr "修改轻应用" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:136 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:147 msgid "应用名称" msgstr "应用名称" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:137 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:126 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:148 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:137 msgid "执行方案" msgstr "执行方案" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:138 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:149 msgid "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" msgstr "当流程模板包含可选节点时,用户可以在新建任务时添加执行方案。这里选择执行方案后,创建的轻应用只能按照固定执行方案新建任务。" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:139 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:150 msgid "应用简介" msgstr "应用简介" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:140 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:151 msgid "应用LOGO" msgstr "应用LOGO" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:141 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:152 msgid "点击更换" msgstr "点击更换" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:142 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:153 msgid "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" msgstr "只能上传JPG/PNG类型文件,建议大小为100px*100px,不能超过 100K" -#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:206 +#: pipeline/blueflow/src/pages/appmaker/AppEditDialog.vue:217 msgid "图片大小不能超过 100K" msgstr "图片大小不能超过 100K" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:87 -#: pipeline/blueflow/src/pages/audit/index.vue:153 -#: pipeline/blueflow/src/pages/functor/index.vue:156 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:277 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 +#: pipeline/blueflow/src/pages/audit/index.vue:106 +#: pipeline/blueflow/src/pages/functor/index.vue:167 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:288 msgid "请输入ID或流程名称" msgstr "请输入ID或流程名称" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:88 -#: pipeline/blueflow/src/pages/audit/index.vue:155 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:218 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 +#: pipeline/blueflow/src/pages/audit/index.vue:108 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 msgid "执行开始" msgstr "执行开始" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:89 -#: pipeline/blueflow/src/pages/audit/index.vue:156 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:219 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:100 +#: pipeline/blueflow/src/pages/audit/index.vue:109 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 msgid "执行结束" msgstr "执行结束" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:90 -#: pipeline/blueflow/src/pages/audit/index.vue:157 -#: pipeline/blueflow/src/pages/functor/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:128 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:95 -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:49 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:217 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:101 +#: pipeline/blueflow/src/pages/audit/index.vue:110 +#: pipeline/blueflow/src/pages/functor/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:294 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:139 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:107 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:60 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 msgid "任务名称" msgstr "任务名称" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:91 -#: pipeline/blueflow/src/pages/audit/index.vue:158 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:102 +#: pipeline/blueflow/src/pages/audit/index.vue:111 msgid "任务类型" msgstr "任务类型" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:92 -#: pipeline/blueflow/src/pages/audit/index.vue:159 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:173 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:221 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:285 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:103 +#: pipeline/blueflow/src/pages/audit/index.vue:112 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:296 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:219 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 msgid "创建人" msgstr "创建人" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:93 -#: pipeline/blueflow/src/pages/audit/index.vue:160 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:222 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:104 +#: pipeline/blueflow/src/pages/audit/index.vue:113 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 msgid "执行人" msgstr "执行人" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:95 -#: pipeline/blueflow/src/pages/audit/index.vue:164 -#: pipeline/blueflow/src/pages/functor/index.vue:171 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:228 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:297 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:106 +#: pipeline/blueflow/src/pages/audit/index.vue:117 +#: pipeline/blueflow/src/pages/functor/index.vue:182 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 msgid "共" msgstr "共" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:96 -#: pipeline/blueflow/src/pages/audit/index.vue:165 -#: pipeline/blueflow/src/pages/functor/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:229 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:107 +#: pipeline/blueflow/src/pages/audit/index.vue:118 +#: pipeline/blueflow/src/pages/functor/index.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:192 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:240 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 msgid "条记录" msgstr "条记录" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:97 -#: pipeline/blueflow/src/pages/audit/index.vue:166 -#: pipeline/blueflow/src/pages/functor/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:182 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:230 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:299 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:108 +#: pipeline/blueflow/src/pages/audit/index.vue:119 +#: pipeline/blueflow/src/pages/functor/index.vue:184 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 msgid "," msgstr "," -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:98 -#: pipeline/blueflow/src/pages/audit/index.vue:167 -#: pipeline/blueflow/src/pages/functor/index.vue:174 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:183 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:109 +#: pipeline/blueflow/src/pages/audit/index.vue:120 +#: pipeline/blueflow/src/pages/functor/index.vue:185 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:311 msgid "当前第" msgstr "当前第" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:99 -#: pipeline/blueflow/src/pages/audit/index.vue:168 -#: pipeline/blueflow/src/pages/functor/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:184 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:232 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:110 +#: pipeline/blueflow/src/pages/audit/index.vue:121 +#: pipeline/blueflow/src/pages/functor/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:243 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 msgid "页" msgstr "页" -#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:204 -#: pipeline/blueflow/src/pages/audit/index.vue:294 -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:135 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:392 +#: pipeline/blueflow/src/pages/appmaker/AppTaskHome/index.vue:215 +#: pipeline/blueflow/src/pages/audit/index.vue:247 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:146 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:403 msgid "未知" msgstr "未知" -#: pipeline/blueflow/src/pages/appmaker/index.vue:84 +#: pipeline/blueflow/src/pages/appmaker/index.vue:95 msgid "请输入轻应用名称" msgstr "请输入轻应用名称" -#: pipeline/blueflow/src/pages/appmaker/index.vue:86 +#: pipeline/blueflow/src/pages/appmaker/index.vue:97 msgid "确认删除轻应用?" msgstr "确认删除轻应用?" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "未找到相关轻应用" msgstr "未找到相关轻应用" -#: pipeline/blueflow/src/pages/appmaker/index.vue:95 +#: pipeline/blueflow/src/pages/appmaker/index.vue:106 msgid "暂未添加轻应用" msgstr "暂未添加轻应用" -#: pipeline/blueflow/src/pages/audit/index.vue:154 -#: pipeline/blueflow/src/pages/functor/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:148 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:192 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:197 +#: pipeline/blueflow/src/pages/audit/index.vue:107 +#: pipeline/blueflow/src/pages/functor/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:208 msgid "所属业务" msgstr "所属业务" -#: pipeline/blueflow/src/pages/audit/index.vue:163 -#: pipeline/blueflow/src/pages/functor/index.vue:166 +#: pipeline/blueflow/src/pages/audit/index.vue:116 +#: pipeline/blueflow/src/pages/functor/index.vue:177 msgid "查看" msgstr "查看" -#: pipeline/blueflow/src/pages/audit/index.vue:171 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:271 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:220 +#: pipeline/blueflow/src/pages/audit/index.vue:124 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:231 msgid "任务分类" msgstr "任务分类" -#: pipeline/blueflow/src/pages/audit/index.vue:172 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:194 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:312 +#: pipeline/blueflow/src/pages/audit/index.vue:125 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:205 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:249 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:323 msgid "搜索" msgstr "搜索" -#: pipeline/blueflow/src/pages/audit/index.vue:173 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:195 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:239 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/audit/index.vue:126 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:206 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:250 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:324 msgid "清空" msgstr "清空" -#: pipeline/blueflow/src/pages/audit/index.vue:174 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:234 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 +#: pipeline/blueflow/src/pages/audit/index.vue:127 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:245 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:317 msgid "请选择分类" msgstr "请选择分类" -#: pipeline/blueflow/src/pages/audit/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:235 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:308 +#: pipeline/blueflow/src/pages/audit/index.vue:128 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:197 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:246 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:319 msgid "请输入创建人" msgstr "请输入创建人" -#: pipeline/blueflow/src/pages/audit/index.vue:176 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/audit/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:247 msgid "请输入执行人" msgstr "请输入执行人" -#: pipeline/blueflow/src/pages/audit/index.vue:177 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:187 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:191 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:237 +#: pipeline/blueflow/src/pages/audit/index.vue:130 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:198 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:202 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:248 msgid "请选择状态" msgstr "请选择状态" -#: pipeline/blueflow/src/pages/config/index.vue:59 +#: pipeline/blueflow/src/pages/config/index.vue:70 msgid "执行者配置" msgstr "执行者配置" -#: pipeline/blueflow/src/pages/config/index.vue:60 +#: pipeline/blueflow/src/pages/config/index.vue:71 msgid "任务执行者" msgstr "任务执行者" -#: pipeline/blueflow/src/pages/config/index.vue:61 +#: pipeline/blueflow/src/pages/config/index.vue:72 msgid "强制生效" msgstr "强制生效" -#: pipeline/blueflow/src/pages/config/index.vue:62 +#: pipeline/blueflow/src/pages/config/index.vue:73 msgid "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" msgstr "该字段默认在非运维人员执行任务时生效,为空则从配置平台(CMDB)随机获取运维身份" -#: pipeline/blueflow/src/pages/config/index.vue:63 +#: pipeline/blueflow/src/pages/config/index.vue:74 msgid "开启后,所有任务都使用任务执行者身份来执行" msgstr "开启后,所有任务都使用任务执行者身份来执行" -#: pipeline/blueflow/src/pages/config/index.vue:104 -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:92 +#: pipeline/blueflow/src/pages/config/index.vue:115 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:103 msgid "保存成功" msgstr "保存成功" -#: pipeline/blueflow/src/pages/functor/index.vue:158 +#: pipeline/blueflow/src/pages/functor/index.vue:169 msgid "提单时间" msgstr "提单时间" -#: pipeline/blueflow/src/pages/functor/index.vue:159 +#: pipeline/blueflow/src/pages/functor/index.vue:170 msgid "认领时间" msgstr "认领时间" -#: pipeline/blueflow/src/pages/functor/index.vue:161 +#: pipeline/blueflow/src/pages/functor/index.vue:172 msgid "提单人" msgstr "提单人" -#: pipeline/blueflow/src/pages/functor/index.vue:162 +#: pipeline/blueflow/src/pages/functor/index.vue:173 msgid "认领人" msgstr "认领人" -#: pipeline/blueflow/src/pages/functor/index.vue:165 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:98 +#: pipeline/blueflow/src/pages/functor/index.vue:176 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:110 msgid "认领" msgstr "认领" -#: pipeline/blueflow/src/pages/functor/index.vue:167 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:39 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:287 +#: pipeline/blueflow/src/pages/functor/index.vue:178 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:50 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:298 msgid "新建任务" msgstr "新建任务" -#: pipeline/blueflow/src/pages/functor/index.vue:168 -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:152 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:194 +#: pipeline/blueflow/src/pages/functor/index.vue:179 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 msgid "选择业务" msgstr "选择业务" -#: pipeline/blueflow/src/pages/functor/index.vue:169 +#: pipeline/blueflow/src/pages/functor/index.vue:180 msgid "选择模板" msgstr "选择模板" -#: pipeline/blueflow/src/pages/functor/index.vue:170 +#: pipeline/blueflow/src/pages/functor/index.vue:181 msgid "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" msgstr "如果未找到模板,请联系业务运维在流程模板的权限管理中对你或所有职能化人员授予“新建任务权限”" -#: pipeline/blueflow/src/pages/functor/index.vue:268 +#: pipeline/blueflow/src/pages/functor/index.vue:279 msgid "未认领" msgstr "未认领" -#: pipeline/blueflow/src/pages/functor/index.vue:271 +#: pipeline/blueflow/src/pages/functor/index.vue:282 msgid "已驳回" msgstr "已驳回" -#: pipeline/blueflow/src/pages/functor/index.vue:390 +#: pipeline/blueflow/src/pages/functor/index.vue:401 msgid " 无数据 " msgstr " 无数据 " -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:80 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:91 msgid "进入" msgstr "进入" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:81 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:92 msgid "执行任务" msgstr "执行任务" -#: pipeline/blueflow/src/pages/home/HomeSummary.vue:84 +#: pipeline/blueflow/src/pages/home/HomeSummary.vue:95 msgid "次" msgstr "次" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:66 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:77 msgid "快速新建任务" msgstr "快速新建任务" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:67 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:78 msgid "取消常用流程" msgstr "取消常用流程" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:68 -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:118 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:79 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:129 msgid "添加常用流程" msgstr "添加常用流程" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:69 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:80 msgid "业务下无常用流程," msgstr "业务下无常用流程," -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:70 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:81 msgid "立即添加" msgstr "立即添加" -#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:139 +#: pipeline/blueflow/src/pages/home/QuickCreateTask.vue:150 msgid "业务下无流程模板,为您跳转至新建流程" msgstr "业务下无流程模板,为您跳转至新建流程" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:112 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 msgid "请输入流程名称" msgstr "请输入流程名称" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:120 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:114 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:131 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:125 msgid "项" msgstr "项" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:121 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:132 msgid ",最多可选" msgstr ",最多可选" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:122 -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:110 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:133 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:121 msgid "搜索结果为空" msgstr "搜索结果为空" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:123 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:134 msgid "该业务下暂无流程," msgstr "该业务下暂无流程," -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:124 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:135 msgid "立即创建" msgstr "立即创建" -#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:175 +#: pipeline/blueflow/src/pages/home/SelectTemplateDialog.vue:186 msgid "最多只能添加10项" msgstr "最多只能添加10项" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:53 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:64 msgid "业务动态" msgstr "业务动态" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:54 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:65 msgid "查看更多" msgstr "查看更多" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:55 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:66 msgid "查看详情" msgstr "查看详情" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:56 -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:149 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 msgid "耗时" msgstr "耗时" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:67 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:78 msgid "创建了一个" msgstr "创建了一个" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:69 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:80 msgid "执行了一个" msgstr "执行了一个" -#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:72 +#: pipeline/blueflow/src/pages/home/TaskFeeds.vue:83 msgid "任务" msgstr "任务" -#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:24 +#: pipeline/blueflow/src/pages/home/TaskPercentChart.vue:35 msgid "任务分类占比" msgstr "任务分类占比" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:26 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:227 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 msgid "确认删除" msgstr "确认删除" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:32 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/DeletePeriodicDialog.vue:43 msgid "?" msgstr "?" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:66 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:77 msgid "周期信息" msgstr "周期信息" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:67 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:78 msgid "修改周期任务" msgstr "修改周期任务" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:68 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:170 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:79 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:181 msgid "周期规则" msgstr "周期规则" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:69 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:96 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:80 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:108 msgid "参数信息" msgstr "参数信息" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:70 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:81 msgid "图片出错" msgstr "图片出错" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:76 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:157 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:168 msgid "task-zh" msgstr "task-zh" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:106 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:117 msgid "输入周期表达式非法,请校验" msgstr "输入周期表达式非法,请校验" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:148 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:159 msgid "修改周期任务信息成功" msgstr "修改周期任务信息成功" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:153 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:164 msgid "修改周期任务参数成功,但表达式修改未成功,请重试" msgstr "修改周期任务参数成功,但表达式修改未成功,请重试" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:158 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:169 msgid "修改周期任务表达式成功,但任务参数未修改成功,请重试" msgstr "修改周期任务表达式成功,但任务参数未修改成功,请重试" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:163 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:183 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:174 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:194 msgid "修改周期任务失败,请联系管理员" msgstr "修改周期任务失败,请联系管理员" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:178 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue:189 msgid "修改周期任务表达式成功" msgstr "修改周期任务表达式成功" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:169 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:180 msgid "上次运行时间" msgstr "上次运行时间" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:175 -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:208 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:186 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:219 msgid "启动" msgstr "启动" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:179 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 msgid "运行次数" msgstr "运行次数" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:185 -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:233 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:196 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 msgid "请输入任务名称" msgstr "请输入任务名称" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:189 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:226 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:94 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:102 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:178 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:200 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:105 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:113 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:189 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:325 msgid "名称" msgstr "名称" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:190 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:201 msgid "请暂停任务后再执行编辑操作" msgstr "请暂停任务后再执行编辑操作" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:193 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:210 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:204 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:221 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 msgid "执行历史" msgstr "执行历史" -#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:329 +#: pipeline/blueflow/src/pages/periodic/PeriodicList/index.vue:340 msgid "删除周期任务成功" msgstr "删除周期任务成功" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:147 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 msgid "轻应用分类" msgstr "轻应用分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:149 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 msgid "轻应用创建时间" msgstr "轻应用创建时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:150 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 msgid "轻应用详情" msgstr "轻应用详情" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:151 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:274 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:276 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:193 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:285 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 msgid "选择分类" msgstr "选择分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:153 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:164 msgid "选择时间" msgstr "选择时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:155 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:277 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:328 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:166 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:302 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:339 msgid "标准插件" msgstr "标准插件" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:156 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:278 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:281 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:200 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:394 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:167 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:405 msgid "全部分类" msgstr "全部分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:157 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:282 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:201 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:386 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:168 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:397 msgid "全部业务" msgstr "全部业务" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:158 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:169 msgid "轻应用名称" msgstr "轻应用名称" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:159 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:170 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:220 msgid "创建时间" msgstr "创建时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:160 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:171 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 msgid "更新时间" msgstr "更新时间" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:161 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:172 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 msgid "更新人" msgstr "更新人" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:162 -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:204 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:56 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:173 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:215 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:67 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:293 msgid "分类" msgstr "分类" -#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:163 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/statistics/Appmaker/index.vue:174 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:224 msgid "创建任务数" msgstr "创建任务数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:268 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:279 msgid "引用次数" msgstr "引用次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:269 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:196 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 msgid "流程详情" msgstr "流程详情" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:270 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:274 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:285 msgid "执行耗时" msgstr "执行耗时" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:271 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:282 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:284 msgid "任务详情" msgstr "任务详情" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:272 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:275 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:195 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:283 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 msgid "时间范围" msgstr "时间范围" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:273 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:284 msgid "任务开始时间" msgstr "任务开始时间" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:280 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:141 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:281 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:213 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:292 msgid "流程名称" msgstr "流程名称" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:286 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:205 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:297 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:216 msgid "标准插件数" msgstr "标准插件数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:289 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:287 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:206 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:300 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:298 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:217 msgid "子流程数" msgstr "子流程数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:290 -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:288 -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:207 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:301 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:299 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:218 msgid "网关数" msgstr "网关数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:292 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:303 msgid "执行次数" msgstr "执行次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:293 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:304 msgid "失败次数" msgstr "失败次数" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:294 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:305 msgid "平均执行耗时(秒)" msgstr "平均执行耗时(秒)" -#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:295 +#: pipeline/blueflow/src/pages/statistics/Atom/index.vue:306 msgid "失败率" msgstr "失败率" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:278 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:289 msgid "时间维度" msgstr "时间维度" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:279 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 msgid "天" msgstr "天" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:290 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:301 msgid "月" msgstr "月" -#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:291 +#: pipeline/blueflow/src/pages/statistics/Instance/index.vue:302 msgid "耗时(秒)" msgstr "耗时(秒)" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:191 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:202 msgid "流程分类" msgstr "流程分类" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:198 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:209 msgid "流程引用" msgstr "流程引用" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:203 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:214 msgid "业务" msgstr "业务" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:211 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:222 msgid "创建轻应用数" msgstr "创建轻应用数" -#: pipeline/blueflow/src/pages/statistics/Template/index.vue:212 +#: pipeline/blueflow/src/pages/statistics/Template/index.vue:223 msgid "被引用为子流程数" msgstr "被引用为子流程数" -#: pipeline/blueflow/src/pages/statistics/index.vue:30 +#: pipeline/blueflow/src/pages/statistics/index.vue:41 msgid "流程统计" msgstr "流程统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:35 +#: pipeline/blueflow/src/pages/statistics/index.vue:46 msgid "任务统计" msgstr "任务统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:40 +#: pipeline/blueflow/src/pages/statistics/index.vue:51 msgid "标准插件统计" msgstr "标准插件统计" -#: pipeline/blueflow/src/pages/statistics/index.vue:45 +#: pipeline/blueflow/src/pages/statistics/index.vue:56 msgid "轻应用统计" msgstr "轻应用统计" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:127 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:94 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:106 msgid "任务信息" msgstr "任务信息" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:129 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:140 msgid "流程类型" msgstr "流程类型" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:130 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:141 msgid "默认任务流程" msgstr "默认任务流程" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:131 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:142 msgid "职能化任务流程" msgstr "职能化任务流程" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:133 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:144 msgid "上一步" msgstr "上一步" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:134 -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:122 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:145 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:133 msgid "下一步" msgstr "下一步" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:135 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:146 msgid "立即执行" msgstr "立即执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:136 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:147 msgid "周期执行" msgstr "周期执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:137 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:148 msgid "周期表达式" msgstr "周期表达式" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:138 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue:149 msgid "执行计划" msgstr "执行计划" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:116 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:127 msgid "执行方案列表" msgstr "执行方案列表" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:117 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:93 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:280 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:128 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:291 msgid "新建" msgstr "新建" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:120 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:131 msgid "取消全选" msgstr "取消全选" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:123 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:134 msgid "执行方案保存" msgstr "执行方案保存" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:135 msgid "方案名称" msgstr "方案名称" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:125 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:136 msgid "预览模式:" msgstr "预览模式:" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:291 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:302 msgid "方案名称已存在" msgstr "方案名称已存在" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:326 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:337 msgid "方案添加成功" msgstr "方案添加成功" -#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:401 +#: pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue:412 msgid "方案删除成功" msgstr "方案删除成功" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:37 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:37 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:48 msgid "节点选择" msgstr "节点选择" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:42 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:41 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:53 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:52 msgid "参数填写" msgstr "参数填写" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:47 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:101 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:113 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:118 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:45 -#: pipeline/blueflow/src/pages/task/TaskStep.vue:40 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:58 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:112 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:124 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:56 +#: pipeline/blueflow/src/pages/task/TaskStep.vue:51 msgid "任务执行" msgstr "任务执行" -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:108 -#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:132 -#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:87 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:119 +#: pipeline/blueflow/src/pages/task/TaskCreate/index.vue:143 +#: pipeline/blueflow/src/pages/task/TaskExecute/index.vue:98 msgid "职能化认领" msgstr "职能化认领" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:145 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 msgid "执行详情" msgstr "执行详情" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:146 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 msgid "执行信息" msgstr "执行信息" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:147 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 msgid "开始时间" msgstr "开始时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:148 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 msgid "结束时间" msgstr "结束时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:150 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 msgid "失败后跳过" msgstr "失败后跳过" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:151 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:162 msgid "失败自动忽略" msgstr "失败自动忽略" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:152 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:224 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 msgid "输入参数" msgstr "输入参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:153 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:225 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:164 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 msgid "输出参数" msgstr "输出参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:154 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:100 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:165 msgid "参数名" msgstr "参数名" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:155 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:159 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:48 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:166 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:59 msgid "参数值" msgstr "参数值" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:156 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:167 msgid "异常信息" msgstr "异常信息" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:157 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:168 msgid "执行记录" msgstr "执行记录" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:101 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:112 msgid "序号" msgstr "序号" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:144 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:302 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:345 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:350 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:313 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:356 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:361 msgid "是" msgstr "是" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:160 -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:145 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:303 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:346 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:351 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:171 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:314 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:357 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:362 msgid "否" msgstr "否" -#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:161 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 +#: pipeline/blueflow/src/pages/task/TaskExecute/ExecuteInfo.vue:172 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:244 msgid "手动重试" msgstr "手动重试" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:37 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:48 msgid "请选择执行分支" msgstr "请选择执行分支" -#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:38 +#: pipeline/blueflow/src/pages/task/TaskExecute/GatewaySelectDialog.vue:49 msgid "可选执行分支" msgstr "可选执行分支" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:51 msgid "修改全局参数" msgstr "修改全局参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:102 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue:113 msgid "参数修改成功" msgstr "参数修改成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:39 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:50 msgid "修改定时时间" msgstr "修改定时时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:40 -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:40 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:51 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:51 msgid "确定" msgstr "确定" -#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue:140 msgid "修改成功" msgstr "修改成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:39 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:636 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:50 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:647 msgid "重试" msgstr "重试" -#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:129 +#: pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue:140 msgid "重试成功" msgstr "重试成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:97 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:109 msgid "预览" msgstr "预览" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:99 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskFunctionalization.vue:111 msgid "任务流程预览" msgstr "任务流程预览" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:157 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:183 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:168 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:194 msgid "执行" msgstr "执行" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:177 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:669 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:681 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:188 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:680 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:692 msgid "继续" msgstr "继续" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:218 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:229 msgid "查看参数" msgstr "查看参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:219 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:230 msgid "修改参数" msgstr "修改参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:372 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:383 msgid "任务开始执行" msgstr "任务开始执行" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:400 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:411 msgid "任务暂停成功" msgstr "任务暂停成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:429 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:440 msgid "任务继续成功" msgstr "任务继续成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:448 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:459 msgid "任务撤销成功" msgstr "任务撤销成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:471 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:494 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:482 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:505 msgid "跳过成功" msgstr "跳过成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:516 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:527 msgid "继续成功" msgstr "继续成功" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:637 -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:663 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:648 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:674 msgid "跳过" msgstr "跳过" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:638 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:649 msgid "流程模板中该标准插件节点未配置失败处理方式,不可操作" msgstr "流程模板中该标准插件节点未配置失败处理方式,不可操作" -#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:657 +#: pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue:668 msgid "修改时间" msgstr "修改时间" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:49 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:60 msgid "查看标准插件参数" msgstr "查看标准插件参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:75 +#: pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue:86 msgid "请点击标准插件节点查看参数" msgstr "请点击标准插件节点查看参数" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:26 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:37 msgid "是否撤销该任务?" msgstr "是否撤销该任务?" -#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:27 +#: pipeline/blueflow/src/pages/task/TaskExecute/revokeDialog.vue:38 msgid "任务撤销" msgstr "任务撤销" -#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:48 +#: pipeline/blueflow/src/pages/task/TaskList/TaskCloneDialog.vue:59 msgid "任务克隆" msgstr "任务克隆" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:214 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 msgid "全部" msgstr "全部" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:215 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:226 msgid "请输入ID或任务名称" msgstr "请输入ID或任务名称" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:225 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:289 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:300 msgid "克隆" msgstr "克隆" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:241 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:252 msgid "创建方式" msgstr "创建方式" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:242 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:253 msgid "应用内" msgstr "应用内" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:244 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:255 msgid "请选择创建方式" msgstr "请选择创建方式" -#: pipeline/blueflow/src/pages/task/TaskList/index.vue:258 +#: pipeline/blueflow/src/pages/task/TaskList/index.vue:269 msgid "未完成" msgstr "未完成" -#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:138 -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:552 +#: pipeline/blueflow/src/pages/task/TaskParamEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:563 msgid "输入值不满足正则校验" msgstr "输入值不满足正则校验" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:218 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:55 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:229 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:66 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:84 msgid "基础信息" msgstr "基础信息" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:220 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 msgid "节点名称" msgstr "节点名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:42 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 msgid "步骤名称" msgstr "步骤名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:222 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:233 msgid "自动忽略" msgstr "自动忽略" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:223 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 msgid "是否可选" msgstr "是否可选" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:227 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 msgid "引用" msgstr "引用" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:230 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:241 msgid "不能为空" msgstr "不能为空" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:231 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:242 msgid "版本更新" msgstr "版本更新" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:232 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:243 msgid "手动跳过" msgstr "手动跳过" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:234 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:245 msgid "失败处理" msgstr "失败处理" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:235 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:246 msgid "说明:" msgstr "说明:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:236 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:247 msgid "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" msgstr "自动忽略:标准插件节点如果执行失败,会自动忽略错误并把节点状态设置为成功。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:237 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:248 msgid "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" msgstr "手动重试:标准插件节点如果执行失败,可以人工干预,填写参数后重试节点。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:238 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:249 msgid "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" msgstr "手动跳过:标准插件节点如果执行失败,可以人工干预,直接跳过节点的执行。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:239 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:250 msgid "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" msgstr "未选择失败处理方式,标准插件节点如果执行失败,会导致任务中断后不可继续" -#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1021 +#: pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue:1032 msgid "变量KEY已存在" msgstr "变量KEY已存在" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:85 msgid "复用变量" msgstr "复用变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:75 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:86 msgid "新建变量" msgstr "新建变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:76 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:87 msgid "变量名称" msgstr "变量名称" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:77 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:88 msgid "变量KEY" msgstr "变量KEY" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:106 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:117 msgid "变量KEY已存在,请创建新变量" msgstr "变量KEY已存在,请创建新变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateEdit/ReuseVarDialog.vue:119 msgid "是否复用变量" msgstr "是否复用变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:143 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:72 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:126 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:25 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:83 +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:36 msgid "全局变量" msgstr "全局变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 msgid "属性" msgstr "属性" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 msgid "输入" msgstr "输入" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 msgid "输出" msgstr "输出" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:160 msgid "属性:" msgstr "属性:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:161 msgid "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" msgstr "\"来源/是否显示\"格式,来源是输入类型表示变量来自用户添加的变量或者标准插件/子流程节点输入参数引用的变量,来源是输出类型表示变量来自标准插件/子流程节点输出参数引用的变量;是否显示表示该变量在新建任务填写参数时是否展示给用户,输出类型的变量一定是隐藏的。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:162 msgid "输出:" msgstr "输出:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:163 msgid "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" msgstr "表示该变量会作为该流程模板的输出参数,在被其他流程模板当做子流程节点时可以引用。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:164 msgid "无数据,请手动新增变量或者勾选标准插件参数自动生成" msgstr "无数据,请手动新增变量或者勾选标准插件参数自动生成" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:165 msgid "删除变量" msgstr "删除变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:166 msgid "确认删除该变量?" msgstr "确认删除该变量?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:167 msgid "已复制" msgstr "已复制" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:168 msgid "复制" msgstr "复制" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:158 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:185 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:169 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:173 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:196 msgid "显示" msgstr "显示" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:159 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:163 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue:170 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:174 msgid "隐藏" msgstr "隐藏" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:92 -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:74 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue:85 msgid "本地缓存" msgstr "本地缓存" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:106 msgid "替换" msgstr "替换" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 msgid "保存时间" msgstr "保存时间" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:109 msgid "无数据,请手动添加缓存或等待自动保存" msgstr "无数据,请手动添加缓存或等待自动保存" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:99 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:110 msgid "替换模板" msgstr "替换模板" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:100 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:111 msgid "是否替换模板?" msgstr "是否替换模板?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:103 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:114 msgid "简述:" msgstr "简述:" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:104 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:115 msgid "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" msgstr "本地缓存可以用于记录当前流程所有信息,包括流程的节点编排、全局变量、名称、基础属性等信息。本地缓存支持每个流程最多保存50个最近记录,该数据存储至本地浏览器中,每个用户只能查看和编辑自己的本地缓存。" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:107 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue:118 msgid "重置模板" msgstr "重置模板" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:57 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:68 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:18 msgid "通知方式" msgstr "通知方式" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:69 msgid "超时时间(分钟)" msgstr "超时时间(分钟)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:59 -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:44 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabTemplateConfig.vue:70 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:55 msgid "通知分组" msgstr "通知分组" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:144 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 msgid "普通变量" msgstr "普通变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 msgid "输入框" msgstr "输入框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:158 msgid "文本框" msgstr "文本框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:159 msgid "日期时间" msgstr "日期时间" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:160 msgid "整数" msgstr "整数" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:161 msgid "IP选择器(简单版)" msgstr "IP选择器(简单版)" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:151 -#: pipeline_plugins/variables/static/variables/password.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:162 +#: pipeline_plugins/variables/static/variables/password.js:18 msgid "密码" msgstr "密码" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:166 msgid "元变量" msgstr "元变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:157 -#: pipeline_plugins/variables/static/variables/select.js:44 -#: pipeline_plugins/variables/static/variables/select_meta.js:7 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:168 +#: pipeline_plugins/variables/static/variables/select.js:55 +#: pipeline_plugins/variables/static/variables/select_meta.js:18 msgid "下拉框" msgstr "下拉框" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:179 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:190 msgid "说明" msgstr "说明" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:180 -#: pipeline_plugins/variables/static/variables/select_meta.js:58 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:191 +#: pipeline_plugins/variables/static/variables/select_meta.js:69 msgid "默认值" msgstr "默认值" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:181 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:192 msgid "配置" msgstr "配置" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:182 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:193 msgid "编辑表格" msgstr "编辑表格" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:183 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:194 msgid "正则校验" msgstr "正则校验" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:184 -#: pipeline_plugins/variables/static/variables/select_meta.js:43 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:195 +#: pipeline_plugins/variables/static/variables/select_meta.js:54 msgid "类型" msgstr "类型" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:260 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue:271 msgid "组件" msgstr "组件" -#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:35 +#: pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEditDialog.vue:46 msgid "编辑变量" msgstr "编辑变量" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:89 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:100 msgid "流程编辑" msgstr "流程编辑" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:90 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:101 msgid "离开页面" msgstr "离开页面" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:91 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:102 msgid "系统不会保存您所做的更改,确认离开?" msgstr "系统不会保存您所做的更改,确认离开?" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:93 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:104 msgid "任务节点参数错误,请点击错误节点查看详情" msgstr "任务节点参数错误,请点击错误节点查看详情" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:94 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:105 msgid "删除本地缓存成功" msgstr "删除本地缓存成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:95 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:106 msgid "该本地缓存不存在,删除失败" msgstr "该本地缓存不存在,删除失败" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:96 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:107 msgid "替换流程成功" msgstr "替换流程成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:97 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:108 msgid "新增流程本地缓存成功" msgstr "新增流程本地缓存成功" -#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:98 +#: pipeline/blueflow/src/pages/template/TemplateEdit/index.vue:109 msgid "替换流程自动保存" msgstr "替换流程自动保存" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:70 -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:290 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:81 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:301 msgid "权限管理" msgstr "权限管理" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:71 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:82 msgid "新建任务权限" msgstr "新建任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:72 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:83 msgid "认领任务权限" msgstr "认领任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:73 +#: pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue:84 msgid "执行任务权限" msgstr "执行任务权限" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:108 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:119 msgid "导出流程" msgstr "导出流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:109 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:120 msgid "选择流程" msgstr "选择流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:111 +#: pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue:122 msgid "请选择需要导出的流程" msgstr "请选择需要导出的流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:136 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 msgid "上传文件" msgstr "上传文件" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:138 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 msgid "重新上传" msgstr "重新上传" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:139 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 msgid "导入流程" msgstr "导入流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:140 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 msgid "导入列表" msgstr "导入列表" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:143 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 msgid "是否覆盖" msgstr "是否覆盖" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:146 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 msgid "上传了" msgstr "上传了" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:147 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 msgid "条流程" msgstr "条流程" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:148 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:159 msgid "只显示冲突项" msgstr "只显示冲突项" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:149 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 msgid "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" msgstr "导入的流程会沿用文件中的流程ID,当前业务下具有相同ID的流程将会被覆盖(若任一具有相同ID的流程不在当前业务下,则无法进行覆盖操作)" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:150 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:161 msgid "导入的流程会使用新的流程ID,不会对现有的流程造成影响" msgstr "导入的流程会使用新的流程ID,不会对现有的流程造成影响" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:151 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:162 msgid "模板文件上传为空" msgstr "模板文件上传为空" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:152 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:163 msgid "模板上传内容不合法,请重新选择文件" msgstr "模板上传内容不合法,请重新选择文件" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:153 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:164 msgid "该文件后缀不为.dat" msgstr "该文件后缀不为.dat" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:154 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:165 msgid "其中" msgstr "其中" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:155 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:166 msgid "保留ID,并提交" msgstr "保留ID,并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:156 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:167 msgid "使用新ID, 并提交" msgstr "使用新ID, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:157 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:168 msgid "覆盖冲突项, 并提交" msgstr "覆盖冲突项, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:158 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:169 msgid "保留两者, 并提交" msgstr "保留两者, 并提交" -#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:160 +#: pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue:171 msgid "条流程与系统已有流程存在冲突" msgstr "条流程与系统已有流程存在冲突" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:284 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 msgid "子流程更新" msgstr "子流程更新" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:294 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:305 msgid "导入 V1 模板" msgstr "导入 V1 模板" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:295 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:306 msgid "导出" msgstr "导出" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:296 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 msgid "导入" msgstr "导入" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:304 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:315 msgid "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" msgstr "无数据,若您不是运维人员,请尝试联系运维人员为您添加模板权限" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:307 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:318 msgid "请选择子流程更新" msgstr "请选择子流程更新" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:309 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:320 msgid "来源" msgstr "来源" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:310 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:321 msgid "请选择来源" msgstr "请选择来源" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:316 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:327 msgid "搜索流程名称" msgstr "搜索流程名称" -#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:347 +#: pipeline/blueflow/src/pages/template/TemplateList/index.vue:358 msgid "无子流程" msgstr "无子流程" -#: pipeline/blueflow/src/utils/draft.js:5 +#: pipeline/blueflow/src/utils/draft.js:16 msgid "自动保存" msgstr "自动保存" -#: pipeline/blueflow/src/utils/errorHandler.js:13 +#: pipeline/blueflow/src/utils/errorHandler.js:24 msgid "当前访问的页面不存在" msgstr "当前访问的页面不存在" -#: pipeline/blueflow/src/utils/errorHandler.js:18 +#: pipeline/blueflow/src/utils/errorHandler.js:29 msgid "sorry,您没有访问权限!" msgstr "sorry,您没有访问权限!" -#: pipeline/blueflow/src/utils/errorHandler.js:23 -#: pipeline/blueflow/src/utils/errorHandler.js:28 +#: pipeline/blueflow/src/utils/errorHandler.js:34 +#: pipeline/blueflow/src/utils/errorHandler.js:39 msgid "Sorry,您的权限不足!" msgstr "Sorry,您的权限不足!" -#: pipeline/blueflow/src/utils/tools.js:122 +#: pipeline/blueflow/src/utils/tools.js:133 msgid " 秒" msgstr " 秒" -#: pipeline/blueflow/src/utils/tools.js:124 +#: pipeline/blueflow/src/utils/tools.js:135 msgid " 分" msgstr " 分" -#: pipeline/blueflow/src/utils/tools.js:126 +#: pipeline/blueflow/src/utils/tools.js:137 msgid " 小时" msgstr " 小时" -#: pipeline/blueflow/src/utils/tools.js:128 +#: pipeline/blueflow/src/utils/tools.js:139 msgid " 天" msgstr " 天" -#: pipeline/blueflow/src/utils/validatePipeline.js:86 +#: pipeline/blueflow/src/utils/validatePipeline.js:97 msgid "只能添加输入连线" msgstr "只能添加输入连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:92 +#: pipeline/blueflow/src/utils/validatePipeline.js:103 msgid "只能添加输出连线" msgstr "只能添加输出连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:98 +#: pipeline/blueflow/src/utils/validatePipeline.js:109 msgid "不能连接" msgstr "不能连接" -#: pipeline/blueflow/src/utils/validatePipeline.js:118 +#: pipeline/blueflow/src/utils/validatePipeline.js:129 msgid "相同节点不能回连" msgstr "相同节点不能回连" -#: pipeline/blueflow/src/utils/validatePipeline.js:123 +#: pipeline/blueflow/src/utils/validatePipeline.js:134 msgid "重复添加连线" msgstr "重复添加连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:126 +#: pipeline/blueflow/src/utils/validatePipeline.js:137 msgid "已达到" msgstr "已达到" -#: pipeline/blueflow/src/utils/validatePipeline.js:128 +#: pipeline/blueflow/src/utils/validatePipeline.js:139 msgid "最大输出连线条数" msgstr "最大输出连线条数" -#: pipeline/blueflow/src/utils/validatePipeline.js:133 +#: pipeline/blueflow/src/utils/validatePipeline.js:144 msgid "最大输入连线条数" msgstr "最大输入连线条数" -#: pipeline/blueflow/src/utils/validatePipeline.js:145 +#: pipeline/blueflow/src/utils/validatePipeline.js:156 msgid "在模板中只能添加一个" msgstr "在模板中只能添加一个" -#: pipeline/blueflow/src/utils/validatePipeline.js:184 +#: pipeline/blueflow/src/utils/validatePipeline.js:195 msgid "至少需要" msgstr "至少需要" -#: pipeline/blueflow/src/utils/validatePipeline.js:186 +#: pipeline/blueflow/src/utils/validatePipeline.js:197 msgid "条输入连线" msgstr "条输入连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:191 +#: pipeline/blueflow/src/utils/validatePipeline.js:202 msgid "条输出连线" msgstr "条输出连线" -#: pipeline/blueflow/src/utils/validatePipeline.js:203 +#: pipeline/blueflow/src/utils/validatePipeline.js:214 msgid "请添加任务节点" msgstr "请添加任务节点" -#: pipeline/blueflow/src/utils/validatePipeline.js:208 +#: pipeline/blueflow/src/utils/validatePipeline.js:219 msgid "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" msgstr "并行网关、分支网关个数和汇聚网关个数必须一致,并且必须配对使用" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:18 msgid "请求方式" msgstr "请求方式" -#: pipeline_plugins/components/static/components/atoms/bk/http.js:52 +#: pipeline_plugins/components/static/components/atoms/bk/http.js:63 msgid "请输入正确的 URL" msgstr "请输入正确的 URL" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:10 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:10 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:21 msgid "微信" msgstr "微信" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:9 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:11 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:22 msgid "邮件" msgstr "邮件" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:12 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:12 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:23 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:23 msgid "短信" msgstr "短信" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:25 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:36 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:36 msgid "请至少选择一种通知方式" msgstr "请至少选择一种通知方式" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:36 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:218 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:236 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:46 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:57 msgid "运维人员" msgstr "运维人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:202 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:237 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:47 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:58 msgid "产品人员" msgstr "产品人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:42 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:203 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:220 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:48 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:53 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:59 msgid "开发人员" msgstr "开发人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:204 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:221 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:49 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:54 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:60 msgid "测试人员" msgstr "测试人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:56 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:67 msgid "请至少选择一个通知分组" msgstr "请至少选择一个通知分组" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:49 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:214 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:231 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:249 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:71 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:71 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:79 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:82 msgid "附加人员" msgstr "附加人员" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:69 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:80 msgid "多个用 , 分隔" msgstr "多个用 , 分隔" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:61 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:102 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:102 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:88 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:113 msgid "通知主题" msgstr "通知主题" -#: pipeline_plugins/components/static/components/atoms/bk/notify.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:115 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:115 +#: pipeline_plugins/components/static/components/atoms/bk/notify.js:101 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:126 msgid "通知内容" msgstr "通知内容" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:7 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:18 msgid "定时时间" msgstr "定时时间" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:8 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:19 msgid "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" msgstr "秒(s) 或 时间(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/bk/timer.js:16 +#: pipeline_plugins/components/static/components/atoms/bk/timer.js:27 msgid "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" msgstr "请填写秒(s)且不超过8位数或时间(%Y-%m-%d %H:%M:%S)" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:18 msgid "脚本来源" msgstr "脚本来源" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:10 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:21 msgid "手工录入" msgstr "手工录入" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:22 msgid "业务脚本" msgstr "业务脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:12 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:23 msgid "公共脚本" msgstr "公共脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:46 msgid "脚本类型" msgstr "脚本类型" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:59 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:63 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:70 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:74 msgid "请选择脚本类型" msgstr "请选择脚本类型" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:89 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:28 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:100 msgid "脚本内容" msgstr "脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:102 msgid "填写执行脚本内容" msgstr "填写执行脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:106 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:110 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:117 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:121 msgid "请输入脚本内容" msgstr "请输入脚本内容" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:136 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:187 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:147 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:198 msgid "脚本列表" msgstr "脚本列表" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:157 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:161 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:208 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:212 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:168 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:172 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:219 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:223 msgid "请选择脚本" msgstr "请选择脚本" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:238 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:57 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:42 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:249 msgid "脚本参数" msgstr "脚本参数" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:239 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:184 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:201 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:219 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:43 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:250 msgid "可为空" msgstr "可为空" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:247 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:51 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:258 msgid "超时时间" msgstr "超时时间" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:248 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:52 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:259 msgid "单位为秒,为空时使用 JOB 默认值" msgstr "单位为秒,为空时使用 JOB 默认值" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:260 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:64 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:271 msgid "请输入数字" msgstr "请输入数字" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:272 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:67 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:37 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:76 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:37 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:283 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:78 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:48 msgid "目标IP" msgstr "目标IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:273 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:77 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:116 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:156 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:173 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:66 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:66 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:284 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:79 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:77 msgid "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP必须填写【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:286 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:81 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:90 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:46 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:297 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:92 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:57 msgid "目标账户" msgstr "目标账户" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:287 -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:82 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:47 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_fast_execute_script.js:91 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:47 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_execute_script.js:298 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:93 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:58 msgid "请输入在蓝鲸作业平台上注册的账户名" msgstr "请输入在蓝鲸作业平台上注册的账户名" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:18 msgid "源文件" msgstr "源文件" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:65 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:49 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:68 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:74 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:92 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:98 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:115 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:155 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:172 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:65 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:65 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:26 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:76 msgid "IP" msgstr "IP" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:29 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:40 msgid "文件路径" msgstr "文件路径" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:30 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:41 msgid "多个请用换行分隔" msgstr "多个请用换行分隔" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:73 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:55 msgid "执行账户" msgstr "执行账户" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:95 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:55 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:55 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:106 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:66 msgid "目标路径" msgstr "目标路径" -#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:96 -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:56 +#: pipeline_plugins/components/static/components/atoms/job/job_fast_push_file.js:107 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:67 msgid "请输入绝对路径" msgstr "请输入绝对路径" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:7 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:18 msgid "本地文件" msgstr "本地文件" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:11 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:11 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:22 msgid "文件名不能包含中文和特殊字符且大小不能超过500M" msgstr "文件名不能包含中文和特殊字符且大小不能超过500M" -#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_push_local_files.js:38 +#: pipeline_plugins/components/static/components/atoms/job/job_push_local_files.js:49 msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CMDB)的该业务中是唯一的" -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:7 -msgid "云区域ID" -msgstr "云区域ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:30 -msgid "proxy内网IP" -msgstr "proxy内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:32 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:41 -msgid "可为空,为空时使用Agent安装APP中业务默认值" -msgstr "可为空,为空时使用Agent安装APP中业务默认值" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:39 -msgid "proxy外网IP" -msgstr "proxy外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:48 -msgid "目标主机操作系统" -msgstr "目标主机操作系统" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:32 -msgid "linux" -msgstr "linux" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:51 -msgid "windows" -msgstr "windows" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:66 -msgid "目标主机认证方式" -msgstr "目标主机认证方式" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:68 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:49 -msgid "密码认证" -msgstr "密码认证" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:69 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:50 -msgid "密钥认证" -msgstr "密钥认证" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:84 -msgid "目标主机详情" -msgstr "目标主机详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:94 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:50 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:215 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:232 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:250 -msgid "多个用,分隔" -msgstr "多个用,分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:107 -msgid "ssh账号" -msgstr "ssh账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:120 -msgid "ssh端口" -msgstr "ssh端口" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:133 -msgid "ssh密码" -msgstr "ssh密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:134 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:122 -msgid "密码认证,则必填" -msgstr "密码认证,则必填" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:142 -msgid "ssh密钥" -msgstr "ssh密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_install.js:143 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:147 -msgid "密钥认证,则必填" -msgstr "密钥认证,则必填" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/agent/agent_uninstall.js:31 -msgid "多个用,或换行符分隔" -msgstr "多个用,或换行符分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:27 -msgid "通知人" -msgstr "通知人" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/cmsi/cmsi_send_message.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:205 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:222 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:240 -msgid "合作商" -msgstr "合作商" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:7 -msgid "游戏ID" -msgstr "游戏ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:20 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:20 -msgid "Region" -msgstr "Region" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:23 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:23 -msgid "上海" -msgstr "上海" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:24 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:24 -msgid "香港" -msgstr "香港" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:25 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:25 -msgid "新加坡" -msgstr "新加坡" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:39 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:38 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:38 -msgid "访问账号" -msgstr "访问账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:52 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:51 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:51 -msgid "访问密码" -msgstr "访问密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:65 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_pre_publish.js:64 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_publish.js:64 -msgid "大区ID" -msgstr "大区ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:77 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:78 -msgid "区服ID(列表)" -msgstr "区服ID(列表)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:79 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:80 -msgid "整形,多个,或换行符分隔" -msgstr "整形,多个,或换行符分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:91 -msgid "服务态" -msgstr "服务态" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:93 -msgid "自动" -msgstr "自动" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:94 -msgid "繁忙" -msgstr "繁忙" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:95 -msgid "拥挤" -msgstr "拥挤" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:96 -msgid "良好" -msgstr "良好" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_flag.js:97 -msgid "维护" -msgstr "维护" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:93 -msgid "区服标注" -msgstr "区服标注" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:96 -msgid "热" -msgstr "热" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:97 -msgid "荐" -msgstr "荐" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:98 -msgid "新" -msgstr "新" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:99 -msgid "限" -msgstr "限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcloud/gcloud_batch_update_node_tag.js:100 -msgid "体验服" -msgstr "体验服" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:7 -msgid "GCS业务名称" -msgstr "GCS业务名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:8 -msgid "为空则使用在配置平台(CC)的业务名" -msgstr "为空则使用在配置平台(CC)的业务名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:16 -msgid "DB类型" -msgstr "DB类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:180 -msgid "应用类型" -msgstr "应用类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:54 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:40 -msgid "备份选项" -msgstr "备份选项" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:73 -msgid "字符集" -msgstr "字符集" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:95 -msgid "是否强制执行" -msgstr "是否强制执行" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:113 -msgid "IP列表" -msgstr "IP列表" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:114 -msgid "IP列表,多个以逗号分隔" -msgstr "IP列表,多个以逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:127 -msgid "变更详情" -msgstr "变更详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:135 -msgid "SQL文件" -msgstr "SQL文件" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:148 -msgid "变更DB名" -msgstr "变更DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:161 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:100 -msgid "忽略DB名" -msgstr "忽略DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:183 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:200 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:218 -msgid "变更描述" -msgstr "变更描述" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:192 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_alter_bill.js:199 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:209 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:216 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:227 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:234 -msgid "关注人" -msgstr "关注人" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:16 -msgid "备份类型配置" -msgstr "备份类型配置" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:23 -msgid "备份类型" -msgstr "备份类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:83 -msgid "备份详情" -msgstr "备份详情" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:92 -msgid "备份DB名" -msgstr "备份DB名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:108 -msgid "表名称" -msgstr "表名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:148 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:48 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:172 -msgid "目标参数" -msgstr "目标参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:166 -msgid "IP/服ID" -msgstr "IP/服ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_backup.js:167 -msgid "IP/服ID列表,多个以逗号分隔" -msgstr "IP/服ID列表,多个以逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_execute_bill.js:7 -msgid "单据ID" -msgstr "单据ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:158 -msgid "访问发起IP" -msgstr "访问发起IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:35 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:159 -msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" -msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:66 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:190 -msgid "目标域名/服ID" -msgstr "目标域名/服ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:67 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:191 -msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" -msgstr "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:80 -msgid "DB名称" -msgstr "DB名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_mysql_privileges.js:81 -msgid "支持通配符,多个请用 , 分隔" -msgstr "支持通配符,多个请用 , 分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:16 -msgid "回收类型配置" -msgstr "回收类型配置" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:23 -msgid "回收类型" -msgstr "回收类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:25 -msgid "账号清理" -msgstr "账号清理" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:26 -msgid "权限清理" -msgstr "权限清理" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:40 -msgid "回收DB名称" -msgstr "回收DB名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:76 -msgid "权限清理时必填,支持通配符,多个请用 , 分隔" -msgstr "权限清理时必填,支持通配符,多个请用 , 分隔" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:75 -msgid "回收表名" -msgstr "回收表名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:110 -msgid "回收权限" -msgstr "回收权限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:204 -msgid "用户名" -msgstr "用户名" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/gcs/gcs_privileges_revoke.js:205 -msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" -msgstr "若填写 all,可以实现清理发起访问IP的所有账号权限" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:7 -msgid "作业模板" -msgstr "作业模板" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:25 -msgid "步骤参数" -msgstr "步骤参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:28 -msgid "没选中作业模板或当前作业模板脚本步骤为空" -msgstr "没选中作业模板或当前作业模板脚本步骤为空" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:34 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:136 -msgid "ID" -msgstr "ID" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:49 -msgid "步骤类型" -msgstr "步骤类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:110 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:74 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:141 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:209 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:236 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:275 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:302 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:224 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:166 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:217 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:224 -msgid "请求后台接口异常:" -msgstr "请求后台接口异常:" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:130 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:27 -msgid "没选中作业模板或当前作业模板全局变量为空" -msgstr "没选中作业模板或当前作业模板全局变量为空" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:144 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:33 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:33 -msgid "参数名称" -msgstr "参数名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/job/job_execute_task.js:151 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:40 -msgid "参数类型" -msgstr "参数类型" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:7 -msgid "屏蔽开始时间" -msgstr "屏蔽开始时间" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:15 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:40 -msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" -msgstr "请填写时间格式(%Y-%m-%d %H:%M:%S)" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:32 -msgid "屏蔽结束时间" -msgstr "屏蔽结束时间" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:57 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:184 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:316 -msgid "集群名称" -msgstr "集群名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/monitor/monitor_add_shield.js:76 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:250 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:351 -msgid "模块名称" -msgstr "模块名称" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:30 -msgid "主机操作系统" -msgstr "主机操作系统" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:47 -msgid "主机认证方式" -msgstr "主机认证方式" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:65 -msgid "内网IP" -msgstr "内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:66 -msgid "请输入内网IP" -msgstr "请输入内网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:79 -msgid "外网IP" -msgstr "外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:80 -msgid "请输入外网IP" -msgstr "请输入外网IP" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:93 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:94 -msgid "SSH账号" -msgstr "SSH账号" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:107 -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:108 -msgid "SSH端口" -msgstr "SSH端口" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:121 -msgid "SSH密码" -msgstr "SSH密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:133 -msgid "请输入密码" -msgstr "请输入密码" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:146 -msgid "SSH密钥" -msgstr "SSH密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/proxy/proxy_install.js:160 -msgid "请输入密钥" -msgstr "请输入密钥" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:7 -msgid "TCM业务" -msgstr "TCM业务" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:29 -msgid "模板" -msgstr "模板" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:85 -msgid "参数" -msgstr "参数" - -#: pipeline_plugins/components/static/components/atoms/sites/clouds/tcm/tcm_execute_task.js:93 -msgid "步骤ID" -msgstr "步骤ID" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:12 -msgid "语音" -msgstr "语音" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:72 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:72 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:83 msgid "填写用户名,多个用户名用 , 分隔" msgstr "填写用户名,多个用户名用 , 分隔" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/bk/notify.js:87 -#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:87 +#: pipeline_plugins/components/static/components/atoms/sites/open/bk/notify.js:98 msgid "通知分组与附加人员不可同时为空" msgstr "通知分组与附加人员不可同时为空" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_batch_delete_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_empty_set_hosts.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:18 msgid "集群" msgstr "集群" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:18 msgid "父实例" msgstr "父实例" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_create_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_create_set.js:37 msgid "集群信息" msgstr "集群信息" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:18 msgid "主机详情" msgstr "主机详情" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:19 msgid "请至少添加一条数据" msgstr "请至少添加一条数据" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:16 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:16 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:27 msgid "故障机IP" msgstr "故障机IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_replace_fault_machine.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_replace_fault_machine.js:40 msgid "替换机IP" msgstr "替换机IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:18 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:18 msgid "主机内网IP" msgstr "主机内网IP" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:8 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:8 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_to_idle.js:19 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:19 msgid "请输入主机内网IP,多个用换行符分隔" msgstr "请输入主机内网IP,多个用换行符分隔" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:7 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:7 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:32 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:18 msgid "模块" msgstr "模块" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:40 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:51 msgid "转移方式" msgstr "转移方式" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:43 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:43 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:54 msgid "覆盖" msgstr "覆盖" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_transfer_host_module.js:44 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:44 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_transfer_host_module.js:55 msgid "追加" msgstr "追加" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:21 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:21 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:32 msgid "主机属性" msgstr "主机属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:22 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:22 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:33 msgid "请选择需要更新的主机属性" msgstr "请选择需要更新的主机属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:40 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:45 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:45 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:51 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:56 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:56 msgid "属性值" msgstr "属性值" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:41 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:46 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:46 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_host.js:52 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:57 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:57 msgid "请输入更新后的属性值" msgstr "请输入更新后的属性值" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:37 msgid "模块属性" msgstr "模块属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_module.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_module.js:38 msgid "请选择需要更新的模块属性" msgstr "请选择需要更新的模块属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:37 msgid "集群属性" msgstr "集群属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set.js:27 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:27 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set.js:38 msgid "请选择需要更新的集群属性" msgstr "请选择需要更新的集群属性" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:26 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:26 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:37 msgid "服务状态" msgstr "服务状态" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:29 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:29 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:40 msgid "开放" msgstr "开放" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/cc/cc_update_set_service_status.js:30 -#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:30 +#: pipeline_plugins/components/static/components/atoms/sites/open/cc/cc_update_set_service_status.js:41 msgid "关闭" msgstr "关闭" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/clb/scan_certificate.js:7 -msgid "扫描域名" -msgstr "扫描域名" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/job/job_execute_task.js:56 -#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:56 -msgid "描述" -msgstr "描述" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:7 -msgid "群聊名称" -msgstr "群聊名称" - -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:20 -msgid "群聊成员" -msgstr "群聊成员" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:18 +msgid "作业模板" +msgstr "作业模板" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:22 -msgid "企业微信群成员,多个以逗号分隔" -msgstr "企业微信群成员,多个以逗号分隔" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:38 +msgid "没选中作业模板或当前作业模板全局变量为空" +msgstr "没选中作业模板或当前作业模板全局变量为空" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/qyweixin/create_appchat.js:34 -msgid "推送消息" -msgstr "推送消息" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:44 +msgid "参数名称" +msgstr "参数名称" -#: pipeline_plugins/components/static/components/atoms/sites/ieod/tof/get_staff_leader.js:7 -msgid "员工英文名" -msgstr "员工英文名" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:51 +msgid "参数类型" +msgstr "参数类型" -#: pipeline_plugins/components/static/components/atoms/test/test.js:7 -#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:7 -msgid "选择服务器" -msgstr "选择服务器" +#: pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js:67 +msgid "描述" +msgstr "描述" -#: pipeline_plugins/variables/static/variables/select.js:19 -#: pipeline_plugins/variables/static/variables/select.js:23 +#: pipeline_plugins/variables/static/variables/select.js:30 +#: pipeline_plugins/variables/static/variables/select.js:34 msgid "非法下拉框数据源,请检查您的配置" msgstr "非法下拉框数据源,请检查您的配置" -#: pipeline_plugins/variables/static/variables/select_meta.js:14 +#: pipeline_plugins/variables/static/variables/select_meta.js:25 msgid "数据源" msgstr "数据源" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "自定义" msgstr "自定义" -#: pipeline_plugins/variables/static/variables/select_meta.js:16 +#: pipeline_plugins/variables/static/variables/select_meta.js:27 msgid "远程数据源" msgstr "远程数据源" -#: pipeline_plugins/variables/static/variables/select_meta.js:29 +#: pipeline_plugins/variables/static/variables/select_meta.js:40 msgid "选项" msgstr "选项" -#: pipeline_plugins/variables/static/variables/select_meta.js:31 +#: pipeline_plugins/variables/static/variables/select_meta.js:42 msgid "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" msgstr "请输入数据源信息,自定义数据源格式为 [{\"text\": \"\", \"value\": \"\"}...}],若是远程数据源则填写返回该格式数据的 URL" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "单选" msgstr "单选" -#: pipeline_plugins/variables/static/variables/select_meta.js:45 +#: pipeline_plugins/variables/static/variables/select_meta.js:56 msgid "多选" msgstr "多选" -#: pipeline_plugins/variables/static/variables/select_meta.js:59 +#: pipeline_plugins/variables/static/variables/select_meta.js:70 msgid "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" msgstr "请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:14 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:31 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:31 +#: pipeline_plugins/variables/static/variables/sites/open/var_cmdb_ip_selector.js:18 +msgid "选择服务器" +msgstr "选择服务器" + +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:42 msgid "填参方式" msgstr "填参方式" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:16 -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:33 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:33 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:44 msgid "自定义输入" msgstr "自定义输入" -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:17 -msgid "选择集群和模块自动获取" -msgstr "选择集群和模块自动获取" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:18 -msgid "输入集群名和模块名自动获取" -msgstr "输入集群名和模块名自动获取" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:47 -msgid "值类型" -msgstr "值类型" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:50 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:69 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:75 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:93 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:149 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:166 -msgid "DNS" -msgstr "DNS" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:51 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:70 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:94 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:152 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:169 -msgid "服ID" -msgstr "服ID" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:150 -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:167 -msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" -msgstr "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:153 -msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" -msgstr "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:170 -msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" -msgstr "服ID用于GCS原子自动获取域名,多个请用空格分隔" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:318 -msgid "多个用,分隔,all代表所有集群" -msgstr "多个用,分隔,all代表所有集群" - -#: pipeline_plugins/variables/static/variables/sites/clouds/var_ip_picker.js:353 -msgid "多个用,分隔,all代表所有模块" -msgstr "多个用,分隔,all代表所有模块" - -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:34 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:34 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:45 msgid "通过配置平台拓扑获取" msgstr "通过配置平台拓扑获取" -#: pipeline_plugins/variables/static/variables/sites/ieod/var_ip_picker.js:99 -#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:99 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:110 msgid "拓扑树" msgstr "拓扑树" +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:177 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:228 +#: pipeline_plugins/variables/static/variables/sites/open/var_ip_picker.js:235 +msgid "请求后台接口异常:" +msgstr "请求后台接口异常:" + +#~ msgid "Available %s" +#~ msgstr "Available %s" + +#~ msgid "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." +#~ msgstr "This is the list of available %s. You may choose some by selecting them in the box below and then clicking the \"Choose\" arrow between the two boxes." + +#~ msgid "Type into this box to filter down the list of available %s." +#~ msgstr "Type into this box to filter down the list of available %s." + +#~ msgid "Filter" +#~ msgstr "Filter" + +#~ msgid "Choose all" +#~ msgstr "Choose all" + +#~ msgid "Click to choose all %s at once." +#~ msgstr "Click to choose all %s at once." + +#~ msgid "Choose" +#~ msgstr "Choose" + +#~ msgid "Remove" +#~ msgstr "Remove" + +#~ msgid "Chosen %s" +#~ msgstr "Chosen %s" + +#~ msgid "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." +#~ msgstr "This is the list of chosen %s. You may remove some by selecting them in the box below and then clicking the \"Remove\" arrow between the two boxes." + +#~ msgid "Remove all" +#~ msgstr "Remove all" + +#~ msgid "Click to remove all chosen %s at once." +#~ msgstr "Click to remove all chosen %s at once." + +#~ msgid "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." +#~ msgstr "You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost." + +#~ msgid "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." +#~ msgstr "You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action." + +#~ msgid "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." +#~ msgstr "You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button." + +#~ msgid "Now" +#~ msgstr "Now" + +#~ msgid "Choose a Time" +#~ msgstr "Choose a Time" + +#~ msgid "Choose a time" +#~ msgstr "Choose a time" + +#~ msgid "Midnight" +#~ msgstr "Midnight" + +#~ msgid "6 a.m." +#~ msgstr "6 a.m." + +#~ msgid "Noon" +#~ msgstr "Noon" + +#~ msgid "6 p.m." +#~ msgstr "6 p.m." + +#~ msgid "Cancel" +#~ msgstr "Cancel" + +#~ msgid "Today" +#~ msgstr "Today" + +#~ msgid "Choose a Date" +#~ msgstr "Choose a Date" + +#~ msgid "Yesterday" +#~ msgstr "Yesterday" + +#~ msgid "Tomorrow" +#~ msgstr "Tomorrow" + +#~ msgid "January" +#~ msgstr "January" + +#~ msgid "February" +#~ msgstr "February" + +#~ msgid "March" +#~ msgstr "March" + +#~ msgid "April" +#~ msgstr "April" + +#~ msgid "May" +#~ msgstr "May" + +#~ msgid "June" +#~ msgstr "June" + +#~ msgid "July" +#~ msgstr "July" + +#~ msgid "August" +#~ msgstr "August" + +#~ msgid "September" +#~ msgstr "September" + +#~ msgid "October" +#~ msgstr "October" + +#~ msgid "November" +#~ msgstr "November" + +#~ msgid "December" +#~ msgstr "December" + +#~ msgctxt "one letter Sunday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgctxt "one letter Monday" +#~ msgid "M" +#~ msgstr "M" + +#~ msgctxt "one letter Tuesday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Wednesday" +#~ msgid "W" +#~ msgstr "W" + +#~ msgctxt "one letter Thursday" +#~ msgid "T" +#~ msgstr "T" + +#~ msgctxt "one letter Friday" +#~ msgid "F" +#~ msgstr "F" + +#~ msgctxt "one letter Saturday" +#~ msgid "S" +#~ msgstr "S" + +#~ msgid "Show" +#~ msgstr "Show" + +#~ msgid "Hide" +#~ msgstr "Hide" + +#~ msgid "'" +#~ msgstr "'" + +#~ msgid "云区域ID" +#~ msgstr "云区域ID" + +#~ msgid "proxy内网IP" +#~ msgstr "proxy内网IP" + +#~ msgid "可为空,为空时使用Agent安装APP中业务默认值" +#~ msgstr "可为空,为空时使用Agent安装APP中业务默认值" + +#~ msgid "proxy外网IP" +#~ msgstr "proxy外网IP" + +#~ msgid "目标主机操作系统" +#~ msgstr "目标主机操作系统" + +#~ msgid "linux" +#~ msgstr "linux" + +#~ msgid "windows" +#~ msgstr "windows" + +#~ msgid "目标主机认证方式" +#~ msgstr "目标主机认证方式" + +#~ msgid "密码认证" +#~ msgstr "密码认证" + +#~ msgid "密钥认证" +#~ msgstr "密钥认证" + +#~ msgid "目标主机详情" +#~ msgstr "目标主机详情" + +#~ msgid "多个用,分隔" +#~ msgstr "多个用,分隔" + +#~ msgid "ssh账号" +#~ msgstr "ssh账号" + +#~ msgid "ssh端口" +#~ msgstr "ssh端口" + +#~ msgid "ssh密码" +#~ msgstr "ssh密码" + +#~ msgid "密码认证,则必填" +#~ msgstr "密码认证,则必填" + +#~ msgid "ssh密钥" +#~ msgstr "ssh密钥" + +#~ msgid "密钥认证,则必填" +#~ msgstr "密钥认证,则必填" + +#~ msgid "多个用,或换行符分隔" +#~ msgstr "多个用,或换行符分隔" + +#~ msgid "通知人" +#~ msgstr "通知人" + +#~ msgid "合作商" +#~ msgstr "合作商" + +#~ msgid "游戏ID" +#~ msgstr "游戏ID" + +#~ msgid "Region" +#~ msgstr "Region" + +#~ msgid "上海" +#~ msgstr "上海" + +#~ msgid "香港" +#~ msgstr "香港" + +#~ msgid "新加坡" +#~ msgstr "新加坡" + +#~ msgid "访问账号" +#~ msgstr "访问账号" + +#~ msgid "访问密码" +#~ msgstr "访问密码" + +#~ msgid "大区ID" +#~ msgstr "大区ID" + +#~ msgid "区服ID(列表)" +#~ msgstr "区服ID(列表)" + +#~ msgid "整形,多个,或换行符分隔" +#~ msgstr "整形,多个,或换行符分隔" + +#~ msgid "服务态" +#~ msgstr "服务态" + +#~ msgid "自动" +#~ msgstr "自动" + +#~ msgid "繁忙" +#~ msgstr "繁忙" + +#~ msgid "拥挤" +#~ msgstr "拥挤" + +#~ msgid "良好" +#~ msgstr "良好" + +#~ msgid "维护" +#~ msgstr "维护" + +#~ msgid "区服标注" +#~ msgstr "区服标注" + +#~ msgid "热" +#~ msgstr "热" + +#~ msgid "荐" +#~ msgstr "荐" + +#~ msgid "新" +#~ msgstr "新" + +#~ msgid "限" +#~ msgstr "限" + +#~ msgid "体验服" +#~ msgstr "体验服" + +#~ msgid "GCS业务名称" +#~ msgstr "GCS业务名称" + +#~ msgid "为空则使用在配置平台(CC)的业务名" +#~ msgstr "为空则使用在配置平台(CC)的业务名" + +#~ msgid "DB类型" +#~ msgstr "DB类型" + +#~ msgid "应用类型" +#~ msgstr "应用类型" + +#~ msgid "备份选项" +#~ msgstr "备份选项" + +#~ msgid "字符集" +#~ msgstr "字符集" + +#~ msgid "是否强制执行" +#~ msgstr "是否强制执行" + +#~ msgid "IP列表" +#~ msgstr "IP列表" + +#~ msgid "IP列表,多个以逗号分隔" +#~ msgstr "IP列表,多个以逗号分隔" + +#~ msgid "变更详情" +#~ msgstr "变更详情" + +#~ msgid "SQL文件" +#~ msgstr "SQL文件" + +#~ msgid "变更DB名" +#~ msgstr "变更DB名" + +#~ msgid "忽略DB名" +#~ msgstr "忽略DB名" + +#~ msgid "变更描述" +#~ msgstr "变更描述" + +#~ msgid "关注人" +#~ msgstr "关注人" + +#~ msgid "备份类型配置" +#~ msgstr "备份类型配置" + +#~ msgid "备份类型" +#~ msgstr "备份类型" + +#~ msgid "备份详情" +#~ msgstr "备份详情" + +#~ msgid "备份DB名" +#~ msgstr "备份DB名" + +#~ msgid "表名称" +#~ msgstr "表名称" + +#~ msgid "目标参数" +#~ msgstr "目标参数" + +#~ msgid "IP/服ID" +#~ msgstr "IP/服ID" + +#~ msgid "IP/服ID列表,多个以逗号分隔" +#~ msgstr "IP/服ID列表,多个以逗号分隔" + +#~ msgid "单据ID" +#~ msgstr "单据ID" + +#~ msgid "访问发起IP" +#~ msgstr "访问发起IP" + +#~ msgid "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" +#~ msgstr "IP必须填写【集群名称|模块名称|IP】、【云区域ID:IP】或者【IP】格式之一,多个用换行符分隔;【IP】格式需要保证所填写的内网IP在配置平台(CC)的该业务中是唯一的" + +#~ msgid "目标域名/服ID" +#~ msgstr "目标域名/服ID" + +#~ msgid "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" +#~ msgstr "必须填写【IP#端口】格式或者直接填DNS与服ID,多个请用逗号分隔" + +#~ msgid "DB名称" +#~ msgstr "DB名称" + +#~ msgid "支持通配符,多个请用 , 分隔" +#~ msgstr "支持通配符,多个请用 , 分隔" + +#~ msgid "回收类型配置" +#~ msgstr "回收类型配置" + +#~ msgid "回收类型" +#~ msgstr "回收类型" + +#~ msgid "账号清理" +#~ msgstr "账号清理" + +#~ msgid "权限清理" +#~ msgstr "权限清理" + +#~ msgid "回收DB名称" +#~ msgstr "回收DB名称" + +#~ msgid "权限清理时必填,支持通配符,多个请用 , 分隔" +#~ msgstr "权限清理时必填,支持通配符,多个请用 , 分隔" + +#~ msgid "回收表名" +#~ msgstr "回收表名" + +#~ msgid "回收权限" +#~ msgstr "回收权限" + +#~ msgid "用户名" +#~ msgstr "用户名" + +#~ msgid "若填写 all,可以实现清理发起访问IP的所有账号权限" +#~ msgstr "若填写 all,可以实现清理发起访问IP的所有账号权限" + +#~ msgid "步骤参数" +#~ msgstr "步骤参数" + +#~ msgid "没选中作业模板或当前作业模板脚本步骤为空" +#~ msgstr "没选中作业模板或当前作业模板脚本步骤为空" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "步骤类型" +#~ msgstr "步骤类型" + +#~ msgid "屏蔽开始时间" +#~ msgstr "屏蔽开始时间" + +#~ msgid "请填写时间格式(%Y-%m-%d %H:%M:%S)" +#~ msgstr "请填写时间格式(%Y-%m-%d %H:%M:%S)" + +#~ msgid "屏蔽结束时间" +#~ msgstr "屏蔽结束时间" + +#~ msgid "集群名称" +#~ msgstr "集群名称" + +#~ msgid "模块名称" +#~ msgstr "模块名称" + +#~ msgid "主机操作系统" +#~ msgstr "主机操作系统" + +#~ msgid "主机认证方式" +#~ msgstr "主机认证方式" + +#~ msgid "内网IP" +#~ msgstr "内网IP" + +#~ msgid "请输入内网IP" +#~ msgstr "请输入内网IP" + +#~ msgid "外网IP" +#~ msgstr "外网IP" + +#~ msgid "请输入外网IP" +#~ msgstr "请输入外网IP" + +#~ msgid "SSH账号" +#~ msgstr "SSH账号" + +#~ msgid "SSH端口" +#~ msgstr "SSH端口" + +#~ msgid "SSH密码" +#~ msgstr "SSH密码" + +#~ msgid "请输入密码" +#~ msgstr "请输入密码" + +#~ msgid "SSH密钥" +#~ msgstr "SSH密钥" + +#~ msgid "请输入密钥" +#~ msgstr "请输入密钥" + +#~ msgid "TCM业务" +#~ msgstr "TCM业务" + +#~ msgid "模板" +#~ msgstr "模板" + +#~ msgid "参数" +#~ msgstr "参数" + +#~ msgid "步骤ID" +#~ msgstr "步骤ID" + +#~ msgid "语音" +#~ msgstr "语音" + +#~ msgid "扫描域名" +#~ msgstr "扫描域名" + +#~ msgid "群聊名称" +#~ msgstr "群聊名称" + +#~ msgid "群聊成员" +#~ msgstr "群聊成员" + +#~ msgid "企业微信群成员,多个以逗号分隔" +#~ msgstr "企业微信群成员,多个以逗号分隔" + +#~ msgid "推送消息" +#~ msgstr "推送消息" + +#~ msgid "员工英文名" +#~ msgstr "员工英文名" + +#~ msgid "选择集群和模块自动获取" +#~ msgstr "选择集群和模块自动获取" + +#~ msgid "输入集群名和模块名自动获取" +#~ msgstr "输入集群名和模块名自动获取" + +#~ msgid "值类型" +#~ msgstr "值类型" + +#~ msgid "DNS" +#~ msgstr "DNS" + +#~ msgid "服ID" +#~ msgstr "服ID" + +#~ msgid "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" +#~ msgstr "DNS必须填【IP#端口】格式或者直接填DNS,多个请用换行分隔" + +#~ msgid "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" +#~ msgstr "服ID用于GCS标准插件自动获取域名,多个请用空格分隔" + +#~ msgid "服ID用于GCS原子自动获取域名,多个请用空格分隔" +#~ msgstr "服ID用于GCS原子自动获取域名,多个请用空格分隔" + +#~ msgid "多个用,分隔,all代表所有集群" +#~ msgstr "多个用,分隔,all代表所有集群" + +#~ msgid "多个用,分隔,all代表所有模块" +#~ msgstr "多个用,分隔,all代表所有模块" + #~ msgid "模板编辑" #~ msgstr "模板编辑" diff --git a/pipeline/admin.py b/pipeline/admin.py index 11771bb8c3..2161853434 100644 --- a/pipeline/admin.py +++ b/pipeline/admin.py @@ -31,10 +31,3 @@ class PipelineInstanceAdmin(admin.ModelAdmin): list_filter = ['is_started', 'is_finished', 'is_deleted'] search_fields = ['name'] raw_id_fields = ['template', 'snapshot', 'execution_snapshot'] - - -@admin.register(models.VariableModel) -class VariableModelAdmin(admin.ModelAdmin): - list_display = ['id', 'code', 'status'] - list_filter = ['status'] - search_fields = ['code', 'status'] diff --git a/pipeline/blueflow/.eslintrc.js b/pipeline/blueflow/.eslintrc.js deleted file mode 100644 index e91a0b95f3..0000000000 --- a/pipeline/blueflow/.eslintrc.js +++ /dev/null @@ -1,55 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ -module.exports = { - root: true, - parserOptions: { - parser: "babel-eslint", - ecmaVersion: 2017, - sourceType: 'module' - }, - env: { - browser: true, - }, - rules: { - "no-debugger": process.env.NODE_ENV === "production" ? 2 : 0, - "arrow-parens": 0, - "no-empty": "error", - "no-extra-semi": "error", - "semi": ["error", "never"], - "generator-star-spacing": 0, - "no-unused-vars": 0, - "indent": ["error", 4, { - "SwitchCase": 1 - }], - "space-before-function-paren": ["error", { - "anonymous": "always", - "named": "always", - "asyncArrow": "always" - }], - "no-trailing-spaces": ["error", { - "skipBlankLines": true - }], - "comma-dangle": ["error", "never"], - "key-spacing": ["error", { - "beforeColon": false - }], - "keyword-spacing": ["error", { - "before": true, - "after": true - }], - "space-infix-ops": "error", - "spaced-comment": ["error", "always"], - }, - extends: [ - "plugin:vue/essential" - ] -} \ No newline at end of file diff --git a/pipeline/blueflow/src/App.vue b/pipeline/blueflow/src/App.vue deleted file mode 100644 index 9e896fa9ec..0000000000 --- a/pipeline/blueflow/src/App.vue +++ /dev/null @@ -1,121 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue b/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue deleted file mode 100644 index 6d85a81024..0000000000 --- a/pipeline/blueflow/src/components/common/Individualization/IpLogContent.vue +++ /dev/null @@ -1,162 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue b/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue deleted file mode 100644 index 1245a02823..0000000000 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/NodeTemplate.vue +++ /dev/null @@ -1,219 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue b/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue deleted file mode 100644 index ca20c972fe..0000000000 --- a/pipeline/blueflow/src/components/common/PipelineCanvas/index.vue +++ /dev/null @@ -1,685 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue b/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue deleted file mode 100644 index ebc2168137..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/FormGroup.vue +++ /dev/null @@ -1,217 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue b/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue deleted file mode 100644 index 049dbf211e..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/FormItem.vue +++ /dev/null @@ -1,346 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue deleted file mode 100644 index 380ed2cb8c..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/DynamicIp.vue +++ /dev/null @@ -1,200 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue deleted file mode 100644 index b5a45e695f..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/StaticIp.vue +++ /dev/null @@ -1,358 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue b/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue deleted file mode 100644 index ded1db0640..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/IpSelector/index.vue +++ /dev/null @@ -1,215 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue b/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue deleted file mode 100644 index efd776457a..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/RenderForm.vue +++ /dev/null @@ -1,240 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue deleted file mode 100644 index d95c722c4f..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagDatatable.vue +++ /dev/null @@ -1,356 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue deleted file mode 100644 index 1a174577a9..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagIp_selector.vue +++ /dev/null @@ -1,132 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue deleted file mode 100644 index 8863669015..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagPassword.vue +++ /dev/null @@ -1,101 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue deleted file mode 100644 index ba9bdfe935..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagSelect.vue +++ /dev/null @@ -1,229 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue deleted file mode 100644 index b8af4fa0c3..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagTree.vue +++ /dev/null @@ -1,194 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue b/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue deleted file mode 100644 index 7e882b1c38..0000000000 --- a/pipeline/blueflow/src/components/common/RenderForm/tags/TagUpload.vue +++ /dev/null @@ -1,149 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - diff --git a/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue b/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue deleted file mode 100644 index e07ee0c59e..0000000000 --- a/pipeline/blueflow/src/components/common/dataTable/DataTablePagination.vue +++ /dev/null @@ -1,359 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - - diff --git a/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue b/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue deleted file mode 100644 index 91cad98d5a..0000000000 --- a/pipeline/blueflow/src/components/common/modal/ErrorCodeModal.vue +++ /dev/null @@ -1,108 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/components/layout/Navigator.vue b/pipeline/blueflow/src/components/layout/Navigator.vue deleted file mode 100644 index 88fbee234d..0000000000 --- a/pipeline/blueflow/src/components/layout/Navigator.vue +++ /dev/null @@ -1,427 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/appmaker/index.vue b/pipeline/blueflow/src/pages/appmaker/index.vue deleted file mode 100644 index 9e503b6956..0000000000 --- a/pipeline/blueflow/src/pages/appmaker/index.vue +++ /dev/null @@ -1,286 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/audit/index.vue b/pipeline/blueflow/src/pages/audit/index.vue deleted file mode 100644 index 4bd1c69e6a..0000000000 --- a/pipeline/blueflow/src/pages/audit/index.vue +++ /dev/null @@ -1,534 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/functor/index.vue b/pipeline/blueflow/src/pages/functor/index.vue deleted file mode 100644 index 31e64eec73..0000000000 --- a/pipeline/blueflow/src/pages/functor/index.vue +++ /dev/null @@ -1,594 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/home/TaskPercentChart.vue b/pipeline/blueflow/src/pages/home/TaskPercentChart.vue deleted file mode 100644 index 30717705cc..0000000000 --- a/pipeline/blueflow/src/pages/home/TaskPercentChart.vue +++ /dev/null @@ -1,86 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/home/index.vue b/pipeline/blueflow/src/pages/home/index.vue deleted file mode 100644 index bc30c75488..0000000000 --- a/pipeline/blueflow/src/pages/home/index.vue +++ /dev/null @@ -1,296 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue b/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue deleted file mode 100644 index 8a9eaa03a9..0000000000 --- a/pipeline/blueflow/src/pages/periodic/PeriodicList/ModifyPeriodicDialog.vue +++ /dev/null @@ -1,243 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue b/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue deleted file mode 100644 index 0f6c076c29..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Appmaker/index.vue +++ /dev/null @@ -1,530 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - diff --git a/pipeline/blueflow/src/pages/statistics/Atom/index.vue b/pipeline/blueflow/src/pages/statistics/Atom/index.vue deleted file mode 100644 index 6cfb6024f2..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Atom/index.vue +++ /dev/null @@ -1,859 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/statistics/Instance/index.vue b/pipeline/blueflow/src/pages/statistics/Instance/index.vue deleted file mode 100644 index a574cb34d3..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Instance/index.vue +++ /dev/null @@ -1,855 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - diff --git a/pipeline/blueflow/src/pages/statistics/Template/index.vue b/pipeline/blueflow/src/pages/statistics/Template/index.vue deleted file mode 100644 index 3b829f52f3..0000000000 --- a/pipeline/blueflow/src/pages/statistics/Template/index.vue +++ /dev/null @@ -1,690 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue b/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue deleted file mode 100644 index 256ced886e..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/TaskParamFill.vue +++ /dev/null @@ -1,519 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue b/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue deleted file mode 100644 index 0df9a50904..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/TaskSelectNode.vue +++ /dev/null @@ -1,992 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskCreate/index.vue b/pipeline/blueflow/src/pages/task/TaskCreate/index.vue deleted file mode 100644 index 64116a04a2..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskCreate/index.vue +++ /dev/null @@ -1,179 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue deleted file mode 100644 index a67de82722..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyParams.vue +++ /dev/null @@ -1,158 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue deleted file mode 100644 index 12dc11b534..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ModifyTime.vue +++ /dev/null @@ -1,187 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue b/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue deleted file mode 100644 index b1b542303a..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/RetryNode.vue +++ /dev/null @@ -1,188 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue b/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue deleted file mode 100644 index 89d51eb948..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/TaskOperation.vue +++ /dev/null @@ -1,1414 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue b/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue deleted file mode 100644 index 95d0544ceb..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/ViewParams.vue +++ /dev/null @@ -1,197 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/task/TaskExecute/index.vue b/pipeline/blueflow/src/pages/task/TaskExecute/index.vue deleted file mode 100644 index 9ca75c0fc3..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskExecute/index.vue +++ /dev/null @@ -1,138 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/task/TaskParamEdit.vue b/pipeline/blueflow/src/pages/task/TaskParamEdit.vue deleted file mode 100644 index ecf0a13086..0000000000 --- a/pipeline/blueflow/src/pages/task/TaskParamEdit.vue +++ /dev/null @@ -1,233 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue deleted file mode 100644 index c87557b0b6..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/NodeConfig.vue +++ /dev/null @@ -1,1244 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue deleted file mode 100644 index 28f673f1bb..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabGlobalVariables.vue +++ /dev/null @@ -1,577 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue deleted file mode 100644 index 600c264dd6..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TabLocalDraft.vue +++ /dev/null @@ -1,407 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue deleted file mode 100644 index 8658277e36..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/TemplateSetting.vue +++ /dev/null @@ -1,252 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue deleted file mode 100644 index c107fdeaa4..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/TemplateSetting/VariableEdit.vue +++ /dev/null @@ -1,610 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue b/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue deleted file mode 100644 index 43a0627b3b..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateEdit/index.vue +++ /dev/null @@ -1,878 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue deleted file mode 100644 index f8d75b76aa..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/AuthorityManageDialog.vue +++ /dev/null @@ -1,180 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue deleted file mode 100644 index a95e36bb6c..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/ExportTemplateDialog.vue +++ /dev/null @@ -1,472 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - diff --git a/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue b/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue deleted file mode 100644 index 2fc4cf3745..0000000000 --- a/pipeline/blueflow/src/pages/template/TemplateList/ImportTemplateDialog.vue +++ /dev/null @@ -1,603 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ - - - - diff --git a/pipeline/builder/builder.py b/pipeline/builder/builder.py index 6b643e0255..6aeb81413b 100644 --- a/pipeline/builder/builder.py +++ b/pipeline/builder/builder.py @@ -17,6 +17,7 @@ from pipeline.utils.uniqid import uniqid from pipeline.core.constants import PE from pipeline.builder.flow.data import Data, Params +from pipeline.parser.utils import replace_all_id __all__ = [ 'build_tree' @@ -67,7 +68,7 @@ __incoming = '__incoming' -def build_tree(start_elem, id=None, data=None): +def build_tree(start_elem, id=None, data=None, replace_id=False): tree = copy.deepcopy(__skeleton) elem_queue = Queue.Queue() processed_elem = set() @@ -98,6 +99,8 @@ def build_tree(start_elem, id=None, data=None): tree[PE.id] = id or uniqid() user_data = data.to_dict() if isinstance(data, Data) else data tree[PE.data] = user_data or tree[PE.data] + if replace_id: + replace_all_id(tree) return tree @@ -152,20 +155,27 @@ def __grow(tree, elem): subprocess_param = elem.params.to_dict() if isinstance(elem.params, Params) else elem.params - tree[PE.activities][elem.id] = { + subprocess = { PE.id: elem.id, PE.incoming: tree[__incoming][elem.id], PE.name: elem.name, PE.outgoing: outgoing, PE.type: elem.type(), - PE.pipeline: build_tree( - start_elem=elem.start, - id=elem.id, - data=elem.data - ), PE.params: subprocess_param } + if elem.template_id: + subprocess[PE.template_id] = elem.template_id + else: + subprocess[PE.pipeline] = build_tree( + start_elem=elem.start, + id=elem.id, + data=elem.data, + replace_id=elem.replace_id + ) + + tree[PE.activities][elem.id] = subprocess + next_elem = elem.outgoing[0] __grow_flow(tree, outgoing, elem, next_elem) diff --git a/pipeline/builder/flow/activity.py b/pipeline/builder/flow/activity.py index d44e72fa91..3a8fe09cde 100644 --- a/pipeline/builder/flow/activity.py +++ b/pipeline/builder/flow/activity.py @@ -40,11 +40,21 @@ def component_dict(self): class SubProcess(Element): - def __init__(self, start, data=None, params=None, global_outputs=None, *args, **kwargs): + def __init__(self, + start=None, + data=None, + params=None, + global_outputs=None, + replace_id=False, + template_id=None, + *args, + **kwargs): self.start = start self.data = data self.params = params or {} + self.replace_id = replace_id self.global_outputs = FancyDict(global_outputs or {}) + self.template_id = template_id super(SubProcess, self).__init__(*args, **kwargs) def type(self): diff --git a/pipeline/builder/flow/base.py b/pipeline/builder/flow/base.py index 2039432b58..8959e41909 100644 --- a/pipeline/builder/flow/base.py +++ b/pipeline/builder/flow/base.py @@ -58,3 +58,8 @@ def type(self): def __eq__(self, other): return self.id == other.id + + def __repr__(self): + return u"<{cls} {name}:{id}>".format(cls=type(self).__name__, + name=self.name, + id=self.id) diff --git a/pipeline/builder/flow/data.py b/pipeline/builder/flow/data.py index 1fe40de631..8b8cab15ca 100644 --- a/pipeline/builder/flow/data.py +++ b/pipeline/builder/flow/data.py @@ -79,6 +79,7 @@ class NodeOutput(Var): def __init__(self, source_act, source_key, *args, **kwargs): self.source_act = source_act self.source_key = source_key + kwargs['value'] = None super(NodeOutput, self).__init__(*args, **kwargs) def to_dict(self): diff --git a/pipeline/component_framework/admin.py b/pipeline/component_framework/admin.py index c42f7fb4c0..7fad4f0289 100644 --- a/pipeline/component_framework/admin.py +++ b/pipeline/component_framework/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/component_framework/base.py b/pipeline/component_framework/base.py index 35632fa127..96b7dc6882 100644 --- a/pipeline/component_framework/base.py +++ b/pipeline/component_framework/base.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/component_framework/component.py b/pipeline/component_framework/component.py index 22d63c6bf8..a8e22096f8 100644 --- a/pipeline/component_framework/component.py +++ b/pipeline/component_framework/component.py @@ -29,6 +29,12 @@ def outputs_format(cls): outputs = map(lambda oi: oi._asdict(), outputs) return outputs + @classmethod + def inputs_format(cls): + inputs = cls.bound_service().inputs() + inputs = map(lambda ii: ii._asdict(), inputs) + return inputs + @classmethod def form_is_embedded(cls): return getattr(cls, 'embedded_form', False) diff --git a/pipeline/components/collections/examples.py b/pipeline/components/collections/examples.py index fd3fa173c0..ed52e3bc76 100644 --- a/pipeline/components/collections/examples.py +++ b/pipeline/components/collections/examples.py @@ -19,16 +19,34 @@ logger = logging.getLogger('celery') -if settings.ENABLE_EXAMPLE_COMPONENTS: +__register_ignore__ = not settings.ENABLE_EXAMPLE_COMPONENTS - class SimpleExampleService(Service): - def execute(self, data, parent_data): - return True - def outputs_format(self): - return [] +class SimpleExampleService(Service): + def execute(self, data, parent_data): + return True - class SimpleExampleComponent(Component): - name = u'example component' - code = 'example_component' - bound_service = SimpleExampleService + def outputs_format(self): + return [] + + +class SimpleExampleComponent(Component): + name = u'example component' + code = 'example_component' + bound_service = SimpleExampleService + + +class PipeExampleService(Service): + def execute(self, data, parent_data): + for key, val in data.inputs.iteritems(): + data.set_outputs(key, val) + return True + + def outputs_format(self): + return [] + + +class PipeExampleComponent(Component): + name = u'pipe example component' + code = 'pipe_example_component' + bound_service = PipeExampleService diff --git a/pipeline/conf/default_settings.py b/pipeline/conf/default_settings.py index f58bfeace2..cf13e28486 100644 --- a/pipeline/conf/default_settings.py +++ b/pipeline/conf/default_settings.py @@ -51,3 +51,5 @@ PIPELINE_PARSER_CLASS = getattr(settings, 'PIPELINE_PARSER_CLASS', 'pipeline.parser.pipeline_parser.PipelineParser') ENABLE_EXAMPLE_COMPONENTS = getattr(settings, 'ENABLE_EXAMPLE_COMPONENTS', False) + +UUID_DIGIT_STARTS_SENSITIVE = getattr(settings, 'UUID_DIGIT_STARTS_SENSITIVE', False) diff --git a/pipeline/contrib/web/forms.py b/pipeline/contrib/web/forms.py deleted file mode 100644 index 47ea265ffe..0000000000 --- a/pipeline/contrib/web/forms.py +++ /dev/null @@ -1,145 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -import ujson as json -from django import forms - -from pipeline.models import PipelineTemplate, PipelineInstance, TemplateScheme -from pipeline.component_framework.models import ComponentModel -from pipeline.service import task_service - -from django.utils.translation import ugettext_lazy as _ - - -class PipelineTemplateForm(forms.ModelForm): - class Meta: - model = PipelineTemplate - exclude = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template_id'] - - -class PipelineInstanceForm(forms.ModelForm): - class Meta: - model = PipelineInstance - exclude = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template', 'is_finished', 'is_started', - 'finish_time', 'start_time', 'instance_id'] - - -class TemplateSchemeForm(forms.ModelForm): - class Meta: - model = TemplateScheme - exclude = ['edit_time'] - - -class ActivityIDField(forms.CharField): - def validate(self, value): - super(ActivityIDField, self).validate(value) - try: - task_service.get_single_state(value) - except Exception: - raise forms.ValidationError(_(u"无效的节点 ID"), code='invalid') - - -class InstanceIDField(forms.CharField): - def validate(self, value): - super(InstanceIDField, self).validate(value) - try: - PipelineInstance.objects.get(instance_id=value) - except Exception: - raise forms.ValidationError(_(u"无效的实例 ID"), code='invalid') - - -class TemplateIDField(forms.CharField): - def validate(self, value): - super(TemplateIDField, self).validate(value) - try: - PipelineTemplate.objects.get(template_id=value) - except Exception: - raise forms.ValidationError(_(u"无效的模板 ID"), code='invalid') - - -class InstanceActionForm(forms.Form): - instance_id = InstanceIDField(max_length=32) - - -class NodeActionForm(forms.Form): - node_id = ActivityIDField(max_length=32) - - -class ComponentCodeField(forms.CharField): - def validate(self, value): - super(ComponentCodeField, self).validate(value) - try: - ComponentModel.objects.get(code=value) - except Exception: - raise forms.ValidationError(_(u"无效的组件代码"), code='invalid') - - -class JSONField(forms.CharField): - def __init__(self, assert_type, *args, **kwargs): - self.assert_type = assert_type - super(JSONField, self).__init__(*args, **kwargs) - - def validate(self, value): - super(JSONField, self).validate(value) - try: - parsed = json.loads(value) - if self.assert_type and not isinstance(parsed, self.assert_type): - raise forms.ValidationError(_(u"该字段的类型必须为 %s") % self.assert_type, code='invalid') - except Exception: - raise forms.ValidationError(_(u"JSON 格式不合法"), code='invalid') - - -class ComponentFieldForm(forms.Form): - component_code = ComponentCodeField() - field = forms.CharField() - - -class RetryFieldsForm(forms.Form): - act_id = ActivityIDField() - component_code = ComponentCodeField() - - -class SubProcessFieldsForm(forms.Form): - template_id = TemplateIDField() - - -class ActivityInputsForm(forms.Form): - act_id = forms.CharField(max_length=32) - instance_id = InstanceIDField() - component_code = ComponentCodeField() - subprocess_stack = JSONField(assert_type=list) - - def clean_subprocess_stack(self): - return json.loads(self.cleaned_data['subprocess_stack']) - - -class InstanceConstantsModifyForm(forms.Form): - instance_id = InstanceIDField() - constants = JSONField(assert_type=dict) - - def clean_constants(self): - return json.loads(self.cleaned_data['constants']) - - -class TemplateCloneForm(forms.Form): - template_id = TemplateIDField() - - -class InstanceCloneForm(forms.Form): - instance_id = InstanceIDField() - creator = forms.CharField(max_length=32) - - -class ResetTimerForm(forms.Form): - node_id = forms.CharField(max_length=32) - inputs = JSONField(assert_type=dict) diff --git a/pipeline/contrib/web/models.py b/pipeline/contrib/web/models.py deleted file mode 100644 index 90524bb0e7..0000000000 --- a/pipeline/contrib/web/models.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" diff --git a/pipeline/contrib/web/urls.py b/pipeline/contrib/web/urls.py deleted file mode 100644 index 7049de3ec0..0000000000 --- a/pipeline/contrib/web/urls.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -from django.conf.urls import include, url -from tastypie.api import Api - -from pipeline.contrib.web.webresource.resource import (PipelineTemplateResource, - ComponentModelResource, - PipelineInstanceResource, - TemplateSchemeResource) -from pipeline.contrib.web import urls_v1, urls_web -from pipeline_plugins.components import urls - -v1_api = Api(api_name='v1') -v1_api.register(PipelineTemplateResource()) -v1_api.register(ComponentModelResource()) -v1_api.register(PipelineInstanceResource()) -v1_api.register(TemplateSchemeResource()) - - -urlpatterns = [ - url(r'^', include(urls_web)), - url(r'^api/', include(v1_api.urls)), - url(r'^api/v1/', include(urls_v1)), - url(r'^', include(urls)), -] diff --git a/pipeline/contrib/web/urls_v1.py b/pipeline/contrib/web/urls_v1.py deleted file mode 100644 index 098fc316e1..0000000000 --- a/pipeline/contrib/web/urls_v1.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -from django.conf.urls import url - -from pipeline.contrib.web import views_v1 - -urlpatterns = [ - # 实例操作:启动,暂停,撤销等 - url(r'^act/instances/(?P\w+)/$', views_v1.handle_instance_action), - - # 节点操作:重试,暂停,跳过等 - url(r'^act/nodes/(?P\w+)/$', views_v1.handle_node_action), - - # 查看实例的状态信息 - url(r'^status/$', views_v1.get_state), - - # 获取某个子流程的参数填写表单 - url(r'^form/sub_proc/$', views_v1.get_form_for_subproc), - - # # 获取某个节点重试时的参数填写表单 - # url(r'^form/act_retry/$', views_v1.get_form_for_retry), - - # 获取某个节点的输入和输出 - url(r'^data/act/$', views_v1.get_data_for_activity), - - # 获取某个节点的执行详情 - url(r'^detail/act/$', views_v1.get_detail_for_activity), - - # 获取一个模板的变量列表 - url(r'^data/constants/(?P\w+)/$', views_v1.get_constants_for_subproc), - - # 修改实例的输入 - url(r'^inputs/modify/instance/$', views_v1.modify_instance_constants), - - # 克隆一个模板 - url(r'^template/clone/$', views_v1.clone_template), - - # 克隆一个实例 - url(r'^instance/clone/$', views_v1.clone_instance), - - # 重置计时器 - url(r'^spec/timer/reset/$', views_v1.reset_timer), - - # 获取template的context信息 - url(r'^context/template/$', views_v1.get_template_context), - - # 获取instance的context信息 - url(r'^context/instance/$', views_v1.get_instance_context), - - # 获取某个节点的日志 - url(r'^log/node/(?P\w+)/$', views_v1.get_node_log), -] diff --git a/pipeline/contrib/web/views_v1.py b/pipeline/contrib/web/views_v1.py deleted file mode 100644 index 191e3719e6..0000000000 --- a/pipeline/contrib/web/views_v1.py +++ /dev/null @@ -1,414 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -import ujson as json -import traceback -import logging -import functools - -from django.http.response import JsonResponse, Http404 -from django.views.decorators.csrf import csrf_exempt -from django.utils import timezone - -from pipeline.exceptions import PipelineException -from pipeline.models import PipelineInstance, PipelineTemplate -from pipeline.contrib.web import forms -from pipeline.parser import pipeline_parser -from pipeline.service import task_service -from pipeline.component_framework import library -from pipeline.utils.context import get_pipeline_context -from pipeline.log.models import LogEntry - -from django.utils.translation import ugettext_lazy as _ - -logger = logging.getLogger('root') - -actions_for_instance = { - 'start': None, - 'pause': task_service.pause_pipeline, - 'resume': task_service.resume_pipeline, - 'revoke': task_service.revoke_pipeline -} - -actions_for_node = { - 'revoke': task_service.revoke_activity, - 'retry': task_service.retry_activity, - 'skip': task_service.skip_activity, - 'call_back': task_service.callback, - 'skip_exg': task_service.skip_exclusive_gateway, - 'pause': task_service.pause_activity, - 'resume': task_service.resume_activity, - 'pause_subproc': task_service.pause_pipeline, - 'resume_subproc': task_service.resume_pipeline, -} - - -def action_result(result, message, status=200, data=None): - ret_data = { - 'result': result, - 'message': message - } - if data is not None: - ret_data['data'] = data - return JsonResponse(status=status, data=ret_data) - - -def message_result(message, status=200): - return JsonResponse(status=status, data={ - 'message': message - }) - - -def post_form_validator(form_cls): - def decorate(func): - @functools.wraps(func) - def wrapper(request, *args, **kwargs): - form = form_cls(request.POST) - if not form.is_valid(): - return JsonResponse(status=400, data=form.errors) - setattr(request, 'form', form) - return func(request, *args, **kwargs) - - return wrapper - - return decorate - - -def get_form_validator(form_cls): - def decorate(func): - @functools.wraps(func) - def wrapper(request, *args, **kwargs): - form = form_cls(request.GET) - if not form.is_valid(): - return JsonResponse(status=400, data=form.errors) - setattr(request, 'form', form) - return func(request, *args, **kwargs) - - return wrapper - - return decorate - - -@csrf_exempt -@post_form_validator(forms.InstanceActionForm) -def handle_instance_action(request, action): - form = request.form.clean() - - if action not in actions_for_instance: - raise Http404() - - instance_id = form.get('instance_id') - - if action == 'start': - return start_pipeline(instance_id, request.user.username) - - try: - result = actions_for_instance[action](instance_id) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -def start_pipeline(instance_id, username): # get pipeline obj from parser - instance = PipelineInstance.objects.get(instance_id=instance_id) - try: - result = instance.start(username) - except PipelineException as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'Invalid pipeline data.', status=400) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - - if not result.result: - return action_result(result.result, result.message, status=400) - - return action_result(result.result, result.message) - - -@csrf_exempt -@post_form_validator(forms.NodeActionForm) -def handle_node_action(request, action): - if action not in actions_for_node: - raise Http404() - - if action == 'callback': - return activity_callback(request) - - form = request.form.clean() - node_id = form.get('node_id') - - inputs = request.POST.get('inputs', '{}') - flow_id = request.POST.get('flow_id', '') - try: - inputs = json.loads(inputs) - except Exception: - return action_result(False, 'Invalid inputs format.', status=400) - - kwargs = {} - kwargs = {'inputs': inputs} if inputs else kwargs - kwargs = {'flow_id': flow_id} if flow_id else kwargs - - try: - result = actions_for_node[action](node_id, **kwargs) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -def activity_callback(request): - form = request.form.clean() - node_id = form.get('node_id') - data = request.POST.get('data') - try: - data = json.loads(data) - except Exception: - return action_result(False, 'Invalid data format.', status=400) - - try: - result = task_service.callback(node_id, data) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return action_result(False, 'An error occurred, please contact developer.', status=500) - return action_result(result.result, result.message) - - -@csrf_exempt -def get_state(request): - instance_id = request.GET.get('instance_id') - try: - instance = PipelineInstance.objects.get(instance_id=instance_id) - if not instance.is_started: - return JsonResponse({ - "finish_time": None, - "state": "CREATED", - "retry": 0, - "start_time": None, - "children": {}}) - except PipelineInstance.DoesNotExist: - pass - - try: - state = task_service.get_state(instance_id) - return JsonResponse(state) - except Exception as e: - logger.exception(traceback.format_exc(e)) - return JsonResponse(status=400, data={ - 'message': 'invalid activity id.' - }) - - -@csrf_exempt -def get_form_for_retry(request): - act_id = request.GET.get('act_id') - act_data = task_service.get_inputs(act_id) - return JsonResponse(act_data, safe=True) - - -@csrf_exempt -def get_form_for_subproc(request): - template_id = request.GET.get('template_id') - template = PipelineTemplate.objects.get(template_id=template_id) - - form = template.get_form() - outputs = template.get_outputs() - return JsonResponse({ - 'form': form, - 'outputs': outputs - }) - - -@csrf_exempt -def get_constants_for_subproc(request, template_id): - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except PipelineTemplate.DoesNotExist: - return JsonResponse(status=400, data={ - 'message': 'invalid template id.' - }) - - data = template.data - constants = data['constants'] - - outputs_key = data['outputs'] - outputs = {} - for key in outputs_key: - outputs[key] = data['constants'][key] - - return JsonResponse({ - 'constants': {k: c for k, c in constants.items() if constants[k]['show_type'] == 'show'}, - 'outputs': outputs - }) - - -def form_for_activity(form): - try: - inputs = task_service.get_inputs(form['act_id']) - outputs = task_service.get_outputs(form['act_id']) - except Exception: - subprocess_stack = form['subprocess_stack'] - act_id = form['act_id'] - instance_data = PipelineInstance.objects.get(instance_id=form['instance_id']).execution_data - inputs = pipeline_parser.WebPipelineAdapter(instance_data).get_act_inputs(act_id=act_id, - subprocess_stack=subprocess_stack) - outputs = {} - - component = library.ComponentLibrary.get_component_class(form['component_code']) - # append inputs - inputs_table = inputs - - # append outputs - outputs_table = [] - outputs_format = component.outputs_format() - for outputs_item in outputs_format: - value = outputs.get('outputs', {}).get(outputs_item['key'], '') - outputs_table.append({ - 'name': outputs_item['name'], - 'value': value - }) - - data = { - 'inputs': inputs_table, - 'outputs': outputs_table, - 'ex_data': outputs.get('ex_data', '') - } - return data - - -@csrf_exempt -@get_form_validator(forms.ActivityInputsForm) -def get_data_for_activity(request): - form = request.form.clean() - return JsonResponse(form_for_activity(form)) - - -@csrf_exempt -@get_form_validator(forms.ActivityInputsForm) -def get_detail_for_activity(request): - form = request.form.clean() - data = form_for_activity(form) - result = task_service.get_state(form['act_id']) - result.update(data) - result['histories'] = task_service.get_activity_histories(form['act_id']) - return JsonResponse(result) - - -@csrf_exempt -@post_form_validator(forms.InstanceConstantsModifyForm) -def modify_instance_constants(request): - form = request.form.clean() - instance_id = form['instance_id'] - instance = PipelineInstance.objects.get(instance_id=instance_id) - if instance.is_started: - return action_result(False, 'pipeline already started.', status=400) - - exec_data = instance.execution_data - for key, value in form['constants'].items(): - if key in exec_data['constants']: - exec_data['constants'][key]['value'] = value - instance.set_execution_data(exec_data) - - return action_result(True, 'success') - - -def clone_template(request): - template_id = request.GET.get('template_id') - - # clone template - template = PipelineTemplate.objects.get(template_id=template_id) - new_data = template.clone_data() - # name = template.name[10:] if len(template.name) >= MAX_LEN_OF_NAME - 10 else template.name - name = 'clone%s' % timezone.now().strftime('%Y%m%d%H%m%S') - - return action_result(True, 'success', data={'name': name, 'data': json.dumps(new_data)}) - - -@csrf_exempt -@post_form_validator(forms.InstanceCloneForm) -def clone_instance(request): - form = request.form.clean() - instance_id = form['instance_id'] - creator = form['creator'] - - instance = PipelineInstance.objects.get(instance_id=instance_id) - new_instance = instance.clone(creator=creator) - - return action_result(True, 'success', data={'new_instance_id': new_instance.instance_id}) - - -@csrf_exempt -@post_form_validator(forms.ResetTimerForm) -def reset_timer(request): - form = request.form.clean() - node_id = form['node_id'] - - result = task_service.forced_fail(node_id) - if not result.result: - return action_result(False, _(u"计时器不存在或已完成,或 pipeline 当前状态不允许重置计时器")) - - inputs = form['inputs'] - result = task_service.retry_activity(node_id, inputs) - if not result.result: - return action_result(False, _(u"重试计时器失败,请稍后再次尝试")) - - return action_result(True, 'success') - - -@csrf_exempt -def get_template_context(request): - template_id = request.GET.get('template_id') - if template_id: - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except PipelineTemplate.DoesNotExist: - return action_result(False, 'PipelineTemplate object of template_id:%s does not exist' % template_id) - else: - template = None - context = get_pipeline_context(template, 'template') - return JsonResponse(context) - - -@csrf_exempt -def get_instance_context(request): - instance_id = request.GET.get('instance_id') - if instance_id: - try: - instance = PipelineInstance.objects.get(instance_id=instance_id) - except PipelineInstance.DoesNotExist: - return action_result(False, 'PipelineInstance object of instance_id:%s does not exist' % instance_id) - else: - instance = None - context = get_pipeline_context(instance, 'instance') - return JsonResponse(context) - - -@csrf_exempt -def get_node_log(request, node_id): - history_id = request.GET.get('history_id', -1) - - if not node_id: - return JsonResponse({ - 'result': False, - 'data': None, - 'message': 'node_id can not be None' - }) - - plain_log = LogEntry.objects.plain_log_for_node(node_id, history_id) - return JsonResponse({ - 'result': True if plain_log else False, - 'data': plain_log, - 'message': 'node with history_id(%s) does not exist or log already expired' % history_id if not plain_log - else '' - }) diff --git a/pipeline/contrib/web/views_web.py b/pipeline/contrib/web/views_web.py deleted file mode 100644 index a832ebef67..0000000000 --- a/pipeline/contrib/web/views_web.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -from django.shortcuts import render - - -def home(request): - """ - 首页 - """ - return render(request, 'pipeline/home.html') - - -def template(request): - """ - 模板 - """ - return render(request, 'pipeline/template.html') - - -def instance(request): - """ - 实例 - """ - return render(request, 'pipeline/instance.html') - - -def newtask(request): - """ - 新建任務 - """ - return render(request, 'pipeline/newtask.html') diff --git a/pipeline/contrib/web/webresource/resource.py b/pipeline/contrib/web/webresource/resource.py deleted file mode 100644 index 13cbec7c28..0000000000 --- a/pipeline/contrib/web/webresource/resource.py +++ /dev/null @@ -1,306 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -import ujson as json - -from django.utils import timezone -from django.utils.translation import ugettext_lazy as _ -from tastypie.resources import ModelResource, ALL_WITH_RELATIONS -from tastypie import fields -from tastypie.authorization import Authorization -from tastypie.serializers import Serializer -from tastypie.validation import FormValidation -from tastypie.exceptions import ImmediateHttpResponse - -from pipeline import exceptions -from pipeline.models import PipelineTemplate, Snapshot, PipelineInstance, unfold_subprocess, TemplateScheme -from pipeline.utils.uniqid import node_uniqid -from pipeline.component_framework.models import ComponentModel -from pipeline.component_framework.library import ComponentLibrary -from pipeline.contrib.web import forms -from pipeline.validators.utils import validate_converge_gateway - - -def raise_validation_error(resource, bundle, resource_name, field, message): - bundle.errors = { - resource_name: { - field: [ - message - ] - } - } - raise ImmediateHttpResponse(response=resource.error_response(bundle.request, bundle.errors)) - - -class PipelineSerializer(Serializer): - - def format_datetime(self, data): - if timezone.is_aware(data): - data = timezone.localtime(data) - return data.strftime('%Y-%m-%d %H:%M:%S') - - -class SnapshotResource(ModelResource): - class Meta: - queryset = Snapshot.objects.all() - - -class PipelineTemplateResource(ModelResource): - data = fields.ForeignKey(SnapshotResource, 'snapshot') - - class Meta: - queryset = PipelineTemplate.objects.filter(is_deleted=False) - resource_name = 'templates' - excludes = ['is_deleted'] - always_return_data = True - detail_uri_name = 'template_id' - list_allowed_methods = ['get', 'post'] - detail_allowed_methods = ['get', 'patch', 'post', 'delete'] - filtering = { - 'template_id': ALL_WITH_RELATIONS, - } - - authorization = Authorization() - serializer = PipelineSerializer() - validation = FormValidation(form_class=forms.PipelineTemplateForm) - - def dehydrate_data(self, bundle): - return json.dumps(bundle.obj.snapshot.data) - - def hydrate(self, bundle): - pop_keys = ['template_id', 'create_time', 'edit_time', 'version'] - for key in pop_keys: - if key in bundle.data: - bundle.data.pop(key) - - return super(PipelineTemplateResource, self).hydrate(bundle) - - def obj_update(self, bundle, skip_errors=False, **kwargs): - json_data = bundle.data['data'] - try: - data = json.loads(json_data) - except Exception: - raise_validation_error(self, bundle, - 'templates', 'data', _(u"JSON 格式不合法")) - - result, msg = self.subprocess_ref_validate(bundle, - data, - root_id=bundle.obj.template_id, - root_name=bundle.obj.name) - if not result: - raise_validation_error(self, bundle, 'templates', 'data', msg) - self.gateway_validate(bundle, data) - - bundle.obj.snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - bundle.data.pop('data') - return super(PipelineTemplateResource, self).obj_update(bundle, skip_errors=skip_errors, **kwargs) - - def obj_create(self, bundle, **kwargs): - json_data = bundle.data.get('data') - try: - data = json.loads(json_data) - except Exception: - raise_validation_error(self, bundle, 'templates', 'data', _(u"JSON 格式不合法")) - - result, msg = self.subprocess_ref_validate(bundle, data) - if not result: - raise_validation_error(self, bundle, 'templates', 'data', msg) - self.gateway_validate(bundle, data) - - snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - kwargs['snapshot_id'] = snapshot.id - kwargs['template_id'] = node_uniqid() - # must pop data field after the creation of snapshot is finished. - bundle.data.pop('data') - - return super(PipelineTemplateResource, self).obj_create(bundle, **kwargs) - - def obj_delete(self, bundle, **kwargs): - template_id = kwargs['template_id'] - PipelineTemplate.objects.delete_model(template_id) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('id') - bundle.data.pop('data') - bundle.data.pop('description') - bundle.data['version'] = bundle.obj.pipeline_template.version - bundle.data['subprocess_has_update'] = bundle.obj.pipeline_template.subprocess_has_update - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - bundle.data.pop('id') - bundle.data['subprocess_version_info'] = bundle.obj.pipeline_template.subprocess_version_info - - return data - - def gateway_validate(self, bundle, data): - try: - validate_converge_gateway(data) - except exceptions.ConvergeMatchError as e: - raise_validation_error(self, bundle, 'templates', 'data', e.message) - - -class PipelineInstanceResource(ModelResource): - data = fields.ForeignKey(SnapshotResource, 'snapshot') - exec_data = fields.ForeignKey(SnapshotResource, 'execution_snapshot') - template = fields.ForeignKey(PipelineTemplateResource, 'template') - - pop_keys = ['is_deleted', 'edit_time', 'create_time', 'snapshot', 'template', 'is_finished', 'is_started', - 'finish_time', 'start_time', 'instance_id', 'execution_snapshot'] - - class Meta: - queryset = PipelineInstance.objects.filter(is_deleted=False) - resource_name = 'instances' - excludes = ['is_deleted', 'id'] - always_return_data = True - detail_uri_name = 'instance_id' - list_allowed_method = ['get', 'post'] - detail_allowed_methods = ['get', 'patch', 'post', 'delete'] - filtering = { - 'template': ALL_WITH_RELATIONS, - } - - authorization = Authorization() - serializer = PipelineSerializer() - - def dehydrate_data(self, bundle): - return json.dumps(bundle.obj.snapshot.data) - - def dehydrate_exec_data(self, bundle): - return json.dumps(bundle.obj.execution_snapshot.data) - - def hydrate(self, bundle): - for key in self.pop_keys: - if key in bundle.data: - bundle.data.pop(key) - - return super(PipelineInstanceResource, self).hydrate(bundle) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('data') - bundle.data.pop('exec_data') - bundle.data.pop('description') - bundle.data.pop('template') - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - bundle.data.pop('template') - - return data - - def obj_create(self, bundle, **kwargs): - template_id = bundle.data.get('template_id') - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'template_id', _(u"模板不存在")) - - exec_data = bundle.data.get('exec_data') - try: - exec_data = json.loads(exec_data) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'exec_data', _(u"JSON 格式不合法")) - - # unfold subprocess - unfold_subprocess(exec_data) - instance_id = node_uniqid() - exec_data['id'] = instance_id - exec_snapshot, __ = Snapshot.objects.create_or_get_snapshot(exec_data) - kwargs['template_id'] = template.id - kwargs['instance_id'] = instance_id - kwargs['snapshot_id'] = template.snapshot.id - kwargs['execution_snapshot_id'] = exec_snapshot.id - bundle.data.pop('exec_data') - return super(PipelineInstanceResource, self).obj_create(bundle, **kwargs) - - def obj_update(self, bundle, skip_errors=False, **kwargs): - exec_data = bundle.data['exec_data'] - try: - data = json.loads(exec_data) - except Exception: - raise_validation_error(self, bundle, - 'instances', 'exec_data', _(u"JSON 格式不合法")) - - bundle.obj.execution_snapshot, __ = Snapshot.objects.create_or_get_snapshot(data) - bundle.data.pop('exec_data') - bundle.data.pop('data') - return super(PipelineInstanceResource, self).obj_update(bundle, skip_errors=skip_errors, **kwargs) - - def obj_delete(self, bundle, **kwargs): - instance_id = kwargs['instance_id'] - PipelineInstance.objects.delete_model(instance_id) - - -class ComponentModelResource(ModelResource): - class Meta: - queryset = ComponentModel.objects.filter(status=True) - resource_name = 'components' - excludes = ['status', 'id'] - detail_uri_name = 'code' - limit = 0 - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - component = ComponentLibrary.get_component_class(bundle.data['code']) - bundle.data['output'] = component.outputs_format() - bundle.data['form'] = component.form - - return data - - def alter_detail_data_to_serialize(self, request, data): - bundle = data - component = ComponentLibrary.get_component_class(bundle.data['code']) - bundle.data['output'] = component.outputs_format() - bundle.data['form'] = component.form - - return data - - -class TemplateSchemeResource(ModelResource): - template = fields.ForeignKey(PipelineTemplateResource, 'template') - - class Meta: - queryset = TemplateScheme.objects.all() - resource_name = 'schemes' - - filtering = { - 'template': ALL_WITH_RELATIONS, - } - authorization = Authorization() - validation = FormValidation(form_class=forms.TemplateSchemeForm) - - def alter_list_data_to_serialize(self, request, data): - for bundle in data['objects']: - bundle.data.pop('data') - - return data - - def obj_create(self, bundle, **kwargs): - template_id = bundle.data.get('template_id') - try: - template = PipelineTemplate.objects.get(template_id=template_id) - except Exception: - raise_validation_error(self, bundle, - 'schemes', 'template_id', _(u"模板不存在")) - - kwargs['template'] = template - kwargs['unique_id'] = '%s-%s' % (template_id, bundle.data.get('name')) - return super(TemplateSchemeResource, self).obj_create(bundle, **kwargs) diff --git a/pipeline/core/data/var.py b/pipeline/core/data/var.py index e5fc13e03f..d0dfcbb1c3 100644 --- a/pipeline/core/data/var.py +++ b/pipeline/core/data/var.py @@ -99,13 +99,13 @@ def __unicode__(self): return self.__repr__() -class LazyVariableMeta(type): +class RegisterVariableMeta(type): def __new__(cls, name, bases, attrs): - super_new = super(LazyVariableMeta, cls).__new__ + super_new = super(RegisterVariableMeta, cls).__new__ # Also ensure initialization is only performed for subclasses of Model # (excluding Model class itself). - parents = [b for b in bases if isinstance(b, LazyVariableMeta)] + parents = [b for b in bases if isinstance(b, RegisterVariableMeta)] if not parents: return super_new(cls, name, bases, attrs) @@ -116,7 +116,7 @@ def __new__(cls, name, bases, attrs): raise exceptions.ConstantReferenceException("LazyVariable %s: code can't be empty." % new_class.__name__) - pre_variable_register.send(sender=LazyVariable, variable_cls=new_class, variable_code=new_class.code) + pre_variable_register.send(sender=LazyVariable, variable_cls=new_class) library.VariableLibrary.variables[new_class.code] = new_class @@ -124,7 +124,7 @@ def __new__(cls, name, bases, attrs): class LazyVariable(SpliceVariable): - __metaclass__ = LazyVariableMeta + __metaclass__ = RegisterVariableMeta def __init__(self, name, value, context, pipeline_data): super(LazyVariable, self).__init__(name, value, context) diff --git a/pipeline/core/flow/activity.py b/pipeline/core/flow/activity.py index e93a198835..8294b900c2 100644 --- a/pipeline/core/flow/activity.py +++ b/pipeline/core/flow/activity.py @@ -157,21 +157,28 @@ class Service(object): ScheduleResultAttr = '__schedule_finish__' ScheduleDetermineAttr = '__need_schedule__' + InputItem = namedtuple('InputItem', 'name key type required') OutputItem = namedtuple('OutputItem', 'name key type') interval = None _result_output = OutputItem(name=_(u'执行结果'), key='_result', type='bool') def __init__(self, name=None): self.name = name + self.interval = deepcopy(getattr(type(self), 'interval')) @abstractmethod def execute(self, data, parent_data): # get params from data pass - @abstractmethod def outputs_format(self): - pass + return [] + + def inputs_format(self): + return [] + + def inputs(self): + return self.inputs_format() def outputs(self): custom_format = self.outputs_format() diff --git a/pipeline/docs/api_reference/pipeline.service.task_service.md b/pipeline/docs/api_reference/pipeline.service.task_service.md new file mode 100644 index 0000000000..d3e726f27b --- /dev/null +++ b/pipeline/docs/api_reference/pipeline.service.task_service.md @@ -0,0 +1,238 @@ +## pipeline.service.task_service + +任务服务操作接口 + +### run_pipeline(pipeline) + +执行流程对象 + +#### 参数 + +- pipeline(Pipeline):流程对象 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### pause_pipeline(pipeline_id) + +暂停一个正在执行的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### revoke_pipeline(pipeline_id) + +撤销一个正在执行的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### resume_pipeline(pipeline_id) + +继续一个已经被暂停的流程 + +#### 参数 + +- pipeline_id(str):流程 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### pause_activity(act_id) + +预约暂停尚未被执行的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### resume_activity(act_id) + +继续一个被暂停的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### retry_activity(act_id, inputs=None) + +重试一个执行失败的 Activity 节点,若 `inputs` 不为空则使用传入的参数重试该节点。 + +#### 参数 + +- act_id(str):Activity 节点 ID +- inputs(dict):重试参数 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### skip_activity(act_id) + +跳过一个执行失败的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### skip_exclusive_gateway(gateway_id, flow_id) + +跳过一个执行失败的分支网关 + +#### 参数 + +- gateway_id(str):分支网关 ID +- flow_id(str):流程继续推进执行的顺序流 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### forced_fail(act_id) + +强制失败一个正在执行的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 + +### get_state(node_id) + +获取某个节点的状态信息 + +#### 参数 + +- node_id(str):节点 ID + +#### 返回值 + +dict: +- children(dict):子节点状态信息 +- finish_time(str):节点完成时间 +- id(str):节点 ID +- loop(int):循环次数 +- name(str):节点名称 +- retry(int):重试次数 +- skip(book):是否跳过 +- start_time(str):开始时间 +- state(str):节点状态 + +### get_inputs(act_id) + +获取一个 Activity 节点的输入数据 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +dict:输入数据 + +### get_outputs(act_id) + +获取一个 Activity 节点的输出数据 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +dict: +- ex_data(str):异常信息 +- outputs(dict):输出数据 + +### get_activity_histories(act_id) + +获取一个 Activity 节点的执行历史 + +#### 参数 + +- act_id(str):Activity 节点 ID + +#### 返回值 + +list(dict): +- started_time(str):开始时间 +- finished_time(str):完成时间 +- elapsed_time(int):执行耗时 +- inputs(dict):输入数据 +- outputs(dict):输出数据 +- ex_data(str):异常信息 +- loop(int):循环次数 +- skip(bool):是否跳过 + +### callback(act_id, data=None) + +回调一个正在等待回调的 Activity 节点 + +#### 参数 + +- act_id(str):Activity 节点 ID +- data(dict):回调数据 + +#### 返回值 + +ActionResult: +- result(bool):是否成功 +- message(str):接口返回信息 +- extra(obj):额外信息 diff --git a/pipeline/docs/quick_start.md b/pipeline/docs/quick_start.md new file mode 100644 index 0000000000..d154f9fad0 --- /dev/null +++ b/pipeline/docs/quick_start.md @@ -0,0 +1,119 @@ + +## pipeline + +pipeline 是标准运维 v3 内部使用的任务调度引擎,其主要职责是解析,执行,管理由用户创建的流程任务,并提供了如暂停,撤销,跳过和重试等灵活的控制能力和并行、子流程等进阶特性,并可通过水平扩展来进一步提升任务的并发处理能力。 + +## 起步 + +### 1. 初始化 + +由于 pipeline 依赖 Django ORM,所以必须作为一个 Django APP 嵌入到 Django 项目中使用。 + +首先将 pipeline,django_signal_valve 项目拷贝到当前 Django 目录下,并在 Django 工程的 `INSTALLED_APPS` 中添加以下 APP: + +```python +( + ... + 'pipeline', + 'pipeline.log', + 'pipeline.engine', + 'pipeline.component_framework', + 'django_signal_valve', + 'djcelery', + ... +) +``` + +并在 Django 工程根目录下运行 `python manage.py migrate` 初始化数据库。 + +### 2. 环境准备 + +由于 pipeline 在执行中需要使用到 redis,请保证 Django Settings 中配置了 redis 的访问方式,如下所示: + +```python +REDIS = { + 'host': 'localhost', + 'port': 6379, +} +``` + +在使用 pipeline 前,需要启动 redis,rabbitmq-server 以及 celery-worker。 + +### 3. 执行一个简单的流程 + +你只需要根据规范提供一个流程描述结构,并使用 `PipelineParser` 将其转换为 `Pipeline` 对象,当然,你也可以自己组装 `Pipeline` 对象,只不过这样会比较繁琐。下面的结构就描述了一个简单的流程,流程示意图如下: + +![simple example](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/simple_example.png) + +下面让我们创建出这个流程并让他跑起来: + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser +from pipeline.service import task_service + +# 使用 builder 构造出流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 根据流程描述结构创建流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +流程开始执行后,可以通过 `task_service.get_state` 接口获取流程当前执行状态: + +```bash +>>> task_service.get_state(pipeline.id) + +{'children': {u'5740b0a1f8b03f9fb82c3690a41c6b10': {'finish_time': '2019-03-27 06:56:16', + 'id': u'5740b0a1f8b03f9fb82c3690a41c6b10', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}, + u'6930365c0c73358dbefb9c2d25922e0f': {'finish_time': '2019-03-27 06:56:16', + 'id': u'6930365c0c73358dbefb9c2d25922e0f', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}, + u'd29a8ef1ec7f367e9724415e03de22ab': {'finish_time': '2019-03-27 06:56:16', + 'id': u'd29a8ef1ec7f367e9724415e03de22ab', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'}}, + 'finish_time': '2019-03-27 06:56:16', + 'id': u'3a07e1b279a83df2bf15f6b094901303', + 'loop': 1L, + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-27 06:56:16', + 'state': 'FINISHED'} +``` + +> Tips:如果在调用 `task_service.get_state` 时跑出了 InvalidOperationException: node does not exist, may have not by executed 异常,请确认 Celery Worker 是否成功启动并接收到了任务,以及检查传递给 `task_service.get_state` 的节点 ID 是否正确。 + +可以看到,整个流程很快就执行完了,恭喜你,你已经成功的把一个流程运行起来了! + +### 接下来 + +- 基础概念 +- 流程编排 +- 流程构造器 +- 流程管理 +- 自定义组件 +- API Reference \ No newline at end of file diff --git a/pipeline/docs/user_guide_basic_concept.md b/pipeline/docs/user_guide_basic_concept.md new file mode 100644 index 0000000000..c9919a7387 --- /dev/null +++ b/pipeline/docs/user_guide_basic_concept.md @@ -0,0 +1,91 @@ + +## 基本概念 + +在进行进一步的了解和使用之前,让我们先来了解一下这个流程引擎中的一些基础概念。 + +## 流程对象 + +### pipeline + +在 pipeline 流程引擎中,单个流程被称为 pipeline,每个流程在引擎内部都会拥有一个与其对应的 `Pipeline` 对象,该对象存储了一个流程中的所有信息(流程结构,流程数据),同时,这个对象也是引擎中的核心对象,这个对象会作为流程执行的依据,`Pipeline` 对象对于流程引擎来说就好像 Python 字节码对于 Python 虚拟机一样。 + +## 流程元素 + +下面这些对象被称**流程元素,流程元素指的是一个流程对象的基本组成元素。** + +### event + +一个 `Pipeline` 对象至少会拥有两个事件,一个开始事件(`StartEvent`)和结束事件(`EndEvent`),开始事件的完成标志一个 `Pipeline` 对象的执行开始,而结束事件的完成则标志一个 `Pipeline` 的执行完成。 + +### activity + +一个 `Activity` 对象代表了某项活动,比如发起网络请求,操作数据库,执行命令等等,`Activity` 的行为通常由用户来定义。 + +### gateway + +gateway 在 `Pipeline` 对象中起到了引流的作用,网关会决定一个任务流程的执行走向和行为,如分支网关(`ExclusiveGateway`)决定了接下来需要引擎需要执行的路径,并行网关(`ParallelGateway`)会增加当前 `Pipeline` 对象的执行进程数,条件并行网关(`ConditionalParallelGateway`)会根据当前上下文的信息来判断当前 `Pipeline` 对象的增加的执行进程数,而汇聚网关(`ConvergeGateway`)则会减少当前 `Pipeline` 对象的执行进程数。 + +### subprocess + +子流程(`SubProcess`)是 `Pipeline` 对象中一种特殊的节点,当一个 `Pipeline` 对象作为另一个 `Pipeline` 对象的某个节点出现在其结构中,我们就把这个前者称为后者的子流程,通过使用子流程,开发者能够对 `Pipeline` 对象重用,减少重复编码。 + +### sequence flow + +每个节点之间的连线,pipeline 将其称为顺序流。 + +### 数据交换 + +## 数据对象 + +流程对象中每个节点都拥有一个数据对象,这个数据对象用于存储节点的输入和输出数据,每个节点之间的数据对象是相互隔离的,也就是说,节点1不能直接访问节点2的输出。 + +## 数据上下文 + +在整个流程执行的过程中,节点之前并不是完全孤立的,某些时候节点需要进行通信,例如,节点2需要获取节点1的执行结果,并根据该结果来决定接下来的行为,由于在一个流程中每个节点之间的数据是相互隔离的,无法在节点内实现对其他节点数据的直接访问,所以,每个流程会拥有一个用于进行节点通信和数据传递的数据上下文。 + +节点1能够将自己在执行过程中生成的某些数据写到数据上下文中,当其他节点需要使用的时候,只需要从数据上下文中获取这些数据即可。 + +数据对象与数据上下文之间的数据交换如下图所示: + +![数据上下文](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/data_context.png) + +> 为什么不能在节点中直接访问其他节点与上下文的数据?在节点中直接访问其他节点与上下文中的数据固然方便,但是这样可能会导致在实现组件时过度依赖当前上下文的结构与流程结构,从而破坏了组件的独立性与可复用性。pipeline 中的每种活动节点都是独立的个体,即:无论在什么结构下的流程中、在流程中的什么位置都能够正确的执行。 + +## DSL + +在 pipeline 流程引擎中,使用 JSON 作为一个流程结构的 DSL,这样的好处是足够的简单和通用,在 Quick Start 中我们通过流程构造器构造出了一个流程对象,流程构造器的职责就是使用 JSON 为我们生成一个流程的描述结构,然后引擎再根据这个描述结构来生成 `Pipeline` 对象。我们可以将 Quick Start 中构造的流程描述结构打印出来看一看: + +```bash +>>> tree = builder.build_tree(start) +>>> tree +{'activities': {'d29a8ef1ec7f367e9724415e03de22ab': {'component': {'code': 'example_component', + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'd29a8ef1ec7f367e9724415e03de22ab', + 'incoming': ['ee7124a9bcf337308aff8fcc0a674782'], + 'name': None, + 'optional': False, + 'outgoing': 'c43b3a60c86b36ac91e177b02abe7800', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '6930365c0c73358dbefb9c2d25922e0f', + 'incoming': ['c43b3a60c86b36ac91e177b02abe7800'], + 'name': None, + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'c43b3a60c86b36ac91e177b02abe7800': {'id': 'c43b3a60c86b36ac91e177b02abe7800', + 'is_default': False, + 'source': 'd29a8ef1ec7f367e9724415e03de22ab', + 'target': '6930365c0c73358dbefb9c2d25922e0f'}, + 'ee7124a9bcf337308aff8fcc0a674782': {'id': 'ee7124a9bcf337308aff8fcc0a674782', + 'is_default': False, + 'source': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'target': 'd29a8ef1ec7f367e9724415e03de22ab'}}, + 'gateways': {}, + 'id': '3a07e1b279a83df2bf15f6b094901303', + 'start_event': {'id': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'incoming': '', + 'name': None, + 'outgoing': 'ee7124a9bcf337308aff8fcc0a674782', + 'type': 'EmptyStartEvent'}} +``` diff --git a/pipeline/docs/user_guide_custom_component.md b/pipeline/docs/user_guide_custom_component.md new file mode 100644 index 0000000000..811cd08fb1 --- /dev/null +++ b/pipeline/docs/user_guide_custom_component.md @@ -0,0 +1,367 @@ +## 自定义组件 + +pipeline 开放了自定义组件的能力,开发者们能够开发针对某些特定业务场景的组件,将其添加到引擎的组件库中,并在 ServiceActivity 中调用他们。如之前的示例所示: + +```python +act = ServiceActivity(component_code='example_component') +``` + +### 开发一个自定义组件 + +#### 1. 使用 APP 统一管理你的组件 + +组件开发的最佳实践是创建一个独立的 APP,并在这个 APP 中单独管理自定义的组件和组件需要使用到的一些公共逻辑。pipeline 提供了快捷命令,能够让我们快速的创建一个用于存放自定义组件的 APP,在 Django 工程根目录下执行以下命令: + +```bash +$ python manage.py create_atoms_app custom_plugins +``` + +该命令会在 Django 工程根目录下生成拥有以下目录结构的 APP: + +```text +custom_plugins +├── __init__.py +├── components +│   ├── __init__.py +│   └── collections +│   ├── __init__.py +│   └── atom.py +├── migrations +│   └── __init__.py +└── static + └── custom_plugins + └── atom.js +``` + +别忘了把新创建的 APP 添加到 Django 配置的 `INSTALLED_APPS` 中: + +```python +INSTALLED_APPS = ( + ... + 'custom_plugins', + ... +) +``` + +#### 2. 编写 Service + +组件服务 `Service` 是组件的核心,`Service` 定义了组件被调用时执行的逻辑,下面让我们实现一个计算传入的参数 `n` 的阶乘,并把结果写到输出中的 `Service`,在 `custom_plugins/components/collections/atom.py` 中输入以下代码: + +```python +import math +from pipeline.core.flow.activity import Service + + +class FactorialCalculateService(Service): + + def execute(self, data, parent_data): + n = data.get_one_of_inputs('n') + if not isinstance(n, int): + data.outputs.ex_data = 'n must be a integer!' + return False + + data.outputs.factorial_of_n = math.factorial(n) + return True + + def inputs_format(self): + return [ + Service.InputItem(name='integer n', key='n', type='int', required=True) + ] + + def outputs_format(self): + return [ + Service.OutputItem(name='factorial of n', key='factorial_of_n', type='int') + ] + +``` + +首先我们继承了 `Service` 基类,并实现了 `execute()` 和 `outputs_format()` 这两个方法,他们的作用如下: + +- `execute`:组件被调用时执行的逻辑。接收 `data` 和 `parent_data` 两个参数,`data` 是当前节点的数据对象,这个数据对象存储了用户传递给当前节点的参数的值以及当前节点输出的值。`parent_data` 则是该节点所属流程对象的数据对象,通常会将一些全局使用的常量存储在该对象中,如当前流程的执行者、流程的开始时间等。 +- `outputs_format`:组件执行成功时输出的字段,每个字段都包含字段名、字段键及字段类型的说明。这个方法必须返回一个 `OutputItem` 的数组,返回的这些信息能够用于确认某个组件在执行成功时输出的数据,便于在流程上下文或后续节点中进行引用。 +- `inputs_format`:组件所需的输入字段,每个字段都包含字段名、字段键、字段类型及是否必填的说明。这个方法必须返回一个 `InputItem` 的数组,返回的这些信息能够用于确认某个组件需要获取什么样的输入数据。 + +下面我们来看一下 `execute()` 方法内部执行的逻辑,首先我们尝试从当前节点数据对象的输出中获取输入参数 `n`,如果获取到的参数不是一个 `int` 实例,那么我们会将异常信息写入到当前节点输出的 `ex_data` 字段中,**这个字段是引擎内部的保留字段,节点执行失败时产生的异常信息都应该写入到该字段中**。随后我们返回 `False` 代表组件本次执行失败,随后节点会进入失败状态: + +``` +n = data.get_one_of_inputs('n') +if not isinstance(n, int): + data.outputs.ex_data = 'n must be a integer!' + return False +``` + +若获取到的 `n` 是一个正常的 `int`,我们就调用 `math.factorial()` 函数来计算 `n` 的阶乘,计算完成后,我们会将结果写入到输出的 `factorial_of_n` 字段中,以供流程中的其他节点使用: + +``` +data.outputs.factorial_of_n = math.factorial(n) +return True +``` + +#### 3. 编写 Component + +完成 `Service` 的编写后,我们需要将其与一个 `Component` 绑定起来,才能够注册到组件库中: + +```python +from pipeline.component_framework.component import Component + +class FactorialCalculateComponent(Component): + name = 'FactorialCalculateComponent' + code = 'fac_cal_comp' + bound_service = FactorialCalculateService + +``` + +我们定义了一个继承自基类 `Component` 的类 `FactorialCalculateComponent`,他拥有以下属性: + +- `name`:组件名。 +- `code`:组件代码,这个代码必须是全局唯一的。 +- `bound_service`:与该组件绑定的 `Service`。 + +这样一来,我们就完成了一个自定义组件的开发。 + +#### 4. 执行一下刚刚编写的组件 + +完成组件的编写后,让我们在流程中执行以下刚刚编写好的组件验证以下: + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser +from pipeline.service import task_service + +# 使用 builder 构造出流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='fac_cal_comp') +act.component.inputs.n = Var(type=Var.PLAIN, value=4) +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 根据流程描述结构创建流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +可以看到,我们能够通过 `component_code` 来引用刚刚编写的组件,然后我们将该组件的输入 `n` 的值设置为 `4`: + +```python +act = ServiceActivity(component_code='fac_cal_comp') +act.component.inputs.n = Var(type=Var.PLAIN, value=4) +``` + +流程运行完后,获取节点的执行结果,可以看到,该节点输出了 `factorial_of_n`,并且值为 24(4 * 3 * 2 *1),这正是我们需要的效果: + +```bash +>>> task_service.get_outputs(act.id) +{'ex_data': None, + 'outputs': {'_loop': 0, '_result': True, 'factorial_of_n': 24}} +``` + +### 组件的行为 + +我们在上一节中定义的 `FactorialCalculateService` 在完成 `execute()` 的执行后即认为该组件已经执行完成。但是在某些场景下,这样的行为并不能满足我们的需求,例如调用第三方系统的接口启动一个任务,并周期性的轮询该任务的状态,随后根据任务状态确认执行结果;或是调用第三方系统启动任务后等待第三方系统回调并根据回调数据确认执行结果。 + +为了满足上述的场景,pipeline 中的组件执行时的行为有以下三种: + +- 单次执行:默认的执行方式,完成 `execute()` 的执行后即认为该组件已经执行完毕。 +- 周期性轮询:完成 `execute()` 的执行后,还会周期性的执行 `schedule()` 方法,直至满足一定的条件为止。 +- 等待回调:完成 `execute()` 的执行后,会等待外部回调,接收到回调后会执行一次 `schedule()` 方法。 + +总结起来,组件的执行方式可以用一条公式概括: `execute + n * schedule`。 + + +#### 单次执行 + +这是组件默认的执行方式,在这种模式下,一旦 `execute()` 方法执行完成后,该组件即视为执行完成。执行结果会根据 `execute()` 的返回值来判断: + +- `False`:执行失败,节点会进入 FAILED 状态。 +- `True` 或 `None`:执行成功,节点会进入 FINISHED 状态。 + +#### 周期性轮询 + +如果我们需要周期性的轮询第三方平台的接口,那么可以使用周期性轮询的执行方式,下面的代码定义了一个周期性轮询的组件服务: + +```python +from pipeline.core.flow.activity import Service, StaticIntervalGenerator + +class ScheduleService(Service): + __need_schedule__ = True + interval = StaticIntervalGenerator(2) + + + def _get_poll_url(self): + pass + + def _poll_status(self, poll_url): + pass + + def execute(self, data, parent_data): + poll_url = self._get_poll_url() + data.outputs.poll_url = poll_url + return True + + def schedule(self, data, parent_data, callback_data=None): + + poll_url = data.get_one_of_outputs('poll_url') + status = self._poll_status(poll_url) + + if status == 0: + self.finish_schedule() + elif status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True + + +``` + +让我们来拆分一下这个组件服务的定义,一个周期性轮询组件服务必须包含两个类属性: + + - `__need_schedule__`: 表示当前组件服务是否需要调度,周期性轮询的方式下必须将该字段设置为 `True` + - `interval`:轮询间隔生成器,周期性轮询方式下该字段必须为 `AbstractIntervalGenerator` 的子类。 + + +我们在 `execute()` 中调用第三方系统获取了用于轮询的 `poll_url`,并将其写入到输出中(**如果在 `execute()` 方法中返回了 `False`,那么当前节点会进入 FAILED 状态,不会进入之后的轮询阶段**): + +```python + def execute(self, data, parent_data): + poll_url = self._get_poll_url() + data.outputs.poll_url = poll_url + return True +``` + +下面看看 `schedule()` 方法的定义,该方法接收三个参数: + +- `data`: 当前节点的数据对象,这个数据对象存储了用户传递给当前节点的参数的值以及当前节点输出的值。 +- `parent_data`: 该节点所属流程对象的数据对象。 +- `callback_data`:回调数据,在等待回调模式下由第三方系统传入的数据。 + +我们在 `schedule()` 方法中,使用在 `execute()` 中设置到输出中的 `poll_url` 来轮询第三方系统的状态,并根据其返回值来决定该次轮询的结果: + +- `True`:当次轮询成功,若轮询已完成则节点会进入 FINISHED 状态,否则仍然处于 RUNNING 状态,等待进入下次轮询。 +- `False`:当次轮询失败,节点会进入 FAILED 状态。 + +当轮询完成后,即可调用 `finish_schedule()` 方法: + +```python + def schedule(self, data, parent_data, callback_data=None): + + poll_url = data.get_one_of_outputs('poll_url') + status = self._poll_status(poll_url) + + if status == 0: + self.finish_schedule() + elif status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +下面让我们了解一下轮询间隔生成器,间隔生成器必须拥有 `next()` 方法,该方法返回一个整数,代表每次轮询时间的时间间隔,单位为秒。一般我们会继承 `AbstractIntervalGenerator` 来定义新的生成器。下面的代码定义了一个间隔线性增长的生成器,轮询时间间隔会根据轮询次数的增长而增长: + +```python +from pipeline.core.flow.activity import AbstractIntervalGenerator + +class LinearIntervalGenerator(AbstractIntervalGenerator): + def next(self): + super(DefaultIntervalGenerator, self).next() + return self.count + +``` + +`AbstractIntervalGenerator` 中的 `count` 属性表示本次轮询的轮次,**在实现自定义的 `next()` 方法时一定要调用父类的 `next()` 方法**。 + +#### 等待回调 + +如果第三方系统提供了回调机制,那我们就可以将组件服务设置为等待回调的模式: + +```python +from pipeline.core.flow.activity import Service + +class WaitCallbackService(Service): + __need_schedule__ = True + + def _external_api_call(self): + pass + + def execute(self, data, parent_data): + self._external_api_call() + return True + + def schedule(self, data, parent_data, callback_data=None): + + status = self.callback_data['status'] + + if status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +让我们来拆分一下这个组件服务的定义,一个等待回调型组件服务必须包含这个类属性: + +- `__need_schedule__`: 表示当前组件服务是否需要调度,等待回调的方式下必须将该字段设置为 `True` + +等待回调型的组件服务于周期轮询型的差异在于 `interval` 这个类属性,周期轮训型的服务该属性的值为间隔生成器,而回调型的服务该属性的值为 `None`。 + +我们在 `execute()` 方法中只做了一次 api 调用,然后就进入了等待回调的状态(**如果在 `execute()` 方法中返回了 `False`,那么当前节点会进入 FAILED 状态,不会进入之后的等待回调阶段**): + +```python + def execute(self, data, parent_data): + self._external_api_call() + return True +``` + +在 `schedule()` 方法中,我们检测第三方系统回调时传入的数据,来判断本次执行是否成功: + +```python + def schedule(self, data, parent_data, callback_data=None): + + status = self.callback_data['status'] + + if status < 0: + data.outputs.ex_data = 'task failed with code: %s' % status + return False + + return True +``` + +### 组件的注册 + +pipeline 会扫描每个已经注册到 Django 中的 APP 下特定的目录来寻找用户定义的组件,这些被扫描的目录能够通过 Django settings 下的 `COMPONENT_PATH` 进行配置: + +```python +... +COMPONENT_PATH = [ + 'path.to.components', + ... +] +... +``` + +而 pipeline 还会尝试扫描已注册 APP 的 `components.collections` 目录,尝试从该目录下所有的 Python 模块中寻找用户定义的组件。 + +现在回过头来看看我们之前创建的 APP,其目录结构与 pipeline 默认扫描的路径一致,所以我们在 `custom_plugins.components.collections.atom` 模块中定义的组件就会自动的被注册到组件库中: + +```text +custom_plugins +├── __init__.py +├── components +│   ├── __init__.py +│   └── collections +│   ├── __init__.py +│   └── atom.py +├── migrations +│   └── __init__.py +└── static + └── custom_plugins + └── atom.js +``` \ No newline at end of file diff --git a/pipeline/docs/user_guide_flow_builder.md b/pipeline/docs/user_guide_flow_builder.md new file mode 100644 index 0000000000..ae62117e11 --- /dev/null +++ b/pipeline/docs/user_guide_flow_builder.md @@ -0,0 +1,283 @@ + +## 流程构造器 + +回到 Quick Start 中的例子,可以看到,流程对象的生成分为两个步骤: + +1. 构造流程描述结构 +2. 根据流程描述结构生成 `Pipeline` 对象 + + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser + +# 1. 构造流程描述结构 +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() + +start.extend(act).extend(end) + +tree = builder.build_tree(start) + +# 2. 根据流程描述结构生成流程对象 +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + +# 执行流程对象 +task_service.run_pipeline(pipeline) +``` + +流程构造器的职责是降低我们构造流程描述结构的成本,可以看到上面的例子中构造的流程只有三个节点,但是通过这三个节点生成的描述结构却十分的复杂: + +```bash +>>> tree = builder.build_tree(start) +>>> tree +{'activities': {'d29a8ef1ec7f367e9724415e03de22ab': {'component': {'code': 'example_component', + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'd29a8ef1ec7f367e9724415e03de22ab', + 'incoming': ['ee7124a9bcf337308aff8fcc0a674782'], + 'name': None, + 'optional': False, + 'outgoing': 'c43b3a60c86b36ac91e177b02abe7800', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '6930365c0c73358dbefb9c2d25922e0f', + 'incoming': ['c43b3a60c86b36ac91e177b02abe7800'], + 'name': None, + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'c43b3a60c86b36ac91e177b02abe7800': {'id': 'c43b3a60c86b36ac91e177b02abe7800', + 'is_default': False, + 'source': 'd29a8ef1ec7f367e9724415e03de22ab', + 'target': '6930365c0c73358dbefb9c2d25922e0f'}, + 'ee7124a9bcf337308aff8fcc0a674782': {'id': 'ee7124a9bcf337308aff8fcc0a674782', + 'is_default': False, + 'source': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'target': 'd29a8ef1ec7f367e9724415e03de22ab'}}, + 'gateways': {}, + 'id': '3a07e1b279a83df2bf15f6b094901303', + 'start_event': {'id': '5740b0a1f8b03f9fb82c3690a41c6b10', + 'incoming': '', + 'name': None, + 'outgoing': 'ee7124a9bcf337308aff8fcc0a674782', + 'type': 'EmptyStartEvent'}} +``` + +如果要手动去拼接这样的一个结构,这简直就是一个灾难,所以,使用流程构造器能够大大的降低我们构造复杂流程的成本。 + +## 构造元素 + +要使用流程构造器,首先我们需要创建构造流程时要使用到的构造元素,**构造元素指的是*流程元素*的替代对象**,每个构造元素都拥有一个到流程元素的唯一映射,且构造元素拥有与其所对应的流程元素相同的类名。下面所展示的代码片段中创建除了三个流程元素:`start`,`act` 及 `end`。 + +```python +from pipeline import builder +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +from pipeline.parser import PipelineParser + +start = EmptyStartEvent() +act = ServiceActivity(component_code='example_component') +end = EmptyEndEvent() +``` + +目前可用的构造元素(等同于可用的流程元素)如下所示: + +- event 类型 + - `EmptyStartEvent`:空开始事件。 + - `EmptyEndEvent`:空结束事件。 +- activity 类型 + - `ServiceActivity`:服务活动。 + - `SubProcess`:子流程。 +- gateway 类型 + - `ParallelGateway`:并行网关。 + - `ExclusiveGateway`:分支网关。 + - `ConditionalParallelGateway`:条件并行网关。 + - `ConvergeGateway`:汇聚网关。 + +## 连接构造元素 + +当我们创建好了构造元素之后,我们还需要将这些构造元素根据我们的需要连接起来,构造元素提供了若干方法来帮助我们应对各种场景下的元素连接操作。 + + +### extend + +`extend()` 方法会创建一条从调用者到传入元素的连接,并返回作为参数传入的构造元素: + + + +```bash +>>> from pipeline.builder import ServiceActivity +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') + +>>> act_1.extend(act_2) + +``` + +通过使用 `extend()` 链式调用能够快速构造出一个简单的串行流程: + +```bash +>>> from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent +>>> start = EmptyStartEvent(name='start') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> end = EmptyEndEvent(name='end') + +>>> start.extend(act_1).extend(act_2).extend(act_3).extend(end) + + +``` + +### connect + +`connect()` 方法能够接收多个构造元素作为参数,并为每一个传入的构造元素构建一条由调用者到该元素的连接,并返回当前调用对象。当我们要构造的流程中含有分支或是并行结构时,这个方法能够帮助我们快速构造出这样的结构: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') + +>>> parallel_gateway.connect(act_1, act_2, act_3) + + +>>> parallel_gateway.outgoing +[, + , + ] +``` + +### converge + +`converge()` 方法会将所有从调用者出发的连接汇聚到传入的节点上,并返回该节点,使用 `converge()` 能够快速的实现从网关发散出去的连接的汇聚操作: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway, ConvergeGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> act_4 = ServiceActivity(name='act_4') +>>> converge_gateway = ConvergeGateway(name='converge_gateway') + +>>> act_3.extend(act_4) + + +>>> parallel_gateway.connect(act_1, act_2, act_3) + + +>>> parallel_gateway.converge(converge_gateway) + + +>>> for act in [act_1, act_2, act_4]: + print(act.outgoing) +[] +[] +[] +``` + +### to + +`to()` 方法是一个辅助方法,其内部什么都不做,只会原封不动的返回传入的构造元素。使用 `to()` 方法能够让我们在链式调用的过程中改变方法的调用者: + +```bash +>>> from pipeline.builder import ServiceActivity, ParallelGateway, ConvergeGateway +>>> parallel_gateway = ParallelGateway(name='parallel_gateway') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> act_4 = ServiceActivity(name='act_4') + +>>> parallel_gateway.connect(act_1, act_2) \ + .to(act_1).extend(act_3) \ + .to(act_2).extend(act_4) + + +>>> parallel_gateway.outgoing +[, + ] + +>>> act_1.outgoing +[] + +>>> act_2.outgoing +[] +``` + +## 生成流程描述结构 + +当完成了构造元素的连接后,我们就能够通过构造元素来生成描述结构了,使用 `build_tree()` 函数,传入开始事件节点,流程构造器就会返回由这些构造元素连接成的流程描述结构: + +```bash +>>> from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent, build_tree +>>> start = EmptyStartEvent(name='start') +>>> act_1 = ServiceActivity(name='act_1') +>>> act_2 = ServiceActivity(name='act_2') +>>> act_3 = ServiceActivity(name='act_3') +>>> end = EmptyEndEvent(name='end') + +>>> start.extend(act_1).extend(act_2).extend(act_3).extend(end) + + +>>> build_tree(start_elem=start) +{'activities': {'15b9a9ffcd7d3d289cb99886c4b66aa0': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': '15b9a9ffcd7d3d289cb99886c4b66aa0', + 'incoming': ['df79daafd73c36f3965a2f8b36058aa5'], + 'name': 'act_1', + 'optional': False, + 'outgoing': 'd67e43325e3b389cba471562bd7e2a73', + 'type': 'ServiceActivity'}, + '7c3cfddb114c35ecbe18b88f5a519c58': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': '7c3cfddb114c35ecbe18b88f5a519c58', + 'incoming': ['d67e43325e3b389cba471562bd7e2a73'], + 'name': 'act_2', + 'optional': False, + 'outgoing': 'abf3d80c6e363156bc4076c7dd0324c4', + 'type': 'ServiceActivity'}, + 'ffe2edb847e335c5861d35c747d6d5f9': {'component': {'code': None, + 'inputs': {}}, + 'error_ignorable': False, + 'id': 'ffe2edb847e335c5861d35c747d6d5f9', + 'incoming': ['abf3d80c6e363156bc4076c7dd0324c4'], + 'name': 'act_3', + 'optional': False, + 'outgoing': 'c12f7f231c353d3ab5762fe6a18f7efb', + 'type': 'ServiceActivity'}}, + 'data': {'inputs': {}, 'outputs': {}}, + 'end_event': {'id': '05c932bb9d8735729c6aaf1aba52ee53', + 'incoming': ['c12f7f231c353d3ab5762fe6a18f7efb'], + 'name': 'end', + 'outgoing': '', + 'type': 'EmptyEndEvent'}, + 'flows': {'abf3d80c6e363156bc4076c7dd0324c4': {'id': 'abf3d80c6e363156bc4076c7dd0324c4', + 'is_default': False, + 'source': '7c3cfddb114c35ecbe18b88f5a519c58', + 'target': 'ffe2edb847e335c5861d35c747d6d5f9'}, + 'c12f7f231c353d3ab5762fe6a18f7efb': {'id': 'c12f7f231c353d3ab5762fe6a18f7efb', + 'is_default': False, + 'source': 'ffe2edb847e335c5861d35c747d6d5f9', + 'target': '05c932bb9d8735729c6aaf1aba52ee53'}, + 'd67e43325e3b389cba471562bd7e2a73': {'id': 'd67e43325e3b389cba471562bd7e2a73', + 'is_default': False, + 'source': '15b9a9ffcd7d3d289cb99886c4b66aa0', + 'target': '7c3cfddb114c35ecbe18b88f5a519c58'}, + 'df79daafd73c36f3965a2f8b36058aa5': {'id': 'df79daafd73c36f3965a2f8b36058aa5', + 'is_default': False, + 'source': 'c582a8976e673ac39db8519a75f8baaa', + 'target': '15b9a9ffcd7d3d289cb99886c4b66aa0'}}, + 'gateways': {}, + 'id': '3149bd721e94377e8baee990e9fc4622', + 'start_event': {'id': 'c582a8976e673ac39db8519a75f8baaa', + 'incoming': '', + 'name': 'start', + 'outgoing': 'df79daafd73c36f3965a2f8b36058aa5', + 'type': 'EmptyStartEvent'}} +``` \ No newline at end of file diff --git a/pipeline/docs/user_guide_flow_management.md b/pipeline/docs/user_guide_flow_management.md new file mode 100644 index 0000000000..33da5bbd05 --- /dev/null +++ b/pipeline/docs/user_guide_flow_management.md @@ -0,0 +1,228 @@ +## 流程管理 + +在前面的章节中,我们学习了如何编排流程以及如何通过流程构造器来快速构造流程描述结构。但是在实际应用中,我们的流程结构一般不会经常发生变化,如果每次执行一个流程都要重新执行一遍流程构造逻辑未免过于麻烦。 + +好在 pipeline 提供了流程管理模型,通过使用**流程模板**和**流程实例**,能够让我们将流程管理的成本降到最低。 + +### 流程模板 + +![分支网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/exclusive_gateway.png) + +假设我们要将上述流程存储起来,并在用户发起执行操作时根据用户传入的参数来执行该流程,如果我们不使用流程模板的话,我们就需要在每次用户发起执行动作时执行以下代码: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +也就是说,我们需要每次都要进行一个流程编排的操作,但是我们的流程结构时不变的,这一步操作就显得有些多余了。但是借助**流程模板**的话,我们就不需要每次都进行流程构造的操作,我们要做的是把一个流程的结构数据保存下来,并在每次执行前根据这个结构化的数据生成流程对象: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + DataInput, + NodeOutput) +from pipeline.models import PipelineTemplate + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = DataInput(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) + +template = PipelineTemplate.objects.create_model(structure_data=tree) +template.template_id # adab2df7cca73e898f2f6c688aa37e24 +same_template = PipelineTemplate.objects.get(template_id=template.template_id) +template.template_id == same_template.template_id # True +``` + +至此,我们就完成了一个流程模板的创建,并且该模板已经被持久到数据库中。 + +### 流程实例 + +当我们拥有了流程模板后,我们就能够通过流程模板来创建流程实例。模板和实例的关系就像是面向对象设计中类和对象的关系,模板描述了一个流程的基本信息,而实例则是根据模板中所描述的信息创建出来的一个“快照”,实例在创建时会根据模板中存储的流程结构数据生成一份新的结构数据并保存下来。 + +```bash +>>> from pipeline.service import task_service +>>> from pipeline.models import PipelineTemplate +>>> template = PipelineTemplate.objects.get(template_id='adab2df7cca73e898f2f6c688aa37e24') +>>> instance = template.gen_instance(inputs={'${input_a}': -1}) +>>> instance.start(executor='me') +>>> task_service.get_state(instance.instance_id) +{'children': {u'583b521fc677309fba0216d0c04928c4': {'finish_time': '2019-04-17 07:49:00', + 'id': u'583b521fc677309fba0216d0c04928c4', + 'loop': 1L, + 'name': u'act_2 or act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'765d2b31fd273571af7bea8f5fdbd5f2': {'finish_time': '2019-04-17 07:49:00', + 'id': u'765d2b31fd273571af7bea8f5fdbd5f2', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'a055740f3a4b3e46b06bb70ff40592fb': {'finish_time': '2019-04-17 07:49:00', + 'id': u'a055740f3a4b3e46b06bb70ff40592fb', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'ad178c995d0d373e8ca13fbc2fdb048f': {'finish_time': '2019-04-17 07:49:00', + 'id': u'ad178c995d0d373e8ca13fbc2fdb048f', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}, + u'b7ffc956b27f3e3f90ba5d4803648550': {'finish_time': '2019-04-17 07:49:00', + 'id': u'b7ffc956b27f3e3f90ba5d4803648550', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'}}, + 'finish_time': '2019-04-17 07:49:00', + 'id': u'1f898831a9483708851c5802aff526fa', + 'loop': 1L, + 'name': u"", + 'retry': 0L, + 'skip': False, + 'start_time': '2019-04-17 07:49:00', + 'state': 'FINISHED'} +``` + +可以看到,我们通过 `instance = template.gen_instance(inputs={'${input_a}': -1})` 来根据模板创建除了流程实例,并修改了流程实例的全局变量;随后,我们调用 `instance` 的 `start()` 方法来启动该流程。 + +这样一来,一旦我们创建了模板,每次执行流程只需要通过该模板生成一个新的实例并启动即可,同时,流程实例也能够降低我们管理已执行的流程的成本。 + +### 使用流程模板来管理子流程 + +使用流程模板来管理流程还有一个好处,即我们能够通过流程模板的 ID 来构造子流程,下面的例子就很好的展示了如何使用已有的流程模板来构造子流程: + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + SubProcess, + Var, + Data, + Params, + NodeOutput) +from pipeline.models import PipelineTemplate + +start = EmptyStartEvent() +params = Params({ + '${input_a}': Var(type=Var.SPLICE, value='${constant_1}') + }) +subproc = SubProcess(template_id='adab2df7cca73e898f2f6c688aa37e24', params=params) +end = EmptyEndEvent() + +start.extend(subproc).extend(end) + +pipeline_data = Data() +pipeline_data.inputs['${constant_1}'] = Var(type=Var.PLAIN, value=-1) + +tree = builder.build_tree(start, data=pipeline_data) + +template = PipelineTemplate.objects.create_model(structure_data=tree) +instance = template.gen_instance() +instance.start(executor='me') +``` + +我们可以把注意力重点放在下面这两行代码上,首先我们创建了一个 `Params` 对象,`Params` 对象允许我们在子流程中引用父流程数据上下文中的变量,下面的代码中我们就创建了一个从子流程中的 `${input_a}` 变量到父流程中 `${constant_1}` 变量的引用。 + +然后,我们建立了一个子流程节点,这个子流程节点直接引用了模板 ID 为 `adab2df7cca73e898f2f6c688aa37e24` 的模板,这里我们直接省去了子流程结构的声明,因为子流程的结构已经存储在流程模板中了。 + +```python +params = Params({ + '${input_a}': Var(type=Var.SPLICE, value='${constant_1}') + }) +subproc = SubProcess(template_id='adab2df7cca73e898f2f6c688aa37e24', params=params) +``` + +最后我们将构造出来的流程结构保存到了一个新的模板中。其实我们可以把构造出来的流程结构打印出来看看: + +```python +{'activities': {'aa3148edbe0e3ac4ac85d60aebbeed4d': {'id': 'aa3148edbe0e3ac4ac85d60aebbeed4d', + 'incoming': ['7bdd64f816f337c4985e55a10d0da10f'], + 'name': None, + 'outgoing': '28e3c65105ae3d868479cc2c99c398fd', + 'params': {'${input_a}': {'type': 'splice', 'value': '${constant_1}'}}, + 'template_id': 'adab2df7cca73e898f2f6c688aa37e24', + 'type': 'SubProcess'}}, + ...} +``` + +不难发现,在子流程节点中我们只存储了模板 ID,而流程实例会在执行前去查询该节点所引用的模板的流程结构,并把这些结构添加到当前流程的结构中,就像我们之前手动构造的子流程节点一样。 + diff --git a/pipeline/docs/user_guide_flow_orchestration.md b/pipeline/docs/user_guide_flow_orchestration.md new file mode 100644 index 0000000000..22f0b6c7e2 --- /dev/null +++ b/pipeline/docs/user_guide_flow_orchestration.md @@ -0,0 +1,567 @@ +## 如何编排流程 + +在开始使用流程引擎之前,我们要先了解一下如何才能够编排出我们想要的流程。 + +### 开始与结束 + +在一个合法的流程中,开始事件和结束事件是必须存在的,也就是说,我们其实是在开始事件节点与结束事件节点之间自由的定义我们的流程结构,然后再将这些节点连接起来: + +```python +from pipeline.builder import EmptyStartEvent, ServiceActivity, EmptyEndEvent + +start = EmptyStartEvent() +act_1 = ServiceActivity() +act_2 = ServiceActivity() +... +end = EmptyEndEvent() + + +start.extend(act1) \ + .extend(act2) \ + ... \ + .extend(end) + +``` + +### 活动 + +活动是流程中最重要的元素,活动节点中能够执行任意的逻辑,例如(发起网络请求,操作数据库,执行命令等等),流程中活动节点的类型及其编排的顺序就决定了这个流程的能力,在 pipeline 中,活动本身是没有定义自身的行为的,其通过与**组件**进行绑定从而获得组件执行的能力,你可以通过开发自定义组件来扩充活动节点的能力范围,pipeline 中的每一个组件都拥有一个唯一的 `code`,通过这个 `code`,在 Quick Start 的例子中,活动通过与 `code` 为 example_component 的组件绑定而获得了该组件的执行能力: + +```python +from pipeline.builder import ServiceActivity + +act = ServiceActivity(component_code='example_component') +``` + +pipeline 提供的 example_component 这个组件在执行的过程中什么都不做: + +```python +class SimpleExampleService(Service): + def execute(self, data, parent_data): + return True + + def outputs_format(self): + return [] + +class SimpleExampleComponent(Component): + name = u'example component' + code = 'example_component' + bound_service = SimpleExampleService +``` + +关于自定义组件的知识,在后续的章节中会详细说明。 + +### 网关 + +网关在流程执行的过程中起到了引流的作用,同时,网关可能会改变流程的执行模式。目前 pipeline 中可用的网关及其作用如下: + + - 分支网关:分支网关可以发散出多条顺序流,每条顺序流会与一个布尔表达式进行绑定,当流程执行到分支网关时,引擎会在当前流程的数据上下文中执行该分支网关中的分支表达式,引擎会选择与第一个结果为真的表达式所绑定的顺序流往下继续执行,分支网关并不会改变流程的执行模式。 + - 并行网关:并行网关可以发散出多条顺序流,同时其会改变当前流程的执行模式,当流程执行到并行网关时,流程会进入并行执行的模式,此时并行网关后的每一条分支会被同时执行,直到其遇到一个汇聚网关。pipeline 中同一个并行网关发散的所有分支都必须汇聚到同一个汇聚网关中。 + - 条件并行网关:条件并行网关可以发散出多条顺序流,并且每条顺序流也会与一个布尔表达式绑定,同时其会改变当前流程的执行模式,当流程执行到条件并行网关时,流程会进入并行执行的模式,但是此时引擎只会执行在当前数据上下文中布尔表达式结果为真的分支。 + - 汇聚网关:汇聚网关能够连接多条输入顺序流,并只能输出一条顺序流。汇聚网关的作用是将其他网关发散出去的多条顺序流汇聚成一条顺序流。 + +#### 并行网关 + +并行网关允许我们让流程的执行进入并行执行的状态,系列代码创建了一个包含三个活动节点(act_1, act_2, act_3)及一个并行网关的流程,并行网关后的 act_1, act_2, act_3 会被引擎并行执行: + +![并行网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/parallel_gateway_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ParallelGateway, + ConvergeGateway) + +start = EmptyStartEvent() +pg = ParallelGateway() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +cg = ConvergeGateway() +end = EmptyEndEvent() + +start.extend(pg).connect(act_1, act_2, act_3).to(pg).converge(cg).extend(end) + +tree = builder.build_tree(start) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +这里需要注意的是,并行网关发散出去的所有分支最后都要汇聚到同一个汇聚网关中,上述代码中的 `to(pg).converge(cg)` 调用实现了这个操作。 + +#### 分支网关 + +分支网关允许我们通过当前流程数据上下文中的数据来决定之后流程执行的方向,下列代码创建了一个包含三个活动节点(act_1, act_2, act_3)及一个分支网关的流程,分支网关会根据 act_1 节点输出到数据上下文中的变量来判断接下来是执行 act_2 还是 act_3 节点: + +![分支网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/exclusive_gateway.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +我们一步步来看这个流程的声明,首先我们创建了绑定了 pipe_example_component 组件的活动节点,该组件会把其接收到的输入参数原封不动的写到当前节点的输出中: + +```python +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +``` + +然后我们创建了分支网关,并设定了其要绑定到输出顺序流中的布尔表达式,`condition` 字段接收一个字典,该字典表示将 value 指定的表达式绑定到第 key 个输出顺序流上,示例中的 `condition` 表示将 `${act_1_output} < 0` 表达式绑定到分支网关的第 `0` 个输出顺序流上。 + +```python +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) +``` + +然后我们完成了流程的编排(分支网关输出顺序流的排列与节点的连接顺序相关,`connect(act_2, act_3)` 调用中参数传递的顺序决定了 `eg -> act_2` 为 eg 的第0个输出顺序流): + +```python +start.extend(act_1).extend(eg).connect(act_2, act_3).to(eg).converge(end) +``` + +完成了流程的编排后,我们需要配置这个流程中数据交互的方式,我们需要做两件事情: + +- 配置 act_1 的输入 +- 配置 act_1 到流程数据上下文的输出 + +首先,我们为 act_1 配置了一个 key 为 `input_a` 的输入参数,该参数会引用流程上下中的 `${input_a}` 变量: + +```python +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') +``` + +然后,我们创建了一个初始的流程数据上下文,并为其设置了一个值为 `0` key 为 `${input_a}` 的全局变量: + +```python +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +``` + +随后,我们声明了一个 key 为 `${act_1_output}` 的全局变量,该变量是对 act_1 输出数据中 key 为 `input_a` 的变量的引用: + +```python +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') +``` + +下图展示了这个流程中数据交换的过程: + +![数据交换](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/eg_data_exchange.png) + +后面就是构造流程描述结构、创建流程对象并执行了: + +```python +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +执行后获取流程状态可以看到,只有 act_2 与 act_3 中只有 act_3 执行了(`'${act_1_output} >= 0'` 绑定的 `eg -> act_3` 顺序流): + +```bash +>>> task_service.get_state(pipeline.id) +{ + ... + u'bdb6de805a183c18a131ea49509197b8': {'finish_time': '2019-03-28 08:08:54', + 'id': u'bdb6de805a183c18a131ea49509197b8', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:08:53', + 'state': 'FINISHED'}, + u'e5bce7ca4da63f6da89e47d012e2773c': {'finish_time': '2019-03-28 08:08:53', + 'id': u'e5bce7ca4da63f6da89e47d012e2773c', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:08:53', + 'state': 'FINISHED'}, + ... + }, + ... +} +``` + +把流程上下文中的全局变量 `${input_a}` 的值改为 `-1` 后再次执行上述代码,可以看到这次只有 act_2 与 act_3 中只有 act_2 执行了: + +```bash +>>> task_service.get_state(pipeline.id) +{ + ... + u'191e41ec8c06365f8d30a06b331ed533': {'finish_time': '2019-03-28 08:20:22', + 'id': u'191e41ec8c06365f8d30a06b331ed533', + 'loop': 1L, + 'name': u'act_2', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:20:22', + 'state': 'FINISHED'}, + u'efd7e68f479438f9941103a89a2130f4': {'finish_time': '2019-03-28 08:20:22', + 'id': u'efd7e68f479438f9941103a89a2130f4', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 08:20:22', + 'state': 'FINISHED'} + ... +} +``` + +如果分支网关中的所有表达式执行结果都不为真,那么流程会进入执行失败的状态。 + +#### 条件并行网关 + +条件并行网关允许我们只并行执行部分在当前上下文下满足特定条件的分支: + +![条件并行网关示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/conditional_pg_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ConditionalParallelGateway, + ConvergeGateway, + Var, + Data, + NodeOutput) + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +cpg = ConditionalParallelGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0', + 2: '${act_1_output} >= 0' + }, + name='[act_2] or [act_3 and act_4]' +) +act_2 = ServiceActivity(component_code='pipe_example_component', name='act_2') +act_3 = ServiceActivity(component_code='pipe_example_component', name='act_3') +act_4 = ServiceActivity(component_code='pipe_example_component', name='act_4') +cg = ConvergeGateway() +end = EmptyEndEvent() + +start.extend(act_1).extend(cpg).connect(act_2, act_3, act_4).to(cpg).converge(cg).extend(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +首先,创建条件并行与创建分支网关类似,都需要为输出顺序流按序绑定布尔表达式: + +```python +cpg = ConditionalParallelGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0', + 2: '${act_1_output} >= 0' + }, + name='[act_2] or [act_3 and act_4]' +) +``` + +由于条件并行网关会改变流程的执行模式,所以最后还是需要将其发散出去的分支汇聚到同一个汇聚网关上: + +```python +extend(cpg).connect(act_2, act_3, act_4).to(cpg).converge(cg) +``` + +查看流程执行状态,可以发现只有 act_3 与 act_4 被执行了: + +```bash +>>> task_service.get_state(pipeline.id) +{'children': {u'377d513285963a40951eea983e62f899': {'finish_time': '2019-03-28 13:48:43', + 'id': u'377d513285963a40951eea983e62f899', + 'loop': 1L, + 'name': u'act_4', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'45d24e4595dd32b3ab65feddc73a75c3': {'finish_time': '2019-03-28 13:48:43', + 'id': u'45d24e4595dd32b3ab65feddc73a75c3', + 'loop': 1L, + 'name': u'act_1', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'a4ee2f04cbdb3e87a5563f2907d5c42f': {'finish_time': '2019-03-28 13:48:43', + 'id': u'a4ee2f04cbdb3e87a5563f2907d5c42f', + 'loop': 1L, + 'name': u'[act_2] or [act_3 and act_4]', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + u'bacfee844f313c7285b0e3f83f187745': {'finish_time': '2019-03-28 13:48:43', + 'id': u'bacfee844f313c7285b0e3f83f187745', + 'loop': 1L, + 'name': u'act_3', + 'retry': 0L, + 'skip': False, + 'start_time': '2019-03-28 13:48:43', + 'state': 'FINISHED'}, + ... + } +} +``` + +同样的,如果条件并行网关中的所有表达式执行结果都不为真,那么流程会进入执行失败的状态。 + +### 子流程 + +子流程允许我们将一个包含多个节点的复杂操作放在一个节点中执行,子流程通常用于做公共流程的抽离,你可以将子流程理解为编程语言中的函数,通过将一些重复的执行逻辑放到子流程中,能够减少重复逻辑的编排: + +![子流程示例](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/subprocess_example.png) + +```python +from pipeline import builder +from pipeline.parser import PipelineParser +from pipeline.service import task_service +from pipeline.builder import (EmptyStartEvent, + ServiceActivity, + EmptyEndEvent, + ExclusiveGateway, + SubProcess, + Var, + Data, + NodeOutput) + + +subproc_start = EmptyStartEvent() +subproc_act = ServiceActivity(component_code='pipe_example_component', name='sub_act') +subproc_end = EmptyEndEvent() + +subproc_start.extend(subproc_act).extend(subproc_end) + +subproc_act.component.inputs.sub_input = Var(type=Var.SPLICE, value='${sub_input}') + +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) + +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) + +sub_pipeline_data_2 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=2)}) +subproc_2 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_2) +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(subproc_1, subproc_2).converge(end) + +act_1.component.inputs.input_a = Var(type=Var.SPLICE, value='${input_a}') + +pipeline_data = Data() +pipeline_data.inputs['${input_a}'] = Var(type=Var.PLAIN, value=0) +pipeline_data.inputs['${act_1_output}'] = NodeOutput(type=Var.SPLICE, source_act=act_1.id, source_key='input_a') + +tree = builder.build_tree(start, data=pipeline_data) +parser = PipelineParser(pipeline_tree=tree) +pipeline = parser.parse() + + +task_service.run_pipeline(pipeline) +``` + +首先我们创建了一个子流程,为了简单说明子流程的作用,示例中的子流程只有一个活动节点,这个节点只有一个 `sub_input` 变量,该变量引用了流程数据上下文中的 `${sub_input}` 变量,也就是说,subproc_act 节点的输出会随着 `${sub_input}` 的变化而变化: + +```python +subproc_start = EmptyStartEvent() +subproc_act = ServiceActivity(component_code='pipe_example_component', name='sub_act') +subproc_end = EmptyEndEvent() + +subproc_start.extend(subproc_act).extend(subproc_end) + +subproc_act.component.inputs.sub_input = Var(type=Var.SPLICE, value='${sub_input}') +``` + +随后,我们创建了一个带有分支网关的流程,这个流程会根据 act_1 节点的输出来选择 subproc_1 或 subproc_2 其中一个子流程执行: + +```python +start = EmptyStartEvent() +act_1 = ServiceActivity(component_code='pipe_example_component', name='act_1') +eg = ExclusiveGateway( + conditions={ + 0: '${act_1_output} < 0', + 1: '${act_1_output} >= 0' + }, + name='act_2 or act_3' +) + +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) + +sub_pipeline_data_2 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=2)}) +subproc_2 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_2) +end = EmptyEndEvent() + +start.extend(act_1).extend(eg).connect(subproc_1, subproc_2).converge(end) +``` + +这里需要说明一下子流程的声明方式,首先我们为子流程创建了一个数据上下文对象,这一步与流程对象的数据上下文声明一致,因为子流程本质上也是一个流程对象: + +```python +sub_pipeline_data_1 = Data(inputs={'${sub_input}': Var(type=Var.PLAIN, value=1)}) +``` + +之后,我们创建了一个子流程节点,这个子流程节点接受子流程的开始节点,ID 替换标志和数据上下文对象。这里需要额外说明的是 `replace_id` 这个参数,由于在引擎中,所有的流程(已执行和未执行的)中的每个节点的 ID 都必须是唯一的,但是每个节点的 ID 在节点创建完成后就不会改变了,所以如果我们在一个流程中需要复用同一个子流程的话,就需要将该子流程中所有的节点 ID 进行一次替换防止节点 ID 冲突: + +```python +subproc_1 = SubProcess(start=subproc_start, replace_id=True, data=sub_pipeline_data_1) +``` + +在流程描述结构生成之后我们可以查看两个子流程中 sub_act 节点的 ID 与 subproc_act 创建时生成的 ID 互不相同: + +```bash +>>> subproc_act.id +'4befcdac9a3d39abb6f55dcb11c1e284' +>>> for act in tree['activities'].values(): + if act['type'] == 'SubProcess': + for act in act['pipeline']['activities'].values(): + if act['name'] == 'sub_act': + print act['id'] +6cba092689af3a57b2679143685dbcde +8db1749af5343ab598fe9fe46d80e234 +``` + +### 流程结构合法性 + +通过使用流程构造器,我们能够构造任意结构的流程,但是在 pipeline 流程引擎中,并不是所有的流程结构都是合法的处于引擎实现上的一些考虑,我们对流程的合法性从三个角度进行了限制: + +- 节点合法性 +- 网关配对合法性 +- 流程合法性 + +只有同时满足以上三种合法性规则的流程才算是一个合法的流程。 + +### 节点合法性 + +节点合法性是对流程中每个节点的出入度的限制: + +- StartEvent + - 入度:`0` + - 出度:`1` +- EndEvent + - 入度:`>= 1` + - 出度:`0` +- ServiceActivity + - 入度:`>= 1` + - 出度:`1` +- SubProcess + - 入度:`>= 1` + - 出度:`1` +- ParallelGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ConditionalParallelGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ExclusiveGateway + - 入度:`>= 1` + - 出度:`>= 1` +- ConvergeGateway + - 入度:`>= 1` + - 出度:`1` + +### 网关配对合法性 + +在了解网关配对的概念前先了解正向边和反向边的概念: + +正向顺序流:源节点与开始节点的最远距离**小于**目标节点与开始节点的距离的顺序流 + +反向顺序流:源节点与开始节点的最远距离**大于**目标节点与开始节点的距离的顺序流 + +分支网关和并行只会与其正向顺序流所能够到达的汇聚网关进行匹配,只有其反向顺序流能够到达的汇聚网关不会被视为该网关匹配的汇聚网关。 + +例如,下图中的汇聚网关2不会被视与分支网关6匹配的的汇聚网关,但其会作为分支网关2的汇聚网关: + +![网关配对](https://raw.githubusercontent.com/homholueng/md_pic/master/pipeline_doc/gateway_match.png) + +在这个前提下,合法的网关的配对必须满足: + +- 并行网关必须且只能与一个汇聚网关进行配对,且汇聚网关只能与一个并行网关进行匹配,与并行网关匹配的汇聚网关必须汇聚该并行网关创建出的所有分支。 +- 分支网关可以且只能与一个汇聚网关进行匹配,也可以不进行匹配,没有匹配汇聚网关的分支网关被称为悬挂分支。(分支网关之间或分支网关与并行网关可以共享汇聚网关) + + +### 流程合法性 + +流程合法性保证了流程在执行的过程中流程合法推进。 + +由开始节点发散出的分支被称为主分支。 + +所有由并行网关发散出的分支被称为并行分支,并行网关发散出的每一个并行分支彼此之间会被判定为不同的分支。 + +流程不能改变分支的属性,分支的属性只能通过网关来进行改变,如通过并行网关将主分支扩展成多个并行分支,通过汇聚网关将来自同一个并行网关的并行分支合并成主分支。 diff --git a/pipeline/engine/admin.py b/pipeline/engine/admin.py index af01985072..7d9109e57b 100644 --- a/pipeline/engine/admin.py +++ b/pipeline/engine/admin.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/engine/api.py b/pipeline/engine/api.py index 854110a779..45b52fb131 100644 --- a/pipeline/engine/api.py +++ b/pipeline/engine/api.py @@ -430,22 +430,6 @@ def get_activity_histories(node_id): return History.objects.get_histories(node_id) -def get_single_state(node_id): - """ - get state for single node - :param node_id: - :return: - """ - s = Status.objects.get(id=node_id) - return { - 'state': s.state, - 'started_time': s.started_time, - 'finished_time': s.archived_time, - 'retry': s.retry, - 'skip': s.skip - } - - @_frozen_check @_node_existence_check def forced_fail(node_id, kill=False, ex_data=''): diff --git a/pipeline/engine/core/runtime.py b/pipeline/engine/core/runtime.py index 2d91e373bb..3c81c48a87 100644 --- a/pipeline/engine/core/runtime.py +++ b/pipeline/engine/core/runtime.py @@ -17,11 +17,12 @@ from pipeline.core.flow.activity import SubProcess from pipeline.engine import states -from pipeline.engine.models import Status, NodeRelationship, FunctionSwitch +from pipeline.engine.models import Status, NodeRelationship, FunctionSwitch, NAME_MAX_LENGTH from pipeline.engine.core.handlers import FLOW_NODE_HANDLERS from pipeline.conf import settings as pipeline_settings logger = logging.getLogger('celery') + RERUN_MAX_LIMIT = pipeline_settings.PIPELINE_RERUN_MAX_TIMES @@ -74,7 +75,7 @@ def run_loop(process): return # try to transit current node to running state - name = (current_node.name or str(current_node.__class__))[:64] + name = (current_node.name or str(current_node.__class__))[:NAME_MAX_LENGTH] action = Status.objects.transit(id=current_node.id, to_state=states.RUNNING, start=True, name=name) # check rerun limit diff --git a/pipeline/engine/models/core.py b/pipeline/engine/models/core.py index 257dd7ba66..246ab14c4c 100644 --- a/pipeline/engine/models/core.py +++ b/pipeline/engine/models/core.py @@ -35,7 +35,9 @@ from pipeline.conf import settings as pipeline_settings logger = logging.getLogger('celery') + RERUN_MAX_LIMIT = pipeline_settings.PIPELINE_RERUN_MAX_TIMES +NAME_MAX_LENGTH = 64 class ProcessSnapshotManager(models.Manager): @@ -694,8 +696,8 @@ def states_for(self, id_list): def prepare_for_pipeline(self, pipeline): cls_str = str(pipeline.__class__) - cls_name = pipeline.__class__.__name__[:64] - self.create(id=pipeline.id, state=states.READY, name=cls_str if len(cls_str) <= 64 else cls_name) + cls_name = pipeline.__class__.__name__[:NAME_MAX_LENGTH] + self.create(id=pipeline.id, state=states.READY, name=cls_str if len(cls_str) <= NAME_MAX_LENGTH else cls_name) def fail(self, node, ex_data): action_res = self.transit(node.id, states.FAILED) @@ -807,7 +809,7 @@ def lock(self, id): class Status(models.Model): id = models.CharField(_(u"节点 ID"), unique=True, primary_key=True, max_length=32) state = models.CharField(_(u"状态"), max_length=10) - name = models.CharField(_(u"节点名称"), max_length=64, default='') + name = models.CharField(_(u"节点名称"), max_length=NAME_MAX_LENGTH, default='') retry = models.IntegerField(_(u"重试次数"), default=0) loop = models.IntegerField(_(u"循环次数"), default=1) skip = models.BooleanField(_(u"是否跳过"), default=False) @@ -946,7 +948,7 @@ def update_celery_info(self, id, lock, celery_id, schedule_date, is_scheduling=F class ScheduleService(models.Model): SCHEDULE_ID_SPLIT_DIVISION = 32 - id = models.CharField(_(u"ID 节点ID+version"), max_length=64, unique=True, primary_key=True) + id = models.CharField(_(u"ID 节点ID+version"), max_length=NAME_MAX_LENGTH, unique=True, primary_key=True) activity_id = models.CharField(_(u"节点 ID"), max_length=32, db_index=True) process_id = models.CharField(_(u"Pipeline 进程 ID"), max_length=32) schedule_times = models.IntegerField(_(u"被调度次数"), default=0) @@ -1073,7 +1075,7 @@ def start_task(self, schedule_id, start_func, kwargs): class ScheduleCeleryTask(models.Model): - schedule_id = models.CharField(_(u"schedule ID"), max_length=64, unique=True, db_index=True) + schedule_id = models.CharField(_(u"schedule ID"), max_length=NAME_MAX_LENGTH, unique=True, db_index=True) celery_task_id = models.CharField(_(u"celery 任务 ID"), max_length=40, default='') objects = ScheduleCeleryTaskManager() diff --git a/pipeline/engine/utils.py b/pipeline/engine/utils.py index 63153e6773..25df95d416 100644 --- a/pipeline/engine/utils.py +++ b/pipeline/engine/utils.py @@ -60,3 +60,16 @@ def __init__(self, result, message, extra=None): self.result = result self.message = message self.extra = extra + + def _as_dict(self): + return { + 'result': self.result, + 'message': self.message, + 'extra': self.extra + } + + def __repr__(self): + return self._as_dict().__repr__() + + def __str__(self): + return self._as_dict().__str__() diff --git a/pipeline/contrib/web/migrations/0002_auto_20180206_1955.py b/pipeline/migrations/0019_delete_variablemodel.py similarity index 79% rename from pipeline/contrib/web/migrations/0002_auto_20180206_1955.py rename to pipeline/migrations/0019_delete_variablemodel.py index 1db6c2735c..d19a2490ab 100644 --- a/pipeline/contrib/web/migrations/0002_auto_20180206_1955.py +++ b/pipeline/migrations/0019_delete_variablemodel.py @@ -10,7 +10,7 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ -# Generated by Django 1.11.2 on 2018-02-06 19:55 + from __future__ import unicode_literals from django.db import migrations @@ -19,15 +19,11 @@ class Migration(migrations.Migration): dependencies = [ - ('pipeline.contrib.web', '0001_initial'), + ('pipeline', '0018_set_has_subprocess'), ] operations = [ - migrations.RemoveField( - model_name='instancescheme', - name='template', - ), migrations.DeleteModel( - name='InstanceScheme', + name='VariableModel', ), ] diff --git a/pipeline/models.py b/pipeline/models.py index 17dfed1582..bc6edaafac 100644 --- a/pipeline/models.py +++ b/pipeline/models.py @@ -393,15 +393,17 @@ def update_template(self, structure_data, **kwargs): setattr(self, key, value) self.save() - def gen_instance(self, **kwargs): + def gen_instance(self, inputs=None, **kwargs): """ 使用该模板创建实例 + @param inputs: 自定义输入 @param kwargs: 其他参数 @return: 实例对象 """ return PipelineInstance.objects.create_instance( template=self, exec_data=copy.deepcopy(self.data), + inputs=inputs, **kwargs ) @@ -507,13 +509,14 @@ class TemplateScheme(models.Model): class InstanceManager(models.Manager): - def create_instance(self, template, exec_data, spread=False, **kwargs): + def create_instance(self, template, exec_data, spread=False, inputs=None, **kwargs): """ 创建流程实例对象 @param template: 流程模板 @param exec_data: 执行用流程数据 @param spread: exec_data 是否已经展开 @param kwargs: 其他参数 + @param inputs: 自定义输入 @return: 实例对象 """ if not spread: @@ -521,6 +524,12 @@ def create_instance(self, template, exec_data, spread=False, **kwargs): else: PipelineTemplate.objects.replace_id(exec_data) + inputs = inputs or {} + + for key, val in inputs.items(): + if key in exec_data['data']['inputs']: + exec_data['data']['inputs'][key]['value'] = val + instance_id = node_uniqid() exec_data['id'] = instance_id exec_snapshot, _ = Snapshot.objects.create_or_get_snapshot(exec_data) @@ -775,20 +784,3 @@ def calculate_tree_info(self, save=False): if save: self.save() - - -class VariableModel(models.Model): - """ - 注册的变量 - """ - code = models.CharField(_(u"变量编码"), max_length=255, unique=True) - status = models.BooleanField(_(u"变量是否可用"), default=True) - - class Meta: - verbose_name = _(u"Variable变量") - verbose_name_plural = _(u"Variable变量") - ordering = ['-id'] - app_label = 'pipeline' - - def __unicode__(self): - return self.code diff --git a/pipeline/service/modbpm_adapter/modbpm_adapter.py b/pipeline/service/modbpm_adapter/modbpm_adapter.py deleted file mode 100644 index aed4c6c899..0000000000 --- a/pipeline/service/modbpm_adapter/modbpm_adapter.py +++ /dev/null @@ -1,217 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -from modbpm.core import AbstractProcess, AbstractTask -from modbpm.core.data.base import get_data_source - -from pipeline.core.flow.activity import ServiceActivity, SubProcess -from pipeline.core.flow.event import EmptyStartEvent, EmptyEndEvent -from pipeline.core.flow.gateway import ExclusiveGateway, ParallelGateway, \ - ConvergeGateway -from pipeline.models import PipelineInstance -from pipeline.core.data import var -from pipeline import exceptions - - -class PipelineProcess(AbstractProcess): - def on_start(self, pipeline, instance_id=None): - end_event_id = pipeline.end_event.id - _auto_loop_node(self, pipeline.start_event, end_event_id, pipeline, instance_id) - self.start(act=EmptyEndEventTask, identifier_code=end_event_id)(instance_id) - # write output - pipeline.spec.context.write_output(pipeline) - # clear context: break circle reference - pipeline.spec.context.clear() - self.finish(data=pipeline.data.get_outputs()) - - -class SerialProcess(AbstractProcess): - def on_start(self, node, end_id, pipeline): - _auto_loop_node(self, node, end_id, pipeline) - self.finish() - - -class ServiceActivityTask(AbstractTask): - def on_start(self, service_act, parent_data): - if service_act.execute(parent_data): - if not service_act.need_schedule(): - self._finish(service_act, parent_data) - - data_source = get_data_source(self._get_model()) - data_source.set('service_act', service_act) - data_source.set('parent_data', parent_data) - self.set_default_scheduler(self.on_schedule) - else: - self.finish(status_code=2) - - def on_schedule(self): - data_source = get_data_source(self._get_model()) - service_act = data_source.get('service_act') - parent_data = data_source.get('parent_data') - - schedule_result = service_act.schedule(parent_data) - if not schedule_result: - self.finish(status_code=2) - if service_act.is_schedule_done(): - self._finish(service_act, parent_data) - - data_source.set('service_act', service_act) - data_source.set('parent_data', parent_data) - - def _finish(self, service_act, parent_data): - data = { - 'data': service_act.data.get_outputs(), - 'parent_data': parent_data.get_outputs() - } - self.finish(data=data) - - -class EmptyTask(AbstractTask): - def on_start(self): - self.finish() - - -class EmptyStartEventTask(EmptyTask): - def on_start(self, instance_id=None): - if instance_id: - PipelineInstance.objects.set_started(instance_id) - self.finish() - - -class EmptyEndEventTask(EmptyTask): - def on_start(self, instance_id=None): - if instance_id: - PipelineInstance.objects.set_finished(instance_id) - self.finish() - - -class EmptyExclusiveGateway(EmptyTask): - pass - - -class EmptyParallelGateway(EmptyTask): - pass - - -class EmptyConvergeGateway(EmptyTask): - pass - - -class SkipUsingTask(AbstractTask): - def on_start(self, *args, **kwargs): - self.finish() - - -def _data_transfer(origin, target_data): - for key, value in origin.items(): - target_data.set_outputs(key, value) - - -def _hydrate_data(act): - data = act.data - inputs = data.get_inputs() - hydrated = {} - for k, v in inputs.items(): - if issubclass(v.__class__, var.Variable): - hydrated[k] = v.get() - data.get_inputs().update(hydrated) - - -def _context_injection(data, context): - for k, v in data.get_inputs().items(): - context.set_global_var(k, v) - hydrated = {} - for k, v in context.variables.items(): - if issubclass(v.__class__, var.Variable): - hydrated[k] = v.get() - context.update_global_var(hydrated) - - -def _auto_loop_node(parent_act, enter_node, exit_node_id, pipeline, instance_id=None): - current_node = enter_node - - while current_node.id != exit_node_id: - if isinstance(current_node, ServiceActivity): - # hydrate all lazy variables - try: - _hydrate_data(current_node) - except Exception as e: - raise exceptions.VariableHydrateException(e.message) - - handler = parent_act.start( - act=ServiceActivityTask, - identifier_code=current_node.id - )(current_node, pipeline.data) - outputs = handler.get() - - # transfer data - if outputs: - _data_transfer(outputs['data'], current_node.data) - _data_transfer(outputs['parent_data'], pipeline.data) - # extract output - pipeline.spec.context.extract_output(current_node) - current_node = current_node.next() - - elif isinstance(current_node, SubProcess): - # inject variable to context - _hydrate_data(current_node) - _context_injection(current_node.data, current_node.pipeline.context) - - handler = parent_act.start( - act=PipelineProcess, - identifier_code=current_node.id - )(current_node.pipeline) - outputs = handler.get() - - # transfer data - if outputs: - _data_transfer(outputs, current_node.data) - - # extract output - pipeline.spec.context.extract_output(current_node) - current_node = current_node.next() - - elif isinstance(current_node, EmptyStartEvent): - parent_act.start(act=EmptyStartEventTask, identifier_code=current_node.id)(instance_id) - current_node = current_node.next() - - elif isinstance(current_node, EmptyEndEvent): - parent_act.start(act=EmptyEndEventTask, identifier_code=current_node.id)(instance_id) - current_node = current_node.next() - - elif isinstance(current_node, ExclusiveGateway): - # determine next node - parent_act.start(act=EmptyExclusiveGateway, identifier_code=current_node.id)() - current_node = current_node.next(data=pipeline.spec.context.variables) - - elif isinstance(current_node, ParallelGateway): - parent_act.start(act=EmptyParallelGateway, identifier_code=current_node.id)() - current_node = _into_parallel_gateway(parent_act, current_node, - pipeline) - - elif isinstance(current_node, ConvergeGateway): - parent_act.start(act=EmptyConvergeGateway, identifier_code=current_node.id)() - current_node = current_node.next() - - return current_node - - -def _into_parallel_gateway(parent_act, gateway, pipeline): - all_target = gateway.outgoing.all_target_node() - with parent_act.run_in_parallel(): - for target in all_target: - parent_act.start(SerialProcess)(target, - gateway.converge_gateway_id, - pipeline) - - return pipeline.node(gateway.converge_gateway_id) diff --git a/pipeline/service/pipeline_engine_adapter/adapter_api.py b/pipeline/service/pipeline_engine_adapter/adapter_api.py index fdd7ce1d95..3edf06862e 100644 --- a/pipeline/service/pipeline_engine_adapter/adapter_api.py +++ b/pipeline/service/pipeline_engine_adapter/adapter_api.py @@ -25,7 +25,7 @@ } -def run_pipeline(pipeline_instance, instance_id=None): +def run_pipeline(pipeline_instance): return api.start_pipeline(pipeline_instance) @@ -156,6 +156,7 @@ def _map(tree): tree.setdefault('children', {}) return { 'id': tree['id'], + 'name': tree['name'], 'state': _get_node_state(tree), 'start_time': _better_time_or_none(tree['started_time']), 'finish_time': _better_time_or_none(tree['archived_time']), diff --git a/pipeline/service/task_service.py b/pipeline/service/task_service.py index 72e8deb7b1..e63b89ee63 100644 --- a/pipeline/service/task_service.py +++ b/pipeline/service/task_service.py @@ -18,8 +18,8 @@ adapter_api = importlib.import_module(settings.PIPELINE_ENGINE_ADAPTER_API) -def run_pipeline(pipeline, instance_id=None): - return adapter_api.run_pipeline(pipeline, instance_id) +def run_pipeline(pipeline): + return adapter_api.run_pipeline(pipeline) def pause_pipeline(pipeline_id): @@ -62,10 +62,6 @@ def get_state(node_id): return adapter_api.get_state(node_id) -def get_topo_tree(pipeline_id): - return adapter_api.get_topo_tree(pipeline_id) - - def get_inputs(act_id): return adapter_api.get_inputs(act_id) @@ -80,7 +76,3 @@ def get_activity_histories(act_id): def callback(act_id, data=None): return adapter_api.callback(act_id, data) - - -def get_single_state(act_id): - return adapter_api.get_single_state(act_id) diff --git a/pipeline/templates/pipeline/home.html b/pipeline/templates/pipeline/home.html deleted file mode 100644 index 42107eddfe..0000000000 --- a/pipeline/templates/pipeline/home.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - - - - -
        -

        - 模板列表 - - 新建模板 - -

        -
        {{item.id}} {{item.category_name}} {{item.edit_time}} + {{getSubflowContent(item)}} {{item.creator_name}} @@ -167,8 +167,8 @@ :to="getNewTaskUrl(item.id)"> {{ i18n.newTemplate }} - - + + - + @@ -195,7 +195,7 @@
        - - - - - - - - - - - - -
        序号模板名称最后修改人修改时间操作
        - -

        - 实例列表 -

        - - - - - - - - - - - - - -
        序号实例名称创建者创建时间操作
        - -
        - - - - - - - - - diff --git a/pipeline/templates/pipeline/instance.html b/pipeline/templates/pipeline/instance.html deleted file mode 100644 index 2247b1021d..0000000000 --- a/pipeline/templates/pipeline/instance.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
        -
        -
        - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pipeline/templates/pipeline/newtask.html b/pipeline/templates/pipeline/newtask.html deleted file mode 100644 index 09649c55ba..0000000000 --- a/pipeline/templates/pipeline/newtask.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
        -
        -
        - - - - - - - - - - - - - - - - - - - - diff --git a/pipeline/tests/builder/flow/test_node_output.py b/pipeline/tests/builder/flow/test_node_output.py index b3f6cd921b..4b27a7c1cd 100644 --- a/pipeline/tests/builder/flow/test_node_output.py +++ b/pipeline/tests/builder/flow/test_node_output.py @@ -21,7 +21,7 @@ class NodeOutputTestCase(TestCase): def test_init(self): output = NodeOutput(type=NodeOutput.PLAIN, value='val', source_act='1', source_key='2') self.assertEqual(output.type, NodeOutput.PLAIN) - self.assertEqual(output.value, 'val') + self.assertEqual(output.value, None) self.assertEqual(output.source_act, '1') self.assertEqual(output.source_key, '2') diff --git a/pipeline/tests/component_framework/test_component.py b/pipeline/tests/component_framework/test_component.py index a3ba920675..adbecb6583 100644 --- a/pipeline/tests/component_framework/test_component.py +++ b/pipeline/tests/component_framework/test_component.py @@ -34,8 +34,11 @@ def outputs(self): self.OutputItem(name='key_2', key='key_2', type='str') ] - def outputs_format(self): - pass + def inputs(self): + return [ + self.InputItem(name='key_3', key='key_3', type='int', required=True), + self.InputItem(name='key_4', key='key_4', type='int', required=False), + ] class CCUpdateHostModuleComponent(Component): name = u'修改主机所属模块' @@ -68,6 +71,13 @@ def test_outputs_format(self): {'name': 'key_2', 'key': 'key_2', 'type': 'str'} ]) + def test_inputs_format(self): + inputs_format = self.component({}).inputs_format() + self.assertEqual(inputs_format, [ + {'name': 'key_3', 'key': 'key_3', 'type': 'int', 'required': True}, + {'name': 'key_4', 'key': 'key_4', 'type': 'int', 'required': False} + ]) + def test_clean_execution_data(self): data = {'test': 'test'} data_after_clean = self.component(data).clean_execute_data(None) diff --git a/pipeline/tests/engine/models/function/test_function_switch.py b/pipeline/tests/engine/models/function/test_function_switch.py index 7189d70129..92bd023e72 100644 --- a/pipeline/tests/engine/models/function/test_function_switch.py +++ b/pipeline/tests/engine/models/function/test_function_switch.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline/tests/engine/test_api.py b/pipeline/tests/engine/test_api.py index 461f463b6c..66254f63bb 100644 --- a/pipeline/tests/engine/test_api.py +++ b/pipeline/tests/engine/test_api.py @@ -741,16 +741,6 @@ def test_get_activity_histories(self): history = api.get_activity_histories(self.node_id) self.assertEqual(history, self.dummy_return) - def test_get_single_state(self): - s = MockStatus() - with patch(PIPELINE_STATUS_GET, MagicMock(return_value=s)): - state = api.get_single_state(self.node_id) - self.assertEqual(state, {'state': s.state, - 'started_time': s.started_time, - 'finished_time': s.archived_time, - 'retry': s.retry, - 'skip': s.skip}) - @patch(PIPELINE_STATUS_GET, MagicMock()) @patch(PIPELINE_FUNCTION_SWITCH_IS_FROZEN, MagicMock(return_value=False)) @patch(PIPELINE_PROCESS_GET, MagicMock(side_effect=PipelineProcess.DoesNotExist)) diff --git a/pipeline/tests/mock.py b/pipeline/tests/mock.py index e3f4ecd5f2..868c575691 100644 --- a/pipeline/tests/mock.py +++ b/pipeline/tests/mock.py @@ -51,9 +51,9 @@ def get_outputs(self): class IdentifyObject(object): - def __init__(self, id=None, name=None): + def __init__(self, id=None, name=''): self.id = id or uniqid() - self.name = name or '' + self.name = name class StartEventObject(IdentifyObject): diff --git a/pipeline/utils/uniqid.py b/pipeline/utils/uniqid.py index ad79d64667..ef6559afad 100644 --- a/pipeline/utils/uniqid.py +++ b/pipeline/utils/uniqid.py @@ -13,6 +13,8 @@ import uuid +from pipeline.conf import settings + def uniqid(): return uuid.uuid3( @@ -23,11 +25,9 @@ def uniqid(): def node_uniqid(): uid = uniqid() - node_uid = 'node%s' % uid - return node_uid[:-4] + return 'n%s' % uid[1:] if settings.UUID_DIGIT_STARTS_SENSITIVE else uid def line_uniqid(): uid = uniqid() - node_uid = 'line%s' % uid - return node_uid[:-4] + return 'l%s' % uid[1:] if settings.UUID_DIGIT_STARTS_SENSITIVE else uid diff --git a/pipeline/contrib/web/__init__.py b/pipeline/variable_framework/__init__.py similarity index 90% rename from pipeline/contrib/web/__init__.py rename to pipeline/variable_framework/__init__.py index 76bf91af38..774b1d4dd3 100644 --- a/pipeline/contrib/web/__init__.py +++ b/pipeline/variable_framework/__init__.py @@ -11,4 +11,4 @@ specific language governing permissions and limitations under the License. """ -default_app_config = 'pipeline.contrib.web.apps.ContribWebConfig' +default_app_config = 'pipeline.variable_framework.apps.VariableFrameworkConfig' diff --git a/pipeline/contrib/web/apps.py b/pipeline/variable_framework/admin.py similarity index 74% rename from pipeline/contrib/web/apps.py rename to pipeline/variable_framework/admin.py index 4692b15854..271f4936ee 100644 --- a/pipeline/contrib/web/apps.py +++ b/pipeline/variable_framework/admin.py @@ -11,10 +11,13 @@ specific language governing permissions and limitations under the License. """ -from django.apps import AppConfig +from django.contrib import admin +from pipeline.variable_framework import models -class ContribWebConfig(AppConfig): - name = 'pipeline.contrib.web' - verbose_name = 'PipelineContribWeb' +@admin.register(models.VariableModel) +class VariableModelAdmin(admin.ModelAdmin): + list_display = ['id', 'code', 'status'] + search_fields = ['code'] + list_filter = ['status'] diff --git a/pipeline/variables/apps.py b/pipeline/variable_framework/apps.py similarity index 79% rename from pipeline/variables/apps.py rename to pipeline/variable_framework/apps.py index eeaa93d4bc..5f32aa3708 100644 --- a/pipeline/variables/apps.py +++ b/pipeline/variable_framework/apps.py @@ -18,20 +18,20 @@ from pipeline.utils.register import autodiscover_collections -class VariablesConfig(AppConfig): - name = 'pipeline.variables' - verbose_name = 'PipelineVariables' +class VariableFrameworkConfig(AppConfig): + name = 'pipeline.variable_framework' + verbose_name = 'PipelineVariableFramework' def ready(self): """ - @summary: 注册公共部分和OPEN_VER下的变量到数据库 + @summary: 注册公共部分和RUN_VER下的变量到数据库 @return: """ - from pipeline.variables.signals.handlers import * # noqa + from pipeline.variable_framework.signals.handlers import * # noqa for path in settings.VARIABLE_AUTO_DISCOVER_PATH: autodiscover_collections(path) - from pipeline.models import VariableModel + from pipeline.variable_framework.models import VariableModel from pipeline.core.data.library import VariableLibrary try: VariableModel.objects.exclude(code__in=VariableLibrary.variables.keys()).update(status=False) diff --git a/pipeline/contrib/web/migrations/0001_initial.py b/pipeline/variable_framework/migrations/0001_initial.py similarity index 58% rename from pipeline/contrib/web/migrations/0001_initial.py rename to pipeline/variable_framework/migrations/0001_initial.py index aa554396ad..b45ef25f55 100644 --- a/pipeline/contrib/web/migrations/0001_initial.py +++ b/pipeline/variable_framework/migrations/0001_initial.py @@ -10,12 +10,10 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ -# Generated by Django 1.11.2 on 2017-11-24 10:43 + from __future__ import unicode_literals from django.db import migrations, models -import django.db.models.deletion -import pipeline.models class Migration(migrations.Migration): @@ -23,19 +21,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('pipeline', '0001_initial'), ] operations = [ migrations.CreateModel( - name='InstanceScheme', + name='VariableModel', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('unique_id', models.CharField(blank=True, max_length=97, unique=True, verbose_name='\u552f\u4e00\u65b9\u6848\u540d\u79f0')), - ('name', models.CharField(max_length=64, verbose_name='\u65b9\u6848\u540d\u79f0')), - ('edit_time', models.DateTimeField(auto_now=True, verbose_name='\u4fee\u6539\u65f6\u95f4')), - ('data', pipeline.models.CompressJSONField(verbose_name='\u65b9\u6848\u6570\u636e')), - ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pipeline.PipelineTemplate', verbose_name='\u5bf9\u5e94\u6a21\u677f ID')), + ('code', models.CharField(max_length=255, unique=True, verbose_name='\u53d8\u91cf\u7f16\u7801')), + ('status', models.BooleanField(default=True, verbose_name='\u53d8\u91cf\u662f\u5426\u53ef\u7528')), ], + options={ + 'verbose_name': 'Variable\u53d8\u91cf', + 'verbose_name_plural': 'Variable\u53d8\u91cf', + }, ), ] diff --git a/pipeline/contrib/web/migrations/__init__.py b/pipeline/variable_framework/migrations/__init__.py similarity index 100% rename from pipeline/contrib/web/migrations/__init__.py rename to pipeline/variable_framework/migrations/__init__.py diff --git a/pipeline/variable_framework/models.py b/pipeline/variable_framework/models.py new file mode 100644 index 0000000000..fca37e844c --- /dev/null +++ b/pipeline/variable_framework/models.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +""" +Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +Edition) available. +Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://opensource.org/licenses/MIT +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. +""" + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + +from pipeline.core.data.library import VariableLibrary + + +class VariableModel(models.Model): + """ + 注册的变量 + """ + code = models.CharField(_(u"变量编码"), max_length=255, unique=True) + status = models.BooleanField(_(u"变量是否可用"), default=True) + + class Meta: + verbose_name = _(u"Variable变量") + verbose_name_plural = _(u"Variable变量") + + def __unicode__(self): + return self.code + + def get_class(self): + return VariableLibrary.get_var_class(self.code) + + @property + def name(self): + return self.get_class().name + + @property + def form(self): + return self.get_class().form + + @property + def type(self): + return self.get_class().type + + @property + def tag(self): + return self.get_class().tag + + @property + def meta_tag(self): + return getattr(self.get_class(), 'meta_tag') diff --git a/pipeline/contrib/web/webresource/__init__.py b/pipeline/variable_framework/signals/__init__.py similarity index 100% rename from pipeline/contrib/web/webresource/__init__.py rename to pipeline/variable_framework/signals/__init__.py diff --git a/pipeline/variables/signals/handlers.py b/pipeline/variable_framework/signals/handlers.py similarity index 90% rename from pipeline/variables/signals/handlers.py rename to pipeline/variable_framework/signals/handlers.py index 011edfa2cc..4521843818 100644 --- a/pipeline/variables/signals/handlers.py +++ b/pipeline/variable_framework/signals/handlers.py @@ -14,14 +14,14 @@ from django.dispatch import receiver from django.db.utils import ProgrammingError from pipeline.core.data.var import LazyVariable -from pipeline.models import VariableModel +from pipeline.variable_framework.models import VariableModel from pipeline.core.signals import pre_variable_register @receiver(pre_variable_register, sender=LazyVariable) -def pre_variable_register_handler(sender, variable_code, variable_cls, **kwargs): +def pre_variable_register_handler(sender, variable_cls, **kwargs): try: - obj, created = VariableModel.objects.get_or_create(code=variable_code, + obj, created = VariableModel.objects.get_or_create(code=variable_cls.code, defaults={ 'status': __debug__, }) diff --git a/pipeline/variables/__init__.py b/pipeline/variables/__init__.py deleted file mode 100644 index 618942a038..0000000000 --- a/pipeline/variables/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -default_app_config = 'pipeline.variables.apps.VariablesConfig' diff --git a/pipeline/contrib/web/urls_web.py b/pipeline_plugins/cmdb_ip_picker/constants.py similarity index 71% rename from pipeline/contrib/web/urls_web.py rename to pipeline_plugins/cmdb_ip_picker/constants.py index e9415dbc9b..b260acf9fe 100644 --- a/pipeline/contrib/web/urls_web.py +++ b/pipeline_plugins/cmdb_ip_picker/constants.py @@ -11,13 +11,15 @@ specific language governing permissions and limitations under the License. """ -from django.conf.urls import url +NO_ERROR = '0' +ERROR_CODE_PREFIX = '35' -from pipeline.contrib.web import views_web -urlpatterns = [ - url(r'^$', views_web.home), - url(r'^template/$', views_web.template), - url(r'^newtask/$', views_web.newtask), - url(r'^instance/$', views_web.instance) -] +class ErrorCode(object): + PARAMETERS_ERROR = '%s01001' % ERROR_CODE_PREFIX + API_GSE_ERROR = '%s10001' % ERROR_CODE_PREFIX + API_CMDB_ERROR = '%s11001' % ERROR_CODE_PREFIX + API_JOB_ERROR = '%s12001' % ERROR_CODE_PREFIX + + +ERROR_CODES = ErrorCode() diff --git a/pipeline_plugins/cmdb_ip_picker/query.py b/pipeline_plugins/cmdb_ip_picker/query.py index 692f07c13c..3979a3592b 100644 --- a/pipeline_plugins/cmdb_ip_picker/query.py +++ b/pipeline_plugins/cmdb_ip_picker/query.py @@ -21,6 +21,7 @@ from gcloud.conf.default_settings import ESB_GET_CLIENT_BY_REQUEST as get_client_by_request from .utils import get_cmdb_topo_tree +from .constants import NO_ERROR, ERROR_CODES def cmdb_search_topo_tree(request, bk_biz_id, bk_supplier_account=''): @@ -70,7 +71,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= host_result = client.cc.search_host(kwargs) if not host_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', kwargs, host_result['message']) - result = {'result': False, 'code': 110, 'message': message} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message} return JsonResponse(result) host_info = host_result['data']['info'] @@ -99,7 +100,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= 'gse.get_agent_status', agent_kwargs, agent_result['message']) - result = {'result': False, 'code': 111, 'message': message} + result = {'result': False, 'code': ERROR_CODES.API_GSE_ERROR, 'message': message} return JsonResponse(result) agent_data = agent_result['data'] @@ -108,7 +109,7 @@ def cmdb_search_host(request, bk_biz_id, bk_supplier_account='', bk_supplier_id= agent_info = agent_data.get('%s:%s' % (host['cloud'][0]['id'], host['bk_host_innerip']), {}) host['agent'] = agent_info.get('bk_agent_alive', -1) - result = {'result': True, 'code': 0, 'data': data} + result = {'result': True, 'code': NO_ERROR, 'data': data} return JsonResponse(result) diff --git a/pipeline_plugins/cmdb_ip_picker/utils.py b/pipeline_plugins/cmdb_ip_picker/utils.py index 857018890d..c82a50306f 100644 --- a/pipeline_plugins/cmdb_ip_picker/utils.py +++ b/pipeline_plugins/cmdb_ip_picker/utils.py @@ -11,75 +11,52 @@ specific language governing permissions and limitations under the License. """ +import copy + from django.utils.translation import ugettext_lazy as _ from pipeline_plugins.components.utils import handle_api_error from gcloud.conf.default_settings import ESB_GET_CLIENT_BY_USER as get_client_by_user +from .constants import NO_ERROR, ERROR_CODES -def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): - selector = kwargs['selectors'][0] - filters = kwargs['filters'] - excludes = kwargs['excludes'] - - cc_kwargs = { - 'bk_biz_id': bk_biz_id, - 'bk_supplier_account': bk_supplier_account, - 'condition': [{ - 'bk_obj_id': 'module', - 'fields': ['bk_module_id', 'bk_module_name'], - 'condition': [] - }] - } +def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): + """ + @summary:根据前端表单数据获取合法的IP + @param username: + @param bk_biz_id: + @param bk_supplier_account: + @param kwargs: + @return: + """ topo_result = get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account) if not topo_result['result']: return topo_result biz_topo_tree = topo_result['data'][0] - if selector == 'topo': - topo = kwargs['topo'] - if not topo: - return {'result': False, 'data': [], 'message': ''} - # transfer topo to modules - topo_dct = {} - for tp in topo: - topo_dct.setdefault(tp['bk_obj_id'], []).append(tp['bk_inst_id']) - topo_objects = get_objects_of_topo_tree(biz_topo_tree, topo_dct) - topo_modules = [] - for obj in topo_objects: - topo_modules += get_modules_of_bk_obj(obj) - topo_modules_id = get_modules_id(topo_modules) - - condition = [{ - 'field': 'bk_module_id', - 'operator': '$in', - 'value': topo_modules_id - }] - cc_kwargs['condition'][0]['codition'] = condition - - else: - host_list = kwargs['ip'] - if not host_list: - return [] - ip_list = ['%s:%s' % (str(host['cloud'][0]['id']), host['bk_host_innerip']) for host in host_list] - cc_kwargs['condition'].append({ - "bk_obj_id": "host", - "fields": ["bk_host_id", "bk_host_innerip", "bk_host_outerip", "bk_host_name"], - "condition": [{ - "field": "bk_host_innerip", - "operator": "$in", - "value": [host['bk_host_innerip'] for host in host_list] - }] - }) + build_result = build_cmdb_search_host_kwargs(bk_biz_id, + bk_supplier_account, + kwargs, + biz_topo_tree) + if not build_result['result']: + return {'result': False, 'code': ERROR_CODES.PARAMETERS_ERROR, 'data': [], 'message': build_result['message']} + cmdb_kwargs = build_result['data'] client = get_client_by_user(username) - host_result = client.cc.search_host(cc_kwargs) + host_result = client.cc.search_host(cmdb_kwargs) if not host_result: - message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', cc_kwargs, host_result['message']) + message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_host', cmdb_kwargs, host_result['message']) return {'result': False, 'data': [], 'message': message} host_info = host_result['data']['info'] + + # IP选择器 + selector = kwargs['selectors'][0] + if selector == 'ip': + ip_list = ['%s:%s' % (str(host['cloud'][0]['id']), host['bk_host_innerip']) for host in kwargs['ip']] + else: + ip_list = [] data = [] for host in host_info: host_modules_id = get_modules_id(host['module']) @@ -94,23 +71,29 @@ def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): 'host_modules_id': host_modules_id }) + # 筛选条件 + filters = kwargs['filters'] if filters: filters_dct = {} for ft in filters: filters_dct.setdefault(ft['field'], []) - filters_dct[ft['field']] += ft['value'] - filter_modules = get_modules_of_filters(biz_topo_tree, filters_dct) + filters_dct[ft['field']] += format_condition_value(ft['value']) + new_topo_tree = process_topo_tree_by_condition(biz_topo_tree, filters_dct) + filter_modules = get_modules_by_condition(new_topo_tree, filters_dct) filter_modules_id = get_modules_id(filter_modules) data = [host for host in data if set(host['host_modules_id']) & set(filter_modules_id)] if 'ip' in filters_dct: data = [host for host in data if host['bk_host_innerip'] in filters_dct['ip']] + # 过滤条件 + excludes = kwargs['excludes'] if excludes: excludes_dct = {} - for ex in filters: + for ex in excludes: excludes_dct.setdefault(ex['field'], []) - excludes_dct[ex['field']] += ex['value'] - exclude_modules = get_modules_of_filters(biz_topo_tree, excludes_dct) + excludes_dct[ex['field']] += format_condition_value(ex['value']) + new_topo_tree = process_topo_tree_by_condition(biz_topo_tree, excludes_dct) + exclude_modules = get_modules_by_condition(new_topo_tree, excludes_dct) exclude_modules_id = get_modules_id(exclude_modules) data = [host for host in data if not set(host['host_modules_id']) & set(exclude_modules_id)] if 'ip' in excludes_dct: @@ -118,32 +101,139 @@ def get_ip_picker_result(username, bk_biz_id, bk_supplier_account, kwargs): result = { 'result': True, - 'code': 0, + 'code': NO_ERROR, 'data': data, 'message': '' } return result +def format_condition_value(conditions): + """ + @summary: + ['111', '222'] -> ['111', '222'] + ['111', '222\n333'] -> ['111', '222', '333'] + ['', '222\n', ' 333 '] -> ['222', '333'] + @param conditions: + @return: + """ + formatted = [] + for val in conditions: + formatted += [item for item in val.strip().split('\n') if item] + return formatted + + +def build_cmdb_search_host_kwargs(bk_biz_id, bk_supplier_account, kwargs, biz_topo_tree): + """ + @summary: 组装配置平台请求参数 + @param bk_biz_id: + @param bk_supplier_account: + @param kwargs: + @param biz_topo_tree: + @return: + """ + cmdb_kwargs = { + 'bk_biz_id': bk_biz_id, + 'bk_supplier_account': bk_supplier_account, + 'condition': [{ + 'bk_obj_id': 'module', + 'fields': ['bk_module_id', 'bk_module_name'], + 'condition': [] + }] + } + + selector = kwargs['selectors'][0] + if selector == 'topo': + topo = kwargs['topo'] + if not topo: + return {'result': False, 'data': {}, 'message': 'dynamic topo selector is empty'} + # transfer topo to modules + topo_dct = {} + for tp in topo: + topo_dct.setdefault(tp['bk_obj_id'], []).append(tp['bk_inst_id']) + topo_objects = get_objects_of_topo_tree(biz_topo_tree, topo_dct) + topo_modules = [] + for obj in topo_objects: + topo_modules += get_modules_of_bk_obj(obj) + topo_modules_id = get_modules_id(topo_modules) + + condition = [{ + 'field': 'bk_module_id', + 'operator': '$in', + 'value': topo_modules_id + }] + cmdb_kwargs['condition'][0]['condition'] = condition + + else: + host_list = kwargs['ip'] + if not host_list: + return {'result': False, 'data': [], 'message': 'static ip is empty'} + cmdb_kwargs['condition'].append({ + "bk_obj_id": "host", + "fields": ["bk_host_id", "bk_host_innerip", "bk_host_outerip", "bk_host_name"], + "condition": [{ + "field": "bk_host_innerip", + "operator": "$in", + "value": [host['bk_host_innerip'] for host in host_list] + }] + }) + return {'result': True, 'data': cmdb_kwargs, 'message': ''} + + +def get_modules_of_bk_obj(bk_obj): + """ + @summary: 获取配置平台某个节点下的所有叶子(模块)节点 + @param bk_obj: + @return: + """ + modules = [] + if bk_obj['bk_obj_id'] == 'module': + modules.append(bk_obj) + for child in bk_obj.get('child', []): + modules += get_modules_of_bk_obj(child) + return modules + + def get_modules_id(modules): + """ + @summary: 将模块列表转换成 id 格式 + @param modules: + @return: + """ return [mod.get('bk_module_id') or mod.get('bk_inst_id') for mod in modules] -def get_modules_of_filters(bk_obj, filters_dct): +def process_topo_tree_by_condition(topo_tree, condition): + """ + @summary: 根据过滤条件保留或者排除空闲机模块 + @param topo_tree: + @param condition: + @return: + """ + # 筛选条件只包含set、module,不需要处理 topo_tree + if not (set(condition.keys()) - {'set', 'module'}): + return topo_tree + # 筛选条件包含非set、module,那么一定不包含 topo_tree 中的空闲机池集群 + new_tree = copy.deepcopy(topo_tree) + new_tree['child'] = [child for child in new_tree['child'] if child['bk_obj_id'] not in ['set', 'module']] + return new_tree + + +def get_modules_by_condition(bk_obj, condition): """ @summary: 获取拓扑树中满足条件的所有叶子(模块)节点 @param bk_obj: - @param filters_dct: + @param condition: @return: """ modules = [] if bk_obj['bk_obj_id'] == 'module': - if 'module' not in filters_dct or bk_obj['bk_inst_name'] in filters_dct['module']: + if 'module' not in condition or bk_obj['bk_inst_name'] in condition['module']: modules.append(bk_obj) else: - if bk_obj['bk_obj_id'] not in filters_dct or bk_obj['bk_inst_name'] in filters_dct[bk_obj['bk_obj_id']]: + if bk_obj['bk_obj_id'] not in condition or bk_obj['bk_inst_name'] in condition[bk_obj['bk_obj_id']]: for child in bk_obj.get('child', []): - modules += get_modules_of_filters(child, filters_dct) + modules += get_modules_by_condition(child, condition) return modules @@ -163,21 +253,14 @@ def get_objects_of_topo_tree(bk_obj, obj_dct): return bk_objects -def get_modules_of_bk_obj(bk_obj): +def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): """ - @summary: 获取配置平台某个节点下的所有叶子(模块)节点 - @param bk_obj: + @summary: 从 CMDB API 获取业务完整拓扑树,包括空闲机池 + @param username: + @param bk_biz_id: + @param bk_supplier_account: @return: """ - modules = [] - if bk_obj['bk_obj_id'] == 'module': - modules.append(bk_obj) - for child in bk_obj.get('child', []): - modules += get_modules_of_bk_obj(child) - return modules - - -def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): client = get_client_by_user(username) kwargs = { 'bk_biz_id': bk_biz_id, @@ -186,13 +269,13 @@ def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): topo_result = client.cc.search_biz_inst_topo(kwargs) if not topo_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.search_biz_inst_topo', kwargs, topo_result['message']) - result = {'result': False, 'code': 100, 'message': message, 'data': []} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message, 'data': []} return result inter_result = client.cc.get_biz_internal_module(kwargs) if not inter_result['result']: message = handle_api_error(_(u"配置平台(CMDB)"), 'cc.get_biz_internal_module', kwargs, inter_result['message']) - result = {'result': False, 'code': 101, 'message': message, 'data': []} + result = {'result': False, 'code': ERROR_CODES.API_CMDB_ERROR, 'message': message, 'data': []} return result inter_data = inter_result['data'] @@ -213,4 +296,4 @@ def get_cmdb_topo_tree(username, bk_biz_id, bk_supplier_account): } for mod in inter_data['module']] } data[0]['child'].insert(0, default_set) - return {'result': True, 'code': 0, 'data': data, 'messsage': ''} + return {'result': True, 'code': NO_ERROR, 'data': data, 'messsage': ''} diff --git a/pipeline_plugins/components/collections/sites/open/bk.py b/pipeline_plugins/components/collections/sites/open/bk.py index d51020d1ea..690bbc063e 100644 --- a/pipeline_plugins/components/collections/sites/open/bk.py +++ b/pipeline_plugins/components/collections/sites/open/bk.py @@ -124,7 +124,8 @@ def _email_args(self, receivers, title, content): return { 'receiver__username': receivers, 'title': title, - 'content': content + # 保留通知内容中的换行和空格 + 'content': u"
        %s
        " % content } def _weixin_args(self, receivers, title, content): diff --git a/pipeline_plugins/components/collections/sites/open/job.py b/pipeline_plugins/components/collections/sites/open/job.py index 2dbc2a6388..edb341c385 100644 --- a/pipeline_plugins/components/collections/sites/open/job.py +++ b/pipeline_plugins/components/collections/sites/open/job.py @@ -133,10 +133,14 @@ def execute(self, data, parent_data): ip_str=_value['value'], use_cache=False) ip_list = [{'ip': _ip['InnerIP'], 'bk_cloud_id': _ip['Source']} for _ip in var_ip['ip_result']] - global_vars.append({ - 'name': _value['name'], - 'ip_list': ip_list, - }) + if _value['value'].strip() and not ip_list: + data.outputs.ex_data = _(u"无法从配置平台(CMDB)查询到对应 IP,请确认输入的 IP 是否合法") + return False + if ip_list: + global_vars.append({ + 'name': _value['name'], + 'ip_list': ip_list, + }) else: global_vars.append({ 'name': _value['name'], diff --git a/pipeline_plugins/components/query/common_query.py b/pipeline_plugins/components/query/common_query.py deleted file mode 100644 index 24f4cd116c..0000000000 --- a/pipeline_plugins/components/query/common_query.py +++ /dev/null @@ -1,130 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -Edition) available. -Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at -http://opensource.org/licenses/MIT -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. -""" - -import logging - -from django.http import JsonResponse -from django.utils.translation import ugettext_lazy as _ - -from gcloud.core.models import Business -from gcloud.conf import settings as gcloud_settings - -logger = logging.getLogger('root') - - -def get_client_by_request(*args, **kwargs): - client = gcloud_settings.ESB_GET_CLIENT_BY_REQUEST(*args, **kwargs) - if hasattr(client, 'set_bk_api_ver'): - client.set_bk_api_ver('') - return client - - -def cc_get_set_list(request, biz_cc_id): - """ - @summary: 获取配置平台的业务所有集群列表 - @param request: - @param biz_cc_id: - @return: - """ - client = get_client_by_request(request) - kwargs = { - 'app_id': biz_cc_id, - } - cc_result = client.cc.get_topo_tree_by_app_id(kwargs) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的业务[app_id=%s]的集群拓扑接口cc.get_topo_tree_by_app_id返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - set_list = [{ - 'value': '0', - 'text': _(u"所有集群(all)"), - }] - set_data = cc_result['data'].get('Children', []) - for _set in set_data: - set_list.append({ - 'value': _set['SetID'], - 'text': _set['SetName'] - }) - return JsonResponse({'result': True, 'data': set_list}) - - -def cc_get_module_name_list(request, biz_cc_id): - """ - @summary: 获取配置平台的业务所有模块名称列表 - @param request: - @param biz_cc_id: - @return: - """ - client = get_client_by_request(request) - kwargs = { - 'app_id': biz_cc_id, - } - cc_result = client.cc.get_modules(kwargs) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的业务[app_id=%s]的所有模块接口cc.get_modules返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - module_name_list = [_(u"所有模块(all)")] - for mod in cc_result['data']: - if mod['ModuleName'] not in module_name_list: - module_name_list.append(mod['ModuleName']) - module_name_list = [{'value': mod, 'text': mod} for mod in module_name_list] - return JsonResponse({'result': True, 'data': module_name_list}) - - -def cc_get_plat_id(request, biz_cc_id): - client = get_client_by_request(request) - biz = Business.objects.get(cc_id=biz_cc_id) - cc_owner = biz.cc_owner - cc_result = client.cc.get_plat_id({'plat_company': biz.cc_company}) - if not cc_result['result']: - message = _(u"查询配置平台(CMDB)的云区域列表接口cc.get_plat_id返回失败: %s") % ( - biz_cc_id, cc_result['message']) - logger.error(message) - result = { - 'result': False, - 'data': [], - 'message': message - } - return JsonResponse(result) - - data = [] - for plat in cc_result['data']: - if 'plat_id' in plat: - plat_id = plat['plat_id'] - plat_company = plat['plat_company'] - plat_name = plat['plat_name'] - else: - plat_id = plat['platId'] - plat_company = plat['platCompany'] - plat_name = plat['platName'] - if plat_company == cc_owner: - data.append({ - 'value': plat_id, - 'text': plat_name, - }) - return JsonResponse({'result': True, 'data': data}) diff --git a/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js b/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js index bca159a795..627a72e5e1 100644 --- a/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js +++ b/pipeline_plugins/components/static/components/atoms/sites/open/job/job_execute_task.js @@ -75,6 +75,7 @@ type: "change", action: function (value) { var $this = this; + this.changeHook(false); this.set_loading(true); $.ajax({ url: $.context.site_url + 'pipeline/job_get_job_detail_by_biz/' + $.context.biz_cc_id + '/' + value + '/', diff --git a/pipeline_plugins/components/urls.py b/pipeline_plugins/components/urls.py index ba0067dfd7..06916d5908 100644 --- a/pipeline_plugins/components/urls.py +++ b/pipeline_plugins/components/urls.py @@ -11,14 +11,6 @@ specific language governing permissions and limitations under the License. """ -from django.conf.urls import url - from pipeline_plugins.components import query -from pipeline_plugins.components.query import common_query -urlpatterns = [ - url(r'^cc_get_set_list/(?P\d+)/$', common_query.cc_get_set_list), - url(r'^cc_get_module_name_list/(?P\d+)/$', common_query.cc_get_module_name_list), - url(r'^cc_get_plat_id/(?P\d+)/$', common_query.cc_get_plat_id), -] -urlpatterns += query.urlpatterns +urlpatterns = query.urlpatterns diff --git a/pipeline_plugins/components/utils/__init__.py b/pipeline_plugins/components/utils/__init__.py index fa24f6f85a..b3d6b5c5b7 100644 --- a/pipeline_plugins/components/utils/__init__.py +++ b/pipeline_plugins/components/utils/__init__.py @@ -1,4 +1,3 @@ -# -*- coding:utf-8 -*- # -*- coding: utf-8 -*- """ Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community diff --git a/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py b/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py index ff07c1385c..1474088ef6 100644 --- a/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py +++ b/pipeline_plugins/tests/cmdb_ip_picker/test_utils.py @@ -15,10 +15,13 @@ from mock import patch from pipeline_plugins.cmdb_ip_picker.utils import ( get_modules_id, - get_modules_of_filters, + get_modules_by_condition, get_modules_of_bk_obj, get_objects_of_topo_tree, - get_cmdb_topo_tree) + get_cmdb_topo_tree, + process_topo_tree_by_condition, + format_condition_value +) from pipeline_plugins.tests.utils import mock_get_client_by_user @@ -112,6 +115,11 @@ def setUp(self): "bk_inst_name": u"蓝鲸" } + def test_format_condition_value(self): + self.assertEquals(format_condition_value(['111', '222']), ['111', '222']) + self.assertEquals(format_condition_value(['111', '222\n333']), ['111', '222', '333']) + self.assertEquals(format_condition_value(['', '222\n', ' 333 ']), ['222', '333']) + def test_get_modules_id(self): modules = [ { @@ -131,24 +139,39 @@ def test_get_modules_id(self): ] self.assertEquals(get_modules_id(modules), [8, 9]) - def test_get_modules_of_filters(self): + def test_process_topo_tree_by_condition(self): + condition = {'group': [1, 3]} + expected = { + "default": 0, + "bk_obj_name": u"业务", + "bk_obj_id": "biz", + "child": [], + "bk_inst_id": 2, + "bk_inst_name": u"蓝鲸" + } + self.assertEquals(process_topo_tree_by_condition(self.topo_tree, condition), expected) + + condition = {'set': [1, 3]} + self.assertEquals(process_topo_tree_by_condition(self.topo_tree, condition), self.topo_tree) + + def test_get_modules_by_condition(self): filters_dct = { 'set': [u"空闲机池", 'set3'] } - modules1 = get_modules_of_filters(self.topo_tree, filters_dct) + modules1 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules1]), {3, 4, 8, 9}) filters_dct = { 'set': [u"空闲机池", 'set3'], 'module': [u"空闲机", 'test1', 'test2'] } - modules2 = get_modules_of_filters(self.topo_tree, filters_dct) + modules2 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules2]), {3, 8, 9}) filters_dct = { 'module': [u"空闲机", 'test1', 'test2'] } - modules2 = get_modules_of_filters(self.topo_tree, filters_dct) + modules2 = get_modules_by_condition(self.topo_tree, filters_dct) self.assertEquals(set([mod['bk_inst_id'] for mod in modules2]), {3, 5, 6, 8, 9}) def test_get_objects_of_topo_tree(self): diff --git a/pipeline/service/modbpm_adapter/__init__.py b/pipeline_plugins/tests/components/__init__.py similarity index 100% rename from pipeline/service/modbpm_adapter/__init__.py rename to pipeline_plugins/tests/components/__init__.py diff --git a/pipeline/variables/signals/__init__.py b/pipeline_plugins/tests/components/utils/sites/open/__init__.py similarity index 100% rename from pipeline/variables/signals/__init__.py rename to pipeline_plugins/tests/components/utils/sites/open/__init__.py diff --git a/pipeline_plugins/tests/components/utils/sites/open/test_utils.py b/pipeline_plugins/tests/components/utils/sites/open/test_utils.py index b67d7652c6..2062449a58 100644 --- a/pipeline_plugins/tests/components/utils/sites/open/test_utils.py +++ b/pipeline_plugins/tests/components/utils/sites/open/test_utils.py @@ -17,7 +17,6 @@ from pipeline_plugins.components import utils from pipeline_plugins.tests.utils import mock_get_client_by_user -from pipeline_plugins.tests.utils import host_list_data return_success = True @@ -41,184 +40,3 @@ def test_get_ip_by_regex(self): self.assertEqual(utils.get_ip_by_regex('1.1.1.1,2.2.2.2,3.3.3.3'), ['1.1.1.1', '2.2.2.2', '3.3.3.3']) - - def test_local_file_path_of_time(self): - self.assertEqual(utils.get_local_file_path_of_time(biz_cc_id=789, time_str='time_str'), - '/data/TEST_UPLOAD_TEST/APP_CODE/bkupload/789/time_str/') - - def test_cc_get_inner_ip_by_module_id(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_inner_ip_by_module_id(username='test', biz_cc_id=789, module_id_list=[]), - [{ - 'host': { - 'bk_host_innerip': '1.0.0.1', - 'bk_host_outerip': '1.0.0.1', - 'bk_host_name': '1.0.0.1', - 'bk_host_id': 1, - 'bk_cloud_id': { - 'bk_obj_name': '', - 'id': '0', - 'bk_obj_id': 'plat', - 'bk_obj_icon': '', - 'bk_inst_id': 0, - 'bk_inst_name': 'default area' - } - }, - 'module': [ - { - 'bk_module_id': 2, - 'bk_module_name': 'test2' - } - ] - }] - ) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_inner_ip_by_module_id(username='test', biz_cc_id=789, module_id_list=[]), []) - - def test_cc_get_set_ids_by_names(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name2']), - ['1', '2']) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name3']), - ['1']) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name1'), '1') - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name3'), '') - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names=['name1', 'name2']), - []) - self.assertEqual(utils.cc_get_set_ids_by_names(username='test', biz_cc_id=789, set_names='name1'), '') - - def test_cc_get_ips_by_set_and_module(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=[], - set_name_list=[], - module_name_list=['1']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=None, - set_name_list=None, - module_name_list=['1']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['1'], - module_name_list=[]), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['1'], - module_name_list=None), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['0'], - set_name_list=['all'], - module_name_list=['all']), 'data') - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=[], - set_name_list=['name3'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['name3'], - module_name_list=['all']), 'data') - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['1'], - set_name_list=['name1'], - module_name_list=['module_name']), 'data') - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['0'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name3'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name1'], - set_name_list=['all'], - module_name_list=['all']), []) - self.assertEqual(utils.cc_get_ips_by_set_and_module(username='test', - biz_cc_id=789, - set_id_list=['name1'], - set_name_list=['all'], - module_name_list=['module_name']), []) - - def test_cc_get_role_users(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['data'], list({'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'})) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role3'], - more_users='')['data'], list({'a', 'b', 'c', 'd'})) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role3'], - more_users='')['data'], []) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['data'], []) - self.assertEqual(utils.cc_get_role_users(username='test', - biz_cc_id=789, - user_roles=['role1', 'role2'], - more_users='')['result'], False) - - def test_cc_get_ip_list_by_biz_and_user(self): - mock_get_client_by_user.success = True - self.assertEqual(utils.cc_get_ip_list_by_biz_and_user(username='test', biz_cc_id=789), host_list_data) - mock_get_client_by_user.success = False - self.assertEqual(utils.cc_get_ip_list_by_biz_and_user(username='test', biz_cc_id=790), []) - - def test_cc_get_ips_info_by_str(self): - mock_get_client_by_user.success = True - ip_result = host_list_data - r1 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=789, - ip_str='1.1.1.1, 2.2.2.2') - r2 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=790, - ip_str='1.1.1.1, 2.2.2.2, 3.3.3.3') - r3 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=791, - ip_str='SetName1|ModuleName1|1.1.1.1, ' - 'SetName2|ModuleName2|2.2.2.2, ' - 'set|module|3.3.3.3') - r4 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=792, - ip_str='Source1:1.1.1.1, Source2:2.2.2.2, 3:3.3.3.3') - self.assertEqual(r1['ip_result'], ip_result) - self.assertEqual(r1['invalid_ip'], []) - self.assertEqual(r2['ip_result'], ip_result) - self.assertEqual(r2['invalid_ip'], ['3.3.3.3']) - self.assertEqual(r3['ip_result'], ip_result) - self.assertEqual(r3['invalid_ip'], ['3.3.3.3']) - self.assertEqual(r4['ip_result'], ip_result) - self.assertEqual(r4['invalid_ip'], ['3.3.3.3']) - mock_get_client_by_user.success = False - r5 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=793, - ip_str='1.1.1.1, 2.2.2.2, 3.3.3.3') - r6 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=794, - ip_str='SetName1|ModuleName1|1.1.1.1, ' - 'SetName2|ModuleName2|2.2.2.2, ' - 'set|module|3.3.3.3') - r7 = utils.cc_get_ips_info_by_str(username='test', - biz_cc_id=795, - ip_str='Source1:1.1.1.1, Source2:2.2.2.2, 3:3.3.3.3') - self.assertEqual(r5['ip_result'], []) - self.assertEqual(r6['ip_result'], []) - self.assertEqual(r7['ip_result'], []) diff --git a/pipeline_plugins/variables/collections/common.py b/pipeline_plugins/variables/collections/common.py index 0a8e52f38c..21cb761d29 100644 --- a/pipeline_plugins/variables/collections/common.py +++ b/pipeline_plugins/variables/collections/common.py @@ -13,15 +13,60 @@ import logging +from django.utils.translation import ugettext_lazy as _ + from pipeline.conf import settings -from pipeline.core.data.var import LazyVariable +from pipeline.core.data.var import ( + SpliceVariable, + LazyVariable, + RegisterVariableMeta +) logger = logging.getLogger('root') +class CommonPlainVariable(SpliceVariable): + __metaclass__ = RegisterVariableMeta + + +class Input(CommonPlainVariable): + code = 'input' + name = _(u"输入框") + type = 'general' + tag = 'input.input' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Textarea(CommonPlainVariable): + code = 'textarea' + name = _(u"文本框") + type = 'general' + tag = 'textarea.textarea' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Datetime(CommonPlainVariable): + code = 'datetime' + name = _(u"日期时间") + type = 'general' + tag = 'datetime.datetime' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + +class Int(CommonPlainVariable): + code = 'int' + name = _(u"整数") + type = 'general' + tag = 'int.int' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) + + class Password(LazyVariable): code = 'password' - form = '%svariables/password.js' % settings.STATIC_URL + name = _(u"密码") + type = 'general' + tag = 'password.password' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) def get_value(self): return self.value @@ -29,8 +74,11 @@ def get_value(self): class Select(LazyVariable): code = 'select' - meta_form = '%svariables/select_meta.js' % settings.STATIC_URL - form = '%svariables/select.js' % settings.STATIC_URL + name = _(u"下拉框") + type = 'meta' + tag = 'select.select' + meta_tag = 'select.select_meta' + form = '%svariables/%s.js' % (settings.STATIC_URL, code) def get_value(self): # multiple select diff --git a/pipeline_plugins/variables/collections/sites/open/cc.py b/pipeline_plugins/variables/collections/sites/open/cc.py index 5c9ee74391..d249e729d9 100644 --- a/pipeline_plugins/variables/collections/sites/open/cc.py +++ b/pipeline_plugins/variables/collections/sites/open/cc.py @@ -14,6 +14,8 @@ import logging import re +from django.utils.translation import ugettext_lazy as _ + from pipeline.conf import settings from pipeline_plugins.cmdb_ip_picker.utils import get_ip_picker_result from pipeline_plugins.components.utils import ( @@ -27,7 +29,10 @@ class VarIpPickerVariable(LazyVariable): - code = 'var_ip_picker' + code = 'ip' + name = _(u"IP选择器(简单版)") + type = 'general' + tag = 'var_ip_picker.ip_picker' form = '%svariables/sites/%s/var_ip_picker.js' % (settings.STATIC_URL, settings.RUN_VER) def get_value(self): @@ -76,7 +81,10 @@ def get_value(self): class VarCmdbIpSelector(LazyVariable): - code = 'var_cmdb_ip_selector' + code = 'ip_selector' + name = _(u"IP选择器") + type = 'general' + tag = 'var_cmdb_ip_selector.ip_selector' form = '%svariables/sites/%s/var_cmdb_ip_selector.js' % (settings.STATIC_URL, settings.RUN_VER) def get_value(self): @@ -84,7 +92,7 @@ def get_value(self): bk_biz_id = self.pipeline_data['biz_cc_id'] bk_supplier_account = self.pipeline_data['biz_supplier_account'] - value = self.value - ip_result = get_ip_picker_result(username, bk_biz_id, bk_supplier_account, value) + ip_selector = self.value + ip_result = get_ip_picker_result(username, bk_biz_id, bk_supplier_account, ip_selector) ip = ','.join([host['bk_host_innerip'] for host in ip_result['data']]) return ip diff --git a/pipeline_plugins/variables/sites/__init__.py b/pipeline_plugins/variables/query/__init__.py similarity index 100% rename from pipeline_plugins/variables/sites/__init__.py rename to pipeline_plugins/variables/query/__init__.py diff --git a/pipeline_plugins/variables/sites/open/__init__.py b/pipeline_plugins/variables/query/sites/__init__.py similarity index 100% rename from pipeline_plugins/variables/sites/open/__init__.py rename to pipeline_plugins/variables/query/sites/__init__.py diff --git a/pipeline/contrib/web/admin.py b/pipeline_plugins/variables/query/sites/open/__init__.py similarity index 100% rename from pipeline/contrib/web/admin.py rename to pipeline_plugins/variables/query/sites/open/__init__.py diff --git a/pipeline_plugins/variables/sites/open/utils.py b/pipeline_plugins/variables/query/sites/open/utils.py similarity index 92% rename from pipeline_plugins/variables/sites/open/utils.py rename to pipeline_plugins/variables/query/sites/open/utils.py index e02d63b57c..44d7294b62 100644 --- a/pipeline_plugins/variables/sites/open/utils.py +++ b/pipeline_plugins/variables/query/sites/open/utils.py @@ -13,6 +13,10 @@ def get_ip_by_zoneid(): + """ + @summary: multiple versions compatible + @return: + """ result = { 'result': True, 'code': 0, diff --git a/pipeline_plugins/variables/sites/utils.py b/pipeline_plugins/variables/query/utils.py similarity index 82% rename from pipeline_plugins/variables/sites/utils.py rename to pipeline_plugins/variables/query/utils.py index 01de1c73d4..76875853e9 100644 --- a/pipeline_plugins/variables/sites/utils.py +++ b/pipeline_plugins/variables/query/utils.py @@ -15,6 +15,6 @@ from django.conf import settings -utils = importlib.import_module('pipeline_plugins.variables.sites.%s.utils' % settings.RUN_VER) +site_utils = importlib.import_module('pipeline_plugins.variables.query.sites.%s.utils' % settings.RUN_VER) -get_ip_by_zoneid = getattr(utils, 'get_ip_by_zoneid') +get_ip_by_zoneid = getattr(site_utils, 'get_ip_by_zoneid') diff --git a/pipeline_plugins/variables/static/variables/datetime.js b/pipeline_plugins/variables/static/variables/datetime.js new file mode 100644 index 0000000000..72bd325073 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/datetime.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.datetime = [ + { + tag_code: "datetime", + type: "datetime", + attrs: { + name: gettext("日期时间"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/input.js b/pipeline_plugins/variables/static/variables/input.js new file mode 100644 index 0000000000..10d8056329 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/input.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.input = [ + { + tag_code: "input", + type: "input", + attrs: { + name: gettext("输入框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/int.js b/pipeline_plugins/variables/static/variables/int.js new file mode 100644 index 0000000000..b551fde355 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/int.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.int = [ + { + tag_code: "int", + type: "int", + attrs: { + name: gettext("整数"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline_plugins/variables/static/variables/select.js b/pipeline_plugins/variables/static/variables/select.js index 52f94bc5c2..6153bcc7fc 100644 --- a/pipeline_plugins/variables/static/variables/select.js +++ b/pipeline_plugins/variables/static/variables/select.js @@ -11,6 +11,70 @@ */ (function () { $.atoms.select = [ + { + tag_code: "select_meta", + type: "combine", + attrs: { + name: gettext("下拉框"), + hookable: true, + children: [ + { + tag_code: "datasource", + type: "radio", + attrs: { + name: gettext("数据源"), + hookable: true, + items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "items_text", + type: "textarea", + attrs: { + name: gettext("选项"), + hookable: true, + placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "type", + type: "radio", + attrs: { + name: gettext("类型"), + hookable: true, + items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "default", + type: "textarea", + attrs: { + name: gettext("默认值"), + placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), + hookable: true, + } + } + ] + } + + }, { tag_code: "select", meta_transform: function (variable) { diff --git a/pipeline_plugins/variables/static/variables/textarea.js b/pipeline_plugins/variables/static/variables/textarea.js new file mode 100644 index 0000000000..e6750eee98 --- /dev/null +++ b/pipeline_plugins/variables/static/variables/textarea.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.textarea = [ + { + tag_code: "textarea", + type: "textarea", + attrs: { + name: gettext("文本框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/pipeline/contrib/web/tests.py b/pipeline_plugins/variables/urls.py similarity index 97% rename from pipeline/contrib/web/tests.py rename to pipeline_plugins/variables/urls.py index 90524bb0e7..1c56d14760 100644 --- a/pipeline/contrib/web/tests.py +++ b/pipeline_plugins/variables/urls.py @@ -10,3 +10,5 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + +urlpatterns = [] diff --git a/readme.md b/readme.md index 08b55f611a..8c8b503617 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ ![](docs/resource/img/bk_sops.png) --- [![license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/Tencent/bk-sops/blob/master/LICENSE) -[![Release](https://img.shields.io/badge/release-3.3.9-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) +[![Release](https://img.shields.io/badge/release-3.3.13-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) [![travis-ci](https://travis-ci.com/Tencent/bk-sops.svg?branch=master)](https://travis-ci.com/Tencent/bk-sops) [![Coverage Status](https://codecov.io/gh/Tencent/bk-sops/branch/master/graph/badge.svg)](https://codecov.io/gh/Tencent/bk-sops) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/bk-sops/pulls) diff --git a/readme_en.md b/readme_en.md index b4955ae49f..7942e9164a 100644 --- a/readme_en.md +++ b/readme_en.md @@ -2,7 +2,7 @@ ![](docs/resource/img/bk_sops.png) --- [![license](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/Tencent/bk-sops/blob/master/LICENSE) -[![Release](https://img.shields.io/badge/release-3.3.9-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) +[![Release](https://img.shields.io/badge/release-3.3.13-brightgreen.svg)](https://github.com/Tencent/bk-sops/releases) [![travis-ci](https://travis-ci.com/Tencent/bk-sops.svg?branch=master)](https://travis-ci.com/Tencent/bk-sops) [![Coverage Status](https://codecov.io/gh/Tencent/bk-sops/branch/master/graph/badge.svg)](https://codecov.io/gh/Tencent/bk-sops) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/Tencent/bk-sops/pulls) diff --git a/scripts/develop/dev_settings.py b/scripts/develop/dev_settings.py index 00eb7bcc12..ba98bdf2db 100644 --- a/scripts/develop/dev_settings.py +++ b/scripts/develop/dev_settings.py @@ -10,6 +10,8 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + + DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', @@ -21,5 +23,8 @@ }, } -BK_CC_HOST = '' -BK_JOB_HOST = '' +REDIS = { + 'host': 'localhost', + 'port': 6379, + 'db': 0 +} diff --git a/scripts/i18n/django_i18n.sh b/scripts/i18n/django_i18n.sh index 3209a03421..ad696a873a 100755 --- a/scripts/i18n/django_i18n.sh +++ b/scripts/i18n/django_i18n.sh @@ -4,16 +4,19 @@ WORK_PATH=`pwd` # check_vue_i18n_utils # 所有的 vue 文件都需要添加 import '@/utils/i18n.js',排除不能和项目代码耦合的独立组件 IpSelector # $1 参数表示当前目录 -for item in `find $WORK_PATH/pipeline/blueflow/src/ -name "*.vue" ! -path "*IpSelector*"`;do +for item in `find $WORK_PATH/frontend/desktop/src/ -name "*.vue" ! -path "*IpSelector*"`;do echo $item grep "i18n.js" $item || exit 1 done mkdir -p ~/Temp/gcloud_open/ -mv -f $WORK_PATH/staticfiles/ ~/Temp/gcloud_open/ -rm -rf $WORK_PATH/pipeline/blueflow/static/ +mv -f $WORK_PATH/static/ ~/Temp/gcloud_open/ +rm -rf $WORK_PATH/frontend/desktop/static/ pybabel extract -F babel.cfg --copyright-holder=blueking . -o django.pot || exit 1 +# first time +# pybabel init -i django.pot -D django -d locale -l en --no-wrap +# pybabel init -i django.pot -D django -d locale -l zh_hans --no-wrap pybabel update -i django.pot -d locale -D django --no-wrap || exit 1 django-admin makemessages -d djangojs -e vue,js -i '*node_modules*' --no-wrap || exit 1 @@ -49,4 +52,4 @@ grep -n -e 'fuzzy' $WORK_PATH/locale/zh_hans/LC_MESSAGES/djangojs.po read -rsp $'Press translate django.po and djangojs.po, then press any key to continue...\n' -n1 key django-admin compilemessages -mv -f ~/Temp/gcloud_open/staticfiles/ $WORK_PATH/ +mv -f ~/Temp/gcloud_open/static/ $WORK_PATH/ diff --git a/scripts/publish/build.sh b/scripts/publish/build.sh index 83a24d5e1c..dc7c47fb4c 100644 --- a/scripts/publish/build.sh +++ b/scripts/publish/build.sh @@ -2,7 +2,7 @@ APP_CODE="bk_sops" rm -rf $APP_CODE mkdir -p $APP_CODE/src $APP_CODE/pkgs || exit 1 -rsync -av --exclude="$APP_CODE" --exclude=".*" --exclude="*.tar.gz" --exclude="pipeline/blueflow/node_modules/" ./ $APP_CODE/src/ || exit 1 +rsync -av --exclude="$APP_CODE" --exclude=".*" --exclude="*.tar.gz" --exclude="frontend/desktop/node_modules/" ./ $APP_CODE/src/ || exit 1 cp app.yml $APP_CODE/ || exit 1 echo "libraries:" >> $APP_CODE/app.yml grep -e "^[^#].*$" requirements.txt | awk '{split($1,b,"==");printf "- name: "b[1]"\n version: "b[2]"\n"}' >> $APP_CODE/app.yml diff --git a/static/components/atoms/sites/open/job/job_execute_task.js b/static/components/atoms/sites/open/job/job_execute_task.js index bca159a795..627a72e5e1 100644 --- a/static/components/atoms/sites/open/job/job_execute_task.js +++ b/static/components/atoms/sites/open/job/job_execute_task.js @@ -75,6 +75,7 @@ type: "change", action: function (value) { var $this = this; + this.changeHook(false); this.set_loading(true); $.ajax({ url: $.context.site_url + 'pipeline/job_get_job_detail_by_biz/' + $.context.biz_cc_id + '/' + value + '/', diff --git a/static/variables/datetime.js b/static/variables/datetime.js new file mode 100644 index 0000000000..72bd325073 --- /dev/null +++ b/static/variables/datetime.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.datetime = [ + { + tag_code: "datetime", + type: "datetime", + attrs: { + name: gettext("日期时间"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/input.js b/static/variables/input.js new file mode 100644 index 0000000000..10d8056329 --- /dev/null +++ b/static/variables/input.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.input = [ + { + tag_code: "input", + type: "input", + attrs: { + name: gettext("输入框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/int.js b/static/variables/int.js new file mode 100644 index 0000000000..b551fde355 --- /dev/null +++ b/static/variables/int.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.int = [ + { + tag_code: "int", + type: "int", + attrs: { + name: gettext("整数"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})(); diff --git a/static/variables/select.js b/static/variables/select.js index 52f94bc5c2..6153bcc7fc 100644 --- a/static/variables/select.js +++ b/static/variables/select.js @@ -11,6 +11,70 @@ */ (function () { $.atoms.select = [ + { + tag_code: "select_meta", + type: "combine", + attrs: { + name: gettext("下拉框"), + hookable: true, + children: [ + { + tag_code: "datasource", + type: "radio", + attrs: { + name: gettext("数据源"), + hookable: true, + items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "items_text", + type: "textarea", + attrs: { + name: gettext("选项"), + hookable: true, + placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "type", + type: "radio", + attrs: { + name: gettext("类型"), + hookable: true, + items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], + value: "0", + validation: [ + { + type: "required" + } + ] + } + }, + { + tag_code: "default", + type: "textarea", + attrs: { + name: gettext("默认值"), + placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), + hookable: true, + } + } + ] + } + + }, { tag_code: "select", meta_transform: function (variable) { diff --git a/static/variables/select_meta.js b/static/variables/select_meta.js deleted file mode 100644 index 5dc68db17a..0000000000 --- a/static/variables/select_meta.js +++ /dev/null @@ -1,79 +0,0 @@ -/** -* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community -* Edition) available. -* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. -* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* http://opensource.org/licenses/MIT -* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on -* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the -* specific language governing permissions and limitations under the License. -*/ -(function () { - $.atoms.select_meta = [ - { - tag_code: "select", - type: "combine", - attrs: { - name: gettext("下拉框"), - hookable: true, - children: [ - { - tag_code: "datasource", - type: "radio", - attrs: { - name: gettext("数据源"), - hookable: true, - items: [{name: gettext("自定义"), value: "0"}, {name: gettext("远程数据源"), value: "1"}], - value: "0", - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "items_text", - type: "textarea", - attrs: { - name: gettext("选项"), - hookable: true, - placeholder: gettext('请输入数据源信息,自定义数据源格式为 [{"text": "", "value": ""}...}],若是远程数据源则填写返回该格式数据的 URL'), - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "type", - type: "radio", - attrs: { - name: gettext("类型"), - hookable: true, - items: [{name: gettext("单选"), value: "0"}, {name: gettext("多选"), value: "1"}], - value: "0", - validation: [ - { - type: "required" - } - ] - } - }, - { - tag_code: "default", - type: "textarea", - attrs: { - name: gettext("默认值"), - placeholder: gettext("请输入下拉框的默认值,单选为 value 的格式,多选为 value,value,... 的格式"), - hookable: true, - } - } - ] - } - - }, - ] -})(); diff --git a/static/variables/textarea.js b/static/variables/textarea.js new file mode 100644 index 0000000000..e6750eee98 --- /dev/null +++ b/static/variables/textarea.js @@ -0,0 +1,28 @@ +/** +* Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community +* Edition) available. +* Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved. +* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* http://opensource.org/licenses/MIT +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +* specific language governing permissions and limitations under the License. +*/ +(function () { + $.atoms.textarea = [ + { + tag_code: "textarea", + type: "textarea", + attrs: { + name: gettext("文本框"), + hookable: true, + validation: [ + { + type: "required" + } + ] + } + }, + ] +})();

    T~U4E5_bAhu_R3H{(I)udL5;P6gx0 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