qianlishi 3 years ago
commit 57c090903c

@ -201,132 +201,4 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
------
This product has a bundle logback, which is available under the EPL v1.0 License.
The source code of logback can be found at https://github.com/qos-ch/logback.
Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2015, QOS.ch. All rights reserved.
This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation
or (per the licensee's choosing)
under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.
------
This product has a bundle fastjson, which is available under the ASL2 License.
The source code of fastjson can be found at https://github.com/alibaba/fastjson.
Copyright 1999-2016 Alibaba Group Holding Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
------
This product has a bundle mybatis-plus
The source code of mybatis-plus can be found at https://github.com/baomidou/mybatis-plus.
Copyright (c) 2011-${year}, baomidou (jobob@qq.com).
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
------
This product has a bundle vue-router
The source code of vue-router can be found at https://github.com/vuejs/vue-router.
MIT License
Copyright (c) 2013-present Evan You
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------
This product has a bundle vue-cli
The source code of vue-cli can be found at https://github.com/vuejs/vue-cli.
The MIT License (MIT)
Copyright (c) 2017-present, Yuxi (Evan) You
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
------
This product has a bundle avue
The source code of avue can be found at https://github.com/nmxiaowei/avue.
The MIT License (MIT)
Copyright (c) 2018 Smallwei
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

131
NOTICE

@ -12,3 +12,134 @@
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
------
This product has a bundle logback, which is available under the EPL v1.0 License.
The source code of logback can be found at https://github.com/qos-ch/logback.
Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2015, QOS.ch. All rights reserved.
This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation
or (per the licensee's choosing)
under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.
------
This product has a bundle fastjson, which is available under the ASL2 License.
The source code of fastjson can be found at https://github.com/alibaba/fastjson.
Copyright 1999-2016 Alibaba Group Holding Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
------
This product has a bundle mybatis-plus
The source code of mybatis-plus can be found at https://github.com/baomidou/mybatis-plus.
Copyright (c) 2011-${year}, baomidou (jobob@qq.com).
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
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.
------
This product has a bundle vue-router
The source code of vue-router can be found at https://github.com/vuejs/vue-router.
MIT License
Copyright (c) 2013-present Evan You
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------
This product has a bundle vue-cli
The source code of vue-cli can be found at https://github.com/vuejs/vue-cli.
The MIT License (MIT)
Copyright (c) 2017-present, Yuxi (Evan) You
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
------
This product has a bundle avue
The source code of avue can be found at https://github.com/nmxiaowei/avue.
The MIT License (MIT)
Copyright (c) 2018 Smallwei
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

@ -85,6 +85,7 @@
- [vue-echarts](https://www.npmjs.com/package/vue-echarts/): vue-echarts是封装后的vue插件,基于 ECharts v4.0.1+ 开发 - [vue-echarts](https://www.npmjs.com/package/vue-echarts/): vue-echarts是封装后的vue插件,基于 ECharts v4.0.1+ 开发
- [vue-superslide](https://www.npmjs.com/package/vue-super-slider/): Vue-SuperSlide(Github) 是 SuperSlide 的 Vue 封装版本 - [vue-superslide](https://www.npmjs.com/package/vue-super-slider/): Vue-SuperSlide(Github) 是 SuperSlide 的 Vue 封装版本
- [vuedraggable](https://github.com/SortableJS/Vue.Draggable/): 是一款基于Sortable.js实现的vue拖拽插件。 - [vuedraggable](https://github.com/SortableJS/Vue.Draggable/): 是一款基于Sortable.js实现的vue拖拽插件。
- [luckysheet](https://gitee.com/mengshukeji/Luckysheet): Luckysheet 一款纯前端类似excel的在线表格功能强大、配置简单、完全开源。
## 编译打包 ## 编译打包
@ -142,10 +143,11 @@ sql文件的目录在report-core --> src --> main --> resources -- > db.migra
已知以下版本存在兼容性问题 已知以下版本存在兼容性问题
- Node.js V16 - Node.js V16
- Jdk 11 - Jdk 11
- Mysql 8.0 - Mysql 8.08.0.26版本没有问题8.0.21版本存在问题)
- Windows 11 - Windows 11
AJ-Report 使用Druid版本为1.2.6如果你觉得你配置都是正常但是数据源测试不过请尝试降低Druid版本 AJ-Report 使用Druid版本为1.2.6如果你觉得你配置都是正常但是数据源测试不过请尝试修改pom文件降低Druid版本。
例如MSSQLSERVER 2014请将Druid版本降低为1.2.1以下
## 商业授权 ## 商业授权
AJ-Report使用[Apache2.0开源协议](http://www.apache.org/licenses/LICENSE-2.0.html) <br> AJ-Report使用[Apache2.0开源协议](http://www.apache.org/licenses/LICENSE-2.0.html) <br>

@ -60,7 +60,15 @@ module.exports = {
children: [ children: [
{title: '常见问题', path: '/guide/question'} {title: '常见问题', path: '/guide/question'}
] ]
}], },
{
title: '社区提供',
collapsable: false,
children: [
{title: '搭建AJ-Report开发环境', path: '/guide/community/AC1688/搭建aj-report开发环境'}
]
}
],
} }
}, },
plugins: [ plugins: [

@ -0,0 +1,244 @@
**搭建aj-report开发环境**
# 工具版本
参考
[Mysql] 5.7
[Jdk] 1.8
[Spring Boot] 2.3.5
[Mybatis-plus] 3.3.2
[flyway] 5.2.1
[Apache Maven] 3.5
[Node.js] 14.16.0
[Windows 10]
实际
Mysql 5.7.34
JDK 1.8u291
IdeaJ 2020.2.1
Spring Boot DTD
Maven 3.5.4
Windows7
Git 2.33.0 x64
Node 13.14.0-x64
Vscode 1.59.0
# 环境准备
共分前端、公共、后端。
## 后端
### Mysql
下载mysql数据库
下载地址
<https://dev.mysql.com/downloads/installer/>
步骤【选择安装类型】即Choosing a Setup Type选择【仅服务器】即Server
only
步骤【类型和网络】即Type and Networking选择【开发电脑】即Development
Computer
步骤【账户和角色】即Account and Rolesroot密码设置为root。
步骤【Windows服务】即Windows
Service勾选【配置MySQL服务作为一个Windows服务】即Configure MySQL Server as
a Windows Service
除以上外,都采用默认,一直下一步,直至安装完成。
### JDK
采用默认安装,一直下一步,直至完成。
配置环境变量
JAVA_HOME C:\\Program Files\\Java\\jdk1.8.0_291
### IdeaJ
采用默认安装,一直下一步,直至完成。
### Maven
下载地址
https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/
将压缩包解压到路径C:\\Program Files\\
添加环境变量M2_HOME C:\\Program Files\\apache-maven-3.5.4
旧版变量写法MAVEN_HOME
调整Path环境变量增加 ;%M2_HOME%C:\\bin
### 插件
IdeaJ安装spring boot开发插件
已自带,不用再安装。
安装lombok
## 公共
### Git
#### 安装
采用默认安装,一直下一步,直至完成。
#### 拉代码
为idea指定git路径
默认情况下IDEA是不自带git运行程序的所以需要通过
菜单-\>settings-\>Version Control-\>Git-\>Path to Git executable:
设置为安装git中所安装的git.exe
获取gitee上面的要拉取项目的url即页面左上方【可隆/下载】单击选择【复制】即可获得url。
在ideaj中选择路径file -\> new -\> Project from Version Control -\> Git
将url复制到URL后的方框
选择本地目录即Directory
点击【Clone】开始拉代码。
## 前端
### Node
采用默认安装,一直下一步,直至完成。
### Vscode
步骤【选择附件任务】勾选【添加到PATH重启后生效
其余采用默认安装,一直下一步,直至完成。
# 开发环境
## 后端
新建文件夹用于存放后端代码C:\\ijproj将git下载的代码解压至该目录。
### 下载源码
具体步骤见Git2.2.1.2拉代码
### 依赖插件
下载依赖和插件。Git完代码后会自动下载依赖和插件。如果pom中的依赖和插件爆红。可设置mavenFile
——\> Settings。找到Maven相关的三项设置包括Maven home directory、User
settings file、Local repository可直接使用默认设置。
遇到个别顽固爆红的依赖和插件,可以直接在本地资料库.m2\\repository中查找确认是否已经下载。确认已经下载的话则可以尝试在该依赖或者插件中增加版本号与资料库中的一致org.springframework.boot对应的路径
资料库路径\\org\\springframework\\bootspring-boot-maven-plugin对应上述路径的子文件夹spring-boot-maven-plugin此文件夹即spring-boot-maven-plugin的子文件夹是版本号2.3.5.RELEASE打开2.3.5.RELEASE就是对应的jar包等内容
### 设置Mysql
设置好mysql以便运行时自动进行初始化。
配置文件路径:/src/main/resources/bootstrap.yml在此文件中找到datasource
mysql的配置信息修改IP地址为mysql所在机器的IP调整用户密码。本文中为本地即localhost或者用127.0.0.1用户为root密码为root。
### 运行后端
确认启动了Mysql服务
然后运行后端程序
## 前端
### 下载源码
新建文件夹C:\\vsproj用于存放前端项目源码
下载源码在vscode使用【ctrl】+【\`】或者【Terminal】-\>【New
Terminal】。用cd命令进入相应的文件夹。
执行git clone https://gitee.com/anji-plus/report.git拉代码。
### 设置环境
调整配置文件配置文件路径REPORT-UI/config/dev.env.js调整BASE_API后URL地址中的IP、端口。若都在同一台电脑直接使用IP127.0.0.1端口使用默认9095。
连接后端的IP改为后端API代码所在的IP、所使用的端口。
### 编译运行
在vscode使用【ctrl】+【\`】或者【Terminal】-\>【New
Terminal】。用cd命令进入前端代码文件夹执行如下命令
命令一cd C:\\vsproj\\report\\report-ui
命令二npm init -y
命令三npm install
命令四npm run dev
命令四执行后启动了前端在浏览器中输入http://localhost:9528/\#/login
## 启动
启动顺序:确保数据库启动、确保后端启动、最后启动前端
1确保mysql已经启动
2运行后端代码
3运行前端代码
4浏览器输入http://localhost:9528/\#/login
用户admin
密码123456
# 错误
## 问题一
遇到Error creating bean with name 'flywayInitializer' defined in class path
resource解决办法
将这个Resolved
locally后面的**版本号复制**下来,连着符号一起复制,然后找到你数据库中的**flyway_schema
\_history**这个表,在最下面那一行数据中把刚刚复制的版本号替换进去就可以了。
## 问题二
问题现象:报表设计界面中看不到图表,
查看日志Access denied for user 'ajreport'@'localhost' (using password: YES)
在系统【数据源】中调整设置将IP、用户、密码等调整为在用的。
默认用户ajreport密码ajreport
改为初始化时的用户root密码root

@ -105,6 +105,33 @@
<version>1.18.10</version> <version>1.18.10</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies> </dependencies>
<developers> <developers>

@ -0,0 +1,73 @@
package com.anjiplus.template.gaea.business.enums;
/**
* @author zhouhang
* @description EXCEL
* @date 2021/4/26
*/
public enum ExcelCenterStyleEnum {
/**
*
*/
LEFT((short) 1, 1, "左对齐"),
/**
*
*/
RIGHT((short) 3, 2, "右对齐"),
/**
*
*/
CENTER((short) 2, 0, "居中"),
;
/**
* excelcode
*/
private final short excelCode;
/**
* 线code
*/
private final Integer onlineExcelCode;
/**
*
*/
private final String name;
public Integer getOnlineExcelCode() {
return onlineExcelCode;
}
public String getName() {
return name;
}
public short getExcelCode() {
return excelCode;
}
ExcelCenterStyleEnum(short excelCode, Integer onlineExcelCode, String name) {
this.excelCode = excelCode;
this.onlineExcelCode = onlineExcelCode;
this.name = name;
}
/**
* @param code excelcode
* @return Enum_ExcelCenterStyle
* @description excel线
* @author zhouhang
* @date 2021/4/26
*/
public static ExcelCenterStyleEnum getExcelCenterStyleByExcelCenterCode(short code) {
for (ExcelCenterStyleEnum value : ExcelCenterStyleEnum.values()) {
if (code == value.getExcelCode()) {
return value;
}
}
return CENTER;
}
}

@ -0,0 +1,30 @@
package com.anjiplus.template.gaea.business.enums;
/**
* Created by raodeming on 2021/9/3.
*/
public enum ExportTypeEnum {
/**gaea_excel*/
GAEA_TEMPLATE_EXCEL("gaea_template_excel", "gaea_template_excel"),
/**gaea_pdf*/
GAEA_TEMPLATE_PDF("gaea_template_pdf", "gaea_template_pdf"),
;
private String codeValue;
private String codeDesc;
private ExportTypeEnum(String codeValue, String codeDesc) {
this.codeValue = codeValue;
this.codeDesc = codeDesc;
}
public String getCodeValue() {
return this.codeValue;
}
public String getCodeDesc() {
return this.codeDesc;
}
}

@ -57,6 +57,12 @@ public class TokenFilter implements Filter {
HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletResponse response = (HttpServletResponse) servletResponse;
String uri = request.getRequestURI(); String uri = request.getRequestURI();
//OPTIONS直接放行
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
filterChain.doFilter(request, response);
return;
}
if (SLASH.equals(uri)) { if (SLASH.equals(uri)) {
response.sendRedirect("/index.html"); response.sendRedirect("/index.html");
return; return;

@ -74,7 +74,7 @@ public class ReportDashboardController {
* @return * @return
*/ */
@GetMapping("/export") @GetMapping("/export")
@Permission(code = "view", name = "导出大屏") @Permission(code = "export", name = "导出大屏")
public ResponseEntity<byte[]> exportDashboard(HttpServletRequest request, HttpServletResponse response, public ResponseEntity<byte[]> exportDashboard(HttpServletRequest request, HttpServletResponse response,
@RequestParam("reportCode") String reportCode, @RequestParam(value = "showDataSet",required = false, defaultValue = "1") Integer showDataSet) { @RequestParam("reportCode") String reportCode, @RequestParam(value = "showDataSet",required = false, defaultValue = "1") Integer showDataSet) {
return reportDashboardService.exportDashboard(request, response, reportCode, showDataSet); return reportDashboardService.exportDashboard(request, response, reportCode, showDataSet);
@ -87,7 +87,7 @@ public class ReportDashboardController {
* @return * @return
*/ */
@PostMapping("/import/{reportCode}") @PostMapping("/import/{reportCode}")
@Permission(code = "design", name = "导入大屏") @Permission(code = "import", name = "导入大屏")
public ResponseBean importDashboard(@RequestParam("file") MultipartFile file, @PathVariable("reportCode") String reportCode) { public ResponseBean importDashboard(@RequestParam("file") MultipartFile file, @PathVariable("reportCode") String reportCode) {
reportDashboardService.importDashboard(file, reportCode); reportDashboardService.importDashboard(file, reportCode);
return ResponseBean.builder().build(); return ResponseBean.builder().build();

@ -55,4 +55,7 @@ public class DataSetDto extends GaeaBaseDTO implements Serializable {
private Set<String> setParamList; private Set<String> setParamList;
/**指定字段*/
private String fieldLabel;
} }

@ -226,11 +226,13 @@ public class DataSetServiceImpl implements DataSetService {
DataSource dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode()); DataSource dataSource = dataSourceService.selectOne("source_code", dataSetDto.getSourceCode());
//3.参数替换 //3.参数替换
//3.1参数校验 //3.1参数校验
log.debug("参数校验替换前:{}", dto.getContextData());
boolean verification = dataSetParamService.verification(dataSetDto.getDataSetParamDtoList(), dto.getContextData()); boolean verification = dataSetParamService.verification(dataSetDto.getDataSetParamDtoList(), dto.getContextData());
if (!verification) { if (!verification) {
throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR); throw BusinessExceptionBuilder.build(ResponseCode.RULE_FIELDS_CHECK_ERROR);
} }
String dynSentence = dataSetParamService.transform(dto.getContextData(), dataSetDto.getDynSentence()); String dynSentence = dataSetParamService.transform(dto.getContextData(), dataSetDto.getDynSentence());
log.debug("参数校验替换后:{}", dto.getContextData());
//4.获取数据 //4.获取数据
DataSourceDto dataSourceDto = new DataSourceDto(); DataSourceDto dataSourceDto = new DataSourceDto();
BeanUtils.copyProperties(dataSource, dataSourceDto); BeanUtils.copyProperties(dataSource, dataSourceDto);

@ -39,7 +39,7 @@ public interface DataSetParamService extends GaeaBaseService<DataSetParamParam,
* @param dataSetParamDto * @param dataSetParamDto
* @return * @return
*/ */
boolean verification(DataSetParamDto dataSetParamDto); Object verification(DataSetParamDto dataSetParamDto);
/** /**
* js * js

@ -93,7 +93,7 @@ public class DataSetParamServiceImpl implements DataSetParamService {
* @return * @return
*/ */
@Override @Override
public boolean verification(DataSetParamDto dataSetParamDto) { public Object verification(DataSetParamDto dataSetParamDto) {
String validationRules = dataSetParamDto.getValidationRules(); String validationRules = dataSetParamDto.getValidationRules();
if (StringUtils.isNotBlank(validationRules)) { if (StringUtils.isNotBlank(validationRules)) {
@ -103,7 +103,12 @@ public class DataSetParamServiceImpl implements DataSetParamService {
Invocable invocable = (Invocable) engine; Invocable invocable = (Invocable) engine;
Object exec = invocable.invokeFunction("verification", dataSetParamDto); Object exec = invocable.invokeFunction("verification", dataSetParamDto);
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
if (exec instanceof Boolean) {
return objectMapper.convertValue(exec, Boolean.class); return objectMapper.convertValue(exec, Boolean.class);
}else {
return objectMapper.convertValue(exec, String.class);
}
} }
} catch (Exception ex) { } catch (Exception ex) {
@ -131,9 +136,20 @@ public class DataSetParamServiceImpl implements DataSetParamService {
String value = contextData.getOrDefault(dataSetParamDto.getParamName(), "").toString(); String value = contextData.getOrDefault(dataSetParamDto.getParamName(), "").toString();
dataSetParamDto.setSampleItem(value); dataSetParamDto.setSampleItem(value);
} }
if (!verification(dataSetParamDto)) {
Object verification = verification(dataSetParamDto);
if (verification instanceof Boolean) {
if (!(Boolean) verification) {
return false; return false;
} }
}else {
//将得到的值重新赋值给contextData
if (null != contextData) {
contextData.put(dataSetParamDto.getParamName(), verification);
}
dataSetParamDto.setSampleItem(verification.toString());
}
} }
return true; return true;
} }

@ -99,7 +99,7 @@ public class GaeaFileServiceImpl implements GaeaFileService {
String newFileName = fileId + suffixName; String newFileName = fileId + suffixName;
// 本地文件保存路径 // 本地文件保存路径
String filePath = dictPath + newFileName; String filePath = dictPath + newFileName;
String urlPath = fileDownloadPath + java.io.File.separator + fileId; String urlPath = fileDownloadPath + "/" + fileId;
GaeaFile gaeaFile = new GaeaFile(); GaeaFile gaeaFile = new GaeaFile();
gaeaFile.setFilePath(filePath); gaeaFile.setFilePath(filePath);

@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
* TODO
* *
* @author chenkening * @author chenkening
* @date 2021/3/26 10:35 * @date 2021/3/26 10:35
@ -31,11 +30,12 @@ public class ReportServiceImpl implements ReportService {
@Override @Override
public void delReport(ReportDto reportDto) { public void delReport(ReportDto reportDto) {
deleteById(reportDto.getId()); deleteById(reportDto.getId());
//删除gaea_report_excel、gaea_report_dashboard、gaea_report_dashboard_widget
//...
} }
@Override @Override
public void processBeforeOperation(Report entity, BaseOperationEnum operationEnum) throws BusinessException { public void processBeforeOperation(Report entity, BaseOperationEnum operationEnum) throws BusinessException {
//目前只有大屏一种类型
entity.setReportType("report_screen");
} }
} }

@ -0,0 +1,78 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.controller;
import com.anji.plus.gaea.annotation.Permission;
import com.anji.plus.gaea.annotation.log.GaeaAuditLog;
import com.anji.plus.gaea.bean.ResponseBean;
import com.anji.plus.gaea.code.ResponseCode;
import com.anji.plus.gaea.curd.controller.GaeaBaseController;
import com.anji.plus.gaea.curd.service.GaeaBaseService;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.ReportExcelDto;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.param.ReportExcelParam;
import com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel;
import com.anjiplus.template.gaea.business.modules.reportexcel.service.ReportExcelService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author chenkening
* @date 2021/4/13 15:12
*/
@RestController
@Api(tags = "报表表格管理")
@Permission(code = "excelManage", name = "报表管理")
@RequestMapping("/reportExcel")
public class ReportExcelController extends GaeaBaseController<ReportExcelParam, ReportExcel, ReportExcelDto> {
@Autowired
private ReportExcelService reportExcelService;
@Override
public GaeaBaseService<ReportExcelParam, ReportExcel> getService() {
return reportExcelService;
}
@Override
public ReportExcel getEntity() {
return new ReportExcel();
}
@Override
public ReportExcelDto getDTO() {
return new ReportExcelDto();
}
@GetMapping("/detailByReportCode/{reportCode}")
@Permission(code = "query", name = "详情")
@GaeaAuditLog(pageTitle = "详情")
public ResponseBean detailByReportCode(@PathVariable String reportCode) {
ReportExcelDto reportExcelDto = reportExcelService.detailByReportCode(reportCode);
return ResponseBean.builder().data(reportExcelDto).build();
}
@PostMapping("/preview")
@Permission(code = "view", name = "预览")
@GaeaAuditLog(pageTitle = "预览")
public ResponseBean preview(@RequestBody ReportExcelDto reportExcelDto) {
ReportExcelDto result = reportExcelService.preview(reportExcelDto);
return ResponseBean.builder().data(result).build();
}
@PostMapping("/exportExcel")
@Permission(code = "export", name = "导出")
@GaeaAuditLog(pageTitle = "报表导出")
public ResponseBean exportExcel(@RequestBody ReportExcelDto reportExcelDto) {
return ResponseBean.builder().code(ResponseCode.SUCCESS_CODE)
.data(reportExcelService.exportExcel(reportExcelDto))
.message("导出成功,请稍后在文件管理中查看").build();
}
// @PostMapping("/exportPdf")
// public ResponseBean exportPdf(@RequestBody ReportExcelDto reportExcelDto) {
// reportExcelService.exportPdf(reportExcelDto);
// return ResponseBean.builder().code(ResponseCode.SUCCESS_CODE)
// .build();
// }
}

@ -0,0 +1,58 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
/**
*
*
* @author Administrator
*/
@Data
public class GridRecordDataModel {
/**
*
*/
Long id;
/**
* ID
*/
String list_id;
/**
* _
*/
String row_col;
/**
* sheet
*/
String index;
/**
* sheet
*/
Integer status;
/**
* fblock
*/
String block_id;
/**
* json
*/
JSONObject json_data;
/**
*
*/
Integer order;
/**
*
*/
Integer is_delete;
/**
* sheet
*/
List<JSONObject> dataList;
}

@ -0,0 +1,61 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto;
import com.anji.plus.gaea.curd.dto.GaeaBaseDTO;
import lombok.Data;
import java.io.Serializable;
/**
* @author chenkening
* @date 2021/4/13 15:12
*/
@Data
public class ReportExcelDto extends GaeaBaseDTO implements Serializable {
/**
*
*/
private String reportName;
/**
*
*/
private String reportCode;
/**
* |
*/
private String setCodes;
/**
*
*/
private String reportGroup;
/**
*
*/
private String setParam;
/**
* json
*/
private String jsonStr;
/**
*
*/
private String reportType;
/**
*
*/
private long total;
/**
*
*/
private String exportType;
}

@ -0,0 +1,18 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.controller.param;
import com.anji.plus.gaea.curd.params.PageParam;
import lombok.Data;
import java.io.Serializable;
/**
* @author chenkening
* @date 2021/4/13 15:12
*/
@Data
public class ReportExcelParam extends PageParam implements Serializable {
}

@ -0,0 +1,11 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.dao;
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
import com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel;
/**
* @author chenkening
* @date 2021/4/13 15:11
*/
public interface ReportExcelMapper extends GaeaBaseMapper<ReportExcel> {
}

@ -0,0 +1,33 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity;
import com.anji.plus.gaea.curd.entity.GaeaBaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author chenkening
* @date 2021/4/13 15:11
*/
@TableName(value = "gaea_report_excel")
@Data
public class ReportExcel extends GaeaBaseEntity {
@ApiModelProperty(value = "报表编码")
private String reportCode;
@ApiModelProperty(value = "数据集编码,以|分割")
private String setCodes;
@ApiModelProperty(value = "数据集查询参数")
private String setParam;
@ApiModelProperty(value = "报表json字符串")
private String jsonStr;
@ApiModelProperty(value = "0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG")
private Integer enableFlag;
@ApiModelProperty(value = "0--未删除 1--已删除 DIC_NAME=DELETE_FLAG")
private Integer deleteFlag;
}

@ -0,0 +1,43 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.service;
import com.anji.plus.gaea.curd.service.GaeaBaseService;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.ReportExcelDto;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.param.ReportExcelParam;
import com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel;
/**
* TODO
*
* @author chenkening
* @date 2021/4/13 15:14
*/
public interface ReportExcelService extends GaeaBaseService<ReportExcelParam, ReportExcel> {
/**
*
*
* @param reportCode
* @return
*/
ReportExcelDto detailByReportCode(String reportCode);
/**
*
*
* @param reportExcelDto
* @return
*/
ReportExcelDto preview(ReportExcelDto reportExcelDto);
/**
* excel
*
* @param reportExcelDto
* @return
*/
Boolean exportExcel(ReportExcelDto reportExcelDto);
// Boolean exportPdf(ReportExcelDto reportExcelDto);
}

@ -0,0 +1,362 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.anji.plus.gaea.constant.BaseOperationEnum;
import com.anji.plus.gaea.curd.mapper.GaeaBaseMapper;
import com.anji.plus.gaea.exception.BusinessException;
import com.anji.plus.gaea.utils.GaeaAssert;
import com.anji.plus.gaea.utils.GaeaBeanUtils;
import com.anjiplus.template.gaea.business.code.ResponseCode;
import com.anjiplus.template.gaea.business.enums.ExportTypeEnum;
import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.DataSetDto;
import com.anjiplus.template.gaea.business.modules.dataset.controller.dto.OriginalDataDto;
import com.anjiplus.template.gaea.business.modules.dataset.service.DataSetService;
import com.anjiplus.template.gaea.business.modules.file.dao.GaeaFileMapper;
import com.anjiplus.template.gaea.business.modules.file.entity.GaeaFile;
import com.anjiplus.template.gaea.business.modules.report.dao.ReportMapper;
import com.anjiplus.template.gaea.business.modules.report.dao.entity.Report;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.ReportExcelDto;
import com.anjiplus.template.gaea.business.modules.reportexcel.dao.ReportExcelMapper;
import com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel;
import com.anjiplus.template.gaea.business.modules.reportexcel.service.ReportExcelService;
import com.anjiplus.template.gaea.business.modules.reportexcel.util.XlsSheetUtil;
import com.anjiplus.template.gaea.business.modules.reportexcel.util.XlsUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.*;
import java.util.*;
/**
* TODO
*
* @author chenkening
* @date 2021/4/13 15:14
*/
@Service
public class ReportExcelServiceImpl implements ReportExcelService {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private ReportExcelMapper reportExcelMapper;
@Autowired
private DataSetService dataSetService;
@Autowired
private ReportMapper reportMapper;
@Value("${customer.file.dist-path:''}")
private String dictPath;
@Value("${customer.file.downloadPath:''}")
private String fileDownloadPath;
@Autowired
private GaeaFileMapper gaeaFileMapper;
@Override
public GaeaBaseMapper<ReportExcel> getMapper() {
return reportExcelMapper;
}
@Override
public ReportExcelDto detailByReportCode(String reportCode) {
QueryWrapper<ReportExcel> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("report_code", reportCode);
ReportExcel reportExcel = reportExcelMapper.selectOne(queryWrapper);
if (reportExcel != null) {
ReportExcelDto dto = new ReportExcelDto();
BeanUtils.copyProperties(reportExcel, dto);
return dto;
}
return null;
}
/**
*
*
* @param entity
* @param operationEnum
* @throws BusinessException
*/
@Override
public void processBeforeOperation(ReportExcel entity, BaseOperationEnum operationEnum) throws BusinessException {
if (operationEnum.equals(BaseOperationEnum.INSERT)) {
String reportCode = entity.getReportCode();
ReportExcel report = this.selectOne("report_code", reportCode);
if (null != report) {
this.deleteById(report.getId());
}
}
}
/**
*
*/
@Override
public ReportExcelDto preview(ReportExcelDto reportExcelDto) {
// 根据id查询 报表详情
ReportExcel reportExcel = selectOne("report_code", reportExcelDto.getReportCode());
QueryWrapper<Report> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("report_code", reportExcelDto.getReportCode());
Report report = reportMapper.selectOne(queryWrapper);
GaeaAssert.notNull(reportExcel, ResponseCode.RULE_CONTENT_NOT_EXIST, "reportExcel");
String setParam = reportExcelDto.getSetParam();
GaeaBeanUtils.copyAndFormatter(reportExcel, reportExcelDto);
if (StringUtils.isNotBlank(setParam)) {
reportExcelDto.setSetParam(setParam);
}
reportExcelDto.setReportName(report.getReportName());
// 数据集解析
String jsonStr = analysisReportData(reportExcelDto);
reportExcelDto.setJsonStr(jsonStr);
// reportExcelDto.setTotal(jsonObject.getJSONObject("rows").size());
return reportExcelDto;
}
@Override
public Boolean exportExcel(ReportExcelDto reportExcelDto) {
String reportCode = reportExcelDto.getReportCode();
String exportType = reportExcelDto.getExportType();
logger.error("导出...");
if (exportType.equals(ExportTypeEnum.GAEA_TEMPLATE_EXCEL.getCodeValue())) {
ReportExcelDto report = detailByReportCode(reportCode);
reportExcelDto.setJsonStr(report.getJsonStr());
String jsonStr = analysisReportData(reportExcelDto);
List<JSONObject> lists=(List<JSONObject> ) JSON.parse(jsonStr);
OutputStream out;
try {
String fileId = UUID.randomUUID().toString();
String filePath = dictPath + File.separator + fileId + ".xlsx";
String urlPath = fileDownloadPath + java.io.File.separator + fileId;
GaeaFile gaeaFile = new GaeaFile();
gaeaFile.setFilePath(filePath);
gaeaFile.setFileId(fileId);
gaeaFile.setUrlPath(urlPath);
gaeaFile.setFileType("xlsx");
gaeaFile.setFileInstruction(reportCode + ".xlsx");
out = new FileOutputStream(filePath);
XlsUtil.exportXlsFile(out, true, lists);
gaeaFileMapper.insert(gaeaFile);
logger.info("导出成功:{}", gaeaFile);
} catch (IOException e) {
logger.error("导出失败", e);
}
}
return true;
}
/**
*
*/
private String analysisReportData(ReportExcelDto reportExcelDto) {
String jsonStr = reportExcelDto.getJsonStr();
String setParam = reportExcelDto.getSetParam();
List<JSONObject> dbObjectList = (List<JSONObject>) JSON.parse(jsonStr);
if (dbObjectList != null && dbObjectList.size() > 0) {
for (int x = 0; x < dbObjectList.size(); x++) {
analysisSheetCellData(dbObjectList.get(x), setParam);
}
}
//fastjson $ref 循环引用
return JSONObject.toJSONString(dbObjectList, SerializerFeature.DisableCircularReferenceDetect);
}
/**
* sheet data
*
* @param dbObject
*/
private void analysisSheet(JSONObject dbObject, String setParma) {
//data是一个二维数组
if (dbObject.containsKey("data") && null != dbObject.get("data")) {
List<JSONArray> data = (List<JSONArray>) dbObject.get("data");
//行
for (int r = 0; r < data.size(); r++) {
JSONArray jsonArray = data.get(r);
//列
for (int c = 0; c < jsonArray.size(); c++) {
//单元格
JSONObject cell = jsonArray.getJSONObject(c);
if (null != cell && cell.containsKey("v") && StringUtils.isNotBlank(cell.getString("v"))) {
String v = cell.getString("v");
DataSetDto dataSet = getDataSet(v, setParma);
if (null != dataSet) {
OriginalDataDto originalDataDto = dataSetService.getData(dataSet);
if (null != originalDataDto.getData()) {
if (originalDataDto.getData().size() == 1) {
//对象
JSONObject jsonObject = originalDataDto.getData().get(0);
String fieldLabel = jsonObject.getString(dataSet.getFieldLabel());
String replace = v.replace("#{".concat(dataSet.getSetCode()).concat(".").concat(dataSet.getFieldLabel()).concat("}"), fieldLabel);
dbObject.getJSONArray("data").getJSONArray(r).getJSONObject(c).put("v", replace);
dbObject.getJSONArray("data").getJSONArray(r).getJSONObject(c).put("m", replace);
} else {
//集合
JSONObject jsonObject = originalDataDto.getData().get(0);
String fieldLabel = jsonObject.getString(dataSet.getFieldLabel());
String replace = v.replace("#{".concat(dataSet.getSetCode()).concat(".").concat(dataSet.getFieldLabel()).concat("}"), fieldLabel);
dbObject.getJSONArray("data").getJSONArray(r).getJSONObject(c).put("v", replace);
dbObject.getJSONArray("data").getJSONArray(r).getJSONObject(c).put("m", replace);
}
}
}
}
}
}
System.out.println("aaaa");
}
}
/**
* sheet celldata
*
* @param dbObject
*/
private void analysisSheetCellData(JSONObject dbObject, String setParam) {
//清空data值
dbObject.remove("data");
//celldata是一个一维数组
if (dbObject.containsKey("celldata") && null != dbObject.get("celldata")) {
List<JSONObject> celldata = new ArrayList<>();
celldata.addAll((List<JSONObject>) dbObject.get("celldata"));
// 遍历已存在的单元格,查看是否存在动态参数
for (int i = 0; i < celldata.size(); i++) {
//单元格对象
JSONObject cellObj = celldata.get(i);
//fastjson深拷贝问题
String cellStr = cellObj.toJSONString();
//行号
Integer r = cellObj.getInteger("r");
//列号
Integer c = cellObj.getInteger("c");
JSONObject cell = cellObj.getJSONObject("v");
if (null != cell && cell.containsKey("v") && StringUtils.isNotBlank(cell.getString("v"))) {
String v = cell.getString("v");
DataSetDto dataSet = getDataSet(v, setParam);
if (null != dataSet) {
OriginalDataDto originalDataDto = dataSetService.getData(dataSet);
if (null != originalDataDto.getData()) {
List<JSONObject> data = originalDataDto.getData();
for (int j = 0; j < data.size(); j++) {
if (j == 0) {
//处理当前行
//第一行,作为渲染参照数据
JSONObject jsonObject = data.get(j);
String fieldLabel = jsonObject.getString(dataSet.getFieldLabel());
String replace = v.replace("#{".concat(dataSet.getSetCode()).concat(".").concat(dataSet.getFieldLabel()).concat("}"), fieldLabel);
dbObject.getJSONArray("celldata").getJSONObject(i).getJSONObject("v").put("v", replace);
dbObject.getJSONArray("celldata").getJSONObject(i).getJSONObject("v").put("m", replace);
} else {
//新增的行数据
JSONObject addCell = data.get(j);
//字段
String fieldLabel = addCell.getString(dataSet.getFieldLabel());
String replace = v.replace("#{".concat(dataSet.getSetCode()).concat(".").concat(dataSet.getFieldLabel()).concat("}"), fieldLabel);
//转字符串,解决深拷贝问题
JSONObject addCellData = JSONObject.parseObject(cellStr);
addCellData.put("r", r + j);
addCellData.put("c", c);
addCellData.getJSONObject("v").put("v", replace);
addCellData.getJSONObject("v").put("m", replace);
dbObject.getJSONArray("celldata").add(addCellData);
}
}
}
}
}
}
}
}
/**
* #{xxxx.xxxxx}
* @param v
* @return
*/
private DataSetDto getDataSet(String v, String setParam) {
DataSetDto dto = new DataSetDto();
if (v.contains("#{") && v.contains("}")) {
int start = v.indexOf("#{") + 2;
int end = v.indexOf("}");
if (start < end) {
String substring = v.substring(start, end);
if (substring.contains(".")) {
String[] split = substring.split("\\.");
dto.setSetCode( split[0]);
dto.setFieldLabel(split[1]);
getContextData(setParam, dto);
return dto;
}
}
}
return null;
}
/**
*
* @param setParam
* @param dto
*/
private void getContextData(String setParam, DataSetDto dto) {
if (StringUtils.isNotBlank(setParam)) {
JSONObject setParamJson = JSONObject.parseObject(setParam);
Map<String, Object> map = new HashMap<>();
// 查询条件
if (setParamJson.containsKey(dto.getSetCode())) {
JSONObject paramCondition = setParamJson.getJSONObject(dto.getSetCode());
paramCondition.forEach(map::put);
}
dto.setContextData(map);
}
}
}

@ -0,0 +1,134 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Color;
import org.apache.poi.xssf.usermodel.XSSFColor;
/**
* https://github.com/mengshukeji/LuckysheetServer
*
* @author Administrator
*/
@Slf4j
public class ColorUtil {
private static final String S = "0123456789ABCDEF";
public static Short getColorByStr(String colorStr) {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFPalette palette = workbook.getCustomPalette();
if (colorStr.toLowerCase().startsWith("rgb")) {
colorStr = colorStr.toLowerCase().replace("rgb(", "").replace(")", "");
String[] colors = colorStr.split(",");
if (colors.length == 3) {
try {
int red = Integer.parseInt(colors[0].trim(), 16);
int green = Integer.parseInt(colors[1].trim(), 16);
int blue = Integer.parseInt(colors[2].trim(), 16);
HSSFColor hssfColor = palette.findSimilarColor(red, green, blue);
return hssfColor.getIndex();
} catch (Exception ex) {
log.error(ex.toString());
return null;
}
}
return null;
}
if (colorStr.equals("#000")) {
colorStr = "#000000";
}
if (colorStr != null && colorStr.length() >= 6) {
try {
if (colorStr.length() == 8) {
colorStr = colorStr.substring(2);
}
if (colorStr.length() == 7) {
colorStr = colorStr.substring(1);
}
String str2 = colorStr.substring(0, 2);
String str3 = colorStr.substring(2, 4);
String str4 = colorStr.substring(4, 6);
int red = Integer.parseInt(str2, 16);
int green = Integer.parseInt(str3, 16);
int blue = Integer.parseInt(str4, 16);
HSSFColor hssfColor = palette.findSimilarColor(red, green, blue);
return hssfColor.getIndex();
} catch (Exception ex) {
log.error(ex.toString());
return null;
}
}
return null;
}
/**
* RGB
*
* @param r
* @param g
* @param b
* @return
*/
public static String convertRGBToHex(short r, short g, short b) {
String hex = "";
if (r >= 0 && r < 256 && g >= 0 && g < 256 && b >= 0 && b < 256) {
int x, y, z;
x = r % 16;
r = (short) ((r - x) / 16);
y = g % 16;
g = (short) ((g - y) / 16);
z = b % 16;
b = (short) ((b - z) / 16);
hex = "#" + S.charAt(r) + S.charAt(x) + S.charAt(g) + S.charAt(y) + S.charAt(b) + S.charAt(z);
}
return hex;
}
/**
* @param cell
* @return RGB
* @description tintRBG
* @author zhouhang
* @date 2021/4/26
*/
public static String getFillColorHex(Cell cell) {
String fillColorString = null;
if (cell != null) {
CellStyle cellStyle = cell.getCellStyle();
Color color = cellStyle.getFillForegroundColorColor();
if (color instanceof XSSFColor) {
XSSFColor xssfColor = (XSSFColor) color;
byte[] argb = xssfColor.getARGB();
fillColorString = convertRGBToHex((short) (argb[1] & 0xFF), (short) (argb[2] & 0xFF), (short) (argb[3] & 0xFF));
// TODO: 2021/4/26 添加透明度
// if (xssfColor.hasTint()) {
// fillColorString += " * " + xssfColor.getTint();
// byte[] rgb = xssfColor.getRGBWithTint();
// fillColorString += " = [" + (argb[0] & 0xFF) + ", " + (rgb[0] & 0xFF) + ", " + (rgb[1] & 0xFF) + ", " + (rgb[2] & 0xFF) + "]";
// }
} else if (color instanceof HSSFColor) {
HSSFColor hssfColor = (HSSFColor) color;
short[] rgb = hssfColor.getTriplet();
fillColorString = convertRGBToHex((short) (rgb[0] & 0xFF), (short) (rgb[1] & 0xFF), (short) (rgb[2] & 0xFF));
//去除黑色背景
if (StringUtils.equals("#000000", fillColorString)) {
return null;
}
}
}
return fillColorString;
}
}

@ -0,0 +1,313 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.util;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* https://github.com/mengshukeji/LuckysheetServer
*
* @author cr
*/
public class ConstantUtil {
/**
*
*/
public static Map<Integer, String> ff_IntegerToName = new HashMap<Integer, String>();
/**
*
*/
public static Map<String, Integer> ff_NameToInteger = new HashMap<String, Integer>();
/**
* 36223714
*/
public static String[] number_type = null;
/**
* 36
*/
public static String[] number_format = null;
/**
*
*/
public static Map<String, Integer> number_format_map = new HashMap<String, Integer>();
static {
//格式
nf();
//字体
ff();
}
private static void nf() {
number_type = new String[]{
"General", "Decimal", "Decimal", "Decimal", "Decimal", "Currency", "Currency", "Currency", "Currency",
"Percentage", "Percentage", "Scientific", "Fraction", "Fraction", "Date", "Date", "Date", "Date",
"Time", "Time", "Time", "Time", "Time",
"", "", "", "", "", "", "", "", "", "", "", "", "", "",
"Accounting", "Accounting", "Accounting", "Accounting", "Accounting",
"Currency", "Accounting", "Currency", "Time", "Time", "Time", "Scientific", "Text"
};
number_format = new String[]{
"General", "0", "0.00", "#,##0", "#,##0.00", "$#,##0;($#,##0)", "$#,##0;[Red]($#,##0)", "$#,##0.00;($#,##0.00)", "$#,##0.00;[Red]($#,##0.00)",
"0%", "0.00%", "0.00E+00", "# ?/?", "# ??/??", "m/d/yyyy", "d-mmm-yy", "d-mmm", "mmm-yy",
"h:mm AM/PM", "h:mm:ss AM/PM", "h:mm", "h:mm:ss", "m/d/yyyy h:mm",
"", "", "", "", "", "", "", "", "", "", "", "", "", "",
"#,##0;(#,##0)", "#,##0;[Red](#,##0)", "#,##0.00;(#,##0.00)", "#,##0.00;[Red](#,##0.00)", "_ * #,##0_ ;_ * (#,##0)_ ;_ * \"-\"_ ;_ @_",
"_ $* #,##0_ ;_ $* (#,##0)_ ;_ $* \"-\"_ ;_ @_", "_ * #,##0.00_ ;_ * (#,##0.00)_ ;_ * \"-\"??_ ;_ @_", "_ $* #,##0.00_ ;_ $* (#,##0.00)_ ;_ $* \"-\"??_ ;_ @_", "mm:ss", "[h]:mm:ss", "mm:ss.0", "##0.0E+00", "@"
};
for (int x = 0; x < number_format.length; x++) {
if (number_format[x].length() > 0) {
number_format_map.put(number_format[x].toLowerCase(), x);
}
}
}
private static void ff() {
//0 微软雅黑、1 宋体Song、2 黑体ST Heiti、3 楷体ST Kaiti、 4仿宋ST FangSong、 5 新宋体ST Song
// 6 华文新魏、 7华文行楷、 8 华文隶书、 9 Arial、 10 Times New Roman 、11 Tahoma 、12 Verdana
ff_IntegerToName.put(0, "微软雅黑");
ff_IntegerToName.put(1, "宋体");
ff_IntegerToName.put(2, "黑体");
ff_IntegerToName.put(3, "楷体");
ff_IntegerToName.put(4, "仿宋");
ff_IntegerToName.put(5, "新宋体");
ff_IntegerToName.put(6, "华文新魏");
ff_IntegerToName.put(7, "华文行楷");
ff_IntegerToName.put(8, "华文隶书");
ff_IntegerToName.put(9, "Arial");
ff_IntegerToName.put(10, "Times New Roman");
ff_IntegerToName.put(11, "Tahoma");
ff_IntegerToName.put(12, "Verdana");
//0 微软雅黑、1 宋体Song、2 黑体ST Heiti、3 楷体ST Kaiti、 4仿宋ST FangSong、 5 新宋体ST Song
// 6 华文新魏、 7华文行楷、 8 华文隶书、 9 Arial、 10 Times New Roman 、11 Tahoma 、12 Verdana
ff_NameToInteger.put("微软雅黑", 0);
ff_NameToInteger.put("宋体", 1);
ff_NameToInteger.put("Song", 1);
ff_NameToInteger.put("黑体", 2);
ff_NameToInteger.put("ST Heiti", 2);
ff_NameToInteger.put("楷体", 3);
ff_NameToInteger.put("ST Kaiti", 3);
ff_NameToInteger.put("仿宋", 4);
ff_NameToInteger.put("ST FangSong", 4);
ff_NameToInteger.put("新宋体", 5);
ff_NameToInteger.put("ST Song", 5);
ff_NameToInteger.put("华文新魏", 6);
ff_NameToInteger.put("华文行楷", 7);
ff_NameToInteger.put("华文隶书", 8);
ff_NameToInteger.put("Arial", 9);
ff_NameToInteger.put("Times New Roman", 10);
ff_NameToInteger.put("Tahoma", 11);
ff_NameToInteger.put("Verdana", 12);
}
private static void borderType() {
//"border-left" | "border-right" | "border-top" | "border-bottom" | "border-all"
// | "border-outside" | "border-inside" | "border-horizontal" | "border-vertical" | "border-none"
ff_IntegerToName.put(0, "微软雅黑");
ff_IntegerToName.put(1, "宋体");
ff_IntegerToName.put(2, "黑体");
ff_IntegerToName.put(3, "楷体");
ff_IntegerToName.put(4, "仿宋");
ff_IntegerToName.put(5, "新宋体");
ff_IntegerToName.put(6, "华文新魏");
ff_IntegerToName.put(7, "华文行楷");
ff_IntegerToName.put(8, "华文隶书");
ff_IntegerToName.put(9, "Arial");
ff_IntegerToName.put(10, "Times New Roman");
ff_IntegerToName.put(11, "Tahoma");
ff_IntegerToName.put(12, "Verdana");
//0 微软雅黑、1 宋体Song、2 黑体ST Heiti、3 楷体ST Kaiti、 4仿宋ST FangSong、 5 新宋体ST Song
// 6 华文新魏、 7华文行楷、 8 华文隶书、 9 Arial、 10 Times New Roman 、11 Tahoma 、12 Verdana
ff_NameToInteger.put("微软雅黑", 0);
ff_NameToInteger.put("宋体", 1);
ff_NameToInteger.put("Song", 1);
ff_NameToInteger.put("黑体", 2);
ff_NameToInteger.put("ST Heiti", 2);
ff_NameToInteger.put("楷体", 3);
ff_NameToInteger.put("ST Kaiti", 3);
ff_NameToInteger.put("仿宋", 4);
ff_NameToInteger.put("ST FangSong", 4);
ff_NameToInteger.put("新宋体", 5);
ff_NameToInteger.put("ST Song", 5);
ff_NameToInteger.put("华文新魏", 6);
ff_NameToInteger.put("华文行楷", 7);
ff_NameToInteger.put("华文隶书", 8);
ff_NameToInteger.put("Arial", 9);
ff_NameToInteger.put("Times New Roman", 10);
ff_NameToInteger.put("Tahoma", 11);
ff_NameToInteger.put("Verdana", 12);
}
/**
*
*
* @param fa
* @return
*/
public static Integer getNumberFormatMap(String fa) {
if (number_format_map.containsKey(fa.toLowerCase())) {
return number_format_map.get(fa.toLowerCase());
}
return -1;
}
/**
* poi 0 1 2
*
* @param i
* @return
*/
public static VerticalAlignment getVerticalType(int i) {
if (0 == i) {
return VerticalAlignment.CENTER;
} else if (1 == i) {
return VerticalAlignment.TOP;
} else if (2 == i) {
return VerticalAlignment.BOTTOM;
}
//默认居中
return VerticalAlignment.CENTER;
}
/**
* poi 0 1 2
*
* @param i
* @return
*/
public static HorizontalAlignment getHorizontaltype(int i) {
if (2 == i) {
return HorizontalAlignment.RIGHT;
} else if (1 == i) {
return HorizontalAlignment.LEFT;
} else if (0 == i) {
return HorizontalAlignment.CENTER;
}
//默认右
return HorizontalAlignment.RIGHT;
}
/**
*
* 0=0,1=452=-453=4=905=-90
*
* @param i
* @return
*/
public static short getRotation(int i) {
short t = 0;
switch (i) {
case 1:
t = 45;
break;
case 2:
t = -45;
break;
case 3:
t = 255;
break;
case 4:
t = 90;
break;
case 5:
t = -90;
break;
default:
t = 0;
}
return t;
}
private static SimpleDateFormat df_DateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static Date stringToDateTime(String date) {
if (date == null || date.length() == 0) {
return null;
}
try {
return df_DateTime.parse(date);
} catch (ParseException e) {
return null;
}
}
private static SimpleDateFormat df_Date = new SimpleDateFormat("yyyy-MM-dd");
public static Date stringToDate(String date) {
if (date == null || date.length() == 0) {
return null;
}
try {
return df_Date.parse(date);
} catch (ParseException e) {
return null;
}
}
public static Date toDate(String numberString) {
try {
Double _d = Double.parseDouble(numberString);
String _s = toDate(_d, "yyyy-MM-dd HH:mm:ss");
if (numberString.indexOf(".") > -1) {
return stringToDate(_s);
} else {
return stringToDateTime(_s);
}
} catch (Exception ex) {
System.out.println(ex.toString() + " " + numberString);
}
return null;
}
private static final int SECONDS_PER_MINUTE = 60;
private static final int MINUTES_PER_HOUR = 60;
private static final int HOURS_PER_DAY = 24;
private static final int SECONDS_PER_DAY = (HOURS_PER_DAY * MINUTES_PER_HOUR * SECONDS_PER_MINUTE);
/**
*
**/
private static final long DAY_MILLISECONDS = SECONDS_PER_DAY * 1000L;
/**
*
*
* @parma numberString
* @parma format "hh:mm:ss"
**/
public static String toDate(double numberString, String format) {
SimpleDateFormat sdFormat = new SimpleDateFormat(format);
int wholeDays = (int) Math.floor(numberString);
int millisecondsInday = (int) ((numberString - wholeDays) * DAY_MILLISECONDS + 0.5);
Calendar calendar = new GregorianCalendar();
setCalendar(calendar, wholeDays, millisecondsInday, false);
return sdFormat.format(calendar.getTime());
}
private static void setCalendar(Calendar calendar, int wholeDays,
int millisecondsInDay, boolean use1904windowing) {
int startYear = 1900;
int dayAdjust = -1; // Excel thinks 2/29/1900 is a valid date, which it isn't
if (use1904windowing) {
startYear = 1904;
dayAdjust = 1; // 1904 date windowing uses 1/2/1904 as the first day
} else if (wholeDays < 61) {
// Date is prior to 3/1/1900, so adjust because Excel thinks 2/29/1900 exists
// If Excel date == 2/29/1900, will become 3/1/1900 in Java representation
dayAdjust = 0;
}
calendar.set(startYear, 0, wholeDays + dayAdjust, 0, 0, 0);
calendar.set(GregorianCalendar.MILLISECOND, millisecondsInDay);
}
}

@ -0,0 +1,28 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.util;
public class MSExcelUtil {
public static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
public static final short EXCEL_ROW_HEIGHT_FACTOR = 20;
public static final int UNIT_OFFSET_LENGTH = 7;
public static final int[] UNIT_OFFSET_MAP = new int[]{0, 36, 73, 109, 146, 182, 219};
public static short pixel2WidthUnits(int pxs) {
short widthUnits = (short) (EXCEL_COLUMN_WIDTH_FACTOR * (pxs / UNIT_OFFSET_LENGTH));
widthUnits += UNIT_OFFSET_MAP[(pxs % UNIT_OFFSET_LENGTH)];
return widthUnits;
}
public static int widthUnits2Pixel(short widthUnits) {
int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR) * UNIT_OFFSET_LENGTH;
int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
pixels += Math.floor((float) offsetWidthUnits / ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
public static int heightUnits2Pixel(short heightUnits) {
int pixels = (heightUnits / EXCEL_ROW_HEIGHT_FACTOR);
int offsetWidthUnits = heightUnits % EXCEL_ROW_HEIGHT_FACTOR;
pixels += Math.floor((float) offsetWidthUnits / ((float) EXCEL_ROW_HEIGHT_FACTOR / UNIT_OFFSET_LENGTH));
return pixels;
}
}

@ -0,0 +1,860 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import java.util.*;
/**
* https://github.com/mengshukeji/LuckysheetServer
* sheet
*
* @author Administrator
*/
@Slf4j
public class XlsSheetUtil {
/**
* sheet
*
* @param wb
* @param sheetNum
* @param dbObject
*/
public static void exportSheet(Workbook wb, int sheetNum, JSONObject dbObject) {
Sheet sheet = wb.createSheet();
//设置sheet位置名称
if (dbObject.containsKey("name") && dbObject.get("name") != null) {
wb.setSheetName(sheetNum, dbObject.get("name").toString());
} else {
wb.setSheetName(sheetNum, "sheet" + sheetNum);
}
//是否隐藏
if (dbObject.containsKey("hide") && dbObject.get("hide").toString().equals("1")) {
wb.setSheetHidden(sheetNum, true);
}
//是否当前选中页
if (dbObject.containsKey("status") && dbObject.get("status").toString().equals("1")) {
sheet.setSelected(true);
}
//循环数据
if (dbObject.containsKey("celldata") && dbObject.get("celldata") != null) {
//取到所有单元格集合
List<JSONObject> cells_json = (List<JSONObject>) dbObject.get("celldata");
Map<Integer, List<JSONObject>> cellMap = cellGroup(cells_json);
//循环每一行
for (Integer r : cellMap.keySet()) {
Row row = sheet.createRow(r);
//循环每一列
for (JSONObject col : cellMap.get(r)) {
createCell(wb, sheet, row, col);
}
}
}
if (dbObject.containsKey("config") && dbObject.getJSONObject("config").containsKey("borderInfo")) {
JSONArray borderInfo = dbObject.getJSONObject("config").getJSONArray("borderInfo");
setCellBoard(wb, borderInfo, sheet);
}
setColumAndRow(dbObject, sheet);
}
/**
*
*
* @param row
* @param dbObject
*/
private static void createCell(Workbook wb, Sheet sheet, Row row, JSONObject dbObject) {
if (dbObject.containsKey("c")) {
Integer c = getStrToInt(dbObject.get("c"));
if (c != null) {
Cell cell = row.createCell(c);
//取单元格中的v_json
if (dbObject.containsKey("v")) {
//获取v对象
Object obj = dbObject.get("v");
if (obj == null) {
//没有内容
return;
}
//如果v对象直接是字符串
if (obj instanceof String) {
if (((String) obj).length() > 0) {
cell.setCellValue(obj.toString());
}
return;
}
//转换v为对象(v是一个对象)
JSONObject v_json = (JSONObject) obj;
//样式
CellStyle style = wb.createCellStyle();
cell.setCellStyle(style);
//合并单元格
//参数1起始行 参数2终止行 参数3起始列 参数4终止列
//CellRangeAddress region1 = new CellRangeAddress(rowNumber, rowNumber, (short) 0, (short) 11);
//mc 合并单元格
if (v_json.containsKey("mc")) {
//是合并的单元格
JSONObject mc = v_json.getJSONObject("mc");
if (mc.containsKey("rs") && mc.containsKey("cs")) {
//合并的第一个单元格
if (mc.containsKey("r") && mc.containsKey("c")) {
Integer _rs = getIntByDBObject(mc, "rs") - 1;
Integer _cs = getIntByDBObject(mc, "cs") - 1;
Integer _r = getIntByDBObject(mc, "r");
Integer _c = getIntByDBObject(mc, "c");
CellRangeAddress region = new CellRangeAddress(_r.shortValue(), (_r.shortValue() + _rs.shortValue()), _c.shortValue(), (_c.shortValue() + _cs.shortValue()));
sheet.addMergedRegion(region);
}
} else {
//不是合并的第一个单元格
return;
}
}
//取v值 (在数据类型中处理)
//ct 单元格值格式 (fa,t)
setFormatByCt(wb, cell, style, v_json);
//font设置
setCellStyleFont(wb, style, v_json);
//bg 背景颜色
if (v_json.containsKey("bg")) {
String _v = getByDBObject(v_json, "bg");
Short _color = ColorUtil.getColorByStr(_v);
if (_color != null) {
style.setFillForegroundColor(_color);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
}
}
//vt 垂直对齐 垂直对齐方式0=居中1=上2=下)
if (v_json.containsKey("vt")) {
Integer _v = getIntByDBObject(v_json, "vt");
if (_v != null && _v >= 0 && _v <= 2) {
style.setVerticalAlignment(ConstantUtil.getVerticalType(_v));
}
} else {
//默认设置居中
style.setVerticalAlignment(ConstantUtil.getVerticalType(0));
}
//ht 水平对齐 水平对齐方式0=居中1=左对齐2=右对齐)
if (v_json.containsKey("ht")) {
Integer _v = getIntByDBObject(v_json, "ht");
if (_v != null && _v >= 0 && _v <= 2) {
style.setAlignment(ConstantUtil.getHorizontaltype(_v));
}
} else {
//默认设置左对齐
style.setAlignment(ConstantUtil.getHorizontaltype(1));
}
//tr 文字旋转 文字旋转角度0=0,1=452=-453=竖排文字4=905=-90
if (v_json.containsKey("tr")) {
Integer _v = getIntByDBObject(v_json, "tr");
if (_v != null) {
style.setRotation(ConstantUtil.getRotation(_v));
}
}
//tb 文本换行 0 截断、1溢出、2 自动换行
// 2setTextWrapped 0和1IsTextWrapped = true
if (v_json.containsKey("tb")) {
Integer _v = getIntByDBObject(v_json, "tb");
if (_v != null) {
if (_v >= 0 && _v <= 1) {
style.setWrapText(false);
} else {
style.setWrapText(true);
}
}
}
//f 公式
if (v_json.containsKey("f")) {
String _v = getByDBObject(v_json, "f");
if (_v.length() > 0) {
try {
if (_v.startsWith("=")) {
cell.setCellFormula(_v.substring(1));
} else {
cell.setCellFormula(_v);
}
} catch (Exception ex) {
log.error("公式 {};Error:{}", _v, ex.toString());
}
}
}
}
}
}
}
/**
*
*
* @param borderInfo
* @param sheet
*/
private static void setCellBoard(Workbook wb, JSONArray borderInfo, Sheet sheet) {
//一定要通过 cell.getCellStyle() 不然的话之前设置的样式会丢失
//设置边框
for (int i = 0; i < borderInfo.size(); i++) {
JSONObject borderInfoObject = (JSONObject) borderInfo.get(i);
if (borderInfoObject.get("rangeType").equals("cell")) {//单个单元格
JSONObject borderValueObject = borderInfoObject.getJSONObject("value");
JSONObject l = borderValueObject.getJSONObject("l");
JSONObject r = borderValueObject.getJSONObject("r");
JSONObject t = borderValueObject.getJSONObject("t");
JSONObject b = borderValueObject.getJSONObject("b");
int row_ = borderValueObject.getInteger("row_index");
int col_ = borderValueObject.getInteger("col_index");
Row row = sheet.getRow(row_);
if (null == row) {
row = sheet.createRow(row_);
}
Cell cell = row.getCell(col_);
CellStyle style;
if (null == cell) {
style = wb.createCellStyle();
cell = row.createCell(col_);
cell.setCellStyle(style);
} else {
style = cell.getCellStyle();
}
if (l != null) {
style.setBorderLeft(BorderStyle.valueOf(l.getShort("style"))); //左边框
Short color = ColorUtil.getColorByStr(l.getString("color"));
if (null != color) {
style.setLeftBorderColor(color);//左边框颜色
}
}
if (r != null) {
style.setBorderRight(BorderStyle.valueOf(r.getShort("style"))); //右边框
Short color = ColorUtil.getColorByStr(r.getString("color"));
if (null != color) {
style.setRightBorderColor(color);//右边框颜色
}
}
if (t != null) {
style.setBorderTop(BorderStyle.valueOf(t.getShort("style"))); //顶部边框
Short _vcolor = ColorUtil.getColorByStr(t.getString("color"));
if (null != _vcolor) {
style.setTopBorderColor(_vcolor);//顶部边框颜色
}
}
if (b != null) {
style.setBorderBottom(BorderStyle.valueOf(b.getShort("style"))); //底部边框
Short _vcolor = ColorUtil.getColorByStr(b.getString("color"));
if (_vcolor != null) {
//底部边框颜色
style.setBottomBorderColor(_vcolor);
}
}
} else if (borderInfoObject.get("rangeType").equals("range")) {
//选区
Short style_ = borderInfoObject.getShort("style");
String borderType = borderInfoObject.getString("borderType");
Short color = ColorUtil.getColorByStr(borderInfoObject.getString("color"));
JSONObject rangObject = (JSONObject) ((JSONArray) (borderInfoObject.get("range"))).get(0);
JSONArray rowList = rangObject.getJSONArray("row");
JSONArray columnList = rangObject.getJSONArray("column");
for (int row_ = rowList.getInteger(0); row_ < rowList.getInteger(rowList.size() - 1) + 1; row_++) {
for (int col_ = columnList.getInteger(0); col_ < columnList.getInteger(columnList.size() - 1) + 1; col_++) {
Row row = sheet.getRow(row_);
if (null == row) {
row = sheet.createRow(row_);
}
Cell cell = row.getCell(col_);
CellStyle style;
if (null == cell) {
style = wb.createCellStyle();
cell = row.createCell(col_);
cell.setCellStyle(style);
} else {
style = cell.getCellStyle();
}
//"border-left" | "border-right" | "border-top" | "border-bottom" | "border-all" | "border-horizontal" | "border-vertical"
// "border-outside" | "border-inside" | | "border-none"
if ("border-left".equals(borderType) || "border-all".equals(borderType)) {
style.setBorderLeft(BorderStyle.valueOf(style_)); //左边框
style.setLeftBorderColor(color);//左边框颜色
}
if ("border-right".equals(borderType) || "border-all".equals(borderType)) {
style.setBorderRight(BorderStyle.valueOf(style_)); //右边框
style.setRightBorderColor(color);//右边框颜色
}
if ("border-top".equals(borderType) || "border-all".equals(borderType)) {
style.setBorderTop(BorderStyle.valueOf(style_)); //顶部边框
style.setTopBorderColor(color);//顶部边框颜色
}
if ("border-bottom".equals(borderType) || "border-all".equals(borderType)) {
style.setBorderBottom(BorderStyle.valueOf(style_)); //底部边框
style.setBottomBorderColor(color);//底部边框颜色 }
}
if ("border-outside".equals(borderType)) {
//外圈边框
if (row_ == rowList.getInteger(0)) {
style.setBorderTop(BorderStyle.valueOf(style_)); //顶部边框
style.setTopBorderColor(color);//顶部边框颜色
}
if (col_ == columnList.getInteger(0)) {
style.setBorderLeft(BorderStyle.valueOf(style_)); //左边框
style.setLeftBorderColor(color);//左边框颜色
}
if (row_ == rowList.getInteger(rowList.size() - 1)) {
style.setBorderBottom(BorderStyle.valueOf(style_)); //底部边框
style.setBottomBorderColor(color);//底部边框颜色 }
}
if (col_ == columnList.getInteger(columnList.size() - 1)) {
style.setBorderRight(BorderStyle.valueOf(style_)); //右边框
style.setRightBorderColor(color);//右边框颜色
}
}
if ("border-horizontal".equals(borderType) || "border-inside".equals(borderType)) {
//内部横线
if (row_ >= rowList.getInteger(0)
&& row_ < rowList.getInteger(rowList.size() - 1)
&& col_ >= columnList.getInteger(0)
&& col_ <= columnList.getInteger(columnList.size() - 1)) {
style.setBorderBottom(BorderStyle.valueOf(style_)); //底部边框
style.setBottomBorderColor(color);//底部边框颜色 }
}
}
if ("border-vertical".equals(borderType) || "border-inside".equals(borderType)) {
//内部竖线
if (row_ >= rowList.getInteger(0)
&& row_ <= rowList.getInteger(rowList.size() - 1)
&& col_ >= columnList.getInteger(0)
&& col_ < columnList.getInteger(columnList.size() - 1)) {
style.setBorderRight(BorderStyle.valueOf(style_)); //右边框
style.setRightBorderColor(color);//右边框颜色
}
}
if ("border-none".equals(borderType)) {
style.setBorderLeft(BorderStyle.NONE); //左边框
style.setBorderRight(BorderStyle.NONE); //左边框
style.setBorderTop(BorderStyle.NONE); //左边框
style.setBorderBottom(BorderStyle.NONE); //左边框
}
}
}
}
}
}
/**
*
*
* @param dbObject
* @param sheet
*/
private static void setColumAndRow(JSONObject dbObject, Sheet sheet) {
if (dbObject.containsKey("config")) {
JSONObject config = dbObject.getJSONObject("config");
if (config.containsKey("columnlen")) {
JSONObject columnlen = config.getJSONObject("columnlen");
if (columnlen != null) {
for (String k : columnlen.keySet()) {
Integer _i = getStrToInt(k);
Integer _v = getStrToInt(columnlen.get(k).toString());
if (_i != null && _v != null) {
// sheet.setColumnWidth(_i, MSExcelUtil.heightUnits2Pixel(_v.shortValue()));
// TODO 乘以32有待商榷
sheet.setColumnWidth(_i, _v * 32);
}
}
}
}
if (config.containsKey("rowlen")) {
JSONObject rowlen = config.getJSONObject("rowlen");
if (rowlen != null) {
for (String k : rowlen.keySet()) {
Integer _i = getStrToInt(k);
Integer _v = getStrToInt(rowlen.get(k).toString());
if (_i != null && _v != null) {
Row row = sheet.getRow(_i);
if (row != null) {
// row.setHeightInPoints(MSExcelUtil.pixel2WidthUnits(_v.shortValue()));
row.setHeightInPoints(_v.shortValue());
}
}
}
}
}
}
}
/**
*
*
* @param wb
* @param style
* @param dbObject
*/
private static void setCellStyleFont(Workbook wb, CellStyle style, JSONObject dbObject) {
Font font = wb.createFont();
style.setFont(font);
//ff 字体
if (dbObject.containsKey("ff")) {
if (dbObject.get("ff") instanceof Integer) {
Integer _v = getIntByDBObject(dbObject, "ff");
if (_v != null && ConstantUtil.ff_IntegerToName.containsKey(_v)) {
font.setFontName(ConstantUtil.ff_IntegerToName.get(_v));
}
} else if (dbObject.get("ff") instanceof String) {
font.setFontName(getByDBObject(dbObject, "ff"));
}
}
//fc 字体颜色
if (dbObject.containsKey("fc")) {
String _v = getByDBObject(dbObject, "fc");
Short _color = ColorUtil.getColorByStr(_v);
if (_color != null) {
font.setColor(_color);
}
}
//bl 粗体
if (dbObject.containsKey("bl")) {
Integer _v = getIntByDBObject(dbObject, "bl");
if (_v != null) {
if (_v.equals(1)) {
//是否粗体显示
font.setBold(true);
} else {
font.setBold(false);
}
}
}
//it 斜体
if (dbObject.containsKey("it")) {
Integer _v = getIntByDBObject(dbObject, "it");
if (_v != null) {
if (_v.equals(1)) {
font.setItalic(true);
} else {
font.setItalic(false);
}
}
}
//fs 字体大小
if (dbObject.containsKey("fs")) {
Integer _v = getStrToInt(getObjectByDBObject(dbObject, "fs"));
if (_v != null) {
font.setFontHeightInPoints(_v.shortValue());
}
}
//cl 删除线 (导入没有) 0 常规 、 1 删除线
if (dbObject.containsKey("cl")) {
Integer _v = getIntByDBObject(dbObject, "cl");
if (_v != null) {
if (_v.equals(1)) {
font.setStrikeout(true);
}
}
}
//ul 下划线
if (dbObject.containsKey("ul")) {
Integer _v = getIntByDBObject(dbObject, "ul");
if (_v != null) {
if (_v.equals(1)) {
font.setUnderline(Font.U_SINGLE);
} else {
font.setUnderline(Font.U_NONE);
}
}
}
}
/**
* cell
*
* @param style
* @param dbObject json
* @param bs
* @param bc
*/
private static void setBorderStyle(CellStyle style, JSONObject dbObject, String bs, String bc) {
//bs 边框样式
if (dbObject.containsKey(bs)) {
Integer _v = getStrToInt(getByDBObject(dbObject, bs));
if (_v != null) {
//边框没有,不作改变
if (bs.equals("bs") || bs.equals("bs_t")) {
style.setBorderTop(BorderStyle.valueOf(_v.shortValue()));
}
if (bs.equals("bs") || bs.equals("bs_b")) {
style.setBorderBottom(BorderStyle.valueOf(_v.shortValue()));
}
if (bs.equals("bs") || bs.equals("bs_l")) {
style.setBorderLeft(BorderStyle.valueOf(_v.shortValue()));
}
if (bs.equals("bs") || bs.equals("bs_r")) {
style.setBorderRight(BorderStyle.valueOf(_v.shortValue()));
}
//bc 边框颜色
String _vcolor = getByDBObject(dbObject, bc);
if (_vcolor != null) {
Short _color = ColorUtil.getColorByStr(_vcolor);
if (_color != null) {
if (bc.equals("bc") || bc.equals("bc_t")) {
style.setTopBorderColor(_color);
}
if (bc.equals("bc") || bc.equals("bc_b")) {
style.setBottomBorderColor(_color);
}
if (bc.equals("bc") || bc.equals("bc_l")) {
style.setLeftBorderColor(_color);
}
if (bc.equals("bc") || bc.equals("bc_r")) {
style.setRightBorderColor(_color);
}
}
}
}
}
}
/**
* ct (fa,t)
*
* @param cell
* @param style
* @param dbObject
*/
private static void setFormatByCt(Workbook wb, Cell cell, CellStyle style, JSONObject dbObject) {
if (!dbObject.containsKey("v") && dbObject.containsKey("ct")) {
/*
{
"celldata": [{
"c": 0,
"r": 8,
"v": {
"ct": {
"s": [{
"v": "sdsdgdf\r\ndfgdfg\r\ndsfgdfgdf\r\ndsfgdfg"
}],
"t": "inlineStr",
"fa": "General"
}
}
}]
}
*/
JSONObject ct = dbObject.getJSONObject("ct");
if (ct.containsKey("s")) {
Object s = ct.get("s");
if (s instanceof List && ((List) s).size() > 0) {
JSONObject _s1 = (JSONObject) ((List) s).get(0);
if (_s1.containsKey("v") && _s1.get("v") instanceof String) {
dbObject.put("v", _s1.get("v"));
style.setWrapText(true);
}
}
}
}
//String v = ""; //初始化
if (dbObject.containsKey("v")) {
//v = v_json.get("v").toString();
//取到v后存到poi单元格对象
//设置该单元格值
//cell.setValue(v);
//String v=getByDBObject(v_json,"v");
//cell.setValue(v);
Object obj = getObjectByDBObject(dbObject, "v");
if (obj instanceof Number) {
cell.setCellValue(Double.valueOf(obj.toString()));
} else if (obj instanceof Double) {
cell.setCellValue((Double) obj);
} else if (obj instanceof Date) {
cell.setCellValue((Date) obj);
} else if (obj instanceof Calendar) {
cell.setCellValue((Calendar) obj);
} else if (obj instanceof RichTextString) {
cell.setCellValue((RichTextString) obj);
} else if (obj instanceof String) {
cell.setCellValue((String) obj);
} else {
cell.setCellValue(obj.toString());
}
}
if (dbObject.containsKey("ct")) {
JSONObject ct = dbObject.getJSONObject("ct");
if (ct.containsKey("fa") && ct.containsKey("t")) {
//t 0=bool1=datetime2=error3=null4=numeric5=string6=unknown
String fa = getByDBObject(ct, "fa"); //单元格格式format定义串
String t = getByDBObject(ct, "t"); //单元格格式type类型
Integer _i = ConstantUtil.getNumberFormatMap(fa);
switch (t) {
case "s": {
//字符串
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
style.setDataFormat((short) 0);
}
cell.setCellType(CellType.STRING);
break;
}
case "d": {
//日期
Date _d = null;
String v = getByDBObject(dbObject, "m");
if (v.length() == 0) {
v = getByDBObject(dbObject, "v");
}
if (v.length() > 0) {
if (v.indexOf("-") > -1) {
if (v.indexOf(":") > -1) {
_d = ConstantUtil.stringToDateTime(v);
} else {
_d = ConstantUtil.stringToDate(v);
}
} else {
_d = ConstantUtil.toDate(v);
}
}
if (_d != null) {
//能转换为日期
cell.setCellValue(_d);
DataFormat format = wb.createDataFormat();
style.setDataFormat(format.getFormat(fa));
} else {
//不能转换为日期
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
style.setDataFormat((short) 0);
}
}
break;
}
case "b": {
//逻辑
cell.setCellType(CellType.BOOLEAN);
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
DataFormat format = wb.createDataFormat();
style.setDataFormat(format.getFormat(fa));
}
break;
}
case "n": {
//数值
// cell.setCellType(CellType.NUMERIC);
//数字转字符串
cell.setCellType(CellType.STRING);
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
DataFormat format = wb.createDataFormat();
style.setDataFormat(format.getFormat(fa));
}
break;
}
case "u":
case "g": {
//general 自动类型
//cell.setCellType(CellType._NONE);
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
DataFormat format = wb.createDataFormat();
style.setDataFormat(format.getFormat(fa));
}
break;
}
case "e": {
//错误
cell.setCellType(CellType.ERROR);
if (_i >= 0) {
style.setDataFormat(_i.shortValue());
} else {
DataFormat format = wb.createDataFormat();
style.setDataFormat(format.getFormat(fa));
}
break;
}
}
}
}
}
/**
*
*
* @param cells
* @return
*/
private static Map<Integer, List<JSONObject>> cellGroup(List<JSONObject> cells) {
Map<Integer, List<JSONObject>> cellMap = new HashMap<>(100);
for (JSONObject dbObject : cells) {
//行号
if (dbObject.containsKey("r")) {
Integer r = getStrToInt(dbObject.get("r"));
if (r != null) {
if (cellMap.containsKey(r)) {
cellMap.get(r).add(dbObject);
} else {
List<JSONObject> list = new ArrayList<>(10);
list.add(dbObject);
cellMap.put(r, list);
}
}
}
}
return cellMap;
}
/**
* k
*
* @param b
* @param k
* @return
*/
public static String getByDBObject(JSONObject b, String k) {
if (b.containsKey(k)) {
if (b.get(k) != null && b.get(k) instanceof String) {
return b.getString(k);
}
}
return null;
}
/**
* k
*
* @param b
* @param k
* @return
*/
public static Object getObjectByDBObject(JSONObject b, String k) {
if (b.containsKey(k)) {
if (b.get(k) != null) {
return b.get(k);
}
}
return "";
}
/**
* / null
*
* @param b
* @param k
* @return
*/
public static Integer getIntByDBObject(JSONObject b, String k) {
if (b.containsKey(k)) {
if (b.get(k) != null) {
try {
String _s = b.getString(k).replace("px", "");
Double _d = Double.parseDouble(_s);
return _d.intValue();
} catch (Exception ex) {
log.error(ex.getMessage());
return null;
}
}
}
return null;
}
/**
* int
*
* @param str
* @return
*/
private static Integer getStrToInt(Object str) {
try {
if (str != null) {
return Integer.parseInt(str.toString());
}
return null;
} catch (Exception ex) {
log.error("String:{};Error:{}", str, ex.getMessage());
return null;
}
}
private static Short getStrToShort(Object str) {
try {
if (str != null) {
return Short.parseShort(str.toString());
}
return null;
} catch (Exception ex) {
log.error("String:{};Error:{}", str, ex.getMessage());
return null;
}
}
}

@ -0,0 +1,453 @@
package com.anjiplus.template.gaea.business.modules.reportexcel.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.anjiplus.template.gaea.business.enums.ExcelCenterStyleEnum;
import com.anjiplus.template.gaea.business.modules.reportexcel.controller.dto.GridRecordDataModel;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.io.OutputStream;
import java.util.*;
/**
* https://github.com/mengshukeji/LuckysheetServer
* 使poixls
*
* @author Administrator
*/
public class XlsUtil {
private final static String MODEL = "{\"c\":0,\"r\":0,\"v\":{\"m\":\"模板\",\"v\":\"模板\",\"bl\":1,\"ct\":{\"t\":\"g\",\"fa\":\"General\"}}}";
private final static String BORDER_MODEL = "{\"rangeType\":\"cell\",\"value\":{\"b\":{\"color\":\"rgb(0, 0, 0)\",\"style\":1},\"r\":{\"color\":\"rgb(0, 0, 0)\",\"style\":1},\"col_index\":5,\"t\":{\"color\":\"rgb(0, 0, 0)\",\"style\":1},\"row_index\":7,\"l\":{\"color\":\"rgb(0, 0, 0)\",\"style\":1}}}";
/**
*
*/
private static final int DEFAULT_ROW_INDEX = 84;
/**
*
*/
private static final int DEFAULT_COLUMN_INDEX = 64;
/**
*
*
* @param outputStream
* @param isXlsx xlsx
* @param dbObjectList
*/
public static void exportXlsFile(OutputStream outputStream, Boolean isXlsx, List<JSONObject> dbObjectList) throws IOException {
Workbook wb = null;
if (isXlsx) {
wb = new XSSFWorkbook();
} else {
wb = new HSSFWorkbook();
}
if (dbObjectList != null && dbObjectList.size() > 0) {
for (int x = 0; x < dbObjectList.size(); x++) {
XlsSheetUtil.exportSheet(wb, x, dbObjectList.get(x));
}
}
wb.write(outputStream);
}
/**
* @param workbook 簿
* @return Map
* @description excel
* @author zhouhang
* @date 2021/4/20
*/
public static List<GridRecordDataModel> readExcel(Workbook workbook) {
List<GridRecordDataModel> list = new ArrayList<>();
Iterator<Sheet> sheetIterator = workbook.sheetIterator();
int sheetIndex = 0;
while (sheetIterator.hasNext()) {
Sheet sheet = sheetIterator.next();
//生成默认MODEL
GridRecordDataModel model;
if (Objects.equals(0, sheetIndex)) {
model = strToModel("", (sheetIndex + 1) + "", 1, sheetIndex);
} else {
model = strToModel("", (sheetIndex + 1) + "", 0, sheetIndex);
}
sheetIndex++;
//读取sheet页
readSheet(sheet, model, workbook);
//设置sheet页名称
model.getJson_data().put("name", sheet.getSheetName());
list.add(model);
}
return list;
}
public static GridRecordDataModel strToModel(String list_id, String index, int status, int order) {
String strSheet = "{\"row\":84,\"name\":\"reSheetName\",\"chart\":[],\"color\":\"\",\"index\":\"reIndex\",\"order\":reOrder,\"column\":60,\"config\":{},\"status\":reStatus,\"celldata\":[],\"ch_width\":4748,\"rowsplit\":[],\"rh_height\":1790,\"scrollTop\":0,\"scrollLeft\":0,\"visibledatarow\":[],\"visibledatacolumn\":[],\"jfgird_select_save\":[],\"jfgrid_selection_range\":{}}";
strSheet = strSheet.replace("reSheetName", "Sheet" + index).replace("reIndex", index).replace("reOrder", order + "").replace("reStatus", status + "");
JSONObject bson = JSONObject.parseObject(strSheet);
GridRecordDataModel model = new GridRecordDataModel();
model.setBlock_id("fblock");
model.setRow_col("5_5");
model.setIndex(index);
model.setIs_delete(0);
model.setJson_data(bson);
model.setStatus(status);
model.setOrder(order);
model.setList_id(list_id);
return model;
}
/**
* @param sheet sheet
* @param model
* @param workbook excel
* @description sheet
* @author zhouhang
* @date 2021/4/20
*/
private static void readSheet(Sheet sheet, GridRecordDataModel model, Workbook workbook) {
//excel数据集合
List<JSONObject> dataList = new ArrayList<>();
model.setDataList(dataList);
//获取行迭代器
Iterator<Row> rowIterator = sheet.rowIterator();
//获取合并单元格信息
Map<String, String> rangeMap = getRangeMap(sheet);
//记录最大列
int maxCellNumber = 0;
int maxRowNumber = 0;
//列宽
JSONObject columnLenObj = new JSONObject();
//行高
JSONObject rowLenObj = new JSONObject();
//读取文档
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
int rowLen = ((int) row.getHeight()) / 20;
if (rowLen == 0) {
rowLen = 30;
}
rowLenObj.put(row.getRowNum() + "", rowLen);
Iterator<Cell> cellIterator = row.cellIterator();
maxRowNumber = row.getRowNum();
while (cellIterator.hasNext()) {
//"{\"c\":0,\"r\":0,\"v\":{\"m\":\"模板\",\"v\":\"模板\",\"bl\":1,\"ct\":{\"t\":\"g\",\"fa\":\"General\"}}}";
JSONObject dataModel = JSONObject.parseObject(MODEL);
//初始化默认单元格内容
Cell cell = cellIterator.next();
int columnLen = sheet.getColumnWidth(cell.getColumnIndex()) / 25;
if (columnLen == 0) {
columnLen = 73;
}
columnLenObj.put(cell.getColumnIndex() + "", columnLen);
//修改最大列
maxCellNumber = Math.max(cell.getColumnIndex(), maxCellNumber);
//设置行列
dataModel.put("c", cell.getColumnIndex());
dataModel.put("r", row.getRowNum());
//获取单元格内容
switch (cell.getCellType()) {
case STRING:
dataModel.getJSONObject("v").put("m", cell.getStringCellValue());
dataModel.getJSONObject("v").put("v", cell.getStringCellValue());
break;
case NUMERIC:
dataModel.getJSONObject("v").put("m", cell.getNumericCellValue());
dataModel.getJSONObject("v").put("v", cell.getNumericCellValue());
break;
case BLANK:
dataModel.getJSONObject("v").put("m", "");
dataModel.getJSONObject("v").put("v", "");
break;
case BOOLEAN:
dataModel.getJSONObject("v").put("m", cell.getBooleanCellValue());
dataModel.getJSONObject("v").put("v", cell.getBooleanCellValue());
break;
case ERROR:
dataModel.getJSONObject("v").put("m", cell.getErrorCellValue());
dataModel.getJSONObject("v").put("v", cell.getErrorCellValue());
break;
default:
dataModel.getJSONObject("v").put("m", "");
dataModel.getJSONObject("v").put("v", "");
}
//设置单元格合并标记
dealWithCellMarge(rangeMap, row, cell, dataModel);
//设置单元格样式、合并单元格信息
dealWithExcelStyle(model, dataModel, cell, sheet, workbook);
dataList.add(dataModel);
}
}
//设置最大行、列
model.getJson_data().put("column", Math.max(maxCellNumber, DEFAULT_COLUMN_INDEX));
model.getJson_data().put("row", Math.max(maxRowNumber, DEFAULT_ROW_INDEX));
//设置行高、列宽
model.getJson_data().getJSONObject("config").put("columnlen", columnLenObj);
model.getJson_data().getJSONObject("config").put("rowlen", rowLenObj);
}
/**
* @param sheet sheet
* @return Map<String, String>
* @description MAP
* @author zhouhang
* @date 2021/4/21
*/
@NotNull
private static Map<String, String> getRangeMap(Sheet sheet) {
List<CellRangeAddress> rangeAddressList = sheet.getMergedRegions();
Map<String, String> rangeMap = new HashMap<>(rangeAddressList.size() * 5);
for (CellRangeAddress cellAddresses : rangeAddressList) {
for (int i = cellAddresses.getFirstRow(); i <= cellAddresses.getLastRow(); i++) {
for (int j = cellAddresses.getFirstColumn(); j <= cellAddresses.getLastColumn(); j++) {
if (i == cellAddresses.getFirstRow() && j == cellAddresses.getFirstColumn()) {
//单元格合并初始值特殊标记
rangeMap.put(i + "_" + j, cellAddresses.getFirstRow() + "_" + cellAddresses.getFirstColumn() + "_" + cellAddresses.getLastRow() + "_" + cellAddresses.getLastColumn());
} else {
rangeMap.put(i + "_" + j, cellAddresses.getFirstRow() + "_" + cellAddresses.getFirstColumn());
}
}
}
}
return rangeMap;
}
/**
* @param rangeMap
* @param row
* @param cell
* @param dataModel
* @description
* @author zhouhang
* @date 2021/4/21
*/
private static void dealWithCellMarge(Map<String, String> rangeMap, Row row, Cell cell, JSONObject dataModel) {
if (rangeMap.containsKey(row.getRowNum() + "_" + cell.getColumnIndex())) {
String margeValue = rangeMap.get(row.getRowNum() + "_" + cell.getColumnIndex());
JSONObject mcData = new JSONObject();
String[] s = margeValue.split("_");
mcData.put("r", Integer.parseInt(s[0]));
mcData.put("c", Integer.parseInt(s[1]));
if (s.length == 4) {
mcData.put("rs", Integer.parseInt(s[2]) - Integer.parseInt(s[0]) + 1);
mcData.put("cs", Integer.parseInt(s[3]) - Integer.parseInt(s[1]) + 1);
}
dataModel.getJSONObject("v").put("mc", mcData);
}
}
/**
* @param model sheet
* @param dataModel
* @param cell
* @param sheet sheet
* @param workbook excel
* @description
* @author zhouhang
* @date 2021/4/21
*/
private static void dealWithExcelStyle(GridRecordDataModel model, JSONObject dataModel, Cell cell, Sheet sheet, Workbook workbook) {
//设置单元格合并信息
dealWithExcelMerge(model, sheet);
//设置字体样式
setFontStyle(dataModel, workbook, cell);
//设置单元格样式
dealWithBorderStyle(model, cell, workbook);
}
/**
* @param model 线
* @param cell cell
* @param workbook workbook
* @description
* @author zhouhang
* @date 2021/4/22
*/
private static void dealWithBorderStyle(GridRecordDataModel model, Cell cell, Workbook workbook) {
CellStyle cellStyle = cell.getCellStyle();
//判断是否存在边框
if (cellStyle.getBorderTop().getCode() > 0 || cellStyle.getBorderBottom().getCode() > 0 ||
cellStyle.getBorderLeft().getCode() > 0 || cellStyle.getBorderRight().getCode() > 0) {
JSONObject border = JSONObject.parseObject(BORDER_MODEL);
border.getJSONObject("value").put("row_index", cell.getRowIndex());
border.getJSONObject("value").put("col_index", cell.getColumnIndex());
//xlsx
if (cellStyle instanceof XSSFCellStyle) {
XSSFCellStyle xssfCellStyle = (XSSFCellStyle) cellStyle;
if (Objects.equals((short) 0, cellStyle.getBorderTop().getCode())) {
border.getJSONObject("value").remove("t");
} else {
border.getJSONObject("value").getJSONObject("t").put("color", dealWithRbg(xssfCellStyle.getTopBorderXSSFColor().getRGB()));
}
if (Objects.equals((short) 0, cellStyle.getBorderRight().getCode())) {
border.getJSONObject("value").remove("r");
} else {
border.getJSONObject("value").getJSONObject("r").put("color", dealWithRbg(xssfCellStyle.getRightBorderXSSFColor().getRGB()));
}
if (Objects.equals((short) 0, cellStyle.getBorderLeft().getCode())) {
border.getJSONObject("value").remove("l");
} else {
border.getJSONObject("value").getJSONObject("l").put("color", dealWithRbg(xssfCellStyle.getLeftBorderXSSFColor().getRGB()));
}
if (Objects.equals((short) 0, cellStyle.getBorderBottom().getCode())) {
border.getJSONObject("value").remove("b");
} else {
border.getJSONObject("value").getJSONObject("b").put("color", dealWithRbg(xssfCellStyle.getBottomBorderXSSFColor().getRGB()));
}
} else if (cellStyle instanceof HSSFCellStyle) {
//xls
HSSFWorkbook hssfWorkbook = (HSSFWorkbook) workbook;
HSSFCellStyle hssfCellStyle = (HSSFCellStyle) cellStyle;
if (Objects.equals((short) 0, cellStyle.getBorderTop().getCode())) {
border.getJSONObject("value").remove("t");
} else {
HSSFColor color = hssfWorkbook.getCustomPalette().getColor(hssfCellStyle.getTopBorderColor());
border.getJSONObject("value").getJSONObject("t").put("color", dealWithRbgShort(color.getTriplet()));
}
if (Objects.equals((short) 0, cellStyle.getBorderRight().getCode())) {
border.getJSONObject("value").remove("r");
} else {
HSSFColor color = hssfWorkbook.getCustomPalette().getColor(hssfCellStyle.getRightBorderColor());
border.getJSONObject("value").getJSONObject("r").put("color", dealWithRbgShort(color.getTriplet()));
}
if (Objects.equals((short) 0, cellStyle.getBorderLeft().getCode())) {
border.getJSONObject("value").remove("l");
} else {
HSSFColor color = hssfWorkbook.getCustomPalette().getColor(hssfCellStyle.getLeftBorderColor());
border.getJSONObject("value").getJSONObject("l").put("color", dealWithRbgShort(color.getTriplet()));
}
if (Objects.equals((short) 0, cellStyle.getBorderBottom().getCode())) {
border.getJSONObject("value").remove("b");
} else {
HSSFColor color = hssfWorkbook.getCustomPalette().getColor(hssfCellStyle.getBottomBorderColor());
border.getJSONObject("value").getJSONObject("b").put("color", dealWithRbgShort(color.getTriplet()));
}
}
JSONArray borderInfo = model.getJson_data().getJSONObject("config").getJSONArray("borderInfo");
if (Objects.isNull(borderInfo)) {
borderInfo = new JSONArray();
model.getJson_data().getJSONObject("config").put("borderInfo", borderInfo);
}
borderInfo.add(border);
}
}
/**
* @param rgb RBG short
* @return rbg(0, 0, 0)
* @description RBG rbg(0,0,0)
* @author zhouhang
* @date 2021/4/26
*/
private static String dealWithRbgShort(short[] rgb) {
return getRbg(Objects.nonNull(rgb), rgb[0], rgb[1], rgb[2]);
}
@NotNull
private static String getRbg(boolean b2, short r, short b, short g) {
if (b2) {
return "rgb(" + (r & 0xFF) + ", " + (b & 0xFF) + ", " + (g & 0xFF) + ")";
} else {
return "rgb(0, 0, 0)";
}
}
/**
* @param rgb RBG byte
* @return rbg(0, 0, 0)
* @description RBG rbg(0,0,0)
* @author zhouhang
* @date 2021/4/26
*/
private static String dealWithRbg(byte[] rgb) {
if (Objects.isNull(rgb)) {
return "rgb(0, 0, 0)";
}
short[] shorts = new short[]{rgb[0], rgb[1], rgb[2]};
return getRbg(true, shorts[0], shorts[1], shorts[2]);
}
/**
* @param dataModel
* @param workbook workbook
* @param cell cell
* @description s
* @author zhouhang
* @date 2021/4/21
*/
private static void setFontStyle(JSONObject dataModel, Workbook workbook, Cell cell) {
CellStyle cellStyle = cell.getCellStyle();
Font font = workbook.getFontAt(cellStyle.getFontIndexAsInt());
JSONObject v = dataModel.getJSONObject("v");
//ht 水平对齐 水平对齐方式0=居中1=左对齐2=右对齐) excel:左1 中2 右3 未设置0
v.put("ht", ExcelCenterStyleEnum.getExcelCenterStyleByExcelCenterCode(cellStyle.getAlignment().getCode()).getOnlineExcelCode());
//bl 字体加粗设置
v.put("bl", font.getBold() ? 1 : 0);
//lt 斜体
v.put("it", font.getItalic() ? 1 : 0);
//ff 字体
v.put("ff", font.getFontName());
//fc 字体颜色
if (font instanceof HSSFFont) {
HSSFFont hssfFont = (HSSFFont) font;
HSSFColor hssfColor = hssfFont.getHSSFColor((HSSFWorkbook) workbook);
if (Objects.nonNull(hssfColor)) {
v.put("fc", ColorUtil.convertRGBToHex(hssfColor.getTriplet()[0], hssfColor.getTriplet()[1], hssfColor.getTriplet()[2]));
}
} else {
XSSFFont xssfFont = (XSSFFont) font;
XSSFColor xssfColor = xssfFont.getXSSFColor();
if (Objects.nonNull(xssfColor)) {
v.put("fc", "#" + xssfColor.getARGBHex().substring(2));
}
}
//fs 字体大小
v.put("fs", font.getFontHeightInPoints());
//cl 删除线
v.put("cl", font.getStrikeout() ? 1 : 0);
//ul 下划线
v.put("un", font.getUnderline());
//背景色
String fillColorHex = ColorUtil.getFillColorHex(cell);
if (Objects.nonNull(fillColorHex)) {
v.put("bg", fillColorHex);
}
}
/**
* @param model sheet
* @param sheet sheet
* @description
* @author zhouhang
* @date 2021/4/21
*/
private static void dealWithExcelMerge(GridRecordDataModel model, Sheet sheet) {
if (CollectionUtils.isNotEmpty(sheet.getMergedRegions())) {
//{"color":"","list_id":"","column":60,"index":"1","jfgird_select_save":[],"rh_height":1790,"visibledatacolumn":[],"scrollTop":0,"block_id":"fblock","rowsplit":[],"visibledatarow":[],"jfgrid_selection_range":{},"name":"Sheet1","celldata":[],"ch_width":4748,"row":84,"scrollLeft":0,"id":364598,"chart":[],"config":{},"order":0,"status":1}
JSONObject jsonObject = model.getJson_data();
JSONObject config = jsonObject.getJSONObject("config");
JSONObject merge = new JSONObject();
for (CellRangeAddress mergedRegion : sheet.getMergedRegions()) {
JSONObject mergeBase = new JSONObject();
mergeBase.put("r", mergedRegion.getFirstRow());
mergeBase.put("c", mergedRegion.getFirstColumn());
mergeBase.put("rs", mergedRegion.getLastRow() - mergedRegion.getFirstRow() + 1);
mergeBase.put("cs", mergedRegion.getLastColumn() - mergedRegion.getFirstColumn() + 1);
merge.put(mergedRegion.getFirstRow() + "_" + mergedRegion.getFirstColumn(), mergeBase);
}
config.put("merge", merge);
}
}
}

@ -0,0 +1,33 @@
use
aj_report;
CREATE TABLE `gaea_report_excel`
(
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`report_code` varchar(100) DEFAULT NULL COMMENT '报表编码',
`set_codes` varchar(255) DEFAULT NULL COMMENT '数据集编码,以|分割',
`set_param` varchar(1024) DEFAULT NULL COMMENT '数据集查询参数',
`json_str` text COMMENT '报表json串',
`enable_flag` int(1) DEFAULT '1' COMMENT '0--已禁用 1--已启用 DIC_NAME=ENABLE_FLAG',
`delete_flag` int(1) DEFAULT '0' COMMENT '0--未删除 1--已删除 DIC_NAME=DELETE_FLAG',
`create_by` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(255) DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`version` int(8) DEFAULT NULL COMMENT '版本号',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `UNIQUE_REPORT_CODE` (`report_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=215 DEFAULT CHARSET=utf8;
INSERT INTO `aj_report`.`access_authority`(`id`, `parent_target`, `target`, `target_name`, `action`, `action_name`, `sort`, `enable_flag`, `delete_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (234, 'report', 'bigScreenManage', '大屏报表', 'export', '导出大屏', 234, 1, 0, 'admin', '2019-07-23 15:59:40', 'admin', '2019-07-23 15:59:40', 1);
INSERT INTO `aj_report`.`access_authority`(`id`, `parent_target`, `target`, `target_name`, `action`, `action_name`, `sort`, `enable_flag`, `delete_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (235, 'report', 'bigScreenManage', '大屏报表', 'import', '导入大屏', 235, 1, 0, 'admin', '2019-07-23 15:59:40', 'admin', '2019-07-23 15:59:40', 1);
INSERT INTO `aj_report`.`access_authority`(`id`, `parent_target`, `target`, `target_name`, `action`, `action_name`, `sort`, `enable_flag`, `delete_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (236, 'report', 'excelManage', '表格报表', 'query', '查询报表', 236, 1, 0, 'admin', '2019-07-23 15:59:40', 'admin', '2019-07-23 15:59:40', 1);
INSERT INTO `aj_report`.`access_role_authority`(`id`, `role_code`, `target`, `action`) VALUES (default , 'root', 'bigScreenManage', 'export');
INSERT INTO `aj_report`.`access_role_authority`(`id`, `role_code`, `target`, `action`) VALUES (default , 'root', 'bigScreenManage', 'import');
UPDATE `aj_report`.`gaea_report` SET `report_type` = 'report_screen' WHERE `report_code` in ('log_ajreport', 'car_ajreport', 'acc_ajreport');

@ -0,0 +1,22 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.anjiplus.template.gaea.business.modules.data.reportexcel.dao.ReportExcelMapper">
<resultMap type="com.anjiplus.template.gaea.business.modules.reportexcel.dao.entity.ReportExcel" id="ReportMap">
<!--jdbcType="{column.columnType}"-->
<result property="id" column="id" />
<result property="reportCode" column="report_code" />
<result property="setCodes" column="set_codes" />
<result property="setParam" column="set_param" />
<result property="jsonStr" column="json_str" />
<result property="enableFlag" column="enable_flag" />
<result property="deleteFlag" column="delete_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="version" column="version" />
</resultMap>
</mapper>

@ -5,6 +5,22 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>AJ-Report</title> <title>AJ-Report</title>
<link rel='stylesheet' href='./static/luckysheet/plugins/css/pluginsCss.css' />
<link rel='stylesheet' href='./static/luckysheet/plugins/plugins.css' />
<link rel='stylesheet' href='./static/luckysheet/css/luckysheet.css' />
<!-- <link rel='stylesheet' href='./static/luckysheet/assets/iconfont/iconfont.css' /> -->
<script src="./static/luckysheet/plugins/js/plugin.js"></script>
<script src="./static/luckysheet/luckysheet.umd.js"></script>
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />-->
<!-- <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />-->
<!-- <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>-->
<!-- <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.umd.js"></script>-->
</head> </head>
<body> <body>

@ -22,11 +22,13 @@
"echarts-gl": "^1.1.1", "echarts-gl": "^1.1.1",
"element-ui": "^2.9.2", "element-ui": "^2.9.2",
"js-cookie": "2.2.0", "js-cookie": "2.2.0",
"jsbarcode": "^3.11.4",
"miment": "^0.0.9", "miment": "^0.0.9",
"moment": "^2.29.1", "moment": "^2.29.1",
"monaco-editor": "^0.20.0", "monaco-editor": "^0.20.0",
"normalize.css": "7.0.0", "normalize.css": "7.0.0",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"qrcodejs2": "0.0.2",
"sortablejs": "^1.10.2", "sortablejs": "^1.10.2",
"uninstall": "0.0.0", "uninstall": "0.0.0",
"v-chart": "^1.0.0", "v-chart": "^1.0.0",

@ -1,8 +1,8 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 1513211 */ font-family: "iconfont"; /* Project id 1513211 */
src: url('iconfont.woff2?t=1629797734566') format('woff2'), src: url("iconfont.woff2?t=1629797734566") format("woff2"),
url('iconfont.woff?t=1629797734566') format('woff'), url("iconfont.woff?t=1629797734566") format("woff"),
url('iconfont.ttf?t=1629797734566') format('truetype'); url("iconfont.ttf?t=1629797734566") format("truetype");
} }
.iconfont { .iconfont {
@ -488,4 +488,3 @@
.iconjiantou-copy-copy:before { .iconjiantou-copy-copy:before {
content: "\e654"; content: "\e654";
} }

@ -49,7 +49,7 @@ export const constantRouterMap = [
{ path: 'resultset', name: 'resultset', component: () => import('@/views/report/resultset/index'), meta: { title: '数据集', icon: 'iconAPIwangguan', keepAlive: true, requireAuth: true, permission: 'resultsetManage'} }, { path: 'resultset', name: 'resultset', component: () => import('@/views/report/resultset/index'), meta: { title: '数据集', icon: 'iconAPIwangguan', keepAlive: true, requireAuth: true, permission: 'resultsetManage'} },
{ path: 'report', name: 'reportIndex', component: () => import('@/views/report/report/index'), meta: { title: '报表管理', icon: 'iconnavicon-ywcs', keepAlive: true, requireAuth: true, permission: 'reportManage'} }, { path: 'report', name: 'reportIndex', component: () => import('@/views/report/report/index'), meta: { title: '报表管理', icon: 'iconnavicon-ywcs', keepAlive: true, requireAuth: true, permission: 'reportManage'} },
{ path: 'bigscreen', name: 'bigscreen', component: () => import('@/views/report/bigscreen/index'), meta: { title: '大屏报表', icon: 'iconchufaqipeizhi-hui', keepAlive: true, requireAuth: true, permission: 'bigScreenManage'}, }, { path: 'bigscreen', name: 'bigscreen', component: () => import('@/views/report/bigscreen/index'), meta: { title: '大屏报表', icon: 'iconchufaqipeizhi-hui', keepAlive: true, requireAuth: true, permission: 'bigScreenManage'}, },
//{ path: 'excelreport', name: 'excelreport', component: () => import('@/views/report/excelreport/index'), meta: { title: '表格报表', icon: 'iconliebiao', keepAlive: true, requireAuth: true, permission: 'excelManage'} }, { path: 'excelreport', name: 'excelreport', component: () => import('@/views/report/excelreport/index'), meta: { title: '表格报表', icon: 'iconliebiao', keepAlive: true, requireAuth: true, permission: 'excelManage'} },
] ]
}, },
{ {
@ -62,6 +62,8 @@ export const constantRouterMap = [
}, },
{ path: '/bigscreen/viewer', component: () => import('@/views/report/bigscreen/viewer'), hidden: true, meta: { requireAuth: true }}, { path: '/bigscreen/viewer', component: () => import('@/views/report/bigscreen/viewer'), hidden: true, meta: { requireAuth: true }},
{ path: '/bigscreen/designer', component: () => import('@/views/report/bigscreen/designer'), hidden: true, meta: { requireAuth: true }}, { path: '/bigscreen/designer', component: () => import('@/views/report/bigscreen/designer'), hidden: true, meta: { requireAuth: true }},
{ path: '/excelreport/viewer', component: () => import('@/views/report/excelreport/viewer'), hidden: true, meta: { requireAuth: true }},
{ path: '/excelreport/designer', component: () => import('@/views/report/excelreport/designer'), hidden: true, meta: { requireAuth: true }},
{ path: '/404', component: () => import('@/views/404'), hidden: true }, { path: '/404', component: () => import('@/views/404'), hidden: true },
{ path: '*', redirect: '/login', hidden: true }, { path: '*', redirect: '/login', hidden: true },
/* /*

@ -87,7 +87,7 @@
<i class="iconfont iconyulan" @click="viewScreen"></i> <i class="iconfont iconyulan" @click="viewScreen"></i>
</el-tooltip> </el-tooltip>
</span> </span>
<span class="btn"> <span class="btn" v-permission="'bigScreenManage:export'">
<el-tooltip <el-tooltip
class="item" class="item"
effect="dark" effect="dark"
@ -109,7 +109,7 @@
</el-upload> </el-upload>
</el-tooltip> </el-tooltip>
</span> </span>
<span class="btn border-left"> <span class="btn border-left" v-permission="'bigScreenManage:import'">
<ul class="nav"> <ul class="nav">
<li> <li>
<i class="iconfont icondaochu"></i <i class="iconfont icondaochu"></i

@ -120,7 +120,7 @@ export default {
params: { params: {
reportCode: "", reportCode: "",
reportName: "", reportName: "",
// reportType: '', reportType: 'report_screen',
pageNumber: 1, pageNumber: 1,
pageSize: 8, pageSize: 8,
order: "DESC", order: "DESC",
@ -182,8 +182,6 @@ export default {
path: "/bigscreen/designer", path: "/bigscreen/designer",
query: { query: {
reportCode: val.reportCode, reportCode: val.reportCode,
reportId: val.id,
accessKey: val.accessKey
} }
}); });
window.open(routeUrl.href, "_blank"); window.open(routeUrl.href, "_blank");

@ -2,19 +2,19 @@
<el-dialog title="项目基础配置" width="50%" :close-on-click-modal="false" center :visible.sync="visib" :before-close="closeDialog"> <el-dialog title="项目基础配置" width="50%" :close-on-click-modal="false" center :visible.sync="visib" :before-close="closeDialog">
<el-form ref="userForm" :model="dialogForm" :rules="rules" size="small" label-width="100px"> <el-form ref="userForm" :model="dialogForm" :rules="rules" size="small" label-width="100px">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="20" :md="6" :lg="6" :xl="6"> <el-col :xs="24" :sm="20" :md="8" :lg="8" :xl="8">
<el-form-item label="数据源类型" prop="sourceType"> <el-form-item label="数据源类型" prop="sourceType">
<el-select v-model.trim="dialogForm.sourceType" placeholder="请选择" clearable @change="selectChange"> <el-select v-model.trim="dialogForm.sourceType" placeholder="请选择" clearable @change="selectChange">
<el-option v-for="item in dictionaryOptions" :key="item.id" :label="item.text" :value="item.id" /> <el-option v-for="item in dictionaryOptions" :key="item.id" :label="item.text" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7"> <el-col :xs="24" :sm="20" :md="6" :lg="6" :xl="6">
<el-form-item label="数据源编码" prop="sourceCode"> <el-form-item label="数据源编码" prop="sourceCode">
<el-input :disabled="updataDisabled" v-model.trim="dialogForm.sourceCode" /> <el-input :disabled="updataDisabled" v-model.trim="dialogForm.sourceCode" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7"> <el-col :xs="24" :sm="20" :md="6" :lg="6" :xl="6">
<el-form-item label="数据源名称" prop="sourceName"> <el-form-item label="数据源名称" prop="sourceName">
<el-input v-model.trim="dialogForm.sourceName" /> <el-input v-model.trim="dialogForm.sourceName" />
</el-form-item> </el-form-item>

@ -1,859 +0,0 @@
<!--
* @Author: lide1202@hotmail.com
* @Date: 2021-3-13 11:04:24
* @Last Modified by: lide1202@hotmail.com
* @Last Modified time: 2021-3-13 11:04:24
!-->
<template>
<div class="layout">
<div class="layout-left">
<div class="add-collection">
数据集管理
<el-button type="text"
icon="el-icon-circle-plus-outline"
@click="queryAllDataSet()" />
</div>
<div>
<el-collapse v-for="(item, indexs) in dataSet"
:key="indexs"
v-model="activeNames"
@change="handleChange">
<el-collapse-item :title="item.setName"
:name="item.id">
<el-popconfirm :title="'确定删除' + item.setName + '吗?'"
@onConfirm="del(item)">
<el-button slot="reference"
type="text"
icon="el-icon-close"
class="delect-all" />
</el-popconfirm>
<draggable v-model="item.setParamList"
:sort="false"
group="people"
style="margin-left: 10px"
@start="onStart(item.setCode)"
@end="onEnd">
<!-- <transition-group> -->
<div v-for="(i, index) in item.setParamList"
:key="index"
class="field-container">
<div class="aRow">
<span>{{ i }}</span>
</div>
</div>
<!-- </transition-group> -->
</draggable>
</el-collapse-item>
</el-collapse>
</div>
</div>
<div class="layout-middle">
<div class="push_btn">
<el-tooltip class="item"
effect="dark"
content="预览"
placement="bottom-start">
<el-button type="text"
@click="preview()">
<i class="iconfont iconfuzhi"></i>
</el-button>
</el-tooltip>
<el-tooltip class="item"
effect="dark"
content="保存"
placement="bottom-start">
<el-button type="text"
@click="save()">
<i class="iconfont iconsave"></i>
</el-button>
</el-tooltip>
</div>
<!-- <div id="x-spreadsheet-demo"
class="excel-designer" /> -->
<div id="luckysheet"
style="margin:0px;padding:0px;position:absolute;width:100%;left: 0px;top: 30px;bottom:0px;" />
<div id="qrCode"
ref="qrCodeDiv" />
<img id="barCode">
</div>
<div class="layout-right">
<el-tabs v-model="activeName"
@tab-click="handleClick">
<el-tab-pane label="基础配置"
name="first">
<el-form ref="rightForm"
:model="rightForm"
label-width="60px">
<el-form-item label="坐标">
<el-input v-model="rightForm.coordinate" />
</el-form-item>
<el-form-item label="值">
<el-input v-model="rightForm.value" />
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane v-if="dialogVisible"
label="二维码配置"
name="second">
<el-form ref="qrCodeForm"
:model="qrCodeForm"
label-width="60px">
<el-form-item label="二维码内容">
<el-input v-model="qrCodeForm.content" />
</el-form-item>
<el-form-item label="宽度">
<el-input v-model="qrCodeForm.width" />
</el-form-item>
<el-form-item label="高度">
<el-input v-model="qrCodeForm.height" />
</el-form-item>
<el-form-item label="前景色">
<ColorPicker v-model="qrCodeForm.colorDark"
@change="(val) => changed(val,qrCodeForm.colorDark)" />
</el-form-item>
<el-form-item label="背景色">
<ColorPicker v-model="qrCodeForm.colorLight"
@change="(val) => changed(val,qrCodeForm.colorLight)" />
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane v-if="dialogBarCode"
label="条形码配置"
name="second">
<el-form ref="barCodeForm"
:model="barCodeForm"
label-width="60px">
<el-form-item label="条形码内容">
<el-input v-model="barCodeForm.content" />
</el-form-item>
<el-form-item label="宽度">
<el-input v-model="barCodeForm.width" />
</el-form-item>
<el-form-item label="高度">
<el-input v-model="barCodeForm.height" />
</el-form-item>
<el-form-item label="前景色">
<ColorPicker v-model="barCodeForm.lineColor"
@change="(val) => changed(val,barCodeForm.lineColor)" />
</el-form-item>
<el-form-item label="背景色">
<ColorPicker v-model="barCodeForm.background"
@change="(val) => changed(val,barCodeForm.background)" />
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
<el-dialog title="数据集管理"
:visible.sync="outerVisible">
<el-table ref="multipleTable"
:data="dataSetData"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column type="selection"
width="55" />
<el-table-column label="数据集名称"
width="120"
prop="setName" />
<el-table-column prop="setDesc"
label="数据集描述"
width="180" />
<el-table-column prop="setCode"
label="数据集编码"
show-overflow-tooltip />
</el-table>
<div slot="footer"
class="dialog-footer">
<el-button @click="outerVisible = false"> </el-button>
<el-button type="primary"
@click="checkDataSet()">确定</el-button>
</div>
</el-dialog>
<el-dialog title="打印设置"
:visible.sync="printVisible"
width="30%"
:before-close="handleClose">
<el-form label-position="right"
label-width="90px"
:model="formPrintSetting">
<el-row>
<el-col :span="24">
<el-form-item label="纸张大小">
<el-select v-model="formPrintSetting.size"
placeholder="请选择打印尺寸"
@change="onPaperChange">
<el-option v-for="(item, index) in paperList"
:key="index"
:index="index"
:value="item.paper"
:label="getPaperText(item)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="对应像素">
<el-input v-model="formPrintSetting.pixel1"
disabled />
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label=" "
label-width="12px">
<el-input v-model="formPrintSetting.pixel2"
disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer"
class="dialog-footer">
<el-button @click="printVisible = false"> </el-button>
<el-button type="primary"
@click="getWindowDpi()">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import draggable from 'vuedraggable'
import { queryAllDataSet, detail, detailByReportCode } from '@/api/GaeaReport'
import { addReportExcel, editReportExcel } from '@/api/report'
// import "@/components/x-spreadsheet/dist/xspreadsheet.js"
import ColorPicker from '../../bigscreen/designer/form/colorPicker.vue'
import QRCode from 'qrcodejs2'
import JsBarcode from 'jsbarcode'
import LuckyExcel from 'luckyexcel'
export default {
name: 'Excels',
components: {
draggable,
ColorPicker
},
data () {
return {
activeName: 'first',
activeNames: ['1'],
reportId: null,
accessKey: null,
reportCode: '',
options: [],
sheet: {},
dataSetData: [],
reportExcelDto: {
id: null,
jsonStr: '',
setCodes: '',
setParam: '',
reportCode: '',
},
multipleSelection: [],
rightForm: {
coordinate: '',
value: '',
},
qrCodeForm: {
type: 'QRCode',
content: 'https://www.baidu.com',
width: 125,
height: 125,
colorDark: '#333333', //
colorLight: '#ffffff', //
correctLevel: QRCode.CorrectLevel.L, // L/M/H
ri: 0,
ci: 0,
currentSrc: '',
},
barCodeForm: {
type: 'BarCode',
format: 'CODE39',
displayValue: true,
content: '99999999999',
lineColor: '#000',
background: '#fff',
width: 100,
height: 40,
ri: 0,
ci: 0,
currentSrc: '',
},
formPrintSetting: {
size: '',
pixel1: '',
pixel2: ''
},
pixelList: [
{ paper: 'A4', width: 210, height: 297 },
{ paper: 'A3', width: 297, height: 420 },
{ paper: 'Letter', width: 216, height: 279 },
{ paper: 'Legal', width: 216, height: 355 },
{ paper: 'Executive', width: 184, height: 266 }
],
dataSet: [],
outerVisible: false,
printVisible: false,
pop: false,
setCode: null,
dialogVisible: false,
dialogBarCode: false,
paperList: [],
//
paper: '',
//
width: '',
height: '',
//
definition: '',
//
isBackend: '',
dpi: '',
pxWidth: '',
pxHeight: '',
show: false,
config: '',
settings: {},
qrCodeList: [],
moveDataelse: {
x: null,
y: null
}
}
},
mounted () {
this.options = [
{ text: 'Money Manager.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/money-manager-2.xlsx' },
{ text: 'Activity costs tracker.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Activity%20costs%20tracker.xlsx' },
{ text: 'House cleaning checklist.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/House%20cleaning%20checklist.xlsx' },
{ text: 'Student assignment planner.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Student%20assignment%20planner.xlsx' },
{ text: 'Credit card tracker.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Credit%20card%20tracker.xlsx' },
{ text: 'Blue timesheet.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Blue%20timesheet.xlsx' },
{ text: 'Student calendar (Mon).xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Student%20calendar%20%28Mon%29.xlsx' },
{ text: 'Blue mileage and expense report.xlsx', value: 'https://minio.cnbabylon.com/public/luckysheet/Blue%20mileage%20and%20expense%20report.xlsx' },
]
this.load()
},
created () {
this.reportCode = this.$route.query.reportCode
this.accessKey = this.$route.query.accessKey
this.loadDataSet()
this.design()
this.initPaperList()
this.getWindowDpi()
},
methods: {
handleClose () {
this.printVisible = false
},
handleChange (val) {
},
// tabs
handleClick (tab, event) {
},
async design () {
// reportCode
const { code, data } = await detailByReportCode(this.reportCode)
if (data != null) {
this.reportId = data.id
}
// this.sheet.loadData(data == null ? [{}] : JSON.parse(data.jsonStr)['sheet'])
if (data != null) {
if (data.setCodes != null && data.setCodes !== '') {
var dataSetList = data.setCodes.split('|')
dataSetList.forEach((code) => {
this.dataSetData.forEach((setData) => {
if (code === setData.setCode) {
this.detail(setData.id)
}
})
})
}
}
},
async loadDataSet () {
const { code, data } = await queryAllDataSet()
this.dataSetData = data
if (code != '200') return
},
doCancel () {
this.pop = false
},
save () {
var sheetData = {}
sheetData['sheet'] = this.sheet.getData()
this.reportExcelDto.jsonStr = JSON.stringify(sheetData)
var setCodeList = []
var setParams = {}
this.dataSet.forEach((code) => {
setCodeList.push(code.setCode)
if (code.dataSetParamDtoList != null && code.dataSetParamDtoList.length > 0) {
var dataSetParam = {}
code.dataSetParamDtoList.forEach((value) => {
dataSetParam[value.paramName] = value.sampleItem
})
setParams[code.setCode] = dataSetParam
}
})
this.reportExcelDto.setParam = JSON.stringify(setParams)
this.reportExcelDto.setCodes = setCodeList.join('|')
this.reportExcelDto.reportCode = this.reportCode
if (this.reportId == null) {
const res = addReportExcel(this.reportExcelDto)
} else {
this.reportExcelDto.id = this.reportId
const res = editReportExcel(this.reportExcelDto)
}
},
async detailByReportCode (reportCode) {
const { code, data } = await detailByReportCode(reportCode)
if (data != null) {
this.reportId = data.id
}
},
async preview () {
var routeUrl = this.$router.resolve({ path: '/report/excelreport/viewer', query: { reportCode: this.reportCode } })
window.open(routeUrl.href, '_blank')
},
async queryAllDataSet () {
this.outerVisible = true
},
handleSelectionChange (val) {
this.multipleSelection = val
},
checkDataSet () {
this.outerVisible = false
if (this.multipleSelection.length > 1) {
this.$message({
message: '一次最多勾选一个数据集',
type: 'warning',
})
this.outerVisible = true
} else {
this.detail(this.multipleSelection[0].id)
}
},
async detail (id) {
const { code, data } = await detail(id)
if (code != 200) return
var flag = true
this.dataSet.forEach((value) => {
if (value.setCode === data.setCode) {
flag = false
}
})
if (flag) {
this.dataSet.push(data)
}
},
onStart (setCode) {
this.setCode = setCode
},
onEnd (evt) {
//
var x = evt.originalEvent.clientX // x
var y = evt.originalEvent.clientY // y
var fieldLabel = evt.item.innerText //
var excelToolbarHeight = 40 // excel
var leftLayout = document.getElementsByClassName('layout-left')[0].clientWidth //
//
const { ri, ci } = this.sheet.datas[0].getCellRectByXY(x - leftLayout, y - excelToolbarHeight)
this.sheet.cellText(ri, ci, '#{' + this.setCode + '.' + fieldLabel + '}', 0)
//
this.sheet.reRender()
},
del (val) {
for (let i = 0; i < this.dataSet.length; i++) {
if (this.dataSet[i].setCode === val.setCode) {
this.dataSet.splice(i, 1)
}
}
},
//
changed (val, key) {
},
load () {
// eslint-disable-next-line no-undef
luckysheet.create({
container: 'luckysheet', // DOMid
title: 'Luckysheet Demo', //
lang: 'zh', //
plugins: ['chart'],
data: [{
'name': 'Cell', //
'color': '', //
'index': 0, //
'status': 1, //
'order': 0, //
'hide': 0, //
'row': 36, //
'column': 18, //
'defaultRowHeight': 19, //
'defaultColWidth': 73, //
'celldata': [], // 使
'config': {
'merge': {}, //
'rowlen': {}, //
'columnlen': {}, //
'rowhidden': {}, //
'colhidden': {}, //
'borderInfo': {}, //
'authority': {}, //
},
'scrollLeft': 0, //
'scrollTop': 315, //
'luckysheet_select_save': [], //
'calcChain': [], //
'isPivotTable': false, //
'pivotTable': {}, //
'filter_select': {}, //
'filter': null, //
'luckysheet_alternateformat_save': [], //
'luckysheet_alternateformat_save_modelCustom': [], //
'luckysheet_conditionformat_save': {}, //
'frozen': {}, //
'chart': [], //
'zoomRatio': 1, //
'image': [], //
'showGridLines': 1, // 线
'dataVerification': {} //
},
{
'name': 'Sheet2',
'color': '',
'index': 1,
'status': 0,
'order': 1,
'celldata': [],
'config': {}
},
{
'name': 'Sheet3',
'color': '',
'index': 2,
'status': 0,
'order': 2,
'celldata': [],
'config': {},
}
]
})
},
testClick () {
console.log('sdsdsddsd')
},
//
getEmitParam () {
return {
paper: this.formPrintSetting.size,
width: this.formPrintSetting.width,
height: this.formPrintSetting.height,
isBackend: this.isBackend
}
},
//
onPaperChange (value) {
const arr = this.paperList.filter(item => {
return item.paper === value
})
this.resetForm(arr[0])
},
resetForm: function (param) {
if (param) {
this.paper = param.paper
this.width = param.width
this.height = param.height
this.formPrintSetting.pixel1 = this.getPxWidth(param.width) + 'px'
this.formPrintSetting.pixel2 = this.getPxHeight(param.height) + 'px'
if (param.definition) {
this.definition = param.definition
}
if (param.isBackend === true || param.isBackend === false) {
this.isBackend = param.isBackend
}
}
},
getPaperText (item) {
return item.paper + '' + item.width + 'mm x ' + item.height + 'mm'
},
initPaperList () {
let printPaper = []
if (this.config) {
const config2 = JSON.parse(this.config)
if (config2 && config2['printPaper']) {
printPaper = config2['printPaper']
}
}
const arr = []
for (const item of this.pixelList) {
arr.push(item)
}
for (const item of printPaper) {
arr.push({
paper: item.title, width: item['size'][0], height: item['size'][1]
})
}
this.paperList = [...arr]
},
// dpi
getWindowDpi () {
// 25.41 1=25.41mm 96windowdpi,mac:72
this.printVisible = false
// eslint-disable-next-line no-array-constructor
const arrDPI = new Array()
if (window.screen.deviceXDPI != undefined) {
arrDPI[0] = window.screen.deviceXDPI
arrDPI[1] = window.screen.deviceYDPI
} else {
const tmpNode = document.createElement('div')
tmpNode.style.cssText = 'width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden'
document.body.appendChild(tmpNode)
arrDPI[0] = parseInt(tmpNode.offsetWidth)
arrDPI[1] = parseInt(tmpNode.offsetHeight)
tmpNode.parentNode.removeChild(tmpNode)
}
this.dpi = [...arrDPI]
},
//
getPxWidth (width) {
let margin = 10
if (this.isBackend == true) {
margin = 0
}
return Math.ceil((width - margin * 2) / 25.41 * this.dpi[0])
},
//
getPxHeight (height) {
let margin = 10
if (this.isBackend == true) {
margin = 0
}
return Math.ceil((height - margin * 2) / 25.41 * this.dpi[1])
},
uploadExcel (evt) {
const files = evt.target.files
if (files == null || files.length == 0) {
alert('No files wait for import')
return
}
const name = files[0].name
const suffixArr = name.split('.'); const suffix = suffixArr[suffixArr.length - 1]
if (suffix != 'xlsx') {
alert('Currently only supports the import of xlsx files')
return
}
LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
if (exportJson.sheets == null || exportJson.sheets.length == 0) {
alert('Failed to read the content of the excel file, currently does not support xls files!')
return
}
window.luckysheet.destroy()
window.luckysheet.create({
container: 'luckysheet', // luckysheet is the container id
showinfobar: false,
data: exportJson.sheets,
title: exportJson.info.name,
userInfo: exportJson.info.name.creator
})
})
},
selectExcel (evt) {
const value = this.selected
const name = evt.target.options[evt.target.selectedIndex].innerText
if (value == '') {
return
}
LuckyExcel.transformExcelToLuckyByUrl(value, name, (exportJson, luckysheetfile) => {
if (exportJson.sheets == null || exportJson.sheets.length == 0) {
alert('Failed to read the content of the excel file, currently does not support xls files!')
return
}
window.luckysheet.destroy()
window.luckysheet.create({
container: 'luckysheet', // luckysheet is the container id
showinfobar: false,
data: exportJson.sheets,
title: exportJson.info.name,
userInfo: exportJson.info.name.creator
})
})
},
downloadExcel () {
const value = this.selected
if (value.length == 0) {
alert('Please select a demo file')
return
}
var elemIF = document.getElementById('Lucky-download-frame')
if (elemIF == null) {
elemIF = document.createElement('iframe')
elemIF.style.display = 'none'
elemIF.id = 'Lucky-download-frame'
document.body.appendChild(elemIF)
}
elemIF.src = value
}
},
}
</script>
<style scoped lang="scss">
@import '../../../../components/x-spreadsheet/dist/xspreadsheet.css';
.position {
position: absolute;
z-index: 100;
}
#qrCode,
#barCode {
display: none;
}
.yulancopy {
font-size: 16px;
}
.baocun {
font-size: 17px;
}
.el-collapse {
position: relative;
border-top: 0 solid #e6ebf5;
border-bottom: 0 solid #e6ebf5;
}
.el-collapse-item__header {
border-bottom: 0 solid #e6ebf5 !important;
}
.delect-all {
position: absolute;
top: 10px;
right: 30px;
color: #333;
}
.push_btn {
position: absolute;
z-index: 100;
top: 5px;
left: 3px;
.iconfont {
color: black;
}
}
.add-collection {
line-height: 30px;
.el-button {
font-size: 16px !important;
vertical-align: middle;
margin-left: 20px;
}
}
.layout {
display: block;
position: relative;
margin: 0;
padding: 0;
border: 1px solid #d7dde4;
}
.layout-left {
display: block;
position: absolute;
padding: 20px;
width: 230px;
min-height: 99.98vh;
border-right: 1px solid #eee;
border-color: #e8eaec;
background: #fff;
border-radius: 4px;
font-size: 14px;
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
top: 0;
left: 0;
.field-container {
display: block;
position: relative;
width: 100%;
margin: 0;
cursor: pointer;
line-height: 30px;
.aRow {
padding: 0 10px;
.operation {
float: right;
display: none;
.el-button--text {
color: #333 !important;
}
}
&:hover {
.operation {
display: block;
}
background: #f7fafd;
}
}
}
}
.layout-middle {
display: block;
position: absolute;
left: 230px;
right: 230px;
width: calc(100% - 460px);
margin: 0;
padding: 0;
.excel-designer {
display: block;
position: relative;
margin: 0;
padding: 0;
}
}
.layout-right {
display: block;
position: absolute;
top: 0;
right: 0;
padding: 20px;
width: 230px;
min-height: 99.98vh;
border-left: 1px solid #dcdee2;
border-color: #e8eaec;
background: #fff;
border-radius: 4px;
font-size: 14px;
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
}
</style>

@ -9,34 +9,44 @@
<div class="layout-left"> <div class="layout-left">
<div class="add-collection"> <div class="add-collection">
数据集管理 数据集管理
<el-button type="text" <el-button
type="text"
icon="el-icon-circle-plus-outline" icon="el-icon-circle-plus-outline"
@click="queryAllDataSet()" /> @click="queryAllDataSet()"
/>
</div> </div>
<div> <div>
<el-collapse v-for="(item, indexs) in dataSet" <el-collapse
v-for="(item, indexs) in dataSet"
:key="indexs" :key="indexs"
v-model="activeNames" v-model="activeNames"
@change="handleChange"> @change="handleChange"
<el-collapse-item :title="item.setName" >
:name="item.id"> <el-collapse-item :title="item.setName" :name="item.id">
<el-popconfirm :title="'确定删除' + item.setName + '吗?'" <el-popconfirm
@onConfirm="del(item)"> :title="'确定删除' + item.setName + '吗?'"
<el-button slot="reference" @onConfirm="del(item)"
>
<el-button
slot="reference"
type="text" type="text"
icon="el-icon-close" icon="el-icon-close"
class="delect-all" /> class="delect-all"
/>
</el-popconfirm> </el-popconfirm>
<draggable v-model="item.setParamList" <draggable
v-model="item.setParamList"
:sort="false" :sort="false"
group="people" group="people"
style="margin-left: 10px" style="margin-left: 10px"
@start="onStart(item.setCode)" @start="onStart(item.setCode, $event)"
@end="onEnd"> >
<!-- <transition-group> --> <!-- <transition-group> -->
<div v-for="(i, index) in item.setParamList" <div
v-for="(i, index) in item.setParamList"
:key="index" :key="index"
class="field-container"> class="field-container"
>
<div class="aRow"> <div class="aRow">
<span>{{ i }}</span> <span>{{ i }}</span>
</div> </div>
@ -49,40 +59,39 @@
</div> </div>
<div class="layout-middle"> <div class="layout-middle">
<div class="push_btn"> <div class="push_btn">
<el-tooltip class="item" <el-tooltip
class="item"
effect="dark" effect="dark"
content="预览" content="预览"
placement="bottom-start"> placement="bottom-start"
<el-button type="text" >
@click="preview()"> <el-button type="text" @click="preview()">
<i class="iconfont iconfuzhi"></i> <i class="iconfont iconfuzhi"></i>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip class="item" <el-tooltip
class="item"
effect="dark" effect="dark"
content="保存" content="保存"
placement="bottom-start"> placement="bottom-start"
<el-button type="text" >
@click="save()"> <el-button type="text" @click="save()">
<i class="iconfont iconsave"></i> <i class="iconfont iconsave"></i>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
</div> </div>
<div id="x-spreadsheet-demo" <div
class="excel-designer" /> id="luckysheet"
<div id="qrCode" style="margin:0px;padding:0px;position:absolute;width:100%;height:95vh;left: 0px;top: 30px;bottom:0px;"
ref="qrCodeDiv"></div> />
<div id="qrCode" ref="qrCodeDiv" />
<img id="barCode" /> <img id="barCode" />
</div> </div>
<div class="layout-right"> <div class="layout-right">
<el-tabs v-model="activeName" <el-tabs v-model="activeName" @tab-click="handleClick">
@tab-click="handleClick"> <el-tab-pane label="基础配置" name="first">
<el-tab-pane label="基础配置" <el-form ref="rightForm" :model="rightForm" label-width="60px">
name="first">
<el-form ref="rightForm"
:model="rightForm"
label-width="60px">
<el-form-item label="坐标"> <el-form-item label="坐标">
<el-input v-model="rightForm.coordinate" /> <el-input v-model="rightForm.coordinate" />
</el-form-item> </el-form-item>
@ -91,229 +100,129 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="二维码配置"
v-if="dialogVisible"
name="second">
<el-form ref="qrCodeForm"
:model="qrCodeForm"
label-width="60px">
<el-form-item label="二维码内容">
<el-input v-model="qrCodeForm.content" />
</el-form-item>
<el-form-item label="宽度">
<el-input v-model="qrCodeForm.width" />
</el-form-item>
<el-form-item label="高度">
<el-input v-model="qrCodeForm.height" />
</el-form-item>
<el-form-item label="前景色">
<ColorPicker v-model="qrCodeForm.colorDark"
@change="(val) => changed(val,qrCodeForm.colorDark)" />
</el-form-item>
<el-form-item label="背景色">
<ColorPicker v-model="qrCodeForm.colorLight"
@change="(val) => changed(val,qrCodeForm.colorLight)" />
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="条形码配置"
v-if="dialogBarCode"
name="second">
<el-form ref="barCodeForm"
:model="barCodeForm"
label-width="60px">
<el-form-item label="条形码内容">
<el-input v-model="barCodeForm.content" />
</el-form-item>
<el-form-item label="宽度">
<el-input v-model="barCodeForm.width" />
</el-form-item>
<el-form-item label="高度">
<el-input v-model="barCodeForm.height" />
</el-form-item>
<el-form-item label="前景色">
<ColorPicker v-model="barCodeForm.lineColor"
@change="(val) => changed(val,barCodeForm.lineColor)" />
</el-form-item>
<el-form-item label="背景色">
<ColorPicker v-model="barCodeForm.background"
@change="(val) => changed(val,barCodeForm.background)" />
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<el-dialog title="数据集管理" <el-dialog title="数据集管理" :visible.sync="outerVisible">
:visible.sync="outerVisible"> <el-table
<el-table ref="multipleTable" ref="multipleTable"
:data="dataSetData" :data="dataSetData"
tooltip-effect="dark" tooltip-effect="dark"
style="width: 100%" style="width: 100%;height: 60vh;overflow-y: scroll;"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange"
<el-table-column type="selection" >
width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="数据集名称" <el-table-column label="数据集名称" width="120" prop="setName" />
width="120" <el-table-column prop="setDesc" label="数据集描述" width="180" />
prop="setName" /> <el-table-column
<el-table-column prop="setDesc" prop="setCode"
label="数据集描述"
width="180" />
<el-table-column prop="setCode"
label="数据集编码" label="数据集编码"
show-overflow-tooltip /> show-overflow-tooltip
/>
</el-table> </el-table>
<div slot="footer" <div slot="footer" class="dialog-footer">
class="dialog-footer">
<el-button @click="outerVisible = false"> </el-button> <el-button @click="outerVisible = false"> </el-button>
<el-button type="primary" <el-button type="primary" @click="checkDataSet()"> </el-button>
@click="checkDataSet()">确定</el-button>
</div>
</el-dialog>
<el-dialog title="打印设置"
:visible.sync="printVisible"
width="30%"
:before-close="handleClose">
<el-form label-position="right"
label-width="90px"
:model="formPrintSetting">
<el-row>
<el-col :span="24">
<el-form-item label="纸张大小">
<el-select v-model="formPrintSetting.size"
placeholder="请选择打印尺寸"
@change="onPaperChange">
<el-option v-for="(item, index) in paperList"
:index="index"
:value="item.paper"
:label="getPaperText(item)"
:key="index">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label="对应像素">
<el-input v-model="formPrintSetting.pixel1"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label=" "
label-width="12px">
<el-input v-model="formPrintSetting.pixel2"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer"
class="dialog-footer">
<el-button @click="printVisible = false"> </el-button>
<el-button type="primary"
@click="getWindowDpi()">确定</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import draggable from 'vuedraggable' import draggable from "vuedraggable";
import { queryAllDataSet, detail, detailByReportCode } from '@/api/GaeaReport' import { queryAllDataSet, detail, detailByReportCode } from "@/api/GaeaReport";
import { addReportExcel, editReportExcel } from '@/api/report' import { addReportExcel, editReportExcel } from "@/api/report";
import "@/components/x-spreadsheet/dist/xspreadsheet.js" import ColorPicker from "../../bigscreen/designer/form/colorPicker.vue";
import ColorPicker from "../../bigscreen/designer/form/colorPicker.vue" // import QRCode from 'qrcodejs2'
import QRCode from 'qrcodejs2'; // import JsBarcode from 'jsbarcode'
import JsBarcode from 'jsbarcode';
export default { export default {
name: 'Excels', name: "Excels",
components: { components: {
draggable, draggable,
ColorPicker ColorPicker
}, },
data() { data() {
return { return {
activeName: 'first', activeName: "first",
activeNames: ['1'], activeNames: ["1"],
reportId: null, reportId: null,
accessKey: null, accessKey: null,
reportCode: '', reportCode: "",
options: {}, options: [],
sheet: {}, sheet: {},
sheetData: [],
dataSetData: [], dataSetData: [],
reportExcelDto: { reportExcelDto: {
id: null, id: null,
jsonStr: '', jsonStr: "",
setCodes: '', setCodes: "",
setParam: '', setParam: "",
reportCode: '', reportCode: ""
}, },
multipleSelection: [], multipleSelection: [],
rightForm: { rightForm: {
coordinate: '', coordinate: "",
value: '', value: ""
}, },
qrCodeForm: { qrCodeForm: {
type: "QRCode", type: "QRCode",
content: 'https://www.baidu.com', content: "https://www.baidu.com",
width: 125, width: 125,
height: 125, height: 125,
colorDark: "#333333", // colorDark: "#333333", //
colorLight: "#ffffff", // colorLight: "#ffffff", //
correctLevel: QRCode.CorrectLevel.L,//L/M/H // correctLevel: QRCode.CorrectLevel.L, // L/M/H
ri: 0, ri: 0,
ci: 0, ci: 0,
currentSrc: '', currentSrc: ""
}, },
barCodeForm: { barCodeForm: {
type: "BarCode", type: "BarCode",
format: 'CODE39', format: "CODE39",
displayValue: true, displayValue: true,
content: '99999999999', content: "99999999999",
lineColor: '#000', lineColor: "#000",
background: '#fff', background: "#fff",
width: 100, width: 100,
height: 40, height: 40,
ri: 0, ri: 0,
ci: 0, ci: 0,
currentSrc: '', currentSrc: ""
}, },
formPrintSetting: { formPrintSetting: {
size: '', size: "",
pixel1: '', pixel1: "",
pixel2: '' pixel2: ""
}, },
pixelList: [ pixelList: [
{ paper: 'A4', width: 210, height: 297 }, { paper: "A4", width: 210, height: 297 },
{ paper: 'A3', width: 297, height: 420 }, { paper: "A3", width: 297, height: 420 },
{ paper: 'Letter', width: 216, height: 279 }, { paper: "Letter", width: 216, height: 279 },
{ paper: 'Legal', width: 216, height: 355 }, { paper: "Legal", width: 216, height: 355 },
{ paper: 'Executive', width: 184, height: 266 } { paper: "Executive", width: 184, height: 266 }
], ],
dataSet: [], dataSet: [],
outerVisible: false, outerVisible: false,
printVisible: false, printVisible: false,
pop: false, pop: false,
setCode: null, setCode: null,
draggableFieldLabel: null,
dialogVisible: false, dialogVisible: false,
dialogBarCode: false, dialogBarCode: false,
paperList: [], paperList: [],
// //
paper: '', paper: "",
// //
width: '', width: "",
height: '', height: "",
// //
definition: '', definition: "",
// //
isBackend: '', isBackend: "",
dpi: '', dpi: "",
pxWidth: '', pxWidth: "",
pxHeight: '', pxHeight: "",
show: false, show: false,
config: "", config: "",
settings: {}, settings: {},
@ -322,362 +231,234 @@ export default {
x: null, x: null,
y: null y: null
} }
};
}
},
mounted () {
this.options = {
mode: 'edit', // edit | read
// "uploadUrl": "/design/report/upload", //
// "viewLocalImage": "/design/report/img",//,//
showToolbar: true,
showGrid: true,
showContextmenu: true,
view: {
height: () => document.documentElement.clientHeight,
width: () => document.getElementsByClassName('layout-middle')[0].clientWidth,
},
row: {
len: 100,
height: 25,
},
col: {
len: 52,
width: 100,
indexWidth: 60,
minWidth: 60,
},
style: {
bgcolor: '#ffffff',
align: 'left',
valign: 'middle',
textwrap: false,
strike: false,
underline: false,
color: '#0a0a0a',
font: {
name: 'Helvetica',
size: 10,
bold: false,
italic: false,
},
},
//
widgets: [{
// typevaluegaea_report_dashboard_widget
type: 'widget-text',
value: {
setup: {},
data: {},
position: {
width: 100,
height: 100,
left: 0,
top: 0,
zIndex: 0,
},
},
// optionstools
options: [],
},
], //
}
this.load()
}, },
mounted() {},
created() { created() {
this.reportCode = this.$route.query.reportCode this.reportCode = this.$route.query.reportCode;
this.accessKey = this.$route.query.accessKey this.accessKey = this.$route.query.accessKey;
this.loadDataSet() this.loadDataSet();
this.design() this.design();
this.initPaperList()
this.getWindowDpi()
}, },
methods: { methods: {
handleClose() { handleClose() {
this.printVisible = false this.printVisible = false;
},
handleChange (val) {
}, },
handleChange(val) {},
// tabs // tabs
handleClick (tab, event) { handleClick(tab, event) {},
},
async design() { async design() {
// reportCode // reportCode
const { code, data } = await detailByReportCode(this.reportCode) const { code, data } = await detailByReportCode(this.reportCode);
if (data != null) { if (data != null) {
this.reportId = data.id this.reportId = data.id;
} }
this.sheet.loadData(data == null ? [{}] : JSON.parse(data.jsonStr)['sheet']) this.sheetData = data == null ? [{}] : JSON.parse(data.jsonStr);
console.log(this.sheetData);
this.createSheet();
if (data != null) { if (data != null) {
if (data.setCodes != null && data.setCodes !== '') { if (data.setCodes != null && data.setCodes !== "") {
var dataSetList = data.setCodes.split('|') var dataSetList = data.setCodes.split("|");
dataSetList.forEach((code) => { dataSetList.forEach(code => {
this.dataSetData.forEach((setData) => { this.dataSetData.forEach(setData => {
if (code === setData.setCode) { if (code === setData.setCode) {
this.detail(setData.id) this.detail(setData.id);
} }
}) });
}) });
} }
} }
}, },
//
createSheet() {
//vue
const that = this;
const options = {
container: "luckysheet", // DOMid
title: "Luckysheet Demo", //
lang: "zh", //
plugins: ["chart"],
hook: {
cellDragStop: function(cell, postion, sheetFile, ctx, event) {
// console.info("cellDragStop-cell",cell);
// console.info("cellDragStop-postion", postion);
// console.info("cellDragStop-sheetFile", sheetFile);
// console.info("cellDragStop-ctx",ctx);
// console.info("cellDragStop-event", event);
// console.log("cellDragStop-draggableFieldLabel", that);
luckysheet.setCellValue(
postion.r,
postion.c,
that.draggableFieldLabel
);
},
cellMousedown: function(cell, postion, sheetFile, ctx) {
that.rightForm.coordinate = postion.r + "," + postion.c;
that.rightForm.value = cell == null ? "" : cell.v;
}
},
data: [
{
name: "report", //
color: "", //
index: 0, //
status: 1, //
order: 0, //
hide: 0, //
row: 36, //
column: 18, //
defaultRowHeight: 19, //
defaultColWidth: 73, //
celldata: [], //使
config: {
merge: {}, //
rowlen: {}, //
columnlen: {}, //
rowhidden: {}, //
colhidden: {}, //
borderInfo: {}, //
authority: {} //
},
scrollLeft: 0, //
scrollTop: 315, //
luckysheet_select_save: [], //
calcChain: [], //
isPivotTable: false, //
pivotTable: {}, //
filter_select: {}, //
filter: null, //
luckysheet_alternateformat_save: [], //
luckysheet_alternateformat_save_modelCustom: [], //
luckysheet_conditionformat_save: {}, //
frozen: {}, //
chart: [], //
zoomRatio: 1, //
image: [], //
showGridLines: 1, //线
dataVerification: {} //
}
]
};
options.data = this.sheetData;
$(function() {
luckysheet.create(options);
});
},
onStart(setCode, evt) {
this.setCode = setCode;
var fieldLabel = evt.item.innerText; //
this.draggableFieldLabel = "#{" + this.setCode + "." + fieldLabel + "}";
console.log("evt", evt);
console.log("draggableFieldLabel", this.draggableFieldLabel);
},
async loadDataSet() { async loadDataSet() {
const { code, data } = await queryAllDataSet() const { code, data } = await queryAllDataSet();
this.dataSetData = data this.dataSetData = data;
if (code != '200') return if (code != "200") return;
}, },
doCancel() { doCancel() {
this.pop = false this.pop = false;
}, },
save () { async save() {
var sheetData = {} // console.log(luckysheet.toJson())
sheetData['sheet'] = this.sheet.getData() // console.log(luckysheet.getAllSheets())
this.reportExcelDto.jsonStr = JSON.stringify(sheetData) // console.log(luckysheet.getSheetData(0))
var setCodeList = [] const jsonData = luckysheet.getAllSheets();
var setParams = {} for (let i = 0; i < jsonData.length; i++) {
this.dataSet.forEach((code) => { //datacelldata
setCodeList.push(code.setCode) jsonData[i]["data"] = [];
if (code.dataSetParamDtoList != null && code.dataSetParamDtoList.length > 0) { }
var dataSetParam = {}
code.dataSetParamDtoList.forEach((value) => { this.reportExcelDto.jsonStr = JSON.stringify(luckysheet.getAllSheets());
dataSetParam[value.paramName] = value.sampleItem var setCodeList = [];
}) var setParams = {};
setParams[code.setCode] = dataSetParam this.dataSet.forEach(code => {
} setCodeList.push(code.setCode);
}) if (
code.dataSetParamDtoList != null &&
code.dataSetParamDtoList.length > 0
) {
var dataSetParam = {};
code.dataSetParamDtoList.forEach(value => {
dataSetParam[value.paramName] = value.sampleItem;
});
setParams[code.setCode] = dataSetParam;
}
});
this.reportExcelDto.setParam = JSON.stringify(setParams) this.reportExcelDto.setParam = JSON.stringify(setParams);
this.reportExcelDto.setCodes = setCodeList.join('|') this.reportExcelDto.setCodes = setCodeList.join("|");
this.reportExcelDto.reportCode = this.reportCode this.reportExcelDto.reportCode = this.reportCode;
if (this.reportId == null) { if (this.reportId == null) {
const res = addReportExcel(this.reportExcelDto) const { code } = await addReportExcel(this.reportExcelDto);
if (code != "200") return;
this.$message.success("保存成功");
} else { } else {
this.reportExcelDto.id = this.reportId this.reportExcelDto.id = this.reportId;
const res = editReportExcel(this.reportExcelDto) const { code } = await editReportExcel(this.reportExcelDto);
if (code != "200") return;
this.$message.success("更新成功");
} }
}, },
async detailByReportCode(reportCode) { async detailByReportCode(reportCode) {
const { code, data } = await detailByReportCode(reportCode) const { code, data } = await detailByReportCode(reportCode);
if (data != null) { if (data != null) {
this.reportId = data.id this.reportId = data.id;
} }
}, },
async preview() { async preview() {
var routeUrl = this.$router.resolve({ path: '/report/excelreport/viewer', query: { reportCode: this.reportCode } }) var routeUrl = this.$router.resolve({
window.open(routeUrl.href, '_blank') path: "/excelreport/viewer",
query: { reportCode: this.reportCode }
});
window.open(routeUrl.href, "_blank");
}, },
async queryAllDataSet() { async queryAllDataSet() {
this.outerVisible = true this.outerVisible = true;
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val this.multipleSelection = val;
}, },
checkDataSet() { checkDataSet() {
this.outerVisible = false this.outerVisible = false;
if (this.multipleSelection.length > 1) { if (this.multipleSelection.length > 1) {
this.$message({ this.$message({
message: '一次最多勾选一个数据集', message: "一次最多勾选一个数据集",
type: 'warning', type: "warning"
}) });
this.outerVisible = true this.outerVisible = true;
} else { } else {
this.detail(this.multipleSelection[0].id) this.detail(this.multipleSelection[0].id);
} }
}, },
async detail(id) { async detail(id) {
const { code, data } = await detail(id) const { code, data } = await detail(id);
if (code != 200) return if (code != 200) return;
var flag = true var flag = true;
this.dataSet.forEach((value) => { this.dataSet.forEach(value => {
if (value.setCode === data.setCode) { if (value.setCode === data.setCode) {
flag = false flag = false;
} }
}) });
if (flag) { if (flag) {
this.dataSet.push(data) this.dataSet.push(data);
} }
}, },
onStart (setCode) {
this.setCode = setCode
},
onEnd (evt) {
//
var x = evt.originalEvent.clientX // x
var y = evt.originalEvent.clientY // y
var fieldLabel = evt.item.innerText //
var excelToolbarHeight = 40 // excel
var leftLayout = document.getElementsByClassName('layout-left')[0].clientWidth //
//
const { ri, ci } = this.sheet.datas[0].getCellRectByXY(x - leftLayout, y - excelToolbarHeight)
this.sheet.cellText(ri, ci, '#{' + this.setCode + '.' + fieldLabel + '}', 0)
//
this.sheet.reRender()
},
del(val) { del(val) {
for (let i = 0; i < this.dataSet.length; i++) { for (let i = 0; i < this.dataSet.length; i++) {
if (this.dataSet[i].setCode === val.setCode) { if (this.dataSet[i].setCode === val.setCode) {
this.dataSet.splice(i, 1) this.dataSet.splice(i, 1);
} }
} }
},
//
changed (val, key) {
},
load () {
this.activeName = 'first';
const rows = {};
this.sheet = x_spreadsheet('#x-spreadsheet-demo', this.options)
.loadData([{}]).change((cdata) => {
});
this.sheet.on('cell-selected', (cell, ri, ci) => {
// console.log('cell:', cell, ', ri:', ri, ', ci:', ci);
}).on('cell-edited', (text, ri, ci) => {
// console.log('text:', text, ', ri: ', ri, ', ci:', ci);
});
this.sheet.on('generateQrcode', (cell, ri, ci) => {
let that = this;
that.dialogVisible = true;
that.dialogBarCode = false
let selector = cell.print.data.selector
// .
that.sheet.reRender()
this.$nextTick(() => {
setTimeout(function () {
new QRCode(that.$refs.qrCodeDiv, that.qrCodeForm);
}, 200)
})
this.$nextTick(() => {
setTimeout(function () {
that.qrCodeForm.currentSrc = document.getElementById("qrCode").getElementsByTagName("img")[0].src;
that.sheet.cellText(selector.ri, selector.ci, that.qrCodeForm).reRender()
}, 500)
})
});
this.sheet.on('generateBarcode', (cell) => {
let that = this;
let selector = cell.print.data.selector
// .
that.dialogBarCode = true;
that.dialogVisible = false;
that.sheet.reRender()
this.$nextTick(() => {
JsBarcode('#barCode', that.barCodeForm.content, that.barCodeForm)
})
this.$nextTick(() => {
setTimeout(function () {
that.barCodeForm.currentSrc = document.getElementById("barCode").src;
that.sheet.cellText(selector.ri, selector.ci, that.barCodeForm).reRender()
}, 500)
})
});
this.sheet.on('printSettings', () => {
this.printVisible = true;
// .
});
this.sheet.on('insertImg', () => {
//
});
},
testClick () {
console.log("sdsdsddsd")
},
//
getEmitParam () {
return {
paper: this.formPrintSetting.size,
width: this.formPrintSetting.width,
height: this.formPrintSetting.height,
isBackend: this.isBackend
} }
},
//
onPaperChange (value) {
let arr = this.paperList.filter(item => {
return item.paper === value
})
this.resetForm(arr[0])
},
resetForm: function (param) {
if (param) {
this.paper = param.paper
this.width = param.width
this.height = param.height
this.formPrintSetting.pixel1 = this.getPxWidth(param.width) + 'px'
this.formPrintSetting.pixel2 = this.getPxHeight(param.height) + 'px'
if (param.definition) {
this.definition = param.definition
}
if (param.isBackend === true || param.isBackend === false) {
this.isBackend = param.isBackend
}
}
},
getPaperText (item) {
return item.paper + '' + item.width + 'mm x ' + item.height + 'mm'
},
initPaperList () {
let printPaper = []
if (this.config) {
let config2 = JSON.parse(this.config)
if (config2 && config2['printPaper']) {
printPaper = config2['printPaper']
}
}
let arr = []
for (let item of this.pixelList) {
arr.push(item)
}
for (let item of printPaper) {
arr.push({
paper: item.title, width: item['size'][0], height: item['size'][1]
})
}
this.paperList = [...arr];
},
//dpi
getWindowDpi () {
//25.41 1=25.41mm 96windowdpi,mac:72
this.printVisible = false
let arrDPI = new Array();
if (window.screen.deviceXDPI != undefined) {
arrDPI[0] = window.screen.deviceXDPI;
arrDPI[1] = window.screen.deviceYDPI;
}
else {
let tmpNode = document.createElement("div");
tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
document.body.appendChild(tmpNode);
arrDPI[0] = parseInt(tmpNode.offsetWidth);
arrDPI[1] = parseInt(tmpNode.offsetHeight);
tmpNode.parentNode.removeChild(tmpNode);
}
this.dpi = [...arrDPI]
},
//
getPxWidth (width) {
let margin = 10
if (this.isBackend == true) {
margin = 0
}
return Math.ceil((width - margin * 2) / 25.41 * this.dpi[0]);
},
//
getPxHeight (height) {
let margin = 10
if (this.isBackend == true) {
margin = 0
}
return Math.ceil((height - margin * 2) / 25.41 * this.dpi[1]);
}
},
} }
};
</script> </script>
<style src="../../../../../static/luckysheet/assets/iconfont/iconfont.css" />
<style scoped lang="scss"> <style scoped lang="scss">
@import '../../../../components/x-spreadsheet/dist/xspreadsheet.css';
.position { .position {
position: absolute; position: absolute;
z-index: 100; z-index: 100;
@ -687,26 +468,32 @@ export default {
#barCode { #barCode {
display: none; display: none;
} }
.yulancopy { .yulancopy {
font-size: 16px; font-size: 16px;
} }
.baocun { .baocun {
font-size: 17px; font-size: 17px;
} }
.el-collapse { .el-collapse {
position: relative; position: relative;
border-top: 0 solid #e6ebf5; border-top: 0 solid #e6ebf5;
border-bottom: 0 solid #e6ebf5; border-bottom: 0 solid #e6ebf5;
} }
.el-collapse-item__header { .el-collapse-item__header {
border-bottom: 0 solid #e6ebf5 !important; border-bottom: 0 solid #e6ebf5 !important;
} }
.delect-all { .delect-all {
position: absolute; position: absolute;
top: 10px; top: 10px;
right: 30px; right: 30px;
color: #333; color: #333;
} }
.push_btn { .push_btn {
position: absolute; position: absolute;
z-index: 100; z-index: 100;

@ -6,101 +6,252 @@
!--> !-->
<template> <template>
<div class="main-layout"> <div class="main-layout">
<h2>表格报表基于luckysheet还在开发中...</h2>
<el-form ref="form" :model="params" :rules="rules" label-width="120px">
<!-- 搜索 -->
<el-row :gutter="10">
<el-col :xs="24" :sm="20" :md="12" :lg="6" :xl="4">
<el-form-item label="名称">
<el-input
v-model="params.reportName"
size="mini"
clearable
placeholder="名称"
class="filter-item"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="20" :md="12" :lg="6" :xl="4">
<el-form-item label="报表编码">
<el-input
v-model="params.reportCode"
size="mini"
clearable
placeholder="报表编码"
class="filter-item"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="20" :md="4" :lg="4" :xl="4">
<el-button type="primary" size="mini" @click="search('form')"
>查询</el-button
>
<el-button type="danger" size="mini" @click="reset('form')"
>重置</el-button
>
</el-col>
</el-row>
</el-form>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col v-for="groupItem in reportGroups" :key="groupItem.groupId" :span="6"> <el-col v-for="item in list" :key="item.id" :span="6">
<div class="list"> <div class="bg">
<header>{{ groupItem.groupName }}</header> <img
<div v-for="report in groupItem.reportList" :key="report.reportId"> class="bg-img"
<p @click="openDesign(report.reportId)">{{ report.reportName }}</p> :src="
<!-- <el-button type="success" size="mini" icon="el-icon-setting" circle plain @click="openDesign(report.reportId)" /> item.reportImage == null || item.reportImage == ''
<el-button type="primary" size="mini" icon="el-icon-view" circle plain /> --> ? require('../../../assets/images/charts.jpg')
: item.reportImage
"
alt=""
/>
<div class="content">
<header>{{ item.reportName }}</header>
<footer>
{{ item.updateTime }}
<div class="operation">
<el-button
icon="el-icon-share"
class="view"
type="text"
@click="share(item)"
v-permission="'bigScreenManage:share'"
/>
<el-button
icon="el-icon-view"
class="view"
type="text"
@click="viewDesign(item)"
v-permission="'bigScreenManage:view'"
/>
<el-button
icon="el-icon-edit"
class="edit"
type="text"
@click="openDesign(item)"
v-permission="'bigScreenManage:design'"
/>
</div>
</footer>
</div> </div>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<div class="block">
<el-pagination
:total="totalCount"
:page-sizes="[8, 20, 50, 100]"
:page-size="params.pageSize"
:current-page="params.pageNumber"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
<Share
:visib="visibleForShareDialog"
:reportCode="reportCodeForShareDialog"
:reportName="reportNameForShareDialog"
@handleClose="visibleForShareDialog = false"
/>
</div> </div>
</template> </template>
<script> <script>
import Share from "@/views/report/report/components/share";
import { reportPageList } from "@/api/report";
export default { export default {
name: 'Login', name: "Login",
components: {}, components: { Share },
data() { data() {
return { return {
reportGroups: [ list: [],
{ rules: {},
groupId: 1, totalCount: 0,
groupName: '时效类', totalPage: 0,
reportList: [ params: {
{ reportCode: "",
reportId: 1, reportName: "",
reportName: 'excel报表1', reportType: 'report_excel',
pageNumber: 1,
pageSize: 8,
order: "DESC",
sort: "update_time"
}, },
{ //
reportId: 2, visibleForShareDialog: false,
reportName: 'excel报表2', reportCodeForShareDialog: "",
reportNameForShareDialog: ""
};
}, },
{ mounted() {},
reportId: 3, created() {
reportName: 'excel报表3', this.queryByPage();
},
],
}, },
{ methods: {
groupId: 2, //
groupName: '货物量', search() {
reportList: [ this.params.pageNumber = 1;
{ this.queryByPage();
reportId: 1,
reportName: 'excel报表1',
}, },
{ //
reportId: 2, reset(formName) {
reportName: 'excel报表2', this.$refs[formName].resetFields();
this.params.reportName = "";
this.params.reportCode = "";
this.params.pageNumber = 1;
this.queryByPage();
}, },
{ async queryByPage() {
reportId: 3, const res = await reportPageList(this.params);
reportName: 'excel报表3', if (res.code != "200") return;
this.listLoading = true;
this.list = res.data.records;
this.list.forEach(value => {
value["reportNameCode"] =
value.reportName + "[" + value.reportCode + "]";
});
this.totalCount = res.data.total;
this.totalPage = res.data.pages;
this.listLoading = false;
}, },
], handleSizeChange(val) {
this.params.pageSize = val;
this.queryByPage();
}, },
], handleCurrentChange(val) {
} this.params.pageNumber = val;
this.queryByPage();
}, },
mounted() {}, //
methods: { share(val) {
openDesign(reportId) { //excel
var routeUrl = this.$router.resolve({ path: '/report/excelreport/designer', query: { reportId: reportId }}) this.$message.warning("暂不支持excel报表分享");
window.open(routeUrl.href, '_blank') return;
this.reportCodeForShareDialog = val.reportCode;
this.reportNameForShareDialog = val.reportName;
this.visibleForShareDialog = true;
}, },
openDesign(val) {
var routeUrl = this.$router.resolve({
path: "/excelreport/designer",
query: {
reportCode: val.reportCode,
}
});
window.open(routeUrl.href, "_blank");
}, },
viewDesign(val) {
var routeUrl = this.$router.resolve({
path: "/excelreport/viewer",
query: { reportCode: val.reportCode }
});
window.open(routeUrl.href, "_blank");
}
} }
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.main-layout { .main-layout {
padding: 20px;
position: relative; position: relative;
height: auto; height: auto;
padding: 0;
margin: 0;
.list {
background: #fff; background: #fff;
padding: 10px;
margin: 10px 0;
header { header {
font-size: 24px;
text-align: center; text-align: center;
line-height: 40px; line-height: 80px;
border-bottom: 1px solid #eee; }
.bg {
width: 100%;
height: 200px;
position: relative;
overflow: hidden;
margin: 10px 0;
border: 12px solid white;
}
.bg .bg-img {
position: absolute;
width: 100%;
height: 100%;
filter: blur(6px);
z-index: 2;
} }
p { .content {
width: 100%;
height: 100%;
position: absolute;
color: #fff;
left: 0;
top: 0;
z-index: 3;
}
footer {
width: 100%;
font-size: 14px;
padding: 16px;
line-height: 30px; line-height: 30px;
text-align: center; position: absolute;
color: #666; z-index: 3;
bottom: 0;
.operation {
float: right;
.view,
.edit {
color: #fff;
font-size: 14px; font-size: 14px;
cursor: pointer;
margin: 5px 0;
&:hover {
background: rgb(234, 237, 252);
} }
} }
} }

@ -12,7 +12,7 @@
<a v-if="reportCode != null" <a v-if="reportCode != null"
download="xxx.xlsx"> download="xxx.xlsx">
<el-button type="text" <el-button type="text"
@click="download('')"> @click="download('gaea_template_excel')">
<i class="iconfont iconexcel"></i>导出excel <i class="iconfont iconexcel"></i>导出excel
</el-button> </el-button>
</a> </a>
@ -44,19 +44,14 @@
</div> </div>
</div> </div>
<div class="layout-middle"> <div class="layout-middle">
<div id="x-spreadsheet-demo" <div id="luckysheet"
class="excel-designer" /> style="margin:0px;padding:0px;position:absolute;width:100%;height:95vh;left: 0px;top: 30px;bottom:0px;" />
</div> </div>
</div> </div>
</template> </template>
<script> <script>
// import Spreadsheet from 'x-data-spreadsheet'
// import zhCN from 'x-data-spreadsheet/src/locale/zh-cn'
import { preview, exportExcel } from '@/api/GaeaReport' import { preview, exportExcel } from '@/api/GaeaReport'
import { addReport, editReport } from '@/api/report'
import '@/components/x-spreadsheet/dist/xspreadsheet.js'
// Spreadsheet.locale('zh-cn', zhCN)
export default { export default {
name: 'Login', name: 'Login',
@ -78,43 +73,6 @@ export default {
} }
}, },
mounted () { mounted () {
this.options = {
mode: 'read', // edit | read
showToolbar: false,
showGrid: true,
showContextmenu: false,
view: {
height: () => document.documentElement.clientHeight,
width: () => document.getElementsByClassName('layout-middle')[0].clientWidth,
},
row: {
len: 100,
height: 25,
},
col: {
len: 52,
width: 100,
indexWidth: 60,
minWidth: 60,
},
style: {
bgcolor: '#ffffff',
align: 'left',
valign: 'middle',
textwrap: false,
strike: false,
underline: false,
color: '#0a0a0a',
font: {
name: 'Helvetica',
size: 10,
bold: false,
italic: false,
},
},
}
// this.sheet = new Spreadsheet('#x-spreadsheet-demo', this.options).loadData({})
this.load()
this.preview() this.preview()
}, },
created () { created () {
@ -124,10 +82,8 @@ export default {
async searchPreview () { async searchPreview () {
const arr = this.toObject(this.tableData2) const arr = this.toObject(this.tableData2)
this.params.setParam = JSON.stringify(arr) this.params.setParam = JSON.stringify(arr)
const { code, data } = await preview(this.params) //
if (code !== '200') return this.preview()
this.excelData = JSON.parse(data.jsonStr)
this.sheet.loadData(this.excelData)
}, },
async preview () { async preview () {
this.excelData = {} this.excelData = {}
@ -149,16 +105,25 @@ export default {
this.tableData2 = extendArry this.tableData2 = extendArry
this.excelData = data.jsonStr this.excelData = data.jsonStr
this.sheet.loadData(JSON.parse(this.excelData)) this.sheetData = (data == null ? [{}] : JSON.parse(data.jsonStr))
// console.log(this.excelData)
// console.log(this.sheetData)
this.createSheet();
}, },
download (val) { async download(val) {
const result = {} if (val == 'gaea_template_pdf') {
this.$message('暂不支持pdf');
return
}
const result = {};
result['reportCode'] = this.reportCode result['reportCode'] = this.reportCode
result['setParam'] = JSON.stringify(this.params.setParam) result['setParam'] = JSON.stringify(this.params.setParam)
if (val != '') { if (val != '') {
result['exportType'] = val result['exportType'] = val
} }
exportExcel(result) const {code, message} = await exportExcel(result)
if (code != 200) return
this.$message.success(message);
}, },
// json // json
toObject (val) { toObject (val) {
@ -176,55 +141,68 @@ export default {
} }
return objSecond return objSecond
}, },
load () { //
const rows10 = { len: 1000 } createSheet(){
for (let i = 0; i < 1000; i += 1) { const options = {
rows10[i] = { container: 'luckysheet', // DOMid
cells: {}, title: 'Luckysheet Demo', //
} lang: 'zh', //
} plugins:['chart'],
const rows = {} data:[
this.sheet = x_spreadsheet('#x-spreadsheet-demo', this.options)
.loadData([
{ {
freeze: 'B3', "name": "report", //
styles: [], "color": "", //
merges: [], "index": 0, //
cols: { "status": 1, //
len: 20, "order": 0, //
// 2: { width: 200 }, "hide": 0,//
}, "row": 36, //
rows, "column": 18, //
"defaultRowHeight": 19, //
"defaultColWidth": 73, //
"celldata": [], //使
"config": {
"merge":{}, //
"rowlen":{}, //
"columnlen":{}, //
"rowhidden":{}, //
"colhidden":{}, //
"borderInfo":{}, //
"authority":{}, //
}, },
{ name: 'sheet-test', rows: rows10 }, "scrollLeft": 0, //
]) "scrollTop": 315, //
.change((cdata) => { "luckysheet_select_save": [], //
const dataRect = this.sheet.data.getDataRect() "calcChain": [],//
}) "isPivotTable":false,//
this.sheet "pivotTable":{},//
.on('cell-selected', (cell, ri, ci) => { "filter_select": {},//
// console.log('cell:', cell, ', ri:', ri, ', ci:', ci); "filter": null,//
}) "luckysheet_alternateformat_save": [], //
.on('cell-edited', (text, ri, ci) => { "luckysheet_alternateformat_save_modelCustom": [], //
// console.log('text:', text, ', ri: ', ri, ', ci:', ci); "luckysheet_conditionformat_save": {},//
}) "frozen": {}, //
this.sheet.on('printSettings', () => { "chart": [], //
// . "zoomRatio":1, //
}) "image":[], //
this.sheet.on('generateQrcode', () => { "showGridLines": 1, //线
// . "dataVerification":{} //
console.log('insertImg', this.dialogVisible) }
}) ]
this.sheet.on('insertImg', () => { };
// options.data = this.sheetData;
}) // console.log(this.sheetData)
$(function () {
luckysheet.create(options);
});
}, },
}, },
} }
</script> </script>
<style src="../../../../../static/luckysheet/assets/iconfont/iconfont.css" />
<style scoped lang="scss"> <style scoped lang="scss">
@import '../../../../components/x-spreadsheet/dist/xspreadsheet.css';
.download { .download {
width: 100%; width: 100%;
float: left; float: left;

@ -66,6 +66,14 @@ export default {
labelWidth: "120px", labelWidth: "120px",
// //
queryFormFields: [ queryFormFields: [
{
inputType: 'anji-select', //form input|input-number|anji-select(urldictCode)|anji-tree()|date|datetime|datetimerange
anjiSelectOption: {
dictCode: "REPORT_TYPE"
},
label: '报表类型',
field: 'reportType'
},
{ {
inputType: "input", inputType: "input",
label: "报表名称", label: "报表名称",
@ -75,7 +83,7 @@ export default {
inputType: "input", inputType: "input",
label: "报表编码", label: "报表编码",
field: "reportCode" field: "reportCode"
} },
], ],
// //
buttons: { buttons: {
@ -121,6 +129,7 @@ export default {
editField: "reportName", editField: "reportName",
inputType: "input", inputType: "input",
rules: [ rules: [
{ required: true, message: '请输入报表名称', trigger: 'blur' },
{ min: 1, max: 100, message: "不超过100个字符", trigger: "blur" } { min: 1, max: 100, message: "不超过100个字符", trigger: "blur" }
], ],
disabled: false disabled: false
@ -156,17 +165,18 @@ export default {
placeholder: "", placeholder: "",
field: "reportType", field: "reportType",
editField: "reportType", editField: "reportType",
tableHide: true,
editHide: true,
inputType: "anji-select", inputType: "anji-select",
fieldTableRowRenderer: row => {
return this.getDictLabelByCode("REPORT_TYPE", row["reportType"]);
},
anjiSelectOption: { anjiSelectOption: {
dictCode: "REPORT_TYPE" dictCode: "REPORT_TYPE"
}, },
rules: [ rules: [
{ required: true, message: '请输入报表类型', trigger: 'blur' },
{ min: 1, max: 20, message: "不超过20个字符", trigger: "blur" } { min: 1, max: 20, message: "不超过20个字符", trigger: "blur" }
], ],
disabled: true, disabled: "disableOnEdit",
defaultValue: "report_screen"
}, },
{ {
label: "描述", // label: "描述", //
@ -239,26 +249,44 @@ export default {
}, },
// //
preview(val) { preview(val) {
let routePath = "";
if (val.reportType === 'report_excel') {
routePath = "/excelreport/viewer";
} else {
routePath = "/bigscreen/viewer";
}
var routeUrl = this.$router.resolve({ var routeUrl = this.$router.resolve({
path: "/bigscreen/viewer", path: routePath,
query: { reportCode: val.reportCode } query: { reportCode: val.reportCode }
}); });
window.open(routeUrl.href, "_blank"); window.open(routeUrl.href, "_blank");
}, },
// //
design(val) { design(val) {
let routePath = "";
if (val.reportType === 'report_excel') {
routePath = "/excelreport/designer";
} else {
routePath = "/bigscreen/designer";
}
var routeUrl = this.$router.resolve({ var routeUrl = this.$router.resolve({
path: "/bigscreen/designer", path: routePath,
query: { query: {
reportCode: val.reportCode, reportCode: val.reportCode,
reportId: val.id,
accessKey: val.accessKey
} }
}); });
window.open(routeUrl.href, "_blank"); window.open(routeUrl.href, "_blank");
}, },
// //
shareReport(val){ shareReport(val){
if (val.reportType == 'report_excel') {
//excel
this.$message.warning("暂不支持excel报表分享");
return;
}
this.reportCodeForShareDialog = val.reportCode; this.reportCodeForShareDialog = val.reportCode;
this.reportNameForShareDialog = val.reportName; this.reportNameForShareDialog = val.reportName;
this.visibleForShareDialog = true; this.visibleForShareDialog = true;

@ -15,7 +15,7 @@
label-width="130px" label-width="130px"
> >
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :xs="24" :sm="20" :md="6" :lg="6" :xl="6"> <el-col :xs="24" :sm="20" :md="8" :lg="8" :xl="8">
<el-form-item label="数据源" prop="sourceCode"> <el-form-item label="数据源" prop="sourceCode">
<el-select <el-select
v-model.trim="formData.sourceCode" v-model.trim="formData.sourceCode"
@ -32,7 +32,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="20" :md="8" :lg="8" :xl="8"> <el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7">
<el-form-item label="数据集编码" prop="setCode"> <el-form-item label="数据集编码" prop="setCode">
<el-input <el-input
:disabled="updataDisabled" :disabled="updataDisabled"
@ -41,7 +41,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="20" :md="8" :lg="8" :xl="8"> <el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7">
<el-form-item label="数据集名称" prop="setName"> <el-form-item label="数据集名称" prop="setName">
<el-input v-model.trim="formData.setName" size="mini" /> <el-input v-model.trim="formData.setName" size="mini" />
</el-form-item> </el-form-item>
@ -450,7 +450,7 @@ export default {
itemFilterList: [ itemFilterList: [
{ {
transformType: "js", transformType: "js",
transformScript: `function dataTransform(data){\n\t//自定义脚本内容\n\treturn data;\n}` transformScript: ``
} }
], ],
transformScript: `function dataTransform(data){\n\t//自定义脚本内容\n\treturn data;\n}`, transformScript: `function dataTransform(data){\n\t//自定义脚本内容\n\treturn data;\n}`,
@ -491,7 +491,7 @@ export default {
sampleItem: "", sampleItem: "",
mandatory: true, mandatory: true,
requiredFlag: 1, requiredFlag: 1,
validationRules: `function verification(data){\n\t//自定义脚本内容\n\treturn true;\n}` validationRules: `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`
} }
], ],
isRowData: {}, isRowData: {},
@ -764,7 +764,7 @@ export default {
this.title = "自定义高级规则"; this.title = "自定义高级规则";
if (this.isRowData.sampleItem != "") { if (this.isRowData.sampleItem != "") {
this.isRowData = row; this.isRowData = row;
const fnCont = `function verification(data){\n\t//自定义脚本内容\n\treturn true;\n}`; const fnCont = `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`;
this.validationRules = row.validationRules this.validationRules = row.validationRules
? row.validationRules ? row.validationRules
: fnCont; : fnCont;
@ -801,10 +801,11 @@ export default {
// //
async testResultset() { async testResultset() {
this.isRowData.validationRules = this.validationRules; this.isRowData.validationRules = this.validationRules;
console.log(this.isRowData,"12345678")
const { code, message, data } = await verificationSet(this.isRowData); const { code, message, data } = await verificationSet(this.isRowData);
if (code == "200") { if (code == "200") {
if (data) { if (data) {
this.$message.success("校验通过"); this.$message.success("返回结果:"+ data);
} else { } else {
this.$message.warning("当前示例值校验不通过"); this.$message.warning("当前示例值校验不通过");
} }
@ -825,7 +826,7 @@ export default {
sampleItem: "", sampleItem: "",
mandatory: true, mandatory: true,
requiredFlag: 1, requiredFlag: 1,
validationRules: `function verification(data){\n\t//自定义脚本内容\n\treturn true;\n}` validationRules: `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`
}); });
}, },
async submit(formName) { async submit(formName) {
@ -838,10 +839,12 @@ export default {
if (this.dialogFormVisibleTitle === "新增数据集") { if (this.dialogFormVisibleTitle === "新增数据集") {
const { code } = await addDataSet(this.formData); const { code } = await addDataSet(this.formData);
if (code != "200") return; if (code != "200") return;
this.$emit('refreshList')
this.closeDialog(); this.closeDialog();
} else { } else {
const { code } = await editDataSet(this.formData); const { code } = await editDataSet(this.formData);
if (code != "200") return; if (code != "200") return;
this.$emit('refreshList')
this.closeDialog(); this.closeDialog();
} }
} else { } else {

Binary file not shown.

@ -0,0 +1,539 @@
/* Logo 字体 */
@font-face {
font-family: "iconfont logo";
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
}
.logo {
font-family: "iconfont logo";
font-size: 160px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* tabs */
.nav-tabs {
position: relative;
}
.nav-tabs .nav-more {
position: absolute;
right: 0;
bottom: 0;
height: 42px;
line-height: 42px;
color: #666;
}
#tabs {
border-bottom: 1px solid #eee;
}
#tabs li {
cursor: pointer;
width: 100px;
height: 40px;
line-height: 40px;
text-align: center;
font-size: 16px;
border-bottom: 2px solid transparent;
position: relative;
z-index: 1;
margin-bottom: -1px;
color: #666;
}
#tabs .active {
border-bottom-color: #f00;
color: #222;
}
.tab-container .content {
display: none;
}
/* 页面布局 */
.main {
padding: 30px 100px;
width: 960px;
margin: 0 auto;
}
.main .logo {
color: #333;
text-align: left;
margin-bottom: 30px;
line-height: 1;
height: 110px;
margin-top: -50px;
overflow: hidden;
*zoom: 1;
}
.main .logo a {
font-size: 160px;
color: #333;
}
.helps {
margin-top: 40px;
}
.helps pre {
padding: 20px;
margin: 10px 0;
border: solid 1px #e7e1cd;
background-color: #fffdef;
overflow: auto;
}
.icon_lists {
width: 100% !important;
overflow: hidden;
*zoom: 1;
}
.icon_lists li {
width: 100px;
margin-bottom: 10px;
margin-right: 20px;
text-align: center;
list-style: none !important;
cursor: default;
}
.icon_lists li .code-name {
line-height: 1.2;
}
.icon_lists .icon {
display: block;
height: 100px;
line-height: 100px;
font-size: 42px;
margin: 10px auto;
color: #333;
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
-moz-transition: font-size 0.25s linear, width 0.25s linear;
transition: font-size 0.25s linear, width 0.25s linear;
}
.icon_lists .icon:hover {
font-size: 100px;
}
.icon_lists .svg-icon {
/* 通过设置 font-size 来改变图标大小 */
width: 1em;
/* 图标和文字相邻时,垂直对齐 */
vertical-align: -0.15em;
/* 通过设置 color 来改变 SVG 的颜色/fill */
fill: currentColor;
/* path stroke viewBox IE
normalize.css */
overflow: hidden;
}
.icon_lists li .name,
.icon_lists li .code-name {
color: #666;
}
/* markdown 样式 */
.markdown {
color: #666;
font-size: 14px;
line-height: 1.8;
}
.highlight {
line-height: 1.5;
}
.markdown img {
vertical-align: middle;
max-width: 100%;
}
.markdown h1 {
color: #404040;
font-weight: 500;
line-height: 40px;
margin-bottom: 24px;
}
.markdown h2,
.markdown h3,
.markdown h4,
.markdown h5,
.markdown h6 {
color: #404040;
margin: 1.6em 0 0.6em 0;
font-weight: 500;
clear: both;
}
.markdown h1 {
font-size: 28px;
}
.markdown h2 {
font-size: 22px;
}
.markdown h3 {
font-size: 16px;
}
.markdown h4 {
font-size: 14px;
}
.markdown h5 {
font-size: 12px;
}
.markdown h6 {
font-size: 12px;
}
.markdown hr {
height: 1px;
border: 0;
background: #e9e9e9;
margin: 16px 0;
clear: both;
}
.markdown p {
margin: 1em 0;
}
.markdown>p,
.markdown>blockquote,
.markdown>.highlight,
.markdown>ol,
.markdown>ul {
width: 80%;
}
.markdown ul>li {
list-style: circle;
}
.markdown>ul li,
.markdown blockquote ul>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown>ul li p,
.markdown>ol li p {
margin: 0.6em 0;
}
.markdown ol>li {
list-style: decimal;
}
.markdown>ol li,
.markdown blockquote ol>li {
margin-left: 20px;
padding-left: 4px;
}
.markdown code {
margin: 0 3px;
padding: 0 5px;
background: #eee;
border-radius: 3px;
}
.markdown strong,
.markdown b {
font-weight: 600;
}
.markdown>table {
border-collapse: collapse;
border-spacing: 0px;
empty-cells: show;
border: 1px solid #e9e9e9;
width: 95%;
margin-bottom: 24px;
}
.markdown>table th {
white-space: nowrap;
color: #333;
font-weight: 600;
}
.markdown>table th,
.markdown>table td {
border: 1px solid #e9e9e9;
padding: 8px 16px;
text-align: left;
}
.markdown>table th {
background: #F7F7F7;
}
.markdown blockquote {
font-size: 90%;
color: #999;
border-left: 4px solid #e9e9e9;
padding-left: 0.8em;
margin: 1em 0;
}
.markdown blockquote p {
margin: 0;
}
.markdown .anchor {
opacity: 0;
transition: opacity 0.3s ease;
margin-left: 8px;
}
.markdown .waiting {
color: #ccc;
}
.markdown h1:hover .anchor,
.markdown h2:hover .anchor,
.markdown h3:hover .anchor,
.markdown h4:hover .anchor,
.markdown h5:hover .anchor,
.markdown h6:hover .anchor {
opacity: 1;
display: inline-block;
}
.markdown>br,
.markdown>p>br {
clear: both;
}
.hljs {
display: block;
background: white;
padding: 0.5em;
color: #333333;
overflow-x: auto;
}
.hljs-comment,
.hljs-meta {
color: #969896;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-strong,
.hljs-emphasis,
.hljs-quote {
color: #df5000;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-type {
color: #a71d5d;
}
.hljs-literal,
.hljs-symbol,
.hljs-bullet,
.hljs-attribute {
color: #0086b3;
}
.hljs-section,
.hljs-name {
color: #63a35c;
}
.hljs-tag {
color: #333333;
}
.hljs-title,
.hljs-attr,
.hljs-selector-id,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo {
color: #795da3;
}
.hljs-addition {
color: #55a532;
background-color: #eaffea;
}
.hljs-deletion {
color: #bd2c00;
background-color: #ffecec;
}
.hljs-link {
text-decoration: underline;
}
/* 代码高亮 */
/* PrismJS 1.15.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre)>code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre)>code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,779 @@
{
"id": "1990368",
"name": "lucksheet",
"font_family": "iconfont",
"css_prefix_text": "luckysheet-iconfont-",
"description": "",
"glyphs": [
{
"icon_id": "17878780",
"name": "链接",
"font_class": "lianjie",
"unicode": "e7f8",
"unicode_decimal": 59384
},
{
"icon_id": "17612330",
"name": "打印区域",
"font_class": "dayinquyu",
"unicode": "e7f5",
"unicode_decimal": 59381
},
{
"icon_id": "17612331",
"name": "打印页面配置",
"font_class": "dayinyemianpeizhi",
"unicode": "e7f6",
"unicode_decimal": 59382
},
{
"icon_id": "17612332",
"name": "打印标题",
"font_class": "dayinbiaoti",
"unicode": "e7f7",
"unicode_decimal": 59383
},
{
"icon_id": "17600443",
"name": "分页预览",
"font_class": "fenyeyulan",
"unicode": "e7f2",
"unicode_decimal": 59378
},
{
"icon_id": "17600444",
"name": "普通",
"font_class": "putong",
"unicode": "e7f3",
"unicode_decimal": 59379
},
{
"icon_id": "17600445",
"name": "页面布局",
"font_class": "yemianbuju",
"unicode": "e7f4",
"unicode_decimal": 59380
},
{
"icon_id": "17597312",
"name": "表格锁定",
"font_class": "biaogesuoding",
"unicode": "e7ee",
"unicode_decimal": 59374
},
{
"icon_id": "17444514",
"name": "转到",
"font_class": "zhuandao1",
"unicode": "e7f1",
"unicode_decimal": 59377
},
{
"icon_id": "17444503",
"name": "右箭头",
"font_class": "youjiantou",
"unicode": "e7ed",
"unicode_decimal": 59373
},
{
"icon_id": "17444507",
"name": "菜单",
"font_class": "caidan2",
"unicode": "e7ef",
"unicode_decimal": 59375
},
{
"icon_id": "17444508",
"name": "替换",
"font_class": "tihuan",
"unicode": "e7f0",
"unicode_decimal": 59376
},
{
"icon_id": "17392794",
"name": "冻结",
"font_class": "dongjie1",
"unicode": "e7e1",
"unicode_decimal": 59361
},
{
"icon_id": "17392795",
"name": "剪",
"font_class": "jian1",
"unicode": "e7e2",
"unicode_decimal": 59362
},
{
"icon_id": "17392796",
"name": "加",
"font_class": "jia1",
"unicode": "e7e3",
"unicode_decimal": 59363
},
{
"icon_id": "17392797",
"name": "溢出",
"font_class": "yichu1",
"unicode": "e7e4",
"unicode_decimal": 59364
},
{
"icon_id": "17392798",
"name": "升序",
"font_class": "shengxu1",
"unicode": "e7e5",
"unicode_decimal": 59365
},
{
"icon_id": "17392799",
"name": "内框线",
"font_class": "neikuangxian",
"unicode": "e7e6",
"unicode_decimal": 59366
},
{
"icon_id": "17392800",
"name": "清除筛选",
"font_class": "qingchushaixuan",
"unicode": "e7e7",
"unicode_decimal": 59367
},
{
"icon_id": "17392801",
"name": "文本向上",
"font_class": "wenbenxiangshang",
"unicode": "e7e8",
"unicode_decimal": 59368
},
{
"icon_id": "17392802",
"name": "降序",
"font_class": "jiangxu1",
"unicode": "e7e9",
"unicode_decimal": 59369
},
{
"icon_id": "17392803",
"name": "内框横线",
"font_class": "neikuanghengxian",
"unicode": "e7ea",
"unicode_decimal": 59370
},
{
"icon_id": "17392804",
"name": "内框竖线",
"font_class": "neikuangshuxian",
"unicode": "e7eb",
"unicode_decimal": 59371
},
{
"icon_id": "17392805",
"name": "自定义排序",
"font_class": "zidingyipaixu",
"unicode": "e7ec",
"unicode_decimal": 59372
},
{
"icon_id": "16746498",
"name": "logo2",
"font_class": "logo2",
"unicode": "e7df",
"unicode_decimal": 59359
},
{
"icon_id": "16746532",
"name": "logo",
"font_class": "logo",
"unicode": "e7e0",
"unicode_decimal": 59360
},
{
"icon_id": "16730159",
"name": "文本倾斜",
"font_class": "wenbenqingxie1",
"unicode": "e7de",
"unicode_decimal": 59358
},
{
"icon_id": "16728412",
"name": "加粗",
"font_class": "jiacu",
"unicode": "e7d9",
"unicode_decimal": 59353
},
{
"icon_id": "16728080",
"name": "搜索",
"font_class": "sousuo",
"unicode": "e78a",
"unicode_decimal": 59274
},
{
"icon_id": "16728081",
"name": "关闭",
"font_class": "guanbi",
"unicode": "e78b",
"unicode_decimal": 59275
},
{
"icon_id": "16728082",
"name": "下一个",
"font_class": "xiayige",
"unicode": "e78c",
"unicode_decimal": 59276
},
{
"icon_id": "16728083",
"name": "下拉",
"font_class": "xiala",
"unicode": "e78d",
"unicode_decimal": 59277
},
{
"icon_id": "16728084",
"name": "文本颜色",
"font_class": "wenbenyanse",
"unicode": "e78e",
"unicode_decimal": 59278
},
{
"icon_id": "16728085",
"name": "上一个",
"font_class": "shangyige",
"unicode": "e78f",
"unicode_decimal": 59279
},
{
"icon_id": "16728086",
"name": "数据透视",
"font_class": "shujutoushi",
"unicode": "e790",
"unicode_decimal": 59280
},
{
"icon_id": "16728087",
"name": "填充",
"font_class": "tianchong",
"unicode": "e791",
"unicode_decimal": 59281
},
{
"icon_id": "16728088",
"name": "增加小数位",
"font_class": "zengjiaxiaoshuwei",
"unicode": "e792",
"unicode_decimal": 59282
},
{
"icon_id": "16728089",
"name": "编辑2",
"font_class": "bianji2",
"unicode": "e793",
"unicode_decimal": 59283
},
{
"icon_id": "16728090",
"name": "截屏",
"font_class": "jieping",
"unicode": "e794",
"unicode_decimal": 59284
},
{
"icon_id": "16728092",
"name": "减小小数位",
"font_class": "jianxiaoxiaoshuwei",
"unicode": "e796",
"unicode_decimal": 59286
},
{
"icon_id": "16728093",
"name": "菜单",
"font_class": "caidan",
"unicode": "e797",
"unicode_decimal": 59287
},
{
"icon_id": "16728094",
"name": "数据库",
"font_class": "shujuku",
"unicode": "e798",
"unicode_decimal": 59288
},
{
"icon_id": "16728095",
"name": "无边框",
"font_class": "wubiankuang",
"unicode": "e799",
"unicode_decimal": 59289
},
{
"icon_id": "16728096",
"name": "编辑",
"font_class": "bianji",
"unicode": "e79a",
"unicode_decimal": 59290
},
{
"icon_id": "16728097",
"name": "清除样式",
"font_class": "qingchuyangshi",
"unicode": "e79b",
"unicode_decimal": 59291
},
{
"icon_id": "16728099",
"name": "删除",
"font_class": "shanchu",
"unicode": "e79c",
"unicode_decimal": 59292
},
{
"icon_id": "16728100",
"name": "文本居中对齐",
"font_class": "wenbenjuzhongduiqi",
"unicode": "e79d",
"unicode_decimal": 59293
},
{
"icon_id": "16728101",
"name": "打印",
"font_class": "dayin",
"unicode": "e79e",
"unicode_decimal": 59294
},
{
"icon_id": "16728102",
"name": "文本分割",
"font_class": "wenbenfenge",
"unicode": "e79f",
"unicode_decimal": 59295
},
{
"icon_id": "16728103",
"name": "函数‘",
"font_class": "hanshu",
"unicode": "e7a0",
"unicode_decimal": 59296
},
{
"icon_id": "16728104",
"name": "降序",
"font_class": "jiangxu",
"unicode": "e7a1",
"unicode_decimal": 59297
},
{
"icon_id": "16728105",
"name": "顶部对齐",
"font_class": "dingbuduiqi",
"unicode": "e7a2",
"unicode_decimal": 59298
},
{
"icon_id": "16728106",
"name": "图片",
"font_class": "tupian",
"unicode": "e7a3",
"unicode_decimal": 59299
},
{
"icon_id": "16728107",
"name": "向下90",
"font_class": "xiangxia90",
"unicode": "e7a4",
"unicode_decimal": 59300
},
{
"icon_id": "16728108",
"name": "竖排文字",
"font_class": "shupaiwenzi",
"unicode": "e7a5",
"unicode_decimal": 59301
},
{
"icon_id": "16728109",
"name": "全加边框",
"font_class": "quanjiabiankuang",
"unicode": "e7a6",
"unicode_decimal": 59302
},
{
"icon_id": "16728110",
"name": "升序",
"font_class": "shengxu",
"unicode": "e7a7",
"unicode_decimal": 59303
},
{
"icon_id": "16728111",
"name": "裁剪",
"font_class": "caijian",
"unicode": "e7a8",
"unicode_decimal": 59304
},
{
"icon_id": "16728112",
"name": "金额",
"font_class": "jine",
"unicode": "e7a9",
"unicode_decimal": 59305
},
{
"icon_id": "16728113",
"name": "菜单1",
"font_class": "caidan1",
"unicode": "e7aa",
"unicode_decimal": 59306
},
{
"icon_id": "16728114",
"name": "取消合并",
"font_class": "quxiaohebing",
"unicode": "e7ab",
"unicode_decimal": 59307
},
{
"icon_id": "16728115",
"name": "文本下划线",
"font_class": "wenbenxiahuaxian",
"unicode": "e7ac",
"unicode_decimal": 59308
},
{
"icon_id": "16728116",
"name": "上边框",
"font_class": "shangbiankuang",
"unicode": "e7ad",
"unicode_decimal": 59309
},
{
"icon_id": "16728117",
"name": "定位",
"font_class": "dingwei",
"unicode": "e7ae",
"unicode_decimal": 59310
},
{
"icon_id": "16728118",
"name": "四周加边框",
"font_class": "sizhoujiabiankuang",
"unicode": "e7af",
"unicode_decimal": 59311
},
{
"icon_id": "16728119",
"name": "侧边栏收起",
"font_class": "cebianlanshouqi",
"unicode": "e7b0",
"unicode_decimal": 59312
},
{
"icon_id": "16728120",
"name": "合并",
"font_class": "hebing",
"unicode": "e7b1",
"unicode_decimal": 59313
},
{
"icon_id": "16728121",
"name": "向上倾斜",
"font_class": "xiangshangqingxie",
"unicode": "e7b2",
"unicode_decimal": 59314
},
{
"icon_id": "16728122",
"name": "水平对齐",
"font_class": "shuipingduiqi",
"unicode": "e7b3",
"unicode_decimal": 59315
},
{
"icon_id": "16728123",
"name": "文本删除线",
"font_class": "wenbenshanchuxian",
"unicode": "e7b4",
"unicode_decimal": 59316
},
{
"icon_id": "16728124",
"name": "文本右对齐",
"font_class": "wenbenyouduiqi",
"unicode": "e7b5",
"unicode_decimal": 59317
},
{
"icon_id": "16728125",
"name": "前进",
"font_class": "qianjin",
"unicode": "e7b6",
"unicode_decimal": 59318
},
{
"icon_id": "16728126",
"name": "图表",
"font_class": "tubiao",
"unicode": "e7b7",
"unicode_decimal": 59319
},
{
"icon_id": "16728127",
"name": "右边框",
"font_class": "youbiankuang",
"unicode": "e7b8",
"unicode_decimal": 59320
},
{
"icon_id": "16728128",
"name": "百分号",
"font_class": "baifenhao",
"unicode": "e7b9",
"unicode_decimal": 59321
},
{
"icon_id": "16728129",
"name": "格式刷",
"font_class": "geshishua",
"unicode": "e7ba",
"unicode_decimal": 59322
},
{
"icon_id": "16728130",
"name": "保存",
"font_class": "baocun",
"unicode": "e7bb",
"unicode_decimal": 59323
},
{
"icon_id": "16728131",
"name": "数据验证",
"font_class": "shujuyanzheng",
"unicode": "e7bc",
"unicode_decimal": 59324
},
{
"icon_id": "16728132",
"name": "截断",
"font_class": "jieduan",
"unicode": "e7bd",
"unicode_decimal": 59325
},
{
"icon_id": "16728133",
"name": "格式条件",
"font_class": "geshitiaojian",
"unicode": "e7be",
"unicode_decimal": 59326
},
{
"icon_id": "16728134",
"name": "自动换行",
"font_class": "zidonghuanhang",
"unicode": "e7bf",
"unicode_decimal": 59327
},
{
"icon_id": "16728135",
"name": "侧边栏展开",
"font_class": "cebianlanzhankai",
"unicode": "e7c0",
"unicode_decimal": 59328
},
{
"icon_id": "16728136",
"name": "筛选2",
"font_class": "shaixuan2",
"unicode": "e7c1",
"unicode_decimal": 59329
},
{
"icon_id": "16728137",
"name": "向下倾斜",
"font_class": "xiangxiaqingxie",
"unicode": "e7c2",
"unicode_decimal": 59330
},
{
"icon_id": "16728138",
"name": "溢出",
"font_class": "yichu",
"unicode": "e7c3",
"unicode_decimal": 59331
},
{
"icon_id": "16728139",
"name": "垂直合并",
"font_class": "chuizhihebing",
"unicode": "e7c4",
"unicode_decimal": 59332
},
{
"icon_id": "16728140",
"name": "文本分散对齐",
"font_class": "wenbenfensanduiqi",
"unicode": "e7c5",
"unicode_decimal": 59333
},
{
"icon_id": "16728141",
"name": "左边框",
"font_class": "zuobiankuang",
"unicode": "e7c6",
"unicode_decimal": 59334
},
{
"icon_id": "16728142",
"name": "分页查看",
"font_class": "fenyechakan",
"unicode": "e7c7",
"unicode_decimal": 59335
},
{
"icon_id": "16728143",
"name": "运行",
"font_class": "yunhang",
"unicode": "e7c8",
"unicode_decimal": 59336
},
{
"icon_id": "16728144",
"name": "列",
"font_class": "lie",
"unicode": "e7c9",
"unicode_decimal": 59337
},
{
"icon_id": "16728145",
"name": "全屏",
"font_class": "quanping",
"unicode": "e7ca",
"unicode_decimal": 59338
},
{
"icon_id": "16728146",
"name": "筛选",
"font_class": "shaixuan",
"unicode": "e7cb",
"unicode_decimal": 59339
},
{
"icon_id": "16728147",
"name": "更新",
"font_class": "gengxin",
"unicode": "e7cc",
"unicode_decimal": 59340
},
{
"icon_id": "16728148",
"name": "清除",
"font_class": "qingchu",
"unicode": "e7cd",
"unicode_decimal": 59341
},
{
"icon_id": "16728149",
"name": "行",
"font_class": "hang",
"unicode": "e7ce",
"unicode_decimal": 59342
},
{
"icon_id": "16728150",
"name": "注释",
"font_class": "zhushi",
"unicode": "e7cf",
"unicode_decimal": 59343
},
{
"icon_id": "16728151",
"name": "剪",
"font_class": "jian",
"unicode": "e7d0",
"unicode_decimal": 59344
},
{
"icon_id": "16728152",
"name": "计算",
"font_class": "jisuan",
"unicode": "e7d1",
"unicode_decimal": 59345
},
{
"icon_id": "16728153",
"name": "加",
"font_class": "jia",
"unicode": "e7d2",
"unicode_decimal": 59346
},
{
"icon_id": "16728154",
"name": "底部对齐",
"font_class": "dibuduiqi",
"unicode": "e7d3",
"unicode_decimal": 59347
},
{
"icon_id": "16728155",
"name": "向上90",
"font_class": "xiangshang90",
"unicode": "e7d4",
"unicode_decimal": 59348
},
{
"icon_id": "16728156",
"name": "无选装",
"font_class": "wuxuanzhuang",
"unicode": "e7d5",
"unicode_decimal": 59349
},
{
"icon_id": "16728157",
"name": "显示隐藏网格",
"font_class": "xianshiyincangwangge",
"unicode": "e7d6",
"unicode_decimal": 59350
},
{
"icon_id": "16728158",
"name": "冻结",
"font_class": "dongjie",
"unicode": "e7d7",
"unicode_decimal": 59351
},
{
"icon_id": "16728159",
"name": "文本左对齐",
"font_class": "wenbenzuoduiqi",
"unicode": "e7d8",
"unicode_decimal": 59352
},
{
"icon_id": "16728161",
"name": "后退",
"font_class": "houtui",
"unicode": "e7da",
"unicode_decimal": 59354
},
{
"icon_id": "16728162",
"name": "水平合并",
"font_class": "shuipinghebing",
"unicode": "e7db",
"unicode_decimal": 59355
},
{
"icon_id": "16728163",
"name": "下边框",
"font_class": "xiabiankuang",
"unicode": "e7dc",
"unicode_decimal": 59356
},
{
"icon_id": "16728164",
"name": "设置",
"font_class": "shezhi",
"unicode": "e7dd",
"unicode_decimal": 59357
}
]
}

@ -0,0 +1,356 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="lianjie" unicode="&#59384;" d="M771.584 644.266667c-49.066667 51.2-132.266667 51.2-181.333333 0l-74.666667-76.8c-8.533333-8.533333-8.533333-23.466667 0-32 8.533333-8.533333 21.333333-8.533333 29.866667 0l74.666666 76.8c34.133333 34.133333 87.466667 34.133333 121.6 0 34.133333-34.133333 34.133333-89.6 0-123.733334l-121.6-123.733333c-34.133333-34.133333-87.466667-34.133333-121.6 0-8.533333 8.533333-21.333333 8.533333-29.866666 0-8.533333-8.533333-8.533333-23.466667 0-32 49.066667-51.2 132.266667-51.2 181.333333 0l121.6 123.733333c51.2 53.333333 51.2 136.533333 0 187.733334zM477.184 232.533333l-74.666667-76.8c-34.133333-34.133333-87.466667-34.133333-121.6 0-34.133333 34.133333-34.133333 89.6 0 123.733334l121.6 123.733333c34.133333 34.133333 87.466667 34.133333 121.6 0 8.533333-8.533333 21.333333-8.533333 29.866667 0 8.533333 8.533333 8.533333 23.466667 0 32-49.066667 51.2-132.266667 51.2-181.333333 0l-121.6-123.733333c-51.2-51.2-49.066667-134.4 0-185.6 49.066667-51.2 132.266667-51.2 181.333333 0l74.666667 76.8c8.533333 8.533333 8.533333 23.466667 0 32-8.533333 6.4-21.333333 6.4-29.866667-2.133334z" horiz-adv-x="1024" />
<glyph glyph-name="dayinquyu" unicode="&#59381;" d="M727.04 189.781333a11.946667 11.946667 0 0 0 8.704-3.754666 13.312 13.312 0 0 0 3.626667-9.130667V85.333333H583.253333v91.52c0 3.413333 1.28 6.741333 3.626667 9.173334a11.946667 11.946667 0 0 0 8.661333 3.754666zM362.666667 170.666667v-42.666667h-128v42.666667h128z m128 0v-42.666667h-42.666667v42.666667h42.666667z m301.696 143.957333a18.773333 18.773333 0 0 0 18.304-19.2v-117.205333c0-10.581333-8.277333-19.2-18.346667-19.2h-28.458667v11.434666c-0.128 21.333333-16.554667 38.570667-36.778666 38.570667h-131.498667c-20.224 0-36.693333-17.237333-36.778667-38.570667v-11.477333h-28.458666a18.858667 18.858667 0 0 0-18.346667 19.2v117.248c0 10.581333 8.277333 19.2 18.346667 19.2zM256 362.666667v-128H213.333333v128h42.666667z m411.477333-85.845334H567.04a12.586667 12.586667 0 0 1-12.245333-12.8c0.042667-7.125333 5.546667-12.885333 12.245333-12.842666h100.394667a12.586667 12.586667 0 0 1 12.202666 12.8c0 7.082667-5.504 12.8-12.202666 12.8zM723.072 384a14.506667 14.506667 0 0 0 14.165333-14.805333v-35.84H585.386667v35.84a14.506667 14.506667 0 0 0 14.165333 14.805333zM768 533.333333v-128h-42.666667v128h42.666667z m-512 42.666667v-128H213.333333v128h42.666667zM768 682.666667v-64h-42.666667V640h-64V682.666667H768zM362.666667 682.666667v-42.666667H256v-21.333333H213.333333V682.666667h149.333334z m213.333333 0v-42.666667h-128V682.666667h128z" horiz-adv-x="1024" />
<glyph glyph-name="dayinyemianpeizhi" unicode="&#59382;" d="M635.477333 682.666667H388.522667c-15.530667 0-28.16-13.226667-28.288-29.610667v-71.68h303.530666v71.68c0 16.298667-12.586667 29.568-28.288 29.568V682.666667z m7.978667-388.48H380.586667a23.893333 23.893333 0 0 1-17.365334-7.509334 26.581333 26.581333 0 0 1-7.253333-18.261333V85.333333h312.149333v183.125334a26.581333 26.581333 0 0 1-7.253333 18.218666 23.893333 23.893333 0 0 1-17.365333 7.509334z m130.602667 249.728H250.069333c-20.224 0-36.736-17.28-36.736-38.4v-234.410667c0-21.162667 16.512-38.442667 36.693334-38.442667h56.96v22.912c0.213333 42.666667 33.109333 77.184 73.557333 77.098667h262.912c40.448 0.085333 73.386667-34.389333 73.557333-77.098667v-22.912h56.917334c20.224 0 36.736 17.28 36.736 38.4V505.514667c-0.042667 21.290667-16.426667 38.485333-36.608 38.442666z m-249.813334-126.933334H323.498667c-13.44 0-24.405333 11.434667-24.490667 25.642667a25.173333 25.173333 0 0 0 24.490667 25.685333h200.746666c13.44 0 24.490667-11.52 24.490667-25.685333 0-14.08-11.050667-25.6-24.490667-25.6v-0.042667z" horiz-adv-x="1024" />
<glyph glyph-name="dayinbiaoti" unicode="&#59383;" d="M727.04 189.781333a11.946667 11.946667 0 0 0 8.704-3.754666 13.312 13.312 0 0 0 3.626667-9.130667V85.333333H583.253333v91.52c0 3.413333 1.28 6.741333 3.626667 9.173334a11.946667 11.946667 0 0 0 8.661333 3.754666zM768 682.666667v-277.333334h-42.666667V640H256v-469.333333h234.666667v-42.666667H213.333333V682.666667h554.666667z m24.362667-368.042667a18.773333 18.773333 0 0 0 18.304-19.2v-117.205333c0-10.581333-8.277333-19.2-18.346667-19.2h-28.458667v11.434666c-0.128 21.333333-16.554667 38.570667-36.778666 38.570667h-131.498667c-20.224 0-36.693333-17.237333-36.778667-38.570667v-11.477333h-28.458666a18.858667 18.858667 0 0 0-18.346667 19.2v117.248c0 10.581333 8.277333 19.2 18.346667 19.2z m-124.885334-37.802667H567.04a12.586667 12.586667 0 0 1-12.245333-12.8c0.042667-7.125333 5.546667-12.885333 12.245333-12.842666h100.394667a12.586667 12.586667 0 0 1 12.202666 12.8c0 7.082667-5.504 12.8-12.202666 12.8zM723.072 384a14.506667 14.506667 0 0 0 14.165333-14.805333v-35.84H585.386667v35.84a14.506667 14.506667 0 0 0 14.165333 14.805333zM341.333333 554.666667h298.666667v-42.666667H341.333333zM341.333333 469.333333h170.666667v-42.666666H341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="fenyeyulan" unicode="&#59378;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM256 384h256v-42.666667H256zM554.666667 640v-298.666667h-42.666667V640zM405.333333 640v-298.666667h-42.666666V640z" horiz-adv-x="1024" />
<glyph glyph-name="putong" unicode="&#59379;" d="M256 640h554.666667v-42.666667H256zM298.666667 640v-554.666667H256V640zM810.666667 640v-554.666667h-42.666667V640zM469.333333 640v-554.666667h-42.666666V640zM640 640v-554.666667h-42.666667V640zM256 469.333333h554.666667v-42.666666H256zM256 298.666667h554.666667v-42.666667H256zM256 128h554.666667v-42.666667H256z" horiz-adv-x="1024" />
<glyph glyph-name="yemianbuju" unicode="&#59380;" d="M810.666667 682.666667v-42.666667h-170.709334L640 128h170.666667v-42.666667h-213.333334V682.666667h213.333334z m-384 0l-0.042667-554.666667H426.666667v-42.666667H213.333333v42.666667h170.624L384 640H213.333333V682.666667h213.333334z m106.666666-512v-85.333334h-42.666666v85.333334h42.666666z m0 170.666666v-85.333333h-42.666666v85.333333h42.666666z m0 170.666667v-85.333333h-42.666666V512h42.666666z m0 170.666667v-85.333334h-42.666666V682.666667h42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="biaogesuoding" unicode="&#59374;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334zM341.333333 512.128H256V128h85.333333V512.128z m426.666667 0H383.872V128H768V512.128z m-149.333333-21.461333a64 64 0 0 0 63.701333-57.856L682.666667 426.666667v-64h42.666666v-213.333334h-298.666666v213.333334h42.666666V426.666667a64 64 0 0 0 57.856 63.701333L533.333333 490.666667h85.333334z m64-170.666667h-213.333334v-128h213.333334v128z m-106.666667-21.333333a21.333333 21.333333 0 0 0 21.333333-21.333334v-42.666666a21.333333 21.333333 0 1 0-42.666666 0v42.666666a21.333333 21.333333 0 0 0 21.333333 21.333334z m42.666667 149.333333h-85.333334a21.333333 21.333333 0 0 1-20.992-17.493333L512 426.666667v-64h128V426.666667a21.333333 21.333333 0 0 1-13.909333 20.010666l-3.584 0.981334-3.84 0.341333zM768 640H383.872v-85.290667L768 554.666667V640zM341.333333 640H256v-85.333333l85.333333 0.042666V640z" horiz-adv-x="1024" />
<glyph glyph-name="zhuandao1" unicode="&#59377;" d="M804.992 201.941333l-84.650667 84.224c-7.552 7.509333-21.930667 8.448-26.026666-1.365333-1.066667-2.602667-1.365333-10.026667-1.365334-10.026667v-56.874666H406.442667a69.034667 69.034667 0 0 0-69.205334 68.778666 69.034667 69.034667 0 0 0 69.205334 68.821334h259.84a128.341333 128.341333 0 0 1 128.597333 127.829333 128.384 128.384 0 0 1-128.554667 127.914667H411.946667A101.632 101.632 0 0 1 213.333333 581.674667a101.632 101.632 0 1 1 198.613334-29.525334h254.378666a69.034667 69.034667 0 0 0 69.162667-68.821333 69.034667 69.034667 0 0 0-69.162667-68.778667H406.442667a128.341333 128.341333 0 0 1-128.597334-127.872 128.341333 128.341333 0 0 1 128.597334-127.872h286.506666v-54.016s0-8.277333 1.408-11.52c4.053333-9.813333 18.432-10.24 25.984-2.730666l84.650667 84.181333a19.2 19.2 0 0 1 0 27.221333zM314.88 539.776a42.069333 42.069333 0 0 0-42.112 41.898667c0 23.082667 18.858667 41.856 42.112 41.856 23.210667 0 42.112-18.773333 42.112-41.856a42.069333 42.069333 0 0 0-42.112-41.898667z" horiz-adv-x="1024" />
<glyph glyph-name="youjiantou" unicode="&#59373;" d="M682.666667 384l-341.333334-341.333333V725.333333z" horiz-adv-x="1024" />
<glyph glyph-name="caidan2" unicode="&#59375;" d="M213.333333 426.666667h597.333334v-85.333334H213.333333zM213.333333 682.666667h597.333334v-85.333334H213.333333zM213.333333 170.666667h597.333334v-85.333334H213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="tihuan" unicode="&#59376;" d="M768 465.066667H280.405333l-4.394666 0.554666c-5.461333 0.853333-6.570667 1.749333-12.885334 6.528l-2.986666 5.376c-6.4 11.946667-5.376 13.738667 2.986666 28.885334L440.618667 682.666667l34.218666-34.048-136.362666-135.424H768v-48.170667z m-7.594667-163.242667L585.472 128l-34.261333 34.048 136.362666 135.424H258.048v48.170667h484.096c10.453333 0 19.882667-6.272 23.893333-15.872a25.6 25.6 0 0 0-5.632-27.989334z" horiz-adv-x="1024" />
<glyph glyph-name="dongjie1" unicode="&#59361;" d="M809.557333 682.069333v-595.626666H213.930667V682.069333h595.626666zM256.426667 322.389333v-193.408l193.365333 0.042667-193.365333 193.365333z m510.549333 40.618667h-234.026667v-234.026667h234.026667v234.026667z m-276.565333 0H276.053333l214.357334-214.4v214.4z m276.565333 276.522667h-234.026667v-233.984h234.026667V639.530667zM256.426667 609.450667v-203.946667l203.904 0.042667-203.946667 203.946666z m233.984 30.08H286.592l203.861333-203.861334V639.573333z" horiz-adv-x="1024" />
<glyph glyph-name="jian1" unicode="&#59362;" d="M213.333333 426.666667h597.333334v-85.333334H213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="jia1" unicode="&#59363;" d="M213.333333 426.666667h597.333334v-85.333334H213.333333zM554.666667 682.666667v-597.333334h-85.333334V682.666667z" horiz-adv-x="1024" />
<glyph glyph-name="yichu1" unicode="&#59364;" d="M300.288 85.333333H213.333333V682.666667h86.954667v-279.978667h441.898667l-91.306667 85.845333 26.624 26.112L810.666667 384l-133.162667-130.688-26.624 26.154667 91.306667 85.845333-441.898667 0.042667zM530.688 682.666667h42.666667v-242.688h-42.666667V682.666667z m0-354.688h42.666667V85.333333h-42.666667v242.688z" horiz-adv-x="1024" />
<glyph glyph-name="shengxu1" unicode="&#59365;" d="M684.757333 482.944v-290.645333a20.650667 20.650667 0 0 0-6.4-15.274667 23.04 23.04 0 0 0-16-6.357333 22.229333 22.229333 0 0 0-22.4 21.632V482.944L550.4 398.08a22.528 22.528 0 0 0-15.872-6.442667 22.613333 22.613333 0 0 0-15.914667 6.442667 20.650667 20.650667 0 0 0-6.613333 15.061333c0 5.674667 2.389333 11.093333 6.613333 15.061334l126.72 120.064a22.485333 22.485333 0 0 0 15.658667 6.4 23.594667 23.594667 0 0 0 16.128-5.546667l126.72-120.064c4.309333-3.84 6.826667-9.301333 6.826667-15.061333a20.266667 20.266667 0 0 0-6.826667-15.061334 23.04 23.04 0 0 0-15.914667-6.272 23.04 23.04 0 0 0-15.872 6.272l-87.296 84.010667zM229.930667 213.333333h265.472c9.173333 0 16.597333-9.472 16.597333-21.12s-7.424-21.12-16.597333-21.12H229.930667c-9.173333 0-16.597333 9.472-16.597334 21.12 0 11.690667 7.424 21.12 16.597334 21.12z m1.152 170.666667h177.792c9.813333 0 17.792-9.429333 17.792-21.12s-7.936-21.12-17.792-21.12H231.168c-9.813333 0-17.792 9.429333-17.792 21.12 0 11.648 7.978667 21.12 17.792 21.12z m264.362666 170.666667H229.845333C220.757333 554.666667 213.333333 545.194667 213.333333 533.546667s7.424-21.12 16.597334-21.12h265.472c9.173333 0 16.597333 9.472 16.597333 21.12S504.576 554.666667 495.402667 554.666667z" horiz-adv-x="1024" />
<glyph glyph-name="neikuangxian" unicode="&#59366;" d="M213.333333 384h554.666667v-42.666667H213.333333zM512 640v-554.666667h-42.666667V640zM213.333333 469.333333h42.666667v-42.666666H213.333333zM213.333333 298.666667h42.666667v-42.666667H213.333333zM213.333333 554.666667h42.666667v-42.666667H213.333333zM213.333333 213.333333h42.666667v-42.666666H213.333333zM725.333333 469.333333h42.666667v-42.666666h-42.666667zM725.333333 298.666667h42.666667v-42.666667h-42.666667zM725.333333 554.666667h42.666667v-42.666667h-42.666667zM725.333333 213.333333h42.666667v-42.666666h-42.666667zM725.333333 128h42.666667v-42.666667h-42.666667zM725.333333 640h42.666667v-42.666667h-42.666667zM213.333333 128h42.666667v-42.666667H213.333333zM213.333333 640h42.666667v-42.666667H213.333333zM384 128h42.666667v-42.666667H384zM384 640h42.666667v-42.666667H384zM554.666667 128h42.666666v-42.666667h-42.666666zM554.666667 640h42.666666v-42.666667h-42.666666zM298.666667 128h42.666666v-42.666667H298.666667zM298.666667 640h42.666666v-42.666667H298.666667zM640 128h42.666667v-42.666667h-42.666667zM640 640h42.666667v-42.666667h-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="qingchushaixuan" unicode="&#59367;" d="M214.016 173.568h593.92v-42.410667H214.016v42.410667z m578.048 312.106667l-180.693333 181.077333A53.376 53.376 0 0 1 573.738667 682.666667a45.653333 45.653333 0 0 1-32.64-13.226667l-313.941334-314.965333c-18.56-18.602667-17.322667-50.261333 2.688-70.4l68.010667-68.096h298.24l198.698667 199.338666c18.56 18.602667 17.322667 50.261333-2.730667 70.357334z m-213.546667-227.242667H315.434667L259.84 314.112c-3.968 4.010667-4.053333 9.088-2.730667 10.453333L430.08 497.92l193.92-193.92-45.44-45.568z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenxiangshang" unicode="&#59368;" d="M192 400.213333l213.333333 77.653334v0.64l1.621334-0.042667L554.666667 532.224v-45.354667l-106.666667-38.826666v-152.405334l106.666667-38.826666v-45.354667l-147.498667 53.674667-1.834667 0.042666v0.64l-213.333333 77.610667V400.213333z m46.634667-28.416L405.333333 311.125333v121.386667l-166.698666-60.714667zM597.333333 559.829333l90.496 90.538667 90.538667-90.538667-30.165333-30.165333-37.802667 37.76V106.666667h-42.666667V569.898667l-40.234666-40.234667L597.333333 559.829333z" horiz-adv-x="1024" />
<glyph glyph-name="jiangxu1" unicode="&#59369;" d="M684.757333 242.389333V533.034667a20.650667 20.650667 0 0 1-6.4 15.274666 23.04 23.04 0 0 1-16 6.357334 22.229333 22.229333 0 0 1-22.4-21.632v-290.645334L550.4 327.253333a22.528 22.528 0 0 1-15.872 6.442667 22.613333 22.613333 0 0 1-15.914667-6.442667 20.650667 20.650667 0 0 1-6.613333-15.061333c0-5.674667 2.389333-11.093333 6.613333-15.061333l126.72-120.064a22.485333 22.485333 0 0 1 15.658667-6.4 23.594667 23.594667 0 0 1 16.128 5.546666l126.72 120.064c4.309333 3.84 6.826667 9.301333 6.826667 15.061334a20.266667 20.266667 0 0 1-6.826667 15.061333 23.04 23.04 0 0 1-15.914667 6.272 23.04 23.04 0 0 1-15.872-6.272l-87.296-84.010667zM229.930667 213.333333h265.472c9.173333 0 16.597333-9.472 16.597333-21.12s-7.424-21.12-16.597333-21.12H229.930667c-9.173333 0-16.597333 9.472-16.597334 21.12 0 11.690667 7.424 21.12 16.597334 21.12z m1.152 170.666667h177.792c9.813333 0 17.792-9.429333 17.792-21.12s-7.936-21.12-17.792-21.12H231.168c-9.813333 0-17.792 9.429333-17.792 21.12 0 11.648 7.978667 21.12 17.792 21.12z m264.362666 170.666667H229.845333C220.757333 554.666667 213.333333 545.237333 213.333333 533.546667c0-11.648 7.424-21.12 16.597334-21.12h265.472c9.173333 0 16.597333 9.472 16.597333 21.12S504.576 554.666667 495.402667 554.666667z" horiz-adv-x="1024" />
<glyph glyph-name="neikuanghengxian" unicode="&#59370;" d="M213.333333 384h554.666667v-42.666667H213.333333zM213.333333 469.333333h42.666667v-42.666666H213.333333zM213.333333 298.666667h42.666667v-42.666667H213.333333zM213.333333 554.666667h42.666667v-42.666667H213.333333zM213.333333 213.333333h42.666667v-42.666666H213.333333zM725.333333 469.333333h42.666667v-42.666666h-42.666667zM469.333333 469.333333h42.666667v-42.666666h-42.666667zM725.333333 298.666667h42.666667v-42.666667h-42.666667zM469.333333 298.666667h42.666667v-42.666667h-42.666667zM725.333333 554.666667h42.666667v-42.666667h-42.666667zM469.333333 554.666667h42.666667v-42.666667h-42.666667zM725.333333 213.333333h42.666667v-42.666666h-42.666667zM469.333333 213.333333h42.666667v-42.666666h-42.666667zM725.333333 128h42.666667v-42.666667h-42.666667zM725.333333 640h42.666667v-42.666667h-42.666667zM213.333333 128h42.666667v-42.666667H213.333333zM213.333333 640h42.666667v-42.666667H213.333333zM384 128h42.666667v-42.666667H384zM384 640h42.666667v-42.666667H384zM554.666667 128h42.666666v-42.666667h-42.666666zM554.666667 640h42.666666v-42.666667h-42.666666zM298.666667 128h42.666666v-42.666667H298.666667zM298.666667 640h42.666666v-42.666667H298.666667zM469.333333 128h42.666667v-42.666667h-42.666667zM469.333333 640h42.666667v-42.666667h-42.666667zM640 128h42.666667v-42.666667h-42.666667zM640 640h42.666667v-42.666667h-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="neikuangshuxian" unicode="&#59371;" d="M213.333333 469.333333h42.666667v-42.666666H213.333333zM213.333333 298.666667h42.666667v-42.666667H213.333333zM213.333333 554.666667h42.666667v-42.666667H213.333333zM213.333333 213.333333h42.666667v-42.666666H213.333333zM725.333333 469.333333h42.666667v-42.666666h-42.666667zM725.333333 298.666667h42.666667v-42.666667h-42.666667zM725.333333 554.666667h42.666667v-42.666667h-42.666667zM725.333333 213.333333h42.666667v-42.666666h-42.666667zM725.333333 128h42.666667v-42.666667h-42.666667zM725.333333 640h42.666667v-42.666667h-42.666667zM725.333333 384h42.666667v-42.666667h-42.666667zM213.333333 128h42.666667v-42.666667H213.333333zM213.333333 640h42.666667v-42.666667H213.333333zM213.333333 384h42.666667v-42.666667H213.333333zM384 128h42.666667v-42.666667H384zM384 640h42.666667v-42.666667H384zM384 384h42.666667v-42.666667H384zM554.666667 128h42.666666v-42.666667h-42.666666zM554.666667 640h42.666666v-42.666667h-42.666666zM554.666667 384h42.666666v-42.666667h-42.666666zM298.666667 128h42.666666v-42.666667H298.666667zM298.666667 640h42.666666v-42.666667H298.666667zM298.666667 384h42.666666v-42.666667H298.666667zM469.333333 128h42.666667v-42.666667h-42.666667zM469.333333 640h42.666667v-42.666667h-42.666667zM469.333333 384h42.666667v-42.666667h-42.666667zM640 128h42.666667v-42.666667h-42.666667zM640 640h42.666667v-42.666667h-42.666667zM640 384h42.666667v-42.666667h-42.666667zM512 640v-554.666667h-42.666667V640z" horiz-adv-x="1024" />
<glyph glyph-name="zidingyipaixu" unicode="&#59372;" d="M704 640a21.333333 21.333333 0 0 0 21.333333-21.333333v-469.333334a21.333333 21.333333 0 1 0-42.666666 0v469.333334c0 11.776 9.472 21.333333 21.333333 21.333333zM512 512c11.776 0 21.333333-7.68 21.333333-17.194667v-221.610666c0-9.514667-9.472-17.194667-21.333333-17.194667-11.776 0-21.333333 7.68-21.333333 17.194667V494.805333c0 4.565333 2.218667 8.96 6.186666 12.16A24.32 24.32 0 0 0 512 512zM320 640a21.333333 21.333333 0 0 0 21.333333-21.333333v-469.333334a21.333333 21.333333 0 1 0-42.666666 0v469.333334c0 11.776 9.472 21.333333 21.333333 21.333333z m283.562667-368.896a21.333333 21.333333 0 0 0 30.165333-30.165333l-106.666667-106.666667a21.333333 21.333333 0 0 0-30.165333 0l-106.666667 106.666667a21.333333 21.333333 0 0 0 30.165334 30.165333L512 179.498667l91.605333 91.562666z m0.298666 225.834667a21.333333 21.333333 0 0 1 30.165334 30.165333l-106.666667 106.666667a21.333333 21.333333 0 0 1-30.165333 0l-106.666667-106.666667a21.333333 21.333333 0 0 1 30.165333-30.165333l91.562667 91.562666 91.605333-91.562666z" horiz-adv-x="1024" />
<glyph glyph-name="logo2" unicode="&#59359;" d="M1023.168 764.64c0-234.4-190.016-424.416-424.416-424.416 0 234.4 190.016 424.416 424.416 424.416zM131.36-127.168c0 234.4 190.016 424.416 424.416 424.416 0-234.4-190.016-424.416-424.416-424.416zM929.696-33.696c-182.784 0-330.944 148.16-330.944 330.944 182.752 0 330.944-148.16 330.944-330.944zM494.848 896H0v-494.848h494.848zM558.016 814.624H81.376v-476.64h476.64zM558.304 731.584H164.384v-393.92h393.92z" horiz-adv-x="1024" />
<glyph glyph-name="logo" unicode="&#59360;" d="M1023.168 764.64c0-234.4-190.016-424.416-424.416-424.416 0 234.4 190.016 424.416 424.416 424.416zM131.36-127.168c0 234.4 190.016 424.416 424.416 424.416 0-234.4-190.016-424.416-424.416-424.416zM929.696-33.696c-182.784 0-330.944 148.16-330.944 330.944 182.752 0 330.944-148.16 330.944-330.944zM494.848 896H0v-494.848h494.848zM558.016 814.624H81.376v-476.64h476.64zM558.304 731.584H164.384v-393.92h393.92zM1678.08 160v64h-247.04V616.96H1356.8V160h321.28z m177.568-8.96c40.96 0 75.52 17.28 103.68 51.84V160h72.96V490.88h-72.96v-202.24c-6.4-23.68-17.28-42.24-32-56.32-14.72-13.44-30.08-20.48-46.08-20.48-25.6 0-43.52 6.4-55.04 18.56-11.52 12.8-16.64 32-16.64 58.88v201.6h-72.96v-206.08c0-88.96 39.68-133.76 119.04-133.76z m407.936 0c42.88 0 77.44 10.88 103.04 32 26.24 21.76 43.52 55.04 51.2 99.84h-72.32c-5.76-48-32.64-72.32-81.28-72.32-28.16 0-49.28 10.24-63.36 30.08-15.36 20.48-22.4 49.28-22.4 85.76 0 35.84 7.68 64 23.04 83.84 15.36 20.48 36.48 30.08 63.36 30.08 21.76 0 39.68-5.12 53.12-15.36 12.8-10.24 21.76-25.6 26.24-46.72h72.32c-6.4 41.6-23.04 72.32-49.28 92.8-25.6 19.2-59.52 28.8-102.4 28.8-51.84 0-92.16-17.28-120.96-51.84-26.88-31.36-40.32-72.32-40.32-122.24 0-51.2 13.44-92.8 40.96-124.8 28.16-33.28 67.84-49.92 119.04-49.92z m292.128 8.96v115.84l33.28 31.36 115.84-147.2h93.44l-159.36 193.92 146.56 136.96h-94.08l-135.68-131.2V625.92h-72.96V160h72.96z m404.096-126.72l179.2 457.6h-79.36l-83.84-235.52-87.68 235.52h-79.36l131.2-323.2-58.24-134.4h78.08z m357.408 117.76c99.2 0 149.12 35.2 149.12 105.6 0 29.44-13.44 53.12-39.68 69.76-17.92 12.16-46.08 22.4-83.2 31.36-33.28 8.32-55.04 14.72-65.92 19.2-17.92 7.68-26.24 17.28-26.24 27.52 0 12.8 5.12 21.76 16.64 27.52 9.6 5.76 24.32 8.32 43.52 8.32 22.4 0 39.04-3.2 49.92-10.24 10.24-6.4 17.92-18.56 23.04-35.2h71.04c-7.68 70.4-55.68 104.96-142.72 104.96-40.96 0-73.6-8.32-98.56-26.24-25.6-16.64-37.76-40.32-37.76-71.04 0-28.8 12.8-51.2 38.4-67.2 16-10.24 43.52-19.84 82.56-28.8 33.28-7.68 55.04-13.44 65.28-18.56 19.2-8.96 28.8-21.12 28.8-36.48 0-26.88-25.6-40.96-76.8-40.96-24.32 0-41.6 4.48-52.48 12.16-10.88 8.96-18.56 23.68-22.4 44.8h-71.04c7.04-77.44 56.32-116.48 148.48-116.48z m286.976 8.96v184.96c0 28.16 6.4 50.56 19.84 68.48 12.8 17.92 30.72 26.88 53.76 26.88 24.96 0 43.52-7.68 56.32-23.68 10.88-14.72 16.64-36.48 16.64-64.64v-192h72.96v204.8c0 44.16-9.6 77.44-28.16 99.84-19.84 23.68-49.92 35.2-90.24 35.2-21.12 0-39.68-3.84-55.68-12.16-17.92-8.96-33.28-22.4-45.44-40.96v179.2h-72.96V160h72.96z m447.648-8.96c44.16 0 80.64 12.8 110.08 37.76 23.04 20.48 38.4 46.72 46.08 77.44h-72.96c-8.96-18.56-18.56-32-29.44-40.32-14.08-10.24-32-15.36-54.4-15.36-26.24 0-46.72 8.32-60.8 24.32-14.08 16-22.4 39.68-24.96 70.4h247.68c0 59.52-13.44 106.24-39.68 139.52-28.8 37.12-70.4 55.04-124.8 55.04-49.28 0-88.32-16.64-116.48-50.56-29.44-33.28-43.52-74.24-43.52-123.52 0-55.04 15.36-97.92 46.08-129.28 28.8-30.08 67.84-45.44 117.12-45.44z m85.12 209.28h-170.24c4.48 26.24 13.44 46.08 26.88 59.52 14.08 14.08 32.64 20.48 56.96 20.48 51.2 0 80-26.24 86.4-80z m285.088-209.28c44.16 0 80.64 12.8 110.08 37.76 23.04 20.48 38.4 46.72 46.08 77.44h-72.96c-8.96-18.56-18.56-32-29.44-40.32-14.08-10.24-32-15.36-54.4-15.36-26.24 0-46.72 8.32-60.8 24.32-14.08 16-22.4 39.68-24.96 70.4h247.68c0 59.52-13.44 106.24-39.68 139.52-28.8 37.12-70.4 55.04-124.8 55.04-49.28 0-88.32-16.64-116.48-50.56-29.44-33.28-43.52-74.24-43.52-123.52 0-55.04 15.36-97.92 46.08-129.28 28.8-30.08 67.84-45.44 117.12-45.44z m85.12 209.28h-170.24c4.48 26.24 13.44 46.08 26.88 59.52 14.08 14.08 32.64 20.48 56.96 20.48 51.2 0 80-26.24 86.4-80z m310.016-200.32v60.16h-43.52c-7.68 0-12.8 1.92-16.64 5.76-3.84 4.48-5.12 10.24-5.12 17.92v186.88h73.6v60.16h-73.6V597.76l-72.96-30.08v-76.8h-59.52v-60.16h59.52v-186.88c0-26.88 6.4-46.72 19.2-60.8 13.44-15.36 34.56-23.04 63.36-23.04h55.68z" horiz-adv-x="4864" />
<glyph glyph-name="wenbenqingxie1" unicode="&#59358;" d="M469.333333 640h170.666667v-42.666667h-170.666667zM573.738667 611.413333l-81.493334-462.208-41.984 7.381334 81.493334 462.208zM384 170.666667h170.666667v-42.666667H384z" horiz-adv-x="1024" />
<glyph glyph-name="jiacu" unicode="&#59353;" d="M298.666667 682.666667h224a174.208 174.208 0 0 0 141.952-275.242667A174.208 174.208 0 0 0 572.458667 85.333333H298.666667V682.666667z m273.792-348.458667l-174.250667 0.042667v-149.333334h174.250667a74.666667 74.666667 0 0 1 6.101333 149.077334l-6.101333 0.213333zM398.208 583.125333v-149.333333h124.458667a74.666667 74.666667 0 0 1 6.144 149.077333l-6.144 0.256H398.208z" horiz-adv-x="1024" />
<glyph glyph-name="sousuo" unicode="&#59274;" d="M664.832 261.376l128.554667-128.597333a21.333333 21.333333 0 1 0-30.165334-30.165334l-128.597333 128.597334a256 256 0 1 0 30.165333 30.165333zM469.333333 213.333333a213.333333 213.333333 0 1 1 0 426.666667 213.333333 213.333333 0 0 1 0-426.666667z" horiz-adv-x="1024" />
<glyph glyph-name="guanbi" unicode="&#59275;" d="M119.808 715.946667l60.330667 60.245333 724.053333-724.053333-60.330667-60.330667zM843.946667 776.192l60.245333-60.330667-724.053333-724.053333-60.330667 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="xiayige" unicode="&#59276;" d="M512 213.333333L170.666667 554.666667h682.666666z" horiz-adv-x="1024" />
<glyph glyph-name="xiala" unicode="&#59277;" d="M149.930667 451.669333l60.330666 60.330667 362.069334-362.069333L512 89.6zM813.738667 512l60.330666-60.330667L512 89.6l-60.330667 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenyanse" unicode="&#59278;" d="M549.546667 640l194.133333-533.333333h-45.354667l-77.653333 213.333333H421.632l-77.653333-213.333333H298.666667L492.757333 640h56.789334z m-28.416-46.634667L437.162667 362.666667h167.978666l-84.010666 230.698666z" horiz-adv-x="1024" />
<glyph glyph-name="shangyige" unicode="&#59279;" d="M512 554.666667l341.333333-341.333334H170.666667z" horiz-adv-x="1024" />
<glyph glyph-name="shujutoushi" unicode="&#59280;" d="M256 533.333333v-298.666666l256-149.333334 256 149.333334v298.666666L512 682.666667 256 533.333333zM725.333333 256l-213.333333-128-213.333333 128V512l213.333333 128 213.333333-128v-256z m-189.354666-40.021333a18.645333 18.645333 0 0 0-18.645334-18.645334 18.304 18.304 0 0 0-18.688 18.645334V360.533333l-130.645333 75.349334a18.645333 18.645333 0 0 0 4.565333 34.133333 18.304 18.304 0 0 0 14.08-2.005333l130.688-74.666667 129.578667 74.666667a18.304 18.304 0 0 0 25.386667-6.698667 18.645333 18.645333 0 0 0-6.784-25.386667l-129.536-74.666666v-145.237334z" horiz-adv-x="1024" />
<glyph glyph-name="tianchong" unicode="&#59281;" d="M730.24 333.824l-253.44-253.44-217.173333 217.258667 253.44 253.44 217.173333-217.258667z m-72.405333 0.042667L512.981333 478.72l-180.992-180.992 144.810667-144.853333 181.034667 181.034666zM520.533333 597.333333v-230.4H469.333333V546.176H392.533333v-179.626667H341.333333V597.333333zM699.733333 341.333333c48.768 0 88.32-37.802667 88.32-84.48 0-46.634667-39.552-84.48-88.32-84.48" horiz-adv-x="1024" />
<glyph glyph-name="zengjiaxiaoshuwei" unicode="&#59282;" d="M533.333333 106.666667m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM682.666667 341.333333a85.333333 85.333333 0 0 1-85.333334-85.333333v-85.333333a85.333333 85.333333 0 1 1 170.666667 0V256a85.333333 85.333333 0 0 1-85.333333 85.333333z m0-42.666666a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 1 0-85.333333 0V256a42.666667 42.666667 0 0 0 42.666667 42.666667zM367.829333 96.298667l90.538667 90.538666L367.786667 277.333333l-30.165334-30.165333 37.76-37.802667H256v-42.666666h121.898667l-40.234667-40.234667 30.165333-30.165333zM490.666667 682.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-85.333333a85.333333 85.333333 0 1 1 170.666667 0V597.333333a85.333333 85.333333 0 0 1-85.333333 85.333334z m0-42.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 1 0-85.333333 0V597.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM682.666667 682.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-85.333333a85.333333 85.333333 0 1 1 170.666667 0V597.333333a85.333333 85.333333 0 0 1-85.333333 85.333334z m0-42.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-85.333333 0V597.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM341.333333 448m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0Z" horiz-adv-x="1024" />
<glyph glyph-name="bianji2" unicode="&#59283;" d="M810.581333 382.634667V128a42.666667 42.666667 0 0 0-42.666666-42.666667H298.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667h234.624v-42.666667H320a21.333333 21.333333 0 0 1-21.333333-21.333333v-469.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h426.581333a21.333333 21.333333 0 0 1 21.333334 21.333333V384h0.042666a21.333333 21.333333 0 1 0 42.581334-1.365333z m-285.056 2.432l241.365334 241.365333a21.333333 21.333333 0 0 0 30.165333-30.165333l-241.365333-241.365334a21.333333 21.333333 0 0 0-30.165334 30.165334zM533.290667 640V682.666667a21.333333 21.333333 0 0 0 21.333333-21.333334c0-11.776-10.069333-21.333333-21.333333-21.333333z" horiz-adv-x="1024" />
<glyph glyph-name="jieping" unicode="&#59284;" d="M590.848 328.96l-265.386667 306.645333a28.245333 28.245333 0 0 0 3.2 40.149334 29.141333 29.141333 0 0 0 40.789334-3.242667l267.946666-309.674667a124.885333 124.885333 0 0 0 144.213334-34.474666 125.141333 125.141333 0 0 0-16.042667-176.256 125.141333 125.141333 0 0 0-176.341333 14.805333 125.013333 125.013333 0 0 0 1.621333 162.048z m40.149333-18.133333c-18.602667-15.701333-29.312-38.826667-29.312-63.189334 0-45.909333 37.461333-83.157333 83.754667-83.157333a83.413333 83.413333 0 0 1 83.712 83.157333 83.413333 83.413333 0 0 1-83.712 83.114667c-15.189333 0-29.44-4.010667-41.685333-11.008a28.458667 28.458667 0 0 0-12.757334-8.96v0.042667z m-150.698666 52.565333l-38.229334-44.16a29.653333 29.653333 0 0 0-0.768-0.810667 124.885333 124.885333 0 0 0-6.528-151.509333 125.141333 125.141333 0 0 0-176.341333-14.805333C205.226667 196.693333 198.101333 275.626667 242.346667 328.362667a124.928 124.928 0 0 0 156.416 28.544l38.528 44.501333c9.514667-17.237333 24.746667-30.634667 43.008-37.973333z m105.6 122.026667a85.632 85.632 0 0 1-43.818667 37.12l129.749333 150.016a29.141333 29.141333 0 0 0 40.789334 3.242666 28.245333 28.245333 0 0 0 3.2-40.149333l-129.92-150.186667z m-300.8-301.44c35.413333-29.738667 88.064-25.301333 117.546666 9.813333a83.413333 83.413333 0 0 1-10.666666 117.546667 83.456 83.456 0 0 1-117.589334-9.856 83.456 83.456 0 0 1 10.709334-117.504z" horiz-adv-x="1024" />
<glyph glyph-name="jianxiaoxiaoshuwei" unicode="&#59286;" d="M533.333333 448m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM341.333333 106.666667m-42.666666 0a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 1 1-85.333333 0ZM346.496 501.632L256 592.213333 346.496 682.666667l30.165333-30.165334-37.717333-37.802666h119.424v-42.666667H336.469333l40.192-40.234667-30.165333-30.165333zM682.666667 682.666667a85.333333 85.333333 0 0 1-85.333334-85.333334v-85.333333a85.333333 85.333333 0 1 1 170.666667 0V597.333333a85.333333 85.333333 0 0 1-85.333333 85.333334z m0-42.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-85.333333 0V597.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM490.666667 341.333333a85.333333 85.333333 0 0 1-85.333334-85.333333v-85.333333a85.333333 85.333333 0 1 1 170.666667 0v85.333333a85.333333 85.333333 0 0 1-85.333333 85.333333z m0-42.666666a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-85.333333 0v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM682.666667 341.333333a85.333333 85.333333 0 0 1-85.333334-85.333333v-85.333333a85.333333 85.333333 0 1 1 170.666667 0v85.333333a85.333333 85.333333 0 0 1-85.333333 85.333333z m0-42.666666a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-85.333333 0v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="caidan" unicode="&#59287;" d="M256 682.666667h192a42.666667 42.666667 0 0 0 42.666667-42.666667v-192a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333V469.333333a21.333333 21.333333 0 0 1 21.333333-21.333333H426.666667a21.333333 21.333333 0 0 1 21.333333 21.333333V618.666667A21.333333 21.333333 0 0 1 426.666667 640H277.333333z m298.666667 42.666667H768a42.666667 42.666667 0 0 0 42.666667-42.666667v-192a42.666667 42.666667 0 0 0-42.666667-42.666667h-192a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333V469.333333a21.333333 21.333333 0 0 1 21.333333-21.333333h149.333334a21.333333 21.333333 0 0 1 21.333333 21.333333V618.666667a21.333333 21.333333 0 0 1-21.333333 21.333333H597.333333z m-21.333333-277.333333H768a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-42.666667-42.666667h-192a42.666667 42.666667 0 0 0-42.666667 42.666667v192a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-149.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h149.333334a21.333333 21.333333 0 0 1 21.333333 21.333333V298.666667a21.333333 21.333333 0 0 1-21.333333 21.333333H597.333333z m-341.333333 42.666667h192a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667v192a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-149.333334a21.333333 21.333333 0 0 1 21.333333-21.333333H426.666667a21.333333 21.333333 0 0 1 21.333333 21.333333V298.666667a21.333333 21.333333 0 0 1-21.333333 21.333333H277.333333z" horiz-adv-x="1024" />
<glyph glyph-name="shujuku" unicode="&#59288;" d="M256 682.666667h512a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h469.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-469.333334zM256 490.666667h512a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h469.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-469.333334z m405.333334-21.333333h21.333333a21.333333 21.333333 0 1 0 0-42.666667H682.666667a21.333333 21.333333 0 1 0 0 42.666667zM256 298.666667h512a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h469.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-469.333334z m405.333334-21.333333h21.333333a21.333333 21.333333 0 1 0 0-42.666667H682.666667a21.333333 21.333333 0 1 0 0 42.666667z m0 384h21.333333a21.333333 21.333333 0 1 0 0-42.666667H682.666667a21.333333 21.333333 0 1 0 0 42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="wubiankuang" unicode="&#59289;" d="M384 85.333333v42.666667h42.666667v-42.666667zM554.666667 85.333333v42.666667h42.666666v-42.666667zM298.666667 85.333333v42.666667h42.666666v-42.666667zM469.333333 85.333333v42.666667h42.666667v-42.666667zM640 85.333333v42.666667h42.666667v-42.666667zM384 341.333333v42.666667h42.666667v-42.666667zM384 597.333333V640h42.666667v-42.666667zM554.666667 597.333333V640h42.666666v-42.666667zM298.666667 597.333333V640h42.666666v-42.666667zM469.333333 597.333333V640h42.666667v-42.666667zM640 597.333333V640h42.666667v-42.666667zM725.333333 597.333333V640h42.666667v-42.666667zM213.333333 597.333333V640h42.666667v-42.666667zM554.666667 341.333333v42.666667h42.666666v-42.666667zM298.666667 341.333333v42.666667h42.666666v-42.666667zM469.333333 341.333333v42.666667h42.666667v-42.666667zM640 341.333333v42.666667h42.666667v-42.666667zM725.333333 85.333333v42.666667h42.666667v-42.666667zM213.333333 85.333333v42.666667h42.666667v-42.666667zM725.333333 256v42.666667h42.666667v-42.666667zM213.333333 256v42.666667h42.666667v-42.666667zM725.333333 426.666667v42.666666h42.666667v-42.666666zM213.333333 426.666667v42.666666h42.666667v-42.666666zM725.333333 170.666667v42.666666h42.666667v-42.666666zM213.333333 170.666667v42.666666h42.666667v-42.666666zM725.333333 341.333333v42.666667h42.666667v-42.666667zM213.333333 341.333333v42.666667h42.666667v-42.666667zM725.333333 512V554.666667h42.666667v-42.666667zM213.333333 512V554.666667h42.666667v-42.666667zM469.333333 256v42.666667h42.666667v-42.666667zM469.333333 426.666667v42.666666h42.666667v-42.666666zM469.333333 170.666667v42.666666h42.666667v-42.666666zM469.333333 341.333333v42.666667h42.666667v-42.666667zM469.333333 512V554.666667h42.666667v-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="bianji" unicode="&#59290;" d="M642.56 532.266667l-170.88-170.88 37.76-22.613334 22.613333-37.717333 170.88 170.88-60.373333 60.330667z m30.208 30.165333l60.330667-60.330667 15.104 15.061334a21.333333 21.333333 0 0 1 0 30.165333l-30.165334 30.165333a21.333333 21.333333 0 0 1-30.165333 0l-15.104-15.104v0.042667z m-231.253333-231.253333l-10.112-10.112v-60.330667h60.330666l10.112 10.112-22.613333 37.717333-37.717333 22.613334z m291.584 291.584l60.373333-60.330667a42.666667 42.666667 0 0 0 0-60.330667l-284.032-284.032H388.736V338.773333l284.032 283.989334a42.666667 42.666667 0 0 0 60.330667 0zM554.666667 661.333333a21.333333 21.333333 0 0 0-21.333334-21.333333h-256c-11.818667 0-21.333333-9.472-21.333333-21.162667v-469.674666c0-11.434667 9.557333-21.162667 21.333333-21.162667h469.333334c11.818667 0 21.333333 9.472 21.333333 21.162667V320a21.333333 21.333333 0 1 0 42.666667 0v-191.872c0-23.637333-19.2-42.794667-42.453334-42.794667H255.786667A42.624 42.624 0 0 0 213.333333 128.085333V639.872C213.333333 663.509333 232.533333 682.666667 255.829333 682.666667H533.333333a21.333333 21.333333 0 0 0 21.333334-21.333334z" horiz-adv-x="1024" />
<glyph glyph-name="qingchuyangshi" unicode="&#59291;" d="M214.016 173.568h593.92v-42.410667H214.016v42.410667z m578.048 312.106667l-180.693333 181.077333A53.376 53.376 0 0 1 573.738667 682.666667a45.653333 45.653333 0 0 1-32.64-13.226667l-313.941334-314.965333c-18.56-18.602667-17.322667-50.261333 2.688-70.4l68.010667-68.096h298.24l198.698667 199.338666c18.56 18.602667 17.322667 50.261333-2.730667 70.357334z m-213.546667-227.242667H315.434667L259.84 314.112c-3.968 4.010667-4.053333 9.088-2.730667 10.453333L430.08 497.92l193.92-193.92-45.44-45.568z" horiz-adv-x="1024" />
<glyph glyph-name="shanchu" unicode="&#59292;" d="M320 554.666667v-426.581334A42.666667 42.666667 0 0 1 362.581333 85.333333h298.88a42.666667 42.666667 0 0 1 42.538667 42.794667V554.666667h42.666667a21.333333 21.333333 0 1 1 0 42.666666h-469.333334a21.333333 21.333333 0 0 1 0-42.666666h42.666667zM426.666667 661.333333c0 11.776 9.642667 21.333333 21.248 21.333334h128.170666c11.690667 0 21.248-9.472 21.248-21.333334 0-11.776-9.642667-21.333333-21.248-21.333333h-128.170666A21.248 21.248 0 0 0 426.666667 661.333333zM362.666667 533.504A21.333333 21.333333 0 0 0 384.128 554.666667h255.701333c11.904 0 21.504-9.728 21.504-21.162667v-384.341333a21.333333 21.333333 0 0 0-21.504-21.162667H384.128c-11.733333 0-21.290667 9.386667-21.461333 21.162667V533.504z m42.666666-42.837333a21.290667 21.290667 0 1 0 42.666667 0v-298.666667a21.290667 21.290667 0 1 0-42.666667 0v298.666667z m85.333334 0a21.290667 21.290667 0 1 0 42.666666 0v-298.666667a21.290667 21.290667 0 1 0-42.666666 0v298.666667z m85.333333 0a21.290667 21.290667 0 1 0 42.666667 0v-298.666667a21.290667 21.290667 0 1 0-42.666667 0v298.666667z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenjuzhongduiqi" unicode="&#59293;" d="M234.666667 597.333333h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 1 0 0 42.666666zM341.333333 469.333333h341.333334a21.333333 21.333333 0 1 0 0-42.666666H341.333333a21.333333 21.333333 0 0 0 0 42.666666z m-106.666666-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666zM341.333333 213.333333h341.333334a21.333333 21.333333 0 1 0 0-42.666666H341.333333a21.333333 21.333333 0 0 0 0 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="dayin" unicode="&#59294;" d="M743.125333 554.666667c35.669333 0 64.384-28.885333 67.285334-65.024l0.256-6.101334V213.333333h-149.76v42.666667H768V483.541333c0 14.592-9.514667 26.154667-21.333333 28.16L743.168 512H280.874667c-12.16 0-22.784-10.24-24.576-24.149333l-0.298667-4.266667V256h127.36v-42.666667H213.333333V483.541333c0 36.906667 26.794667 67.712 61.653334 70.826667L280.874667 554.666667h462.250666zM682.666667 682.666667H341.333333v-170.666667h341.333334V682.666667z m-42.666667-42.666667v-85.333333H384V640h256zM682.666667 341.333333v-256H341.333333v256h341.333334z m-42.666667-42.666666H384v-170.666667h256v170.666667zM341.333333 469.333333h128v-42.666666H341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenfenge" unicode="&#59295;" d="M544.896 506.282667h110.762667v-46.933334c6.698667-6.613333 15.658667-6.613333 22.357333 0l84.949333 55.125334c6.698667 4.437333 6.698667 13.226667 0 19.84l-84.906666 57.386666c-6.741333 6.613333-15.701333 6.613333-22.4 0v-41.258666h-133.12l-89.429334-154.453334H343.722667v-0.128h-22.698667c-11.178667 0-22.357333-11.050667-22.357333-22.058666 0-11.050667 11.178667-22.058667 22.357333-22.058667h134.101333l-0.085333 0.128h0.426667l89.386666 154.453333h0.042667z m133.12-198.954667a15.061333 15.061333 0 0 1-22.314667 0v-43.690667h-66.133333l-67.029333 110.293334-22.357334-44.117334s62.592-103.68 67.072-110.293333h88.448V174.933333a15.061333 15.061333 0 0 1 22.314667 0l84.949333 55.168c6.698667 4.437333 6.698667 13.226667 0 19.84l-84.906666 57.386667h-0.042667z" horiz-adv-x="1024" />
<glyph glyph-name="hanshu" unicode="&#59296;" d="M771.072 504.746667a6.698667 6.698667 0 0 1-0.512 9.514666 6.997333 6.997333 0 0 1-4.48 1.749334h-61.354667c-1.962667 0-3.84-0.853333-5.12-2.346667l-103.893333-122.709333a6.698667 6.698667 0 0 0-11.392 1.621333l-53.674667 119.381333a6.656 6.656 0 0 1-6.144 4.010667H381.866667l0.853333 3.968 6.741333 35.712c8.874667 46.933333 32.085333 68.864 72.533334 68.864 15.658667 0 29.994667-1.450667 41.258666-4.010667l11.861334 56.490667a197.888 197.888 0 0 1-46.464 5.12c-87.296 0-132.224-37.418667-148.650667-124.458667l-7.978667-41.813333H229.632a6.698667 6.698667 0 0 1-6.613333-5.376l-9.130667-43.818667a6.826667 6.826667 0 0 1 6.570667-8.106666h79.786666l-75.264-363.52a6.826667 6.826667 0 0 1 6.570667-8.234667H287.573333c3.242667 0 5.973333 2.346667 6.570667 5.418667l75.861333 366.165333h114.773334l57.685333-117.546667a6.570667 6.570667 0 0 0-1.024-7.381333l-152.746667-171.690667a6.826667 6.826667 0 0 1 5.12-11.264h61.44c2.005333 0 3.882667 0.853333 5.162667 2.389334l104.576 123.989333a6.826667 6.826667 0 0 0 11.392-1.493333l55.594667-120.661334a6.741333 6.741333 0 0 1 6.186666-3.968h54.613334a6.784 6.784 0 0 1 6.101333 9.770667L618.325333 328.533333a6.698667 6.698667 0 0 0 1.066667 7.466667l151.722667 168.661333-0.042667 0.042667z" horiz-adv-x="1024" />
<glyph glyph-name="jiangxu" unicode="&#59297;" d="M430.848 229.802667H366.592V659.925333a6.656 6.656 0 0 1-6.741333 6.528h-47.36a6.656 6.656 0 0 1-6.741334-6.528v-430.122666H241.493333c-5.674667 0-8.874667-6.314667-5.333333-10.538667l94.72-115.2a6.912 6.912 0 0 1 10.624 0l94.72 115.2c3.413333 4.224 0.298667 10.538667-5.376 10.538667zM582.442667 89.301333l20.992 61.098667h103.68l21.205333-61.098667h43.690667L672.64 362.666667h-34.688l-99.370667-273.365334h43.861334z m112.896 97.877334h-79.872l39.552 119.424h0.768l39.552-119.466667zM742.570667 409.301333v39.168h-124.288l124.288 203.093334V682.666667h-169.685334v-36.949334h119.04l-123.904-201.941333v-34.474667z" horiz-adv-x="1024" />
<glyph glyph-name="dingbuduiqi" unicode="&#59298;" d="M298.666667 512h426.666666v-42.666667H298.666667zM416 368.170667l90.496 90.496 90.538667-90.496-30.165334-30.165334-37.802666 37.717334v-290.090667h-42.666667v292.565333l-40.234667-40.192-30.165333 30.165334z" horiz-adv-x="1024" />
<glyph glyph-name="tupian" unicode="&#59299;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-263.381334l-233.984-190.890666-118.613333 98.218666L256 191.36V128h512v291.285333zM768 640H256v-392.704l159.146667 134.954667 119.04-98.602667L768 474.325333V640zM384 554.666667a42.666667 42.666667 0 1 0 0-85.333334 42.666667 42.666667 0 0 0 0 85.333334z" horiz-adv-x="1024" />
<glyph glyph-name="xiangxia90" unicode="&#59300;" d="M789.333333 367.786667l-213.333333-77.653334v-0.64l-1.621333 0.042667L426.666667 235.776v45.354667l106.666666 38.826666V472.362667l-106.666666 38.826666V556.544l147.498666-53.674667 1.834667-0.042666v-0.64l213.333333-77.610667v-56.789333z m-46.634666 28.416L576 456.874667v-121.386667l166.698667 60.714667zM384 208.170667l-90.496-90.538667-90.538667 90.538667 30.165334 30.165333 37.802666-37.76V661.333333h42.666667v-463.232l40.234667 40.234667 30.165333-30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="shupaiwenzi" unicode="&#59301;" d="M636.757333 597.333333l77.653334-213.333333h0.64l-0.042667-1.621333 53.76-147.712h-45.354667l-38.826666 106.666666h-152.405334l-38.826666-106.666666H448l53.674667 147.498666 0.042666 1.834667h0.64l77.610667 213.333333h56.789333z m-28.416-46.634666L547.669333 384h121.386667l-60.714667 166.698667zM394.368 197.504L303.786667 106.965333 213.333333 197.546667l30.165334 30.165333 37.802666-37.76V650.666667h42.666667v-463.232l40.234667 40.234666 30.165333-30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="quanjiabiankuang" unicode="&#59302;" d="M213.333333 85.333333V640h42.666667v-554.666667zM725.333333 85.333333V640h42.666667v-554.666667zM469.333333 85.333333V640h42.666667v-554.666667zM213.333333 640h554.666667v-42.666667H213.333333zM213.333333 384h554.666667v-42.666667H213.333333zM213.333333 128h554.666667v-42.666667H213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="shengxu" unicode="&#59303;" d="M430.848 538.24H366.592v-430.165333a6.656 6.656 0 0 0-6.741333-6.485334h-47.36a6.656 6.656 0 0 0-6.741334 6.485334V538.24H241.493333c-5.674667 0-8.874667 6.314667-5.333333 10.538667l94.72 115.2a6.912 6.912 0 0 0 10.624 0l94.72-115.2c3.413333-4.224 0.298667-10.538667-5.376-10.538667zM582.442667 409.301333l20.992 61.098667h103.68l21.205333-61.098667h43.690667L672.64 682.666667h-34.688l-99.370667-273.365334h43.861334z m112.896 97.877334h-79.872l39.552 119.424h0.768l39.552-119.466667zM742.570667 89.301333v39.168h-124.288l124.288 203.093334V362.666667h-169.685334v-36.949334h119.04l-123.904-201.941333v-34.474667z" horiz-adv-x="1024" />
<glyph glyph-name="caijian" unicode="&#59304;" d="M341.333333 682.666667h42.666667v-469.333334H341.333333zM810.666667 256v-42.666667H341.333333v42.666667zM682.666667 85.333333h-42.666667V554.666667h42.666667zM213.333333 512V554.666667h469.333334v-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="jine" unicode="&#59305;" d="M658.816 640l34.986667-24.490667-124.629334-177.92h119.04v-42.666666h-149.333333v-85.333334h149.333333v-42.666666h-149.333333v-128h-42.666667v128h-149.333333v42.666666h149.333333v85.333334h-149.333333v42.666666h119.04L341.333333 615.509333 376.32 640l141.226667-201.728L658.816 640z" horiz-adv-x="1024" />
<glyph glyph-name="caidan1" unicode="&#59306;" d="M256 256h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667zM682.666667 682.666667h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667h-85.333333a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667zM469.333333 256h85.333334a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666666-42.666667h-85.333334a42.666667 42.666667 0 0 0-42.666666 42.666667v85.333333a42.666667 42.666667 0 0 0 42.666666 42.666667z m21.333334-42.666667a21.333333 21.333333 0 0 1-21.333334-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333334-21.333333h42.666666a21.333333 21.333333 0 0 1 21.333334 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333334 21.333333h-42.666666zM469.333333 682.666667h85.333334a42.666667 42.666667 0 0 0 42.666666-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666666-42.666667h-85.333334a42.666667 42.666667 0 0 0-42.666666 42.666667V640a42.666667 42.666667 0 0 0 42.666666 42.666667z m21.333334-42.666667a21.333333 21.333333 0 0 1-21.333334-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333334-21.333333h42.666666a21.333333 21.333333 0 0 1 21.333334 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333334 21.333333h-42.666666z m192-384h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667h-85.333333a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667zM469.333333 469.333333h85.333334a42.666667 42.666667 0 0 0 42.666666-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666h-85.333334a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334a42.666667 42.666667 0 0 0 42.666666 42.666666z m21.333334-42.666666a21.333333 21.333333 0 0 1-21.333334-21.333334v-42.666666a21.333333 21.333333 0 0 1 21.333334-21.333334h42.666666a21.333333 21.333333 0 0 1 21.333334 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333334 21.333334h-42.666666zM256 469.333333h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666H256a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334a42.666667 42.666667 0 0 0 42.666667 42.666666z m426.666667 0h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-85.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334a42.666667 42.666667 0 0 0 42.666667 42.666666z m21.333333-42.666666a21.333333 21.333333 0 0 1-21.333333-21.333334v-42.666666a21.333333 21.333333 0 0 1 21.333333-21.333334h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333333 21.333334h-42.666667z m-426.666667 0a21.333333 21.333333 0 0 1-21.333333-21.333334v-42.666666a21.333333 21.333333 0 0 1 21.333333-21.333334h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333333 21.333334h-42.666667zM256 682.666667h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m21.333333-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v42.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="quxiaohebing" unicode="&#59307;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM533.333333 682.666667v-170.666667h-42.666666V682.666667zM405.333333 469.333333v-213.333333h-42.666666v213.333333zM533.333333 490.666667v-213.333334h-42.666666v213.333334zM661.333333 490.666667v-213.333334h-42.666666v213.333334zM533.333333 298.666667v-170.666667h-42.666666v170.666667zM810.666667 512v-256H213.333333V512h597.333334z m-42.666667-42.666667H256v-170.666666h512v170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenxiahuaxian" unicode="&#59308;" d="M362.666667 640v-298.666667a149.333333 149.333333 0 0 1 298.453333-8.192L661.333333 341.333333V640h42.666667v-298.666667a192 192 0 0 0-383.786667-9.045333L320 341.333333V640h42.666667zM256 128m21.333333 0l469.333334 0q21.333333 0 21.333333-21.333333l0 0q0-21.333333-21.333333-21.333334l-469.333334 0q-21.333333 0-21.333333 21.333334l0 0q0 21.333333 21.333333 21.333333ZM256 640m21.333333 0l128 0q21.333333 0 21.333334-21.333333l0 0q0-21.333333-21.333334-21.333334l-128 0q-21.333333 0-21.333333 21.333334l0 0q0 21.333333 21.333333 21.333333ZM597.333333 640m21.333334 0l128 0q21.333333 0 21.333333-21.333333l0 0q0-21.333333-21.333333-21.333334l-128 0q-21.333333 0-21.333334 21.333334l0 0q0 21.333333 21.333334 21.333333Z" horiz-adv-x="1024" />
<glyph glyph-name="shangbiankuang" unicode="&#59309;" d="M213.333333 640h554.666667v-42.666667H213.333333zM213.333333 469.333333h42.666667v-42.666666H213.333333zM213.333333 298.666667h42.666667v-42.666667H213.333333zM213.333333 554.666667h42.666667v-42.666667H213.333333zM213.333333 384h42.666667v-42.666667H213.333333zM213.333333 213.333333h42.666667v-42.666666H213.333333zM469.333333 469.333333h42.666667v-42.666666h-42.666667zM725.333333 469.333333h42.666667v-42.666666h-42.666667zM725.333333 298.666667h42.666667v-42.666667h-42.666667zM725.333333 554.666667h42.666667v-42.666667h-42.666667zM725.333333 384h42.666667v-42.666667h-42.666667zM725.333333 213.333333h42.666667v-42.666666h-42.666667zM725.333333 128h42.666667v-42.666667h-42.666667zM469.333333 298.666667h42.666667v-42.666667h-42.666667zM469.333333 554.666667h42.666667v-42.666667h-42.666667zM469.333333 384h42.666667v-42.666667h-42.666667zM469.333333 213.333333h42.666667v-42.666666h-42.666667zM213.333333 128h42.666667v-42.666667H213.333333zM384 128h42.666667v-42.666667H384zM554.666667 128h42.666666v-42.666667h-42.666666zM298.666667 128h42.666666v-42.666667H298.666667zM469.333333 128h42.666667v-42.666667h-42.666667zM640 128h42.666667v-42.666667h-42.666667zM384 384h42.666667v-42.666667H384zM554.666667 384h42.666666v-42.666667h-42.666666zM298.666667 384h42.666666v-42.666667H298.666667zM469.333333 384h42.666667v-42.666667h-42.666667zM640 384h42.666667v-42.666667h-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="dingwei" unicode="&#59310;" d="M618.666667 172.416V234.666667a21.333333 21.333333 0 1 0 42.666666 0v-62.250667a128.128 128.128 0 0 1 104.917334 104.917333H704a21.333333 21.333333 0 1 0 0 42.666667h62.250667a128.128 128.128 0 0 1-104.917334 104.874667V362.666667a21.333333 21.333333 0 1 0-42.666666 0v62.208a128.085333 128.085333 0 0 1-104.874667-104.874667H576a21.333333 21.333333 0 0 0 0-42.666667h-62.208a128.128 128.128 0 0 1 104.874667-104.917333z m149.333333 296.96a213.12 213.12 0 0 1-42.666667 24.874667V618.666667a21.333333 21.333333 0 0 1-21.333333 21.333333h-426.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-341.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h153.6c2.986667-14.848 7.594667-29.098667 13.482667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667h469.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666667zM640 128a170.666667 170.666667 0 1 0 0 341.333333 170.666667 170.666667 0 0 0 0-341.333333z" horiz-adv-x="1024" />
<glyph glyph-name="sizhoujiabiankuang" unicode="&#59311;" d="M213.333333 85.333333V640h42.666667v-554.666667zM725.333333 85.333333V640h42.666667v-554.666667zM213.333333 640h554.666667v-42.666667H213.333333zM213.333333 128h554.666667v-42.666667H213.333333zM384 341.333333v42.666667h42.666667v-42.666667zM554.666667 341.333333v42.666667h42.666666v-42.666667zM298.666667 341.333333v42.666667h42.666666v-42.666667zM469.333333 341.333333v42.666667h42.666667v-42.666667zM640 341.333333v42.666667h42.666667v-42.666667zM469.333333 256v42.666667h42.666667v-42.666667zM469.333333 426.666667v42.666666h42.666667v-42.666666zM469.333333 170.666667v42.666666h42.666667v-42.666666zM469.333333 341.333333v42.666667h42.666667v-42.666667zM469.333333 512V554.666667h42.666667v-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="cebianlanshouqi" unicode="&#59312;" d="M256 576a21.333333 21.333333 0 0 0 21.333333 21.333333h469.333334a21.333333 21.333333 0 1 0 0-42.666666h-469.333334a21.290667 21.290667 0 0 0-21.333333 21.333333zM256 384c0 11.776 9.6 21.333333 21.461333 21.333333h277.077334a21.333333 21.333333 0 1 0 0-42.666666H277.504A21.333333 21.333333 0 0 0 256 384z m0-192a21.333333 21.333333 0 0 0 21.333333 21.333333h469.333334a21.333333 21.333333 0 1 0 0-42.666666h-469.333334a21.290667 21.290667 0 0 0-21.333333 21.333333z m368.896 283.562667a21.333333 21.333333 0 0 0 30.165333 30.165333l106.666667-106.666667a21.333333 21.333333 0 0 0 0-30.165333l-106.666667-106.666667a21.333333 21.333333 0 0 0-30.165333 30.165334L716.501333 384l-91.562666 91.605333z" horiz-adv-x="1024" />
<glyph glyph-name="hebing" unicode="&#59313;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM389.162667 469.333333l90.538666-90.496-90.538666-90.538666-30.165334 30.165333 37.802667 37.845333-119.466667-0.042666v42.666666l121.856 0.042667-40.192 40.192 30.165334 30.165333zM645.162667 469.333333L554.666667 378.837333l90.496-90.538666 30.165333 30.165333-37.76 37.845333 119.466667-0.042666v42.666666l-121.856 0.042667 40.149333 40.192-30.165333 30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="xiangshangqingxie" unicode="&#59314;" d="M290.944 606.634667l205.738667-95.914667 0.469333 0.426667 1.109333-1.152 142.506667-66.432-32.128-32.085334-102.826667 47.957334-107.818666-107.733334 48-102.912-32.085334-32.042666-66.346666 142.250666-1.28 1.28 0.469333 0.512-96 205.696 40.192 40.149334z m12.885333-53.034667l74.965334-160.810667 85.845333 85.845334L303.786667 553.6zM690.432 432.896h128v-128h-42.666667v53.418667l-325.845333-325.802667-30.165333 30.165333 327.552 327.552h-56.874667v42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="shuipingduiqi" unicode="&#59315;" d="M725.333333 362.666667H298.666667v42.666666h426.666666zM426.666667 261.504l90.496 90.496 90.538666-90.496-30.165333-30.165333-39.936 39.850666v-121.557333h-42.666667v119.765333l-38.101333-38.058666-30.165333 30.165333zM426.666667 506.837333l90.496-90.538666 90.538666 90.538666-30.165333 30.165334-39.936-39.893334V618.666667h-42.666667v-119.765334l-38.101333 38.101334-30.165333-30.165334z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenshanchuxian" unicode="&#59316;" d="M298.666667 640h426.666666v-42.666667H298.666667zM533.290667 341.333333l0.042666-192h-42.666666l-0.042667 192h42.666667z m0.042666 277.333334l-0.042666-234.666667h-42.666667l0.042667 234.666667h42.666666zM320 640v-85.333333h-42.666667V640zM746.666667 640v-85.333333h-42.666667V640zM256 426.666667h512v-42.666667H256zM426.666667 170.666667h170.666666v-42.666667h-170.666666z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenyouduiqi" unicode="&#59317;" d="M234.666667 597.333333h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 1 0 0 42.666666z m213.333333-128h341.333333a21.333333 21.333333 0 1 0 0-42.666666h-341.333333a21.333333 21.333333 0 0 0 0 42.666666z m-213.333333-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666z m213.333333-128h341.333333a21.333333 21.333333 0 1 0 0-42.666666h-341.333333a21.333333 21.333333 0 0 0 0 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="qianjin" unicode="&#59318;" d="M287.018667 476.672h310.997333v-42.666667H286.72l84.48-84.437333a21.333333 21.333333 0 1 0-30.208-30.165333l-120.746667 120.704a21.248 21.248 0 0 0 0 30.165333l120.746667 120.661333a21.333333 21.333333 0 0 0 30.165333-30.165333L287.018667 476.672z m524.330666-213.333333a213.333333 213.333333 0 0 1-213.333333 213.333333v-42.666667a170.666667 170.666667 0 0 0 170.666667-170.666666h42.666666z m0 0h-42.666666v-64a21.333333 21.333333 0 1 1 42.666666 0v64z" horiz-adv-x="1024" />
<glyph glyph-name="tubiao" unicode="&#59319;" d="M256 682.666667H213.333333v-597.333334h597.333334v42.666667H256zM490.666667 552.533333V341.333333h185.6c-19.2-72.533333-85.333333-128-164.266667-128-93.866667 0-170.666667 76.8-170.666667 170.666667 0 87.466667 66.133333 157.866667 149.333334 168.533333M512 597.333333c-117.333333 0-213.333333-96-213.333333-213.333333s96-213.333333 213.333333-213.333333 213.333333 96 213.333333 213.333333h-192V597.333333H512zM618.666667 635.733333c83.2-14.933333 134.4-74.666667 147.2-166.4H618.666667V635.733333m-42.666667 46.933334v-256H810.666667c0 149.333333-85.333333 256-234.666667 256z" horiz-adv-x="1024" />
<glyph glyph-name="youbiankuang" unicode="&#59320;" d="M768 640v-554.666667h-42.666667V640zM597.333333 640v-42.666667h-42.666666V640zM426.666667 640v-42.666667H384V640zM682.666667 640v-42.666667h-42.666667V640zM512 640v-42.666667h-42.666667V640zM341.333333 640v-42.666667H298.666667V640zM597.333333 384v-42.666667h-42.666666v42.666667zM597.333333 128v-42.666667h-42.666666v42.666667zM426.666667 128v-42.666667H384v42.666667zM682.666667 128v-42.666667h-42.666667v42.666667zM512 128v-42.666667h-42.666667v42.666667zM341.333333 128v-42.666667H298.666667v42.666667zM256 128v-42.666667H213.333333v42.666667zM426.666667 384v-42.666667H384v42.666667zM682.666667 384v-42.666667h-42.666667v42.666667zM512 384v-42.666667h-42.666667v42.666667zM341.333333 384v-42.666667H298.666667v42.666667zM256 640v-42.666667H213.333333V640zM256 469.333333v-42.666666H213.333333v42.666666zM256 298.666667v-42.666667H213.333333v42.666667zM256 554.666667v-42.666667H213.333333V554.666667zM256 384v-42.666667H213.333333v42.666667zM256 213.333333v-42.666666H213.333333v42.666666zM512 469.333333v-42.666666h-42.666667v42.666666zM512 298.666667v-42.666667h-42.666667v42.666667zM512 554.666667v-42.666667h-42.666667V554.666667zM512 384v-42.666667h-42.666667v42.666667zM512 213.333333v-42.666666h-42.666667v42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="baifenhao" unicode="&#59321;" d="M653.525333 682.666667l36.949334-21.333334-320-554.24-36.949334 21.333334L653.525333 682.666667zM682.666667 426.666667c71.68 0 128-67.626667 128-149.333334S754.346667 128 682.666667 128s-128 67.626667-128 149.333333 56.32 149.333333 128 149.333334z m0-42.666667c-46.165333 0-85.333333-46.976-85.333334-106.666667s39.168-106.666667 85.333334-106.666666c46.165333 0 85.333333 46.976 85.333333 106.666666s-39.168 106.666667-85.333333 106.666667zM341.333333 661.333333c71.68 0 128-67.626667 128-149.333333s-56.32-149.333333-128-149.333333S213.333333 430.293333 213.333333 512s56.32 149.333333 128 149.333333z m0-42.666666C295.168 618.666667 256 571.690667 256 512s39.168-106.666667 85.333333-106.666667c46.165333 0 85.333333 46.976 85.333334 106.666667s-39.168 106.666667-85.333334 106.666667z" horiz-adv-x="1024" />
<glyph glyph-name="geshishua" unicode="&#59322;" d="M725.333333 682.666667v-85.333334h85.333334v-234.666666h-298.666667V298.666667h21.333333v-213.333334h-85.333333v213.333334h21.333333v106.666666h298.666667V554.666667h-42.666667v-85.333334H213.333333V682.666667h512z m-42.666666-42.666667H256v-128h426.666667V640z" horiz-adv-x="1024" />
<glyph glyph-name="baocun" unicode="&#59323;" d="M341.333333 640H277.333333a21.333333 21.333333 0 0 1-21.333333-21.333333v-469.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h469.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v469.333334a21.333333 21.333333 0 0 1-21.333333 21.333333H682.666667v-213.333333a42.666667 42.666667 0 0 0-42.666667-42.666667H384a42.666667 42.666667 0 0 0-42.666667 42.666667V640zM256 682.666667h512a42.666667 42.666667 0 0 0 42.666667-42.666667v-512a42.666667 42.666667 0 0 0-42.666667-42.666667H256a42.666667 42.666667 0 0 0-42.666667 42.666667V640a42.666667 42.666667 0 0 0 42.666667 42.666667z m128-42.666667v-192a21.333333 21.333333 0 0 1 21.333333-21.333333h213.333334a21.333333 21.333333 0 0 1 21.333333 21.333333V640H384z m192-42.666667a21.333333 21.333333 0 0 0 21.333333-21.333333v-85.333333a21.333333 21.333333 0 0 0-42.666666 0v85.333333a21.333333 21.333333 0 0 0 21.333333 21.333333z" horiz-adv-x="1024" />
<glyph glyph-name="shujuyanzheng" unicode="&#59324;" d="M764.330667 303.829333l30.165333-30.165333L734.165333 213.333333l60.330667-60.330666-30.165333-30.165334-60.330667 60.330667-60.330667-60.330667-30.165333 30.165334L673.834667 213.333333l-60.330667 60.330667 30.165333 30.165333 60.330667-60.330666 60.330667 60.330666zM725.333333 384v-42.666667H256v-128h256v-42.666666H213.333333v213.333333h512z m47.829334 209.664l30.165333-30.165333L682.666667 442.88l-30.165334-30.165333-90.496 90.453333 30.165334 30.208 60.330666-60.330667 120.661334 120.661334zM725.333333 640v-42.666667H256v-128h256v-42.666666H213.333333V640h512z" horiz-adv-x="1024" />
<glyph glyph-name="jieduan" unicode="&#59325;" d="M767.829333 682.666667h42.496v-597.333334h-42.496zM767.146667 342.784h-384v42.496h384v-42.496zM213.333333 682.666667h84.992v-597.333334H213.333333V682.666667z" horiz-adv-x="1024" />
<glyph glyph-name="geshitiaojian" unicode="&#59326;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-320h-106.666667V128H768v234.666667z m-405.376 0h-106.666667V128h106.666667v234.666667z m256.042667-86.784L445.482667 128H618.666667v147.882667z m0 162.346666l-213.376-179.968v-108.885333l213.376 179.072v109.781333z m0 163.669334l-213.333334-179.029334v-108.885333l213.333334 179.072V601.898667zM768 640h-103.936l-2.730667-2.304V405.333333H768V640zM362.666667 640H256v-234.666667h106.666667V640z m235.008 0H405.333333v-161.408L597.674667 640z" horiz-adv-x="1024" />
<glyph glyph-name="zidonghuanhang" unicode="&#59327;" d="M213.333333 682.666667h85.12v-597.333334H213.333333V682.666667z m225.450667-477.44l25.557333 21.333333-72.362666 63.786667 72.362666 63.872-25.557333 21.248-93.610667-80.853334h4.266667-4.266667l93.610667-89.386666zM768 682.666667h42.581333v-597.333334H768zM540.928 528.725333H391.978667v-42.581333h148.949333c59.605333 0 106.410667-38.314667 106.410667-85.12s-46.805333-85.12-106.410667-85.12H391.978667v-42.581333h148.949333c85.12 0 157.482667 55.338667 157.482667 127.701333s-72.362667 127.701333-157.44 127.701333z" horiz-adv-x="1024" />
<glyph glyph-name="cebianlanzhankai" unicode="&#59328;" d="M256 576a21.333333 21.333333 0 0 0 21.333333 21.333333h469.333334a21.333333 21.333333 0 1 0 0-42.666666h-469.333334a21.290667 21.290667 0 0 0-21.333333 21.333333z m192-192c0 11.776 9.557333 21.333333 21.461333 21.333333h277.034667a21.333333 21.333333 0 1 0 0-42.666666h-277.034667a21.333333 21.333333 0 0 0-21.461333 21.333333zM256 192a21.333333 21.333333 0 0 0 21.333333 21.333333h469.333334a21.333333 21.333333 0 1 0 0-42.666666h-469.333334a21.290667 21.290667 0 0 0-21.333333 21.333333z m143.061333 283.562667L307.541333 384l91.605334-91.562667a21.333333 21.333333 0 0 0-30.165334-30.165333l-106.666666 106.666667a21.333333 21.333333 0 0 0 0 30.165333l106.666666 106.666667a21.333333 21.333333 0 0 0 30.165334-30.165334z" horiz-adv-x="1024" />
<glyph glyph-name="shaixuan2" unicode="&#59329;" d="M736 682.666667H328.533333C288 682.666667 256 650.666667 256 610.133333c0-17.066667 6.4-34.133333 17.066667-46.933333 0-2.133333 2.133333-2.133333 2.133333-4.266667l160-160v-168.533333c0-6.4 2.133333-10.666667 6.4-14.933333l145.066667-123.733334c4.266667-2.133333 8.533333-4.266667 12.8-4.266666 6.4 0 10.666667 2.133333 14.933333 6.4 4.266667 4.266667 4.266667 10.666667 4.266667 14.933333V392.533333l170.666666 166.4 2.133334 2.133334c10.666667 12.8 17.066667 29.866667 17.066666 46.933333 0 42.666667-32 74.666667-72.533333 74.666667z m23.466667-93.866667s-2.133333-2.133333 0 0l-172.8-172.8c-4.266667-4.266667-6.4-8.533333-6.4-14.933333v-251.733334l-104.533334 87.466667V405.333333c0 6.4-2.133333 10.666667-6.4 14.933334l-162.133333 166.4-2.133333 2.133333c-6.4 6.4-8.533333 12.8-8.533334 21.333333 0 17.066667 14.933333 32 32 32h407.466667c17.066667 0 32-14.933333 32-32 0-8.533333-4.266667-14.933333-8.533333-21.333333z" horiz-adv-x="1024" />
<glyph glyph-name="xiangxiaqingxie" unicode="&#59330;" d="M755.968 583.722667l-95.914667-205.738667 0.426667-0.469333-1.152-1.109334-66.432-142.506666-32.085333 32.128 47.957333 102.826666-107.733333 107.818667-102.912-48-32.042667 32.085333 142.250667 66.346667 1.28 1.28 0.512-0.469333 205.696 96 40.149333-40.192z m-53.034667-12.885334l-160.810666-74.965333 85.845333-85.845333 74.965333 160.810666zM582.229333 184.234667v-128h-128v42.666666h53.418667l-325.802667 325.845334 30.165334 30.165333 327.552-327.552v56.874667h42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="yichu" unicode="&#59331;" d="M256 682.666667h85.333333v-597.333334H256zM711.466667 253.312l-26.154667 26.154667 89.6 85.845333H256v37.376h518.954667l-89.6 85.845333 26.112 26.112L842.154667 384zM573.354667 682.666667h42.666666v-242.688h-42.666666V682.666667z m0-354.688h42.666666V85.333333h-42.666666v242.688z" horiz-adv-x="1024" />
<glyph glyph-name="chuizhihebing" unicode="&#59332;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM640 682.666667v-597.333334h-42.666667V682.666667zM426.666667 682.666667v-597.333334H384V682.666667zM597.034667 304.170667l-90.538667-90.538667L416 304.213333l30.165333 30.165334 37.802667-37.76V544h42.666667v-249.898667l40.234666 40.234667 30.165334-30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenfensanduiqi" unicode="&#59333;" d="M234.666667 597.333333h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 1 0 0 42.666666z m0-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666z m0-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666z m0-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="zuobiankuang" unicode="&#59334;" d="M213.333333 85.333333V640h42.666667v-554.666667zM384 85.333333v42.666667h42.666667v-42.666667zM554.666667 85.333333v42.666667h42.666666v-42.666667zM298.666667 85.333333v42.666667h42.666666v-42.666667zM469.333333 85.333333v42.666667h42.666667v-42.666667zM640 85.333333v42.666667h42.666667v-42.666667zM384 341.333333v42.666667h42.666667v-42.666667zM554.666667 341.333333v42.666667h42.666666v-42.666667zM298.666667 341.333333v42.666667h42.666666v-42.666667zM469.333333 341.333333v42.666667h42.666667v-42.666667zM640 341.333333v42.666667h42.666667v-42.666667zM469.333333 256v42.666667h42.666667v-42.666667zM469.333333 426.666667v42.666666h42.666667v-42.666666zM469.333333 170.666667v42.666666h42.666667v-42.666666zM469.333333 341.333333v42.666667h42.666667v-42.666667zM469.333333 512V554.666667h42.666667v-42.666667zM384 597.333333V640h42.666667v-42.666667zM554.666667 597.333333V640h42.666666v-42.666667zM298.666667 597.333333V640h42.666666v-42.666667zM469.333333 597.333333V640h42.666667v-42.666667zM640 597.333333V640h42.666667v-42.666667zM725.333333 597.333333V640h42.666667v-42.666667zM725.333333 85.333333v42.666667h42.666667v-42.666667zM725.333333 256v42.666667h42.666667v-42.666667zM725.333333 426.666667v42.666666h42.666667v-42.666666zM725.333333 170.666667v42.666666h42.666667v-42.666666zM725.333333 341.333333v42.666667h42.666667v-42.666667zM725.333333 512V554.666667h42.666667v-42.666667z" horiz-adv-x="1024" />
<glyph glyph-name="fenyechakan" unicode="&#59335;" d="M810.666667 682.666667v-42.666667h-170.709334L640 128h170.666667v-42.666667h-213.333334V682.666667h213.333334z m-384 0l-0.042667-554.666667H426.666667v-42.666667H213.333333v42.666667h170.624L384 640H213.333333V682.666667h213.333334z m106.666666-512v-85.333334h-42.666666v85.333334h42.666666z m0 170.666666v-85.333333h-42.666666v85.333333h42.666666z m0 170.666667v-85.333333h-42.666666V512h42.666666z m0 170.666667v-85.333334h-42.666666V682.666667h42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="yunhang" unicode="&#59336;" d="M268.032 372.565333l60.373333 60.330667 211.2-211.2-60.373333-60.330667zM780.928 583.765333l60.373333-60.330666-331.904-331.861334-60.330666 60.330667z" horiz-adv-x="1024" />
<glyph glyph-name="lie" unicode="&#59337;" d="M234.666667 64v597.333333h42.666666v-597.333333zM405.333333 64v597.333333h42.666667v-597.333333zM576 64v597.333333h42.666667v-597.333333zM746.666667 64v597.333333h42.666666v-597.333333z" horiz-adv-x="1024" />
<glyph glyph-name="quanping" unicode="&#59338;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM341.333333 298.666667v-85.376L426.666667 213.333333v-42.666666H298.666667v128h42.666666z m384 0v-128h-128v42.666666h85.376L682.666667 298.666667h42.666666z m-298.666666 298.666666v-42.666666l-85.333334 0.042666V469.333333H298.666667V597.333333h128z m298.666666 0v-128h-42.666666l0.042666 85.333334H597.333333V597.333333h128z" horiz-adv-x="1024" />
<glyph glyph-name="shaixuan" unicode="&#59339;" d="M736 682.666667H328.533333C288 682.666667 256 650.666667 256 610.133333c0-17.066667 6.4-34.133333 17.066667-46.933333 0-2.133333 2.133333-2.133333 2.133333-4.266667l160-160v-168.533333c0-6.4 2.133333-10.666667 6.4-14.933333l145.066667-123.733334c4.266667-2.133333 8.533333-4.266667 12.8-4.266666 6.4 0 10.666667 2.133333 14.933333 6.4 4.266667 4.266667 4.266667 10.666667 4.266667 14.933333V392.533333l170.666666 166.4 2.133334 2.133334c10.666667 12.8 17.066667 29.866667 17.066666 46.933333 0 42.666667-32 74.666667-72.533333 74.666667z m23.466667-93.866667s-2.133333-2.133333 0 0l-172.8-172.8c-4.266667-4.266667-6.4-8.533333-6.4-14.933333v-251.733334l-104.533334 87.466667V405.333333c0 6.4-2.133333 10.666667-6.4 14.933334l-162.133333 166.4-2.133333 2.133333c-6.4 6.4-8.533333 12.8-8.533334 21.333333 0 17.066667 14.933333 32 32 32h407.466667c17.066667 0 32-14.933333 32-32 0-8.533333-4.266667-14.933333-8.533333-21.333333zM688.213333 517.589333l-101.546666-101.589333c-4.266667-4.266667-6.4-8.533333-6.4-14.933333v-251.733334l-104.533334 87.466667V405.333333c0 6.4-2.133333 10.666667-6.4 14.933334L403.626667 487.68l284.586666 29.909333z" horiz-adv-x="1024" />
<glyph glyph-name="gengxin" unicode="&#59340;" d="M358.101333 640A298.666667 298.666667 0 0 1 512 85.333333a21.333333 21.333333 0 1 1 0 42.666667A256 256 0 0 0 405.333333 616.789333V532.906667A21.333333 21.333333 0 0 1 426.666667 512c11.776 0 21.333333 9.130667 21.333333 20.906667V661.76a20.565333 20.565333 0 0 1-6.229333 14.634667l0.042666 0.128A20.650667 20.650667 0 0 1 427.050667 682.666667H298.24a21.333333 21.333333 0 0 1-20.906667-21.333334c0-11.776 9.173333-21.333333 20.906667-21.333333h59.818667z m307.797334-512A298.666667 298.666667 0 0 1 512 682.666667a21.333333 21.333333 0 0 1 0-42.666667 256 256 0 0 0 106.666667-488.789333V235.093333A21.333333 21.333333 0 0 1 597.333333 256c-11.776 0-21.333333-9.130667-21.333333-20.906667v-128.810666a20.48 20.48 0 0 1 6.229333-14.634667l-0.042666-0.170667a20.650667 20.650667 0 0 1 14.762666-6.144h128.768a21.333333 21.333333 0 0 1 20.949334 21.333334c0 11.776-9.173333 21.333333-20.906667 21.333333h-59.861333z" horiz-adv-x="1024" />
<glyph glyph-name="qingchu" unicode="&#59341;" d="M330.965333 625.365333l422.4-422.4-60.330666-60.330666-422.4 422.4zM753.365333 565.034667l-422.4-422.4-60.330666 60.330666 422.4 422.4z" horiz-adv-x="1024" />
<glyph glyph-name="hang" unicode="&#59342;" d="M213.333333 640h597.333334v-42.666667H213.333333zM213.333333 469.333333h597.333334v-42.666666H213.333333zM213.333333 298.666667h597.333334v-42.666667H213.333333zM213.333333 128h597.333334v-42.666667H213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="zhushi" unicode="&#59343;" d="M352 405.333333a32 32 0 1 1 64 0 32 32 0 0 1-64 0z m128 0a32 32 0 1 1 64 0 32 32 0 0 1-64 0z m128 0a32 32 0 1 1 64 0 32 32 0 0 1-64 0zM768 597.333333H256c-23.466667 0-42.666667-19.2-42.666667-42.666666v-298.666667c0-23.466667 19.2-42.666667 42.666667-42.666667h106.666667v-128l128 128H768c23.466667 0 42.666667 19.2 42.666667 42.666667V554.666667c0 23.466667-19.2 42.666667-42.666667 42.666666z m0-320c0-12.8-8.533333-21.333333-21.333333-21.333333H469.333333l-64-64V256h-128c-12.8 0-21.333333 8.533333-21.333333 21.333333v256c0 12.8 8.533333 21.333333 21.333333 21.333334h469.333334c12.8 0 21.333333-8.533333 21.333333-21.333334v-256z" horiz-adv-x="1024" />
<glyph glyph-name="jian" unicode="&#59344;" d="M213.333333 426.666667h597.333334v-85.333334H213.333333z" horiz-adv-x="1024" />
<glyph glyph-name="jisuan" unicode="&#59345;" d="M774.058667 682.666667v-42.666667H310.784l236.288-256-236.330667-256h463.317334v-42.666667H213.333333l275.669334 298.666667L213.333333 682.666667z" horiz-adv-x="1024" />
<glyph glyph-name="jia" unicode="&#59346;" d="M213.333333 426.666667h597.333334v-85.333334H213.333333zM554.666667 682.666667v-597.333334h-85.333334V682.666667z" horiz-adv-x="1024" />
<glyph glyph-name="dibuduiqi" unicode="&#59347;" d="M725.333333 170.666667H298.666667v42.666666h426.666666zM608 314.496l-90.496-90.496-90.538667 90.496 30.165334 30.165333 37.802666-37.717333V597.034667h42.666667v-292.565334l40.234667 40.192 30.165333-30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="xiangshang90" unicode="&#59348;" d="M789.333333 400.213333l-213.333333 77.653334v0.64l-1.621333-0.042667L426.666667 532.224v-45.354667l106.666666-38.826666v-152.405334l-106.666666-38.826666v-45.354667l147.498666 53.674667 1.834667 0.042666v0.64l213.333333 77.610667V400.213333z m-46.634666-28.416L576 311.125333v121.386667l166.698667-60.714667zM384 559.829333L293.504 650.368 202.965333 559.786667l30.165334-30.165334 37.802666 37.76V106.666667h42.666667V569.898667l40.234667-40.234667L384 559.829333z" horiz-adv-x="1024" />
<glyph glyph-name="wuxuanzhuang" unicode="&#59349;" d="M549.546667 682.666667l77.653333-213.333334h0.64l-0.042667-1.621333 53.76-147.712h-45.354666l-38.826667 106.666667h-152.405333l-38.826667-106.666667H360.789333l53.674667 147.498667 0.042667 1.834666h0.64l77.610666 213.333334h56.789334z m-28.416-46.634667L460.458667 469.333333h121.386666l-60.714666 166.698667zM709.162667 277.333333l90.538666-90.496-90.538666-90.538666-30.165334 30.165333 37.76 37.802667H256v42.666666h463.232l-40.234667 40.234667 30.165334 30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="xianshiyincangwangge" unicode="&#59350;" d="M256 640h554.666667v-42.666667H256zM298.666667 640v-554.666667H256V640zM810.666667 640v-554.666667h-42.666667V640zM469.333333 640v-554.666667h-42.666666V640zM640 640v-554.666667h-42.666667V640zM256 469.333333h554.666667v-42.666666H256zM256 298.666667h554.666667v-42.666667H256zM256 128h554.666667v-42.666667H256z" horiz-adv-x="1024" />
<glyph glyph-name="dongjie" unicode="&#59351;" d="M256.426667 639.573333h255.317333v-553.130666H256.426667zM809.557333 682.069333v-595.626666H213.930667V682.069333h595.626666z m-42.538666-42.538666H256.426667v-510.549334h510.549333V639.573333zM490.453333 639.573333h42.538667v-510.592h-42.538667zM256.426667 363.008v42.538667h510.592v-42.538667zM256.384 669.738667l264.192-264.192-30.122667-30.08-264.192 264.192 30.122667 30.08z m-30.122667-317.184l30.122667 30.122666 264.192-264.192-30.122667-30.08-264.192 264.149334z" horiz-adv-x="1024" />
<glyph glyph-name="wenbenzuoduiqi" unicode="&#59352;" d="M234.666667 597.333333h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 1 0 0 42.666666z m0-128h341.333333a21.333333 21.333333 0 0 0 0-42.666666h-341.333333a21.333333 21.333333 0 0 0 0 42.666666z m0-128h554.666666a21.333333 21.333333 0 1 0 0-42.666666h-554.666666a21.333333 21.333333 0 0 0 0 42.666666z m0-128h341.333333a21.333333 21.333333 0 0 0 0-42.666666h-341.333333a21.333333 21.333333 0 0 0 0 42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="houtui" unicode="&#59354;" d="M737.664 476.672H426.666667v-42.666667h311.296l-84.48-84.437333a21.333333 21.333333 0 0 1 30.208-30.165333l120.746666 120.704a21.290667 21.290667 0 0 1 0 30.165333l-120.746666 120.661333a21.333333 21.333333 0 0 1-30.165334-30.165333l84.138667-84.096zM213.333333 263.338667a213.333333 213.333333 0 0 0 213.333334 213.333333v-42.666667a170.666667 170.666667 0 0 1-170.666667-170.666666H213.333333z m0 0h42.666667v-64a21.333333 21.333333 0 0 0-42.666667 0v64z" horiz-adv-x="1024" />
<glyph glyph-name="shuipinghebing" unicode="&#59355;" d="M810.666667 682.666667v-597.333334H213.333333V682.666667h597.333334z m-42.666667-42.666667H256v-512h512V640zM810.666667 512v-256H213.333333V512h597.333334z m-42.666667-42.666667H256v-170.666666h512v170.666666zM581.162667 469.333333l90.538666-90.496-90.538666-90.538666-30.165334 30.165333 37.76 37.802667H341.333333v42.666666h249.898667l-40.234667 40.234667 30.165334 30.165333z" horiz-adv-x="1024" />
<glyph glyph-name="xiabiankuang" unicode="&#59356;" d="M768 85.333333H213.333333v42.666667h554.666667zM768 256h-42.666667v42.666667h42.666667zM768 426.666667h-42.666667v42.666666h42.666667zM768 170.666667h-42.666667v42.666666h42.666667zM768 341.333333h-42.666667v42.666667h42.666667zM768 512h-42.666667V554.666667h42.666667zM512 256h-42.666667v42.666667h42.666667zM256 256H213.333333v42.666667h42.666667zM256 426.666667H213.333333v42.666666h42.666667zM256 170.666667H213.333333v42.666666h42.666667zM256 341.333333H213.333333v42.666667h42.666667zM256 512H213.333333V554.666667h42.666667zM256 597.333333H213.333333V640h42.666667zM512 426.666667h-42.666667v42.666666h42.666667zM512 170.666667h-42.666667v42.666666h42.666667zM512 341.333333h-42.666667v42.666667h42.666667zM512 512h-42.666667V554.666667h42.666667zM768 597.333333h-42.666667V640h42.666667zM597.333333 597.333333h-42.666666V640h42.666666zM426.666667 597.333333H384V640h42.666667zM682.666667 597.333333h-42.666667V640h42.666667zM512 597.333333h-42.666667V640h42.666667zM341.333333 597.333333H298.666667V640h42.666666zM597.333333 341.333333h-42.666666v42.666667h42.666666zM426.666667 341.333333H384v42.666667h42.666667zM682.666667 341.333333h-42.666667v42.666667h42.666667zM512 341.333333h-42.666667v42.666667h42.666667zM341.333333 341.333333H298.666667v42.666667h42.666666z" horiz-adv-x="1024" />
<glyph glyph-name="shezhi" unicode="&#59357;" d="M794.496 470.314667a112.341333 112.341333 0 0 0-72.917333 53.034666 108.074667 108.074667 0 0 0-9.941334 88.234667 13.781333 13.781333 0 0 1-4.394666 14.592 299.392 299.392 0 0 1-95.616 55.424 14.421333 14.421333 0 0 1-15.146667-3.584 113.578667 113.578667 0 0 0-84.48-35.968 113.578667 113.578667 0 0 0-82.858667 35.157333 14.421333 14.421333 0 0 1-16.768 4.394667 298.154667 298.154667 0 0 1-95.573333-55.808 13.781333 13.781333 0 0 1-4.394667-14.634667c9.344-29.354667 5.717333-61.269333-9.984-87.808a112.341333 112.341333 0 0 0-72.96-53.034666 13.909333 13.909333 0 0 1-10.752-11.050667 281.856 281.856 0 0 1 0-109.610667c1.024-5.504 5.290667-9.813333 10.752-11.008a112.341333 112.341333 0 0 0 72.96-52.650666c15.786667-26.666667 19.413333-58.709333 9.941334-88.192a13.781333 13.781333 0 0 1 4.352-14.634667 299.392 299.392 0 0 1 95.658666-55.424h4.778667c3.882667 0 7.637333 1.578667 10.325333 4.394667a114.773333 114.773333 0 0 0 166.229334 0c4.096-5.546667 11.648-7.424 17.92-4.394667a298.666667 298.666667 0 0 1 97.194666 55.04c4.266667 3.541333 6.016 9.301333 4.394667 14.592a108.074667 108.074667 0 0 0 8.362667 88.618667 112.341333 112.341333 0 0 0 72.96 52.650666 13.909333 13.909333 0 0 1 10.709333 11.008 280.32 280.32 0 0 1 0 109.653334 14.336 14.336 0 0 1-10.752 11.008z m-26.709333-105.173334a136.106667 136.106667 0 0 1-79.658667-60.928 131.285333 131.285333 0 0 1-13.568-97.322666 259.114667 259.114667 0 0 0-69.717333-39.552A135.552 135.552 0 0 1 512 206.890667a137.941333 137.941333 0 0 1-92.842667-39.552 258.304 258.304 0 0 0-69.717333 39.552 129.664 129.664 0 0 1-14.762667 96.938666 136.106667 136.106667 0 0 1-78.506666 61.312 239.189333 239.189333 0 0 0 0 79.061334A136.106667 136.106667 0 0 1 335.872 505.173333c16.896 29.525333 21.76 64.426667 13.525333 97.365334a258.730667 258.730667 0 0 0 69.717334 39.552c25.386667-23.125333 58.453333-35.968 92.842666-36.010667a136.064 136.064 0 0 1 92.842667 36.010667c25.173333-9.472 48.682667-22.826667 69.717333-39.594667a131.285333 131.285333 0 0 1 14.336-96.896 136.106667 136.106667 0 0 1 79.701334-60.928c4.394667-26.197333 4.394667-52.906667 0-79.104l-0.810667-0.426667h0.042667zM513.706667 525.653333a119.466667 119.466667 0 1 1 0-238.933333 119.466667 119.466667 0 0 1 0 238.933333z m0-199.125333a79.658667 79.658667 0 1 0 0 159.36 79.658667 79.658667 0 0 0 0-159.36z" horiz-adv-x="1024" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

File diff suppressed because one or more lines are too long

@ -0,0 +1,505 @@
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="590px" height="424px" viewBox="0 0 590 424" preserveAspectRatio="none"><g transform="translate(36,90)"><path fill="#000000" fill-rule="evenodd" d="M4,0 L2,0 C0.895,0 0,0.895 0,2 L0,10 L2,10 L2,8 L4,8 L4,10 L6,10 L6,2 C6,0.895 5.105,0 4,0 Z M2,6 L4,6 L4,2 L2,2 L2,6 Z M14,3.5 L14,2 C14,0.895 13.105,0 12,0 L8,0 L8,10 L12,10 C13.105,10 14,9.105 14,8 L14,6.5 C14,5.672 13.328,5 12.5,5 C13.328,5 14,4.328 14,3.5 Z M10,8 L12,8 L12,6 L10,6 L10,8 Z M10,4 L12,4 L12,2 L10,2 L10,4 Z" transform="translate(2 4)"/>
</g><g transform="translate(108,252)"><path fill="#000000" fill-rule="evenodd" d="M16,0 L12,0 L12,1 L4,1 L4,0 L0,0 L0,4 L1,4 L1,12 L0,12 L0,16 L4,16 L4,15 L12,15 L12,16 L16,16 L16,12 L15,12 L15,4 L16,4 L16,0 Z M3,13 L3,3 L13,3 L13,13 L3,13 Z M7,4 C5.895,4 5,4.895 5,6 L5,12 L7,12 L7,10 L9,10 L9,12 L11,12 L11,6 C11,4.895 10.105,4 9,4 L7,4 Z M7,8 L9,8 L9,6 L7,6 L7,8 Z" transform="translate(1 1)"/>
</g><g transform="translate(536,184)"><path fill="#000000" fill-rule="evenodd" d="M7,14 C10.8659932,14 14,10.8659932 14,7 C14,3.13400675 10.8659932,0 7,0 C3.13400675,0 0,3.13400675 0,7 C0,10.8659932 3.13400675,14 7,14 Z M10.53,4.53 L9.47,3.47 L7,5.94 L4.53,3.47 L3.47,4.53 L5.94,7 L3.47,9.47 L4.53,10.53 L7,8.06 L9.47,10.53 L10.53,9.47 L8.06,7 L10.53,4.53 Z" transform="translate(2 2)"/>
</g><g transform="translate(36,324)"><path fill="#000000" d="M0,7 L1.99632026,7 L1.99632026,9 L0,9 L0,7 Z M10,12 L15,12 L15,14 L10,14 L10,12 Z M16.9694527,11.9570946 L18,13.0188246 L16.9734025,14.0389803 L15,16 L15,10 L16.9694527,11.9570946 Z M2.99264052,2.99686968 C2.99264052,1.34174426 4.33709312,-1.59872116e-14 5.98804084,-1.59872116e-14 C7.64235476,-1.59872116e-14 8.98344117,1.34739093 8.98344117,2.99686968 L8.98344117,6.00313032 C8.98344117,7.65825574 7.63898856,9 5.98804084,9 C4.33372692,9 2.99264052,7.65260907 2.99264052,6.00313032 L2.99264052,2.99686968 Z M4.5,2.99857602 L4.5,6.00142398 C4.5,6.83497024 5.17157288,7.5 6,7.5 C6.83420277,7.5 7.5,6.82906466 7.5,6.00142398 L7.5,2.99857602 C7.5,2.16502976 6.82842712,1.5 6,1.5 C5.16579723,1.5 4.5,2.17093534 4.5,2.99857602 Z M9.99264052,2.99686968 C9.99264052,1.34174426 11.3370931,-1.59872116e-14 12.9880408,-1.59872116e-14 C14.6423548,-1.59872116e-14 15.9834412,1.34739093 15.9834412,2.99686968 L15.9834412,6.00313032 C15.9834412,7.65825574 14.6389886,9 12.9880408,9 C11.3337269,9 9.99264052,7.65260907 9.99264052,6.00313032 L9.99264052,2.99686968 Z M11.5,2.99857602 L11.5,6.00142398 C11.5,6.83497024 12.1715729,7.5 13,7.5 C13.8342028,7.5 14.5,6.82906466 14.5,6.00142398 L14.5,2.99857602 C14.5,2.16502976 13.8284271,1.5 13,1.5 C12.1657972,1.5 11.5,2.17093534 11.5,2.99857602 Z" transform="translate(0 1)"/>
</g><g transform="translate(216,234)"><path fill="#000000" fill-rule="evenodd" d="M9,3.5 C9,1.57 7.43,0 5.5,0 L1.77635684e-15,0 L1.77635684e-15,12 L6.25,12 C8.04,12 9.5,10.54 9.5,8.75 C9.5,7.45 8.73,6.34 7.63,5.82 C8.46,5.24 9,4.38 9,3.5 Z M5,2 C5.82999992,2 6.5,2.67 6.5,3.5 C6.5,4.33 5.82999992,5 5,5 L3,5 L3,2 L5,2 Z M3,10 L3,7 L5.5,7 C6.32999992,7 7,7.67 7,8.5 C7,9.33 6.32999992,10 5.5,10 L3,10 Z" transform="translate(4 3)"/>
</g><g transform="translate(234,324)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M5,0 L3,0 L3,2 L5,2 L5,0 L5,0 Z M8,6 L6,6 L6,8 L8,8 L8,6 L8,6 Z M8,9 L6,9 L6,11 L8,11 L8,9 L8,9 Z M11,6 L9,6 L9,8 L11,8 L11,6 L11,6 Z M5,6 L3,6 L3,8 L5,8 L5,6 L5,6 Z M11,0 L9,0 L9,2 L11,2 L11,0 L11,0 Z M8,3 L6,3 L6,5 L8,5 L8,3 L8,3 Z M8,0 L6,0 L6,2 L8,2 L8,0 L8,0 Z M2,9 L0,9 L0,11 L2,11 L2,9 L2,9 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M12,8 L14,8 L14,6 L12,6 L12,8 L12,8 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M2,0 L0,0 L0,2 L2,2 L2,0 L2,0 Z M2,3 L0,3 L0,5 L2,5 L2,3 L2,3 Z M2,6 L0,6 L0,8 L2,8 L2,6 L2,6 Z" opacity=".54"/>
<polygon points="0 14 14 14 14 12 0 12"/>
</g>
</g><g transform="translate(454,378)"><path fill="#000000" fill-rule="evenodd" d="M16,3.88888889 L16,13.2222222 C16,14.2044444 15.2035556,15 14.2222222,15 L1.77777778,15 C0.796444444,15 0,14.2044444 0,13.2222222 L0,3.88888889 L0,7 L2,7 L2,13 L14,13 L14,7 L16,7 L16,3.88888889 Z M5.5,7 L7.5,9.5 L10,6 L13,11 L3,11 L5.5,7 Z M1.90939331,1.92431641 L0,-1.77635684e-15 L0,5 L5,5 L3.2149353,3.21627808 C4.2902485,2.38413522 5.85793364,1.78571429 7.37579451,1.78571429 C10.1281305,1.78571429 11.1530865,2.71785714 11.9683059,5 L14,5 C12.9324508,2.00714286 10.9860518,-1.77635684e-15 7.37579451,-1.77635684e-15 C5.32221804,-1.77635684e-15 3.34185024,0.770744978 1.90939331,1.92431641 Z" transform="translate(1 2)"/>
</g><g transform="translate(500,220)"><path fill="#010101" fill-rule="evenodd" d="M2,10.5857864 L2,1.77635684e-15 L0,1.77635684e-15 L0,13 L0,14 L14,14 L14,12 L3.41421356,12 L10.7071068,4.70710678 L12,6 L12,2 L8,2 L9.29289322,3.29289322 L2,10.5857864 Z" transform="translate(2 2)"/>
</g><g transform="translate(428,18)"><path fill="#4285F4" fill-rule="evenodd" d="M6,4 L6,0 L4,0 L4,4 L0,4 L0,6 L4,6 L4,10 L6,10 L6,6 L10,6 L10,4 L6,4 Z" transform="translate(4 4)"/>
</g><g transform="translate(288,234)"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path d="M6.0390625,13 L11.0495605,13 L11.0495605,7.46153846 L15,7.46153846 L8.5,1 L2,7.46153846 L6.0390625,7.46153846 L6.0390625,13 Z M2,15 L15,15 L15,17 L2,17 L2,15 Z" fill="#000000"/>
</g>
</g><g transform="translate(90,90)"><path fill="#000000" fill-rule="evenodd" d="M15.5,3.29 L12.05375,0.39875 L11.09,1.54625 L14.53625,4.4375 L15.5,3.29 L15.5,3.29 Z M4.91,1.5425 L3.94625,0.395 L0.5,3.28625 L1.46375,4.43375 L4.91,1.5425 L4.91,1.5425 Z M7,9 L9.5,11.5 L11,10 L9,8 L9,5 L7,5 L7,9 Z M7.99625,2 C4.265,2 1.25,5.0225 1.25,8.75 C1.25,12.4775 4.265,15.5 7.99625,15.5 C11.7275,15.5 14.75,12.4775 14.75,8.75 C14.75,5.0225 11.7275,2 7.99625,2 Z M8,14 C5.10125,14 2.75,11.64875 2.75,8.75 C2.75,5.85125 5.10125,3.5 8,3.5 C10.89875,3.5 13.25,5.85125 13.25,8.75 C13.25,11.64875 10.9025,14 8,14 Z" transform="translate(1 1)"/>
</g><g transform="translate(518,18)"><polygon fill="#000000" fill-rule="evenodd" points="12 5 3.125 5 7.06 1.06 6 0 0 6 6 12 7.06 10.94 3.125 7 12 7" transform="matrix(-1 0 0 1 15 3)"/>
</g><g transform="translate(428,0)"><polygon fill="#000000" fill-rule="evenodd" points="-2 2 2 6 6 2" transform="rotate(90 3 10)"/>
</g><g transform="translate(162,360)"><path fill="#000000" fill-rule="evenodd" d="M6,10 L14,10 L14,8 L6,8 L6,10 Z M6,6 L14,6 L14,4 L6,4 L6,6 Z M14,12 L0,12 L0,14 L14,14 L14,12 Z M0.5,7 L4,10.5 L4,3.5 L0.5,7 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z" transform="matrix(-1 0 0 1 16 2)"/>
</g><g transform="translate(198,234)"><path fill="#000000" fill-rule="evenodd" d="M13,0 L11,0 L11,1 L13,1 L13,2 L12,2 C11.448,2 11,2.4475 11,3 L11,5 L14,5 L14,4 L12,4 L12,3 L13,3 C13.5525,3 14,2.5525 14,2 L14,1 C14,0.4475 13.5525,0 13,0 Z M5,6.5 L8,11 L9.88503367,11 L6.5,5.5 L10,0 L8,0 L5,4.5 L2,0 L0,0 L3.5,5.5 L0,11 L2,11 L5,6.5 Z" transform="translate(2 4)"/>
</g><g transform="translate(18,270)"><g fill="none" fill-rule="evenodd" transform="translate(0 1)">
<polygon fill="#4285F4" points="4.71 16 15.24 16 17.85 11 7.29 11"/>
<polygon fill="#0F9D58" points="5.63 1.45 .14 11.45 2.8 16 8.28 6.02 5.63 1.45"/>
<polygon fill="#FFC107" points="17.86 10 11.97 0 6.71 0 12.6 10"/>
</g>
</g><g transform="translate(108,306)"><path fill="#000000" fill-rule="evenodd" d="M14.0074653,8.784 C14.0394653,8.528 14.0634653,8.272 14.0634653,8 C14.0634653,7.728 14.0394653,7.472 14.0074653,7.216 L15.6954653,5.896 C15.8474653,5.776 15.8874653,5.56 15.7914653,5.384 L14.1914653,2.616 C14.0954653,2.44 13.8794653,2.376 13.7034653,2.44 L11.7114653,3.24 C11.2954653,2.92 10.8474653,2.656 10.3594653,2.456 L10.0554653,0.336 C10.0314653,0.144 9.86346525,0 9.66346525,0 L6.46346525,0 C6.26346525,0 6.09546525,0.144 6.07146525,0.336 L5.76746525,2.456 C5.27946525,2.656 4.83146525,2.928 4.41546525,3.24 L2.42346525,2.44 C2.23946525,2.368 2.03146525,2.44 1.93546525,2.616 L0.335465255,5.384 C0.231465255,5.56 0.279465255,5.776 0.431465255,5.896 L2.11946525,7.216 C2.08746525,7.472 2.06346525,7.736 2.06346525,8 C2.06346525,8.264 2.08746525,8.528 2.11946525,8.784 L0.431465255,10.104 C0.279465255,10.224 0.239465255,10.44 0.335465255,10.616 L1.93546525,13.384 C2.03146525,13.56 2.24746525,13.624 2.42346525,13.56 L4.41546525,12.76 C4.83146525,13.08 5.27946525,13.344 5.76746525,13.544 L6.07146525,15.664 C6.09546525,15.856 6.26346525,16 6.46346525,16 L9.66346525,16 C9.86346525,16 10.0314653,15.856 10.0554653,15.664 L10.3594653,13.544 C10.8474653,13.344 11.2954653,13.072 11.7114653,12.76 L13.7034653,13.56 C13.8874653,13.632 14.0954653,13.56 14.1914653,13.384 L15.7914653,10.616 C15.8874653,10.44 15.8474653,10.224 15.6954653,10.104 L14.0074653,8.784 L14.0074653,8.784 Z M8,11 C6.34571429,11 5,9.65428571 5,8 C5,6.34571429 6.34571429,5 8,5 C9.65428571,5 11,6.34571429 11,8 C11,9.65428571 9.65428571,11 8,11 L8,11 Z" transform="translate(1 1)"/>
</g><g transform="translate(468,90)"><path fill="#000000" fill-rule="evenodd" d="M4,4 L1.00087166,4 C0.444630861,4 0,4.44882258 0,5.00247329 L0,14.9975267 C0,15.544239 0.448105505,16 1.00087166,16 L14.9991283,16 C15.5553691,16 16,15.5511774 16,14.9975267 L16,5.50123665 L16,6 L4,6 L4,4 Z M2,6 L7,6 L7,9 L2,9 L2,6 Z M2,11 L7,11 L7,14 L2,14 L2,11 Z M9,6 L14,6 L14,9 L9,9 L9,6 Z M9,11 L14,11 L14,14 L9,14 L9,11 Z M12,1.75 L12,1 C12,0.447 11.553,0 11,0 L9,0 L9,5 L11,5 C11.553,5 12,4.553 12,4 L12,3.25 C12,2.836 11.664,2.5 11.25,2.5 C11.664,2.5 12,2.164 12,1.75 Z M10,4 L11,4 L11,3 L10,3 L10,4 Z M10,2 L11,2 L11,1 L10,1 L10,2 Z M13,4 C13,4.553 13.447,5 14,5 L15,5 C15.553,5 16,4.553 16,4 L16,3.25 L15,3.25 L15,4 L14,4 L14,1 L15,1 L15,1.75 L16,1.75 L16,1 C16,0.447 15.553,0 15,0 L14,0 C13.447,0 13,0.447 13,1 L13,4 Z M7,0 L6,0 C5.447,0 5,0.447 5,1 L5,5 L6,5 L6,4 L7,4 L7,5 L8,5 L8,1 C8,0.447 7.553,0 7,0 Z M6,3 L7,3 L7,1 L6,1 L6,3 Z" transform="translate(1 1)"/>
</g><g transform="translate(274,18)"><path fill="#000000" fill-rule="evenodd" d="M3.73243561,3 C3.38662619,3.59780137 2.74028236,4 2,4 C0.8954305,4 8.8817842e-16,3.1045695 8.8817842e-16,2 C8.8817842e-16,0.8954305 0.8954305,0 2,0 C2.74028236,0 3.38662619,0.40219863 3.73243561,1 L10,1 L10,3 L3.73243561,3 Z M4.00183105,8 C3.95133866,8 3.83224929,8.00708433 3.670281,8.0295662 C3.39764759,8.06740886 3.12698029,8.13503441 2.88533098,8.2356602 C2.29317848,8.48223991 2,8.84848947 2,9.5 C2,10.1515105 2.29317848,10.5177601 2.88533098,10.7643398 C3.12698029,10.8649656 3.39764759,10.9325911 3.670281,10.9704338 C3.83224929,10.9929157 3.95133866,11 4.00183105,11 L10.2675644,11 C10.6133738,10.4021986 11.2597176,10 12,10 C13.1045695,10 14,10.8954305 14,12 C14,13.1045695 13.1045695,14 12,14 C11.2597176,14 10.6133738,13.5978014 10.2675644,13 L4,13 L4,11 L4.00183105,11 L4.00183105,13 C3.50631274,13 2.8240725,12.9053022 2.11650007,12.6106602 C0.832508167,12.0759899 0,11.0359895 0,9.5 C-2.66453526e-15,7.96401053 0.832508167,6.92401009 2.11650007,6.3893398 C2.8240725,6.09469779 3.50631274,6 4.00183105,6 L4.00183105,8 L4,8 L4,6 L10,6 L10,8 L4.00183091,8 Z M10.3315501,3.0295662 C10.6041835,3.06740886 10.8748508,3.13503441 11.1165001,3.2356602 C11.7086526,3.48223991 12.0018311,3.84848947 12.0018311,4.5 C12.0018311,5.15151053 11.7086526,5.51776009 11.1165001,5.7643398 C10.8748508,5.86496559 10.6041835,5.93259114 10.3315501,5.9704338 C10.1695818,5.99291567 10.0504924,6 10,6 L10,8 C10.4955183,8 11.1777586,7.90530221 11.885331,7.6106602 C13.1693229,7.07598991 14.0018311,6.03598947 14.0018311,4.5 C14.0018311,2.96401053 13.1693229,1.92401009 11.885331,1.3893398 C11.1777586,1.09469779 10.4955183,1 10,1 L10,3 C10.0504924,3 10.1695818,3.00708433 10.3315501,3.0295662 Z" transform="translate(2 2)"/>
</g><g transform="translate(72,72)"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path d="M16.5694737,11 L11.5147368,2 L6.47473684,2 L6.47473684,2.0075 L11.5221053,11 L16.5694737,11 Z M7.32210526,12 L4.79473684,16 L14.4621053,16 L16.9894737,12 L7.32210526,12 Z M1,11.5789474 L3.52,15.9926316 L8.2906993,7.63467097 L5.83368421,3.12 L1,11.5789474 Z" fill="#000000"/>
</g>
</g><g transform="translate(464,148)"><defs>
<polygon id="mask-a" points="16 0 0 0 0 16 16 16"/>
</defs>
<g fill="none" fill-rule="evenodd" transform="translate(1 1)">
<mask id="mask-b" fill="#fff">
<use xlink:href="#mask-a"/>
</mask>
<path fill="#000" fill-rule="nonzero" d="M10.5,12.5 L5.5,12.5 L3,8 L5.5,3.5 L10.5,3.5 L13,8 L10.5,12.5 Z M1.77781818,-0.000363636364 C0.795272727,-0.000363636364 0.000363636364,0.795272727 0.000363636364,1.77781818 L0.000363636364,14.2221818 C0.000363636364,15.2047273 0.795272727,15.9996364 1.77781818,15.9996364 L14.2221818,15.9996364 C15.2047273,15.9996364 16.0003636,15.2047273 16.0003636,14.2221818 L16.0003636,1.77781818 C16.0003636,0.795272727 15.2047273,-0.000363636364 14.2221818,-0.000363636364 L1.77781818,-0.000363636364 Z" mask="url(#mask-b)"/>
</g>
</g><g transform="translate(180,36)"><path fill="#000000" fill-rule="evenodd" d="M2,12 L2,14 L12,14 L12,12 L2,12 Z M2,4 L2,6 L12,6 L12,4 L2,4 Z M0,10 L14,10 L14,8 L0,8 L0,10 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z" transform="translate(2 2)"/>
</g><g transform="translate(364,220)"><polygon fill="#FFFFFF" fill-rule="evenodd" points="16 7 3.83 7 9.42 1.41 8 0 0 8 8 16 9.41 14.59 3.83 9 16 9" transform="translate(4 4)"/>
</g><g transform="translate(500,112)"><path fill="#000000" fill-rule="evenodd" d="M9,2 L7,0 L1,0 C0.45,0 0,0.45 0,1 L0,13 C0,13.55 0.45,14 1,14 L15,14 C15.55,14 16,13.55 16,13 L16,3 C16,2.45 15.55,2 15,2 L9,2 Z" transform="translate(1 2)"/>
</g><g transform="translate(252,324)"><path fill="#4285F4" fill-rule="evenodd" d="M0.01,1 L0,15 C0,15.55 0.44,16 1,16 L11,16 C11.55,16 12,15.55 12,15 L12,5 L7,0 L1,0 C0.45,0 0.01,0.45 0.01,1 Z M7,5 L7,1 L11,5 L7,5 L7,5 Z" transform="translate(3 1)"/>
</g><g transform="translate(36,18)"><g fill="none" fill-rule="evenodd" transform="rotate(90 9 9)">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000" d="M2,16 L4,16 L4,14 L2,14 L2,16 L2,16 Z M8,16 L10,16 L10,14 L8,14 L8,16 L8,16 Z M5,16 L7,16 L7,14 L5,14 L5,16 L5,16 Z M2,13 L4,13 L4,11 L2,11 L2,13 L2,13 Z M2,7 L4,7 L4,5 L2,5 L2,7 L2,7 Z M2,10 L4,10 L4,8 L2,8 L2,10 L2,10 Z M14,10 L16,10 L16,8 L14,8 L14,10 L14,10 Z M14,13 L16,13 L16,11 L14,11 L14,13 L14,13 Z M14,7 L16,7 L16,5 L14,5 L14,7 L14,7 Z M11,16 L13,16 L13,14 L11,14 L11,16 L11,16 Z M14,16 L16,16 L16,14 L14,14 L14,16 L14,16 Z" opacity=".54"/>
<polygon fill="#000" points="2 2 2 4 16 4 16 2"/>
</g>
</g><g transform="translate(436,342)"><path fill="#FFFFFF" fill-rule="evenodd" d="M1.00684547,0 C0.450780073,0 1.57717987e-15,0.447449351 1.57717987e-15,1.0068708 C1.57717987e-15,1.0068708 1.57717987e-15,0.795555556 1.57717987e-15,1.77777778 L1.57717987e-15,12.4444444 C1.57717987e-15,13.4266667 -1.20058952e-09,12.9909959 -1.20058952e-09,12.9909959 C-6.73340566e-09,13.5482535 0.443716635,14 0.999807483,14 L5,14 L7,16 L9,14 L12.1307373,14 L12.9927192,14 C13.549025,14 14,13.5505095 14,12.9998043 L14,1.77777778 C14,0.795555556 14,1.0068708 14,1.0068708 C14,0.45079141 13.5500512,0 12.9931545,0 L1.00684547,0 Z M7,12 L5.796875,8.375 L2.625,7 L5.796875,5.625 L7,2 L8.203125,5.625 L11.375,7 L8.203125,8.375 L7,12 Z" transform="translate(2 1)"/>
</g><g transform="translate(382,0)"><rect width="14" height="2" fill="#000000" fill-rule="evenodd" transform="translate(2 8)"/>
</g><g transform="translate(0,54)"><path fill="#000000" fill-rule="evenodd" d="M17.86,10 L11.97,0 L6.71,0 L12.6,10 L17.86,10 L17.86,10 Z M4.71,16 L15.24,16 L17.85,11 L7.29,11 L4.71,16 L4.71,16 Z M5.63,1.45 L0.14,11.45 L2.8,16 L8.28,6.02 L5.63,1.45 L5.63,1.45 Z" transform="translate(0 1)" opacity=".54"/>
</g><g transform="translate(162,234)"><path fill="#FFFFFF" fill-rule="evenodd" d="M14.0074653,8.784 C14.0394653,8.528 14.0634653,8.272 14.0634653,8 C14.0634653,7.728 14.0394653,7.472 14.0074653,7.216 L15.6954653,5.896 C15.8474653,5.776 15.8874653,5.56 15.7914653,5.384 L14.1914653,2.616 C14.0954653,2.44 13.8794653,2.376 13.7034653,2.44 L11.7114653,3.24 C11.2954653,2.92 10.8474653,2.656 10.3594653,2.456 L10.0554653,0.336 C10.0314653,0.144 9.86346525,0 9.66346525,0 L6.46346525,0 C6.26346525,0 6.09546525,0.144 6.07146525,0.336 L5.76746525,2.456 C5.27946525,2.656 4.83146525,2.928 4.41546525,3.24 L2.42346525,2.44 C2.23946525,2.368 2.03146525,2.44 1.93546525,2.616 L0.335465255,5.384 C0.231465255,5.56 0.279465255,5.776 0.431465255,5.896 L2.11946525,7.216 C2.08746525,7.472 2.06346525,7.736 2.06346525,8 C2.06346525,8.264 2.08746525,8.528 2.11946525,8.784 L0.431465255,10.104 C0.279465255,10.224 0.239465255,10.44 0.335465255,10.616 L1.93546525,13.384 C2.03146525,13.56 2.24746525,13.624 2.42346525,13.56 L4.41546525,12.76 C4.83146525,13.08 5.27946525,13.344 5.76746525,13.544 L6.07146525,15.664 C6.09546525,15.856 6.26346525,16 6.46346525,16 L9.66346525,16 C9.86346525,16 10.0314653,15.856 10.0554653,15.664 L10.3594653,13.544 C10.8474653,13.344 11.2954653,13.072 11.7114653,12.76 L13.7034653,13.56 C13.8874653,13.632 14.0954653,13.56 14.1914653,13.384 L15.7914653,10.616 C15.8874653,10.44 15.8474653,10.224 15.6954653,10.104 L14.0074653,8.784 L14.0074653,8.784 Z M8,11 C6.34571429,11 5,9.65428571 5,8 C5,6.34571429 6.34571429,5 8,5 C9.65428571,5 11,6.34571429 11,8 C11,9.65428571 9.65428571,11 8,11 L8,11 Z" transform="translate(1 1)"/>
</g><g transform="translate(234,90)"><path fill="#000000" fill-rule="evenodd" d="M4,6 L4,11 L6,11 L6,1 L7,1 L7,11 L9,11 L9,1 L10,1 L10,0 L4,0 C2.34,0 1,1.34 1,3 C1,4.66 2.34,6 4,6 Z M0,14 L3,11 L3,13 L14,13 L14,15 L3,15 L3,17 L0,14 Z" transform="translate(2 1)"/>
</g><g transform="translate(400,342)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M2,3 L0,3 L0,5 L2,5 L2,3 L2,3 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M11,0 L9,0 L9,2 L11,2 L11,0 L11,0 Z M2,0 L0,0 L0,2 L2,2 L2,0 L2,0 Z M5,0 L3,0 L3,2 L5,2 L5,0 L5,0 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z" opacity=".54"/>
<polygon points="8 0 6 0 6 6 0 6 0 8 6 8 6 14 8 14 8 8 14 8 14 6 8 6"/>
</g>
</g><g transform="translate(126,270)"><path fill="#3F51B5" fill-rule="evenodd" d="M15,0 L1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 Z M2,3 L14,3 L14,6 L2,6 L2,3 Z M2,7 L9,7 L9,13 L2,13 L2,7 Z M10,7 L14,7 L14,13 L10,13 L10,7 Z" transform="translate(1 1)"/>
</g><g transform="translate(572,180)"><path fill="#000000" fill-rule="evenodd" d="M15,0 C15.55,0 16,0.45 16,1 L16,15 C16,15.55 15.55,16 15,16 L1,16 C0.45,16 0,15.55 0,15 L0,1 C0,0.45 0.45,0 1,0 L15,0 Z M2,2 L2,14 L14,14 L14,2 L2,2 Z M6,12 L4,12 L4,7 L6,7 L6,12 L6,12 Z M9,12 L7,12 L7,4 L9,4 L9,12 L9,12 Z M12,12 L10,12 L10,8 L12,8 L12,12 L12,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(180,342)"><path fill-rule="evenodd" d="M1,4.00247329 C1,3.44882258 1.44463086,3 2.00087166,3 L15.9991283,3 C16.5518945,3 17,3.45576096 17,4.00247329 L17,13.9975267 C17,14.5511774 16.5553691,15 15.9991283,15 L2.00087166,15 C1.4481055,15 1,14.544239 1,13.9975267 L1,4.00247329 Z M5,11 L5,13 L13,13 L13,11 L5,11 Z M2,5 L2,7 L4,7 L4,5 L2,5 Z M5,5 L5,7 L7,7 L7,5 L5,5 Z M8,5 L8,7 L10,7 L10,5 L8,5 Z M11,5 L11,7 L13,7 L13,5 L11,5 Z M14,5 L14,7 L16,7 L16,5 L14,5 Z M2,8 L2,10 L4,10 L4,8 L2,8 Z M5,8 L5,10 L7,10 L7,8 L5,8 Z M8,8 L8,10 L10,10 L10,8 L8,8 Z M11,8 L11,10 L13,10 L13,8 L11,8 Z M14,8 L14,10 L16,10 L16,8 L14,8 Z"/>
</g><g transform="translate(428,112)"><path fill="#000000" fill-rule="evenodd" d="M11,8 L7,8 L7,12 L11,12 L11,8 L11,8 Z M13,1 L12,1 L12,0 L10,0 L10,1 L4,1 L4,0 L2,0 L2,1 L1,1 C0.45,1 0,1.45 0,2 L0,14 C0,14.55 0.45,15 1,15 L13,15 C13.55,15 14,14.55 14,14 L14,2 C14,1.45 13.55,1 13,1 L13,1 Z M12,13 L2,13 L2,5 L12,5 L12,13 L12,13 Z" transform="translate(2 1)"/>
</g><g transform="translate(144,234)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L0,2 L12,2 L12,0 L0,0 L0,0 Z M2.5,7 L5,7 L5,14 L7,14 L7,7 L9.5,7 L6,3.5 L2.5,7 L2.5,7 Z" transform="translate(3 2)"/>
</g><g transform="translate(328,280)"><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18zM18 14H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</g><g transform="translate(428,130)"><path fill="#000000" fill-rule="evenodd" d="M7,0 C3.134,0 0,3.133 0,7 C0,10.865 3.134,14 7,14 C10.866,14 14,10.865 14,7 C14,3.133 10.866,0 7,0 L7,0 Z M12.2,7 C12.2,8.074 11.874,9.072 11.315,9.9 L4.099,2.684 C4.928,2.125 5.926,1.799 7,1.799 C9.873,1.799 12.2,4.127 12.2,7 L12.2,7 Z M1.8,7 C1.8,5.926 2.126,4.928 2.685,4.098 L9.902,11.315 C9.073,11.874 8.075,12.2 7.001,12.2 C4.127,12.199 1.8,9.873 1.8,7 L1.8,7 Z" transform="translate(2 2)"/>
</g><g transform="translate(162,378)"><defs><linearGradient id="a" x1="50.005%" x2="50.005%" y1="8.586%" y2="100.014%"><stop stop-color="#263238" stop-opacity=".2" offset="0%"/><stop stop-color="#263238" stop-opacity=".02" offset="100%"/></linearGradient><radialGradient id="b" cx="3.168%" cy="2.718%" r="161.248%" fx="3.168%" fy="2.718%" gradientTransform="matrix(1 0 0 .72222 0 .008)"><stop stop-color="#FFF" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#0F9D58" d="M9.5 2H24l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5v-31C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="#263238" fill-opacity=".1" d="M7 35c0 1.3807119 1.11928813 2.5 2.5 2.5h21c1.3807119 0 2.5-1.1192881 2.5-2.5v.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5V35z"/><path fill="#FFF" fill-opacity=".2" d="M9.5 2H24v.5H9.5C8.11928813 2.5 7 3.61928813 7 5v-.5C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="url(#a)" fill-rule="nonzero" d="M17.5 8l8.5 8.5V9" transform="translate(7 2)"/><path fill="#87CEAC" d="M24 2l9 9h-6.5C25.1192881 11 24 9.88071187 24 8.5V2z"/><path fill="#F1F1F1" d="M13 18h14v14H13V18zm2 2v2h4v-2h-4zm0 4v2h4v-2h-4zm0 4v2h4v-2h-4zm6-8v2h4v-2h-4zm0 4v2h4v-2h-4zm0 4v2h4v-2h-4z"/><path fill="url(#b)" fill-opacity=".1" d="M2.5 0H17l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C1.11928813 36 0 34.8807119 0 33.5v-31C0 1.11928813 1.11928813 0 2.5 0z" transform="translate(7 2)"/></g></g><g transform="translate(90,378)"><defs><linearGradient id="a" x1="50.005%" x2="50.005%" y1="8.586%" y2="100.014%"><stop stop-color="#BF360C" stop-opacity=".2" offset="0%"/><stop stop-color="#BF360C" stop-opacity=".02" offset="100%"/></linearGradient><radialGradient id="b" cx="3.168%" cy="2.718%" r="161.248%" fx="3.168%" fy="2.718%" gradientTransform="matrix(1 0 0 .72222 0 .008)"><stop stop-color="#FFF" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#F4B400" d="M9.5 2H24l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5v-31C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="#BF360C" fill-opacity=".2" d="M7 35c0 1.3807119 1.11928813 2.5 2.5 2.5h21c1.3807119 0 2.5-1.1192881 2.5-2.5v.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5V35z"/><path fill="#FFF" fill-opacity=".2" d="M9.5 2H24v.5H9.5C8.11928813 2.5 7 3.61928813 7 5v-.5C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="url(#a)" fill-rule="nonzero" d="M17.5 8l8.5 8.5V9" transform="translate(7 2)"/><path fill="#FADA80" d="M24 2l9 9h-6.5C25.1192881 11 24 9.88071187 24 8.5V2z"/><path fill="#F1F1F1" d="M14.5 18h11c.8284271 0 1.5.6715729 1.5 1.5v11c0 .8284271-.6715729 1.5-1.5 1.5h-11c-.82842712 0-1.5-.6715729-1.5-1.5v-11c0-.8284271.67157288-1.5 1.5-1.5zm.5 4v6h10v-6H15z"/><path fill="url(#b)" fill-opacity=".1" d="M2.5 0H17l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C1.11928813 36 0 34.8807119 0 33.5v-31C0 1.11928813 1.11928813 0 2.5 0z" transform="translate(7 2)"/></g></g><g transform="translate(72,108)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L6,0 L6,2 L0,2 L0,0 Z M0,4 L6,4 L6,6 L0,6 L0,4 Z M8,0 L14,0 L14,2 L8,2 L8,0 Z M8,4 L14,4 L14,6 L8,6 L8,4 Z M0,8 L6,8 L6,10 L0,10 L0,8 Z M8,8 L14,8 L14,10 L8,10 L8,8 Z M0,12 L6,12 L6,14 L0,14 L0,12 Z M8,12 L14,12 L14,14 L8,14 L8,12 Z" transform="translate(2 2)"/>
</g><g transform="translate(274,72)"><polygon fill="#000000" fill-rule="evenodd" points="8.44 .44 5 3.88 1.56 .44 .5 1.5 5 6 9.5 1.5" transform="translate(4 6)"/>
</g><g transform="translate(126,198)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 3)">
<polygon points="5 0 .5 12 5 12 6.12 9 8.37 9 9.49 12 13.99 12 9.5 0" opacity=".3"/>
<path d="M6.5,0 L4.5,0 L0,12 L2,12 L3.12,9 L7.87,9 L8.99,12 L10.99,12 L6.5,0 L6.5,0 Z M3.88,7 L5.5,2.67 L7.12,7 L3.88,7 L3.88,7 Z"/>
</g>
</g><g transform="translate(36,378)"><polygon fill="#000000" fill-rule="evenodd" points="8 0 6.59 1.41 12.17 7 0 7 0 9 12.17 9 6.59 14.59 8 16 16 8" transform="translate(4 4)"/>
</g><g transform="translate(18,234)"><polygon fill="#000000" fill-rule="evenodd" points="4 0 4 2 6.58 2 2.92 10 0 10 0 12 8 12 8 10 5.42 10 9.08 2 12 2 12 0" transform="translate(3 3)"/>
</g><g transform="translate(72,54)"><polygon fill="#F4B400" fill-rule="evenodd" points="8 11.953 13 15 11 9.5 15.5 6 10 6 8 .5 6 6 .5 6 5 9.5 3 15" transform="translate(1 1)"/>
</g><g transform="translate(328,184)"><path fill="#F44336" fill-rule="evenodd" d="M12,3 L12,0 L0,0 L0,12 L3,12 L3,3 L12,3 Z M4,4 L16,4 L16,16 L4,16 L4,4 Z" transform="translate(1 1)"/>
</g><g transform="translate(500,202)"><path fill="#000000" fill-rule="evenodd" d="M10,5 L10,4 C10,1.5 8.07,0 6,0 C3.93,0 2,1.5 2,4 L2,5 L1.5,5 C0.67125,5 0,5.67125 0,6.5 L0,13.5 C0,14.32875 0.67125,15 1.5,15 L10.5,15 C11.32875,15 12,14.32875 12,13.5 L12,6.5 C12,5.67125 11.32875,5 10.5,5 L10,5 Z M4,10 C4,8.895 4.895,8 6,8 C7.105,8 8,8.895 8,10 C8,11.105 7.105,12 6,12 C4.895,12 4,11.105 4,10 Z M4,5 L4,4 C4,3 4.7175,2 6,2 C7.2825,2 8,3 8,4 L8,5 L4,5 Z" transform="translate(3 1)"/>
</g><g transform="translate(54,54)"><path fill="#000000" fill-rule="evenodd" d="M4.24826564,3.00916134 C3.49176891,3.00916134 2.39690508,3.00916134 2.10880344,3.00916134 C2.54373837,1.10900675 4.22011554,0 6,0 C8.07,0 10,1.5 10,4 L10,5 L10.5,5 C11.32875,5 12,5.67125 12,6.5 L12,13.5 C12,14.32875 11.32875,15 10.5,15 L1.5,15 C0.67125,15 0,14.32875 0,13.5 L0,6.5 C0,5.67125 0.67125,5 1.5,5 L2,5 L4.5,5 L8,5 L8,4 C8,3 7.2825,2 6,2 C5.15846,2 4.56018701,2.43056109 4.24826564,3.00916134 Z M4,10 C4,8.895 4.895,8 6,8 C7.105,8 8,8.895 8,10 C8,11.105 7.105,12 6,12 C4.895,12 4,11.105 4,10 Z" transform="translate(3 1)"/>
</g><g transform="translate(270,234)"><path fill="#000000" fill-rule="evenodd" d="M0,14 L14,14 L14,12 L0,12 L0,14 Z M0,10 L14,10 L14,8 L0,8 L0,10 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z M0,6 L14,6 L14,4 L0,4 L0,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(364,0)"><path fill="#000000" fill-rule="evenodd" d="M17.86,10 L11.97,0 L6.71,0 L12.6,10 L17.86,10 L17.86,10 Z M4.71,16 L15.24,16 L17.85,11 L7.29,11 L4.71,16 L4.71,16 Z M5.63,1.45 L0.14,11.45 L2.8,16 L8.28,6.02 L5.63,1.45 L5.63,1.45 Z" transform="translate(0 1)" opacity=".54"/>
</g><g transform="translate(202,378)"><path fill="#000000" fill-rule="evenodd" d="M3,6 L1,6 L1,2 L8,2 L8,4 L3,4 L3,6 Z M10,4 L10,2 L17,2 L17,6 L15,6 L15,4 L10,4 Z M10,14 L15,14 L15,12 L17,12 L17,16 L10,16 L10,14 Z M1,12 L3,12 L3,14 L8,14 L8,16 L1,16 L1,12 Z M1,8 L5,8 L5,6 L8,9 L5,12 L5,10 L1,10 L1,8 Z M10,9 L13,6 L13,8 L17,8 L17,10 L13,10 L13,12 L10,9 Z"/>
</g><g transform="translate(90,306)"><polygon fill="#000000" fill-rule="evenodd" points="0 6 1.5 7.5 6 3 10.5 7.5 12 6 6 0" transform="translate(3 5)"/>
</g><g transform="translate(108,90)"><path fill="#000000" fill-rule="evenodd" d="M17.86,10 L11.97,0 L6.71,0 L12.6,10 L17.86,10 L17.86,10 Z M4.71,16 L15.24,16 L17.85,11 L7.29,11 L4.71,16 L4.71,16 Z M5.63,1.45 L0.14,11.45 L2.8,16 L8.28,6.02 L5.63,1.45 L5.63,1.45 Z" transform="translate(0 1)" opacity=".38"/>
</g><g transform="translate(500,72)"><path fill="#000000" fill-rule="evenodd" d="M8,5 L8,0 L4,0 L4,5 L0.75,5 L6,10 L11.25,5 L8,5 Z M1,13 L11,13 L11,11 L1,11 L1,13 Z" transform="translate(3 2)"/>
</g><g transform="translate(454,360)"><polygon fill="#000000" fill-rule="evenodd" points="0 0 0 8 2 8 2 15 7 6 4 6 7 0" transform="translate(6 2)"/>
</g><g transform="translate(428,148)"><path fill="#010101" fill-rule="evenodd" d="M2,12 L2,-8.8817842e-16 L0,-8.8817842e-16 L0,13 L0,14 L14,14 L14,12 L2,12 Z" transform="translate(2 2)"/>
</g><g transform="translate(180,306)"><polygon fill="#4285F4" fill-opacity=".78" fill-rule="evenodd" points="0 5 5 10 10 5 5 0" transform="translate(4 4)"/>
</g><g transform="translate(518,94)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M6,8 L8,8 L8,6 L6,6 L6,8 L6,8 Z M6,5 L8,5 L8,3 L6,3 L6,5 L6,5 Z M6,11 L8,11 L8,9 L6,9 L6,11 L6,11 Z M6,14 L8,14 L8,12 L6,12 L6,14 L6,14 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M3,2 L5,2 L5,0 L3,0 L3,2 L3,2 Z M3,8 L5,8 L5,6 L3,6 L3,8 L3,8 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z M12,8 L14,8 L14,6 L12,6 L12,8 L12,8 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M6,2 L8,2 L8,0 L6,0 L6,2 L6,2 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M9,8 L11,8 L11,6 L9,6 L9,8 L9,8 Z M9,2 L11,2 L11,0 L9,0 L9,2 L9,2 Z" opacity=".54"/>
<polygon points="0 14 2 14 2 0 0 0"/>
</g>
</g><g transform="translate(572,324)"><path fill="#000000" fill-rule="evenodd" d="M11,6 L4,6 L4,8 L11,8 L11,10 L14,7 L11,4 L11,6 Z M0,0 L2,0 L2,14 L0,14 L0,0 Z M7,0 L9,0 L9,4 L7,4 L7,0 Z M7,10 L9,10 L9,14 L7,14 L7,10 Z" transform="translate(2 2)"/>
</g><g transform="translate(198,90)"><path fill="#000000" fill-rule="evenodd" d="M0,1.0093689 C0,0.451909848 0.443353176,0 1.0093689,0 L2.9906311,0 C3.54809015,0 4,0.443353176 4,1.0093689 L4,2.9906311 C4,3.54809015 3.55664682,4 2.9906311,4 L1.0093689,4 C0.451909848,4 0,3.55664682 0,2.9906311 L0,1.0093689 Z M6,1 L14,1 L14,3 L6,3 L6,1 Z M6,7 L14,7 L14,9 L6,9 L6,7 Z M0,7.0093689 C0,6.45190985 0.443353176,6 1.0093689,6 L2.9906311,6 C3.54809015,6 4,6.44335318 4,7.0093689 L4,8.9906311 C4,9.54809015 3.55664682,10 2.9906311,10 L1.0093689,10 C0.451909848,10 0,9.55664682 0,8.9906311 L0,7.0093689 Z" transform="translate(2 4)"/>
</g><g transform="translate(446,220)"><polygon fill="#000000" fill-rule="evenodd" points="0 0 4 4 8 0" transform="translate(5 7)"/>
</g><g transform="translate(274,90)"><path fill="#000000" fill-rule="evenodd" d="M2,10 L4,12 L4,16 L10,16 L10,12 L12,10 L12,6 L2,6 L2,10 Z M6,0 L8,0 L8,3 L6,3 L6,0 Z M12.5,1 L14,2.5 L12,4.5 L10.5,3 L12.5,1 Z M-6.20335912e-15,2.5 L1.5,1 L3.5,3 L2,4.5 L-6.20335912e-15,2.5 Z" transform="translate(2 1)"/>
</g><g transform="translate(328,262)"><path fill="#0F9D58" fill-rule="evenodd" d="M1.00684547,0 C0.450780073,0 1.57717987e-15,0.447449351 1.57717987e-15,1.0068708 C1.57717987e-15,1.0068708 1.57717987e-15,0.795555556 1.57717987e-15,1.77777778 L1.57717987e-15,12.4444444 C1.57717987e-15,13.4266667 -1.20058952e-09,12.9909959 -1.20058952e-09,12.9909959 C-6.73340566e-09,13.5482535 0.443716635,14 0.999807483,14 L5,14 L7,16 L9,14 L12.1307373,14 L12.9927192,14 C13.549025,14 14,13.5505095 14,12.9998043 L14,1.77777778 C14,0.795555556 14,1.0068708 14,1.0068708 C14,0.45079141 13.5500512,0 12.9931545,0 L1.00684547,0 Z M7,12 L5.796875,8.375 L2.625,7 L5.796875,5.625 L7,2 L8.203125,5.625 L11.375,7 L8.203125,8.375 L7,12 Z" transform="translate(2 1)"/>
</g><g transform="translate(292,360)"><path d="M15.2222222,1 L2.77777778,1 C1.79111111,1 1,1.8 1,2.77777778 L1,15.2222222 C1,16.2 1.79111111,17 2.77777778,17 L15.2222222,17 C16.2088889,17 17,16.2 17,15.2222222 L17,2.77777778 C17,1.8 16.2088889,1 15.2222222,1 Z M7.22222222,13.4444444 L2.77777778,9 L4.03111111,7.74666667 L7.22222222,10.9288889 L13.9688889,4.18222222 L15.2222222,5.44444444 L7.22222222,13.4444444 Z"/>
</g><g transform="translate(18,0)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M3,8 L5,8 L5,6 L3,6 L3,8 L3,8 Z M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M6,14 L8,14 L8,12 L6,12 L6,14 L6,14 Z M6,11 L8,11 L8,9 L6,9 L6,11 L6,11 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M6,8 L8,8 L8,6 L6,6 L6,8 L6,8 Z M0,5 L2,5 L2,3 L0,3 L0,5 L0,5 Z M0,8 L2,8 L2,6 L0,6 L0,8 L0,8 Z M12,8 L14,8 L14,6 L12,6 L12,8 L12,8 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M6,5 L8,5 L8,3 L6,3 L6,5 L6,5 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M9,8 L11,8 L11,6 L9,6 L9,8 L9,8 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z" opacity=".54"/>
<polygon points="0 0 0 2 14 2 14 0"/>
</g>
</g><g transform="translate(446,256)"><path fill="#010101" fill-rule="evenodd" d="M2.8875,3.06 C2.8875,2.6025 2.985,2.18625 3.18375,1.8075 C3.3825,1.42875 3.66,1.10625 4.02,0.84 C4.38,0.57375 4.80375,0.3675 5.29875,0.22125 C5.79375,0.075 6.33375,0 6.92625,0 C7.53375,0 8.085,0.0825 8.58,0.25125 C9.075,0.42 9.49875,0.6525 9.85125,0.95625 C10.20375,1.25625 10.47375,1.6125 10.665,2.02875 C10.85625,2.44125 10.95,2.895 10.95,3.38625 L8.6925,3.38625 C8.6925,3.1575 8.655,2.94375 8.58375,2.74875 C8.5125,2.55 8.4,2.38125 8.25,2.2425 C8.1,2.10375 7.9125,1.99125 7.6875,1.91625 C7.4625,1.8375 7.19625,1.8 6.88875,1.8 C6.5925,1.8 6.3375,1.83375 6.11625,1.8975 C5.89875,1.96125 5.71875,2.05125 5.57625,2.1675 C5.43375,2.28375 5.325,2.41875 5.25375,2.5725 C5.1825,2.72625 5.145,2.895 5.145,3.0675 C5.145,3.4275 5.32875,3.73125 5.69625,3.975 C5.71780203,3.98908066 5.73942012,4.00311728 5.76118357,4.01733315 C6.02342923,4.18863185 6.5,4.5 7,5 L4,5 C4,5 3.21375,4.37625 3.17625,4.30875 C2.985,3.9525 2.8875,3.53625 2.8875,3.06 Z M14,6 L0,6 L0,8 L7.21875,8 C7.35375,8.0525 7.51875,8.105 7.63125,8.15375 C7.90875,8.2775 8.12625,8.40875 8.28375,8.53625 C8.44125,8.6675 8.54625,8.81 8.6025,8.96 C8.65875,9.11375 8.685,9.28625 8.685,9.47375 C8.685,9.65 8.65125,9.815 8.58375,9.965 C8.51625,10.11875 8.41125,10.25 8.2725,10.35875 C8.13375,10.4675 7.95375,10.55375 7.74,10.6175 C7.5225,10.68125 7.27125,10.71125 6.97875,10.71125 C6.6525,10.71125 6.35625,10.6775 6.09,10.61375 C5.82375,10.55 5.59875,10.445 5.41125,10.3025 C5.22375,10.16 5.0775,9.9725 4.9725,9.74375 C4.8675,9.515 4.78125,9.17 4.78125,9 L2.55,9 C2.55,9.2525 2.61,9.6875 2.72625,10.025 C2.8425,10.3625 3.0075,10.66625 3.21375,10.9325 C3.42,11.19875 3.6675,11.4275 3.94875,11.6225 C4.23,11.8175 4.53375,11.9825 4.86375,12.11 C5.19375,12.24125 5.535,12.33875 5.89875,12.39875 C6.25875,12.4625 6.6225,12.4925 6.9825,12.4925 C7.5825,12.4925 8.13,12.425 8.6175,12.28625 C9.105,12.1475 9.525,11.94875 9.87,11.69375 C10.215,11.435 10.48125,11.12 10.6725,10.74125 C10.86375,10.3625 10.95375,9.935 10.95375,9.455 C10.95375,9.005 10.875,8.6 10.72125,8.24375 C10.68375,8.1575 10.6425,8.075 10.59375,7.9925 L14,8 L14,6 Z" transform="translate(2 3)"/>
</g><g transform="translate(274,36)"><path fill="#000000" fill-rule="evenodd" d="M13.5,3 L11.25,3 L9.75,0 L8.25,0 L9.75,3 L7.5,3 L6,0 L4.5,0 L6,3 L3.75,3 L2.25,0 L1.5,0 C0.67125,0 0.0075,0.67125 0.0075,1.5 L0,10.5 C0,11.32875 0.67125,12 1.5,12 L13.5,12 C14.32875,12 15,11.32875 15,10.5 L15,0 L12,0 L13.5,3 Z" transform="translate(2 3)"/>
</g><g transform="translate(18,18)"><path fill="#000000" fill-rule="evenodd" d="M11.74223,10.3496798 L14,8.09190988 L14,14 L8.09190988,14 L10.3496798,11.74223 L1.234568e-13,1.39255019 L1.39255019,0 L11.74223,10.3496798 Z" transform="rotate(-180 8 8)"/>
</g><g transform="translate(554,148)"><path fill="#000000" fill-rule="evenodd" d="M16,1 C16,0.45 15.55,0 15,0 L1,0 C0.45,0 0,0.45 0,1 L0,13 C0,13.55 0.45,14 1,14 L12.5,14 L16,17 L16,1 Z M13,11 L3,11 L3,9 L13,9 L13,11 Z M13,8 L3,8 L3,6 L13,6 L13,8 Z M13,5 L3,5 L3,3 L13,3 L13,5 Z" transform="translate(1 1)"/>
</g><g transform="translate(270,324)"><path fill="#000000" fill-rule="evenodd" d="M0.01,1 L0,15 C0,15.55 0.44,16 1,16 L11,16 C11.55,16 12,15.55 12,15 L12,5 L7,0 L1,0 C0.45,0 0.01,0.45 0.01,1 Z M7,5 L7,1 L11,5 L7,5 L7,5 Z" transform="translate(3 1)"/>
</g><g transform="translate(90,342)"><path d="m9.75,2.25c-3.73,0 -6.75,3.02 -6.75,6.75l-2.25,0l2.92,2.92l0.05,0.11l3.03,-3.03l-2.25,0c0,-2.9 2.35,-5.25 5.25,-5.25s5.25,2.35 5.25,5.25s-2.35,5.25 -5.25,5.25c-1.45,0 -2.76,-0.59 -3.71,-1.54l-1.06,1.06c1.22,1.22 2.9,1.98 4.77,1.98c3.73,0 6.75,-3.02 6.75,-6.75s-3.02,-6.75 -6.75,-6.75zm-0.75,3.75l0,3.75l3.21,1.9l0.54,-0.91l-2.62,-1.56l0,-3.18l-1.13,0z"/>
<path fill="none" d="m0,0l18,0l0,18l-18,0l0,-18z"/>
</g><g transform="translate(144,144)"><path fill="#F4B400" fill-rule="evenodd" d="M16,1 C16,0.45 15.55,0 15,0 L1,0 C0.45,0 0,0.45 0,1 L0,12 C0,12.55 0.45,13 1,13 L12.5,13 L16,16 L16,1 L16,1 Z" transform="translate(1 1)"/>
</g><g transform="translate(36,108)"><path fill="#000000" fill-rule="evenodd" d="M10,6 C11.6575,6 13,4.6575 13,3 C13,1.3425 11.6575,0 10,0 C8.3425,0 7,1.3425 7,3 C7,4.6575 8.3425,6 10,6 L10,6 Z M4,4 L4,2 L2,2 L2,4 L0,4 L0,6 L2,6 L2,8 L4,8 L4,6 L6,6 L6,4 L4,4 Z M4,10.6666667 L4,12 L16,12 L16,10.6666667 C16,8.89333333 12.0025,8 10,8 C7.9975,8 4,8.89333333 4,10.6666667 Z" transform="translate(1 3)"/>
</g><g transform="translate(328,136)"><polygon fill="#000000" fill-rule="evenodd" points="16 7 3.83 7 9.42 1.41 8 0 0 8 8 16 9.41 14.59 3.83 9 16 9" transform="translate(4 4)"/>
</g><g transform="translate(388,160)"><path fill="#000000" fill-rule="evenodd" d="M2,12 L2,2 L5,2 L5,0 L2,0 C0.89,0 0,0.9 0,2 L0,12 C0,13.1 0.89,14 2,14 L12,14 C13.1,14 14,13.1 14,12 L14,9 L12,9 L12,12 L2,12 Z M7,2 L10.59,2 L4.76,7.83 L6.17,9.24 L12,3.41 L12,7 L14,7 L14,0 L7,0 L7,2 Z" transform="translate(2 2)"/>
</g><g transform="translate(108,18)"><path fill="#000000" fill-rule="evenodd" d="M0,1 C0,0.45 0.45,0 1,0 L15,0 C15.55,0 16,0.45 16,1 L16,12 C16,12.55 15.55,13 15,13 L3.5,13 L0,16 L0,1 Z M3,11 L3,8.53 L9.88,1.65 C10.08,1.45 10.39,1.45 10.59,1.65 L12.36,3.42 C12.56,3.62 12.56,3.93 12.36,4.13 L5.47,11 L3,11 Z M7.5,11 L9.5,9 L13,9 L13,11 L7.5,11 Z" transform="translate(1 1)"/>
</g><g transform="translate(180,216)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L14,0 L14,2 L0,2 L0,0 Z M0,4 L6,4 L6,6 L0,6 L0,4 Z M0,8 L2,8 L2,10 L0,10 L0,8 Z M8,4 L14,4 L14,6 L8,6 L8,4 Z M4,8 L6,8 L6,10 L4,10 L4,8 Z M8,8 L10,8 L10,10 L8,10 L8,8 Z M12,8 L14,8 L14,10 L12,10 L12,8 Z" transform="translate(2 4)"/>
</g><g transform="translate(572,126)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L2,0 L2,4 L0,4 L0,0 Z M0,4 L14,4 L14,6 L0,6 L0,4 Z M4,2 L6,2 L6,4 L4,4 L4,2 Z M8,0 L10,0 L10,4 L8,4 L8,0 Z M12,2 L14,2 L14,4 L12,4 L12,2 Z" transform="translate(2 6)"/>
</g><g transform="translate(198,54)"><g fill="none" fill-rule="evenodd" transform="rotate(-180 9 9)">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000" d="M2,16 L4,16 L4,14 L2,14 L2,16 L2,16 Z M8,16 L10,16 L10,14 L8,14 L8,16 L8,16 Z M5,16 L7,16 L7,14 L5,14 L5,16 L5,16 Z M2,13 L4,13 L4,11 L2,11 L2,13 L2,13 Z M2,7 L4,7 L4,5 L2,5 L2,7 L2,7 Z M2,10 L4,10 L4,8 L2,8 L2,10 L2,10 Z M14,10 L16,10 L16,8 L14,8 L14,10 L14,10 Z M14,13 L16,13 L16,11 L14,11 L14,13 L14,13 Z M14,7 L16,7 L16,5 L14,5 L14,7 L14,7 Z M11,16 L13,16 L13,14 L11,14 L11,16 L11,16 Z M14,16 L16,16 L16,14 L14,14 L14,16 L14,16 Z" opacity=".54"/>
<polygon fill="#000" points="2 2 2 4 16 4 16 2"/>
</g>
</g><g transform="translate(370,280)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000000" d="M8,10 L10.5,12.5 L12,11 L10,9 L10,5 L8,5 L8,10 Z M8.9925,1.5 C4.8525,1.5 1.5,4.86 1.5,9 C1.5,13.14 4.8525,16.5 8.9925,16.5 C13.14,16.5 16.5,13.14 16.5,9 C16.5,4.86 13.14,1.5 8.9925,1.5 Z M9,15 C5.685,15 3,12.315 3,9 C3,5.685 5.685,3 9,3 C12.315,3 15,5.685 15,9 C15,12.315 12.315,15 9,15 Z"/>
</g>
</g><g transform="translate(216,306)"><path fill="#010101" fill-rule="evenodd" d="M2,12 L2,-8.8817842e-16 L0,-8.8817842e-16 L0,13 L0,14 L14,14 L14,12 L2,12 Z" transform="matrix(-1 0 0 1 16 2)"/>
</g><g transform="translate(446,184)"><g fill="#000000" fill-rule="evenodd">
<path d="M9.47336146,7.49057294e-05 C7.78895769,0.00993937541 6.38763929,0.954694653 6.06830697,2.20664456 C5.95295215,2.51979542 5.9000001,2.72000003 5.9000001,2.72000003 C5.9000001,2.72000003 5.83519774,2.97603987 5.82999992,3 L5.4000001,5 L4,5 L4,6 L5.30000019,6 L3.77111816,13.5142822 C3.77111816,13.5142822 3.20471191,16.1555176 2.34106445,16.697876 C1.86203272,16.9987011 1.28420828,17.0434054 1.10778809,17.0002441 C1.61537673,16.9339541 2,16.5118938 2,16 C2.00129865,15.9731602 1.99779672,15.8833762 1.99000431,15.8580638 C1.92561788,15.4049216 1.55747359,15.049577 1.09831297,15.0047715 C1.0828693,15.0016337 1.06828346,15 1.0546875,15 C1.0172438,15.0001094 1.00863468,15 1,15 C0.44771525,15 0,15.4477153 0,16 C0,16.0307214 0.00138534577,16.0611193 0.00409697465,16.0911345 C0.00136565662,16.133227 0,16.1764165 0,16.2207031 C0,16.4812866 0.041806143,16.719484 0.125418993,16.9352965 L0.157775879,17.0002441 C0.157775879,17.0002441 0.498168945,17.9716187 2.01452637,17.9716187 C3.53088379,17.9716187 4.26623535,17.0150146 4.81488037,15.9563599 C5.14147315,15.3261728 5.38030073,14.3820163 5.52012378,13.7209903 L5.64728783,13.0575346 C5.65870849,12.9903589 5.66448975,12.9530029 5.66448975,12.9530029 L7,6 L10,6 L10,5 L7.28428531,5 L7.36000045,4.62953661 L7.53528358,3.70156713 C7.61089628,3.30975584 7.70025541,2.96950377 7.80336365,2.68080071 C7.90647188,2.39209765 8.0336368,2.15323382 8.18486221,1.96420206 C8.33608762,1.77517029 8.51652433,1.63597626 8.72617774,1.54661579 C8.93583115,1.45725532 9.18844254,1.41257576 9.48401948,1.41257576 C9.64211877,1.41257576 9.78646813,1.42632332 9.9170719,1.45381885 C9.99447966,1.47011522 10.0658501,1.4870151 10.131184,1.50451869 C10.0477065,1.65057964 10,1.81971859 10,2 C10,2.55228475 10.4477153,3 11,3 C11.457729,3 11.8436297,2.69246635 11.9623514,2.27274965 C11.9871041,2.21708163 12,2.12871738 12,2 C12,1.2154012 11.491731,0.536324697 10.7519032,0.208734959 C10.6774691,0.172852789 10.5949024,0.141523674 10.5031814,0.114805726 C10.2676987,0.0404663358 10.0141658,1.13686838e-13 9.75,1.13686838e-13 C9.71513575,1.13686838e-13 9.68113145,0.000774776085 9.64795887,0.00228742319 C9.59159775,0.000807963799 9.53341957,6.92664413e-05 9.47336146,7.49057294e-05 Z"/>
<path d="M8,13 L8,14 L11.0040283,14 L11.0028687,13 L10.3999996,13 L12.75,10.5 L14,13 L13.5017395,13 L13.5,14 L16.75,14 L16.75,13 L16.25,13 C15.9738576,13 15.6608113,12.7961402 15.5492527,12.5411491 L14,9 L16.8771837,6.34413815 C17.0830844,6.1540759 17.4709682,6 17.7460842,6 L18,6 L18,5 L14.9978638,5 L15,6 L16.0369873,6 L13.5017395,8.30000019 L12.2235107,6 L12.75,6 L12.75,5 L9.5,5 L9.5,6 L10,6 C10.2761424,6 10.6042297,6.20845938 10.7216387,6.44327742 L12.25,9.5 L9.33556607,12.6386212 C9.15023805,12.8382052 8.76806641,13 8.5,13 L8,13 Z"/>
</g>
</g><g transform="translate(352,298)"><polygon fill="#000000" fill-rule="evenodd" points="-2 2 2 6 6 2" transform="rotate(-90 8 3)"/>
</g><g transform="translate(364,324)"><path fill="#000000" fill-rule="evenodd" d="M10.5737085,2 L5,2 L5,0 L14,0 L14,1 L14,9 L12,9 L12,3.40213561 L1.70206527,13.7000703 L0.287851709,12.2858568 L10.5737085,2 Z" transform="translate(2 2)"/>
</g><g transform="translate(162,252)"><defs>
<polygon id="shapes_callout_a" points="1 1 17 1 17 14 10 14 7 17 4 14 1 14"/>
<mask id="shapes_callout_b" width="16" height="16" x="0" y="0" fill="white">
<use xlink:href="#shapes_callout_a"/>
</mask>
</defs>
<use fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="2" mask="url(#shapes_callout_b)" xlink:href="#shapes_callout_a"/>
</g><g transform="translate(328,220)"><path fill="#0F9D58" fill-rule="evenodd" d="M7,14 C10.8659932,14 14,10.8659932 14,7 C14,3.13400675 10.8659932,0 7,0 C3.13400675,0 0,3.13400675 0,7 C0,10.8659932 3.13400675,14 7,14 Z M2.25,7.5 L3.3075,6.4425 L5.5,8.6275 L10.6925,3.435 L11.75,4.5 L5.5,10.75 L2.25,7.5 Z" transform="translate(2 2)"/>
</g><g transform="translate(446,274)"><path fill="#000000" fill-rule="evenodd" d="M13,6 L11,6 L11,7 L13,7 L13,8 L12,8 C11.448,8 11,8.4475 11,9 L11,11 L14,11 L14,10 L12,10 L12,9 L13,9 C13.5525,9 14,8.5525 14,8 L14,7 C14,6.4475 13.5525,6 13,6 Z M5,6.5 L8,11 L9.88503367,11 L6.5,5.5 L10,0 L8,0 L5,4.5 L2,0 L0,0 L3.5,5.5 L0,11 L2,11 L5,6.5 Z" transform="translate(2 4)"/>
</g><g transform="translate(36,360)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.455664396,0 0.995397568,0 L9.00460243,0 C9.55434533,0 10,0.449948758 10,1.00684547 L10,14 L5,12 L0,14 L0,1.00684547 Z" transform="translate(4 2)"/>
</g><g transform="translate(382,184)"><path fill="#000000" d="M6,12 C8.76,12 11,9.76 11,7 L11,0 L9,0 L9,7 C9,8.75029916 7.49912807,10 6,10 C4.50087193,10 3,8.75837486 3,7 L3,0 L1,0 L1,7 C1,9.76 3.24,12 6,12 Z M0,13 L0,15 L12,15 L12,13 L0,13 Z" transform="translate(3 3)"/>
</g><g transform="translate(256,378)"><g fill="none" fill-rule="evenodd">
<path d="M0,0 L18,0 L18,18 L0,18 L0,0 Z M0,0 L18,0 L18,18 L0,18 L0,0 Z M0,0 L18,0 L18,18 L0,18 L0,0 Z M0,0 L18,0 L18,18 L0,18 L0,0 Z"/>
<path fill="#000" fill-rule="nonzero" d="M9,5.25 C11.07,5.25 12.75,6.93 12.75,9 C12.75,9.4875 12.6525,9.945 12.48,10.3725 L14.67,12.5625 C15.8025,11.6175 16.695,10.395 17.2425,9 C15.945,5.7075 12.7425,3.375 8.9925,3.375 C7.9425,3.375 6.9375,3.5625 6.0075,3.9 L7.6275,5.52 C8.055,5.3475 8.5125,5.25 9,5.25 Z M1.5,3.2025 L3.21,4.9125 L3.555,5.2575 C2.31,6.225 1.335,7.515 0.75,9 C2.0475,12.2925 5.25,14.625 9,14.625 C10.1625,14.625 11.2725,14.4 12.285,13.995 L12.6,14.31 L14.7975,16.5 L15.75,15.5475 L2.4525,2.25 L1.5,3.2025 Z M5.6475,7.35 L6.81,8.5125 C6.7725,8.67 6.75,8.835 6.75,9 C6.75,10.245 7.755,11.25 9,11.25 C9.165,11.25 9.33,11.2275 9.4875,11.19 L10.65,12.3525 C10.1475,12.6 9.5925,12.75 9,12.75 C6.93,12.75 5.25,11.07 5.25,9 C5.25,8.4075 5.4,7.8525 5.6475,7.35 L5.6475,7.35 Z M8.88,6.765 L11.2425,9.1275 L11.2575,9.0075 C11.2575,7.7625 10.2525,6.7575 9.0075,6.7575 L8.88,6.765 Z"/>
</g>
</g><g transform="translate(500,94)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000" d="M8,16 L10,16 L10,14 L8,14 L8,16 L8,16 Z M5,4 L7,4 L7,2 L5,2 L5,4 L5,4 Z M5,16 L7,16 L7,14 L5,14 L5,16 L5,16 Z M2,7 L4,7 L4,5 L2,5 L2,7 L2,7 Z M2,16 L4,16 L4,14 L2,14 L2,16 L2,16 Z M2,4 L4,4 L4,2 L2,2 L2,4 L2,4 Z M2,13 L4,13 L4,11 L2,11 L2,13 L2,13 Z M14,13 L16,13 L16,11 L14,11 L14,13 L14,13 Z M14,16 L16,16 L16,14 L14,14 L14,16 L14,16 Z M14,7 L16,7 L16,5 L14,5 L14,7 L14,7 Z M14,2 L14,4 L16,4 L16,2 L14,2 L14,2 Z M8,4 L10,4 L10,2 L8,2 L8,4 L8,4 Z M11,4 L13,4 L13,2 L11,2 L11,4 L11,4 Z M11,16 L13,16 L13,14 L11,14 L11,16 L11,16 Z" opacity=".54"/>
<polygon fill="#000" points="2 10 16 10 16 8 2 8"/>
</g>
</g><g transform="translate(180,252)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L12,0 L12,12 L0,12 L0,0 Z M2,2 L12,2 L12,12 L2,12 L2,2 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z M8,5 L12,5 L12,7 L8,7 L8,5 Z M7,8 L7,12 L5,12 L5,8 L7,8 Z" transform="translate(3 3)"/>
</g><g transform="translate(252,306)"><path fill="#000000" fill-rule="evenodd" d="M9.5,7 L7,7 L7,0 L5,0 L5,7 L2.5,7 L6,10.5 L9.5,7 L9.5,7 Z M0,12 L0,14 L12,14 L12,12 L0,12 L0,12 Z" transform="translate(3 2)"/>
</g><g transform="translate(162,180)"><path fill="#000000" fill-rule="evenodd" d="M8,0 C3.58,0 0,3.58 0,8 C0,12.42 3.58,16 8,16 C12.42,16 16,12.42 16,8 C16,3.58 12.42,0 8,0 L8,0 Z M12,10.87 L10.87,12 L8,9.13 L5.13,12 L4,10.87 L6.87,8 L4,5.13 L5.13,4 L8,6.87 L10.87,4 L12,5.13 L9.13,8 L12,10.87 L12,10.87 Z" transform="translate(1 1)"/>
</g><g transform="translate(382,324)"><path fill="#000000" fill-rule="evenodd" d="M11,11 L13,11 L13,11.5 L12,11.5 L12,12.5 L13,12.5 L13,13 L11,13 L11,14 L14,14 L14,10 L11,10 L11,11 Z M11,6 L12.8,6 L11,8.1 L11,9 L14,9 L14,8 L12.2,8 L14,5.9 L14,5 L11,5 L11,6 Z M12,4 L13,4 L13,0 L11,0 L11,1 L12,1 L12,4 Z M0,1 L0,3 L9,3 L9,1 L0,1 Z M0,13 L9,13 L9,11 L0,11 L0,13 Z M0,8 L9,8 L9,6 L0,6 L0,8 Z" transform="translate(2 2)"/>
</g><g transform="translate(274,54)"><path fill="#000000" fill-rule="evenodd" d="M0,11 L2,11 L2,11.5 L1,11.5 L1,12.5 L2,12.5 L2,13 L0,13 L0,14 L3,14 L3,10 L0,10 L0,11 Z M0,6 L1.8,6 L0,8.1 L0,9 L3,9 L3,8 L1.2,8 L3,5.9 L3,5 L0,5 L0,6 Z M1,4 L2,4 L2,0 L0,0 L0,1 L1,1 L1,4 Z M5,1 L5,3 L14,3 L14,1 L5,1 Z M5,13 L14,13 L14,11 L5,11 L5,13 Z M5,8 L14,8 L14,6 L5,6 L5,8 Z" transform="translate(2 2)"/>
</g><g transform="translate(54,36)"><path fill="#000000" fill-rule="evenodd" d="M0,8.75 L9.01409691,13 L9.01409691,11 L8,10.5 L8,5.5 L9,5 L9.01409691,3 L0,7.25 L0,8.75 Z M2,8 L6.02,6.13 L6.02,9.87 L2,8 Z M10,3 L12,3 L12,15 L14,15 L14,3 L16,3 L13,0 L10,3 Z" transform="translate(1 1)"/>
</g><g transform="translate(256,396)"><path fill="#000000" fill-rule="evenodd" d="M13,0 L1,0 C0.45,0 0,0.45 0,1 L0,13 C0,13.55 0.45,14 1,14 L13,14 C13.55,14 14,13.55 14,13 L14,1 C14,0.45 13.55,0 13,0 L13,0 Z M11,11 L9,11 L9,8 L11,8 L11,11 L11,11 Z M6,11 L6,3 L8,3 L8,11 L6,11 Z M3,11 L3,6 L5,6 L5,11 L3,11 Z" transform="translate(2 2)"/>
</g><g transform="translate(234,288)"><path fill="#000000" fill-rule="evenodd" d="M14,0 L0,0 L0,2 L14,2 L14,0 Z M0,12 L4,12 L4,10 L0,10 L0,12 Z M11.5,5 L0,5 L0,7 L11.75,7 C12.58,7 13.25,7.67 13.25,8.5 C13.25,9.33 12.58,10 11.75,10 L9,10 L9,8 L6,11 L9,14 L9,12 L11.5,12 C13.43,12 15,10.43 15,8.5 C15,6.57 13.43,5 11.5,5 Z" transform="translate(2 3)"/>
</g><g transform="translate(90,162)"><path fill="#000000" fill-rule="evenodd" d="M13,14 L3,14 L3,11 L0,11 L0,6.00591905 C0,4.89808055 0.894513756,4 1.99406028,4 L14.0059397,4 C15.1072288,4 16,4.88655484 16,6.00591905 L16,11 L13,11 L13,14 Z M5,9 L11,9 L11,12 L5,12 L5,9 Z M3,0 L13,0 L13,3 L3,3 L3,0 Z M12,6 L14,6 L14,8 L12,8 L12,6 Z" transform="translate(1 2)"/>
</g><g transform="translate(382,396)"><path fill="#FFFFFF" fill-rule="evenodd" d="M7.99905882,0 C4.32752941,0 1.23670588,2.49323077 0,6 C1.23670588,9.50676923 4.32752941,12 7.99905882,12 C11.6724706,12 14.7595294,9.50676923 16,6 C14.7595294,2.49323077 11.6724706,0 7.99905882,0 Z M8,10.5 C10.4852814,10.5 12.5,8.48528137 12.5,6 C12.5,3.51471863 10.4852814,1.5 8,1.5 C5.51471863,1.5 3.5,3.51471863 3.5,6 C3.5,8.48528137 5.51471863,10.5 8,10.5 Z M8,8.5 C9.38071187,8.5 10.5,7.38071187 10.5,6 C10.5,4.61928813 9.38071187,3.5 8,3.5 C6.61928813,3.5 5.5,4.61928813 5.5,6 C5.5,7.38071187 6.61928813,8.5 8,8.5 Z" transform="translate(1 3)"/>
</g><g transform="translate(90,72)"><!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
<title>diagram_icon_18dp</title>
<desc>Created with Sketch.</desc>
<defs/>
<g id="R4-TT" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="diagram_icon_18dp" stroke="#000000">
<path d="M3.87147764,7.29634576 C3.83986478,7.04746451 3.82352941,6.79330535 3.82352941,6.53501401 C3.82352941,3.47811018 6.11161763,1 8.93411749,1 C11.7566173,1 14.0447056,3.47811018 14.0447056,6.53501401 C14.0447056,6.7730233 14.0308349,7.00752387 14.0039213,7.23761927 C15.7712236,8.04150177 17,9.82263098 17,11.8907563 C17,14.7125137 14.7125137,17 11.8907563,17 C10.8177918,17 9.82207637,16.6692576 9,16.1041629 C8.17792363,16.6692576 7.18220818,17 6.1092437,17 C3.28748632,17 1,14.7125137 1,11.8907563 C1,9.87159112 2.17128577,8.12599438 3.87147764,7.29634576 Z M11.2034468,11.495781 C12.7029812,10.6895952 13.7849896,9.10935699 14.0039213,7.23761927 C13.3599102,6.9446817 12.6443884,6.78151261 11.8907563,6.78151261 C10.8177918,6.78151261 9.82207637,7.11225499 9,7.6773497 C10.2380498,8.52838427 11.0822782,9.91094076 11.2034468,11.495781 Z M3.87147764,7.29634576 C4.11260673,9.19470304 5.24257605,10.7859928 6.79193371,11.5617758 C6.78502142,11.6705463 6.78151261,11.7802415 6.78151261,11.8907563 C6.78151261,13.6395492 7.66012217,15.1831318 9,16.1041629 C10.3398778,15.1831318 11.2184874,13.6395492 11.2184874,11.8907563 C11.2184874,11.7578516 11.2134128,11.6261321 11.2034468,11.495781 C10.5197272,11.8633652 9.74920604,12.070028 8.93411749,12.070028 C8.16916636,12.070028 7.44346846,11.8880076 6.79193371,11.5617758 C6.89440201,9.94935653 7.74479562,8.5401763 9,7.6773497 C8.17792363,7.11225499 7.18220818,6.78151261 6.1092437,6.78151261 C5.30665151,6.78151261 4.54728204,6.9665711 3.87147764,7.29634576 Z" id="circles"/>
</g>
</g>
</g><g transform="translate(162,162)"><path fill="#000000" fill-rule="evenodd" d="M7,8 L7,11 L9,11 L9,8 L12,8 L12,6 L9,6 L9,3 L7,3 L7,6 L4,6 L4,8 L7,8 Z M16,1 L16,17 L12.5,14 L1,14 C0.45,14 0,13.55 0,13 L0,1 C0,0.45 0.45,0 1,0 L15,0 C15.55,0 16,0.45 16,1 Z" transform="translate(1 1)"/>
</g><g transform="translate(500,18)"><path fill="#000000" fill-rule="evenodd" d="M2,11.1724719 L2,8 L4,8 L4,5 L5,5 L5,6 L13,6 L13,5 L14,5 L14,15 L13,15 L13,17 L6.31048584,17 L9.5,17 C10.88,17 12,15.88 12,14.5 C12,13.18 10.975,12.11 9.675,12.02 C9.335,10.295 7.82,9 6,9 C4.555,9 3.3,9.82 2.675,11.02 C2.44084231,11.0448938 2.21479402,11.0967787 2,11.1724719 L2,4.00684547 C2,3.44994876 2.4476813,2.99926779 2.99992417,2.99836457 L7.0005835,2.99182129 C7.00058365,2.99182129 7,0.991821289 9,0.991821289 C11,0.991821289 11.0394287,2.99182129 11,3 L15.0001925,3 C15.5562834,3 16,3.44510135 16,3.99416169 C16,3.99416169 16,3.66307129 16,4.49182129 L16,15.9975471 C16,16.5548273 15.551657,17 14.9985978,17 C14.9985978,17 15.32875,17 14.5,17 L3.55749512,17 C2.72874512,17 2.99935535,17 2.99935535,17 C2.99905582,17 2.99875633,16.9999999 2.99845687,16.9999996 C1.34416402,16.9991639 0,15.6544856 0,14 C0,12.6953811 0.834249959,11.5832815 2,11.1724719 Z M8,3 L8,4 L10,4 L10,3 L8,3 Z" transform="translate(1)"/>
</g><g transform="translate(36,252)"><path fill="#000000" fill-rule="evenodd" d="M6,5 L6,2 L5,2 L5,5 L2,5 L2,6 L5,6 L5,12 L6,12 L6,6 L12,6 L12,5 L6,5 Z M0,1.00684547 C0,0.450780073 0.449948758,0 1.00684547,0 L12.9931545,0 C13.5492199,0 14,0.449948758 14,1.00684547 L14,12.9931545 C14,13.5492199 13.5500512,14 12.9931545,14 L1.00684547,14 C0.450780073,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M2,2 L12,2 L12,12 L2,12 L2,2 Z" transform="translate(2 2)"/>
</g><g transform="translate(572,54)"><path fill="#000000" fill-rule="evenodd" d="M9,14 L18,14 L18,12 L9,12 L9,14 L9,14 Z M9,2 L9,4 L18,4 L18,2 L9,2 L9,2 Z M7.5,4 L4,0.5 L0.5,4 L3,4 L3,12 L0.5,12 L4,15.5 L7.5,12 L5,12 L5,4 L7.5,4 L7.5,4 Z M9,9 L18,9 L18,7 L9,7 L9,9 L9,9 Z" transform="translate(0 1)"/>
</g><g transform="translate(162,90)"><g fill="none" fill-rule="evenodd" transform="translate(0 1)">
<polygon fill="#4285F4" points="4.71 16 15.24 16 17.85 11 7.29 11"/>
<polygon fill="#0F9D58" points="5.63 1.45 .14 11.45 2.8 16 8.28 6.02 5.63 1.45"/>
<polygon fill="#FFC107" points="17.86 10 11.97 0 6.71 0 12.6 10"/>
</g>
</g><g transform="translate(464,292)"><path fill="#000000" fill-rule="evenodd" d="M1.9,4 C1.9,2.84 2.84,1.9 4,1.9 L8,1.9 L8,0 L4,0 C1.79,0 0,1.79 0,4 C0,6.21 1.79,8 4,8 L8,8 L8,6.1 L4,6.1 C2.84,6.1 1.9,5.16 1.9,4 L1.9,4 Z M14,0 L10,0 L10,1.9 L14,1.9 C15.16,1.9 16.1,2.84 16.1,4 C16.1,5.16 15.16,6.1 14,6.1 L10,6.1 L10,8 L14,8 C16.21,8 18,6.21 18,4 C18,1.79 16.21,0 14,0 L14,0 Z M6,5 L12,5 L12,3 L6,3 L6,5 L6,5 Z" transform="translate(0 5)"/>
</g><g transform="translate(500,54)"><path fill="#000000" fill-rule="evenodd" d="M4,3 L12.0037973,3 C14.2108391,3 16,4.79535615 16,7 C16,8.62283851 15.0346747,10.0199573 13.6472354,10.6472354 L11.9999825,8.99998249 C13.1026715,8.99540428 14,8.1017358 14,7 C14,5.88772964 13.1007504,5 11.9914698,5 L8,5 L8,5 L9,5 L9,3 L6,3 L4,3 L5,4 L13.5,12.5 L12.5,13.5 L10,11 L3.99620271,11 C1.78916089,11 8.8817842e-16,9.20464385 8.8817842e-16,7 C8.8817842e-16,5.37716149 0.965325286,3.98004273 2.3527646,3.3527646 L0.5,1.5 L1.5,0.5 L4,3 Z M8,9 L4.0085302,9 C2.8992496,9 2,8.11227036 2,7 C2,5.8982642 2.8973285,5.00459572 4.00001767,5.00001767 L5,6 L5,8 L7,8 L8,9 L7,9 L7,11 L9,11 L9,10 L10,11 Z M9,6 L11,6 L11,8 L9,6 Z" transform="translate(1 2)"/>
</g><g transform="translate(180,270)"><polygon fill="#000000" fill-rule="evenodd" points="11.53 1.53 10.47 .47 6 4.94 1.53 .47 .47 1.53 4.94 6 .47 10.47 1.53 11.53 6 7.06 10.47 11.53 11.53 10.47 7.06 6" transform="translate(3 3)"/>
</g><g transform="translate(346,0)"><path fill="#000000" fill-rule="evenodd" d="M11.535,13 L10.49,13 L11,13 L11,11.6376102 L11,10 L8,10 L8,8 L11,8 L11,5 L13,5 L13,8 L16,8 L16,10 L13,10 L13,13 L11.535,13 Z M7,8 L7,10 L3.215,10 L2.09,13 L0,13 L5.11,0 L6.965,0 L9.71384615,7 L7.73033937,7 L6.035,2.475 L3.965,8 L3.965,8 L7,8 Z" transform="translate(1 2)"/>
</g><g transform="translate(54,342)"><path fill="#000000" fill-rule="evenodd" d="M8,6 L8,0 L0,0 L0,14 L8,14 L8,8 L10,8 L10,10.5 L13.5,7 L10,3.5 L10,6 L8,6 Z M6,6 L6,2 L2,2 L2,12 L6,12 L6,8 L5,8 L5,6 L6,6 Z M8,6 L8,4 L6,4 L6,6 L8,6 Z M8,8 L8,10 L6,10 L6,8 L8,8 Z" transform="translate(2 2)"/>
</g><g transform="translate(216,288)"><path fill="#000000" fill-rule="evenodd" d="M11.5656391,4.43436088 L9,7 L16,7 L16,0 L13.0418424,2.95815758 C11.5936787,1.73635959 9.72260775,1 7.67955083,1 C4.22126258,1 1.25575599,3.10984908 0,6 L2,7 C2.93658775,4.60974406 5.12943697,3.08011229 7.67955083,3 C9.14881247,3.0528747 10.4994783,3.57862053 11.5656391,4.43436088 Z" transform="matrix(-1 0 0 1 17 5)"/>
</g><g transform="translate(54,234)"><polygon fill="#4285F4" fill-opacity=".78" fill-rule="evenodd" points="0 0 6 6 12 0" transform="translate(3 7)"/>
</g><g transform="translate(54,324)"><path fill="#673AB7" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M3,4 L5,4 L5,6 L3,6 L3,4 L3,4 Z M3,7 L5,7 L5,9 L3,9 L3,7 L3,7 Z M3,10 L5,10 L5,12 L3,12 L3,10 L3,10 Z M13,12 L6,12 L6,10 L13,10 L13,12 L13,12 Z M13,9 L6,9 L6,7 L13,7 L13,9 L13,9 Z M13,6 L6,6 L6,4 L13,4 L13,6 L13,6 Z" transform="translate(1 1)"/>
</g><g transform="translate(536,130)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000000" d="M15.4998938,16 C16.604522,16 17.0549708,15.2146543 16.5166382,14.2646557 L9.98336176,2.73534428 C9.44026606,1.7769401 8.55497079,1.78534566 8.01663824,2.73534428 L1.48336176,14.2646557 C0.940266055,15.2230599 1.39005841,16 2.50010618,16 L15.4998938,16 Z M10,14 L8,14 L8,12 L10,12 L10,14 L10,14 Z M10,11 L8,11 L8,7 L10,7 L10,11 L10,11 Z"/>
</g>
</g><g transform="translate(428,220)"><path fill="#F4B400" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 Z M14,12 L2,12 L2,4 L14,4 L14,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(238,144)"><path fill="#000000" fill-rule="evenodd" d="M13,3 L14.9975267,3 C15.5511774,3 16,3.4463114 16,3.99754465 L16,12 L5.00247329,12 C4.44882258,12 4,11.5536886 4,11.0024554 L4,10 L13,10 L13,3 Z M13,12 L16,12 L16,15 L13,12 Z M0,0.997544646 C0,0.446615951 0.455760956,0 1.00247329,0 L10.9975267,0 C11.5511774,0 12,0.446311399 12,0.997544646 L12,8.00245535 C12,8.55338405 11.544239,9 10.9975267,9 L0,9 L0,0.997544646 Z M3,9 L0,9 L0,12 L3,9 Z" transform="translate(1 2)"/>
</g><g transform="translate(36,126)"><path fill="#010101" fill-rule="evenodd" d="M2,4 L2,6 L13,6 L13,7 L2,7 L2,9 L13,9 L13,10 L2,10 L2,12 L14,12 L14,14 L0,14 L0,13 L0,0 L2,0 L2,3 L13,3 L13,4 L2,4 Z" transform="translate(2 2)"/>
</g><g transform="translate(126,90)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L2,0 L2,14 L0,14 L0,0 Z M12,0 L14,0 L14,14 L12,14 L12,0 Z M4,3 L4,5 L7.75,5 C8.58,5 9.25,5.67 9.25,6.5 C9.25,7.33 8.58,8 7.75,8 L6,8 L6,6 L3,9 L6,12 L6,10 L7.5,10 C9.43,10 11,8.43 11,6.5 C11,4.57 9.43,3 7.5,3 L4,3 Z" transform="translate(2 2)"/>
</g><g transform="translate(518,220)"><path fill="#000000" fill-rule="evenodd" d="M14.4926407,0.219669914 L5.11350781,3.58839515 L6.52772138,5.00260871 L7.73977093,4.49766594 L11.2753048,8.03319985 L10.7803301,9.23528137 L12.1845756,10.659463 L15.5533009,1.28033009 L14.4926407,0.219669914 Z M13.6087572,2.16421356 L12.0884776,6.3290725 L9.44389827,3.68449314 L13.6087572,2.16421356 Z M12,11.7573593 L10.5857864,13.1715729 L2.10050506,4.6862915 L0.686291501,6.10050506 L9.17157288,14.5857864 L7.75735931,16 L12,16 L12,11.7573593 Z" transform="translate(1 1)"/>
</g><g transform="translate(144,36)"><defs>
<polygon id="shapes_arrow_a" points="17 9 9 2 9.062 6 1 6.021 1 12 9.062 12 9.062 16"/>
<mask id="shapes_arrow_b" width="16" height="14" x="0" y="0" fill="white">
<use xlink:href="#shapes_arrow_a"/>
</mask>
</defs>
<use fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="2" mask="url(#shapes_arrow_b)" xlink:href="#shapes_arrow_a"/>
</g><g transform="translate(518,184)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M6,13 L6,10 L2,10 L2,6 L6,6 L6,3 L11,8 L6,13 L6,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(428,54)"><path fill="#000000" fill-rule="evenodd" d="M2.5180432,3.93225676 C2.35281657,3.97644275 2.17915933,4 2,4 C0.8954305,4 0,3.1045695 0,2 C0,0.8954305 0.8954305,0 2,0 C3.1045695,0 4,0.8954305 4,2 C4,2.17915933 3.97644275,2.35281657 3.93225676,2.5180432 L11.4819568,10.0677432 C11.6471834,10.0235573 11.8208407,10 12,10 C13.1045695,10 14,10.8954305 14,12 C14,13.1045695 13.1045695,14 12,14 C10.8954305,14 10,13.1045695 10,12 C10,11.8208407 10.0235573,11.6471834 10.0677432,11.4819568 L2.5180432,3.93225676 Z" transform="translate(2 2)"/>
</g><g transform="translate(90,324)"><!-- Generator: Sketch 45.1 (43504) - http://www.bohemiancoding.com/sketch -->
<title>Artboard 2</title>
<desc>Created with Sketch.</desc>
<defs/>
<g id="Page-2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Artboard-2">
<g id="ic_animation_black_24dp">
<polygon id="Shape" points="0 0 18 0 18 18 0 18"/>
<path d="M11.7428571,1.71428571 C9.65228571,1.71428571 7.84714286,2.90228571 6.94457143,4.63028571 C5.95714286,5.14714286 5.13942857,5.95714286 4.63028571,6.94457143 C2.90228571,7.84714286 1.71428571,9.65228571 1.71428571,11.7428571 C1.71428571,14.7282857 4.12885714,17.1428571 7.11428571,17.1428571 C9.20485714,17.1428571 11.01,15.9548571 11.9125714,14.2268571 C12.9,13.71 13.7177143,12.9 14.2268571,11.9125714 C15.9548571,11.01 17.1428571,9.20485714 17.1428571,7.11428571 C17.1428571,4.12885714 14.7282857,1.71428571 11.7428571,1.71428571 Z M7.11428571,15.6 C4.98514286,15.6 3.25714286,13.872 3.25714286,11.7428571 C3.25714286,10.8788571 3.54257143,10.0765714 4.02857143,9.42857143 C4.02857143,12.414 6.44314286,14.8285714 9.42857143,14.8285714 C8.78057143,15.3145714 7.97828571,15.6 7.11428571,15.6 Z M9.42857143,13.2857143 C7.29942857,13.2857143 5.57142857,11.5577143 5.57142857,9.42857143 C5.57142857,8.56457143 5.85685714,7.76228571 6.34285714,7.11428571 C6.34285714,10.092 8.75742857,12.5065714 11.7428571,12.5142857 C11.0948571,13.0002857 10.2925714,13.2857143 9.42857143,13.2857143 Z M11.7369872,10.9965443 C9.60123686,10.9965443 7.86986908,9.26517657 7.86986908,7.12942618 C7.86986908,4.99367579 9.60123686,3.26230801 11.7369872,3.26230801 C13.8727376,3.26230801 15.6041054,4.99367579 15.6041054,7.12942618 C15.6041054,9.26517657 13.8727376,10.9965443 11.7369872,10.9965443 Z" id="Combined-Shape" fill="#000000" fill-rule="nonzero"/>
<polygon id="Shape" points="0 0 18 0 18 18 0 18"/>
</g>
</g>
</g>
</g><g transform="translate(234,72)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path fill-opacity=".38" d="M0,1.00684547 C0,0.450780073 0.449948758,0 1.00684547,0 L12.9931545,0 C13.5492199,0 14,0.449948758 14,1.00684547 L14,12.9931545 C14,13.5492199 13.5500512,14 12.9931545,14 L1.00684547,14 C0.450780073,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M1,1 L13,1 L13,13 L1,13 L1,1 Z"/>
<polygon points="3 5 7 9 11 5"/>
</g>
</g><g transform="translate(572,72)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00247329 C0,0.448822582 0.444630861,0 1.00087166,0 L14.9991283,0 C15.5518945,0 16,0.455760956 16,1.00247329 L16,10.9975267 C16,11.5511774 15.5553691,12 14.9991283,12 L1.00087166,12 C0.448105505,12 0,11.544239 0,10.9975267 L0,1.00247329 Z M8,9 L1,4 L1,2 L8,7 L15,2 L15,4 L8,9 Z" transform="translate(1 3)"/>
</g><g transform="translate(536,220)"><path fill="#000000" fill-rule="evenodd" d="M0,0.995397568 C0,0.445654671 0.455760956,0 1.00247329,0 L10.9975267,0 C11.5511774,0 12,0.455664396 12,0.995397568 L12,9.00460243 C12,9.55434533 11.544239,10 10.9975267,10 L1.00247329,10 C0.448822582,10 0,9.5443356 0,9.00460243 L0,0.995397568 Z M2,2 L4,2 L4,4 L2,4 L2,2 Z M5,2 L10,2 L10,4 L5,4 L5,2 Z M2,5 L4,5 L4,8 L2,8 L2,5 Z M5,5 L10,5 L10,8 L5,8 L5,5 Z M3,14 L11,14 L11,12 L3,12 L3,10.5 L0.5,13 L3,15.5 L3,14 Z" transform="translate(3 1)"/>
</g><g transform="translate(328,18)"><path fill="#000000" fill-rule="evenodd" d="M0,5 L14,5 L14,13 L0,13 L0,5 Z M2,5 L12,5 L12,11 L2,11 L2,5 Z M3.5,5 L6,5 L6,0 L8,0 L8,5 L10.5,5 L7,8.5 L3.5,5 L3.5,5 Z" transform="translate(2 2)"/>
</g><g transform="translate(500,148)"><path fill="#000000" fill-rule="evenodd" d="M0,5.00218626 C0,2.23955507 2.22898489,0 5.00218626,0 L12,0 L12,12 L0,12 L0,5.00218626 Z M2,5.00032973 C2,3.34329338 3.3486445,2 5.00032973,2 L12,2 L12,12 L2,12 L2,5.00032973 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z M8,5 L12,5 L12,7 L8,7 L8,5 Z M7,8 L7,12 L5,12 L5,8 L7,8 Z" transform="translate(3 3)"/>
</g><g transform="translate(72,90)"><path fill="#000000" fill-rule="evenodd" d="M6,10.5 C3.51,10.5 1.5,8.49 1.5,6 C1.5,3.51 3.51,1.5 6,1.5 C7.24,1.5 8.36,2.02 9.17,2.83 L7,5 L12,5 L12,0 L10.24,1.76 C9.15,0.68 7.66,0 6,0 C2.69,0 0.01,2.69 0.01,6 C0.01,9.31 2.69,12 6,12 C8.97,12 11.43,9.84 11.9,7 L10.38,7 C9.92,9 8.14,10.5 6,10.5 L6,10.5 Z" transform="matrix(-1 0 0 1 15.01 3)"/>
</g><g transform="translate(364,184)"><path fill="#000000" fill-rule="evenodd" d="M13.9291111,8 C13.4905984,11.0656912 11.0656912,13.4905984 8,13.9291111 L8,8 L13.9291111,8 Z M13.9291111,6 C13.4905984,2.93430884 11.0656912,0.509401622 8,0.0708888585 L8,6 L13.9291111,6 Z M6,0.0708888585 C2.60770586,0.556118519 8.8817842e-16,3.47352809 8.8817842e-16,7 C8.8817842e-16,10.5264719 2.60770586,13.4438815 6,13.9291111 L6,0.0708888585 Z" transform="translate(2 2)"/>
</g><g transform="translate(428,292)"><path fill="#000000" fill-rule="evenodd" d="M10.75,17 L1.55749512,17 C0.728745117,17 0.999355351,17 0.999355351,17 C0.441480327,17 2.84217094e-14,16.5492199 2.84217094e-14,15.9931545 L2.84217094e-14,4.00684547 C2.84217094e-14,3.44994876 0.445472655,2.99927141 0.994991023,2.99837264 C0.994991023,2.99837264 1.92481493,2.99685187 2.38726031,2.99609551 L5.0005835,2.99182129 C5.00058365,2.99182129 5,0.991821289 7,0.991821289 C9,0.991821289 9.03942871,2.99182129 9,3 L13.0001925,3 C13.5562834,3 14,3.44510135 14,3.99416169 C14,3.99416169 14,3.66307129 14,4.49182129 L14,6 L12,6 L12,5 L11,5 L11,6 L3,6 L3,5 L2,5 L2,15 L9,15 L9,17 L10.75,17 Z M6,3 L8,3 L8,4 L6,4 L6,3 Z M14,7 L12,7 C10.895,7 10,7.895 10,9 L10,17 L12,17 L12,15 L14,15 L14,17 L16,17 L16,9 C16,7.895 15.105,7 14,7 Z M12,13 L14,13 L14,9 L12,9 L12,13 Z" transform="translate(1)"/>
</g><g transform="translate(482,18)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M2.5,12 L5.25,8.46 L7.21,10.82 L9.96,7.28 L13.5,12 L2.5,12 L2.5,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(198,36)"><path fill="#000000" fill-rule="evenodd" d="M4,14 C4,14.5 4.5,15 5,15 L7,15 C7.5,15 8,14.5 8,14 L8,13 L4,13 L4,14 Z M6,0.5 C3.0975,0.5 0.75,2.8475 0.75,5.75 C0.75,7.535 1.6425,9.1025 3,10.055 L3,11 C3,11.5 3.5,12 4,12 L8,12 C8.5,12 9,11.5 9,11 L9,10.055 C10.3575,9.1025 11.25,7.535 11.25,5.75 C11.25,2.8475 8.9025,0.5 6,0.5 Z" transform="translate(3 1)"/>
</g><g transform="translate(36,198)"><path fill="#000000" fill-rule="evenodd" d="M10.2675644,11 L8,11 L8,1 L3.73243561,1 C3.38662619,0.40219863 2.74028236,0 2,0 C0.8954305,0 0,0.8954305 0,2 C0,3.1045695 0.8954305,4 2,4 C2.74028236,4 3.38662619,3.59780137 3.73243561,3 L6,3 L6,13 L10.2675644,13 C10.6133738,13.5978014 11.2597176,14 12,14 C13.1045695,14 14,13.1045695 14,12 C14,10.8954305 13.1045695,10 12,10 C11.2597176,10 10.6133738,10.4021986 10.2675644,11 Z" transform="translate(2 2)"/>
</g><g transform="translate(216,252)"><path fill="#000000" fill-rule="evenodd" d="M1.00684547,0 C0.450780073,0 1.57717987e-15,0.447449351 1.57717987e-15,1.0068708 C1.57717987e-15,1.0068708 1.57717987e-15,0.795555556 1.57717987e-15,1.77777778 L1.57717987e-15,12.4444444 C1.57717987e-15,13.4266667 -1.20058952e-09,12.9909959 -1.20058952e-09,12.9909959 C-6.73340566e-09,13.5482535 0.443716635,14 0.999807483,14 L5,14 L7,16 L9,14 L12.1307373,14 L12.9927192,14 C13.549025,14 14,13.5505095 14,12.9998043 L14,1.77777778 C14,0.795555556 14,1.0068708 14,1.0068708 C14,0.45079141 13.5500512,0 12.9931545,0 L1.00684547,0 Z M7,12 L5.796875,8.375 L2.625,7 L5.796875,5.625 L7,2 L8.203125,5.625 L11.375,7 L8.203125,8.375 L7,12 Z" transform="translate(2 1)"/>
</g><g transform="translate(500,274)"><defs>
<path id="dogfood_white_path_1" d="m5.2737 8.6798c-0.7035 0-1.2737-0.5641-1.2737-1.26 0-0.6958 0.5702-1.2599 1.2737-1.2599 0.7034 0 1.2736 0.5641 1.2736 1.2599 0 0.6959-0.5702 1.26-1.2736 1.26zm2.0887-2.1599c-0.7034 0-1.2736-0.5641-1.2736-1.26 0-0.6958 0.5702-1.2599 1.2736-1.2599 0.7035 0 1.2737 0.5641 1.2737 1.2599 0 0.6959-0.5702 1.26-1.2737 1.26zm3.0936 0c-0.7038 0-1.274-0.5641-1.274-1.26 0-0.6958 0.5702-1.2599 1.274-1.2599 0.703 0 1.273 0.5641 1.273 1.2599 0 0.6959-0.57 1.26-1.273 1.26zm2.27 2.1599c-0.703 0-1.273-0.5641-1.273-1.26 0-0.6958 0.57-1.2599 1.273-1.2599 0.704 0 1.274 0.5641 1.274 1.2599 0 0.6959-0.57 1.26-1.274 1.26zm-2.35-0.684c0.407 0.468 0.786 0.9648 1.23 1.4039 0.669 0.6773 1.484 1.3533 1.28 2.3683-0.116 0.576-0.502 1.023-1.113 1.21-0.342 0.108-1.616-0.216-2.9113-0.216-1.2955 0-2.4527 0.317-2.7947 0.216-0.6114-0.187-1.0044-0.634-1.1209-1.21-0.2037-1.015 0.6041-1.691 1.2737-2.3683 0.4367-0.4391 0.8006-0.9359 1.2081-1.4039 0.2548-0.288 0.495-0.5472 0.888-0.6768 0.1746-0.0504 0.3566-0.0792 0.5385-0.0792 0 0 0.4294 0.0216 0.6041 0.0792 0.393 0.1296 0.6625 0.3888 0.9175 0.6768z"/>
</defs>
<g fill-rule="evenodd" fill="none">
<polygon points="0 0 18 0 18 18 0 18"/>
<mask fill="white">
<use xlink:href="#dogfood_white_path_1"/>
</mask>
<use xlink:href="#dogfood_white_path_1" fill-rule="nonzero" fill="#ffffff"/>
</g>
</g><g transform="translate(202,360)"><path fill="#000000" fill-rule="evenodd" d="M14.53125,-1.95399252e-13 L2.50909424,-1.95399252e-13 C2.17272949,-1.95399252e-13 2,-1.9485927e-13 1,-1.95126228e-13 C2.84217094e-14,-1.95399252e-13 2.84217094e-14,1.00134277 2.84217094e-14,1.00134277 L2.84217094e-14,4 L2.00195313,4 L2.00195313,2 L14,2 L14,12 L10,12 L10,13.9900513 L14.9996948,13.9900513 C16,13.9900513 16,12.9960327 16,12.9960327 L16,1.00134277 C16,1.00134277 16,-1.95399252e-13 14.9996948,-1.95399252e-13 L14.53125,-1.95399252e-13 Z M0.00390625,8 C3.73140625,7.99456787 6.02288818,10.256936 6,14 L8,14 C8,9.42818604 4.56015625,6.00061035 0.00390625,6.00061035 L0.00390625,8 Z M0.00341796875,14 L2.00366211,14 C2.00366211,12.7533179 1.24125,12 0,12 L0.00341796875,14 Z M0,11 C2.07,10.9772339 3.02642822,12.18 3,14 L5,14 C4.97491455,11.35125 2.89875,9 0,9 L0,11 Z" transform="translate(1 2)"/>
</g><g transform="translate(500,130)"><path fill="#000000" fill-rule="evenodd" d="M9.5,3 L7,3 L7,0 L5,0 L5,3 L2.5,3 L6,6.5 L9.5,3 L9.5,3 Z M0,8 L0,10 L12,10 L12,8 L0,8 L0,8 Z M2.5,15 L5,15 L5,18 L7,18 L7,15 L9.5,15 L6,11.5 L2.5,15 L2.5,15 Z" transform="translate(3)"/>
</g><g transform="translate(198,144)"><defs><linearGradient id="a" x1="50.004%" x2="50.004%" y1="8.586%" y2="100.013%"><stop stop-color="#3E2723" stop-opacity=".2" offset="0%"/><stop stop-color="#3E2723" stop-opacity=".02" offset="100%"/></linearGradient><radialGradient id="b" cx="3.168%" cy="2.718%" r="161.248%" fx="3.168%" fy="2.718%" gradientTransform="matrix(1 0 0 .72222 0 .008)"><stop stop-color="#FFF" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#DB4437" d="M9.5 2H24l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5v-31C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="#3E2723" fill-opacity=".2" d="M7 35c0 1.3807119 1.11928813 2.5 2.5 2.5h21c1.3807119 0 2.5-1.1192881 2.5-2.5v.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5V35z"/><path fill="#FFF" fill-opacity=".2" d="M9.5 2H24v.5H9.5C8.11928813 2.5 7 3.61928813 7 5v-.5C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="url(#a)" fill-rule="nonzero" d="M17.5 8l8.5 8.5V9" transform="translate(7 2)"/><path fill="#EDA29B" d="M24 2l9 9h-6.5C25.1192881 11 24 9.88071187 24 8.5V2z"/><path fill="#F1F1F1" fill-rule="nonzero" d="M22 22c0-2.7613636-2.2386364-5-5-5-2.76136364 0-5 2.2386364-5 5s2.23863636 5 5 5c2.7613636 0 5-2.2386364 5-5zm-5 3c-1.6542857 0-3-1.3457143-3-3s1.3457143-3 3-3 3 1.3457143 3 3-1.3457143 3-3 3zm6.5-1c-.5 2-2 3.5-3.5 4v4h8v-8h-4.5z"/><path fill="url(#b)" fill-opacity=".1" d="M2.5 0H17l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C1.11928813 36 0 34.8807119 0 33.5v-31C0 1.11928813 1.11928813 0 2.5 0z" transform="translate(7 2)"/></g></g><g transform="translate(126,252)"><path fill="#000000" fill-rule="evenodd" d="M6.25,3.52085955e-16 L2,9.01409691 L4,9.01409691 L4.5,7.8 L9.5,7.8 L10,9 L12,9.01409691 L7.75,2.60237445e-16 L6.25,3.52085955e-16 Z M7,2 L8.87,6.02 L5.13,6.02 L7,2 Z M12,10 L12,12 L0,12 L0,14 L12,14 L12,16 L15,13 L12,10 Z" transform="translate(2 1)"/>
</g><g transform="translate(108,342)"><polygon fill="#000000" fill-rule="evenodd" points="0 0 0 1 6 7 6 12 8 11 8 7 14 1 14 0" transform="translate(2 3)"/>
</g><g transform="translate(464,202)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.449948758,0 1.00684547,0 L12.9931545,0 C13.5492199,0 14,0.449948758 14,1.00684547 L14,12.9931545 C14,13.5492199 13.5500512,14 12.9931545,14 L1.00684547,14 C0.450780073,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M2,2 L12,2 L12,12 L2,12 L2,2 Z M2,10.5 L5,7.5 L7.02877192,9.5 L12,4.5 L12,3 L7,8 L5,6 L2,9 L2,10.5 Z" transform="translate(2 2)"/>
</g><g transform="translate(162,306)"><path fill="#000000" fill-rule="evenodd" d="M1.00684547,0 C0.450780073,0 -1.97553381e-15,0.447449351 -1.97553381e-15,1.0068708 C-1.97553381e-15,1.0068708 -1.97553381e-15,0.795555556 -1.97553381e-15,1.77777778 L-1.97553381e-15,12.4444444 C-1.97553381e-15,13.4266667 -1.20059307e-09,12.9909959 -1.20059307e-09,12.9909959 C-6.73340922e-09,13.5482535 0.443716635,14 0.999807483,14 L5,14 L7,16 L9,14 L12.1307373,14 L12.9927192,14 C13.549025,14 14,13.5505095 14,12.9998043 L14,1.77777778 C14,0.795555556 14,1.0068708 14,1.0068708 C14,0.45079141 13.5500512,0 12.9931545,0 L1.00684547,0 Z M7,12 L5.796875,8.375 L2.625,7 L5.796875,5.625 L7,2 L8.203125,5.625 L11.375,7 L8.203125,8.375 L7,12 Z" transform="translate(2 1)"/>
</g><g transform="translate(18,342)"><path fill="#000000" fill-rule="evenodd" d="M10,7 L10,5 L9,5 L9,7 L7,7 L7,8 L9,8 L9,10 L10,10 L10,8 L12,8 L12,7 L10,7 Z M13,2 L8,2 L6,0 L1,0 C0.45,0 0,0.45 0,1 L0,11 C0,11.55 0.45,12 1,12 L13,12 C13.55,12 14,11.55 14,11 L14,3 C14,2.45 13.55,2 13,2 Z M13,11 L1,11 L1,3 L13,3 L13,11 Z" transform="translate(2 3)" opacity=".38"/>
</g><g transform="translate(36,144)"><path fill="#000000" fill-rule="evenodd" d="M8,4.25 C5.93,4.25 4.25,5.93 4.25,8 C4.25,10.07 5.93,11.75 8,11.75 C10.07,11.75 11.75,10.07 11.75,8 C11.75,5.93 10.07,4.25 8,4.25 L8,4.25 Z M8,0.5 C3.86,0.5 0.5,3.86 0.5,8 C0.5,12.14 3.86,15.5 8,15.5 C12.14,15.5 15.5,12.14 15.5,8 C15.5,3.86 12.14,0.5 8,0.5 L8,0.5 Z M8,14 C4.685,14 2,11.315 2,8 C2,4.685 4.685,2 8,2 C11.315,2 14,4.685 14,8 C14,11.315 11.315,14 8,14 L8,14 Z" transform="translate(1 1)"/>
</g><g transform="translate(518,54)"><defs><linearGradient id="a" x1="50.005%" x2="50.005%" y1="8.586%" y2="100.014%"><stop stop-opacity=".2" offset="0%"/><stop stop-opacity=".02" offset="100%"/></linearGradient><radialGradient id="b" cx="3.168%" cy="2.718%" r="161.248%" fx="3.168%" fy="2.718%" gradientTransform="matrix(1 0 0 .72222 0 .008)"><stop stop-color="#FFF" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#90A4AE" d="M9.5 2H24l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5v-31C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="#000" fill-opacity=".1" d="M7 35c0 1.3807119 1.11928813 2.5 2.5 2.5h21c1.3807119 0 2.5-1.1192881 2.5-2.5v.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5V35z"/><path fill="#FFF" fill-opacity=".2" d="M9.5 2H24v.5H9.5C8.11928813 2.5 7 3.61928813 7 5v-.5C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="url(#a)" fill-rule="nonzero" d="M17.5 8l8.5 8.5V9" transform="translate(7 2)"/><path fill="#F1F1F1" d="M24 2l9 9h-6.5C25.1192881 11 24 9.88071187 24 8.5V2zm4.86 25l-5.89-10h-5.26l5.89 10h5.26zm-13.15 6h10.53l2.61-5H18.29l-2.58 5zm.92-14.55l-5.49 10L13.8 33l5.48-9.98-2.65-4.57z"/><path fill="url(#b)" fill-opacity=".1" d="M2.5 0H17l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C1.11928813 36 0 34.8807119 0 33.5v-31C0 1.11928813 1.11928813 0 2.5 0z" transform="translate(7 2)"/></g></g><g transform="translate(382,342)"><path fill="#16A764" fill-rule="evenodd" d="M15,0 L1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 L15,0 Z M12.4,13 L10.4,13 L8.2,9.2 L6,13 L4,13 L7.2,8 L4,3 L6,3 L8.2,6.8 L10.4,3 L12.4,3 L9.2,8 L12.4,13 L12.4,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(346,324)"><title>slide_18_18</title>
<desc>Created with Sketch.</desc>
<defs/>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="slide_18_18">
<g id="ic_drive_presentation_black_24dp">
<polygon id="Shape" points="0 0 18 0 18 18 0 18"/>
<path d="M14.25,2.25 L3.75,2.25 C2.925,2.25 2.2575,2.925 2.2575,3.75 L2.2575,14.25 C2.2575,15.075 2.925,15.75 3.75,15.75 L14.25,15.75 C15.075,15.75 15.75,15.075 15.75,14.25 L15.75,3.75 C15.75,2.925 15.075,2.25 14.25,2.25 L14.25,2.25 Z M14.25,12 L3.75,12 L3.75,6 L14.25,6 L14.25,12 L14.25,12 Z" id="Shape" fill="#000000" opacity="0.539999962"/>
</g>
</g>
</g>
</g><g transform="translate(216,90)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M6,14 L8,14 L8,12 L6,12 L6,14 L6,14 Z M3,2 L5,2 L5,0 L3,0 L3,2 L3,2 Z M6,11 L8,11 L8,9 L6,9 L6,11 L6,11 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M0,5 L2,5 L2,3 L0,3 L0,5 L0,5 Z M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M0,2 L2,2 L2,0 L0,0 L0,2 L0,2 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M6,2 L8,2 L8,0 L6,0 L6,2 L6,2 Z M9,2 L11,2 L11,0 L9,0 L9,2 L9,2 Z M6,5 L8,5 L8,3 L6,3 L6,5 L6,5 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z" opacity=".54"/>
<polygon points="0 8 14 8 14 6 0 6"/>
</g>
</g><g transform="translate(446,148)"><path fill="#4285F4" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M6,13 L6,10 L2,10 L2,6 L6,6 L6,3 L11,8 L6,13 L6,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(144,90)"><path fill="#000000" fill-rule="evenodd" d="M9.01902793,9.72705177 C8.06535219,10.5218555 6.83851442,11 5.5,11 C2.46243388,11 0,8.53756612 0,5.5 C0,2.46243388 2.46243388,0 5.5,0 C8.53756612,0 11,2.46243388 11,5.5 C11,6.83851442 10.5218555,8.06535219 9.72705177,9.01902793 L9.98,9.27 L10.77,9.27 L14.76,13.27 L13.27,14.76 L9.27,10.77 L9.27,9.98 L9.01902793,9.72705177 Z M5.5,9.5 C7.709139,9.5 9.5,7.709139 9.5,5.5 C9.5,3.290861 7.709139,1.5 5.5,1.5 C3.290861,1.5 1.5,3.290861 1.5,5.5 C1.5,7.709139 3.290861,9.5 5.5,9.5 Z M8,6 L6,6 L6,8 L5,8 L5,6 L3,6 L3,5 L5,5 L5,3 L6,3 L6,5 L8,5 L8,6" transform="translate(2 2)"/>
</g><g transform="translate(572,18)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L2,0 L2,14 L0,14 L0,0 Z M12,0 L14,0 L14,14 L12,14 L12,0 Z M4,6 L12,6 L12,8 L4,8 L4,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(388,280)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000" fill-opacity=".54" d="M2,16 L4,16 L4,14 L2,14 L2,16 L2,16 Z M8,16 L10,16 L10,14 L8,14 L8,16 L8,16 Z M5,16 L7,16 L7,14 L5,14 L5,16 L5,16 Z M2,13 L4,13 L4,11 L2,11 L2,13 L2,13 Z M2,7 L4,7 L4,5 L2,5 L2,7 L2,7 Z M2,10 L4,10 L4,8 L2,8 L2,10 L2,10 Z M14,10 L16,10 L16,8 L14,8 L14,10 L14,10 Z M14,13 L16,13 L16,11 L14,11 L14,13 L14,13 Z M14,7 L16,7 L16,5 L14,5 L14,7 L14,7 Z M11,16 L13,16 L13,14 L11,14 L11,16 L11,16 Z M14,16 L16,16 L16,14 L14,14 L14,16 L14,16 Z"/>
<polygon fill="#000" points="2 2 2 4 16 4 16 2"/>
</g>
</g><g transform="translate(554,112)"><path fill="#4285F4" fill-rule="evenodd" d="M0,0 L3,0 L3,12 L0,12 L0,0 Z M7,0 L10,0 L10,12 L7,12 L7,0 Z M3,4 L7,4 L7,7 L3,7 L3,4 Z" transform="translate(4 3)"/>
</g><g transform="translate(36,72)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L12,0 L12,12 L0,12 L0,0 Z M2,2 L12,2 L12,10 L2,10 L2,2 Z M8,5 L12,5 L12,7 L8,7 L8,5 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z" transform="translate(3 3)"/>
</g><g transform="translate(220,360)"><g fill="none" fill-rule="evenodd" transform="translate(0 1)">
<polygon fill="#4285F4" points="4.71 16 15.24 16 17.85 11 7.29 11"/>
<polygon fill="#0F9D58" points="5.63 1.45 .14 11.45 2.8 16 8.28 6.02 5.63 1.45"/>
<polygon fill="#FFC107" points="17.86 10 11.97 0 6.71 0 12.6 10"/>
</g>
</g><g transform="translate(162,54)"><path fill="#010101" fill-rule="evenodd" d="M2,4 L2,6 L13,6 L13,7 L2,7 L2,9 L13,9 L13,10 L2,10 L2,12 L14,12 L14,14 L0,14 L0,13 L0,0 L2,0 L2,3 L13,3 L13,4 L2,4 Z" transform="matrix(-1 0 0 1 16 2)"/>
</g><g transform="translate(144,306)"><defs>
<path id="custom_shape_tool_a" d="M-3.55271368e-15,7 L5,0 L14.4935615,0 C15.3255445,0 15.6658422,0.584776089 15.257005,1.30024119 L12,7 L15.257005,12.6997588 C15.6673498,13.4178622 15.3284594,14 14.4935615,14 L5,14 L-3.55271368e-15,7 Z"/>
<mask id="custom_shape_tool_b" width="15.431" height="14" x="0" y="0" fill="white">
<use xlink:href="#custom_shape_tool_a"/>
</mask>
</defs>
<use fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="4" mask="url(#custom_shape_tool_b)" xlink:href="#custom_shape_tool_a" transform="translate(1 2)" stroke-linecap="round" stroke-linejoin="bevel"/>
</g><g transform="translate(572,108)"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path d="M4.37811019,5.04508453 L0.877344389,8.56945101 C0.838009942,8.60878545 0.775074826,8.71105502 0.775074826,8.77399013 C0.775074826,8.89986036 0.853743721,8.97852926 0.979613952,8.97852926 L6.48643656,8.97852926 C7.38326196,8.97852926 8.05981445,8.30197676 8.05981445,7.40515137 L8.05981445,5.04508453 L4.37811019,5.04508453 Z M17.0794681,9.01671 L11.5726455,9.01671 C10.6758201,9.01671 9.99926758,9.69326249 9.99926758,10.5900879 L9.99926758,12.9501547 L13.6809718,12.9501547 L17.1817376,9.42578825 C17.2210721,9.38645381 17.2840072,9.28418424 17.2840072,9.22124913 C17.2840072,9.0953789 17.2053383,9.01671 17.0794681,9.01671 Z M9.48050682,0.95941242 C9.44117238,0.920077973 9.33890281,0.857142857 9.2759677,0.857142857 C9.15009747,0.857142857 9.07142857,0.935811752 9.07142857,1.06168198 L9.07142857,6.56850459 C9.07142857,7.46532999 9.74798106,8.14188248 10.6448065,8.14188248 L13.0048733,8.14188248 L13.0048733,4.46017822 L9.48050682,0.95941242 Z M5.06655528,10.0251329 L5.06655528,13.7068371 L8.59092175,17.2076029 C8.6302562,17.2469374 8.73252576,17.3098725 8.79546087,17.3098725 C8.92133111,17.3098725 9,17.2312036 9,17.1053334 L9,11.5985107 C9,10.7016853 8.32344751,10.0251329 7.42662211,10.0251329 L5.06655528,10.0251329 Z" fill="#000000"/>
</g>
</g><g transform="translate(292,126)"><path fill="#000000" fill-rule="evenodd" d="M9,0.75 C4.44375,0.75 0.75,4.44375 0.75,9 C0.75,13.55625 4.44375,17.25 9,17.25 C13.55625,17.25 17.25,13.55625 17.25,9 C17.25,4.44375 13.55625,0.75 9,0.75 L9,0.75 Z M9,14.625 C5.893125,14.625 3.375,12.106875 3.375,9 C3.375,5.893125 5.893125,3.375 9,3.375 C10.516875,3.375 11.7890625,3.9328125 12.763125,4.84125 L11.150625,6.45375 C10.5665625,5.8978125 9.8259375,5.6128125 8.9990625,5.6128125 C7.1634375,5.6128125 5.675625,7.1653125 5.675625,9.0009375 C5.675625,10.8365625 7.164375,12.388125 9,12.388125 C10.6659375,12.388125 11.80125,11.4328125 12.0309375,10.123125 L9,10.123125 L9,7.96875 L14.2978125,7.96875 C14.3634375,8.3390625 14.4009375,8.7253125 14.4009375,9.1275 C14.4009375,12.34125 12.2484375,14.625 9,14.625 L9,14.625 Z"/>
</g><g transform="translate(310,324)"><path fill="#000000" fill-rule="evenodd" d="M0,14 L10,14 L10,12 L0,12 L0,14 Z M10,4 L0,4 L0,6 L10,6 L10,4 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z M0,10 L14,10 L14,8 L0,8 L0,10 Z" transform="translate(2 2)"/>
</g><g transform="translate(216,198)"><path fill="#000000" fill-rule="evenodd" d="M7,0 L5,0 L0.5,12 L2.5,12 L3.62,9 L8.37,9 L9.49,12 L11.49,12 L7,0 L7,0 Z M4.38,7 L6,2.67 L7.62,7 L4.38,7 L4.38,7 Z" transform="translate(3 1)"/>
</g><g transform="translate(90,36)"><g fill="none" fill-rule="evenodd" transform="translate(0 2)">
<polygon fill="#4285F4" points="9.42 32 30.48 32 35.7 22 14.58 22"/>
<polygon fill="#0F9D58" points="11.26 2.9 .28 22.9 5.6 32 16.56 12.04 11.26 2.9"/>
<polygon fill="#FFC107" points="35.72 20 23.94 0 13.42 0 25.2 20"/>
</g>
</g><g transform="translate(90,252)"><path fill="#000000" fill-rule="evenodd" d="M0,6 C0,2.6862915 2.69303423,0 6,0 L12,0 L12,12 L6,12 C2.6862915,12 0,9.30696577 0,6 Z M2,6 C2,3.790861 3.7877996,2 6.009763,2 L12,2 L12,10 L6.009763,10 C3.79523205,10 2,8.20464385 2,6 Z M9,5 L12,5 L12,7 L9,7 L9,5 Z M5,4 L9,4 L9,8 L5,8 L5,4 Z" transform="translate(3 3)"/>
</g><g transform="translate(572,216)"><path fill="#000000" fill-rule="evenodd" d="M6,0.75875 L1.755,4.99625 C0.585,6.16625 0,7.72625 0,9.22625 C0,10.72625 0.585,12.30875 1.755,13.47875 C2.925,14.64875 4.4625,15.24125 6,15.24125 C7.5375,15.24125 9.075,14.64875 10.245,13.47875 C11.415,12.30875 12,10.72625 12,9.22625 C12,7.72625 11.415,6.16625 10.245,4.99625 L6,0.75875 Z M1.5,9 C1.5,8 1.965,7.04375 2.82,6.19625 L6,3 L9.18,6.23 C10.035,7.08125 10.5,8 10.5,9 L1.5,9 Z" transform="translate(3 1)"/>
</g><g transform="translate(274,0)"><path fill="#000000" fill-rule="evenodd" d="M1.32,2.91 C1.845,2.37375 2.37,1.89375 2.60625,1.99125 C2.9775,2.145 2.59875,2.77125 2.38125,3.135 C2.19375,3.45 0.23625,6.04875 0.23625,7.8675 C0.23625,8.8275 0.5925,9.6225 1.245,10.1025 C1.8075,10.51875 2.54625,10.64625 3.225,10.4475 C4.0275,10.21125 4.6875,9.40125 5.52,8.37375 C6.4275,7.25625 7.6425,5.79375 8.58,5.79375 C9.8025,5.79375 9.8175,6.55125 9.9,7.14 C7.0575,7.6275 5.86125,9.89625 5.86125,11.175 C5.86125,12.45375 6.94125,13.49625 8.265,13.49625 C9.48375,13.49625 11.48625,12.49875 11.7825,8.92125 L13.62375,8.92125 L13.62375,7.04625 L11.77125,7.04625 C11.65875,5.80875 10.95375,3.9 8.74875,3.9 C7.06125,3.9 5.61,5.3325 5.0475,6.03375 C4.6125,6.5775 3.50625,7.89 3.33375,8.0775 C3.1425,8.29875 2.8275,8.7075 2.4975,8.7075 C2.16375,8.7075 1.96125,8.08125 2.22375,7.26375 C2.48625,6.4425 3.27375,5.11875 3.61125,4.6275 C4.2,3.7725 4.5825,3.18375 4.5825,2.1675 C4.5825,0.5175 3.3525,0 2.7,0 C1.71,0 0.8475,0.75 0.65625,0.94125 C0.39,1.21125 0.165,1.4325 -8.8817842e-16,1.635 L1.32,2.91 L1.32,2.91 Z M8.2875,11.6625 C8.055,11.6625 7.73625,11.4675 7.73625,11.11875 C7.73625,10.66875 8.28,9.46875 9.8925,9.045 C9.66,11.06625 8.8125,11.6625 8.2875,11.6625 L8.2875,11.6625 Z" transform="translate(3 2)"/>
</g><g transform="translate(328,0)"><path fill="#000000" fill-rule="evenodd" d="M7,9 L4,9 L4,11.5 L0.5,8 L4,4.5 L4,7 L7,7 L7,4 L9,4 L9,7 L12,7 L12,9 L9,9 L9,12 L11.5,12 L8,15.5 L4.5,12 L7,12 L7,9 Z M12,11.5 L15.5,8 L12,4.5 L12,11.5 Z M4.5,4 L8,0.5 L11.5,4 L4.5,4 Z" transform="translate(1 1)"/>
</g><g transform="translate(454,342)"><path fill="#000000" fill-rule="evenodd" d="M1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L1,0 Z M2,6 L14,6 L14,14 L2,14 L2,6 Z M11,2 L14,2 L14,4 L11,4 L11,2 Z" transform="translate(1 1)"/>
</g><g transform="translate(90,270)"><path fill="#000000" fill-rule="evenodd" d="M4,8 L4,13 L6,13 L6,2 L8,2 L8,13 L10,13 L10,2 L12,2 L12,0 L4,0 C1.79,0 0,1.79 0,4 C0,6.21 1.79,8 4,8 L4,8 Z" transform="translate(3 3)"/>
</g><g transform="translate(198,216)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L0,14 L14,14 L14,0 L0,0 L0,0 Z M6,12 L2,12 L2,8 L6,8 L6,12 L6,12 Z M6,6 L2,6 L2,2 L6,2 L6,6 L6,6 Z M12,12 L8,12 L8,8 L12,8 L12,12 L12,12 Z M12,6 L8,6 L8,2 L12,2 L12,6 L12,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(36,162)"><polygon fill="#000000" fill-rule="evenodd" points="0 0 4 4 8 0" transform="translate(5 7)"/>
</g><g transform="translate(500,36)"><polygon fill="#000000" fill-rule="evenodd" points="7.53 1.53 6.47 .47 4 2.94 1.53 .47 .47 1.53 2.94 4 .47 6.47 1.53 7.53 4 5.06 6.47 7.53 7.53 6.47 5.06 4" transform="translate(5 5)"/>
</g><g transform="translate(328,36)"><defs><style>.cls-1{fill:none;}</style></defs><title>ic_process_1_18px</title><g id="Layer_2" data-name="Layer 2"><g id="icon"><polygon points="4 6 1 6 1 12 4 12 7 9 4 6"/><polygon points="9 6 6 6 9 9 6 12 9 12 12 9 9 6"/><polygon points="14 6 11 6 14 9 11 12 14 12 17 9 14 6"/><rect class="cls-1" width="18" height="18"/></g></g></g><g transform="translate(36,180)"><path fill="#000000" fill-rule="evenodd" d="M12.4444444,0 L1.55555556,0 C0.692222222,0 0,0.7 0,1.55555556 L0,12.4444444 C0,13.3 0.692222222,14 1.55555556,14 L12.4444444,14 C13.3077778,14 14,13.3 14,12.4444444 L14,1.55555556 C14,0.7 13.3077778,0 12.4444444,0 L12.4444444,0 Z M5.5,10.75 L1.75,7 L2.8075,5.9425 L5.5,8.6275 L11.1925,2.935 L12.25,4 L5.5,10.75 L5.5,10.75 Z" transform="translate(2 2)"/>
</g><g transform="translate(162,198)"><path fill="#000000" fill-rule="evenodd" d="M12.3621139,11.5 C13.3843213,10.2832329 14,8.71351616 14,7 C14,3.13400675 10.8659932,0 7,0 C3.13400675,0 0,3.13400675 0,7 C0,8.71351616 0.615678738,10.2832329 1.63788615,11.5 L0,11.5 L0,13.5 L4.00019251,13.5 C4.55628335,13.5 5,13.0522847 5,12.5 L5,11.5 L4.75,11.5 L4.76344287,11.4731143 C3.12485989,10.6522258 2,8.95747546 2,7 C2,4.23857625 4.23857625,2 7,2 C9.76142375,2 12,4.23857625 12,7 C12,8.95747546 10.8751401,10.6522258 9.23655713,11.4731143 L9.25,11.5 L9,11.5 L9,12.5 C9,13.0561352 9.44762906,13.5 9.99980749,13.5 L14,13.5 L14,11.5 L12.3621139,11.5 Z" transform="translate(2 2.5)"/>
</g><g transform="translate(472,324)"><defs><style>.cls-1{fill:none;}</style></defs><title>ic_timeline_1_18px</title><g id="Layer_2" data-name="Layer 2"><g id="icon"><path d="M15,7a2,2,0,0,0-1.72,1H10.72A2,2,0,0,0,7.28,8H4.72a2,2,0,1,0,0,2H7.28a2,2,0,0,0,3.45,0h2.55A2,2,0,1,0,15,7Z"/><rect class="cls-1" width="18" height="18"/></g></g></g><g transform="translate(292,144)"><path fill="#FFFFFF" fill-rule="evenodd" d="M0,1 C0,0.45 0.45,0 1,0 L15,0 C15.55,0 16,0.45 16,1 L16,12 C16,12.55 15.55,13 15,13 L3.5,13 L0,16 L0,1 Z M3,11 L3,8.53 L9.88,1.65 C10.08,1.45 10.39,1.45 10.59,1.65 L12.36,3.42 C12.56,3.62 12.56,3.93 12.36,4.13 L5.47,11 L3,11 Z M7.5,11 L9.5,9 L13,9 L13,11 L7.5,11 Z" transform="translate(1 1)"/>
</g><g transform="translate(238,396)"><path fill="#000000" fill-rule="evenodd" d="M10,7 L10,5 L9,5 L9,7 L7,7 L7,8 L9,8 L9,10 L10,10 L10,8 L12,8 L12,7 L10,7 Z M13,2 L8,2 L6,0 L1,0 C0.45,0 0,0.45 0,1 L0,11 C0,11.55 0.45,12 1,12 L13,12 C13.55,12 14,11.55 14,11 L14,3 C14,2.45 13.55,2 13,2 Z M13,11 L1,11 L1,3 L13,3 L13,11 Z" transform="translate(2 3)"/>
</g><g transform="translate(90,288)"><polygon fill="#000000" fill-rule="evenodd" points="12 5 3.125 5 7.06 1.06 6 0 0 6 6 12 7.06 10.94 3.125 7 12 7" transform="translate(3 3)"/>
</g><g transform="translate(446,18)"><path fill="#000000" fill-rule="evenodd" d="M8,0.5 C3.85625,0.5 0.5,3.85625 0.5,8 C0.5,12.14375 3.85625,15.5 8,15.5 C12.14375,15.5 15.5,12.14375 15.5,8 C15.5,3.85625 12.14375,0.5 8,0.5 Z M7.25,13.9475 C4.29125,13.58 2,11.06 2,8 C2,7.53875 2.05625,7.08875 2.1575,6.6575 L5.75,10.25 L5.75,11 C5.75,11.82875 6.42125,12.5 7.25,12.5 L7.25,13.9475 Z M12.42125,12.04625 C12.23,11.43875 11.6675,11 11,11 L10.25,11 L10.25,8.75 C10.25,8.3375 9.9125,8 9.5,8 L5,8 L5,6.5 L6.5,6.5 C6.9125,6.5 7.25,6.1625 7.25,5.75 L7.25,4.25 L8.75,4.25 C9.57875,4.25 10.25,3.57875 10.25,2.75 L10.25,2.43875 C12.4475,3.3275 14,5.48 14,8 C14,9.56 13.4,10.9775 12.42125,12.04625 Z" transform="translate(1 1)"/>
</g><g transform="translate(90,198)"><path fill="#000000" fill-rule="evenodd" d="M6,14 L8,14 L8,12 L6,12 L6,14 L6,14 Z M3,8 L5,8 L5,6 L3,6 L3,8 L3,8 Z M3,2 L5,2 L5,0 L3,0 L3,2 L3,2 Z M6,11 L8,11 L8,9 L6,9 L6,11 L6,11 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M0,5 L2,5 L2,3 L0,3 L0,5 L0,5 Z M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M0,2 L2,2 L2,0 L0,0 L0,2 L0,2 Z M0,8 L2,8 L2,6 L0,6 L0,8 L0,8 Z M6,8 L8,8 L8,6 L6,6 L6,8 L6,8 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z M12,8 L14,8 L14,6 L12,6 L12,8 L12,8 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M6,2 L8,2 L8,0 L6,0 L6,2 L6,2 Z M9,2 L11,2 L11,0 L9,0 L9,2 L9,2 Z M6,5 L8,5 L8,3 L6,3 L6,5 L6,5 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M9,8 L11,8 L11,6 L9,6 L9,8 L9,8 Z" transform="translate(2 2)" opacity=".54"/>
</g><g transform="translate(162,36)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000000" d="M4,4 L1,4 L1,6 L4,6 L4,12.0018986 C4,13.1054196 4.88665231,14 5.99797957,14 L11.9995124,14 L11.9995124,17 L13.9970343,17 L13.9970343,14 L17,14 L17,12.0193564 L6,12 L6,1 L4,1 L4,4 Z M7,6 L7,4 L11.9940809,4 C13.1019194,4 14,4.88655484 14,6.00591905 L14,11 L12,11 L12,6.00009578 L7,6 Z"/>
</g>
</g><g transform="translate(144,198)"><path fill="#FFFFFF" fill-rule="evenodd" d="M3,6.4375 L3,16.125 C3,16.60625 3.39375,17 3.875,17 L16.125,17 C16.60625,17 17,16.60625 17,16.125 L17,3.875 C17,3.39375 16.60625,3 16.125,3 L6.4375,3 L9,3 L9,5 L15,5 L15,15 L5,15 L5,9 L3,9 L3,6.4375 Z M6,14 L6,9 L8,9 L8,14 L6,14 Z M9,14 L9,6 L11,6 L11,14 L9,14 Z M5,3 L5,0 L3,0 L3,3 L0,3 L0,5 L3,5 L3,8 L5,8 L5,5 L8,5 L8,3 L5,3 Z M12,14 L12,10 L14,10 L14,14 L12,14 Z"/>
</g><g transform="translate(54,198)"><path fill="#000000" fill-rule="evenodd" d="M10.25,2 L6,11.0140969 L8,11.0140969 L8.5,9.8 L13.5,9.8 L14,11 L16,11.0140969 L11.75,2 L10.25,2 Z M11,4 L12.87,8.02 L9.13,8.02 L11,4 Z M6,12 L4,12 L4,2.13162821e-14 L2,2.13162821e-14 L2,12 L4.4408921e-15,12 L3,15 L6,12 Z" transform="translate(1 2)"/>
</g><g transform="translate(274,360)"><g fill="none" fill-rule="evenodd" transform="translate(1 2)">
<path fill="#E3E3E3" fill-rule="nonzero" d="M0,0 L16,0 L16,7 L0,7 L0,0 Z M5,2 C5,2.55613518 5.44358641,3 5.99077797,3 L10.009222,3 C10.5490248,3 11,2.55228475 11,2 C11,1.44386482 10.5564136,1 10.009222,1 L5.99077797,1 C5.45097518,1 5,1.44771525 5,2 Z"/>
<path fill="#EEEEEE" fill-rule="nonzero" d="M0,7 L16,7 L16,12.9970707 C16,13.5509732 15.5553691,14 14.9991283,14 L1.00087166,14 C0.448105505,14 0,13.5621186 0,12.9970707 L0,7 Z"/>
<path fill="#DB4437" fill-rule="nonzero" d="M13.9333333,10 C12.8666667,7.8 10.6,6.33333333 8,6.33333333 C5.93333333,6.33333333 4.06666667,7.26666667 2.86666667,8.73333333 L5.06666667,12.5333333 C5.26666667,11.1333333 6.53333333,10 8,10 L13.9333333,10 Z"/>
<path fill="#FFC107" d="M11,13 C11,13.340036 10.945801,13.6945195 10.8374031,14 L14.5898454,14 C14.6404232,13.6706304 14.6666667,13.3429425 14.6666667,13 C14.6666667,12.3234979 14.5713218,11.636189 14.3806322,11 C14.3806322,11 10.2210197,11.0025248 10.2210197,11.0025248 C10.6928839,11.5295641 11,12.2428452 11,13 Z"/>
<path fill="#0F9D58" d="M4.68345602,14 C3.84939541,12.5728296 2.18127421,9.70816121 2.18127421,9.70816121 C1.64681549,10.6915234 1.33333333,11.8196382 1.33333333,13 C1.33333333,13.3378006 1.35798093,13.6761884 1.40561092,14 L4.68345602,14 Z"/>
<path fill="#4285F4" fill-rule="nonzero" d="M9.73533564,14 C9.90371179,13.7069662 10,13.3622127 10,13 C10,11.8954305 9.1045695,11 8,11 C6.8954305,11 6,11.8954305 6,13 C6,13.3643447 6.09742508,13.7059346 6.2676451,14.0001395 L9.73533564,14 Z"/>
</g>
</g><g transform="translate(126,36)"><g fill="none" fill-rule="evenodd" transform="rotate(-90 9 9)">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000" d="M2,16 L4,16 L4,14 L2,14 L2,16 L2,16 Z M8,16 L10,16 L10,14 L8,14 L8,16 L8,16 Z M5,16 L7,16 L7,14 L5,14 L5,16 L5,16 Z M2,13 L4,13 L4,11 L2,11 L2,13 L2,13 Z M2,7 L4,7 L4,5 L2,5 L2,7 L2,7 Z M2,10 L4,10 L4,8 L2,8 L2,10 L2,10 Z M14,10 L16,10 L16,8 L14,8 L14,10 L14,10 Z M14,13 L16,13 L16,11 L14,11 L14,13 L14,13 Z M14,7 L16,7 L16,5 L14,5 L14,7 L14,7 Z M11,16 L13,16 L13,14 L11,14 L11,16 L11,16 Z M14,16 L16,16 L16,14 L14,14 L14,16 L14,16 Z" opacity=".54"/>
<polygon fill="#000" points="2 2 2 4 16 4 16 2"/>
</g>
</g><g transform="translate(382,202)"><path fill="#000000" fill-rule="evenodd" d="M3,3 L14,3 C14.5522847,3 15,3.44771525 15,4 L15,12 C15,12.5522847 14.5522847,13 14,13 L3,13 C2.44771525,13 2,12.5522847 2,12 L2,4 L2,4 C2,3.44771525 2.44771525,3 3,3 L3,3 Z M5,13 L8,13 L5,16 L5,13 Z"/>
</g><g transform="translate(126,180)"><path fill="#000000" fill-rule="evenodd" d="M5.5,12.9170416 C2.66228666,12.4409635 0.5,9.97299629 0.5,7 L2,7 C2,9.48528137 4.01471863,11.5 6.5,11.5 C8.98528137,11.5 11,9.48528137 11,7 L12.5,7 C12.5,9.97299629 10.3377133,12.4409635 7.5,12.9170416 L7.5,16 L5.5,16 L5.5,12.9170416 Z M6.5,10 C5.11666667,10 4,8.88333333 4,7.5 L4,2.5 C4,1.11666667 5.11666667,0 6.5,0 C7.88333333,0 9,1.11666667 9,2.5 L8.99166667,7.5 C8.99166667,8.88333333 7.88333333,10 6.5,10 Z" transform="translate(3 1)"/>
</g><g transform="translate(482,292)"><path fill="#000000" fill-rule="evenodd" d="M10.2675644,11 L9.9951185,11 C8.89300027,11 8,10.1052289 8,8.99967027 L8,5.00032973 C8,2.79517529 6.21014773,1 4.0048815,1 L3.73243561,1 C3.38662619,0.40219863 2.74028236,0 2,0 C0.8954305,0 0,0.8954305 0,2 C0,3.1045695 0.8954305,4 2,4 C2.74028236,4 3.38662619,3.59780137 3.73243561,3 L4.0048815,3 C5.10424652,3 6,3.89841745 6,5.00032973 L6,8.99967027 C6,11.2089124 7.78754286,13 9.9951185,13 L10.2675644,13 C10.6133738,13.5978014 11.2597176,14 12,14 C13.1045695,14 14,13.1045695 14,12 C14,10.8954305 13.1045695,10 12,10 C11.2597176,10 10.6133738,10.4021986 10.2675644,11 Z" transform="translate(2 2)"/>
</g><g transform="translate(54,18)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M8,3 L6,3 L6,5 L8,5 L8,3 L8,3 Z M11,6 L9,6 L9,8 L11,8 L11,6 L11,6 Z M8,6 L6,6 L6,8 L8,8 L8,6 L8,6 Z M8,9 L6,9 L6,11 L8,11 L8,9 L8,9 Z M5,6 L3,6 L3,8 L5,8 L5,6 L5,6 Z" opacity=".54"/>
<path d="M0,0 L14,0 L14,14 L0,14 L0,0 Z M12,12 L12,2 L2,2 L2,12 L12,12 Z"/>
</g>
</g><g transform="translate(572,36)"><path fill="#000000" fill-rule="evenodd" d="M15,3 C15.553,3 16,2.553 16,2 L16,1 C16,0.447 15.553,0 15,0 L13,0 L13,1 L15,1 L15,2 L14,2 C13.447,2 13,2.447 13,3 L13,5 L16,5 L16,4 L14,4 L14,3 L15,3 L15,3 Z M0,5 L3.199,5 L2,13 L4,13 L5,5 L7,5 L7,13 L9,13 L9,5 L11,5 L11,3 L0,3 L0,5 L0,5 Z" transform="translate(1 2)"/>
</g><g transform="translate(446,202)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M0,5 L2,5 L2,3 L0,3 L0,5 L0,5 Z M0,2 L2,2 L2,0 L0,0 L0,2 L0,2 Z M3,8 L5,8 L5,6 L3,6 L3,8 L3,8 Z M3,2 L5,2 L5,0 L3,0 L3,2 L3,2 Z M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M0,8 L2,8 L2,6 L0,6 L0,8 L0,8 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M12,0 L12,2 L14,2 L14,0 L12,0 L12,0 Z M12,8 L14,8 L14,6 L12,6 L12,8 L12,8 Z M12,14 L14,14 L14,12 L12,12 L12,14 L12,14 Z M12,5 L14,5 L14,3 L12,3 L12,5 L12,5 Z M12,11 L14,11 L14,9 L12,9 L12,11 L12,11 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M9,8 L11,8 L11,6 L9,6 L9,8 L9,8 Z M9,2 L11,2 L11,0 L9,0 L9,2 L9,2 Z" opacity=".54"/>
<polygon points="6 14 8 14 8 0 6 0"/>
</g>
</g><g transform="translate(180,90)"><defs>
<path id="shapes_plus_a" d="M11,7 L11,2 L7,2 L7,7 L2,7 L2,11 L7,11 L7,16 L11,16 L11,11 L16,11 L16,7 L11,7 Z"/>
<mask id="shapes_plus_b" width="14" height="14" x="0" y="0" fill="white">
<use xlink:href="#shapes_plus_a"/>
</mask>
</defs>
<use fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="2" mask="url(#shapes_plus_b)" xlink:href="#shapes_plus_a"/>
</g><g transform="translate(216,324)"><path fill="#000000" fill-rule="evenodd" d="M6,10.5 C3.51,10.5 1.5,8.49 1.5,6 C1.5,3.51 3.51,1.5 6,1.5 C7.24,1.5 8.36,2.02 9.17,2.83 L7,5 L12,5 L12,0 L10.24,1.76 C9.15,0.68 7.66,0 6,0 C2.69,0 0.01,2.69 0.01,6 C0.01,9.31 2.69,12 6,12 C8.97,12 11.43,9.84 11.9,7 L10.38,7 C9.92,9 8.14,10.5 6,10.5 L6,10.5 Z" transform="matrix(-1 0 0 1 15.01 3)"/>
</g><g transform="translate(162,216)"><path fill="#000000" fill-rule="evenodd" d="M16,1 C16,0.45 15.55,0 15,0 L1,0 C0.45,0 0,0.45 0,1 L0,12 C0,12.55 0.45,13 1,13 L12.5,13 L16,16 L16,1 L16,1 Z" transform="translate(1 1)"/>
</g><g transform="translate(54,72)"><path fill="#000000" fill-rule="evenodd" d="M9.01902793,9.72705177 C8.06535219,10.5218555 6.83851442,11 5.5,11 C2.46243388,11 0,8.53756612 0,5.5 C0,2.46243388 2.46243388,0 5.5,0 C8.53756612,0 11,2.46243388 11,5.5 C11,6.83851442 10.5218555,8.06535219 9.72705177,9.01902793 L9.98,9.27 L10.77,9.27 L14.76,13.27 L13.27,14.76 L9.27,10.77 L9.27,9.98 L9.01902793,9.72705177 Z M5.5,9.5 C7.709139,9.5 9.5,7.709139 9.5,5.5 C9.5,3.290861 7.709139,1.5 5.5,1.5 C3.290861,1.5 1.5,3.290861 1.5,5.5 C1.5,7.709139 3.290861,9.5 5.5,9.5 Z M3,6 L3,5 L8,5 L8,6 L3,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(72,324)"><path fill="#000000" fill-rule="evenodd" d="M0,12.88 L0,16 L3.12,16 L12,7.12 L8.88,4 L0,12.88 L0,12.88 Z M14.76,4.37 C15.09,4.04 15.09,3.52 14.76,3.19 L12.81,1.24 C12.48,0.91 11.96,0.91 11.63,1.24 L10,2.88 L13.12,6 L14.76,4.37 L14.76,4.37 Z" transform="translate(2)"/>
</g><g transform="translate(90,18)"><path fill="#DB4437" fill-rule="evenodd" d="M15,0 L1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 L15,0 Z M13,13 L8,13 L8,8.2 C7.5,8.7 6.8,9 6,9 C4.3,9 3,7.7 3,6 C3,4.3 4.3,3 6,3 C7.7,3 9,4.3 9,6 C9,6.8 8.7,7.5 8.2,8 L13,8 L13,13 L13,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(234,198)"><path fill="#000000" fill-rule="evenodd" d="M3,6.4375 L3,16.125 C3,16.60625 3.39375,17 3.875,17 L16.125,17 C16.60625,17 17,16.60625 17,16.125 L17,3.875 C17,3.39375 16.60625,3 16.125,3 L6.4375,3 L9,3 L9,5 L15,5 L15,15 L5,15 L5,9 L3,9 L3,6.4375 Z M6,14 L6,9 L8,9 L8,14 L6,14 Z M9,14 L9,6 L11,6 L11,14 L9,14 Z M5,3 L5,0 L3,0 L3,3 L0,3 L0,5 L3,5 L3,8 L5,8 L5,5 L8,5 L8,3 L5,3 Z M12,14 L12,10 L14,10 L14,14 L12,14 Z"/>
</g><g transform="translate(198,306)"><path fill="#000000" fill-rule="evenodd" d="M9,2 L7,0 L1,0 C0.45,0 0,0.45 0,1 L0,13 C0,13.55 0.45,14 1,14 L15,14 C15.55,14 16,13.55 16,13 L16,3 C16,2.45 15.55,2 15,2 L9,2 Z M10.5,4.75 C11.47,4.75 12.25,5.53 12.25,6.5 C12.25,7.47 11.47,8.25 10.5,8.25 C9.53,8.25 8.75,7.47 8.75,6.5 C8.75,5.53 9.53,4.75 10.5,4.75 L10.5,4.75 Z M14,12 L7,12 L7,10.75 C7,9.58 9.33,9 10.5,9 C11.67,9 14,9.58 14,10.75 L14,12 L14,12 Z" transform="translate(1 2)"/>
</g><g transform="translate(220,396)"><path fill="#000000" fill-rule="evenodd" d="M2,5 L4.00104344,5 C4.55275191,5 5,4.55733967 5,4.00104344 L5,2.99895656 C5,2.44724809 4.55733967,2 4.00104344,2 L2,2 L2,5 Z M7,3.25 C7,1.52125 6.1025,0 4.375,0 L0,0 L0,12 L2,12 L1.93375,7.0025 L3,7 C3.56875,7 5,9.43125 5,10 L5,12 L7,12 L7,10 C7,9.3875 6.806875,8.190625 5.78125,7.12875 C6.789375,6.61125 7,5.713125 7,4.5 L7,3.25 Z M9,0 L9,1 L11,1 L11,2 L10,2 C9.448,2 9,2.4475 9,3 L9,5 L12,5 L12,4 L10,4 L10,3 L11,3 C11.5525,3 12,2.5525 12,2 L12,1 C12,0.4475 11.5525,0 11,0 L9,0 Z" transform="translate(3 3)"/>
</g><g transform="translate(72,234)"><path fill="#000000" fill-rule="evenodd" d="M12,9 C12,5.67 7,0 7,0 C7,0 6.15,0.97 5.15,2.33 L11.98,9.16 L12,9 L12,9 Z M1.55,1.27 L0.27,2.55 L3.16,5.44 C2.49,6.69 2,7.96 2,9 C2,11.76 4.24,14 7,14 C8.31,14 9.49,13.48 10.39,12.66 L12.73,15 L14,13.73 L1.55,1.27 L1.55,1.27 Z" transform="translate(2 2)"/>
</g><g transform="translate(126,306)"><polygon fill="#000000" fill-rule="evenodd" points="-2 2 2 6 6 2" transform="rotate(-90 8 3)"/>
</g><g transform="translate(36,234)"><g fill="none" fill-rule="evenodd">
<polygon fill="#000" fill-rule="nonzero" points="4 9 8 9 8 11 10 11 10 9 14 9 14 11 16 11 16 7 15 7 14 7 10 7 8 7 4 7 3 7 2 7 2 11 4 11"/>
<circle cx="9" cy="15" r="2" fill="#000" fill-rule="nonzero"/>
<circle cx="15" cy="15" r="2" fill="#000" fill-rule="nonzero"/>
<circle cx="3" cy="15" r="2" fill="#000" fill-rule="nonzero"/>
<rect width="18" height="18"/>
<circle cx="9" cy="3" r="2" fill="#000" fill-rule="nonzero"/>
</g>
</g><g transform="translate(90,360)"><path fill="#000000" fill-rule="evenodd" d="M9.01902793,9.72705177 C8.06535219,10.5218555 6.83851442,11 5.5,11 C2.46243388,11 0,8.53756612 0,5.5 C0,2.46243388 2.46243388,0 5.5,0 C8.53756612,0 11,2.46243388 11,5.5 C11,6.83851442 10.5218555,8.06535219 9.72705177,9.01902793 L9.98,9.27 L10.77,9.27 L14.76,13.27 L13.27,14.76 L9.27,10.77 L9.27,9.98 L9.01902793,9.72705177 Z M5.5,9.5 C7.709139,9.5 9.5,7.709139 9.5,5.5 C9.5,3.290861 7.709139,1.5 5.5,1.5 C3.290861,1.5 1.5,3.290861 1.5,5.5 C1.5,7.709139 3.290861,9.5 5.5,9.5 Z" transform="translate(2 2)"/>
</g><g transform="translate(144,54)"><path fill="#000000" fill-rule="evenodd" d="M0,14 L3,14 L3,5 L0,5 L0,14 L0,14 Z M14.7325,5 L10,5 L10.48,1.8225 L10.5025,1.5825 C10.5025,1.275 10.375,0.99 10.1725,0.7875 L9.3775,0 L4.4425,4.9425 C4.165,5.2125 4,5.5875 4,6 L4,13.5 C4,14.325 4.675,15 5.5,15 L12.25,15 C12.8725,15 13.405,14.625 13.63,14.085 L15.895,8.7975 C15.9625,8.625 16,8.445 16,8.25 C16,8.25 15.9277936,7.02252557 16,6.5 C16.0052936,6.46169224 16,6.5675 16,6.5675 L16,6.5 C16,5.675 15.5575,5 14.7325,5 Z" transform="rotate(180 8.501 8.5)"/>
</g><g transform="translate(518,36)"><path fill="#000000" fill-rule="evenodd" d="M2,2 L0,2 L0,12.9975267 C0,13.544239 0.448822582,14 1.00247329,14 L12,14 L12,12 L12.9975267,12 C13.544239,12 14,11.5511774 14,10.9975267 L14,1.00247329 C14,0.455760956 13.5511774,0 12.9975267,0 L3.00247329,0 C2.45576096,0 2,0.448822582 2,1.00247329 L2,2 L1,2 L1,13 L12,13 L12,12 L3.00247329,12 C2.44882258,12 2,11.544239 2,10.9975267 L2,2 Z M5,4 L8.59,4 L4.76,7.83 L6.17,9.24 L10,5.41 L10,9 L12,9 L12,2 L5,2 L5,4 Z" transform="translate(2 2)"/>
</g><g transform="translate(72,342)"><polygon fill="#000000" fill-rule="evenodd" points="5 0 .5 4.5 1.56 5.56 5 2.12 8.44 5.56 9.5 4.5" transform="translate(4 6)"/>
</g><g transform="translate(180,324)"><path fill="#000000" fill-rule="evenodd" d="M11.9925,14.0000001 L11.9925,16.0000001 L1.00445557,16.0000001 C1.00445557,16.0000001 0,16.0000001 0,15.0042115 L0,2.00689108 L2,2.00000019 L2.0075,2.00889226 L2.0075,12.9946834 C2.0075,13.7129334 2.16375,14.0000001 2.9925,14.0000001 L11.9925,14.0000001 Z M12,5.00000009 L12,10.4461539 C12,10.9434039 11.9584375,11.0000001 11.475,11.0000001 L5.520625,11.0000001 C5.0371875,11.0000001 5,10.9434039 5,10.4461539 L5.004375,2.55384625 C5.004375,2.05659625 5.0415625,2.00000009 5.525,2.00000009 L9,2.00000009 L9,5.00000009 L12,5.00000009 Z M4,9.27183272e-08 C4,9.27183272e-08 3,9.27183272e-08 3,1.00158713 L3,12.0000002 C3,13.0000001 4.00701904,13.0000001 4,13.0000001 L12.9976196,13.0000001 C13.7592811,13.0000001 14,12.7112604 14,12.0000001 L14,3.44283088 L10.3525798,9.27183272e-08 L4,9.27183272e-08 Z" transform="matrix(1 0 0 -1 2 17)"/>
</g><g transform="translate(274,378)"><path fill="#000000" fill-rule="evenodd" d="M1,8 L1,12 L13,12 L13,0 L1,0 L1,4 L0,4 L0,8 L1,8 Z M3,8 L3,10 L13,10 L13,2 L3,2 L3,4 L4,4 L4,8 L3,8 Z M4,5 L13,5 L13,7 L4,7 L4,5 Z" transform="translate(2 3)"/>
</g><g transform="translate(126,342)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.449948758,0 1.00684547,0 L12.9931545,0 C13.5492199,0 14,0.449948758 14,1.00684547 L14,12.9931545 C14,13.5492199 13.5500512,14 12.9931545,14 L1.00684547,14 C0.450780073,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M2,2 L6,2 L6,6 L2,6 L2,2 Z M2,8 L6,8 L6,12 L2,12 L2,8 Z M8,2 L12,2 L12,6 L8,6 L8,2 Z M8,8 L12,8 L12,12 L8,12 L8,8 Z" transform="translate(2 2)"/>
</g><g transform="translate(310,18)"><path fill="#000000" fill-rule="evenodd" d="M14.0625,0 L0.9375,0 C0.421875,0 0,0.39375 0,0.875 L0,13.125 C0,13.60625 0.421875,14 0.9375,14 L14.0625,14 C14.578125,14 15,13.60625 15,13.125 L15,0.875 C15,0.39375 14.578125,0 14.0625,0 L14.0625,0 Z M5,12 L2,12 L2,6 L5,6 L5,12 L5,12 Z M2,5 L2,2 L13,2 L13,5 L2,5 Z M9,12 L6,12 L6,6 L9,6 L9,12 L9,12 Z M13,12 L10,12 L10,6 L13,6 L13,12 L13,12 Z" transform="translate(2 2)"/>
</g><g transform="translate(108,108)"><path fill="#000000" fill-rule="evenodd" d="M0,6 L14,6 L14,8 L0,8 L0,6 Z M0,0 L14,0 L14,4 L0,4 L0,0 Z M0,11 L14,11 L14,12 L0,12 L0,11 Z" transform="translate(2 3)"/>
</g><g transform="translate(572,198)"><path fill="#000000" fill-rule="evenodd" d="M13,9 L13,5 L8,0 L2,0 C1.45,0 1.01,0.45 1.01,1 L1.00571429,7 L3,7 L3,2 L8,2 L8,5 L11,5 L11,7 L13,7 L13,9 L11,9 L11,11 L13,11 L13,13 L11,13 L11,14 L3,14 L3,13 L1.00142857,13 L1,15 C1,15.55 1.44,16 2,16 L12,16 C12.55,16 13,15.55 13,15 L13,11 L14,11 L14,9 L13,9 Z M0,9 L3,9 L3,11 L0,11 L0,9 Z M5,9 L9,9 L9,11 L5,11 L5,9 Z" transform="translate(2 1)"/>
</g><g transform="translate(500,166)"><path fill="#000000" fill-rule="evenodd" d="M6,10 L14,10 L14,8 L6,8 L6,10 Z M6,6 L14,6 L14,4 L6,4 L6,6 Z M14,12 L0,12 L0,14 L14,14 L14,12 Z M0.5,7 L4,10.5 L4,3.5 L0.5,7 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z" transform="translate(2 2)"/>
</g><g transform="translate(572,234)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L16,0 L16,16 L0,16 L0,0 Z M1,1 L5,1 L5,15 L1,15 L1,1 Z M6,1 L10,1 L10,15 L6,15 L6,1 Z M11,1 L15,1 L15,15 L11,15 L11,1 Z" transform="translate(1 1)"/>
</g><g transform="translate(328,244)"><g fill="#000000" fill-rule="evenodd" transform="translate(8 2)">
<rect width="2" height="14" fill-opacity=".3"/>
<path d="M0,2 L2,2 L2,4 L0,4 L0,2 Z M0,6 L2,6 L2,8 L0,8 L0,6 Z M0,10 L2,10 L2,12 L0,12 L0,10 Z"/>
</g>
</g><g transform="translate(108,270)"><path fill="#000000" fill-rule="evenodd" d="M4,6 L4,11 L6,11 L6,1 L7,1 L7,11 L9,11 L9,1 L10,1 L10,0 L4,0 C2.34,0 1,1.34 1,3 C1,4.66 2.34,6 4,6 Z M14,14 L11,11 L11,13 L0,13 L0,15 L11,15 L11,17 L14,14 Z" transform="translate(2 1)"/>
</g><g transform="translate(446,292)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 L15,0 Z M13,13 L8,13 L8,8.2 C7.5,8.7 6.8,9 6,9 C4.3,9 3,7.7 3,6 C3,4.3 4.3,3 6,3 C7.7,3 9,4.3 9,6 C9,6.8 8.7,7.5 8.2,8 L13,8 L13,13 L13,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(446,0)"><path fill="#000000" fill-rule="evenodd" d="M6,10.5 C3.51,10.5 1.5,8.49 1.5,6 C1.5,3.51 3.51,1.5 6,1.5 C7.24,1.5 8.36,2.02 9.17,2.83 L7,5 L12,5 L12,0 L10.24,1.76 C9.15,0.68 7.66,0 6,0 C2.69,0 0.01,2.69 0.01,6 C0.01,9.31 2.69,12 6,12 C8.97,12 11.43,9.84 11.9,7 L10.38,7 C9.92,9 8.14,10.5 6,10.5 L6,10.5 Z" transform="translate(3 3)"/>
</g><g transform="translate(346,220)"><path fill="#000000" fill-rule="evenodd" d="M6,10 L14,10 L14,8 L6,8 L6,10 L6,10 Z M3.5,7 L0,3.5 L0,10.5 L3.5,7 L3.5,7 Z M0,14 L14,14 L14,12 L0,12 L0,14 L0,14 Z M0,0 L0,2 L14,2 L14,0 L0,0 L0,0 Z M6,6 L14,6 L14,4 L6,4 L6,6 L6,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(310,0)"><polygon fill="#000000" fill-rule="evenodd" points="10 0 0 0 0 1.8 5.5 7 0 12.2 0 14 10 14 10 12 3.1 12 8 7 3.1 2 10 2" transform="translate(4 2)"/>
</g><g transform="translate(288,324)"><path fill="#000000" fill-rule="nonzero" d="M5.32790732,7.48070712 L4.31270732,6.45830712 C3.66470732,7.29350712 3.26150732,8.25830712 3.13910732,9.25910712 L4.59350732,9.25910712 C4.69430732,8.63270712 4.94630732,8.02070712 5.32790732,7.48070712 L5.32790732,7.48070712 Z M4.59350732,10.6991071 L3.13910732,10.6991071 C3.26150732,11.6999071 3.65750732,12.6647071 4.30550732,13.4999071 L5.32070732,12.4775071 C4.94630732,11.9375071 4.69430732,11.3327071 4.59350732,10.6991071 L4.59350732,10.6991071 Z M5.32070732,14.5295071 C6.15590732,15.1775071 7.12790732,15.5663071 8.12870732,15.6887071 L8.12870732,14.2271071 C7.50230732,14.1191071 6.89750732,13.8743071 6.35750732,13.4855071 L5.32070732,14.5295071 Z M9.56870732,4.26950712 L9.56870732,2.05910712 L6.29270732,5.33510712 L9.56870732,8.53910712 L9.56870732,5.72390712 C11.6135073,6.06950712 13.1687073,7.84070712 13.1687073,9.97910712 C13.1687073,12.1175071 11.6135073,13.8887071 9.56870732,14.2343071 L9.56870732,15.6887071 C12.4127073,15.3359071 14.6087073,12.9167071 14.6087073,9.97910712 C14.6087073,7.04150712 12.4127073,4.62230712 9.56870732,4.26950712 Z" transform="translate(8.873907, 8.873907) rotate(-45.000000) translate(-8.873907, -8.873907) "/>
</g><g transform="translate(198,72)"><path fill="#000000" fill-rule="evenodd" d="M7.99905882,0 C4.32752941,0 1.23670588,2.49323077 0,6 C1.23670588,9.50676923 4.32752941,12 7.99905882,12 C11.6724706,12 14.7595294,9.50676923 16,6 C14.7595294,2.49323077 11.6724706,0 7.99905882,0 Z M8,10.5 C10.4852814,10.5 12.5,8.48528137 12.5,6 C12.5,3.51471863 10.4852814,1.5 8,1.5 C5.51471863,1.5 3.5,3.51471863 3.5,6 C3.5,8.48528137 5.51471863,10.5 8,10.5 Z M8,8.5 C9.38071187,8.5 10.5,7.38071187 10.5,6 C10.5,4.61928813 9.38071187,3.5 8,3.5 C6.61928813,3.5 5.5,4.61928813 5.5,6 C5.5,7.38071187 6.61928813,8.5 8,8.5 Z" transform="translate(1 3)"/>
</g><g transform="translate(572,270)"><path fill="#4285F4" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.455664396,0 0.995397568,0 L9.00460243,0 C9.55434533,0 10,0.449948758 10,1.00684547 L10,14 L5,12 L0,14 L0,1.00684547 Z" transform="translate(4 2)"/>
</g><g transform="translate(108,324)"><polygon fill="#000000" fill-rule="evenodd" points="6.4 5.4 9.8 8.8 16.1 1.6 14.9 .4 9.9 6.3 6.4 2.8 0 9.3 1.3 10.6" transform="translate(1 4)"/>
</g><g transform="translate(446,166)"><path fill="#000000" fill-rule="evenodd" d="M8,0 C3.57647059,0 0,3.57647059 0,8 C0,12.4235294 3.57647059,16 8,16 C12.4235294,16 16,12.4235294 16,8 C16,3.57647059 12.4235294,0 8,0 L8,0 Z M8,14.5 C4.46323529,14.5 1.5,11.5367647 1.5,8 C1.5,4.46323529 4.46323529,1.5 8,1.5 C11.5367647,1.5 14.5,4.46323529 14.5,8 C14.5,11.5367647 11.5367647,14.5 8,14.5 L8,14.5 Z M9,12 C9,12.553 8.553,13 8,13 C7.447,13 7,12.553 7,12 C7,11.447 7.447,11 8,11 C8.553,11 9,11.447 9,12 Z M5,6 C5.12023926,6.01531982 6.5,6.01849365 6.5,6.01849365 C6.5,5.26839431 7.00215776,4.51556396 8.00002153,4.5 C8.9978853,4.48443604 9.54266357,5.38989258 9.5,6.00317383 C9.45733643,6.61645508 9.17871094,7.05200195 8.77172852,7.29766846 C8.36474609,7.54333496 7.25,8.14459229 7.25,9.23382568 C7.25,9.23382568 7.25,9.98764352 7.25,9.98764352 L8.75,9.98764352 C8.75,9.98764352 8.75,9.37896729 8.77172852,9.37896729 C8.77081299,8.65667725 11.0114136,8.30938721 11,6.01849365 C10.9900891,4.02920829 9.45849609,3 7.99993896,3 C6.54138184,3 5,4.18981934 5,6 Z" transform="translate(1 1)"/>
</g><g transform="translate(500,256)"><path fill="#000000" fill-rule="evenodd" d="M5.08196626,9.37727765 L5.99955419,8 L5.0815666,6.62291941 C4.62836385,6.85296857 4.11835777,6.98725058 3.57817961,6.99913216 C3.55122348,7.00107303 3.52503985,7.00208268 3.49974771,7.00208268 C3.44586152,7.00208268 3.39177256,7.00013278 3.33755121,6.99630282 C1.49448789,6.91222827 0.0231246995,5.40247032 0.000269927977,3.54391978 C6.92469045e-05,3.53097907 -1.98246352e-05,3.51804863 3.68240513e-06,3.50512942 C1.22774602e-06,3.50341893 0,3.50170815 0,3.49999708 C0,3.49829098 1.22063079e-06,3.49658516 3.66106665e-06,3.49487963 C-1.97109738e-05,3.48199716 6.88547616e-05,3.4691033 0.000268397483,3.45619902 C0.0235736053,1.55561775 1.56164322,0.0197518958 3.46297798,0.00018898828 C3.47380467,4.84500079e-05 3.48462385,-1.38757964e-05 3.49543495,2.57804707e-06 C3.49686604,8.59511651e-07 3.49829733,0 3.49972882,0 C3.50116736,0 3.5026057,8.6800093e-07 3.50404384,2.60350766e-06 C3.51491367,-1.40208481e-05 3.52579267,4.89893362e-05 3.53668024,0.000191057626 C5.38088977,0.0192698907 6.88328742,1.46490662 6.99303415,3.28618166 C6.99855951,3.35770064 7.00076239,3.42903042 6.99947653,3.5000104 C7.0295035,3.93876004 6.99947671,4.50000957 6.99947671,4.50000957 L16,14.0000016 L16,14.9952401 L12.9990117,14.9952401 L8,10.000005 L6.52775458,10.7439587 C6.82709523,11.2590932 6.9987709,11.8576041 6.99945558,12.4961622 C6.99946966,12.4974444 6.99947671,12.4987247 6.99947671,12.5000029 C6.99947671,12.505048 6.99945964,12.5100948 6.99942556,12.5151433 C6.99127795,14.4383685 5.43207235,15.9954569 3.50814196,15.9999843 C3.50534334,15.9999948 3.50254523,16 3.49974765,16 C3.49697112,16 3.49419407,15.9999948 3.49141651,15.9999845 C1.56239166,15.9954995 0,14.4302204 0,12.4999971 C0,10.5670021 1.56688196,9 3.49972882,9 C4.06913668,9 4.60678373,9.13599458 5.08196626,9.37727765 Z M12.9843643,1.04188257 L8.99932157,5.00000915 L11.0037439,7.00000748 L15.9987792,2.00001165 L15.9987792,1.00001249 L12.9843643,1.04188257 Z M3.49974771,5.00000915 C4.32811065,5.00000915 4.99963149,4.32843684 4.99963149,3.5000104 C4.99963149,2.67158397 4.32811065,2.00001165 3.49974771,2.00001165 C2.67138477,2.00001165 1.99986393,2.67158397 1.99986393,3.5000104 C1.99986393,4.32843684 2.67138477,5.00000915 3.49974771,5.00000915 Z M3.49974771,14.0000016 C4.32811065,14.0000016 4.99963149,13.3284293 4.99963149,12.5000029 C4.99963149,11.6715765 4.32811065,11.0000041 3.49974771,11.0000041 C2.67138477,11.0000041 1.99986393,11.6715765 1.99986393,12.5000029 C1.99986393,13.3284293 2.67138477,14.0000016 3.49974771,14.0000016 Z" transform="translate(1 1)"/>
</g><g transform="translate(108,162)"><path fill="#FF7537" fill-rule="evenodd" d="M8.5,5 L6,5 L6,8 L8.5,8 C9.32842712,8 10,7.32842712 10,6.5 C10,5.67157288 9.32842712,5 8.5,5 Z M8.5,10 L6,10 L6,13 L4,13 L4,3 L5,3 L8.5,3 C10.4329966,3 12,4.56700338 12,6.5 C12,8.43299662 10.4329966,10 8.5,10 Z M1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 L1,0 Z" transform="translate(1 1)"/>
</g><g transform="translate(370,298)"><path fill="#000000" fill-rule="evenodd" d="M6.5,3.62 L0,10.12 L0,13 L2.88,13 L9.38,6.5 L6.5,3.62 Z M11.85,4.02 C12.05,3.82 12.05,3.51 11.85,3.31 L9.68,1.14 C9.48,0.94 9.17,0.94 8.97,1.14 L7.62,2.5 L10.5,5.38 L11.85,4.02 L11.85,4.02 Z" transform="translate(4)"/>
</g><g transform="translate(162,324)"><path fill="#000000" fill-rule="evenodd" d="M2,11.8994949 L11.8994949,2 L14.0208153,4.12132034 L4.12132034,14.0208153 L2,11.8994949 Z M5.59875,1.88625 C3.15,3.04875 1.39125,5.43 1.125,8.25 L0,8.25 C0.3825,3.63 4.245,0 8.9625,0 C9.13125,0 9.2925,0.015 9.46125,0.02625 L6.6,2.8875 L5.59875,1.88625 Z M10.32625,14.11375 C12.775,12.95125 14.53375,10.57 14.8,7.75 L15.925,7.75 C15.5425,12.37 11.68,16 6.9625,16 C6.79375,16 6.6325,15.985 6.46375,15.97375 L9.325,13.1125 L10.32625,14.11375 L10.32625,14.11375 Z" transform="translate(1 1)"/>
</g><g transform="translate(554,130)"><polygon fill="#4285F4" fill-opacity=".78" fill-rule="evenodd" points="0 0 0 10 5 5" transform="translate(7 4)"/>
</g><g transform="translate(216,270)"><path fill="#000000" fill-rule="evenodd" d="M9.82929429,4 C9.41745788,5.16519237 8.30621883,6 7,6 C5.69378117,6 4.58254212,5.16519237 4.17070571,4 L0,4 L0,2 L4.17070571,2 C4.58254212,0.834807627 5.69378117,0 7,0 C8.30621883,0 9.41745788,0.834807627 9.82929429,2 L14,2 L14,4 L9.82929429,4 Z" transform="translate(2 6)"/>
</g><g transform="translate(198,324)"><path fill="#000000" fill-rule="evenodd" d="M0,2.90909091 L0,7.27272727 C0,11.3090909 2.98666667,15.0836364 7,16 C11.0133333,15.0836364 14,11.3090909 14,7.27272727 L14,2.90909091 L7,0 L0,2.90909091 Z M6,4 L8,4 L8,9 L6,9 L6,4 Z M6,10 L8,10 L8,12 L6,12 L6,10 Z" transform="translate(2 1)"/>
</g><g transform="translate(256,0)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 Z M6,12 L4,12 L4,7 L6,7 L6,12 Z M9,12 L7,12 L7,4 L9,4 L9,12 Z M12,12 L10,12 L10,8 L12,8 L12,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(518,130)"><path fill="#000000" fill-rule="evenodd" d="M9,3 C9.03942871,2.99182129 9,0.991821289 7,0.991821289 C5,0.991821289 5.00058365,2.99182129 5.0005835,2.99182129 L0.999924169,2.99836457 C0.447681299,2.99926779 1.95399252e-14,3.44994876 1.95399252e-14,4.00684547 L1.95399252e-14,15.9931545 C1.95399252e-14,16.5492199 0.441480327,17 0.999355351,17 C0.999355351,17 0.728745117,17 1.55749512,17 L12.5,17 C13.32875,17 12.9985978,17 12.9985978,17 C13.551657,17 14,16.5548273 14,15.9975471 L14,4.49182129 C14,3.66307129 14,3.99416169 14,3.99416169 C14,3.44510135 13.5562834,3 13.0001925,3 L9,3 Z M6,3 L8,3 L8,4 L6,4 L6,3 Z M2,15 L2,5 L3,5 L3,6 L11,6 L11,5 L12,5 L12,15 L2,15 Z" transform="translate(2)"/>
</g><g transform="translate(274,108)"><g fill="none" fill-rule="evenodd">
<polygon points="0 0 18 0 18 18 0 18"/>
<path fill="#000000" d="M9.2250619,17 L4.57,17 L7.15,12 L7.59068811,12 C7.5311233,12.3242762 7.5,12.6585035 7.5,13 C7.5,14.5760283 8.16288947,15.9972305 9.2250619,17 Z M16.3110756,8.60793815 L11.83,1 L6.57,1 L10.6956718,8.00453613 C11.3965725,7.68068268 12.1771859,7.5 13,7.5 C14.2431442,7.5 15.3899589,7.91243556 16.3110756,8.60793815 Z M5.49,2.45 L0,12.45 L2.66,17 L8.14,7.02 L5.49,2.45 L5.49,2.45 Z M14,9 L12,9 L12,12 L9,12 L9,14 L12,14 L12,17 L14,17 L14,14 L17,14 L17,12 L14,12 L14,9 Z"/>
</g>
</g><g transform="translate(328,324)"><path fill="#000000" fill-rule="evenodd" d="M2.5,14 L9.5,14 C10.32875,14 11,13.3607143 11,12.5714286 L11,4 L1,4 L1,12.5714286 C1,13.3607143 1.67125,14 2.5,14 Z M9.125,1 L8.375,0 L3.625,0 L2.875,1 L0,1 L0,3 L12,3 L12,1 L9.125,1 Z" transform="translate(3 2)"/>
</g><g transform="translate(180,162)"><path fill="#000000" d="M11.0119846,13 L16,13 L16,15 L11.0119846,15 L11.0119846,16.9944804 L9.03685276,15.0409865 L7.98433567,14 L9.03289155,12.9629313 L11.0119846,11.0055196 L11.0119846,13 Z M1,8 L2.99632026,8 L2.99632026,10 L1,10 L1,8 Z M3.99264052,3.99686968 C3.99264052,2.34174426 5.33709312,1 6.98804084,1 C8.64235476,1 9.98344117,2.34739093 9.98344117,3.99686968 L9.98344117,7.00313032 C9.98344117,8.65825574 8.63898856,10 6.98804084,10 C5.33372692,10 3.99264052,8.65260907 3.99264052,7.00313032 L3.99264052,3.99686968 Z M5.5,3.99857602 L5.5,7.00142398 C5.5,7.83497024 6.17157288,8.5 7,8.5 C7.83420277,8.5 8.5,7.82906466 8.5,7.00142398 L8.5,3.99857602 C8.5,3.16502976 7.82842712,2.5 7,2.5 C6.16579723,2.5 5.5,3.17093534 5.5,3.99857602 Z"/>
</g><g transform="translate(108,234)"><path fill="#000000" fill-rule="evenodd" d="M1,3 L3,3 L3,12 L1,12 L1,3 Z M11,5 L13,5 L13,12 L11,12 L11,5 Z M6,9 L8,9 L8,12 L6,12 L6,9 Z M10,2 L14,2 L14,4 L10,4 L10,2 Z M0,0 L4,0 L4,2 L0,2 L0,0 Z M0,12 L14,12 L14,14 L0,14 L0,12 Z M5,6 L9,6 L9,8 L5,8 L5,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(468,72)"><path fill="#000000" fill-rule="evenodd" d="M0.27,1.55 L5.43,6.7 L3,12 L5.5,12 L7.14,8.42 L11.73,13 L13,11.73 L1.55,0.27 L0.27,1.55 L0.27,1.55 Z M3.82,0 L5.82,2 L7.58,2 L7.03,3.21 L8.74,4.92 L10.08,2 L14,2 L14,0 L3.82,0 L3.82,0 Z" transform="translate(2 3)"/>
</g><g transform="translate(18,324)"><path fill="#000000" fill-rule="evenodd" d="M11,0 L14,0 L14,2 L11,2 L11,0 Z M7,3 L14,3 L14,5 L7,5 L7,3 Z M7,6 L14,6 L14,8 L7,8 L7,6 Z M7,9 L14,9 L14,11 L7,11 L7,9 Z M0,2 L4,2 L4,11 L6,11 L6,2 L10,2 L10,0 L0,0 L0,2 Z" transform="translate(2 3)"/>
</g><g transform="translate(0,18)"><defs>
<rect id="shapes_rectangle_a" width="16" height="14" x="1" y="2"/>
<mask id="shapes_rectangle_b" width="16" height="14" x="0" y="0" fill="white">
<use xlink:href="#shapes_rectangle_a"/>
</mask>
</defs>
<use fill="none" fill-rule="evenodd" stroke="#000000" stroke-width="2" mask="url(#shapes_rectangle_b)" xlink:href="#shapes_rectangle_a"/>
</g><g transform="translate(464,238)"><path fill="#000000" fill-rule="evenodd" d="M8,0 C3.57647059,0 0,3.57647059 0,8 C0,12.4235294 3.57647059,16 8,16 C12.4235294,16 16,12.4235294 16,8 C16,3.57647059 12.4235294,0 8,0 L8,0 Z M9,12 C9,12.553 8.553,13 8,13 C7.447,13 7,12.553 7,12 C7,11.447 7.447,11 8,11 C8.553,11 9,11.447 9,12 Z M5,6 C5.12023926,6.01531982 6.5,6.01849365 6.5,6.01849365 C6.5,5.26839431 7.00215776,4.51556396 8.00002153,4.5 C8.9978853,4.48443604 9.54266357,5.38989258 9.5,6.00317383 C9.45733643,6.61645508 9.17871094,7.05200195 8.77172852,7.29766846 C8.36474609,7.54333496 7.25,8.14459229 7.25,9.23382568 C7.25,9.23382568 7.25,9.98764352 7.25,9.98764352 L8.75,9.98764352 C8.75,9.98764352 8.75,9.37896729 8.77172852,9.37896729 C8.77081299,8.65667725 11.0114136,8.30938721 11,6.01849365 C10.9900891,4.02920829 9.45849609,3 7.99993896,3 C6.54138184,3 5,4.18981934 5,6 Z" transform="translate(1 1)"/>
</g><g transform="translate(18,252)"><path fill="#000000" fill-rule="evenodd" d="M11.5656391,4.43436088 L9,7 L16,7 L16,0 L13.0418424,2.95815758 C11.5936787,1.73635959 9.72260775,1 7.67955083,1 C4.22126258,1 1.25575599,3.10984908 0,6 L2,7 C2.93658775,4.60974406 5.12943697,3.08011229 7.67955083,3 C9.14881247,3.0528747 10.4994783,3.57862053 11.5656391,4.43436088 Z" transform="translate(1 5)"/>
</g><g transform="translate(464,166)"><path fill="#0F9D58" fill-rule="evenodd" d="M2,10 L4,12 L4,16 L10,16 L10,12 L12,10 L12,6 L2,6 L2,10 Z M6,0 L8,0 L8,3 L6,3 L6,0 Z M12.5,1 L14,2.5 L12,4.5 L10.5,3 L12.5,1 Z M-6.20335912e-15,2.5 L1.5,1 L3.5,3 L2,4.5 L-6.20335912e-15,2.5 Z" transform="translate(2 1)"/>
</g><g transform="translate(288,342)"><path fill="#000000" fill-rule="evenodd" d="M4,14 L14,14 L14,12 L4,12 L4,14 Z M0,10 L14,10 L14,8 L0,8 L0,10 Z M0,0 L0,2 L14,2 L14,0 L0,0 Z M4,6 L14,6 L14,4 L4,4 L4,6 Z" transform="translate(2 2)"/>
</g><g transform="translate(482,202)"><path fill="#000000" fill-rule="evenodd" d="M16,6.25 L6.98590309,2 L6.98590309,4 L8,4.5 L8,9.5 L7,10 L6.98590309,12 L16,7.75 L16,6.25 Z M14,7 L9.98,8.87 L9.98,5.13 L14,7 Z M6,12 L4,12 L4,1.77635684e-15 L2,1.77635684e-15 L2,12 L8.8817842e-16,12 L3,15 L6,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(482,220)"><polygon fill="#000000" fill-rule="evenodd" points="1.415 0 0 1.415 4.585 6 0 10.585 1.415 12 7.415 6" transform="translate(5 3)"/>
</g><g transform="translate(54,162)"><path fill="#000000" fill-rule="evenodd" d="M13,0 L1,0 C0.45,0 0,0.45 0,1 L0,13 C0,13.55 0.45,14 1,14 L13,14 C13.55,14 14,13.55 14,13 L14,1 C14,0.45 13.55,0 13,0 L13,0 Z M6,11 L3,11 L3,9 L6,9 L6,11 L6,11 Z M11,8 L3,8 L3,6 L11,6 L11,8 L11,8 Z M3,5 L3,3 L8,3 L8,5 L3,5 Z" transform="translate(2 2)"/>
</g><g transform="translate(234,270)"><path fill="#F4B400" fill-rule="evenodd" d="M-8.8817842e-16,1.00247329 C-8.8817842e-16,0.448822582 0.443988033,0 1.00605299,0 L8.73769782,0 C9.29332554,0 10.0186468,0.357358932 10.3566484,0.796753675 L13.7463141,5.20324633 C14.0848081,5.64328123 14.0843157,6.35735893 13.7463141,6.79675367 L10.3566484,11.2032463 C10.0181544,11.6432812 9.29976278,12 8.73769782,12 L1.00605299,12 C0.450425264,12 -8.8817842e-16,11.544239 -8.8817842e-16,10.9975267 L-8.8817842e-16,1.00247329 Z" transform="matrix(-1 0 0 1 16 3)"/>
</g><g transform="translate(464,130)"><path fill="#4986E7" fill-rule="evenodd" d="M15,0 L1,0 C0.5,0 0,0.5 0,1 L0,15 C0,15.5 0.5,16 1,16 L15,16 C15.5,16 16,15.5 16,15 L16,1 C16,0.5 15.5,0 15,0 Z M11.4,13 L9.9,13 L7.9,5.5 L5.9,13 L4.4,13 L2,3 L3.7,3 L5.24,10.505 L7.2,3 L8.6,3 L10.57,10.505 L12.1,3 L13.8,3 L11.4,13 Z" transform="translate(1 1)"/>
</g><g transform="translate(108,198)"><path d="M0 0h18v18H0z" fill="none"/>
<path d="M9 5.5c.83 0 1.5-.67 1.5-1.5S9.83 2.5 9 2.5 7.5 3.17 7.5 4 8.17 5.5 9 5.5zm0 2c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5S9.83 7.5 9 7.5zm0 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"/>
</g><g transform="translate(328,160)"><path fill="#000000" fill-rule="evenodd" d="M0,6 L3,6 L3,12 L5,12 L5,6 L8,6 L8,4 L0,4 L0,6 L0,6 Z M6,0 L6,2 L10,2 L10,12 L12,12 L12,2 L16,2 L16,0 L6,0 L6,0 Z" transform="translate(1 3)"/>
</g><g transform="translate(0,36)"><polygon fill="#000000" fill-rule="evenodd" points="11.53 1.53 10.47 .47 6 4.94 1.53 .47 .47 1.53 4.94 6 .47 10.47 1.53 11.53 6 7.06 10.47 11.53 11.53 10.47 7.06 6" transform="translate(3 3)"/>
</g><g transform="translate(500,184)"><path fill="#000000" fill-rule="evenodd" d="M8,0.03 C3.58,0.03 0,3.61 0,8.03 C0,12.45 3.58,16.03 8,16.03 C12.42,16.03 16,12.45 16,8.03 C16,3.61 12.42,0.03 8,0.03 L8,0.03 Z M9,12 L7,12 L7,10 L9,10 L9,12 L9,12 Z M9,9 L7,9 L7,4 L9,4 L9,9 L9,9 Z" transform="translate(1 1)"/>
</g><g transform="translate(572,162)"><path fill="#F4B400" fill-rule="evenodd" d="M-8.8817842e-16,1.00247329 C-8.8817842e-16,0.448822582 0.443988033,0 1.00605299,0 L8.73769782,0 C9.29332554,0 10.0186468,0.357358932 10.3566484,0.796753675 L13.7463141,5.20324633 C14.0848081,5.64328123 14.0843157,6.35735893 13.7463141,6.79675367 L10.3566484,11.2032463 C10.0181544,11.6432812 9.29976278,12 8.73769782,12 L1.00605299,12 C0.450425264,12 -8.8817842e-16,11.544239 -8.8817842e-16,10.9975267 L-8.8817842e-16,1.00247329 Z" transform="translate(2 3)"/>
</g><g transform="translate(554,94)"><path fill="#000000" fill-rule="evenodd" d="M13.9170416,9 C13.4955231,11.5125049 11.5125049,13.4955231 9,13.9170416 L9,9 L13.9170416,9 Z M13.9170416,7 C13.4955231,4.48749513 11.5125049,2.50447689 9,2.08295844 L9,7 L13.9170416,7 Z M7,2.08295844 C4.16228666,2.55903653 2,5.02700371 2,8 C2,10.9729963 4.16228666,13.4409635 7,13.9170416 L7,2.08295844 Z M8,16 C12.418278,16 16,12.418278 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 Z" transform="translate(1 1)"/>
</g><g transform="translate(252,270)"><polygon fill="#FFFFFF" fill-rule="evenodd" points="11.53 1.53 10.47 .47 6 4.94 1.53 .47 .47 1.53 4.94 6 .47 10.47 1.53 11.53 6 7.06 10.47 11.53 11.53 10.47 7.06 6" transform="translate(3 3)"/>
</g><g transform="translate(162,144)"><path fill="#000000" fill-rule="evenodd" d="M1,0 L17,0 C17.5522847,-1.01453063e-16 18,0.44771525 18,1 L18,15 C18,15.5522847 17.5522847,16 17,16 L1,16 C0.44771525,16 6.76353751e-17,15.5522847 0,15 L0,1 L0,1 C-6.76353751e-17,0.44771525 0.44771525,1.01453063e-16 1,0 L1,0 Z M2,2 L2,14 L16,14 L16,2 L2,2 Z M13,5.5 L16,8 L13,10.5 L13,5.5 Z M5,5.5 L5,10.5 L2,8 L5,5.5 Z M11.5,5 L6.5,5 L9,2 L11.5,5 Z M6.5,11 L11.5,11 L9,14 L6.5,11 Z" transform="translate(0 1)"/>
</g><g transform="translate(216,72)"><path fill="#FFFFFF" fill-rule="evenodd" d="M6,4 L6,0 L4,0 L4,4 L0,4 L0,6 L4,6 L4,10 L6,10 L6,6 L10,6 L10,4 L6,4 Z" transform="translate(4 4)"/>
</g><g transform="translate(370,160)"><path fill="#000000" fill-rule="evenodd" d="M9.01902793,9.72705177 C8.06535219,10.5218555 6.83851442,11 5.5,11 C2.46243388,11 0,8.53756612 0,5.5 C0,2.46243388 2.46243388,0 5.5,0 C8.53756612,0 11,2.46243388 11,5.5 C11,6.83851442 10.5218555,8.06535219 9.72705177,9.01902793 L9.98,9.27 L10.77,9.27 L14.76,13.27 L13.27,14.76 L9.27,10.77 L9.27,9.98 L9.01902793,9.72705177 Z M5.5,9.5 C7.709139,9.5 9.5,7.709139 9.5,5.5 C9.5,3.290861 7.709139,1.5 5.5,1.5 C3.290861,1.5 1.5,3.290861 1.5,5.5 C1.5,7.709139 3.290861,9.5 5.5,9.5 Z M8,6 L6,6 L6,8 L5,8 L5,6 L3,6 L3,5 L5,5 L5,3 L6,3 L6,5 L8,5 L8,6" transform="translate(2 2)"/>
</g><g transform="translate(292,72)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.455664396,-4.56419617e-27 0.995397568,7.17464814e-43 L10,7.6146463e-26 L14,4 L14,13.0046024 C14,13.5543453 13.5500512,14 12.9931545,14 L1.00684547,14 C0.450780073,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M2,2 L8,2 L8,5 L2,5 L2,2 Z M7,11 C8.1045695,11 9,10.1045695 9,9 C9,7.8954305 8.1045695,7 7,7 C5.8954305,7 5,7.8954305 5,9 C5,10.1045695 5.8954305,11 7,11 Z" transform="translate(2 2)"/>
</g><g transform="translate(126,108)"><path fill="#000000" fill-rule="evenodd" d="M6,4 L6,0 L4,0 L4,4 L0,4 L0,6 L4,6 L4,10 L6,10 L6,6 L10,6 L10,4 L6,4 Z" transform="translate(4 4)"/>
</g><g transform="translate(482,148)"><path fill="#4285F4" fill-rule="evenodd" d="M9,0.75 C4.44375,0.75 0.75,4.44375 0.75,9 C0.75,13.55625 4.44375,17.25 9,17.25 C13.55625,17.25 17.25,13.55625 17.25,9 C17.25,4.44375 13.55625,0.75 9,0.75 L9,0.75 Z M9,14.625 C5.893125,14.625 3.375,12.106875 3.375,9 C3.375,5.893125 5.893125,3.375 9,3.375 C10.516875,3.375 11.7890625,3.9328125 12.763125,4.84125 L11.150625,6.45375 C10.5665625,5.8978125 9.8259375,5.6128125 8.9990625,5.6128125 C7.1634375,5.6128125 5.675625,7.1653125 5.675625,9.0009375 C5.675625,10.8365625 7.164375,12.388125 9,12.388125 C10.6659375,12.388125 11.80125,11.4328125 12.0309375,10.123125 L9,10.123125 L9,7.96875 L14.2978125,7.96875 C14.3634375,8.3390625 14.4009375,8.7253125 14.4009375,9.1275 C14.4009375,12.34125 12.2484375,14.625 9,14.625 L9,14.625 Z"/>
</g><g transform="translate(310,342)"><polygon fill="#0F9D58" fill-rule="evenodd" points="12 5 3.125 5 7.06 1.06 6 0 0 6 6 12 7.06 10.94 3.125 7 12 7" transform="translate(3 3)"/>
</g><g transform="translate(108,180)"><path fill="#000000" fill-rule="evenodd" d="M9,14 L18,14 L18,12 L9,12 L9,14 L9,14 Z M9,2 L9,4 L18,4 L18,2 L9,2 L9,2 Z M7.5,4 L4,0.5 L0.5,4 L3,4 L3,12 L0.5,12 L4,15.5 L7.5,12 L5,12 L5,4 L7.5,4 L7.5,4 Z M9,9 L18,9 L18,7 L9,7 L9,9 L9,9 Z" transform="matrix(-1 0 0 1 18 1)"/>
</g><g transform="translate(518,202)"><path fill="#000000" fill-rule="evenodd" d="M11.9925,14.0000001 L11.9925,16.0000001 L1.00445557,16.0000001 C1.00445557,16.0000001 0,16.0000001 0,15.0042115 L0,2.00689108 L2,2.00000019 L2.0075,2.00889226 L2.0075,12.9946834 C2.0075,13.7129334 2.16375,14.0000001 2.9925,14.0000001 L11.9925,14.0000001 Z M4,9.27183201e-08 C4,9.27183201e-08 3,9.27183201e-08 3,1.00158713 L3,12.0000002 C3,13.0000001 4.00701904,13.0000001 4,13.0000001 L12.9976196,13.0000001 C13.7592811,13.0000001 14,12.7112604 14,12.0000001 L14,1.00247339 C14,0.448822675 13.5527547,9.27183201e-08 13.0033264,9.27183201e-08 L10.3525798,9.27183201e-08 L4,9.27183201e-08 Z M5.525,2.00000009 C5.0415625,2.00000009 5.004375,2.05659625 5.004375,2.55384625 L5,10.4461539 C5,10.9434039 5.0371875,11.0000001 5.520625,11.0000001 L11.475,11.0000001 C11.9584375,11.0000001 12,10.9434039 12,10.4461539 C12,10.4461539 12,3.00771678 12,2.55384627 C12,2.09997577 11.4749999,2.00000009 11.4749999,2.00000009 L5.525,2.00000009 Z" transform="matrix(1 0 0 -1 2 17)"/>
</g><g transform="translate(202,396)"><path fill="#000000" fill-rule="evenodd" d="M0,4.5 L4,0 L12,0 L12,12 L0,12 L0,4.5 Z M2,5.5 L5,2 L12,2 L12,12 L2,12 L2,5.5 Z M4,4 L8,4 L8,8 L4,8 L4,4 Z M8,5 L12,5 L12,7 L8,7 L8,5 Z M7,8 L7,12 L5,12 L5,8 L7,8 Z" transform="translate(3 3)"/>
</g><g transform="translate(418,342)"><path fill="#000000" fill-rule="evenodd" d="M5,5 L9,5 L9,13 L5,13 L5,5 Z M10,13 L12.4,13 C13.28,13 14,12.3454545 14,11.5454545 L14,5 L10,5 L10,13 Z M12.5263158,0 L1.47368421,0 C0.663157895,0 0,0.72 0,1.6 L0,4 L14,4 L14,1.6 C14,0.72 13.3368421,0 12.5263158,0 Z M0,11.5454545 C0,12.3454545 0.72,13 1.6,13 L4,13 L4,5 L0,5 L0,11.5454545 Z" transform="translate(2 2)"/>
</g><g transform="translate(198,108)"><path fill="#000000" fill-rule="evenodd" d="M8,0.03 C3.58,0.03 0,3.61 0,8.03 C0,12.45 3.58,16.03 8,16.03 C12.42,16.03 16,12.45 16,8.03 C16,3.61 12.42,0.03 8,0.03 L8,0.03 Z M9,12 L7,12 L7,10 L9,10 L9,12 L9,12 Z M9,9 L7,9 L7,4 L9,4 L9,9 L9,9 Z" transform="translate(1 1)" opacity=".38"/>
</g><g transform="translate(328,342)"><path fill="#000000" fill-rule="evenodd" d="M10,7 L10,5 L9,5 L9,7 L7,7 L7,8 L9,8 L9,10 L10,10 L10,8 L12,8 L12,7 L10,7 Z M13,2 L8,2 L6,0 L1,0 C0.45,0 0,0.45 0,1 L0,11 C0,11.55 0.45,12 1,12 L13,12 C13.55,12 14,11.55 14,11 L14,3 C14,2.45 13.55,2 13,2 Z M13,11 L1,11 L1,3 L13,3 L13,11 Z" transform="translate(2 3)" opacity=".54"/>
</g><g transform="translate(464,18)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<rect width="9" height="2" x="5" y="1"/>
<rect width="9" height="2" x="5" y="6"/>
<rect width="9" height="2" x="5" y="11"/>
<circle cx="2" cy="2" r="1.5"/>
<circle cx="2" cy="7" r="1.5"/>
<circle cx="2" cy="12" r="1.5"/>
</g>
</g><g transform="translate(572,252)"><path fill="#4285F4" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M9,12 L4,12 L4,10 L9,10 L9,12 L9,12 Z M12,9 L4,9 L4,7 L12,7 L12,9 L12,9 Z M12,6 L4,6 L4,4 L12,4 L12,6 L12,6 Z" transform="translate(1 1)"/>
</g><g transform="translate(234,306)"><path fill="#000000" fill-rule="evenodd" d="M0,14 L3,14 L3,5 L0,5 L0,14 L0,14 Z M14.7325,5 L10,5 L10.48,1.8225 L10.5025,1.5825 C10.5025,1.275 10.375,0.99 10.1725,0.7875 L9.3775,0 L4.4425,4.9425 C4.165,5.2125 4,5.5875 4,6 L4,13.5 C4,14.325 4.675,15 5.5,15 L12.25,15 C12.8725,15 13.405,14.625 13.63,14.085 L15.895,8.7975 C15.9625,8.625 16,8.445 16,8.25 C16,8.25 15.9277936,7.02252557 16,6.5 C16.0052936,6.46169224 16,6.5675 16,6.5675 L16,6.5 C16,5.675 15.5575,5 14.7325,5 Z" transform="translate(1 1)"/>
</g><g transform="translate(346,342)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M2.5,12 L5.25,8.46 L7.21,10.82 L9.96,7.28 L13.5,12 L2.5,12 L2.5,12 Z" transform="translate(1 1)"/>
</g><g transform="translate(144,342)"><path fill="#000000" fill-rule="evenodd" d="M0.459262274,1.72702923 L3.82798751,11.1061621 L5.24220107,9.69194854 L4.7372583,8.47989899 L8.27279221,4.94436508 L9.47487373,5.43933983 L10.8990553,4.03509429 L1.51992245,0.666369055 L0.459262274,1.72702923 Z M2.40380592,2.6109127 L6.56866486,4.13119228 L3.9240855,6.77577164 L2.40380592,2.6109127 Z M11.7573593,4 L13.1715729,5.41421356 L4.6862915,13.8994949 L6.10050506,15.3137085 L14.5857864,6.82842712 L16,8.24264069 L16,4 L11.7573593,4 Z" transform="translate(1 1)"/>
</g><g transform="translate(162,126)"><path fill="#000000" fill-rule="evenodd" d="M6,10 L14,10 L14,8 L6,8 L6,10 L6,10 Z M3.5,7 L0,3.5 L0,10.5 L3.5,7 L3.5,7 Z M0,14 L14,14 L14,12 L0,12 L0,14 L0,14 Z M0,0 L0,2 L14,2 L14,0 L0,0 L0,0 Z M6,6 L14,6 L14,4 L6,4 L6,6 L6,6 Z" transform="matrix(-1 0 0 1 16 2)"/>
</g><g transform="translate(274,126)"><polygon fill="#4285F4" fill-opacity=".78" fill-rule="evenodd" points="5 0 5 10 0 5" transform="translate(6 4)"/>
</g><g transform="translate(346,160)"><polygon fill="#FFFFFF" fill-rule="evenodd" points="8 0 6.59 1.41 12.17 7 0 7 0 9 12.17 9 6.59 14.59 8 16 16 8" transform="translate(4 4)"/>
</g><g transform="translate(54,360)"><path fill="#000000" fill-rule="evenodd" d="M12.7101213,4 L14.9975267,4 C15.5511774,4 16,4.45576096 16,5.00247329 L16,14.9975267 C16,15.5511774 15.544239,16 14.9975267,16 L5.00247329,16 C4.44882258,16 4,15.544239 4,14.9975267 L4,12.7101213 C4.63370941,12.8987225 5.30502739,13 6,13 L6,14 L14,14 L14,6 L13,6 C13,5.30502739 12.8987225,4.63370941 12.7101213,4 Z M6,12 C9.3137085,12 12,9.3137085 12,6 C12,2.6862915 9.3137085,0 6,0 C2.6862915,0 0,2.6862915 0,6 C0,9.3137085 2.6862915,12 6,12 Z M6,10 C8.209139,10 10,8.209139 10,6 C10,3.790861 8.209139,2 6,2 C3.790861,2 2,3.790861 2,6 C2,8.209139 3.790861,10 6,10 Z" transform="translate(1 1)"/>
</g><g transform="translate(90,234)"><path fill="#000000" fill-rule="evenodd" d="M4.94,5 L0,5 L0,13 L14,13 L14,5 L9.06,5 L10.53,6.47 L9.47,7.53 L7,5.06 L4.53,7.53 L3.47,6.47 L4.94,5 L2,5 L2,11 L12,11 L12,5 L9.06,5 L8.06,4 L10.53,1.53 L9.47,0.47 L7,2.94 L4.53,0.47 L3.47,1.53 L5.94,4 L4.94,5 Z" transform="translate(2 2)"/>
</g><g transform="translate(572,144)"><polygon fill="#000000" fill-rule="evenodd" points="0 2 1.5 .5 6 5 10.5 .5 12 2 6 8" transform="translate(3 5)"/>
</g><g transform="translate(500,238)"><path fill="#000000" fill-rule="evenodd" d="M6,5 L2,9 L3,10 L0,13 L4,13 L5,12 L5,12 L6,13 L10,9 L6,5 L6,5 Z M10.2937851,0.706214905 C10.6838168,0.316183183 11.3138733,0.313873291 11.7059121,0.705912054 L14.2940879,3.29408795 C14.6839524,3.68395241 14.6796852,4.32031476 14.2937851,4.7062149 L11,8 L7,4 L10.2937851,0.706214905 Z" transform="translate(2)"/>
</g><g transform="translate(572,90)"><polygon fill="#000000" fill-rule="evenodd" points="1.415 0 0 1.415 4.585 6 0 10.585 1.415 12 7.415 6" transform="matrix(-1 0 0 1 12.415 3)"/>
</g><g transform="translate(0,0)"><path fill="#000000" fill-rule="evenodd" d="M0,1.00684547 C0,0.450780073 0.444630861,0 1.00087166,0 L14.9991283,0 C15.5518945,0 16,0.449948758 16,1.00684547 L16,12.9931545 C16,13.5492199 15.5553691,14 14.9991283,14 L1.00087166,14 C0.448105505,14 0,13.5500512 0,12.9931545 L0,1.00684547 Z M2,2 L7,2 L7,6 L2,6 L2,2 Z M2,8 L7,8 L7,12 L2,12 L2,8 Z M9,2 L14,2 L14,6 L9,6 L9,2 Z M9,8 L14,8 L14,12 L9,12 L9,8 Z" transform="translate(1 2)"/>
</g><g transform="translate(428,72)"><defs><linearGradient id="a" x1="50.005%" x2="50.005%" y1="8.586%" y2="100.014%"><stop stop-color="#1A237E" stop-opacity=".2" offset="0%"/><stop stop-color="#1A237E" stop-opacity=".02" offset="100%"/></linearGradient><radialGradient id="b" cx="3.168%" cy="2.718%" r="161.248%" fx="3.168%" fy="2.718%" gradientTransform="matrix(1 0 0 .72222 0 .008)"><stop stop-color="#FFF" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path fill="#4285F4" d="M9.5 2H24l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5v-31C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="#1A237E" fill-opacity=".2" d="M7 35c0 1.3807119 1.11928813 2.5 2.5 2.5h21c1.3807119 0 2.5-1.1192881 2.5-2.5v.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C8.11928813 38 7 36.8807119 7 35.5V35z"/><path fill="#FFF" fill-opacity=".2" d="M9.5 2H24v.5H9.5C8.11928813 2.5 7 3.61928813 7 5v-.5C7 3.11928813 8.11928813 2 9.5 2z"/><path fill="url(#a)" fill-rule="nonzero" d="M17.5 8l8.5 8.5V9" transform="translate(7 2)"/><path fill="#A1C2FA" d="M24 2l9 9h-6.5C25.1192881 11 24 9.88071187 24 8.5V2z"/><path fill="#F1F1F1" d="M13 18h14v2H13v-2zm0 4h14v2H13v-2zm0 4h14v2H13v-2zm0 4h10v2H13v-2z"/><path fill="url(#b)" fill-opacity=".1" d="M2.5 0H17l9 9v24.5c0 1.3807119-1.1192881 2.5-2.5 2.5h-21C1.11928813 36 0 34.8807119 0 33.5v-31C0 1.11928813 1.11928813 0 2.5 0z" transform="translate(7 2)"/></g></g><g transform="translate(90,144)"><path fill="#000000" fill-rule="evenodd" d="M18,0 L18,4 L17,4 L17,14 L18,14 L18,18 L14,18 L14,17 L4,17 L4,18 L0,18 L0,14 L1,14 L1,4 L0,4 L0,0 L4,0 L4,1 L14,1 L14,0 L18,0 Z M1,1 L1,3 L3,3 L3,1 L1,1 Z M15,1 L15,3 L17,3 L17,1 L15,1 Z M1,15 L1,17 L3,17 L3,15 L1,15 Z M15,15 L15,17 L17,17 L17,15 L15,15 Z M4,15 L14,15 L14,14 L15,14 L15,4 L14,4 L14,3 L4,3 L4,4 L3,4 L3,14 L4,14 L4,15 Z M5,5 L13,5 L13,7 L5,7 L5,5 Z M8,7 L10,7 L10,13 L8,13 L8,7 Z"/>
</g><g transform="translate(292,54)"><path fill="#000000" fill-rule="evenodd" d="M0.01,1 L0,15 C0,15.55 0.44,16 1,16 L11,16 C11.55,16 12,15.55 12,15 L12,5 L7,0 L1,0 C0.45,0 0.01,0.45 0.01,1 Z M6,10 L6,7 L5,7 L5,10 L2,10 L2,11 L5,11 L5,14 L6,14 L6,11 L9,11 L9,10 L6,10 Z M7,5 L7,1 L11,5 L7,5 Z" transform="translate(3 1)"/>
</g><g transform="translate(256,360)"><g fill="#000000" fill-rule="evenodd" transform="translate(2 2)">
<path d="M0,2 L2,2 L2,0 L0,0 L0,2 L0,2 Z M3,2 L5,2 L5,0 L3,0 L3,2 L3,2 Z M3,8 L5,8 L5,6 L3,6 L3,8 L3,8 Z M3,14 L5,14 L5,12 L3,12 L3,14 L3,14 Z M0,5 L2,5 L2,3 L0,3 L0,5 L0,5 Z M0,8 L2,8 L2,6 L0,6 L0,8 L0,8 Z M0,14 L2,14 L2,12 L0,12 L0,14 L0,14 Z M0,11 L2,11 L2,9 L0,9 L0,11 L0,11 Z M9,8 L11,8 L11,6 L9,6 L9,8 L9,8 Z M6,14 L8,14 L8,12 L6,12 L6,14 L6,14 Z M9,14 L11,14 L11,12 L9,12 L9,14 L9,14 Z M6,2 L8,2 L8,0 L6,0 L6,2 L6,2 Z M9,2 L11,2 L11,0 L9,0 L9,2 L9,2 Z M6,11 L8,11 L8,9 L6,9 L6,11 L6,11 Z M6,5 L8,5 L8,3 L6,3 L6,5 L6,5 Z M6,8 L8,8 L8,6 L6,6 L6,8 L6,8 Z" opacity=".54"/>
<polygon points="12 0 12 14 14 14 14 0"/>
</g>
</g><g transform="translate(346,184)"><g fill="none" fill-rule="evenodd">
<path fill="#000000" d="M14.5,8.87 C14.5,8.87 13,10.49 13,11.49 C13,12.32 13.67,12.99 14.5,12.99 C15.33,12.99 16,12.32 16,11.49 C16,10.5 14.5,8.87 14.5,8.87 L14.5,8.87 Z M12.71,6.79 L5.91,0 L4.85,1.06 L6.44,2.65 L2.29,6.79 C1.9,7.18 1.9,7.81 2.29,8.2 L6.79,12.7 C6.99,12.9 7.24,13 7.5,13 C7.76,13 8.01,12.9 8.21,12.71 L12.71,8.21 C13.1,7.82 13.1,7.18 12.71,6.79 L12.71,6.79 Z M4.21,7 L7.5,3.71 L10.79,7 L4.21,7 L4.21,7 Z"/>
</g>
</g><g transform="translate(292,162)"><g fill="#000000" fill-rule="evenodd" transform="rotate(-180 8 8)">
<rect width="9" height="2" x="5" y="1"/>
<rect width="9" height="2" x="5" y="6"/>
<rect width="9" height="2" x="5" y="11"/>
<circle cx="2" cy="2" r="1.5"/>
<circle cx="2" cy="7" r="1.5"/>
<circle cx="2" cy="12" r="1.5"/>
</g>
</g><g transform="translate(352,280)"><path fill="#000000" fill-rule="evenodd" d="M9,0 L1,0 C0.45,0 0,0.45 0,1 L0,4 C0,4.55 0.45,5 1,5 L9,5 C9.55,5 10,4.55 10,4 L10,3 L11,3 L11,6 L4,6 L4,14 L6,14 L6,8 L13,8 L13,2 L10,2 L10,1 C10,0.45 9.55,0 9,0 Z" transform="translate(3 2)"/>
</g><g transform="translate(216,342)"><path fill="#000000" fill-rule="evenodd" d="M2,0.5 C1.17,0.5 0.5,1.17 0.5,2 C0.5,2.83 1.17,3.5 2,3.5 C2.83,3.5 3.5,2.83 3.5,2 C3.5,1.17 2.83,0.5 2,0.5 L2,0.5 Z M12,0.5 C11.17,0.5 10.5,1.17 10.5,2 C10.5,2.83 11.17,3.5 12,3.5 C12.83,3.5 13.5,2.83 13.5,2 C13.5,1.17 12.83,0.5 12,0.5 L12,0.5 Z M7,0.5 C6.17,0.5 5.5,1.17 5.5,2 C5.5,2.83 6.17,3.5 7,3.5 C7.83,3.5 8.5,2.83 8.5,2 C8.5,1.17 7.83,0.5 7,0.5 L7,0.5 Z" transform="translate(2 7)"/>
</g><g transform="translate(464,112)"><path fill="#000000" fill-rule="evenodd" d="M1.88,7.25 C2.84649831,7.25 3.63,6.46649831 3.63,5.5 C3.63,4.53350169 2.84649831,3.75 1.88,3.75 C0.913501688,3.75 0.13,4.53350169 0.13,5.5 C0.13,6.46649831 0.913501688,7.25 1.88,7.25 Z M4.75,4.25 C5.71649831,4.25 6.5,3.46649831 6.5,2.5 C6.5,1.53350169 5.71649831,0.75 4.75,0.75 C3.78350169,0.75 3,1.53350169 3,2.5 C3,3.46649831 3.78350169,4.25 4.75,4.25 Z M9,4.25 C9.96649831,4.25 10.75,3.46649831 10.75,2.5 C10.75,1.53350169 9.96649831,0.75 9,0.75 C8.03350169,0.75 7.25,1.53350169 7.25,2.5 C7.25,3.46649831 8.03350169,4.25 9,4.25 Z M12.12,7.25 C13.0864983,7.25 13.87,6.46649831 13.87,5.5 C13.87,4.53350169 13.0864983,3.75 12.12,3.75 C11.1535017,3.75 10.37,4.53350169 10.37,5.5 C10.37,6.46649831 11.1535017,7.25 12.12,7.25 Z M8.89,6.3 C8.54,5.9 8.17,5.54 7.63,5.36 C7.39,5.28 6.8,5.25 6.8,5.25 C6.55,5.25 6.3,5.29 6.06,5.36 C5.52,5.54 5.19,5.9 4.84,6.3 C4.28,6.95 3.78,7.64 3.18,8.25 C2.26,9.19 1.15,10.13 1.43,11.54 C1.59,12.34 2.13,12.96 2.97,13.22 C3.44,13.36 5.03,12.92 6.81,12.92 C8.59,12.92 10.34,13.37 10.81,13.22 C11.65,12.96 12.18,12.34 12.34,11.54 C12.62,10.13 11.5,9.19 10.58,8.25 C9.97,7.64 9.45,6.95 8.89,6.3 Z" transform="translate(2 2)"/>
</g><g transform="translate(274,180)"><polygon fill="#000000" fill-rule="evenodd" points="0 0 0 11 3 8 6.5 14 8 13 4.5 7 9 7" transform="translate(5 2)"/>
</g><g transform="translate(406,280)"><path fill="#0F9D58" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 Z M15,7 L7,7 L7,14 L5,14 L5,7 L2,7 L2,5 L5,5 L5,2 L7,2 L7,5 L15,5 L15,7 Z" transform="translate(1 1)"/>
</g><g transform="translate(446,112)"><path fill="#000000" fill-rule="evenodd" d="M15,0 L1,0 C0.45,0 0,0.45 0,1 L0,15 C0,15.55 0.45,16 1,16 L15,16 C15.55,16 16,15.55 16,15 L16,1 C16,0.45 15.55,0 15,0 L15,0 Z M3,4 L5,4 L5,6 L3,6 L3,4 L3,4 Z M3,7 L5,7 L5,9 L3,9 L3,7 L3,7 Z M3,10 L5,10 L5,12 L3,12 L3,10 L3,10 Z M13,12 L6,12 L6,10 L13,10 L13,12 L13,12 Z M13,9 L6,9 L6,7 L13,7 L13,9 L13,9 Z M13,6 L6,6 L6,4 L13,4 L13,6 L13,6 Z" transform="translate(1 1)"/>
</g><g transform="translate(536,94)"><path fill="#000000" fill-rule="evenodd" d="M11.1984243,12.7314433 C10.1705378,13.2376004 9.01347324,13.51339 7.81008922,13.51339 C3.76079474,13.51339 0.486938477,10.4180495 0.486938477,6.60969321 C0.486938477,5.38242903 0.829564562,4.20636592 1.45265328,3.18078427 C1.16977004,2.84491791 1,2.41529191 1,1.94706351 C1,0.871730025 1.8954305,-1.42108547e-14 3,-1.42108547e-14 C4.1045695,-1.42108547e-14 5,0.871730025 5,1.94706351 C5,3.0129437 4.12024382,3.87878446 3.02908196,3.89392536 C2.52395643,4.68714001 2.23341168,5.61633656 2.23341168,6.60969321 C2.23341168,9.52166659 4.73017526,11.8822874 7.81008922,11.8822874 C8.61187491,11.8822874 9.37414032,11.7223074 10.0631246,11.4342674 C10.0219176,11.2785555 10,11.1153013 10,10.9470635 C10,9.87173003 10.8954305,9 12,9 C13.1045695,9 14,9.87173003 14,10.9470635 C14,12.022397 13.1045695,12.894127 12,12.894127 C11.7149481,12.894127 11.4438245,12.8360715 11.1984243,12.7314433 Z" transform="translate(2 2)"/>
</g><g transform="translate(108,144)"><path fill="#000000" fill-rule="evenodd" d="M0,0 L0,1 L6,7 L6,12 L8,11 L8,7 L14,1 L14,0 L0,0 Z M4,3 L10,3 L7,6 L4,3 Z" transform="translate(2 3)"/>
</g><g transform="translate(446,238)"><polygon fill="#000000" fill-rule="evenodd" points="4.75 8.127 1.623 5 .561 6.061 4.75 10.25 13.75 1.25 12.689 .189" transform="translate(2 4)"/>
</g></svg>

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1022 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

@ -0,0 +1,42 @@
// Features specially written for demo
(function() {
// language
function language(params) {
var lang = navigator.language||navigator.userLanguage;//常规浏览器语言和IE浏览器
lang = lang.substr(0, 2);//截取lang前2位字符
return lang;
}
// Tencent Forum Link Button
function supportButton() {
const text = language() === 'zh' ? '反馈' : 'Forum';
const link = language() === 'zh' ? 'https://support.qq.com/product/288322' : 'https://groups.google.com/g/luckysheet';
document.querySelector("body").insertAdjacentHTML('beforeend', '<a id="container" href="'+ link +'" target="_blank" style="z-index:2;width:50px;height:50px;line-height:50px;position:fixed;right:40px;bottom:86px;border-radius:50px;cursor:pointer;background:rgb(71,133,249);color:#fff;text-align:center;text-decoration:none;">'+ text +'</a>');
}
supportButton()
/**
* Get url parameters
*/
function getRequest() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
window.luckysheetDemoUtil = {
language:language,
getRequest:getRequest
}
})()

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -0,0 +1,67 @@
window.sheetComment = {
"name": "Comment",
"color": "",
"config": {
"columnlen": {
"2": 102
}
},
"index": "5",
"chart": [],
"status": 0,
"order": "5",
"column": 18,
"row": 36,
"celldata": [{
"r": 2,
"c": 2,
"v": {
"m": "HoverShown",
"ct": {
"fa": "General",
"t": "g"
},
"v": "HoverShown",
"bl": 1,
"ps": {
"left": null,
"top": null,
"width": null,
"height": null,
"value": "Hello world!",
"isshow": false
}
}
}, {
"r": 7,
"c": 2,
"v": {
"m": "Size",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Size",
"bl": 1,
"ps": {
"left": null,
"top": null,
"width": null,
"height": null,
"value": "Hello,world!",
"isshow": true
}
}
}],
"ch_width": 4748,
"rh_height": 1790,
"luckysheet_select_save": [{
"row": [0, 0],
"column": [0, 0]
}],
"luckysheet_selection_range": [],
"scrollLeft": 0,
"scrollTop": 0
}
// export default sheetComment;

File diff suppressed because it is too large Load Diff

@ -0,0 +1,579 @@
window.sheetDataVerification = {
"name": "Data Verification",
"index": "Sheet_pdolzzie5xwi_1600927444446",
"celldata": [{"r":0,"c":0,"v":{"ct":{"fa":"General","t":"g"},"m":"Drop Down List","v":"Drop Down List","bl":1}},{"r":0,"c":1,"v":{"m":"Checkbox","ct":{"fa":"General","t":"g"},"v":"Checkbox","bl":1}},{"r":0,"c":2,"v":{"ct":{"fa":"General","t":"g"},"v":"Number between 1-10","bl":1,"m":"Number between 1-10"}},{"r":0,"c":3,"v":{"m":"Text content include Luckysheet","ct":{"fa":"General","t":"g"},"v":"Text content include Luckysheet","bl":1}},{"r":0,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Text length between 1-5","m":"Text length between 1-5","bl":1}},{"r":0,"c":5,"v":{"m":"Date","ct":{"fa":"General","t":"g"},"v":"Date","bl":1}},{"r":0,"c":6,"v":{"m":"Identification Number","ct":{"fa":"General","t":"g"},"v":"Identification Number","bl":1}},{"r":0,"c":7,"v":{"m":"Phone Number","ct":{"fa":"General","t":"g"},"v":"Phone Number","bl":1}},{"r":1,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Fix","m":"Fix"}},{"r":1,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":1,"c":2,"v":{"v":1,"ct":{"fa":"General","t":"n"},"m":"1"}},{"r":1,"c":3,"v":{"m":"Luckysheet is good","ct":{"fa":"General","t":"g"},"v":"Luckysheet is good"}},{"r":1,"c":4,"v":{"m":"Welcome","ct":{"fa":"General","t":"g"},"v":"Welcome"}},{"r":1,"c":5,"v":{"m":"2020-09-24","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44098}},{"r":1,"c":6,"v":{"v":"311414199009138910","ct":{"fa":"@","t":"s"},"m":"311414199009138910"}},{"r":1,"c":7,"v":{"v":13678765439,"ct":{"fa":"General","t":"n"},"m":"13678765439"}},{"r":2,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Done","m":"Done"}},{"r":2,"c":1,"v":{"m":"Pass","ct":{"fa":"General","t":"g"},"v":"Pass"}},{"r":2,"c":2,"v":{"v":2,"ct":{"fa":"General","t":"n"},"m":"2"}},{"r":2,"c":3,"v":{"m":"I am Luckysheet","ct":{"fa":"General","t":"g"},"v":"I am Luckysheet"}},{"r":2,"c":4,"v":{"m":"Good","ct":{"fa":"General","t":"g"},"v":"Good"}},{"r":2,"c":5,"v":{"ct":{"fa":"General","t":"g"},"v":"Time","m":"Time"}},{"r":2,"c":6,"v":{"v":"31141419900913891","ct":{"fa":"@","t":"s"},"m":"31141419900913891"}},{"r":2,"c":7,"v":{"v":1367876544,"ct":{"fa":"General","t":"n"},"m":"1367876544"}},{"r":3,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Develop","m":"Develop"}},{"r":3,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":3,"c":2,"v":{"v":5,"ct":{"fa":"General","t":"n"},"m":"5"}},{"r":3,"c":3,"v":{"ct":{"fa":"General","t":"g"},"v":"I am luckyDemo","m":"I am luckyDemo"}},{"r":3,"c":4,"v":{"m":"Nice","ct":{"fa":"General","t":"g"},"v":"Nice"}},{"r":3,"c":5,"v":{"m":"2020-09-26","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44100}},{"r":3,"c":6,"v":{"v":"3114141990091389102","ct":{"fa":"@","t":"s"},"m":"3114141990091389102"}},{"r":3,"c":7,"v":{"v":136787654412,"ct":{"fa":"##0","t":"n"},"m":"136787654412"}},{"r":4,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Doing","m":"Doing"}},{"r":4,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":4,"c":2,"v":{"v":11,"ct":{"fa":"General","t":"n"},"m":"11"}},{"r":4,"c":3,"v":{"ct":{"fa":"General","t":"g"},"v":"Luckysheet Documentation","m":"Luckysheet Documentation"}},{"r":4,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Morning","m":"Morning"}},{"r":4,"c":5,"v":{"m":"2020-09-27","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44101}},{"r":4,"c":6,"v":{"v":"31141419900913891X","ct":{"fa":"@","t":"s"},"m":"31141419900913891X"}},{"r":4,"c":7,"v":{"v":49865342456,"ct":{"fa":"General","t":"n"},"m":"49865342456"}},{"r":5,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Develop","m":"Develop"}},{"r":5,"c":1,"v":{"m":"Fail","ct":{"fa":"General","t":"g"},"v":"Fail"}},{"r":5,"c":2,"v":{"v":3,"ct":{"fa":"General","t":"n"},"m":"3"}},{"r":5,"c":3,"v":{"m":"Luckyexcel","ct":{"fa":"General","t":"g"},"v":"Luckyexcel"}},{"r":5,"c":4,"v":{"ct":{"fa":"General","t":"g"},"v":"Tomorrow","m":"Tomorrow"}},{"r":5,"c":5,"v":{"ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44071,"m":"2020-08-28"}},{"r":5,"c":6,"v":{"v":"Number","ct":{"fa":"@","t":"s"},"m":"Number"}},{"r":5,"c":7,"v":{"v":"Number","ct":{"fa":"General","t":"g"},"m":"Number"}},{"r":6,"c":0,"v":{"ct":{"fa":"General","t":"g"},"v":"Done","m":"Done"}},{"r":6,"c":1,"v":{"m":"Pass","ct":{"fa":"General","t":"g"},"v":"Pass"}},{"r":6,"c":2,"v":{"v":0,"ct":{"fa":"General","t":"n"},"m":"0"}},{"r":6,"c":3,"v":{"m":"Luckysheet Online","ct":{"fa":"General","t":"g"},"v":"Luckysheet Online"}},{"r":6,"c":4,"v":{"m":"Three","ct":{"fa":"General","t":"g"},"v":"Three"}},{"r":6,"c":5,"v":{"m":"2020-09-29","ct":{"fa":"yyyy-MM-dd","t":"d"},"v":44103}},{"r":6,"c":6,"v":{"v":"311414199301118910","ct":{"fa":"@","t":"s"},"m":"311414199301118910"}},{"r":6,"c":7,"v":{"v":23309873564,"ct":{"fa":"General","t":"n"},"m":"23309873564"}},{"r":7,"c":8,"v":{"v":null,"ct":{"fa":"General","t":"g"},"bl":1}}],
"row": 84,
"column": 60,
"config": {
"merge": {},
"rowlen": {},
"columnlen": {
"0": 109,
"2": 143,
"3": 200,
"4": 180,
"6": 178,
"7": 125
},
"customWidth": {
"2": 1,
"3": 1,
"4": 1,
"6": 1,
"7": 1
}
},
"luckysheet_select_save": [
{
"left": 963,
"width": 125,
"top": 240,
"height": 19,
"left_move": 963,
"width_move": 125,
"top_move": 240,
"height_move": 19,
"row": [
12,
12
],
"column": [
7,
7
],
"row_focus": 12,
"column_focus": 7
}
],
"dataVerification": {
"1_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"2_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"3_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"4_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"5_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"6_0": {
"type": "dropdown",
"type2": null,
"value1": "Develop,Fix,Done",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"1_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": false,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"2_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": true,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"3_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": false,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"4_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": false,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"5_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": false,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"6_1": {
"type": "checkbox",
"type2": null,
"value1": "Pass",
"value2": "Fail",
"checked": true,
"remote": true,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"1_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"2_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"3_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"4_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"5_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"6_2": {
"type": "number",
"type2": "bw",
"value1": "1",
"value2": "10",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"1_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"2_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"3_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"4_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"5_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"6_3": {
"type": "text_content",
"type2": "include",
"value1": "Luckysheet",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": true,
"hintText": "include Luckysheet"
},
"1_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"2_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"3_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"4_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"5_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"6_4": {
"type": "text_length",
"type2": "bw",
"value1": "1",
"value2": "5",
"checked": false,
"remote": false,
"prohibitInput": true,
"hintShow": false,
"hintText": ""
},
"1_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"2_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"3_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"4_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"5_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"6_5": {
"type": "date",
"type2": "bw",
"value1": "2020-09-23",
"value2": "2020-10-10",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"1_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"2_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"3_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"4_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"5_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"6_6": {
"type": "validity",
"type2": "card",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"1_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"2_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"3_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"4_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"5_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
},
"6_7": {
"type": "validity",
"type2": "phone",
"value1": "",
"value2": "",
"checked": false,
"remote": false,
"prohibitInput": false,
"hintShow": false,
"hintText": ""
}
}
}
// export default sheetDataVerification;

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

@ -0,0 +1,189 @@
window.sheetPivotTable = {
"name": "PivotTable",
"color": "",
"config": {},
"index": "7",
"chart": [],
"status": 0,
"order": "7",
"column": 18,
"row": 36,
"celldata": [{
"r": 0,
"c": 0,
"v": "count:score"
}, {
"r": 0,
"c": 1,
"v": "science"
}, {
"r": 0,
"c": 2,
"v": "mathematics"
}, {
"r": 0,
"c": 3,
"v": "foreign language"
}, {
"r": 0,
"c": 4,
"v": "English"
}, {
"r": 0,
"c": 5,
"v": "total"
}, {
"r": 1,
"c": 0,
"v": "Alex"
}, {
"r": 1,
"c": 1,
"v": 1
}, {
"r": 1,
"c": 2,
"v": 1
}, {
"r": 1,
"c": 3,
"v": 1
}, {
"r": 1,
"c": 4,
"v": 1
}, {
"r": 1,
"c": 5,
"v": 4
}, {
"r": 2,
"c": 0,
"v": "Joy"
}, {
"r": 2,
"c": 1,
"v": 1
}, {
"r": 2,
"c": 2,
"v": 1
}, {
"r": 2,
"c": 3,
"v": 1
}, {
"r": 2,
"c": 4,
"v": 1
}, {
"r": 2,
"c": 5,
"v": 4
}, {
"r": 3,
"c": 0,
"v": "Tim"
}, {
"r": 3,
"c": 1,
"v": 1
}, {
"r": 3,
"c": 2,
"v": 1
}, {
"r": 3,
"c": 3,
"v": 1
}, {
"r": 3,
"c": 4,
"v": 1
}, {
"r": 3,
"c": 5,
"v": 4
}, {
"r": 4,
"c": 0,
"v": "total"
}, {
"r": 4,
"c": 1,
"v": 3
}, {
"r": 4,
"c": 2,
"v": 3
}, {
"r": 4,
"c": 3,
"v": 3
}, {
"r": 4,
"c": 4,
"v": 3
}, {
"r": 4,
"c": 5,
"v": 12
}],
"ch_width": 4748,
"rh_height": 1790,
"luckysheet_select_save": [{
"row": [0, 0],
"column": [0, 0]
}],
"luckysheet_selection_range": [],
"scrollLeft": 0,
"scrollTop": 0,
"isPivotTable": true,
"pivotTable": {
"pivot_select_save": {
"left": 0,
"width": 73,
"top": 0,
"height": 19,
"left_move": 0,
"width_move": 369,
"top_move": 0,
"height_move": 259,
"row": [0, 12],
"column": [0, 4],
"row_focus": 0,
"column_focus": 0
},
"pivotDataSheetIndex": 6, //The sheet index where the source data is located
"column": [{
"index": 3,
"name": "subject",
"fullname": "subject"
}],
"row": [{
"index": 1,
"name": "student",
"fullname": "student"
}],
"filter": [],
"values": [{
"index": 4,
"name": "score",
"fullname": "count:score",
"sumtype": "COUNTA",
"nameindex": 0
}],
"showType": "column",
"pivotDatas": [
["count:score", "science", "mathematics", "foreign language", "English", "total"],
["Alex", 1, 1, 1, 1, 4],
["Joy", 1, 1, 1, 1, 4],
["Tim", 1, 1, 1, 1, 4],
["total", 3, 3, 3, 3, 12]
],
"drawPivotTable": false,
"pivotTableBoundary": [5, 6]
}
}
// export default sheetPivotTable;

@ -0,0 +1,741 @@
window.sheetPivotTableData = {
"name": "PivotTableData",
"color": "",
"config": {
"merge": {}
},
"index": "6",
"chart": [],
"status": 0,
"order": "6",
"hide": 0,
"column": 18,
"row": 36,
"celldata": [{
"r": 0,
"c": 0,
"v": {
"m": "Mock test",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Mock test"
}
}, {
"r": 0,
"c": 1,
"v": {
"m": "student",
"ct": {
"fa": "General",
"t": "g"
},
"v": "student"
}
}, {
"r": 0,
"c": 2,
"v": {
"m": "class",
"ct": {
"fa": "General",
"t": "g"
},
"v": "class"
}
}, {
"r": 0,
"c": 3,
"v": {
"m": "subject",
"ct": {
"fa": "General",
"t": "g"
},
"v": "subject"
}
}, {
"r": 0,
"c": 4,
"v": {
"m": "score",
"ct": {
"fa": "General",
"t": "g"
},
"v": "score"
}
}, {
"r": 1,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 1,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Joy",
"m": "Joy"
}
}, {
"r": 1,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 1,
"c": 3,
"v": {
"m": "English",
"ct": {
"fa": "General",
"t": "g"
},
"v": "English"
}
}, {
"r": 1,
"c": 4,
"v": {
"v": 96,
"ct": {
"fa": "General",
"t": "n"
},
"m": "96"
}
}, {
"r": 2,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 2,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Joy",
"m": "Joy"
}
}, {
"r": 2,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 2,
"c": 3,
"v": {
"m": "mathematics",
"ct": {
"fa": "General",
"t": "g"
},
"v": "mathematics"
}
}, {
"r": 2,
"c": 4,
"v": {
"v": 110,
"ct": {
"fa": "General",
"t": "n"
},
"m": "110"
}
}, {
"r": 3,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 3,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Joy",
"m": "Joy"
}
}, {
"r": 3,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 3,
"c": 3,
"v": {
"m": "foreign language",
"ct": {
"fa": "General",
"t": "g"
},
"v": "foreign language"
}
}, {
"r": 3,
"c": 4,
"v": {
"v": 87,
"ct": {
"fa": "General",
"t": "n"
},
"m": "87"
}
}, {
"r": 4,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 4,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Joy",
"m": "Joy"
}
}, {
"r": 4,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 4,
"c": 3,
"v": {
"m": "science",
"ct": {
"fa": "General",
"t": "g"
},
"v": "science"
}
}, {
"r": 4,
"c": 4,
"v": {
"v": 266,
"ct": {
"fa": "General",
"t": "n"
},
"m": "266"
}
}, {
"r": 5,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 5,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Tim",
"m": "Tim"
}
}, {
"r": 5,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 5,
"c": 3,
"v": {
"m": "English",
"ct": {
"fa": "General",
"t": "g"
},
"v": "English"
}
}, {
"r": 5,
"c": 4,
"v": {
"v": 92,
"ct": {
"fa": "General",
"t": "n"
},
"m": "92"
}
}, {
"r": 6,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 6,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Tim",
"m": "Tim"
}
}, {
"r": 6,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 6,
"c": 3,
"v": {
"m": "mathematics",
"ct": {
"fa": "General",
"t": "g"
},
"v": "mathematics"
}
}, {
"r": 6,
"c": 4,
"v": {
"v": 100,
"ct": {
"fa": "General",
"t": "n"
},
"m": "100"
}
}, {
"r": 7,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 7,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Tim",
"m": "Tim"
}
}, {
"r": 7,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 7,
"c": 3,
"v": {
"m": "foreign language",
"ct": {
"fa": "General",
"t": "g"
},
"v": "foreign language"
}
}, {
"r": 7,
"c": 4,
"v": {
"v": 90,
"ct": {
"fa": "General",
"t": "n"
},
"m": "90"
}
}, {
"r": 8,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 8,
"c": 1,
"v": {
"ct": {
"fa": "General",
"t": "g"
},
"v": "Tim",
"m": "Tim"
}
}, {
"r": 8,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 8,
"c": 3,
"v": {
"m": "science",
"ct": {
"fa": "General",
"t": "g"
},
"v": "science"
}
}, {
"r": 8,
"c": 4,
"v": {
"v": 255,
"ct": {
"fa": "General",
"t": "n"
},
"m": "255"
}
}, {
"r": 9,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 9,
"c": 1,
"v": {
"m": "Alex",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Alex"
}
}, {
"r": 9,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 9,
"c": 3,
"v": {
"m": "English",
"ct": {
"fa": "General",
"t": "g"
},
"v": "English"
}
}, {
"r": 9,
"c": 4,
"v": {
"v": 108,
"ct": {
"fa": "General",
"t": "n"
},
"m": "108"
}
}, {
"r": 10,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 10,
"c": 1,
"v": {
"m": "Alex",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Alex"
}
}, {
"r": 10,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 10,
"c": 3,
"v": {
"m": "mathematics",
"ct": {
"fa": "General",
"t": "g"
},
"v": "mathematics"
}
}, {
"r": 10,
"c": 4,
"v": {
"v": 117,
"ct": {
"fa": "General",
"t": "n"
},
"m": "117"
}
}, {
"r": 11,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 11,
"c": 1,
"v": {
"m": "Alex",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Alex"
}
}, {
"r": 11,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 11,
"c": 3,
"v": {
"m": "foreign language",
"ct": {
"fa": "General",
"t": "g"
},
"v": "foreign language"
}
}, {
"r": 11,
"c": 4,
"v": {
"v": 88,
"ct": {
"fa": "General",
"t": "n"
},
"m": "88"
}
}, {
"r": 12,
"c": 0,
"v": {
"m": "first round",
"ct": {
"fa": "General",
"t": "g"
},
"v": "first round"
}
}, {
"r": 12,
"c": 1,
"v": {
"m": "Alex",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Alex"
}
}, {
"r": 12,
"c": 2,
"v": {
"m": "Class one",
"ct": {
"fa": "General",
"t": "g"
},
"v": "Class one"
}
}, {
"r": 12,
"c": 3,
"v": {
"m": "science",
"ct": {
"fa": "General",
"t": "g"
},
"v": "science"
}
}, {
"r": 12,
"c": 4,
"v": {
"v": 278,
"ct": {
"fa": "General",
"t": "n"
},
"m": "278"
}
}],
"ch_width": 4748,
"rh_height": 1790,
"luckysheet_select_save": [{
"row": [0, 0],
"column": [0, 0]
}],
"luckysheet_selection_range": [],
"scrollLeft": 0,
"scrollTop": 0
}
// export default sheetPivotTableData;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1 @@
.luckysheet-datavisual-quick-menu{width:120px;overflow:auto;margin-top:15px}.luckysheet-datavisual-quick-menu::-webkit-scrollbar{display:none}.luckysheet-datavisual-quick-menu>div{text-align:left;padding:4px 4px;border-right:3px solid #fff;color:#777;cursor:pointer;line-height:1.4em;word-wrap:break-word}.luckysheet-datavisual-quick-menu>div:hover{color:#000}.luckysheet-datavisual-quick-menu>div i{width:15px}.luckysheet-datavisual-quick-menu>div:hover i{color:#ff7e7e}.luckysheet-datavisual-quick-menu>div.luckysheet-datavisual-quick-menu-active{border-right:3px solid #ff7e7e;color:#000;font-weight:700}.luckysheet-datavisual-quick-menu>div.luckysheet-datavisual-quick-menu-active:hover i{color:#000}.luckysheet-datavisual-quick-range{padding:5px 0}.luckysheet-datavisual-range-container{background:#fff;border:1px solid #d9d9d9;border-top:1px solid silver;min-width:20px;width:100%;max-width:200px;display:inline-block}.luckysheet-datavisual-range-container-focus{border:1px solid #4d90fe;box-shadow:inset 0 1px 2px rgba(0,0,0,.3);outline:none}.luckysheet-datavisual-range-input,.luckysheet-datavisual-range-input:focus{background:transparent!important;border:none!important;box-sizing:border-box;box-shadow:none;height:25px;margin:0;outline:none!important;padding:1px 8px!important;width:100%}.luckysheet-datavisual-range-button-container{overflow:hidden;padding:0 0 0 8px;text-align:right;width:21px}.luckysheet-datavisual-range-button-container div{padding:2px 10px 0 10px;font-size:18px;cursor:pointer;color:#6598f3}.luckysheet-datavisual-range-button-container div:hover{color:#ff7e7e}.luckysheet-datavisual-quick-m{margin-top:5px;min-height:500px;top:50px;font-size:12px}.luckysheet-datavisual-quick-list{left:110px;right:0;bottom:0;top:80px;position:absolute;overflow:auto;border-top:1px solid #e5e5e5;padding:5px 3px 35px 3px}.luckysheet-datavisual-quick-list-title{padding:4px 6px;background:#e5e5e5;margin-top:10px}.luckysheet-datavisual-quick-list-ul{overflow:hidden}.luckysheet-datavisual-quick-list-item{display:inline-block;margin:5px 8px;border:1px solid #dadada;width:100px;height:80px}.luckysheet-datavisual-quick-list-item:hover{border:1px solid #ff7e7e;box-shadow:0 0 20px #ff7e7e}.luckysheet-datavisual-quick-list-item img{display:inline-block;width:100px;height:80px}.luckysheet-datavisual-quick-list-item-active{border:1px solid #6598f3;box-shadow:0 0 20px #6598f3}.chart-base-slider .el-slider__runway.show-input{margin-right:72px}.chart-base-slider .el-slider__input.el-input-number--mini{width:56px}.chart-base-slider .input_content{margin:6px 0 0 5px}.title{font-weight:700}.el-row{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chartSetting{width:100%;height:100%}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save