diff --git a/agent/config/config.yaml b/agent/config/config.yaml index e68390e..0db84a6 100644 --- a/agent/config/config.yaml +++ b/agent/config/config.yaml @@ -20,31 +20,14 @@ schedule: postgres: data: enable: ${POSTGRES_DATA_ENABLE||false} - host: ${POSTGRES_DATA_HOST||10.110.63.138} - port: ${POSTGRES_DATA_PORT||5432} - database: ${POSTGRES_DATA_DATABASE||postgres} - username: ${POSTGRES_DATA_USERNAME||postgres} - password: ${POSTGRES_DATA_PASSWORD||Mypostgres!23} - log_level: ${LOG_LEVEL||4} auth: enable: ${POSTGRES_AUTH_ENABLE||false} - host: ${POSTGRES_AUTH_HOST||10.110.63.138} - port: ${POSTGRES_AUTH_PORT||5432} - database: ${POSTGRES_AUTH_DATABASE||auth} - username: ${POSTGRES_AUTH_USERNAME||postgres} - password: ${POSTGRES_AUTH_PASSWORD||Mypostgres!23} - log_level: ${LOG_LEVEL||4} redis: enable: ${REDIS_ENABLE||false} - host: ${REDIS_HOST||127.0.0.1} - port: ${REDIS_POST||6379} - password: ${REDIS_PASSWORD||} - database: ${REDIS_DATABASE||0} nats_config: - # 10.110.63.81:30529 192.168.12.110 - url: ${NATS_URL||nats://10.110.63.81:30529} - user: ${NATS_USER||admin} - password: ${NATS_PASSWORD||T0pS3cr3tFGThjjds56} + url: ${NATS_URL||} + user: ${NATS_USER||} + password: ${NATS_PASSWORD||} logger: diff --git a/server/README.md b/server/README.md new file mode 100644 index 0000000..5db5792 --- /dev/null +++ b/server/README.md @@ -0,0 +1,119 @@ +# go project种子项目 +本项目基于 gin 框架为核心的一个脚手架搭建而成,可以基于本项目快速完成业务开发,开箱📦 即用。 + +HTTP 运行 +拉取代码后在项目根目录执行如下命令: + +# 本地有 go 环境,版本 >= 1.18.1 +# 建议开启GO111MODULE +# go env -w GO111MODULE=on + +# 配置Go Mod引用私有库 +go env -w GOPRIVATE=git.inspur.com +go env -w GOINSECURE=git.inspur.com +go env -w GOPROXY="http://nexus.inspur.local/repository/go-public/,direct" + +# 依赖管理 +go mod tidy +# 依赖库下载 +go mod vendor + +# 首次运行会自动复制一份示例配置(config/config.example.yaml)文件到config目录(config/config.yaml) +go run main.go + +# 项目起来后执行下面命令访问示例路由 +curl "http://127.0.0.1:8899/api/v1/hello-world" +# {"code":0,"message":"OK","data":{"result":"hello gin-layout"},"cost":"6.151µs"} +curl "http://127.0.0.1:8899/api/v1/hello-world?name=world" +# {"code":0,"message":"OK","data":{"result":"hello world"},"cost":"6.87µs"} +部署 +# 打包项目(如何打包其他os平台的包自行 google) +go build -o cmd/ main.go + +# 运行时请配置指定config文件的位置,否则可能会出现找不到配置的情况,修改完配置请重启 +cmd/main.go -c="指定配置文件位置(/home/config.yaml)" + +# nginx 反向代理配置示例 +server { +listen 80; +server_name api.xxx.com; +location / { +proxy_set_header Host $host; +proxy_pass http://172.0.0.1:8899; +} +} +目录结构 +. +|——.gitignore +|——go.mod +|——go.sum +|——main.go // 项目入口 main 包 +|——LICENSE +|——README.md +|——doc // 设计和用户文档 +|——db // 数据库脚本 +|——hack // 用于执行各种构建,安装,分析等操作的脚本。 +|——boot // 项目初始化目录 +| └──boot.go +|——config // 这里通常维护一些本地调试用的样例配置文件 +| └──autoload // 配置文件的结构体定义包 +| └──app.go +| └──logger.go +| └──mysql.go +| └──redis.go +| └──server.go +| └──config.example.ini // .ini 配置示例文件 +| └──config.example.yaml // .yaml 配置示例文件 +| └──config.go // 配置初始化文件 +|——data // 数据初始化目录 +| └──data.go +| └──mysql.go +| └──redis.go +|——internal // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用 +| └──controller // 控制器代码 +| └──v1 +| └──auth.go // 完整流程演示代码,包含数据库表的操作 +| └──helloword.go // 基础演示代码 +| └──base.go +| └──middleware // 中间件目录 +| └──cors.go +| └──logger.go +| └──recovery.go +| └──requestCost.go +| └──model // 业务数据访问 +| └──admin_users.go +| └──base.go +| └──pkg // 内部使用包 +| └──errors // 错误定义 +| └──code.go +| └──en-us.go +| └──zh-cn.go +| └──logger // 日志处理 +| └──logger.go +| └──response // 统一响应输出 +| └──response.go +| └──routers // 路由定义 +| └──apiRouter.go +| └──router.go +| └──service // 业务逻辑 +| └──auth.go +| └──validator // 请求参数验证器 +| └──form // 表单参数定义 +| └──auth.go +| └──validator.go +|——pkg // 可以被外部使用的包 +| └──convert // 数据类型转换 +| └──convert.go +| └──utils // 帮助函数 +| └──utils.go +生产环境注意事项 +在构建生产环境时,请配置好 .yaml 文件中基础路径 base_path,所有的日志记录文件会保存在该目录下的 {base_path}/gin-layout/logs/ 里面,该基础路径默认为执行命令的目录 + +其他说明 +项目中使用到的包 +核心:gin +配置:gopkg.in/yaml.v3、gopkg.in/ini.v1 +参数验证:github.com/go-playground/validator/v10 +日志:go.uber.org/zap、github.com/natefinch/lumberjack、github.com/lestrrat-go/file-rotatelogs +数据库:gorm.io/gorm、go-redis/v8 +还有其他不一一列举,更多请查看go.mod文件 \ No newline at end of file diff --git a/server/boot/boot.go b/server/boot/boot.go new file mode 100644 index 0000000..9a9840e --- /dev/null +++ b/server/boot/boot.go @@ -0,0 +1,54 @@ +package boot + +import ( + "flag" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/data" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/event_engine" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "os" +) + +var ( + configPath string + printVersion bool + Run string +) + +func init() { + flag.StringVar(&Run, "r", "http", "执行命令默认运行http服务") + flag.StringVar(&configPath, "c", "", "请输入配置文件绝对路径") + flag.BoolVar(&printVersion, "version", false, "查看版本") + flag.Parse() + + if printVersion { + // 打印版本号 + println(version) + os.Exit(0) + } + + // 1、初始化配置 + // 从环境变量读取配置文件路径 + if envConfigPath := os.Getenv("CFN_SCHEDULE_CONFIG_PATH"); envConfigPath != "" { + configPath = envConfigPath + } + config.InitConfig(configPath) + + // 2、初始化zap日志 + log.InitLogger() + + // 3、初始化数据库 + data.InitData() + + // 4、初始化验证器 + validator.InitValidatorTrans("zh") + + service.Start() + + event_engine.Init() + + app_manage.Init() +} diff --git a/server/boot/version.go b/server/boot/version.go new file mode 100644 index 0000000..9efc093 --- /dev/null +++ b/server/boot/version.go @@ -0,0 +1,4 @@ +package boot + +// version is the current gin-layout version. +const version = "0.2.3" diff --git a/server/config/app.go b/server/config/app.go new file mode 100644 index 0000000..3fa19e3 --- /dev/null +++ b/server/config/app.go @@ -0,0 +1,26 @@ +package config + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/convert" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/utils" +) + +type AppConfig struct { + AppEnv string `ini:"app_env" yaml:"app_env" mapstructure:"app_env"` + Debug bool `ini:"debug" yaml:"debug" mapstructure:"debug"` + Language string `ini:"language" yaml:"language" mapstructure:"language"` + StaticBasePath string `ini:"base_path" yaml:"base_path" mapstructure:"base_path"` +} + +var App = AppConfig{ + AppEnv: "local", + Debug: true, + Language: "zh_CN", + StaticBasePath: getDefaultPath(), +} + +func getDefaultPath() (path string) { + path, _ = utils.GetDefaultPath() + path = convert.GetString(utils.If(path != "", path, "/tmp")) + return +} diff --git a/server/config/auth.go b/server/config/auth.go new file mode 100644 index 0000000..6bb5e33 --- /dev/null +++ b/server/config/auth.go @@ -0,0 +1,15 @@ +package config + +type AuthConfig struct { + Enable bool `ini:"enable" yaml:"enable" mapstructure:"enable"` + Url string `ini:"url" yaml:"url" mapstructure:"url"` + LoginInfo string `ini:"login_info" yaml:"login_info" mapstructure:"login_info"` + LoginWithCode string `ini:"login_with_code" yaml:"login_with_code" mapstructure:"login_with_code"` +} + +var Auth = AuthConfig{ + Enable: true, + Url: "", + LoginInfo: "", + LoginWithCode: "", +} diff --git a/server/config/certs/minio.public.crt b/server/config/certs/minio.public.crt new file mode 100644 index 0000000..6697d04 --- /dev/null +++ b/server/config/certs/minio.public.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDozCCAougAwIBAgIUYr8WFHmf63SG6G2DjGBn4Nu0T1YwDQYJKoZIhvcNAQEL +BQAwYDELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUNob25nUWluZzEOMAwGA1UEBwwF +WXVCZWkxDzANBgNVBAoMBkluc3B1cjEOMAwGA1UECwwFcHRqc2IxDDAKBgNVBAMM +A3ljYjAgFw0yMzExMTUwNzQ0NTFaGA8yMTIzMTAyMjA3NDQ1MVowYDELMAkGA1UE +BhMCQ04xEjAQBgNVBAgMCUNob25nUWluZzEOMAwGA1UEBwwFWXVCZWkxDzANBgNV +BAoMBkluc3B1cjEOMAwGA1UECwwFcHRqc2IxDDAKBgNVBAMMA3ljYjCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBANjEiLH20u8zacfn++ytfsYi3p+ygtHN +KvXBYEntxYmURngKndOYWwR0v1wy5RQkaCmOjn6lIIoUf7G9uNT/mrumLJRi98Sx +AR7AGhgUjHo9cuF/NjtIHstc64F2gGdzJeEfg0IEk1T5SSOMOs0FH0jWC24iu8Xa +Jz5kFGFJy0iwHdQWcasdx0Dg8TxbGJkBsn6P+Li5xDWCrYu9jEgmm5c4Yd+cN8uF +eJGUWqjEDCG/DfSZNzgi5wQAGIU5Zc738SJVsnqJzuutrYXiuk+68EoHwQ2/nlI0 +fIl4hAT7MmxrlXJNT/kdCPaj1xMkCxMlxmdXVrtWJexZ7X/MkJLgVycCAwEAAaNT +MFEwHQYDVR0OBBYEFKcn6Z9mtF2cvTNT0IY/xbtNhmM5MB8GA1UdIwQYMBaAFKcn +6Z9mtF2cvTNT0IY/xbtNhmM5MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAC3GKL46KfY/5dCDpZK2Az70pQ+LUMAzteZn7wuTmhLghKUdGRgoVz4b +j6IvV6gr5cR64Y8+55rP9TqbGZC8XF/dwxl9kn/hp2aPcrLroyCqqRWZ4TECRh9R +/7IIMX9+vwt3FLM0bJaQchiOLMawwWXeizakB/+6LZHssK8L/Qiwx1uXUq24mJox +hgfvxUtYoF3BLv3zqHojqN/zAqKZrsiYEQMv0HgCBCOuWRXRsWMiKY7US6UrhLY4 +kaooXtGN8e6wTGnB4LN2fhQ+oAvVOzJUEnCR+AUwWMjbzOk0JZBFFxe2zpANa4yX +4iGDpSkm4XgtV0USyx+T+iiA5BEvqps= +-----END CERTIFICATE----- \ No newline at end of file diff --git a/server/config/config.go b/server/config/config.go new file mode 100644 index 0000000..76ff2c1 --- /dev/null +++ b/server/config/config.go @@ -0,0 +1,125 @@ +package config + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config/customized" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/utils" + "github.com/spf13/viper" + "os" + "path/filepath" + "sync" +) + +// The valid auth strategies and values for cookie handling +const ( + // These constants are used for external services auth (Prometheus ...) ; + AuthTypeBasic = "basic" + AuthTypeBearer = "bearer" + AuthTypeNone = "none" +) + +// Conf 配置项主结构体 +// mapstructure(配置文件属性名称无法与类属性名称直接对应) +type Conf struct { + AppConfig `yaml:"app" mapstructure:"app"` + Server ServerConfig `yaml:"server" mapstructure:"server"` + WebEmbed bool `yaml:"web_embed" mapstructure:"web_embed"` + DatabaseConfig DatabaseConfig `yaml:"database" mapstructure:"database"` + Redis RedisConfig `yaml:"redis" mapstructure:"redis"` + Logger LoggerConfig `yaml:"logger" mapstructure:"logger"` + Minio MinioConfig `yaml:"minio" mapstructure:"minio"` + Nats NatsConfig `yaml:"nats" mapstructure:"nats"` + Prometheus PrometheusConfig `yaml:"prometheus" mapstructure:"prometheus"` + XxlJob XxlJobConfig `yaml:"xxljob" mapstructure:"xxljob"` + SchemeService SchemeServiceConfig `yaml:"scheme_service" mapstructure:"scheme_service"` + Auth AuthConfig `yaml:"auth" mapstructure:"auth"` + CfnConfig customized.CfnConfig `yaml:"cfn_config" mapstructure:"cfn_config"` +} + +var Config = &Conf{ + AppConfig: App, + Server: Server, + DatabaseConfig: Database, + Redis: Redis, + Logger: Logger, + Minio: Minio, + Nats: Nats, + Prometheus: Prometheus, + XxlJob: XxlJob, + SchemeService: SchemeService, + Auth: Auth, + CfnConfig: customized.Cfn, +} + +var once sync.Once + +func InitConfig(configPath string) { + once.Do(func() { + // 加载 .yaml 配置 + loadYaml(configPath) + }) +} + +// todo 环境变量注入配置 or 与nacos集成 +func loadYaml(configPath string) { + var yamlConfig string + if configPath == "" { + yamlConfig = filepath.Join(utils.GetRunPath(), "config/config.yaml") + } else { + yamlConfig = filepath.Join(configPath) + } + + viper.SetConfigFile(yamlConfig) + viper.SetConfigType("yaml") + err := viper.ReadInConfig() + if err != nil { + panic("Failed to read configuration file:" + err.Error()) + } + for _, key := range viper.AllKeys() { + value := viper.GetString(key) + realValue := expandValueEnv(value) + if value != realValue { + viper.Set(key, realValue) + } + } + + err = viper.Unmarshal(Config) + if err != nil { + panic("Failed to load configuration:" + err.Error()) + } + +} + +func expandValueEnv(value string) (realValue string) { + realValue = value + + vLen := len(value) + // 3 = ${} + if vLen < 3 { + return + } + // Need start with "${" and end with "}", then return. + if value[0] != '$' || value[1] != '{' || value[vLen-1] != '}' { + return + } + + key := "" + defaultV := "" + // value start with "${" + for i := 2; i < vLen; i++ { + if value[i] == '|' && (i+1 < vLen && value[i+1] == '|') { + key = value[2:i] + defaultV = value[i+2 : vLen-1] // other string is default value. + break + } else if value[i] == '}' { + key = value[2:i] + break + } + } + + realValue = os.Getenv(key) + if realValue == "" { + realValue = defaultV + } + + return +} diff --git a/server/config/customized/cfn_config.go b/server/config/customized/cfn_config.go new file mode 100644 index 0000000..ca94939 --- /dev/null +++ b/server/config/customized/cfn_config.go @@ -0,0 +1,13 @@ +package customized + +type CfnConfig struct { + Enable bool `ini:"enable" yaml:"enable" mapstructure:"enable"` + CfnWorkSpaceId string `ini:"cfn_workspace_id" yaml:"cfn_workspace_id" mapstructure:"cfn_workspace_id"` + AgnetSilentUpgrade bool `ini:"agent_silent_upgrade" yaml:"agent_silent_upgrade" mapstructure:"agent_silent_upgrade"` +} + +var Cfn = CfnConfig{ + Enable: false, + CfnWorkSpaceId: "cfn_workspace_id_default", + AgnetSilentUpgrade: false, +} diff --git a/server/config/database.go b/server/config/database.go new file mode 100644 index 0000000..b8b6dab --- /dev/null +++ b/server/config/database.go @@ -0,0 +1,13 @@ +package config + +type DatabaseConfig struct { + Type string `ini:"type" yaml:"type" mapstructure:"type"` + SqliteConfig SqliteConfig `ini:"sqlite" yaml:"sqlite" mapstructure:"sqlite"` + PostgreSqlConfig PostgreSqlConfigMap `ini:"postgres" yaml:"postgres" mapstructure:"postgres"` +} + +var Database = DatabaseConfig{ + Type: "sqlite", + SqliteConfig: Sqlite, + PostgreSqlConfig: PostgreSql, +} diff --git a/server/config/logger.go b/server/config/logger.go new file mode 100644 index 0000000..e8de354 --- /dev/null +++ b/server/config/logger.go @@ -0,0 +1,35 @@ +package config + +type DivisionTime struct { + MaxAge int `ini:"max_age" yaml:"max_age" mapstructure:"max_age"` // 保留旧文件的最大天数,单位天 + RotationTime int `ini:"rotation_time" yaml:"rotation_time" mapstructure:"rotation_time"` // 多长时间切割一次文件,单位小时 +} + +type DivisionSize struct { + MaxSize int `ini:"max_size" yaml:"max_size" mapstructure:"max_size"` // 在进行切割之前,日志文件的最大大小(以MB为单位) + MaxBackups int `ini:"max_backups" yaml:"max_backups" mapstructure:"max_backups"` // 保留旧文件的最大个数 + MaxAge int `ini:"max_age" yaml:"max_age" mapstructure:"max_age"` // 保留旧文件的最大天数 + Compress bool `ini:"compress" yaml:"compress"` // 是否压缩/归档旧文件 +} + +type LoggerConfig struct { + DefaultDivision string `ini:"default_division" yaml:"default_division" mapstructure:"default_division"` + Filename string `ini:"file_name" yaml:"file_name" mapstructure:"file_name"` + DivisionTime DivisionTime `ini:"division_time" yaml:"division_time" mapstructure:"division_time"` + DivisionSize DivisionSize `ini:"division_size" yaml:"division_size" mapstructure:"division_size"` +} + +var Logger = LoggerConfig{ + DefaultDivision: "time", // time 按时间切割,默认一天, size 按文件大小切割 + Filename: "sys.log", + DivisionTime: DivisionTime{ + MaxAge: 15, + RotationTime: 24, + }, + DivisionSize: DivisionSize{ + MaxSize: 2, + MaxBackups: 2, + MaxAge: 15, + Compress: false, + }, +} diff --git a/server/config/minio.go b/server/config/minio.go new file mode 100644 index 0000000..248ea2d --- /dev/null +++ b/server/config/minio.go @@ -0,0 +1,13 @@ +package config + +type MinioConfig struct { + Endpoint string `ini:"endpoint" yaml:"endpoint"` + AccessKey string `ini:"access_key" yaml:"access_key" mapstructure:"access_key"` + SecretAccessKey string `ini:"secret_access_key" yaml:"secret_access_key" mapstructure:"secret_access_key"` +} + +var Minio = MinioConfig{ + Endpoint: "192.168.12.78:208670", + AccessKey: "xxxxxxxx", + SecretAccessKey: "yyyyyyyy", +} diff --git a/server/config/nats.go b/server/config/nats.go new file mode 100644 index 0000000..d9b276a --- /dev/null +++ b/server/config/nats.go @@ -0,0 +1,13 @@ +package config + +type NatsConfig struct { + Url string `ini:"url" yaml:"url"` + User string `ini:"user" yaml:"user"` + Password string `ini:"password" yaml:"password"` +} + +var Nats = NatsConfig{ + Url: "nats://192.168.12.110:30529", + User: "admin", + Password: "T0pS3cr3tFGThjjds56", +} diff --git a/server/config/postgres.go b/server/config/postgres.go new file mode 100644 index 0000000..222be1f --- /dev/null +++ b/server/config/postgres.go @@ -0,0 +1,37 @@ +package config + +type PostgreSqlConfig struct { + Host string `ini:"host" yaml:"host"` + Username string `ini:"username" yaml:"username"` + Password string `ini:"password" yaml:"password"` + Port uint16 `ini:"port" yaml:"port"` + Database string `ini:"database" yaml:"database"` + TablePrefix string `ini:"table_prefix" yaml:"table_prefix" mapstructure:"table_prefix"` + LogLevel int `ini:"log_level" yaml:"log_level" mapstructure:"log_level"` + PrintSql bool `ini:"print_sql" yaml:"print_sql" mapstructure:"print_sql"` +} + +type PostgreSqlConfigMap map[string]PostgreSqlConfig + +var PostgreSql = PostgreSqlConfigMap{ + "data": { + Host: "127.0.0.1", + Username: "root", + Password: "root1234", + Port: 3306, + Database: "test", + TablePrefix: "", + LogLevel: 4, + PrintSql: false, + }, + "auth": { + Host: "127.0.0.1", + Username: "root", + Password: "root1234", + Port: 3306, + Database: "test", + TablePrefix: "", + LogLevel: 4, + PrintSql: false, + }, +} diff --git a/server/config/prometheus.go b/server/config/prometheus.go new file mode 100644 index 0000000..acacd3e --- /dev/null +++ b/server/config/prometheus.go @@ -0,0 +1,15 @@ +package config + +type PrometheusConfig struct { + Url string `ini:"url" yaml:"url" mapstructure:"url"` + AuthEnable bool `ini:"auth_enable" yaml:"auth_enable" mapstructure:"auth_enable"` + User string `ini:"user" yaml:"user" mapstructure:"user"` + Password string `ini:"password" yaml:"password" mapstructure:"password"` +} + +var Prometheus = PrometheusConfig{ + Url: "http://127.0.0.1:9090", + AuthEnable: false, + User: "admin", + Password: "admin", +} diff --git a/server/config/redis.go b/server/config/redis.go new file mode 100644 index 0000000..17a0ea9 --- /dev/null +++ b/server/config/redis.go @@ -0,0 +1,17 @@ +package config + +type RedisConfig struct { + Enable bool `ini:"enable" yaml:"enable"` + Host string `ini:"host" yaml:"host"` + Port string `ini:"port" yaml:"port"` + Password string `ini:"password" yaml:"password"` + Database int `ini:"database" yaml:"database"` +} + +var Redis = RedisConfig{ + Enable: false, + Host: "127.0.0.1", + Password: "root1234", + Port: "6379", + Database: 0, +} diff --git a/server/config/scheme_service.go b/server/config/scheme_service.go new file mode 100644 index 0000000..c19035d --- /dev/null +++ b/server/config/scheme_service.go @@ -0,0 +1,12 @@ +package config + +// ServerConfig 定义项目配置 +type SchemeServiceConfig struct { + BaseUrl string `ini:"base_url" yaml:"base_url" mapstructure:"base_url"` + Token string `ini:"token" yaml:"token" mapstructure:"token"` +} + +var SchemeService = SchemeServiceConfig{ + BaseUrl: "127.0.0.1:9999", + Token: "mock dkf98123", +} diff --git a/server/config/server.go b/server/config/server.go new file mode 100644 index 0000000..cd7c9a8 --- /dev/null +++ b/server/config/server.go @@ -0,0 +1,12 @@ +package config + +// ServerConfig 定义项目配置 +type ServerConfig struct { + Host string `ini:"host" yaml:"host" mapstructure:"host"` + Port uint64 `ini:"port" yaml:"port" mapstructure:"port"` +} + +var Server = ServerConfig{ + Host: "127.0.0.1", + Port: 9999, +} diff --git a/server/config/sqlite.go b/server/config/sqlite.go new file mode 100644 index 0000000..08cc354 --- /dev/null +++ b/server/config/sqlite.go @@ -0,0 +1,9 @@ +package config + +type SqliteConfig struct { + Data string `ini:"data" yaml:"data" mapstructure:"data"` +} + +var Sqlite = SqliteConfig{ + Data: "data/sqlite.db", +} diff --git a/server/config/xxljob.go b/server/config/xxljob.go new file mode 100644 index 0000000..e685d16 --- /dev/null +++ b/server/config/xxljob.go @@ -0,0 +1,11 @@ +package config + +type XxlJobConfig struct { + Url string `ini:"url" yaml:"url"` + Token string `ini:"token" yaml:"token"` +} + +var XxlJob = XxlJobConfig{ + Url: "http://127.0.0.1/xxl-job-admin", + Token: "xxx", +} diff --git a/server/data/data.go b/server/data/data.go new file mode 100644 index 0000000..2226c86 --- /dev/null +++ b/server/data/data.go @@ -0,0 +1,26 @@ +package data + +import ( + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "sync" +) + +var once sync.Once + +func InitData() { + once.Do(func() { + if c.Config.DatabaseConfig.Type == "sqlite" { + initSqlite() + } else { + initPostgres() + } + + initNats() + initPrometheus() + initXxlJob() + if c.Config.Redis.Enable { + // 初始化 redis + initRedis() + } + }) +} diff --git a/server/data/nats.go b/server/data/nats.go new file mode 100644 index 0000000..9f224a8 --- /dev/null +++ b/server/data/nats.go @@ -0,0 +1,43 @@ +package data + +import ( + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/nats-io/nats.go" + "time" +) + +var Nc *nats.Conn + +func initNats() { + var err error + // 此种链接方式在Ubuntu桌面版上报错:dial tcp: missing address + //url := fmt.Sprintf("nats://%s:%s@%s", c.Config.Nats.User, c.Config.Nats.Password, c.Config.Nats.Url) + //Nc, err = nats.Connect(url) + + opts := []nats.Option{nats.Name("NATS Sample Publisher")} + opts = append(opts, nats.UserInfo(c.Config.Nats.User, c.Config.Nats.Password)) + + log.Infof("Nats connect url: %s", "nats://"+c.Config.Nats.Url) + log.Infof("Nats connect options: %v", opts) + Nc, err = nats.Connect("nats://"+c.Config.Nats.Url, opts...) + + if err != nil { + log.Errorf("连接nats失败:%s, %s, %s", c.Config.Nats.Url, c.Config.Nats.User, c.Config.Nats.Password) + panic("Nats connection failed:" + err.Error()) + } + go func() { + defer func() { + if r := recover(); r != nil { + log.Errorf("recover check nats connection: %v", r) + } + }() + const interval = time.Minute * 2 + ticker := time.NewTicker(interval) + for _ = range ticker.C { + if !Nc.IsConnected() { + Nc, _ = nats.Connect("nats://"+c.Config.Nats.Url, opts...) + } + } + }() +} diff --git a/server/data/postgres.go b/server/data/postgres.go new file mode 100644 index 0000000..99cd0e6 --- /dev/null +++ b/server/data/postgres.go @@ -0,0 +1,70 @@ +package data + +import ( + "fmt" + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "gorm.io/driver/postgres" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" +) + +var PostgreSqlDB = make(map[string]*gorm.DB) + +type Writer interface { + Printf(string, ...interface{}) +} + +type WriterLog struct { +} + +func (w WriterLog) Printf(format string, args ...interface{}) { + log.Logger.Sugar().Infof(format, args...) +} + +func initPostgres() { + var err error + postgreSqlConfigMap := c.Config.DatabaseConfig.PostgreSqlConfig + if c.Config.DatabaseConfig.PostgreSqlConfig != nil && len(postgreSqlConfigMap) > 0 { + for name, postgreSqlConfig := range postgreSqlConfigMap { + var writerLog WriterLog + if postgreSqlConfig.PrintSql { + writerLog = WriterLog{} + } + logConfig := logger.New( + writerLog, + logger.Config{ + SlowThreshold: 0, // 慢 SQL 阈值 + LogLevel: logger.LogLevel(postgreSqlConfig.LogLevel), // 日志级别 + IgnoreRecordNotFoundError: false, // 忽略ErrRecordNotFound(记录未找到)错误 + Colorful: false, // 是否启用彩色打印 + }, + ) + + configs := &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + TablePrefix: postgreSqlConfig.TablePrefix, // 表名前缀 + // SingularTable: true, // 使用单数表名 + }, + Logger: logConfig, + } + + dsn := fmt.Sprintf("host=%s port=%d user=%s dbname=%s password=%s timezone='Asia/Shanghai'", + postgreSqlConfig.Host, + postgreSqlConfig.Port, + postgreSqlConfig.Username, + postgreSqlConfig.Database, + postgreSqlConfig.Password, + ) + + log.Infof("postgres客户端初始化, 配置: %s", dsn) + PostgreSqlDB[name], err = gorm.Open(postgres.Open(dsn), configs) + + if err != nil { + panic("postgres connection failed:" + err.Error()) + } + } + } + +} diff --git a/server/data/prometheus.go b/server/data/prometheus.go new file mode 100644 index 0000000..701ab3c --- /dev/null +++ b/server/data/prometheus.go @@ -0,0 +1,61 @@ +package data + +import ( + "encoding/base64" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/prometheus/client_golang/api" + v1 "github.com/prometheus/client_golang/api/prometheus/v1" + "net" + "net/http" + "time" +) + +var V1api v1.API + +type authRoundTripper struct { + auth string + originalRT http.RoundTripper +} + +func (rt *authRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + req.Header.Set("Authorization", rt.auth) + return rt.originalRT.RoundTrip(req) +} + +func newAuthRoundTripper(auth *config.PrometheusConfig, rt http.RoundTripper) http.RoundTripper { + encoded := base64.StdEncoding.EncodeToString([]byte(auth.User + ":" + auth.Password)) + return &authRoundTripper{auth: "Basic " + encoded, originalRT: rt} +} + +func initPrometheus() { + if !config.Config.CfnConfig.Enable { + return + } + + apiConfig := api.Config{ + Address: config.Config.Prometheus.Url, + } + + if config.Config.Prometheus.AuthEnable { + roundTripper := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + TLSHandshakeTimeout: 10 * time.Second, + } + + apiConfig.RoundTripper = newAuthRoundTripper(&config.Config.Prometheus, roundTripper) + } + + log.Infof("Prometheus客户端初始化, 配置: %s", apiConfig.Address) + client, err := api.NewClient(apiConfig) + + if err != nil { + log.Info("Error creating prometheus client: ", err.Error()) + } + + V1api = v1.NewAPI(client) +} diff --git a/server/data/redis.go b/server/data/redis.go new file mode 100644 index 0000000..d103791 --- /dev/null +++ b/server/data/redis.go @@ -0,0 +1,23 @@ +package data + +import ( + "context" + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "github.com/go-redis/redis/v8" +) + +var Rdb *redis.Client + +func initRedis() { + Rdb = redis.NewClient(&redis.Options{ + Addr: c.Config.Redis.Host + ":" + c.Config.Redis.Port, + Password: c.Config.Redis.Password, + DB: c.Config.Redis.Database, + }) + var ctx = context.Background() + _, err := Rdb.Ping(ctx).Result() + + if err != nil { + panic("Redis connection failed:" + err.Error()) + } +} diff --git a/server/data/sqlite.go b/server/data/sqlite.go new file mode 100644 index 0000000..802bf00 --- /dev/null +++ b/server/data/sqlite.go @@ -0,0 +1,22 @@ +package data + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +var SqliteDB *gorm.DB + +func initSqlite() { + var err error + + sqliteConfig := config.Config.DatabaseConfig.SqliteConfig + log.Infof("sqlite客户端初始化, 配置: %s", sqliteConfig.Data) + + SqliteDB, err = gorm.Open(sqlite.Open(sqliteConfig.Data), &gorm.Config{}) + if err != nil { + panic("sqlite connection failed:" + err.Error()) + } +} diff --git a/server/data/xxljob.go b/server/data/xxljob.go new file mode 100644 index 0000000..5aff40e --- /dev/null +++ b/server/data/xxljob.go @@ -0,0 +1,50 @@ +package data + +import ( + "fmt" + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/xxl-job/xxl-job-executor-go" + "strconv" +) + +var Xxljob xxl.Executor + +func initXxlJob() { + if !c.Config.CfnConfig.Enable { + return + } + + //初始化执行器 + Xxljob = xxl.NewExecutor( + xxl.ServerAddr(c.Config.XxlJob.Url), + xxl.AccessToken(c.Config.XxlJob.Token), + xxl.ExecutorPort(strconv.FormatUint(c.Config.Server.Port, 10)), //默认9999(此处要与gin服务启动port必需一至) + xxl.RegistryKey("cfn-schedule"), //执行器名称 + xxl.SetLogger(&clogger{}), //自定义日志 + ) + Xxljob.Init() + //设置日志查看handler + Xxljob.LogHandler(customLogHandle) +} + +// 自定义日志处理器 +func customLogHandle(req *xxl.LogReq) *xxl.LogRes { + return &xxl.LogRes{Code: xxl.SuccessCode, Msg: "", Content: xxl.LogResContent{ + FromLineNum: req.FromLineNum, + ToLineNum: 2, + LogContent: "这个是自定义日志handler", + IsEnd: true, + }} +} + +// xxl.Logger接口实现 +type clogger struct{} + +func (l *clogger) Info(format string, a ...interface{}) { + log.Info(fmt.Sprintf("xxl-job日志 - "+format, a...)) +} + +func (l *clogger) Error(format string, a ...interface{}) { + log.Error(fmt.Sprintf("xxl-job日志 - "+format, a...)) +} diff --git a/server/go.mod b/server/go.mod new file mode 100644 index 0000000..b548311 --- /dev/null +++ b/server/go.mod @@ -0,0 +1,112 @@ +module git.inspur.com/sbg-jszt/cfn/cfn-schedule + +go 1.23 + +toolchain go1.23.0 + +require ( + github.com/araujo88/lambda-go v0.0.0-20240731183007-b33464d3e215 + github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/gin-contrib/cors v1.3.1 + github.com/gin-gonic/gin v1.8.1 + github.com/go-playground/locales v0.14.0 + github.com/go-playground/universal-translator v0.18.0 + github.com/go-playground/validator/v10 v10.11.1 + github.com/go-redis/redis/v8 v8.11.5 + github.com/go-resty/resty/v2 v2.10.0 + github.com/golang/glog v1.0.0 + github.com/google/uuid v1.4.0 + github.com/gorilla/websocket v1.5.3 + github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible + github.com/minio/minio-go v6.0.14+incompatible + github.com/natefinch/lumberjack v2.0.0+incompatible + github.com/nats-io/nats.go v1.31.0 + github.com/prometheus/client_golang v1.17.0 + github.com/prometheus/common v0.44.0 + github.com/renstrom/shortuuid v3.0.0+incompatible + github.com/robfig/cron/v3 v3.0.1 + github.com/segmentio/ksuid v1.0.4 + github.com/spf13/viper v1.17.0 + github.com/xuri/excelize/v2 v2.8.0 + github.com/xxl-job/xxl-job-executor-go v1.2.0 + github.com/zeromicro/go-zero v1.6.0 + go.uber.org/zap v1.24.0 + golang.org/x/crypto v0.21.0 + gorm.io/datatypes v1.2.0 + gorm.io/driver/postgres v1.5.2 + gorm.io/driver/sqlite v1.4.3 + gorm.io/gorm v1.25.0 + gorm.io/plugin/soft_delete v1.1.0 +) + +require ( + github.com/fatih/color v1.15.0 // indirect + github.com/go-basic/ipv4 v1.0.0 // indirect + github.com/go-ini/ini v1.67.0 // indirect + github.com/go-sql-driver/mysql v1.7.1 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-sqlite3 v1.14.15 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/nats-io/nkeys v0.4.6 // indirect + github.com/nats-io/nuid v1.0.1 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.3 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca // indirect + github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a // indirect + go.opentelemetry.io/otel v1.19.0 // indirect + go.opentelemetry.io/otel/trace v1.19.0 // indirect + go.uber.org/automaxprocs v1.5.3 // indirect + golang.org/x/time v0.5.0 // indirect + gorm.io/driver/mysql v1.4.7 // indirect +) + +require ( + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/ahmetb/go-linq v3.0.0+incompatible + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/goccy/go-json v0.9.11 + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/leodido/go-urn v1.2.1 // indirect + github.com/lestrrat-go/strftime v1.0.6 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-isatty v0.0.20 + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/onsi/gomega v1.20.1 // indirect + github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/pkg/errors v0.9.1 + github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.10.0 // indirect + github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/ugorji/go/codec v1.2.7 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/text v0.14.0 + google.golang.org/protobuf v1.33.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/server/go.sum b/server/go.sum new file mode 100644 index 0000000..0c71f19 --- /dev/null +++ b/server/go.sum @@ -0,0 +1,773 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ahmetb/go-linq v3.0.0+incompatible h1:qQkjjOXKrKOTy83X8OpRmnKflXKQIL/mC/gMVVDMhOA= +github.com/ahmetb/go-linq v3.0.0+incompatible/go.mod h1:PFffvbdbtw+QTB0WKRP0cNht7vnCfnGlEpak/DVg5cY= +github.com/araujo88/lambda-go v0.0.0-20240731183007-b33464d3e215 h1:cuA5Yg1IPMUxWXwuu4dW7tZhjgFI2Lkv1qIaMhHV/TM= +github.com/araujo88/lambda-go v0.0.0-20240731183007-b33464d3e215/go.mod h1:aFEe3R1EyXWn1ikzW0zgjqWUvhHxwwfhLvhXMb/z354= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA= +github.com/gin-contrib/cors v1.3.1/go.mod h1:jjEJ4268OPZUcU7k9Pm653S7lXUGcqMADzFA61xsmDk= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/go-basic/ipv4 v1.0.0 h1:gjyFAa1USC1hhXTkPOwBWDPfMcUaIM+tvo1XzV9EZxs= +github.com/go-basic/ipv4 v1.0.0/go.mod h1:etLBnaxbidQfuqE6wgZQfs38nEWNmzALkxDZe4xY8Dg= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-resty/resty/v2 v2.10.0 h1:Qla4W/+TMmv0fOeeRqzEpXPLfTUnR5HZ1+lGs+CkiCo= +github.com/go-resty/resty/v2 v2.10.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= +github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= +github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4= +github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible/go.mod h1:ZQnN8lSECaebrkQytbHj4xNgtg8CR7RYXnPok8e0EHA= +github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ= +github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= +github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE= +github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ= +github.com/minio/minio-go v6.0.14+incompatible h1:fnV+GD28LeqdN6vT2XdGKW8Qe/IfjJDswNVuni6km9o= +github.com/minio/minio-go v6.0.14+incompatible/go.mod h1:7guKYtitv8dktvNUGrhzmNlA5wrAABTQXCoesZdFQO8= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/nats-io/nats.go v1.31.0 h1:/WFBHEc/dOKBF6qf1TZhrdEfTmOZ5JzdJ+Y3m6Y/p7E= +github.com/nats-io/nats.go v1.31.0/go.mod h1:di3Bm5MLsoB4Bx61CBTsxuarI36WbhAwOm8QrW39+i8= +github.com/nats-io/nkeys v0.4.6 h1:IzVe95ru2CT6ta874rt9saQRkWfe2nFj1NtvYSLqMzY= +github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADymtkpts= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.20.1 h1:PA/3qinGoukvymdIDV8pii6tiZgC8kbmJO6Z5+b002Q= +github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= +github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= +github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= +github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= +github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/renstrom/shortuuid v3.0.0+incompatible h1:F6T1U7bWlI3FTV+JE8HyeR7bkTeYZJntqQLA9ST4HOQ= +github.com/renstrom/shortuuid v3.0.0+incompatible/go.mod h1:n18Ycpn8DijG+h/lLBQVnGKv1BCtTeXo8KKSbBOrQ8c= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM= +github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= +github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= +github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= +github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca h1:uvPMDVyP7PXMMioYdyPH+0O+Ta/UO1WFfNYMO3Wz0eg= +github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.8.0 h1:Vd4Qy809fupgp1v7X+nCS/MioeQmYVVzi495UCTqB7U= +github.com/xuri/excelize/v2 v2.8.0/go.mod h1:6iA2edBTKxKbZAa7X5bDhcCg51xdOn1Ar5sfoXRGrQg= +github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a h1:Mw2VNrNNNjDtw68VsEj2+st+oCSn4Uz7vZw6TbhcV1o= +github.com/xuri/nfp v0.0.0-20230819163627-dc951e3ffe1a/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= +github.com/xxl-job/xxl-job-executor-go v1.2.0 h1:MTl2DpwrK2+hNjRRks2k7vB3oy+3onqm9OaSarneeLQ= +github.com/xxl-job/xxl-job-executor-go v1.2.0/go.mod h1:bUFhz/5Irp9zkdYk5MxhQcDDT6LlZrI8+rv5mHtQ1mo= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeromicro/go-zero v1.6.0 h1:UwSOR1lGZ2g7L0S07PM8RoneAcubtd5x//EfbuNucQ0= +github.com/zeromicro/go-zero v1.6.0/go.mod h1:E9GCFPb0SwsTKFBcFr9UynGvXiDMmfc6fI5F15vqvAQ= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= +go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo= +golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= +golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/datatypes v1.2.0 h1:5YT+eokWdIxhJgWHdrb2zYUimyk0+TaFth+7a0ybzco= +gorm.io/datatypes v1.2.0/go.mod h1:o1dh0ZvjIjhH/bngTpypG6lVRJ5chTBxE09FH/71k04= +gorm.io/driver/mysql v1.4.7 h1:rY46lkCspzGHn7+IYsNpSfEv9tA+SU4SkkB+GFX125Y= +gorm.io/driver/mysql v1.4.7/go.mod h1:SxzItlnT1cb6e1e4ZRpgJN2VYtcqJgqnHxWr4wsP8oc= +gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= +gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= +gorm.io/driver/sqlite v1.1.3/go.mod h1:AKDgRWk8lcSQSw+9kxCJnX/yySj8G3rdwYlU57cB45c= +gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU= +gorm.io/driver/sqlite v1.4.3/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI= +gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0= +gorm.io/driver/sqlserver v1.4.1/go.mod h1:DJ4P+MeZbc5rvY58PnmN1Lnyvb5gw5NPzGshHDnJLig= +gorm.io/gorm v1.20.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.23.0/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= +gorm.io/gorm v1.25.0 h1:+KtYtb2roDz14EQe4bla8CbQlmb9dN3VejSai3lprfU= +gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/plugin/soft_delete v1.1.0 h1:LcE4L+GD29RkkMLxMYHpT4wQCJ/9945FsdU/mHGaDuE= +gorm.io/plugin/soft_delete v1.1.0/go.mod h1:Zv7vQctOJTGOsJ/bWgrN1n3od0GBAZgnLjEx+cApLGk= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/server/internal/command/command.go b/server/internal/command/command.go new file mode 100644 index 0000000..f1dadc3 --- /dev/null +++ b/server/internal/command/command.go @@ -0,0 +1,30 @@ +package command + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/func_make" +) + +var ( + commandMap = map[string]interface{}{ + "demo": demo, + } + funcMake = func_make.New() +) + +func Register() { + err := funcMake.Registers(commandMap) + if err != nil { + panic("failed to register console command: " + err.Error()) + } +} + +func Run(funcName string) { + Register() + _, err := funcMake.Call(funcName) + if err != nil { + fmt.Printf("execution failed, error cause: %v \n", err.Error()) + return + } + fmt.Printf("complete! \n") +} diff --git a/server/internal/command/demo.go b/server/internal/command/demo.go new file mode 100644 index 0000000..05b1a95 --- /dev/null +++ b/server/internal/command/demo.go @@ -0,0 +1,7 @@ +package command + +import "fmt" + +func demo() { + fmt.Println("hello console!") +} diff --git a/server/internal/controller/base.go b/server/internal/controller/base.go new file mode 100644 index 0000000..bfd36c7 --- /dev/null +++ b/server/internal/controller/base.go @@ -0,0 +1,54 @@ +package controller + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + r "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "go.uber.org/zap" +) + +// Success 业务成功响应 +func Success(c *gin.Context, data ...any) { + response := r.Resp() + if data != nil { + response.WithDataSuccess(c, data[0]) + return + } + response.Success(c) +} + +// FailCode 业务失败响应 +func FailCode(c *gin.Context, code int, err error, data ...any) { + response := r.Resp() + if err != nil { + log.Errorf("异常: %v", err.Error()) + } + if data != nil { + response.WithData(data[0]).FailCode(c, code) + return + } + response.FailCode(c, code) +} + +// Fail 业务失败响应 +func Fail(c *gin.Context, code int, message string, data ...any) { + response := r.Resp() + if data != nil { + response.WithData(data[0]).FailCode(c, code, message) + return + } + response.FailCode(c, code, message) +} + +// Err 判断错误类型是自定义类型则自动返回错误中携带的code和message,否则返回服务器错误 +func Err(c *gin.Context, e error) { + businessError, err := errors.AsBusinessError(e) + if err != nil { + log.Logger.Warn("Unknown error:", zap.Any("Error reason:", err)) + FailCode(c, errors.ServerError, err) + return + } + + Fail(c, businessError.GetCode(), businessError.GetMessage()) +} diff --git a/server/internal/controller/v1/agentinfo.go b/server/internal/controller/v1/agentinfo.go new file mode 100644 index 0000000..14f635c --- /dev/null +++ b/server/internal/controller/v1/agentinfo.go @@ -0,0 +1,137 @@ +package v1 + +import ( + "encoding/json" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/agent" + devc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strconv" + "strings" +) + +// 获取最新版本列表 +func ListLastVersion(c *gin.Context) { + aget := &agent.AgentInfo{} + agents, err := aget.ListLastVersion() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, agents) +} + +// 发布新版本 +func Release(c *gin.Context) { + aget := &agent.AgentInfo{} + err := validator.CheckPostParams(c, aget) + if aget.BucketName == "" { + aget.BucketName = "cpn" + } + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + //转换版本号 + masterVersion := "10" + secondVersion := "0" + minVersion := "0" + version := strings.Split(aget.Version, ".") + if len(version[0]) < 2 { + masterVersion = masterVersion + version[0] + } else { + masterVersion = "1" + version[0] + } + if len(version[1]) < 2 { + secondVersion = secondVersion + version[1] + } else { + secondVersion = version[1] + } + if len(version[2]) < 2 { + minVersion = minVersion + version[2] + } else { + minVersion = version[2] + } + versionNum, err := strconv.Atoi(masterVersion + secondVersion + minVersion) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + agents := make([]agent.AgentInfo, 0) + agetJson, _ := json.Marshal(aget) + for _, t := range strings.Split(aget.OsType, ",") { + fields := map[string]interface{}{} + fields["os_type"] = t + fields["arch_type"] = aget.ArchType + fields["version_num"] = versionNum + b, err := aget.HasNewVersion(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + if b { + controller.FailCode(c, errors.InvalidParameter, err, "版本号重复或小于历史版本!") + return + } + agt := agent.AgentInfo{} + json.Unmarshal(agetJson, &agt) + agt.OsType = t + agt.VersionNum = int64(versionNum) + if t == agent.OS_WINDOWS { + agt.OsPlatform = agent.OS_WINDOWS + } else if strings.Contains(agent.OS_LINUX_LIST, t) { + agt.OsPlatform = agent.OS_LINUX + } else { + agt.OsPlatform = "Other" + } + //不同平台+不同操作系统+不同架构添加多条记录 + agents = append(agents, agt) + } + _, err = aget.CreateBatch(agents) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + go func() { + _ = service.SendUpgradeCommand(agents) + }() + go func() { + dr := &devc.DeviceUpgradeRule{} + rules, err := dr.ListAll(nil) + if err == nil && len(rules) > 0 { + _ = service.SendUpgradePlans(rules, "create") + } + }() + controller.Success(c, "") +} + +type PageBodyVersion struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Keyword string `json:"keyword"` +} + +// 根据扩展key获取规则 +func PageVersions(c *gin.Context) { + var pageBody PageBodyVersion + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + agt := &agent.AgentInfo{} + fields := map[string]interface{}{} + fields["keyword"] = pageBody.Keyword + page := &model.Page[agent.AgentInfo]{} + page.Covert(pageBody.PageInfo) + err = agt.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} diff --git a/server/internal/controller/v1/app_manage/assets/machine.go b/server/internal/controller/v1/app_manage/assets/machine.go new file mode 100644 index 0000000..6afbe37 --- /dev/null +++ b/server/internal/controller/v1/app_manage/assets/machine.go @@ -0,0 +1,504 @@ +package assets + +import ( + "bytes" + "encoding/json" + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/assets" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strconv" + "strings" +) + +type MachinePageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Name string `json:"name"` + Version string `json:"version"` + GroupName string `json:"groupName"` +} + +type T struct { + GroupName string `json:"groupName"` + Version string `json:"version"` + Name string `json:"name"` + PageInfo struct { + CurrentPage int `json:"currentPage"` + Order string `json:"order"` + OrderField string `json:"order_field"` + PageSize int `json:"pageSize"` + } `json:"pageInfo"` +} + +func PageMachine(c *gin.Context) { + var pageBody MachinePageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + //pageBody.PageInfo.Order = "create_time_millis desc" + n := node2.NewMachine() + fields := map[string]interface{}{} + if pageBody.Name != "" { + fields["name"] = pageBody.Name + } + if pageBody.Version != "" { + fields["cfn_agent_version"] = pageBody.Version + } + if pageBody.GroupName != "" { + fields["group_name"] = pageBody.GroupName + } + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + result, err := n.Page(n, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + page.Data = result + controller.Success(c, page) +} + +func EditMachine(c *gin.Context) { + n := &node2.MachineNode{} + err := validator.CheckPostParams(c, n) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if n.Id == "" { + n.Handler = n + fields := map[string]interface{}{} + fields["cfn_agent_url"] = n.CfnAgentUrl + list, err := n.GetAll(n, fields, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + if len(list.([]node2.MachineNode)) > 0 { + controller.FailCode(c, errors.InvalidParameter, err, "对应的节点已经存在啦") + return + } + } + err = assets.TestMachineNode(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "节点连接失败,请检查节点是否在线") + return + } + status := 1 + n.Status = status + // testHttpProxy() + if n.Id == "" { + m := 0 + n.TransportMode = m + n.SetUserName(service.GetUserName(c)) + _, err = n.Create(n) + } else { + n.SetModifyUserName(service.GetUserName(c)) + column := []string{"name", "group_name", "cfn_agent_url", "cfn_agent_username", "cfn_agent_password", "template_node", "cfn_agent_timeout", "cfn_agent_http_proxy", "cfn_agent_http_proxy_type", "transport_encryption"} + _, err = n.Update(n, column) + } + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +func DeleteMachine(c *gin.Context) { + id := c.PostForm("id") + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + m := &node2.MachineNode{} + m.Id = id + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := node2.New() + fields := make(map[string]interface{}) + fields["machine_id"] = id + list, err := n.GetAll(n, fields, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + count := len(list.([]node2.Node)) + if count > 0 { + controller.FailCode(c, errors.ServerError, err, "当前机器还关联"+strconv.Itoa(count)+"个节点,不能删除") + return + } + + _, err = m.Delete(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +func Distribute(c *gin.Context) { + ids := c.PostForm("ids") + if ids == "" { + controller.Success(c, "") + return + } + mids := strings.Split(ids, ",") + if len(mids) == 0 { + controller.Success(c, "") + return + } + workspaceId := c.PostForm("workspaceId") + w := &workspace.Workspace{} + w.Id = workspaceId + err := w.GetById(w) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "工作空间不存在!") + return + } + + fields := map[string]interface{}{} + fields["workspace_id"] = workspaceId + for _, mid := range mids { + m := &node2.MachineNode{} + m.Id = mid + err = m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "机器不存在!") + return + } + n := node2.New() + fields["machine_id"] = mid + list, _ := n.GetAll(n, fields, nil) + if len(list.([]node2.Node)) > 0 { + continue + } + + n = &node2.Node{} + n.MachineId = m.Id + n.WorkspaceId = workspaceId + n.Name = m.Name + n.OpenStatus = 1 + n.Group = m.Group + n.Url = m.CfnAgentUrl + n.LoginName = m.CfnAgentUsername + n.LoginPwd = m.CfnAgentPassword + n.SetUserName(service.GetUserName(c)) + _, err = n.Create(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + } + controller.Success(c, "") +} + +func ListMachineGroup(c *gin.Context) { + m := &node2.MachineNode{} + result, _ := m.ListGroup() + controller.Success(c, result) +} + +func ListTemplateNode(c *gin.Context) { + m := node2.NewMachine() + fields := map[string]interface{}{} + fields["template_node"] = 1 + result, err := m.GetAll(m, fields, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, result) +} + +func Whitelist(c *gin.Context) { + machineId := c.PostForm("machineId") + m := &node2.MachineNode{} + m.Id = machineId + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的机器") + return + } + + result := assets.GetAgentWhitelist(m) + controller.Success(c, result) +} + +func SaveWhitelist(c *gin.Context) { + ids := c.PostForm("ids") + if ids == "" { + controller.Success(c, "") + return + } + mids := strings.Split(ids, ",") + if len(mids) == 0 { + controller.Success(c, "") + return + } + formData := make(map[string]string) + for key, value := range c.Request.PostForm { + formData[key] = value[0] + } + body, _ := json.Marshal(formData) + for _, mid := range mids { + m := &node2.MachineNode{} + m.Id = mid + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的机器") + return + } + resp, err := common.Request(m, "", common.WhitelistDirectory_Submit, nil, nil, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "分发节点失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), "分发节点失败") + return + } + } + controller.Success(c, "") +} + +const config_data = `jpom: + # jpom 数据存储路径, 如果调试模式运行默认路径为【${user.home}/jpom/】,安装运行默认为jar包文件的父级 + path: + # 集群配置 + cluster: + # 集群Id,默认为 default 不区分大小写,只能是字母或者数字,长度小于 20 + id: default + # 心跳监控时间 (需要大于零) 单位秒 最小配置 5 秒 + heart-second: 30 + node: + # 节点心跳监控时间 (需要大于零) 单位秒 最小配置 5秒 + heart-second: 30 + # 节点统计日志保留天数,如果小于等于 0 不自动删除 + stat-log-keep-days: 3 + # 上传文件的超时时间 单位秒,最短5秒钟 + upload-file-timeout: 300 + # 节点文件分片上传大小,单位 M,建议小于 5MB(需要考虑插件端上传文件大小限制) + upload-file-slice-size: 1 + # 节点文件分片上传并发数,最小1 最大 服务端 CPU 核心数 + upload-file-concurrent: 2 + # web socket 消息最大长度 + web-socket-message-size-limit: 5MB + system: + # cron 定时器是否开启匹配秒 + timer-match-second: false + # 旧包文件保留个数 + old-jars-count: 2 + # 系统日志编码格式 + log-charset: UTF-8 + # 控制台编码格式 + console-charset: + # 在线升级允许降级-操作 + allowed-downgrade: false + user: + # 用户连续登录失败次数,超过此数将被限制登录 + always-login-error: 5 + # IP连续登录失败次数,超过此数将被限制登录 + always-ip-login-error: 10 + # 当ip连续登录失败,锁定对应IP时长,5h、1d + ip-error-lock-time: 5h + # 是否强制提醒用户开启 mfa + force-mfa: false + #登录token失效时间(单位:小时),默认为24 + token-expired: 24 + #登录token失效后自动续签时间(单位:分钟),默认为60,不自动续签 + token-renewal: 60 + # jwt 签名(加密)的key 长度建议控制到 16位 + token-jwt-key: + web: + # 前端接口 超时时间 单位秒(最小 5 秒) + api-timeout: 20 + # 禁用页面引导导航 + disabled-guide: false + # 禁用登录图形验证码 (一般用于服务器没有字体或者开启了两部验证后才关闭图形验证码) + disabled-captcha: false + # 前端消息弹出位置,可选 topLeft topRight bottomLeft bottomRight + notification-placement: + # 前端消息传输需要编码或者加密 目前支持:NONE、BASE64 + transport-encryption: NONE + # 查看日志时初始读取最后多少行(默认10,0不读取) + init-read-line: 10 + db: + # 数据库默认 支持 :H2、MYSQL + mode: H2 + # 日志存储条数,将自动清理旧数据,配置小于等于零则不清理 + log-storage-count: 10000 + # H2 模式无需配置 mysql 配置 jdbc 地址 + url: + # 数据库账号 默认 jpom + user-name: jpom + # 数据库密码 默认 jpom 如果自行配置请保证密码强度 + user-pwd: jpom + # h2 数据库缓存大小 kilobyte 1KB 1,024 megabyte 1MB 1,048,576 + cache-size: 50MB + # 自动备份间隔天数 小于等于 0 不自动备份 + auto-backup-interval-day: 1 + # 自动备份保留天数 小于等于 0,不自动删除自动备份数据 + auto-backup-reserve-day: 5 + # 数据库连接池相关配置 + max-active: 500 + initial-size: 10 + max-wait: 10 + min-idle: 1 + # 控制台是否打印 sql 信息 + show-sql: false + # 构建相关配置 + build: + # 最多保存多少份历史记录 + max-history-count: 1000 + # 单个最多保存多少份历史记录 + item-max-history-count: 50 + # 构建命令是否检查 存在删除命令 + check-delete-command: true + # 构建线程池大小,小于 1 则为不限制,默认大小为 5 + pool-size: 5 + # 构建任务等待数量,超过此数量将取消构建任务,值最小为 1 + pool-wait-queue: 10 + # 日志显示 压缩折叠显示进度比例 范围 1-100 + log-reduce-progress-ratio: 5 + file-storage: + # 文件中心存储路径 + save-pah: + scan-static-dir-cron: 0 0/1 * * * + # 是否开启静态文件目录监听 + watch-monitor-static-dir: true + # 监听静态文件目录层级 + watch-monitor-max-depth: 5 + assets: + # 监控线程池大小,小于等于0 为CPU核心数 + monitor-pool-size: 0 + # 监控任务等待数量,超过此数量将取消监控任务,值最小为 1 + monitor-pool-wait-queue: 500 + # ssh 资产 + ssh: + # 监控频率 + monitor-cron: 0 0/1 * * * ? + # 指定分组不启用监控功能(如果想禁用所有配置 * 即可) + disable-monitor-group-name: + - 禁用监控 + # docker 资产 + docker: + # 监控频率 + monitor-cron: 0 0/1 * * * ? +server: + #运行端口号 + port: 2122 + servlet: + session: + cookie: + name: JPOMID-SERVER + timeout: 1H + encoding: + charset: UTF-8 + force: true + enabled: true + forceRequest: true + forceResponse: true + compression: + # gzip 压缩 + enabled: true + #mime-types: application/json,application/xml,text/html,text/xml,text/plain,application/javascript,image/png + min-response-size: 2048 + tomcat: + uri-encoding: UTF-8 +spring: + web: + resources: + static-locations: classpath:/dist/ + cache: + period: 1D + mvc: + throw-exception-if-no-handler-found: true + log-request-details: true + servlet: + multipart: + # 上传文件大小限制 + max-request-size: 2GB + max-file-size: 1GB + h2: + console: + # 是否开启 web 访问数据库(url: http://${ip}:${port}/h2-console) + enabled: false + # 是否允许远程访问(开启此配置有安全风险),默认为 false(当部署到服务器上之后,是否可以通过其他浏览器访问数据库) + settings: + web-allow-others: false +` + +func ConfigData(c *gin.Context) { + machineId := c.PostForm("machineId") + m := &node2.MachineNode{} + m.Id = machineId + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的机器") + return + } + resp, err := common.Request3(m, "", common.SystemGetConfig, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "分发节点失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), "分发节点失败") + return + } + controller.Success(c, resp.Result.Data) +} + +// todo 暂不允许修改运行配置 +func SaveConfig(c *gin.Context) { + ids := c.PostForm("ids") + if ids == "" { + controller.Success(c, "") + return + } + mids := strings.Split(ids, ",") + if len(mids) == 0 { + controller.Success(c, "") + return + } + + content := c.PostForm("content") + restart := c.PostForm("restart") + + formData := make(map[string]string) + formData["content"] = content + formData["restart"] = restart + + for _, mid := range mids { + m := &node2.MachineNode{} + m.Id = mid + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的机器") + return + } + resp, err := common.Request4(m, common.SystemSaveConfig, formData) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "分发节点失败") + return + } + if !resp.IsSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), "分发节点失败") + return + } + } + controller.Success(c, "修改成功") +} diff --git a/server/internal/controller/v1/app_manage/common.go b/server/internal/controller/v1/app_manage/common.go new file mode 100644 index 0000000..339865c --- /dev/null +++ b/server/internal/controller/v1/app_manage/common.go @@ -0,0 +1,322 @@ +package app_manage + +import ( + "bytes" + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "io" + "io/ioutil" + "mime/multipart" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "time" +) + +func GetWorkspaceId(c *gin.Context) string { + return c.GetHeader("workspaceId") +} + +var ShardingIdMap = make(map[string]bool, 200) + +func TryGetNode(body map[string]interface{}) (*node.Node, error) { + nodeId, _ := body["nodeId"].(string) + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + return nil, err + } + return n, nil +} + +// String[] removeKeys, String... appendData +// application/json类型请求 +func TryRequestNode(machineId string, body map[string]interface{}, nodeUrl string, pars ...string) *response.Response { + n, _ := TryGetNode(body) + marshal, _ := json.Marshal(body) + + if n != nil { + resp, err := common.Request5(n, nodeUrl, bytes.NewReader(marshal)) + if err != nil { + log.Errorf("发送请求失败: %s", n.Url+"/"+nodeUrl) + resp = &response.Response{ + HttpCode: errors.ServerError, + Result: &response.Result{ + Msg: "发送请求失败:" + err.Error(), + Data: nil, + Cost: "", + Now: time.Now(), + Code: errors.ServerError, + }, + } + return resp + } + return resp + } else { + if len(machineId) > 0 { + m := &node.MachineNode{} + m.Id = machineId + err := m.GetById(m) + if err != nil { + log.Errorf("发送请求失败: %s", machineId+":"+nodeUrl) + resp := &response.Response{ + HttpCode: errors.ServerError, + Result: &response.Result{ + Msg: "发送请求失败:" + err.Error(), + Data: nil, + Cost: "", + Now: time.Now(), + Code: errors.ServerError, + }, + } + return resp + } + resp, err := common.Request(m, "", nodeUrl, nil, nil, bytes.NewReader(marshal)) + if err != nil { + log.Errorf("发送请求失败: %s", n.Url+"/"+nodeUrl) + resp = &response.Response{ + HttpCode: errors.ServerError, + Result: &response.Result{ + Msg: "发送请求失败:" + err.Error(), + Data: nil, + Cost: "", + Now: time.Now(), + Code: errors.ServerError, + }, + } + return resp + } + return resp + } else { + log.Errorf("没有找到对应的机器: %s", machineId) + resp := &response.Response{ + HttpCode: errors.ServerError, + Result: &response.Result{ + Msg: fmt.Sprintf("没有找到对应的机器: %s", machineId), + Data: nil, + Cost: "", + Now: time.Now(), + Code: errors.ServerError, + }, + } + return resp + } + } +} + +/** + * 上传保存分片信息 + * + * @param file 上传的文件信息 + * @param tempPath 临时保存目录 + * @param sliceId 分片id + * @param totalSlice 累积分片 + * @param nowSlice 当前分片 + * @param fileSumMd5 文件签名信息 + * @throws IOException 异常 + */ +func UploadShardingImpl(file multipart.File, filename, tempPath, sliceID, totalSliceStr, nowSliceStr, fileSumMD5 string, extNames []string) error { + if fileSumMD5 == "" { + return fmt.Errorf("没有文件签名信息") + } + if sliceID == "" { + return fmt.Errorf("没有分片 id 信息") + } + + totalSlice, err := strconv.Atoi(totalSliceStr) + if err != nil { + return fmt.Errorf("上传信息不完整:totalSlice %s", err) + } + nowSlice, err := strconv.Atoi(nowSliceStr) + if err != nil { + return fmt.Errorf("上传信息不完整:nowSlice %s", err) + } + if totalSlice <= 0 || nowSlice < 0 || totalSlice < nowSlice { + return fmt.Errorf("当前上传的分片信息错误") + } + + slicePath := filepath.Join(tempPath, "slice", sliceID) + sliceItemPath := filepath.Join(slicePath, "items") + if err := os.MkdirAll(sliceItemPath, 0755); err != nil { + return fmt.Errorf("创建保存路径失败:%s", err) + } + + originalFilename := filename + // 截断序号 xxxxx.avi.1 + realName := subBefore(originalFilename, ".", true) + if len(extNames) > 0 { + extName := filepath.Ext(realName) + for _, allowedExt := range extNames { + if strings.ToLower(extName) == strings.ToLower(allowedExt) { + break + } + } + if !strings.Contains(strings.ToLower(extName), strings.ToLower(strings.Join(extNames, ","))) { + return fmt.Errorf("不支持的文件类型:%s", extName) + } + } + + slice := filepath.Join(sliceItemPath, originalFilename) + if err := os.MkdirAll(filepath.Dir(slice), 0755); err != nil { + return fmt.Errorf("创建分片保存路径失败:%s", err) + } + + // 将文件写入到slice + targetFile, err := os.Create(slice) + if err != nil { + return fmt.Errorf("创建目标文件失败:%s", err) + } + defer targetFile.Close() + + _, err = io.Copy(targetFile, file) + if err != nil { + return fmt.Errorf("保存分片文件失败:%s", err) + } + + return nil +} + +/** + * 合并分片 + * + * @param tempPath 临时保存目录 + * @param sliceId 上传id + * @param totalSlice 累积分片 + * @param fileSumMd5 文件签名 + * @return 合并后的文件 + * @throws IOException io + */ +func ShardingTryMergeImpl(tempPath, sliceID string, totalSlice int, fileSumMD5 string) (*os.File, error) { + if fileSumMD5 == "" { + return nil, fmt.Errorf("没有文件签名信息") + } + if sliceID == "" { + return nil, fmt.Errorf("没有分片 id 信息") + } + + if totalSlice == 0 { + return nil, fmt.Errorf("上传信息不完成:totalSlice") + } + + // 保存路径 + slicePath := filepath.Join(tempPath, "slice", sliceID) + sliceItemPath := filepath.Join(slicePath, "items") + + // 获取分片文件 + files, err := ioutil.ReadDir(sliceItemPath) + if err != nil { + return nil, err + } + if len(files) != totalSlice { + return nil, fmt.Errorf("文件上传失败,存在分片丢失的情况, %d != %d", len(files), totalSlice) + } + + // 获取文件真实名称 + name := files[0].Name() + name = subBefore(name, ".", true) + + // 创建合并后的文件 + successFile, err := os.OpenFile(filepath.Join(slicePath, name), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0755) + if err != nil { + return nil, err + } + defer successFile.Close() + + // 排序并合并分片 + fileOrder := make([]int, len(files)) + for i, file := range files { + ext := filepath.Ext(file.Name()) + fileOrder[i] = mustToInt(ext) + } + sort.Slice(fileOrder, func(i, j int) bool { + return fileOrder[i] < fileOrder[j] + }) + + for _, index := range fileOrder { + partFile := filepath.Join(sliceItemPath, fmt.Sprintf("%s.%d", name, index)) + part, err := os.Open(partFile) + if err != nil { + return nil, err + } + + if _, err = io.Copy(successFile, part); err != nil { + part.Close() + return nil, err + } + part.Close() + } + + // 删除分片文件 + if err = os.RemoveAll(sliceItemPath); err != nil { + return nil, err + } + + // 计算新文件的MD5 + // 读取整个文件内容 + file, err := os.Open(successFile.Name()) + if err != nil { + return nil, fmt.Errorf("打开文件失败: %s", err.Error()) + } + defer file.Close() + + hasher := md5.New() + if _, err := io.Copy(hasher, file); err != nil { + return nil, fmt.Errorf("md5Sum error: %s", err.Error()) + } + + newMD5 := hex.EncodeToString(hasher.Sum(nil)) + if !strings.EqualFold(newMD5, fileSumMD5) { + log.Infof("文件合并异常 %s:%x -> %s", successFile.Name(), newMD5, fileSumMD5) + return nil, fmt.Errorf("文件合并后异常,文件不完整可能被损坏") + } + + return successFile, nil +} + +func subBefore(s, sep string, isLastSeparator bool) string { + if sep == "" { + return "" + } + + pos := -1 + if isLastSeparator { + pos = strings.LastIndex(s, sep) + } else { + pos = strings.Index(s, sep) + } + + if pos == -1 { + return s + } else if pos == 0 { + return "" + } + return s[:pos] +} + +// todo 确定是16进制还是字符串 +func md5Sum(content []byte) string { + // 创建一个新的md5哈希器 + hasher := md5.New() + + // 获取哈希值并转换为16进制字符串 + hashBytes := hasher.Sum(content) + md5Hash := hex.EncodeToString(hashBytes) + + return md5Hash +} + +func mustToInt(s string) int { + num, _ := strconv.Atoi(strings.Trim(s, ".")) + return num +} diff --git a/server/internal/controller/v1/app_manage/node/manage/editProjectController.go b/server/internal/controller/v1/app_manage/node/manage/editProjectController.go new file mode 100644 index 0000000..812c9cb --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/manage/editProjectController.go @@ -0,0 +1,131 @@ +package manage + +import ( + "bytes" + "encoding/json" + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/assets" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node" + "github.com/gin-gonic/gin" +) + +func GetProjectData(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_GetProjectItem, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +// ProjectAccessList 同/machine/white-list +func ProjectAccessList(c *gin.Context) { + machineId := c.PostForm("machineId") + m := &node.MachineNode{} + m.Id = machineId + err := m.GetById(m) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的机器") + return + } + + result := assets.GetAgentWhitelist(m) + controller.Success(c, result) +} + +// http://10.110.141.50:2122/node/manage/saveProject +// nodeId=895457ceee8340279d9d92e10242d77c&id=DQWKRY&name=test&runMode=Jar&whitelistDirectory=%2Fhome%2Ftmn%2Fjpom%2Fproject%2F&lib=test&logPath= +func SaveProject(c *gin.Context) { + + //params, _ := request.GetPostFormParams(c) + //if params["nodeId"] == "" { + // controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + // return + //} + p := project_info.ProjectInfo{} + + err := c.ShouldBindJSON(&p) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + nodeId := p.NodeId + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + id := p.Id + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err = n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + p.SetUserName(service.GetUserName(c)) + p.WorkspaceId = n.WorkspaceId + p.NodeName = n.Name + body, _ := json.Marshal(p) + resp, err := common.Request5(n, common.Manage_SaveProject, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "创建项目失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), "创建项目失败-逻辑节点") + return + } + node2.SyncNodeProjectInfo(n, id) + controller.Success(c, "") +} + +func ReleaseOutgiving(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + response := app_manage.TryRequestNode("", bodyToMap, common.Manage_ReleaseOutGiving) + + if response.Result.Code == errors.SUCCESS { + projectId, _ := bodyToMap["id"].(string) + n, _ := app_manage.TryGetNode(bodyToMap) + node2.SyncNodeProjectInfo(n, projectId) + + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} diff --git a/server/internal/controller/v1/app_manage/node/manage/file/projectFileControl.go b/server/internal/controller/v1/app_manage/node/manage/file/projectFileControl.go new file mode 100644 index 0000000..489be49 --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/manage/file/projectFileControl.go @@ -0,0 +1,369 @@ +package file + +import ( + "bytes" + "encoding/json" + err1 "errors" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" + "github.com/google/uuid" + "io" + "mime/multipart" + "strconv" + "strings" + "sync" +) + +func GetFileList(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + jsonBody["path"] = c.PostForm("path") + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_File_GetFileList, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +var mutex sync.Mutex + +func GenerateShardingId(c *gin.Context) { + mutex.Lock() + if len(app_manage.ShardingIdMap) > 100 { + controller.FailCode(c, errors.ServerError, nil, "分片id最大同时使用100个") + return + } + id := strings.ReplaceAll(uuid.New().String(), "-", "") + app_manage.ShardingIdMap[id] = true + mutex.Unlock() + controller.Success(c, id) +} + +// 1aaa34e5be524c868928a6053d487e2d +func UploadSharding(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + sliceId := c.PostForm("sliceId") + if _, ok := app_manage.ShardingIdMap[sliceId]; !ok { + controller.FailCode(c, errors.InvalidParameter, nil, "不合法的分片id") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + _, err = c.MultipartForm() + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + file, header, err := c.Request.FormFile("file") + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + defer file.Close() + body := new(bytes.Buffer) + mpw := multipart.NewWriter(body) + fw, err := mpw.CreateFormFile("file", header.Filename) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _, err = io.Copy(fw, file) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _ = mpw.WriteField("nowSlice", c.PostForm("nowSlice")) + _ = mpw.WriteField("totalSlice", c.PostForm("totalSlice")) + _ = mpw.WriteField("sliceId", sliceId) + _ = mpw.WriteField("fileSumMd5", c.PostForm("fileSumMd5")) + _ = mpw.WriteField("id", id) + _ = mpw.WriteField("levelName", c.PostForm("levelName")) + _ = mpw.Close() + h := make(map[string]string) + h["Content-Type"] = mpw.FormDataContentType() + resp, err := common.Request1(n, common.Manage_File_Upload_Sharding, h, nil, body) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "上传失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Msg) +} + +func ShardingMerge(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + sliceId := c.PostForm("sliceId") + if _, ok := app_manage.ShardingIdMap[sliceId]; !ok { + controller.FailCode(c, errors.InvalidParameter, nil, "不合法的分片id") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]interface{}) + nowSlice := c.PostForm("nowSlice") + var nowSliceI int + if nowSlice != "" { + nowSliceI, _ = strconv.Atoi(nowSlice) + } + totalSlice := c.PostForm("totalSlice") + var totalSliceI int + if totalSlice != "" { + totalSliceI, _ = strconv.Atoi(totalSlice) + } + + stripComponents := c.PostForm("stripComponents") + var stripComponentsI int + if stripComponents != "" { + stripComponentsI, _ = strconv.Atoi(stripComponents) + } + + jsonBody["nowSlice"] = nowSliceI + jsonBody["totalSlice"] = totalSliceI + jsonBody["sliceId"] = sliceId + jsonBody["fileSumMd5"] = c.PostForm("fileSumMd5") + jsonBody["id"] = id + jsonBody["levelName"] = c.PostForm("levelName") + jsonBody["stripComponents"] = stripComponentsI + + type_ := c.PostForm("type") + if type_ != "" { + jsonBody["type"] = type_ + } + + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_File_Sharding_Merge, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "合并失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + delete(app_manage.ShardingIdMap, sliceId) + controller.Success(c, resp.Result.Msg) +} + +// remote-download +func RemoteDownload(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + jsonBody["url"] = c.PostForm("url") + jsonBody["levelName"] = c.PostForm("levelName") + jsonBody["unzip"] = c.PostForm("unzip") + jsonBody["stripComponents"] = c.PostForm("stripComponents") + jsonBody["filename"] = c.PostForm("filename") + + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_File_Remote_Download, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "下载失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +func DeleteFile(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + jsonBody["levelName"] = c.PostForm("levelName") + jsonBody["filename"] = c.PostForm("filename") + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_File_DeleteFile, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +func NewFileFolder(c *gin.Context) { + nodeId := c.Query("nodeId") + id := c.Query("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + jsonBody["levelName"] = c.Query("levelName") + jsonBody["filename"] = c.Query("filename") + jsonBody["unFolder"] = c.Query("unFolder") + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.MANAGE_FILE_NEW_FILE_FOLDER, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "创建失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +// ?nodeId=28d5792b2d3d11ef854b9e95766d6418&id=78XBM1&filePath=/gway&filename=manifest.yml +func ReadFile(c *gin.Context) { + workspaceId := app_manage.GetWorkspaceId(c) + + nodeId := c.Query("nodeId") + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到节点信息") + return + } + + query := c.Request.URL.RawQuery + query = fmt.Sprintf("%s?%s", common.Manage_File_ReadFile, query) + resp, err := common.RequestGet(n, workspaceId, query) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到节点信息:") + return + } + + if resp.Result.Code != errors.SUCCESS { + controller.Fail(c, errors.ServerError, resp.Result.Msg) + return + } + + controller.Success(c, resp.Result.Data) +} + +// nodeId: this.nodeId, +// +// id: this.projectId, +// filePath: this.uploadPath, +// filename: this.filename, +// fileText: this.fileContent, +func UpdateConfigFile(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + + n, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + return + } + + resp := app_manage.TryRequestNode(n.MachineId, bodyToMap, common.Manage_File_UpdateConfigFile) + if resp.Result.Code == errors.SUCCESS { + controller.Success(c, resp.Result.Data) + return + } + + controller.Fail(c, errors.ServerError, resp.Result.Msg) +} diff --git a/server/internal/controller/v1/app_manage/node/manage/log/logBackController.go b/server/internal/controller/v1/app_manage/node/manage/log/logBackController.go new file mode 100644 index 0000000..ffeed4f --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/manage/log/logBackController.go @@ -0,0 +1,36 @@ +package log + +import ( + "bytes" + "encoding/json" + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" +) + +func LogSize(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + + n, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "获取节点失败") + return + } + + body, _ := json.Marshal(bodyToMap) + resp, err := common.Request5(n, common.Manage_Log_LogSize, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "获取日志大小失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) + +} diff --git a/server/internal/controller/v1/app_manage/node/manage/projectManageControl.go b/server/internal/controller/v1/app_manage/node/manage/projectManageControl.go new file mode 100644 index 0000000..2b01816 --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/manage/projectManageControl.go @@ -0,0 +1,239 @@ +package manage + +import ( + "bytes" + "encoding/json" + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/outgiving" + "github.com/gin-gonic/gin" +) + +// GS4Z2X +func GetProjectPort(c *gin.Context) { + nodeId := c.PostForm("nodeId") + ids := c.PostForm("ids") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if ids == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + var idArray []string + err := json.Unmarshal([]byte(ids), &idArray) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "请检查参数!") + return + } + if len(idArray) == 0 { + controller.FailCode(c, errors.ServerError, err, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err = n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string][]string) + jsonBody["ids"] = idArray + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_GetProjectPort, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +type ProjectPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + NodeId string `json:"nodeId"` + Group string `json:"group"` + Keyword string `json:"keyword"` + RunMode string `json:"runMode"` +} + +func PageProject(c *gin.Context) { + var pageBody ProjectPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if pageBody.NodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + p := project_info.New() + fields := map[string]interface{}{} + fields["node_id"] = pageBody.NodeId + + if len(pageBody.Group) > 0 { + fields["\"group\""] = pageBody.Group + } + if len(pageBody.RunMode) > 0 { + fields["run_mode"] = pageBody.RunMode + } + + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = workspaceId + + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + result, err := p.Page(p, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + page.Data = result + controller.Success(c, page) +} + +func DeleteProject(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + + n, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + return + } + + projectId, _ := bodyToMap["id"].(string) + if projectId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数:projectId!") + return + } + workspaceId := app_manage.GetWorkspaceId(c) + + err = outgiving.CheckNodeProject(n.Id, projectId, workspaceId, "当前项目存在节点分发,不能直接删除") + if err != nil { + controller.FailCode(c, errors.ServerError, err, "当前项目存在节点分发,不能直接删除") + return + } + + // todo 检查日志阅读 项目监控 + // logReadServer.checkNodeProject(nodeModel.getId(), id, request, "当前项目存在日志阅读,不能直接删除"); + resp := app_manage.TryRequestNode("", bodyToMap, common.Manage_DeleteProject) + if resp.Result.Code == errors.SUCCESS { + node2.SyncExecuteNode(n) + controller.Success(c, resp.Result.Data) + return + } + + controller.Fail(c, errors.ServerError, resp.Result.Msg) + +} + +func StartProject(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数:nodeId!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数:id!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_StartProject, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "下载失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +func StopProject(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_StopProject, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "下载失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} + +func RestartProject(c *gin.Context) { + nodeId := c.PostForm("nodeId") + id := c.PostForm("id") + if nodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的节点") + return + } + jsonBody := make(map[string]string) + jsonBody["id"] = id + body, _ := json.Marshal(jsonBody) + resp, err := common.Request5(n, common.Manage_RestartProject, bytes.NewReader(body)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "下载失败") + return + } + if !resp.IsBusinessSuccess() { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), resp.Result.Data) + return + } + controller.Success(c, resp.Result.Data) +} diff --git a/server/internal/controller/v1/app_manage/node/nodeEditController.go b/server/internal/controller/v1/app_manage/node/nodeEditController.go new file mode 100644 index 0000000..fba029e --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/nodeEditController.go @@ -0,0 +1,302 @@ +package node + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/script_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strings" +) + +func GetAllNodesByWorkspaceId(c *gin.Context) { + workspaceId := c.Query("workspaceId") + if workspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + n := node2.New() + fields := map[string]interface{}{} + fields["workspace_id"] = workspaceId + result, err := n.GetAll(n, fields, nil) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + + controller.Success(c, result) +} + +type NodePageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + WorkspaceId string `json:"workspaceId"` + Name string `json:"name"` + Group string `json:"group"` + Keyword string `json:"keyword"` +} + +func PageNodesByWorkspaceId(c *gin.Context) { + var pageBody NodePageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if pageBody.WorkspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + n := node2.New() + fields := map[string]interface{}{} + fields["workspace_id"] = pageBody.WorkspaceId + if pageBody.Name != "" { + fields["name"] = pageBody.Name + } + if pageBody.Group != "" { + fields["\"group\""] = pageBody.Group + } + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + result, err := n.Page(n, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + nodes := result.([]node2.Node) + if len(nodes) > 0 { + for i, node := range nodes { + m := &node2.MachineNode{} + m.Id = node.MachineId + err = m.GetById(m) + + projects, _ := project_info.GetProjectByNodeId(node.Id) + scripts, err := script_info.GetNodeScriptByNodeId(node.Id) + + if err == nil { + m.CfnAgentProjectCount = len(projects) + m.CfnAgentScriptCount = len(scripts) + nodes[i].MachineNodeData = m + } + } + } + page.Data = nodes + controller.Success(c, page) +} + +func SyncToWorkspace(c *gin.Context) { + ids := c.Query("ids") + if ids == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + workspaceId := c.Query("workspaceId") + if workspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + fields := map[string]interface{}{} + idArray := strings.Split(ids, ",") + username := service.GetUserName(c) + for _, id := range idArray { + nd := node2.New() + nd.Id = id + err := nd.GetById(nd) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, nil, "节点不存在!") + return + } + fields = map[string]interface{}{} + fields["workspace_id"] = workspaceId + fields["machine_id"] = nd.MachineId + result, _ := nd.GetAll(nd, fields, nil) + if len(result.([]node2.Node)) > 0 { + controller.FailCode(c, errors.InvalidParameter, nil, "目标工作空间已存在该节点!") + return + } + nd.Id = "" + nd.WorkspaceId = workspaceId + nd.CreateUser = username + nd.ModifyUser = username + nd.LoginName = "" + nd.Url = "" + nd.LoginPwd = "" + nd.Protocol = "" + nd.HttpProxy = "" + nd.HttpProxyType = "" + _, err = nd.Create(nd) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + } + + controller.Success(c, "") +} + +func EditNode(c *gin.Context) { + n := &node2.Node{} + err := validator.CheckPostParams(c, n) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + n1 := &node2.Node{} + err = n.GetById(n1) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + n.ModifyUser = service.GetUserName(c) + _, err = n.Update(n, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + // TODO projectInfoCacheService.syncNode(nodeModel); + controller.Success(c, "") +} + +func ListNodeGroup(c *gin.Context) { + n := &node2.Node{} + result, _ := n.ListGroup() + controller.Success(c, result) +} + +type UnbindNodeBody struct { + Id string `json:"id"` +} + +func UnbindNode(c *gin.Context) { + + var body UnbindNodeBody + err := c.ShouldBindJSON(&body) + + id := body.Id + if id == "" { + controller.Fail(c, errors.InvalidParameter, "id为空") + return + } + workspaceId := app_manage.GetWorkspaceId(c) + + // + { + exists, _ := out_giving.ExistsOutGivingModel(workspaceId, id) + if exists { + controller.FailCode(c, errors.InvalidParameter, nil, "该节点存在分发项目,不能删除") + return + } + } + + { + exists, _ := project_info.Exists_1(workspaceId, id) + if exists { + controller.FailCode(c, errors.InvalidParameter, nil, "该节点下还存在项目,不能删除") + return + } + } + + { + exists, _ := script_info.ExistsNodeScriptCacheModel(workspaceId, id) + if exists { + controller.FailCode(c, errors.InvalidParameter, nil, "该节点下还存在脚本模版,不能删除") + return + } + } + + n := &node2.Node{} + n.Id = id + err = n.GetById(n) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + _, err = n.Delete(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + + script_info.DeleteNodeScriptExecuteLogByNodeIdAndWorkspaceIds(id, []string{workspaceId, "GLOBAL"}) + controller.Success(c, "") +} + +func DeleteNode(c *gin.Context) { + id := c.PostForm("id") + if id == "" { + controller.Success(c, "") + return + } + workspaceId := app_manage.GetWorkspaceId(c) + + // + { + exists, _ := out_giving.ExistsOutGivingModel(workspaceId, id) + if exists { + controller.FailCode(c, errors.InvalidParameter, nil, "该节点存在分发项目,不能删除") + return + } + } + + _, err := project_info.DeleteProjectByNodeIdAndWorkspaceId(id, workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除项目失败!") + return + } + + _, err = script_info.DeleteNodeScriptByNodeIdAndWorkspaceId(id, workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除脚本失败!") + return + } + + n := &node2.Node{} + n.Id = id + err = n.GetById(n) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + _, err = n.Delete(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + + script_info.DeleteNodeScriptExecuteLogByNodeIdAndWorkspaceIds(id, []string{workspaceId, "GLOBAL"}) + + controller.Success(c, "") +} + +func SortItem(c *gin.Context) { + /*n := &node.Node{} + err := validator.CheckPostParams(c, n) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + fields["id"] = n.Id + _, err = n.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + userName := service.GetUserName(c) + n.ModifyUser = userName + var updateColumns []string + _, err = n.Update(updateColumns) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "")*/ +} diff --git a/server/internal/controller/v1/app_manage/node/nodeProjectInfoController.go b/server/internal/controller/v1/app_manage/node/nodeProjectInfoController.go new file mode 100644 index 0000000..d63bfee --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/nodeProjectInfoController.go @@ -0,0 +1,108 @@ +package node + +import ( + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node" + "github.com/gin-gonic/gin" +) + +type ProjectPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + NodeId string `json:"nodeId"` + Group string `json:"group"` + Keyword string `json:"keyword"` + RunMode string `json:"runMode"` +} + +// ProjectList 加载节点项目列表 +func ProjectList(c *gin.Context) { + var pageBody *ProjectPageBody + body := request.GetBody(c) + err := json.Unmarshal(body, &pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + p := project_info.New() + fields := map[string]interface{}{} + if len(pageBody.NodeId) > 0 { + fields["node_id"] = pageBody.NodeId + } + if len(pageBody.Group) > 0 { + fields["\"group\""] = pageBody.Group + } + if len(pageBody.RunMode) > 0 { + fields["run_mode"] = pageBody.RunMode + } + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = workspaceId + + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + result, err := p.Page(p, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + page.Data = result + controller.Success(c, page) +} + +// ProjectListAll 加载节点项目列表 +func ProjectListAll(c *gin.Context) { + p := project_info.New() + + fields := map[string]interface{}{} + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = workspaceId + all, err := p.GetAll(p, fields, nil) + if err != nil { + return + } + controller.Success(c, all) +} + +// ListProjectGroup 查询所有的分组 +func ListProjectGroup(c *gin.Context) { + p := &project_info.ProjectInfo{} + result, _ := p.ListGroup() + controller.Success(c, result) +} + +// SyncProject 同步节点项目 +func SyncProject(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + n, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + workspaceId := c.Request.Header.Get("workspaceId") + + count, err := project_info.DeleteProjectByNodeIdAndWorkspaceId(n.Id, workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除节点缓存项目信息失败!") + return + } + + msg := node.SyncExecuteNode(n) + controller.Success(c, fmt.Sprintf("主动清除:%d个项目, 同步信息:%s", count, msg)) + +} + +func ClearAll(c *gin.Context) { + all, err := project_info.ClearAll() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除节点缓存项目失败!") + return + } + controller.Success(c, fmt.Sprintf("成功删除 %d 条项目缓存", all)) +} diff --git a/server/internal/controller/v1/app_manage/node/nodeUpdateController.go b/server/internal/controller/v1/app_manage/node/nodeUpdateController.go new file mode 100644 index 0000000..e8f1b6a --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/nodeUpdateController.go @@ -0,0 +1,37 @@ +package node + +import ( + "encoding/json" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "github.com/gin-gonic/gin" + "os" +) + +func FastInstallNode(c *gin.Context) { + result := make(map[string]interface{}) + result["key"] = "--auto-push-to-server" + result["token"] = os.Getenv("JPOM_SERVER_TEMP_TOKEN") + shUrls := `[ + { + "name": "主地址(默认安装)", + "url": "curl -fsSL https://jpom.top/docs/install.sh | bash -s Agent jdk+default" + }, + { + "name": "备用地址(默认安装)", + "url": "curl -fsSL https://gitee.com/dromara/Jpom/raw/docs/docs/.vuepress/public/docs/install.sh | bash -s Agent jdk+default" + }, + { + "name": "主地址(自定义安装)", + "url": "yum install -y wget && wget -O install.sh https://jpom.top/docs/install.sh && bash install.sh Agent jdk" + }, + { + "name": "备用地址(自定义安装)", + "url": "yum install -y wget && wget -O install.sh https://gitee.com/dromara/Jpom/raw/docs/docs/.vuepress/public/docs/install.sh && bash install.sh Agent jdk" + } +]` + var shUrlsArray []map[string]string + json.Unmarshal([]byte(shUrls), &shUrlsArray) + result["shUrls"] = shUrlsArray + result["url"] = "/api/node/receive_push" + controller.Success(c, result) +} diff --git a/server/internal/controller/v1/app_manage/node/script/node_script_controller.go b/server/internal/controller/v1/app_manage/node/script/node_script_controller.go new file mode 100644 index 0000000..006c75b --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/script/node_script_controller.go @@ -0,0 +1,162 @@ +package script + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/script_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node/script" + "github.com/gin-gonic/gin" +) + +type ProjectPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + NodeId string `json:"nodeId"` + Group string `json:"group"` + Keyword string `json:"keyword"` + RunMode string `json:"runMode"` +} + +func ScriptList(c *gin.Context) { + var pageBody ProjectPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if pageBody.NodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + n := script_info.NewNodeScriptCacheModel() + fields := map[string]interface{}{} + fields["node_id"] = pageBody.NodeId + + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + scripts, err := n.Page(n, page, fields) + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + page.Data = scripts + controller.Success(c, page) +} + +func ScriptListAll(c *gin.Context) { + var pageBody ProjectPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + n := script_info.NewNodeScriptCacheModel() + fields := map[string]interface{}{} + if pageBody.NodeId != "" { + fields["node_id"] = pageBody.NodeId + } + + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + scripts, err := n.Page(n, page, fields) + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + page.Data = scripts + controller.Success(c, page) +} + +func Item(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + response := app_manage.TryRequestNode("", bodyToMap, common.Script_Item) + if response.Result.Code == errors.SUCCESS { + // todo 同步服务端 + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} + +func Save(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + machineId, _ := bodyToMap["machineId"].(string) + response := app_manage.TryRequestNode(machineId, bodyToMap, common.Script_Save) + if response.Result.Code == errors.SUCCESS { + // todo 同步服务端 + node, _ := app_manage.TryGetNode(bodyToMap) + go script.SyncExecuteNode(node) + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} + +func Del(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + response := app_manage.TryRequestNode("", bodyToMap, common.Script_Del) + if response.Result.Code == errors.SUCCESS { + // todo 同步服务端 + node, _ := app_manage.TryGetNode(bodyToMap) + go script.SyncExecuteNode(node) + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} + +func SyncScript(c *gin.Context) { + nodeId := c.Query("nodeId") + workspaceId := c.Request.Header.Get("workspaceId") + + node, err := app_manage.TryGetNode(map[string]interface{}{"nodeId": nodeId}) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "节点信息有误") + return + } + _, err = script_info.DeleteNodeScriptByNodeIdAndWorkspaceId(nodeId, workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除脚本失败") + return + } + + res := script.SyncExecuteNode(node) + controller.Success(c, res) +} + +func ClearAll(c *gin.Context) { + count, err := script_info.DeleteAllNodeScript() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除脚本失败") + return + } + controller.Success(c, fmt.Sprintf("成功删除%d条脚本模版缓存", count)) +} + +func Unbind(c *gin.Context) { + id := c.Query("id") + workspaceId := app_manage.GetWorkspaceId(c) + + _, err := script_info.DeleteNodeScriptByIdAndWorkspaceId(id, workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "解绑失败:删除脚本失败") + return + } + controller.Success(c, "解绑成功") +} diff --git a/server/internal/controller/v1/app_manage/node/script/node_script_log_controller.go b/server/internal/controller/v1/app_manage/node/script/node_script_log_controller.go new file mode 100644 index 0000000..dff14d5 --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/script/node_script_log_controller.go @@ -0,0 +1,116 @@ +package script + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/script_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/base_service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" +) + +type LogPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + NodeId string `json:"nodeId"` + Name string `json:"%name%"` + TriggerExecType string `json:"triggerExecType"` +} + +// ScriptLogList 处理器 +func ScriptLogList(c *gin.Context) { + var pageBody LogPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if pageBody.NodeId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!(nodeId)") + return + } + + fields := map[string]interface{}{} + fields["node_id"] = pageBody.NodeId + + if len(pageBody.TriggerExecType) != 0 { + fields["trigger_exec_type"] = pageBody.TriggerExecType + } + + if pageBody.Name != "" { + fields["%script_name%"] = pageBody.Name + } + + page := &model.Page[script_info.NodeScriptExecuteLogCacheModel]{ + CurrentPage: pageBody.PageInfo.CurrentPage, + PageSize: pageBody.PageInfo.PageSize, + Order: pageBody.PageInfo.Order, + } + + log := script_info.NewNodeScriptExecuteLogCacheModel() + err = log.Page(page, fields) + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询脚本日志失败!") + return + } + + controller.Success(c, page) +} + +// Log 处理器 +func Log(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + machineId, _ := bodyToMap["machineId"].(string) + response := app_manage.TryRequestNode(machineId, bodyToMap, common.SCRIPT_LOG) + + if response.Result.Code == errors.SUCCESS { + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} + +// DelLog 处理器 +/** + * @param id 模版ID + * @param executeId 日志ID + */ +func DelLog(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + + id, _ := bodyToMap["id"].(string) + executeId, _ := bodyToMap["executeId"].(string) + workspaceId := app_manage.GetWorkspaceId(c) + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + hasWorkspace := base_service.CheckUserWorkspace(workspaceId, userModel) + if !hasWorkspace { + controller.FailCode(c, errors.RBACError, nil, "没有对应的工作空间权限!") + return + } + + executeLogModel, err := script_info.GetNodeScriptExecuteLogByIdAndWorkspaceIds(executeId, []string{workspaceId, "GLOBAL"}) + if err != nil || executeLogModel.Id == "" { + controller.FailCode(c, errors.ServerError, err, "没有对应的执行日志!") + return + } + + if executeLogModel.ScriptId != id { + controller.FailCode(c, errors.InvalidParameter, nil, "数据关联的id 不一致!") + return + } + + response := app_manage.TryRequestNode("", bodyToMap, common.SCRIPT_DEL_LOG) + if response.Result.Code == errors.SUCCESS { + script_info.DeleteNodeScriptExecuteLogByIdAndWorkspaceIds(executeId, []string{workspaceId, "GLOBAL"}) + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} diff --git a/server/internal/controller/v1/app_manage/node/system/whitelist_directory_controller.go b/server/internal/controller/v1/app_manage/node/system/whitelist_directory_controller.go new file mode 100644 index 0000000..9b365dd --- /dev/null +++ b/server/internal/controller/v1/app_manage/node/system/whitelist_directory_controller.go @@ -0,0 +1,65 @@ +package system + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" +) + +// WhiteList 同/machine/white-list +func WhiteList(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + machineId, _ := bodyToMap["machineId"].(string) + response := app_manage.TryRequestNode(machineId, bodyToMap, common.WhitelistDirectory_data, "") + + if response.Result.Code == errors.SUCCESS { + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } + + //bodyToMap := request.GetBodyToMap(c) + //nodeId, _ := bodyToMap["nodeId"].(string) + //n := &node.Node{} + //n.Id = nodeId + //err := n.GetById(n) + //if err != nil { + // machineId, _ := bodyToMap["machineId"].(string) + // m := &node.MachineNode{} + // m.Id = machineId + // err = m.GetById(m) + // if err != nil { + // controller.FailCode(c, errors.ServerError, err, "获取白名单失败") + // return + // } + // response, err := common.Request(m, "", common.WhitelistDirectory_data, nil, nil, nil) + // if err != nil { + // controller.FailCode(c, errors.ServerError, err, "获取白名单失败") + // return + // } + // + // controller.Success(c, response.Result.Data) + //} else { + // response, err := common.Request5(n, common.WhitelistDirectory_data, nil) + // if err != nil { + // controller.FailCode(c, errors.ServerError, err, "获取白名单失败") + // return + // } + // controller.Success(c, response.Result.Data) + //} +} + +func WhitelistDirectorySubmit(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + machineId, _ := bodyToMap["machineId"].(string) + response := app_manage.TryRequestNode(machineId, bodyToMap, common.WhitelistDirectory_Submit, "") + + if response.Result.Code == errors.SUCCESS { + controller.Success(c, response.Result.Data) + } else { + controller.FailCode(c, response.Result.Code, errors.NewBusinessError(response.Result.Code, response.Result.Msg), response.Result.Data) + } +} diff --git a/server/internal/controller/v1/app_manage/node_for_cfn.go b/server/internal/controller/v1/app_manage/node_for_cfn.go new file mode 100644 index 0000000..b068993 --- /dev/null +++ b/server/internal/controller/v1/app_manage/node_for_cfn.go @@ -0,0 +1,65 @@ +package app_manage + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" +) + +func GetNodeBySerialNo(c *gin.Context) { + serialNo := c.Query("serialno") + workspaceId := c.Query("workspaceId") + + d := &device.DeviceInfo{} + deviceInfo, err := d.GetBySerialNo(serialNo) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到节点信息") + return + } + + // todo 临时 + n := node.New() + fields := map[string]interface{}{} + fields["url"] = fmt.Sprintf("%s:%d", deviceInfo.IPAddress, deviceInfo.Port) + fields["workspace_id"] = workspaceId + result, err := n.GetAll(n, fields, nil) + + nodes := result.([]node.Node) + if len(nodes) == 0 { + controller.FailCode(c, errors.InvalidParameter, nil, "未查询到节点信息!") + return + } + + controller.Success(c, nodes[0]) +} + +func GetRandomPorts(c *gin.Context) { + nodeId := c.Query("nodeId") + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到节点信息") + return + } + + query := c.Request.URL.RawQuery + query = fmt.Sprintf("%s?%s", common.RANDOM_PORTS, query) + resp, err := common.RequestGet(n, "", query) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到节点信息:") + return + } + + if resp.Result.Code != errors.SUCCESS { + controller.Fail(c, errors.ServerError, resp.Result.Msg) + return + } + + controller.Success(c, resp.Result.Data) + +} diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingController.go b/server/internal/controller/v1/app_manage/outgiving/outGivingController.go new file mode 100644 index 0000000..c4624fa --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingController.go @@ -0,0 +1,354 @@ +package outgiving + +import ( + "bytes" + "encoding/json" + err1 "errors" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "github.com/gin-gonic/gin" + "regexp" + "strings" + "time" +) + +type OutGivgingPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Group string `json:"group"` + OutGivingProject string `json:"outGivingProject"` + Status string `json:"status"` +} + +func DispatchList(c *gin.Context) { + var pageBody OutGivgingPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + fields := map[string]interface{}{} + if pageBody.Group != "" { + fields["\"group\""] = pageBody.Group + } + if pageBody.OutGivingProject != "" { + // 将字符串转化为布尔值 + toBool := utils.StringToBool(pageBody.OutGivingProject) + fields["outGivingProject"] = toBool + } + if pageBody.Status != "" { + fields["status"] = pageBody.Status + } + + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = workspaceId + + page := &model.Page[out_giving.OutGivingModel]{ + CurrentPage: pageBody.PageInfo.CurrentPage, + PageSize: pageBody.PageInfo.PageSize, + Order: pageBody.PageInfo.Order, + } + + model := out_giving.NewOutGivingModel() + err = model.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询分发列表失败!") + return + } + + controller.Success(c, page) +} + +func DispatchListAll(c *gin.Context) { + workspaceId := app_manage.GetWorkspaceId(c) + models := out_giving.ListOutGivingModelByWorkspace(workspaceId) + controller.Success(c, models) +} + +// 关联分发项目 +func SaveConnected(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + typeStr, _ := bodyToMap["type"].(string) + id, _ := bodyToMap["id"].(string) + + workspaceId := app_manage.GetWorkspaceId(c) + bodyToMap["workspace_id"] = workspaceId + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + if "add" == typeStr { + checkId := strings.ReplaceAll(id, "-", "") + checkId = strings.ReplaceAll(checkId, "_", "") + err := validateID(checkId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + addOutGivingConnected(c, id, bodyToMap, userModel) + } else { + updateGivingConnected(c, id, bodyToMap, userModel) + } + +} + +// validateID 验证项目ID +func validateID(id string) error { + re := regexp.MustCompile(`^[a-zA-Z0-9_]{2,50}$`) + matchString := re.MatchString(id) + if !matchString { + return fmt.Errorf("项目id 长度范围2-%d(英文字母 、数字和下划线)", 20) + } + return nil +} + +func addOutGivingConnected(c *gin.Context, id string, body map[string]interface{}, userObj *user.UserObj) { + byId := out_giving.GetOutGivingModelById(id) + if byId.Id != "" { + controller.FailCode(c, errors.ServerError, nil, "项目id已存在") + return + } + outGivingModel := out_giving.NewOutGivingModel() + outGivingModel.Id = id + outGivingModel.CreateUser = userObj.UserID + outGivingModel.ModifyUser = userObj.UserID + + err := doDataConnected(outGivingModel, body) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + _, err = outGivingModel.Create(outGivingModel) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "项目id已存在") + return + } + controller.Success(c, "添加成功") +} + +func updateGivingConnected(c *gin.Context, id string, body map[string]interface{}, userObj *user.UserObj) { + outGivingModel := out_giving.GetOutGivingModelById(id) + if outGivingModel == nil { + controller.Fail(c, errors.ServerError, "没有找到对应的分发id") + return + } + + err := doDataConnected(outGivingModel, body) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + outGivingModel.ModifyUser = userObj.UserID + outGivingModel.ModifyTimeMillis = time.Now().UnixMilli() + err = out_giving.UpdateOutGivingModel(outGivingModel, []string{"name", "group", "workspace_id", "after_opt", "secondary_directory", + "out_giving_node_project_list", "clear_old", "upload_close_first", "secondary_directory", "modify_user", "modify_time_millis"}) + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "修改失败") + return + } + controller.Success(c, "修改成功") +} + +// { +// "type": "add", +// "id": "0K1GRY", +// "name": "sdafas", +// "projectId": "", +// "group": "gg", +// "afterOpt": "0", +// "secondaryDirectory": "tssss", +// "clearOld": "true", +// "uploadCloseFirst": "true", +// "node_56e192c8e76742fa85c72342212ef466_0": "27G909", +// "node_5722cd7a4e7a475cac61da2507088a9d_1": "T88633" +// } +func doDataConnected(outGivingModel *out_giving.OutGivingModel, body map[string]interface{}) error { + outGivingModel.Name = body["name"].(string) + outGivingModel.WorkspaceId = body["workspace_id"].(string) + + if outGivingModel.Name == "" { + return fmt.Errorf("分发名称不能为空") + } + + if groupStr, ok := body["group"]; ok { + if groupStr != nil { + s := groupStr.(string) + outGivingModel.Group = &s + } + } + + outGivingModels := out_giving.ListOutGivingModel() + + paramMap := make(map[string]string) + for k, v := range body { + if strings.HasPrefix(k, "node_") { + paramMap[k] = v.(string) + } + } + + outGivingNodeProjects := make([]out_giving.OutGivingNodeProject, 0) + for key, projectId := range paramMap { + // "node_5722cd7a4e7a475cac61da2507088a9d_1": "T88633" + if strings.HasPrefix(key, "node_") { + nodeId := strings.TrimPrefix(key, "node_") + nodeId = strings.Split(nodeId, "_")[0] + + nodeModel := node.GetNodeById(nodeId) + if nodeModel.Id == "" { + return fmt.Errorf("不存在对应的节点: %s", nodeId) + } + + exists, _ := project_info.Exists(nodeModel.WorkspaceId, nodeModel.Id, projectId) + if !exists { + return fmt.Errorf("没有找到对应的项目id: %s", projectId) + } + + outGivingNodeProjectList := outGivingModel.GetOutGivingNodeProjectList() + outGivingNodeProject := outGivingModel.GetNodeProject(outGivingNodeProjectList, nodeModel.Id, projectId) + if outGivingNodeProject == nil { + outGivingNodeProject = &out_giving.OutGivingNodeProject{} + } + outGivingNodeProject.NodeId = nodeModel.Id + outGivingNodeProject.ProjectId = projectId + + // 检查项目是否已被使用 + for _, model := range outGivingModels { + if strings.EqualFold(model.Id, outGivingModel.Id) { + continue + } + contains := model.CheckContains(outGivingNodeProject.NodeId, outGivingNodeProject.ProjectId) + if contains { + return fmt.Errorf("已经存在相同的分发项目: %s", outGivingNodeProject.ProjectId) + } + } + + outGivingNodeProjects = append(outGivingNodeProjects, *outGivingNodeProject) + } + } + + if len(outGivingNodeProjects) == 0 { + return fmt.Errorf("至少选择1个节点项目") + } + + outGivingModel.SetOutGivingNodeProjectList(outGivingNodeProjects) + + if afterOpt, ok := body["afterOpt"]; ok { + afterOptInt := int(afterOpt.(float64)) + outGivingModel.AfterOpt = afterOptInt + } else { + return fmt.Errorf("请选择分发后的操作") + } + + outGivingModel.IntervalTime = 10 + + if clearOld, ok := body["clearOld"]; ok { + outGivingModel.ClearOld = clearOld.(bool) + } + + if secondaryDirectory, ok := body["secondaryDirectory"]; ok { + if secondaryDirectory != nil { + s := secondaryDirectory.(string) + outGivingModel.SecondaryDirectory = &s + } + } + + if uploadCloseFirst, ok := body["uploadCloseFirst"]; ok { + outGivingModel.UploadCloseFirst = uploadCloseFirst.(bool) + } + + return nil +} + +// 释放关联分发项目 +func ReleaseDel(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + id, ok := bodyToMap["id"] + if !ok { + controller.Fail(c, errors.ServerError, "id不能为空") + return + } + + // todo 验证是否需要workspaceId + outGivingModel := out_giving.GetOutGivingModelById(id.(string)) + if outGivingModel == nil { + controller.Fail(c, errors.ServerError, "没有找到对应的分发id") + return + } + + outGivingNodeProjectList := outGivingModel.GetOutGivingNodeProjectList() + + for _, outGivingNodeProject := range outGivingNodeProjectList { + nodeModel := node.GetNodeById(outGivingNodeProject.NodeId) + if nodeModel.Id == "" { + controller.Fail(c, errors.ServerError, "没有找到对应的节点") + return + } + + body := map[string]string{ + "id": outGivingNodeProject.ProjectId, + } + body1, _ := json.Marshal(body) + resp, err := common.Request5(nodeModel, common.Manage_ReleaseOutGiving, bytes.NewReader(body1)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "释放节点项目失败") + return + } + if resp.Result.Code != errors.SUCCESS { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), "释放节点项目失败: "+resp.Result.Msg) + return + } + } + + rows, err := out_giving.DeleteOutGivingModelById(id.(string)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除分发失败") + return + } + if rows >= 0 { + out_giving.DeleteOutGivingLogByOutGivingId(id.(string)) + } + + controller.Success(c, "释放成功") +} + +// 解绑关联分发项目 +func Unbind(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + id, ok := bodyToMap["id"] + if !ok { + controller.Fail(c, errors.ServerError, "id不能为空") + return + } + + outGivingModel := out_giving.GetOutGivingModelById(id.(string)) + if outGivingModel == nil { + controller.Fail(c, errors.ServerError, "没有找到对应的分发id") + return + } + + rows, err := out_giving.DeleteOutGivingModelById(id.(string)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除分发失败") + return + } + if rows >= 0 { + out_giving.DeleteOutGivingLogByOutGivingId(id.(string)) + } + + // todo 删除日志 + controller.Success(c, "解绑成功") +} diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingLogController.go b/server/internal/controller/v1/app_manage/outgiving/outGivingLogController.go new file mode 100644 index 0000000..c5953dc --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingLogController.go @@ -0,0 +1,75 @@ +package outgiving + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/gin-gonic/gin" +) + +type OutGivingLogPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + NodeId string `json:"nodeId"` + OutGivingId string `json:"outGivingId"` + Status string `json:"status"` + CreateTimeMillis string `json:"createTimeMillis"` +} + +// { +// "page": "1", +// "limit": "10", +// "total": "0", +// "nodeId": "56e192c8e76742fa85c72342212ef466", +// "outGivingId": "8KY1Y1", +// "status": "0", +// } +func ListData(c *gin.Context) { + var pageBody OutGivingLogPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + fields := map[string]interface{}{} + if pageBody.NodeId != "" { + fields["node_id"] = pageBody.NodeId + } + if pageBody.OutGivingId != "" { + fields["out_giving_id"] = pageBody.OutGivingId + } + if pageBody.Status != "" { + fields["status"] = pageBody.Status + } + + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = workspaceId + + page := &model.Page[out_giving.OutGivingLog]{ + CurrentPage: pageBody.PageInfo.CurrentPage, + PageSize: pageBody.PageInfo.PageSize, + Order: pageBody.PageInfo.Order, + } + + log := out_giving.NewOutGivingLog() + err = log.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询分发日志失败!") + return + } + + controller.Success(c, page) +} + +func GetLogsIdByExecId(c *gin.Context) { + value := c.Query("execId") + id, err := out_giving.GetOutGivingExecLogById(value) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询分发日志失败!") + return + } + controller.Success(c, id) +} diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.example.json b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.example.json new file mode 100644 index 0000000..1b27d31 --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.example.json @@ -0,0 +1,44 @@ +{ + "id": "6MH5DC", + "name": "asdf", + "type": "edit", + "afterOpt": "0", + "runMode": "Jar", + "whitelistDirectory": "/home/tmn/jpom/project/ds/", + "lib": "aaaaa", + "logPath": "", + "intervalTime": "10", + "clearOld": "false", + "secondaryDirectory": "", + "uploadCloseFirst": "false", + "56e192c8e76742fa85c72342212ef466_jvm": "-Xms=512m", + "56e192c8e76742fa85c72342212ef466_token": "", + "56e192c8e76742fa85c72342212ef466_args": "--server.port=8080", + "56e192c8e76742fa85c72342212ef466_autoStart": "true", + "56e192c8e76742fa85c72342212ef466_dslEnv": "key1=v1", + "5722cd7a4e7a475cac61da2507088a9d_jvm": "-Xms=512m", + "5722cd7a4e7a475cac61da2507088a9d_token": "", + "5722cd7a4e7a475cac61da2507088a9d_args": "--server.port=8080", + "5722cd7a4e7a475cac61da2507088a9d_autoStart": "true", + "5722cd7a4e7a475cac61da2507088a9d_dslEnv": "", + "nodeIds": "56e192c8e76742fa85c72342212ef466,5722cd7a4e7a475cac61da2507088a9d" +}, +{ + "type": "add", + "id": "D5ZQF4", + "name": "dsldsl", + "afterOpt": "0", + "runMode": "Dsl", + "whitelistDirectory": "/home/tmn/jpom/project/ds/", + "lib": "dsfsadd", + "clearOld": "true", + "dslContent": "# scriptId 可以是项目路径下脚本文件名或者系统中的脚本模版ID\ndescription: 测试\nrun:\n start:\n# scriptId: project.sh\n scriptId: \n scriptArgs: start\n scriptEnv:\n \"boot_active\": test\n status:\n# scriptId: project.sh\n scriptId: \n scriptArgs: status\n stop:\n# scriptId: project.sh\n scriptId: \n scriptArgs: stop\n# restart:\n## scriptId: project.sh\n# scriptId: \n# scriptArgs: restart\n# scriptEnv:\n# \"boot_active\": test\nfile:\n# 备份文件保留个数\n# backupCount: 5\n# 限制备份指定文件后缀(支持正则)\n# backupSuffix: [ '.jar','.html','^.+\\.(?i)(txt)$' ]\n# 项目文件备份路径\n# backupPath: /data/jpom_backup\nconfig:\n# 是否开启日志备份功能\n# autoBackToFile: true\n\n", + "secondaryDirectory": "/second", + "group": "gg", + "logPath": "", + "uploadCloseFirst": "true", + "56e192c8e76742fa85c72342212ef466_dslEnv": "k1=v1", + "5722cd7a4e7a475cac61da2507088a9d_dslEnv": "k1=v2", + "nodeIds": "56e192c8e76742fa85c72342212ef466,5722cd7a4e7a475cac61da2507088a9d" +} + diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.go b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.go new file mode 100644 index 0000000..5b9c217 --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectEditController.go @@ -0,0 +1,458 @@ +package outgiving + +import ( + "encoding/json" + err1 "errors" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/server_white_list" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/system_parameters" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "strings" + "time" +) + +// 创建分发项目 +func SavePorject(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + typeStr, _ := bodyToMap["type"].(string) + id, _ := bodyToMap["id"].(string) + + workspaceId := app_manage.GetWorkspaceId(c) + bodyToMap["workspace_id"] = workspaceId + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + if "add" == typeStr { + checkId := strings.ReplaceAll(id, "-", "") + checkId = strings.ReplaceAll(checkId, "_", "") + err := validateID(checkId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + addOutGiving(c, id, bodyToMap, userModel) + } else { + updateGiving(c, id, bodyToMap, userModel) + } + +} +func DeletePorject(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + id, ok := bodyToMap["id"] + if !ok { + controller.Fail(c, errors.ServerError, "id不能为空") + return + } + + thorough, ok := bodyToMap["thorough"] + if !ok { + controller.Fail(c, errors.ServerError, "id不能为空") + return + } + + outGivingModel := out_giving.GetOutGivingModelById(id.(string)) + if outGivingModel == nil { + controller.Fail(c, errors.ServerError, "没有找到对应的分发项目") + return + } + + // 该项目不是节点分发项目,不能在此次删除 + if !outGivingModel.OutGivingProject { + controller.Fail(c, errors.ServerError, "该项目不是节点分发项目,不能在此处删除") + return + } + + outGivingNodeProjectList := outGivingModel.GetOutGivingNodeProjectList() + + for _, outGivingNodeProject := range outGivingNodeProjectList { + nodeModel := node.GetNodeById(outGivingNodeProject.NodeId) + if nodeModel.Id == "" { + controller.Fail(c, errors.ServerError, "没有找到对应的节点") + return + } + + resp := deleteNodeProject(nodeModel, outGivingModel.Id, thorough.(string)) + + if resp.Result.Code != errors.SUCCESS { + controller.FailCode(c, errors.ServerError, err1.New(resp.Result.Msg), nodeModel.Name+"节点失败: "+resp.Result.Msg) + return + } + } + + rows, err := out_giving.DeleteOutGivingModelById(id.(string)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除分发失败") + return + } + if rows >= 0 { + out_giving.DeleteOutGivingLogByOutGivingId(id.(string)) + } + + controller.Success(c, "删除成功") +} + +func addOutGiving(c *gin.Context, id string, body map[string]interface{}, userObj *user.UserObj) { + byId := out_giving.GetOutGivingModelById(id) + if byId.Id != "" { + controller.FailCode(c, errors.ServerError, nil, "项目id已存在") + return + } + outGivingModel := out_giving.NewOutGivingModel() + outGivingModel.Id = id + outGivingModel.OutGivingProject = true + outGivingModel.CreateUser = userObj.UserID + outGivingModel.ModifyUser = userObj.UserID + + tuples, err := doData(outGivingModel, body, false) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + _, err = outGivingModel.Create(outGivingModel) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "项目id已存在") + return + } + + // saveNodeData + res := saveNodeData(outGivingModel, tuples, false) + if res != nil { + controller.Fail(c, errors.ServerError, res.Result.Msg) + return + } + + controller.Success(c, "添加成功") +} + +func updateGiving(c *gin.Context, id string, body map[string]interface{}, userObj *user.UserObj) { + outGivingModel := out_giving.GetOutGivingModelById(id) + if outGivingModel == nil { + controller.Fail(c, errors.ServerError, "没有找到对应的分发id") + return + } + + tuples, err := doData(outGivingModel, body, true) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + outGivingModel.ModifyUser = userObj.UserID + outGivingModel.ModifyTimeMillis = time.Now().UnixMilli() + err = out_giving.UpdateOutGivingModel(outGivingModel, []string{"name", "group", "workspace_id", "after_opt", "secondary_directory", + "out_giving_node_project_list", "clear_old", "upload_close_first", "secondary_directory", "modify_user", "modify_time_millis"}) + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "修改失败") + return + } + // saveNodeData 保存节点项目数据 + res := saveNodeData(outGivingModel, tuples, true) + if res != nil { + controller.Fail(c, errors.ServerError, res.Result.Msg) + return + } + + controller.Success(c, "修改成功") +} + +// 保存节点项目数据 +func saveNodeData(outGivingModel *out_giving.OutGivingModel, tuples map[string]map[string]interface{}, edit bool) *response.Response { + successTuples := map[string]interface{}{} + fail := false + + for key, value := range tuples { + nodeModelId := key + n, _ := app_manage.TryGetNode(map[string]interface{}{"nodeId": nodeModelId}) + + dataJSON := value + jsonMessage := sendData(n, dataJSON, true) + if jsonMessage.Result.Code != errors.SUCCESS { + if !edit { + out_giving.DeleteOutGivingModelById(outGivingModel.Id) + fail = true + } + + if fail { + for nodeModelId, _ = range successTuples { + resp := deleteNodeProject(n, outGivingModel.Id, "") + if resp.Result.Code != errors.SUCCESS { + log.Errorf("还原项目失败:" + resp.Result.Msg) + } + } + } + + jsonMessage.Result.Msg = n.Name + "节点失败:" + jsonMessage.Result.Msg + return jsonMessage + } + + successTuples[key] = value + // 同步项目信息 + node2.SyncNodeProjectInfo(n, outGivingModel.Id) + } + + return nil +} + +// 创建项目管理的默认数据 +func getDefData(outGivingModel *out_giving.OutGivingModel, body map[string]interface{}, edit bool) (map[string]interface{}, error) { + defData := make(map[string]interface{}) + defData["id"] = outGivingModel.Id + defData["name"] = outGivingModel.Name + defData["group"] = outGivingModel.Group + + runMode := body["runMode"] + defData["runMode"] = runMode + + if runMode == "Dsl" { + dslContent := body["dslContent"] + defData["dslContent"] = dslContent + } + + whitelistDirectory := body["whitelistDirectory"] + // 获取白名单 + s := &system_parameters.SystemParameters{} + s.Id = server_white_list.GetId(outGivingModel.WorkspaceId) + _ = s.GetById(s) + serverWhitelist := &server_white_list.ServerWhitelist{} + if s.Value != "" { + err := json.Unmarshal([]byte(s.Value), serverWhitelist) + if err != nil { + return nil, err + } + } + + var outGivingArray []string + if strings.Contains(serverWhitelist.OutGiving, "\r\n") == true { + outGivingArray = strings.Split(serverWhitelist.OutGiving, "\r\n") + } else { + outGivingArray = strings.Split(serverWhitelist.OutGiving, "\n") + } + + checkPath := server_white_list.CheckPath(outGivingArray, whitelistDirectory.(string)) + if !checkPath { + return nil, fmt.Errorf("请选择正确的项目路径,或者还没有配置白名单") + } + defData["whitelistDirectory"] = whitelistDirectory + + logPath := body["logPath"] + if logPath != nil && strings.TrimSpace(logPath.(string)) != "" { + checkPath = server_white_list.CheckPath(outGivingArray, whitelistDirectory.(string)) + if !checkPath { + return nil, fmt.Errorf("请选择正确的日志路径,或者还没有配置白名单") + } + defData["logPath"] = logPath + } + lib := body["lib"] + defData["lib"] = lib + + if edit { + defData["edit"] = "on" + } + defData["previewData"] = true + + return defData, nil +} + +// 参考outGivingProjectEditController.example.json +func doData(outGivingModel *out_giving.OutGivingModel, body map[string]interface{}, edit bool) (map[string]map[string]interface{}, error) { + tuples := make(map[string]map[string]interface{}) + + outGivingModel.Name = body["name"].(string) + if outGivingModel.Name == "" { + return tuples, fmt.Errorf("分发名称不能为空") + } + outGivingModel.WorkspaceId = body["workspace_id"].(string) + + if groupStr, ok := body["group"]; ok { + if groupStr != nil { + s := groupStr.(string) + outGivingModel.Group = &s + } + + } + + if afterOpt, ok := body["afterOpt"]; ok { + afterOptInt, err := afterOpt.(float64) + if err != true { + return tuples, fmt.Errorf("参数有误:afterOpt") + } + outGivingModel.AfterOpt = int(afterOptInt) + } else { + return tuples, fmt.Errorf("请选择分发后的操作") + } + + outGivingModel.IntervalTime = 10 + + if clearOld, ok := body["clearOld"]; ok { + //toBool := utils.StringToBool(clearOld.(string)) + outGivingModel.ClearOld = clearOld.(bool) + } + + if secondaryDirectory, ok := body["secondaryDirectory"]; ok { + if secondaryDirectory != nil { + s := secondaryDirectory.(string) + outGivingModel.SecondaryDirectory = &s + } + } + + if uploadCloseFirst, ok := body["uploadCloseFirst"]; ok { + //toBool := utils.StringToBool(uploadCloseFirst.(string)) + outGivingModel.UploadCloseFirst = uploadCloseFirst.(bool) + } + + // 填充其他数据 + defData, err := getDefData(outGivingModel, body, edit) + if err != nil { + return tuples, err + } + + // + nodeIdsStr := body["nodeIds"] + nodeIds := strings.Split(nodeIdsStr.(string), ",") + if len(nodeIds) == 0 { + return tuples, fmt.Errorf("没有任何节点信息") + } + + outGivingModels := out_giving.ListOutGivingModel() + outGivingNodeProjects := make([]out_giving.OutGivingNodeProject, 0) + var outGivingNodeProject *out_giving.OutGivingNodeProject + + for _, nodeId := range nodeIds { + nodeModel, err := app_manage.TryGetNode(map[string]interface{}{"nodeId": nodeId}) + if err != nil { + return tuples, fmt.Errorf("对应的节点不存在") + } + + // 判断项目是否已被使用,还要兼容新增和编辑两种场景! + if outGivingModels != nil { + for _, model := range outGivingModels { + if strings.EqualFold(model.Id, outGivingModel.Id) { + continue + } + contains := model.CheckContains(nodeId, outGivingModel.Id) + if contains { + return tuples, fmt.Errorf("已经存在相同的分发项目: %s", outGivingModel.Id) + } + } + } + + nodeProjectList := outGivingModel.GetOutGivingNodeProjectList() + // 分发 ID 等同于项目 ID + outGivingNodeProject = outGivingModel.GetNodeProject(nodeProjectList, nodeModel.Id, outGivingModel.Id) + if outGivingNodeProject == nil { + outGivingNodeProject = &out_giving.OutGivingNodeProject{} + } + outGivingNodeProject.NodeId = nodeModel.Id + // 分发id为项目id + outGivingNodeProject.ProjectId = outGivingModel.Id + outGivingNodeProjects = append(outGivingNodeProjects, *outGivingNodeProject) + + // 准备并检查数据 + allData := cloneMap(defData) + token := body[(fmt.Sprintf("%s_token", nodeModel.Id))] + allData["token"] = token + jvm := body[fmt.Sprintf("%s_jvm", nodeModel.Id)] + allData["jvm"] = jvm + args := body[fmt.Sprintf("%s_args", nodeModel.Id)] + allData["args"] = args + autoStart := body[fmt.Sprintf("%s_autoStart", nodeModel.Id)] + //allData["autoStart"] = autoStart.(bool) + if _, ok := autoStart.(bool); ok { + allData["autoStart"] = autoStart.(bool) + } + dslEnv := body[fmt.Sprintf("%s_dslEnv", nodeModel.Id)] + allData["dslEnv"] = dslEnv + + jsonMessage := sendData(nodeModel, allData, false) + if jsonMessage.Result.Code != errors.SUCCESS { + return tuples, fmt.Errorf("%s节点失败:%s", nodeModel.Name, jsonMessage.Result.Msg) + } + + tuples[nodeModel.Id] = allData + } + + if len(outGivingNodeProjects) == 0 { + return tuples, fmt.Errorf("至少选择1个节点项目") + } + // 删除已经删除的项目 + err = deleteProject(outGivingModel, outGivingNodeProjects) + if err != nil { + return nil, fmt.Errorf("删除项目失败: %s", err.Error()) + } + + outGivingModel.SetOutGivingNodeProjectList(outGivingNodeProjects) + + return tuples, nil +} + +// 删除已经删除过的项目 +func deleteProject(outGivingModel *out_giving.OutGivingModel, outGivingNodeProjects []out_giving.OutGivingNodeProject) error { + // 获取需要删除的节点项目 + deleteNodeProjects := outGivingModel.GetDelete(outGivingNodeProjects) + if deleteNodeProjects != nil { + for _, outGivingNodeProject := range deleteNodeProjects { + nodeModel, err := app_manage.TryGetNode(map[string]interface{}{"nodeId": outGivingNodeProject.NodeId}) + if err != nil { + return fmt.Errorf("节点不存在") + } + //outGivingNodeProject.GetNodeData(true) // 假设这是获取某些数据的操作,需根据实际情况实现或忽略 + + // 彻底删除节点项目 + jsonMessage := deleteNodeProject(nodeModel, outGivingNodeProject.ProjectId, "thorough") + if jsonMessage.Result.Code != errors.SUCCESS { + return fmt.Errorf("%s节点失败:%s", nodeModel.Name, jsonMessage.Result.Msg) + } + } + } + + return nil +} + +// 删除项目 +func deleteNodeProject(nodeModel *node.Node, projectId, thorough string) *response.Response { + data := make(map[string]interface{}) + data["id"] = projectId + data["thorough"] = thorough + data["nodeId"] = nodeModel.Id + + resp := app_manage.TryRequestNode("", data, common.Manage_DeleteProject) + if resp.Result.Code == errors.SUCCESS { + node2.SyncNodeProjectInfo(nodeModel, projectId) + } + + return resp +} + +func sendData(nodeModel *node.Node, data map[string]interface{}, save bool) *response.Response { + if save { + delete(data, "previewData") + } + data["outGivingProject"] = true + data["nodeId"] = nodeModel.Id + return app_manage.TryRequestNode("", data, common.Manage_SaveProject) +} + +func cloneMap(body map[string]interface{}) map[string]interface{} { + clone := make(map[string]interface{}) + for k, v := range body { + // 注意:这里仅实现了浅拷贝,如果value本身是复杂的数据结构(如嵌套的map或slice), + // 那么这个拷贝过程不会递归拷贝内部结构,它们仍然会被共享。 + clone[k] = v + } + return clone +} diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingProjectFileController.go b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectFileController.go new file mode 100644 index 0000000..1f721ca --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingProjectFileController.go @@ -0,0 +1,520 @@ +package outgiving + +import ( + "bytes" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving/status" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/file_download_client" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/secure" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/file_utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/outgiving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "github.com/google/uuid" + "io/ioutil" + "net/http" + "path/filepath" + "strings" + "time" +) + +// 分发文件管理 + +func GetItemData(c *gin.Context) { + workspaceId := app_manage.GetWorkspaceId(c) + + bodyToMap := request.GetBodyToMap(c) + id, ok := bodyToMap["id"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:id") + return + } + + outGivingModel := out_giving.GetOutGivingModelById(id) + if outGivingModel.Id == "" { + controller.Fail(c, http.StatusBadRequest, "没有数据") + return + } + + outGivingNodeProjectList := outGivingModel.GetOutGivingNodeProjectList() + nodeMap := mapNodeModels(outGivingNodeProjectList) + projectMap := mapProjectInfoCacheModels(outGivingNodeProjectList, workspaceId) + + collect := transformOutGivingNodeProjects(outGivingNodeProjectList, workspaceId, nodeMap, projectMap, id) + + data := map[string]interface{}{ + "data": outGivingModel, + "projectList": collect, + } + + controller.Success(c, data) +} + +func mapNodeModels(outGivingNodeProjectList []out_giving.OutGivingNodeProject) map[string]node.Node { + var nodeIds []string + for _, project := range outGivingNodeProjectList { + nodeIds = append(nodeIds, project.NodeId) + } + + nodeModels := node.GetNodeByIds(nodeIds) + nodeMap := make(map[string]node.Node) + for _, model := range nodeModels { + nodeMap[model.Id] = model + } + return nodeMap +} + +func mapProjectInfoCacheModels(outGivingNodeProjectList []out_giving.OutGivingNodeProject, workspaceId string) map[string]project_info.ProjectInfo { + var ids []string + for _, project := range outGivingNodeProjectList { + projectId := secure.Sha1Encrypt(workspaceId + project.NodeId + project.ProjectId) + // todo 检查projectId是否能对得上 + ids = append(ids, projectId) + } + + var projectInfoCacheModels = project_info.GetProjectByIds(ids) + projectMap := make(map[string]project_info.ProjectInfo) + for _, model := range projectInfoCacheModels { + projectMap[model.Id] = model + } + return projectMap +} + +func transformOutGivingNodeProjects(outGivingNodeProjectList []out_giving.OutGivingNodeProject, workspaceId string, nodeMap map[string]node.Node, projectMap map[string]project_info.ProjectInfo, id string) []map[string]interface{} { + var collect []map[string]interface{} + for _, outGivingNodeProject := range outGivingNodeProjectList { + nodeModel, exists := nodeMap[outGivingNodeProject.NodeId] + if !exists { + continue + } + + // 填充数据ID,项目数据是先保存至逻辑节点后又同步的思路,所以NodeScriptCacheModel在逻辑节点的Id就是ProjectId,在服务端保存时,将Id保存至ProjectId字段, + // 然后根据secure.Sha1Encrypt(item.WorkspaceId + item.NodeId + item.ProjectId)生成Id + fullId := secure.Sha1Encrypt(workspaceId + outGivingNodeProject.NodeId + outGivingNodeProject.ProjectId) + projectInfoCacheModel, exists := projectMap[fullId] + var cacheProjectName interface{} + if exists { + cacheProjectName = projectInfoCacheModel.Name + } + + outGivingLog, _ := outgiving.GetByProject(id, outGivingNodeProject) + var outGivingStatus, outGivingResult, lastTime, fileSize, progressSize interface{} + if outGivingLog != nil { + outGivingStatus = outGivingLog.Status + outGivingResult = outGivingLog.Result + lastTime = outGivingLog.CreateTimeMillis + fileSize = outGivingLog.FileSize + progressSize = outGivingLog.ProgressSize + } + + jsonObject := map[string]interface{}{ + "sortValue": outGivingNodeProject.SortValue, + "disabled": outGivingNodeProject.Disabled, + "nodeId": outGivingNodeProject.NodeId, + "projectId": outGivingNodeProject.ProjectId, + "nodeName": nodeModel.Name, + "id": fullId, + "cacheProjectName": cacheProjectName, + "outGivingStatus": outGivingStatus, + "outGivingResult": outGivingResult, + "lastTime": lastTime, + "fileSize": fileSize, + "progressSize": progressSize, + } + collect = append(collect, jsonObject) + } + return collect +} + +func UploadSharding(c *gin.Context) { + // 获取FormData + form, err := c.MultipartForm() + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "解析请求参数失败") + return + } + id := form.Value["id"][0] + + // 状态判断 + _, err = check(id, func(statusCode int, o *out_giving.OutGivingModel) error { + if statusCode == status.ING { + return fmt.Errorf("当前还在分发中,请等待分发结束") + } + return nil + }) + + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "当前还在分发中,请等待分发结束") + return + } + + // 提取表单字段 + nowSlice := form.Value["nowSlice"][0] + totalSlice := form.Value["totalSlice"][0] + sliceID := form.Value["sliceId"][0] + fileSumMD5 := form.Value["fileSumMd5"][0] + + // 获取上传的文件 + file, header, err := c.Request.FormFile("file") + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "Failed to get file") + return + } + defer file.Close() + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + tempPathName, err := utils.GetUserTempPath(userModel.UserID) + + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败") + return + } + + err = app_manage.UploadShardingImpl(file, header.Filename, tempPathName, sliceID, totalSlice, nowSlice, fileSumMD5, nil) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, err.Error()) + return + } + + controller.Success(c, "上传成功") +} + +func check(id string, consumer func(int, *out_giving.OutGivingModel) error) (*out_giving.OutGivingModel, error) { + outGivingModel := out_giving.GetOutGivingModelById(id) + if outGivingModel.Id == "" { + return nil, fmt.Errorf("上传失败,没有找到对应的分发项目: %s", id) + } + + // 检查状态 + statusCode := outGivingModel.Status + return outGivingModel, consumer(statusCode, outGivingModel) +} + +func ShardingMerge(c *gin.Context) { + var ( + autoUnzip bool + secondaryDirectory string + stripComponents float64 + sliceID string + totalSlice float64 + fileSumMD5 string + afterOpt float64 + clearOld bool + id string + selectProject string + ) + + bodyToMap := request.GetBodyToMap(c) + autoUnzip, ok := bodyToMap["autoUnzip"].(bool) // type + + secondaryDirectory, ok = bodyToMap["secondaryDirectory"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:levelName") + return + } + + stripComponents, ok = bodyToMap["stripComponents"].(float64) + + sliceID, ok = bodyToMap["sliceId"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:sliceID") + return + } + + totalSlice, ok = bodyToMap["totalSlice"].(float64) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:totalSlice") + return + } + + fileSumMD5, ok = bodyToMap["fileSumMd5"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:fileSumMD5") + return + } + + afterOpt, ok = bodyToMap["afterOpt"].(float64) + + id, ok = bodyToMap["id"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:id") + return + } + + clearOld, ok = bodyToMap["clearOld"].(bool) + selectProject, ok = bodyToMap["selectProject"].(string) + + // 状态判断 + _, err := check(id, func(statusCode int, o *out_giving.OutGivingModel) error { + if statusCode == status.ING { + return fmt.Errorf("当前还在分发中,请等待分发结束") + } + return nil + }) + + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "当前还在分发中,请等待分发结束") + return + } + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + tempPathName, err := utils.GetUserTempPath(userModel.UserID) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[tempPathName]") + return + } + + path, err := utils.GetDataPath() + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[data]") + return + } + destDir := filepath.Join(path, "outGiving", id) + err = file_utils.MkdirAll(destDir) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[outGiving Dir]") + return + } + + successFile, err := app_manage.ShardingTryMergeImpl(tempPathName, sliceID, int(totalSlice), fileSumMD5) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, err.Error()) + return + } + // 从绝对路径successFile.Name中获取文件名 + successFileName := filepath.Base(successFile.Name()) + destFile := filepath.Join(destDir, successFileName) + + destFile, err = checkZip(destFile, autoUnzip) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, err.Error()) + return + } + + err = file_utils.MoveFileOrDir(successFile.Name(), destDir, true) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[outGiving dest]") + return + } + + outGivingModel := out_giving.NewOutGivingModel() + outGivingModel.Id = id + outGivingModel.ClearOld = clearOld + after := int(afterOpt) + outGivingModel.AfterOpt = after + outGivingModel.SecondaryDirectory = &secondaryDirectory + outGivingModel.ModifyUser = userModel.UserID + outGivingModel.ModifyTimeMillis = time.Now().UnixMilli() + out_giving.UpdateOutGivingModel(outGivingModel, []string{"after_opt", "secondary_directory", "clear_old", "secondary_directory", "modify_user", "modify_time_millis"}) + + stripComponentsInt := int(stripComponents) + + outGivingExecId := uuid.New().String() + + outGivingRun := outgiving.NewOutGivingRun(id, destFile, userModel, autoUnzip, stripComponentsInt, true) + go outGivingRun.StartRun(selectProject, outGivingExecId) + //outGivingRun.StartRun(selectProject) + + dataResp := response.Resp() + dataResp.SetCode(http.StatusOK) + dataResp.Result.Data = map[string]string{ + "result": "上传成功,开始分发!", + "outGivingExecId": outGivingExecId, + } + dataResp.Success(c) + //controller.Success(c, "上传成功,开始分发!") +} + +func RemoteDownload(c *gin.Context) { + var ( + id string + afterOpt float64 + clearOld bool + url string + autoUnzip bool + secondaryDirectory string + stripComponents float64 + selectProject string + filename string + ) + + bodyToMap := request.GetBodyToMap(c) + + id, ok := bodyToMap["id"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:id") + return + } + afterOpt, ok = bodyToMap["afterOpt"].(float64) + clearOld, ok = bodyToMap["clearOld"].(bool) + url, ok = bodyToMap["url"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:url") + return + } + autoUnzip, ok = bodyToMap["autoUnzip"].(bool) // type + secondaryDirectory, ok = bodyToMap["secondaryDirectory"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:secondaryDirectory") + return + } + + stripComponents, ok = bodyToMap["stripComponents"].(float64) + selectProject, ok = bodyToMap["selectProject"].(string) + filename, ok = bodyToMap["filename"].(string) + + // 状态判断 + outGivingModel, err := check(id, func(statusCode int, o *out_giving.OutGivingModel) error { + if statusCode == status.ING { + return fmt.Errorf("当前还在分发中,请等待分发结束") + } + return nil + }) + + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "当前还在分发中,请等待分发结束") + return + } + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + outGivingModel.ClearOld = clearOld + after := afterOpt + outGivingModel.AfterOpt = int(after) + outGivingModel.SecondaryDirectory = &secondaryDirectory + outGivingModel.ModifyUser = userModel.UserID + outGivingModel.ModifyTimeMillis = time.Now().UnixMilli() + out_giving.UpdateOutGivingModel(outGivingModel, []string{"after_opt", "secondary_directory", "clear_old", "secondary_directory", "modify_user", "modify_time_millis"}) + + // 下载 + path, err := utils.GetDataPath() + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[data]") + return + } + destDir := filepath.Join(path, "outGiving", id) + err = file_utils.MkdirAll(destDir) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "上传失败:创建临时目录失败[outGiving Dir]") + return + } + + var destFile string + if len(filename) == 0 { + destFile = filepath.Join(destDir, uuid.New().String()) + } else { + destFile = filepath.Join(destDir, filename) + } + + err = file_download_client.DownloadFileToLocal(url, destFile, 2) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "下载文件失败") + return + } + + destFile, err = CheckType(destFile, autoUnzip) + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, err.Error()) + return + } + // 开启 + stripComponentsInt := int(stripComponents) + + outGivingExecId := uuid.New().String() + outGivingRun := outgiving.NewOutGivingRun(id, destFile, userModel, autoUnzip, stripComponentsInt, true) + go outGivingRun.StartRun(selectProject, outGivingExecId) + + dataResp := response.Resp() + dataResp.SetCode(http.StatusOK) + dataResp.Result.Data = map[string]string{ + "result": "上传成功,开始分发!", + "outGivingExecId": outGivingExecId, + } + dataResp.Success(c) + //controller.Success(c, "上传成功,开始分发!") +} + +func CheckType(filePath string, unzip bool) (string, error) { + if !unzip { + return filePath, nil + } + + data, err := ioutil.ReadFile(filePath) + if err != nil { + log.Errorf("Error reading file: %v", err) + return "", fmt.Errorf("读取文件失败: %s", filePath) + } + + switch { + case bytes.HasPrefix(data, []byte{0x50, 0x4b, 0x03, 0x04}): // ZIP format + return filePath, nil + case bytes.HasPrefix(data, []byte{0x1f, 0x8b}): + return filePath, nil + default: + log.Errorf("UnSupported file type.") + return "", fmt.Errorf("不支持的文件类型: %s", filePath) + } +} + +var PACKAGE_EXT = []string{"tar.gz", "zip"} + +// 检查并处理ZIP文件 +func checkZip(path string, unzip bool) (string, error) { + if unzip { + zip := false + for _, ext := range PACKAGE_EXT { + if strings.HasSuffix(strings.ToLower(path), strings.ToLower(ext)) { + zip = true + break + } + } + if !zip { + return "", fmt.Errorf("不支持的文件类型: %s", filepath.Base(path)) + } + } + + // 这里仅返回文件对象,未执行解压逻辑,如需解压还需额外实现 + return path, nil +} + +func Cancel(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + + id, ok := bodyToMap["id"].(string) + if !ok { + controller.Fail(c, http.StatusBadRequest, "参数错误:id") + return + } + + // 状态判断 + outGigving, err := check(id, func(statusCode int, o *out_giving.OutGivingModel) error { + if statusCode != status.ING { + return fmt.Errorf("当前状态不是分发中") + } + return nil + }) + + if err != nil { + controller.FailCode(c, http.StatusInternalServerError, err, "当前状态不是分发中") + return + } + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + outgiving.Cancel(outGigving.Id, userModel) + + controller.Success(c, "取消成功") +} diff --git a/server/internal/controller/v1/app_manage/outgiving/outGivingWhitelistController.go b/server/internal/controller/v1/app_manage/outgiving/outGivingWhitelistController.go new file mode 100644 index 0000000..5707b18 --- /dev/null +++ b/server/internal/controller/v1/app_manage/outgiving/outGivingWhitelistController.go @@ -0,0 +1,65 @@ +package outgiving + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/server_white_list" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/system_parameters" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +func GetWhiteList(c *gin.Context) { + workspaceId := c.Query("workspaceId") + if workspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + s := &system_parameters.SystemParameters{} + s.Id = server_white_list.GetId(workspaceId) + _ = s.GetById(s) + + controller.Success(c, s.Value) +} + +func SaveWhiteList(c *gin.Context) { + workspaceId := c.PostForm("workspaceId") + if workspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + w := &workspace.Workspace{} + w.Id = workspaceId + err := w.GetById(w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + value := c.PostForm("value") + s := &system_parameters.SystemParameters{} + s.Id = server_white_list.GetId(workspaceId) + err = s.GetById(s) + if err == nil { + s.Value = value + s.SetModifyUserName(service.GetUserName(c)) + _, err = s.Update(s, []string{"value"}) + } else if err == gorm.ErrRecordNotFound { + s.Value = value + s.SetUserName(service.GetUserName(c)) + _, err = s.Create(s) + } else { + controller.FailCode(c, errors.InvalidParameter, err, "服务异常!") + return + } + + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "服务异常!") + return + } + + controller.Success(c, "") +} diff --git a/server/internal/controller/v1/app_manage/server_script/script_controller.go b/server/internal/controller/v1/app_manage/server_script/script_controller.go new file mode 100644 index 0000000..61d1fbe --- /dev/null +++ b/server/internal/controller/v1/app_manage/server_script/script_controller.go @@ -0,0 +1,367 @@ +package server_script + +import ( + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + node2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/script_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/collect" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/string_utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/base_service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/node/script" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/server_script" + "github.com/gin-gonic/gin" + "os" + "strconv" + "strings" + "time" +) + +type ProjectPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` +} + +func ScriptList(c *gin.Context) { + var pageBody ProjectPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + fields := map[string]interface{}{} + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + + page := &model.Page[script_info.ScriptModel]{ + CurrentPage: pageBody.PageInfo.CurrentPage, + PageSize: pageBody.PageInfo.PageSize, + Order: pageBody.PageInfo.Order, + } + + model := script_info.NewScriptModel() + err = model.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询脚本失败!") + return + } + + controller.Success(c, page) +} + +func ScriptListAll(c *gin.Context) { + fields := map[string]interface{}{} + workspaceId := app_manage.GetWorkspaceId(c) + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + + model := script_info.NewScriptModel() + all, err := model.GetAll(model, fields, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "查询脚本失败!") + return + } + + controller.Success(c, all) +} + +// Save 保存脚本 +// 1.服务端保存脚本 2.分发脚本 +func Save(c *gin.Context) { + body := request.GetBody(c) + model := script_info.NewScriptModel() + err := json.Unmarshal(body, model) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "请检查参数!") + return + } + + if len(model.Context) == 0 { + controller.FailCode(c, errors.ServerError, err, "内容为空!") + } + + err = string_utils.CheckCron(model.AutoExecCron) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "cron表达式错误!") + return + } + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + var oldNodeIds string + workspaceId := app_manage.GetWorkspaceId(c) + + // 检查用户工作空间权限? 好像没用 + checkUserWorkspace := base_service.CheckUserWorkspace(workspaceId, userModel) + if !checkUserWorkspace { + controller.Fail(c, errors.ServerError, "没有对应的工作空间权限") + } + + toMap := request.GetBodyToMap(c) + global := toMap["global"].(bool) + if !global { + model.WorkspaceId = workspaceId + } else { + model.WorkspaceId = "GLOBAL" + } + + if len(model.Id) == 0 { + model.ModifyUser = userModel.UserID + model.CreateUser = userModel.UserID + model.CreateTimeMillis = time.Now().UnixNano() / 1e6 + model.ModifyTimeMillis = time.Now().UnixNano() / 1e6 + + _, err = model.Create(model) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "保存失败") + return + } + } else { + scriptModel, err := script_info.GetServerScriptModelByIdAndWorkspaceIds(model.Id, []string{workspaceId, "GLOBAL"}) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "没有对应的数据") + return + } + + if scriptModel.Id == "" { + controller.FailCode(c, errors.ServerError, err, "没有对应的数据") + return + } + oldNodeIds = scriptModel.NodeIds + + model.ModifyUser = userModel.UserID + model.ModifyTimeMillis = time.Now().UnixNano() / 1e6 + _, err = model.Update(model, []string{"name", "context", "auto_exec_cron", "def_args", "description", "node_ids", "workspace_id", "modify_user", "modify_time_millis"}) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "更新失败") + return + } + } + + err = syncNodeScript(model, oldNodeIds) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "同步脚本失败") + return + } + + controller.Success(c, "修改成功") +} + +func syncDelNodeScript(scriptModel *script_info.ScriptModel, delNode []string) { + for _, nodeId := range delNode { + bodyToMap := map[string]interface{}{ + "id": scriptModel.Id, + "nodeId": nodeId, + } + + node, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + continue + } + + response := app_manage.TryRequestNode(node.MachineId, bodyToMap, common.Script_Del) + if response.Result.Code == errors.SUCCESS { + // 每个涉及到的节点均需要刷新 + go script.SyncExecuteNode(node) + } + } +} + +func syncNodeScript(scriptModel *script_info.ScriptModel, oldNode string) error { + oldNodeIds := strings.Split(strings.TrimSpace(oldNode), ",") // [1,2,3] + newNodeIds := strings.Split(strings.TrimSpace(scriptModel.NodeIds), ",") // [2,3,4] + + // 删除oldNodeIds中的空字符串 + oldNodeIds = collect.SubtractCollections(oldNodeIds, []string{"", " "}) + newNodeIds = collect.SubtractCollections(newNodeIds, []string{"", " "}) + + delNode := collect.SubtractCollections(oldNodeIds, newNodeIds) // [1] + + // 同步删除了次脚本的节点 // [1] + syncDelNodeScript(scriptModel, delNode) + + // 更新 // [2,3,4] + for _, newNodeId := range newNodeIds { + bodyToMap := map[string]interface{}{ + "nodeId": newNodeId, + } + + node, err := app_manage.TryGetNode(bodyToMap) + if err != nil { + return err + } + + bodyToMap = map[string]interface{}{ + "id": scriptModel.Id, + "type": "sync", + "context": scriptModel.Context, + "autoExecCron": scriptModel.AutoExecCron, + "defArgs": scriptModel.DefArgs, + "description": scriptModel.Description, + "name": scriptModel.Name, + "workspaceId": node.WorkspaceId, + "global": strconv.FormatBool(scriptModel.Global()), + "nodeId": node.Id, + } + + response := app_manage.TryRequestNode(node.MachineId, bodyToMap, common.Script_Save) + if response.Result.Code == errors.SUCCESS { + go script.SyncExecuteNode(node) + } else { + return fmt.Errorf("处理 %s 节点同步脚本失败: %s", node.Name, response.Result.Msg) + } + } + + return nil +} + +func Del(c *gin.Context) { + bodyToMap := request.GetBodyToMap(c) + id, _ := bodyToMap["id"].(string) + + workspaceId := app_manage.GetWorkspaceId(c) + + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + scriptModel, err := server_script.GetByKeyAndGlobal(id, workspaceId, userModel) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + // server.scriptPath() 的逻辑需要根据实际情况实现 + file, _ := scriptModel.ScriptPath() + err = os.RemoveAll(file) + if err != nil { + controller.FailCode(c, errors.ServerError, err, fmt.Sprintf("清理脚本文件失败: %v", err)) + return + } + + // nodeIds 的分割逻辑 + nodeIds := scriptModel.NodeIds + delNode := strings.Split(strings.TrimSpace(nodeIds), ",") + + // syncDelNodeScript 和 scriptServer.delByKey 的逻辑需要根据实际情况实现 + syncDelNodeScript(scriptModel, delNode) + + _, err = script_info.DeleteServerScriptByIdAndWorkspaceIds(scriptModel.Id, []string{workspaceId, "GLOBAL"}) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除脚本失败:") + return + } + + //// scriptExecuteLogServer.delByWorkspace 的逻辑需要根据实际情况实现 + //entity := map[string]interface{}{"scriptId": id} + //err = scriptExecuteLogServer.delByWorkspace(request, entity) + //if err != nil { + // panic(err) + //} + + controller.Success(c, "删除成功") +} + +func Get(c *gin.Context) { + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + workspaceId := app_manage.GetWorkspaceId(c) + + checkUserWorkspace := base_service.CheckUserWorkspace(workspaceId, userModel) + if !checkUserWorkspace { + controller.Fail(c, errors.ServerError, "没有对应的工作空间权限") + } + + id := c.Query("id") + scriptModel, err := server_script.GetByKeyAndGlobal(id, workspaceId, userModel) + if err != nil { + controller.FailCode(c, errors.ServerError, err, err.Error()) + return + } + + nodeIds := scriptModel.NodeIds + newNodeIds := strings.Split(strings.TrimSpace(nodeIds), ",") + nodeList := make([]gin.H, 0, len(newNodeIds)) + for _, nodeId := range newNodeIds { + node := node2.GetNodeById(nodeId) + if node.Id == "" { + nodeList = append(nodeList, gin.H{"nodeName": "未知(数据丢失)", "nodeId": nodeId, "workspaceId": nodeId}) + } else { + jsonObj := gin.H{ + "nodeName": node.Name, + "nodeId": node.Id, + "workspaceId": node.WorkspaceId, + } + ws, err := workspace.GetWorkspaceById(node.WorkspaceId) + if err != nil || ws == nil { + jsonObj["workspaceName"] = "未知(数据丢失)" + } else { + jsonObj["workspaceName"] = ws.Name + } + nodeList = append(nodeList, jsonObj) + } + } + // 判断是否可以编辑节点,不属于自己管理的node,则不具备管理权权限 + var prohibitSync bool + for _, n := range nodeList { + if wsID, ok := n["workspaceId"].(string); ok && wsID != workspaceId { + prohibitSync = true + break + } + } + + jsonOut := gin.H{ + "data": scriptModel, + "nodeList": nodeList, + "prohibitSync": prohibitSync, + } + + controller.Success(c, jsonOut) +} + +func Unbind(c *gin.Context) { + id := c.Query("id") + fields := map[string]interface{}{} + fields["node_ids"] = "" + _, err := script_info.UpdateServerScriptById(id, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "解绑失败") + return + } + + controller.Success(c, "解绑成功") +} + +func SyncToWorkspace(c *gin.Context) { + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + + nowWorkspaceId := app_manage.GetWorkspaceId(c) + ids := c.Query("ids") + toWorkspaceId := c.Query("toWorkspaceId") + + checkUserWorkspace := base_service.CheckUserWorkspace(nowWorkspaceId, userModel) + if !checkUserWorkspace { + controller.Fail(c, errors.ServerError, "没有对应的工作空间权限") + } + + checkUserWorkspace = base_service.CheckUserWorkspace(toWorkspaceId, userModel) + if !checkUserWorkspace { + controller.Fail(c, errors.ServerError, "没有对应的工作空间权限") + } + + err := server_script.SyncToWorkspace(ids, nowWorkspaceId, toWorkspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "同步失败") + return + } + controller.Success(c, "同步成功") +} diff --git a/server/internal/controller/v1/app_manage/system/workspaceController.go b/server/internal/controller/v1/app_manage/system/workspaceController.go new file mode 100644 index 0000000..2f82ef7 --- /dev/null +++ b/server/internal/controller/v1/app_manage/system/workspaceController.go @@ -0,0 +1,355 @@ +package system + +import ( + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/out_giving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/project_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/script_info" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace_env" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/assets" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/base_service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strings" +) + +func EditWorkspace(c *gin.Context) { + w := &workspace.Workspace{} + err := validator.CheckPostParams(c, w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if w.Name == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "名称不能为空!") + return + } + err = checkWorkspaceInfo(w.Id, w.Name) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, err.Error()) + return + } + + if w.Id == "" { + w.SetUserName(service.GetUserName(c)) + _, err = w.Create(w) + } else { + w.SetModifyUserName(service.GetUserName(c)) + _, err = w.Update(w, nil) + } + + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +func checkWorkspaceInfo(id, name string) error { + w := workspace.New() + fields := make(map[string]interface{}, 1) + fields["name"] = name + var notFields map[string]interface{} + if id != "" { + notFields = make(map[string]interface{}, 1) + notFields["id"] = id + } + result, _ := w.GetAll(w, fields, notFields) + if len(result.([]workspace.Workspace)) > 0 { + return err1.New("工作空间名称已存在") + } + return nil +} + +func ListWorkSpaceGroup(c *gin.Context) { + w := &workspace.Workspace{} + result, _ := w.ListGroup() + controller.Success(c, result) +} + +type WorkspacePageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Id string `json:"id"` + Name string `json:"name"` + Group string `json:"group"` +} + +func PageWorkspaces(c *gin.Context) { + var pageBody WorkspacePageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + w := workspace.New() + fields := map[string]interface{}{} + if pageBody.Id != "" { + fields["id"] = pageBody.Id + } + if pageBody.Name != "" { + fields["name"] = pageBody.Name + } + if pageBody.Group != "" { + fields["\"group\""] = pageBody.Group + } + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + result, err := w.Page(w, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + page.Data = result + controller.Success(c, page) +} + +func ListAllWorkspaces(c *gin.Context) { + userObject, _ := c.Get(middleware.LoginUserKey) + userModel := userObject.(*user.UserObj) + list := base_service.GetUserWorkspaceList(userModel) + controller.Success(c, list) + + //w := workspace.New() + //result, err := w.GetAll(w, nil, nil) + //if err != nil { + // controller.FailCode(c, errors.ServerError, err, "内部错误!") + // return + //} + //controller.Success(c, result) +} + +// TreeNode represents a node in a tree structure. +type TreeNode struct { + Id string `json:"id"` + ParentId string `json:"parentId"` + Weight int `json:"weight"` + Name string `json:"name"` + WorkspaceBind int `json:"workspaceBind"` + Count int `json:"count"` + Children []*TreeNode `json:"children"` +} + +// NewTreeNode creates a new TreeNode with given parameters. +func NewTreeNode(id, parent, name string, weight, workspaceBind, count int) *TreeNode { + treeNode := &TreeNode{ + Id: id, + ParentId: parent, + Weight: weight, + Name: name, + WorkspaceBind: workspaceBind, + Count: count, + Children: nil, + } + + return treeNode +} + +// Tree is a placeholder for the Tree structure. +type Tree struct { + Name string `json:"name"` + Id string `json:"id"` + Children []*TreeNode `json:"children"` +} + +// BuildSingle builds a tree from a list of nodes. +func BuildSingle(nodes []*TreeNode) *Tree { + // Implementation goes here. + return &Tree{ + Name: "", + Id: "", + Children: nodes, + } +} + +// PreCheckDelete 删除工作空间前检查 +func PreCheckDelete(c *gin.Context) { + workspaceId := c.Query("id") + + var nodes []*TreeNode + + { + // 节点信息 + cnt, err := node.CountNodeByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "节点信息获取失败!") + return + } + treeNode := NewTreeNode("node", "", "节点信息", 0, 1, int(cnt)) + nodes = append(nodes, treeNode) + } + + { + // 工作空间环境变量 + cnt, err := workspace_env.CountWorkspaceEnvVarByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "工作空间环境变量获取失败!") + return + } + treeNode := NewTreeNode("workspace_env_var", "", "工作空间环境变量", 0, 2, int(cnt)) + nodes = append(nodes, treeNode) + } + + { + // 项目信息 + cnt, err := project_info.CountProjectByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "项目信息获取失败!") + return + } + treeNode := NewTreeNode("project_info", "", "项目信息", 0, 1, int(cnt)) + nodes = append(nodes, treeNode) + } + + { + // 节点脚本模版 + // 节点脚本模版执行记录 + cnt1, err := script_info.CountNodeScriptByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "节点脚本模版获取失败!") + return + } + + cnt2, err := script_info.CountNodeScriptExecuteLogByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "节点脚本模版执行记录获取失败!") + return + } + treeNode := NewTreeNode("node_script_execute_log", "node_script_cache", "节点脚本模版执行记录", 0, 1, int(cnt2)) + newTreeNode := NewTreeNode("node_script_cache", "", "节点脚本模版", 0, 1, int(cnt1)) + newTreeNode.Children = append(newTreeNode.Children, treeNode) + nodes = append(nodes, newTreeNode) + } + + { + // 节点分发 + // 分发日志 + cnt1, err := out_giving.CountOutGivingModelByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "节点分发获取失败") + return + } + + cnt2, err := out_giving.CountOutGivingLogByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "分发日志获取失败") + return + } + treeNode := NewTreeNode("out_giving_log", "", "分发日志", 0, 3, int(cnt2)) + newTreeNode := NewTreeNode("out_giving_model", "", "节点分发", 0, 1, int(cnt1)) + newTreeNode.Children = append(newTreeNode.Children, treeNode) + nodes = append(nodes, newTreeNode) + } + + { + // 脚本模版 + cnt, err := script_info.CountScriptByWorkspaceId(workspaceId) + if err != nil { + controller.FailCode(c, errors.ServerError, nil, "脚本模版获取失败") + return + } + treeNode := NewTreeNode("script", "", "脚本模版", 0, 1, int(cnt)) + nodes = append(nodes, treeNode) + } + + stringTree := BuildSingle(nodes) + controller.Success(c, stringTree) +} + +func DeleteWorkspace(c *gin.Context) { + workspaceId := c.Param("id") + if workspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数:workspaceId!") + return + } + + if workspaceId == assets.DefaultWorkspace { + controller.Fail(c, errors.InvalidParameter, "默认命名空间不允许删除!", "默认命名空间不允许删除!") + return + } + + { + // 节点信息 + cnt, _ := node.CountNodeByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:节点信息") + return + } + + // 项目信息 + cnt, _ = project_info.CountProjectByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:项目信息") + return + } + + // 节点脚本模版 + cnt, _ = script_info.CountNodeScriptByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:节点脚本模版") + return + } + + // 节点脚本模版执行记录 + cnt, _ = script_info.CountNodeScriptExecuteLogByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:节点脚本模版执行记录") + return + } + + // 节点分发 + cnt, _ = out_giving.CountOutGivingModelByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:节点分发") + return + } + + // 脚本模版 + cnt, _ = script_info.CountScriptByWorkspaceId(workspaceId) + if cnt != 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:脚本模版") + return + } + } + + // 判断用户绑定关系 + allUsers, _ := user.NewUserModel().GetAll(nil, nil) + var users []string + for _, allUser := range allUsers { + contains := strings.Contains(allUser.Namespace, workspaceId) + if contains { + users = append(users, allUser.Displayname) + } + } + if len(users) > 0 { + controller.FailCode(c, errors.ServerError, nil, "当前工作空间下还存在关联数据:用户绑定关系,请先解除绑定关系!"+strings.Join(users, ",")) + return + } + + // 删除环境变量 + workspace_env.DeleteWorkspaceEnvVarByWorkspaceId(workspaceId) + // 删除分发日志 + out_giving.DeleteOutGivingLogByWorkspaceId(workspaceId) + + w := &workspace.Workspace{} + w.Id = workspaceId + err := w.GetById(w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + _, err = w.Delete(w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "删除失败!") + return + } + controller.Success(c, "") +} diff --git a/server/internal/controller/v1/app_manage/system/workspaceEnvVarController.go b/server/internal/controller/v1/app_manage/system/workspaceEnvVarController.go new file mode 100644 index 0000000..eb2911e --- /dev/null +++ b/server/internal/controller/v1/app_manage/system/workspaceEnvVarController.go @@ -0,0 +1,275 @@ +package system + +import ( + "bytes" + "encoding/json" + err1 "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace_env" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/app_manage/common" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strings" +) + +func EditWorkspaceEnv(c *gin.Context) { + w := &workspace_env.WorkspaceEnvVar{} + err := validator.CheckPostParams(c, w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + if w.Id == "" { + if w.Name == "" || w.Value == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + } + err = checkInfo(w.Name, w.WorkspaceId) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, err.Error()) + return + } + w.SetUserName(service.GetUserName(c)) + _, err = w.Create(w) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + if w.NodeIds == "" { + return + } + err = syncUpdateNodeEnvVar(w, strings.Split(w.NodeIds, ",")) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + } else { + w1 := &workspace_env.WorkspaceEnvVar{} + w1.Id = w.Id + err = w1.GetById(w1) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据不存在!") + return + } + if w1.Privacy == 0 && w.Value == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + } + w1.Description = w.Description + if w.Value != "" { + w1.Value = w.Value + } + w1.Name = w.Name + oldNodeIds := w1.NodeIds + w1.NodeIds = w.NodeIds + w1.SetModifyUserName(service.GetUserName(c)) + _, err = w.Update(w1, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + if w.NodeIds != "" { + newNodeIdArray := strings.Split(w.NodeIds, ",") + if oldNodeIds != "" && oldNodeIds != w.NodeIds { + var delNodeIds []string + oldNodeIdArray := strings.Split(oldNodeIds, ",") + for _, oldId := range oldNodeIdArray { + find := false + for _, newId := range newNodeIdArray { + if oldId == newId { + find = true + break + } + } + if !find { + delNodeIds = append(delNodeIds, oldId) + } + } + if len(delNodeIds) > 0 { + err = syncDelNodeEnvVar(w1.Name, delNodeIds) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除节点变量异常!") + return + } + } + } + err = syncUpdateNodeEnvVar(w, strings.Split(w.NodeIds, ",")) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "更新节点变量异常!") + return + } + } else { + if oldNodeIds != "" { + err = syncDelNodeEnvVar(w1.Name, strings.Split(oldNodeIds, ",")) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除节点变量异常!") + return + } + } + } + } + + controller.Success(c, "") +} + +func syncUpdateNodeEnvVar(w *workspace_env.WorkspaceEnvVar, nodeIds []string) error { + if len(nodeIds) == 0 { + return nil + } + form := make(map[string]interface{}, 1) + form["name"] = w.Name + form["value"] = w.Value + form["description"] = w.Description + form["privacy"] = w.Privacy + jsonBody, _ := json.Marshal(form) + + for _, nodeId := range nodeIds { + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + return err1.New("数据不存在") + } + resp, err := common.Request5(n, common.Workspace_EnvVar_Update, bytes.NewReader(jsonBody)) + if err != nil { + return err + } + if !resp.IsBusinessSuccess() { + return err1.New(resp.Result.Msg) + } + } + return nil +} + +func syncDelNodeEnvVar(name string, nodeIds []string) error { + if len(nodeIds) == 0 { + return nil + } + body := make(map[string]string, 1) + body["name"] = name + jsonBody, _ := json.Marshal(body) + for _, nodeId := range nodeIds { + n := &node.Node{} + n.Id = nodeId + err := n.GetById(n) + if err != nil { + return err1.New("数据不存在") + } + resp, err := common.Request5(n, common.Workspace_EnvVar_Delete, bytes.NewReader(jsonBody)) + if err != nil { + return err + } + if !resp.IsBusinessSuccess() { + return err1.New(resp.Result.Msg) + } + } + return nil +} + +func checkInfo(name, workspaceId string) error { + w := workspace_env.New() + fields := make(map[string]interface{}, 2) + fields["name"] = name + if workspaceId != "GLOBAL" { + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + } + result, _ := w.GetAll(w, fields, nil) + if len(result.([]workspace_env.WorkspaceEnvVar)) > 0 { + return err1.New("数据已存在") + } + return nil +} + +func DeleteWorkspaceEnv(c *gin.Context) { + id := c.Query("id") + if id == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + w := &workspace_env.WorkspaceEnvVar{} + w.Id = id + err := w.GetById(w) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + + if w.NodeIds != "" { + err = syncDelNodeEnvVar(w.Name, strings.Split(w.NodeIds, ",")) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除节点变量异常!") + return + } + } + + _, err = w.Delete(w) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + controller.Success(c, "") +} + +type WorkspaceEnvPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + WorkspaceId string `json:"workspaceId"` + Name string `json:"name"` + Value string `json:"value"` + Description string `json:"description"` +} + +func PageWorkspaceEnvs(c *gin.Context) { + var pageBody WorkspaceEnvPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if pageBody.WorkspaceId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + w := workspace_env.New() + fields := map[string]interface{}{} + workspaceId := app_manage.GetWorkspaceId(c) + if len(workspaceId) == 0 { + split := strings.Split(pageBody.WorkspaceId, ",") + fields["workspace_id"] = split + } else { + fields["workspace_id"] = []string{workspaceId, "GLOBAL"} + } + + if pageBody.Name != "" { + fields["name"] = pageBody.Name + } + if pageBody.Value != "" { + fields["value"] = pageBody.Value + } + if pageBody.Description != "" { + fields["description"] = pageBody.Description + } + page := &model.PageConfig{} + page.Covert(pageBody.PageInfo) + tResult, err := w.Page(w, page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + result := tResult.([]workspace_env.WorkspaceEnvVar) + if result != nil && len(result) > 0 { + for i := range result { + if result[i].Privacy == 1 { + result[i].Value = "" + } + } + } + page.Data = result + controller.Success(c, page) +} diff --git a/server/internal/controller/v1/app_manage/user.go b/server/internal/controller/v1/app_manage/user.go new file mode 100644 index 0000000..f3ab594 --- /dev/null +++ b/server/internal/controller/v1/app_manage/user.go @@ -0,0 +1,126 @@ +package app_manage + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/app_manage/workspace" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/gin-gonic/gin" + "strings" +) + +type UserPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Id string `json:"id"` + Name string `json:"name"` +} + +func PageUsers(c *gin.Context) { + var pageBody UserPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + um := user.NewUserModel() + fields := map[string]interface{}{} + if pageBody.Id != "" { + fields["user_id"] = pageBody.Id + } + if pageBody.Name != "" { + fields["user_name"] = pageBody.Name + } + page := &model.Page[user.UserModel]{} + page.Covert(pageBody.PageInfo) + err = um.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +func GetUserWorkSpace(c *gin.Context) { + userId := c.Query("userId") + if userId == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + um := &user.UserModel{} + um.UserID = userId + err := um.Get() + if err != nil { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + if um.AdminRole == 1 { + w := workspace.New() + result, err := w.GetAll(w, nil, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, result) + return + } + + namespace := um.Namespace + if namespace == "" { + controller.Success(c, "") + return + } + ns := strings.Split(namespace, ",") + if len(ns) == 0 { + controller.Success(c, "") + return + } + + w := workspace.New() + fields := make(map[string]interface{}, 1) + fields["id"] = ns + result, err := w.GetAll(w, fields, nil) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + controller.Success(c, result) +} + +type EditUserWorkSpaceBody struct { + UserId string `json:"userId"` + WorkspaceIds string `json:"workspaceIds"` +} + +func EditUserWorkSpace(c *gin.Context) { + var body EditUserWorkSpaceBody + err := c.ShouldBindJSON(&body) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if body.UserId == "" { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + um := user.NewUserModel() + um.UserID = body.UserId + err = um.Get() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + um.Namespace = body.WorkspaceIds + err = um.Update([]string{"namespace"}) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + + controller.Success(c, "") +} diff --git a/server/internal/controller/v1/demo.go b/server/internal/controller/v1/demo.go new file mode 100644 index 0000000..6b4abb2 --- /dev/null +++ b/server/internal/controller/v1/demo.go @@ -0,0 +1,21 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "github.com/gin-gonic/gin" +) + +func HelloWorld(c *gin.Context) { + //str, ok := c.GetQuery("name") + //if !ok { + // str = "gin-layout" + //} + + //err := service.EventHandler(0, "") + //if err != nil { + // controller.FailCode(c, errors.ServerError, err, "内部错误!") + // return + //} + + controller.Success(c, "res") +} diff --git a/server/internal/controller/v1/deviceinfo.go b/server/internal/controller/v1/deviceinfo.go new file mode 100644 index 0000000..3746f54 --- /dev/null +++ b/server/internal/controller/v1/deviceinfo.go @@ -0,0 +1,353 @@ +package v1 + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/data" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/agent" + devc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/message" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" + "strings" + "time" +) + +// 每30s的健康检查接口 +func CheckHeartBeat(c *gin.Context) { + device := &devc.DeviceInfo{} + err := validator.CheckPostParams(c, device) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _, err = device.SaveHealth() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, "保存成功!") +} + +// 设备基础信息上报 +func PushDeviceInfo(c *gin.Context) { + device := &devc.DeviceInfo{} + err := validator.CheckPostParams(c, device) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _, err = device.SaveBase() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, "保存成功!") +} + +type PageBodyDevice struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Name string `json:"name"` + IsNew string `json:"isNew"` +} + +// 分页查询设备信息-关联资产属性 +func PageDevices(c *gin.Context) { + var pageBody PageBodyDevice + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + device := &devc.AssetDeviceInfo{} + fields := map[string]interface{}{} + if pageBody.Name != "" { + fields["pr.name"] = pageBody.Name + } + if pageBody.IsNew != "" { + fields["is_new"] = pageBody.IsNew + } + page := &model.Page[devc.AssetDeviceInfo]{} + page.Covert(pageBody.PageInfo) + err = device.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) + +} + +// 统计设备升级数统计 +func CountDeviceUpgrade(c *gin.Context) { + fields := map[string]interface{}{} + device := &devc.DeviceInfo{} + result, err := device.CountUpgradeNum(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +// 获取设备基本信息 +func GetDeviceInfo(c *gin.Context) { + device := &devc.AssetDeviceInfo{} + serialNo := c.Param("serialNo") + fields := map[string]interface{}{} + fields["serial_no"] = serialNo + asset, err := device.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, asset) +} + +// 获取设备的组件列表信息 +func ListDeviceConfigs(c *gin.Context) { + serialNo := c.Param("serialNo") + device := &devc.AssetDeviceInfo{} + fields := map[string]interface{}{} + fields["serial_no"] = serialNo + _, err := device.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "未找到设备!") + return + } + sub := strings.ReplaceAll(message.TO_AGENT_UNICAST_SUBJECT, "{rid}", serialNo) + dat := message.MsgModel{ + Body: nil, + Func: message.FUNC_COMPONENTINFO, + Rid: serialNo, + Version: "v1", + } + payload, _ := json.Marshal(dat) + msg, err := data.Nc.Request(sub, payload, 6*time.Second) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + res, err := message.UnmarshalMsgRespModel(msg.Data) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "无法解析的消息格式!") + return + } + if res.Code != 200 { + controller.FailCode(c, errors.ServerError, err, "小助手消息错误!") + return + } + deStr, err := base64.StdEncoding.DecodeString(fmt.Sprint(res.Data)) + result := make([]map[string]interface{}, 0) + json.Unmarshal(deStr, &result) + controller.Success(c, result) +} + +// 创建设备升级记录 +func CreateDeviceUpgradeRecord(c *gin.Context) { + record := &devc.DeviceUpgradeRecord{} + err := validator.CheckPostParams(c, record) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _, err = record.Create() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, "") +} + +type PageBodyRecord struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` +} + +// 获取设备升级记录 +func PageDeviceUpgradeRecord(c *gin.Context) { + var pageBody PageBodyRecord + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + serialNo := c.Param("serialNo") + fields := map[string]interface{}{} + fields["serial_no"] = serialNo + + record := &devc.DeviceUpgradeRecord{} + page := &model.Page[devc.UpgradeRecord]{} + page.Covert(pageBody.PageInfo) + err = record.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +// 创建设备升级规则 +func CreateDeviceUpgradeRule(c *gin.Context) { + rule := &devc.DeviceUpgradeRule{} + err := validator.CheckPostParams(c, rule) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + //企业+一体机类型唯一 + fields := map[string]interface{}{} + fields["vendor_id"] = rule.VendorId + rules, err := rule.ListAll(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + if len(rules) > 0 && rule.DeviceType == "0" { + controller.FailCode(c, errors.InvalidParameter, err, "与已有公司规则冲突!") + return + } + for _, r := range rules { + if r.DeviceType == rule.DeviceType || r.DeviceType == "0" { + controller.FailCode(c, errors.InvalidParameter, err, "与已有公司规则冲突!") + return + } + } + num, err := rule.Create() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "创建失败!") + return + } + if num > 0 { + go func(ru devc.DeviceUpgradeRule) { + rules := make([]devc.DeviceUpgradeRule, 0) + rules = append(rules, ru) + if err == nil && len(rules) > 0 { + _ = service.SendUpgradePlans(rules, "create") + } + }(*rule) + } + controller.Success(c, "保存成功!") +} + +type PageRule struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + VendorId string `json:"vendorId"` +} + +// 获取设备升级规则 +func PageDeviceUpgradeRule(c *gin.Context) { + var pageBody PageRule + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + if pageBody.VendorId != "" { + fields["vendor_id"] = pageBody.VendorId + } + rule := &devc.DeviceUpgradeRule{} + page := &model.Page[devc.DeviceUpgradeRule]{} + page.Covert(pageBody.PageInfo) + err = rule.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +type DeleteUpgradeRuleBody struct { + Ids []int64 `json:"ids" binding:"required"` +} + +// 删除设备升级规则 +func DeleteDeviceUpgradeRule(c *gin.Context) { + rule := &devc.DeviceUpgradeRule{} + var deleteBody DeleteUpgradeRuleBody + err := c.ShouldBindJSON(&deleteBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + rules, err := rule.GetBatch(deleteBody.Ids) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + var num int64 + if len(rules) > 0 { + num, err = rule.DeleteBatch(deleteBody.Ids) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "删除失败!") + return + } + } + if num > 0 { + go func(rules []devc.DeviceUpgradeRule) { + _ = service.SendUpgradePlans(rules, "delete") + }(rules) + } + controller.Success(c, "删除成功!") +} + +// 触发升级命令 +func DoDeviceUpgrade(c *gin.Context) { + serialNo := c.Param("serialNo") + device := &devc.AssetDeviceInfo{} + fields := map[string]interface{}{} + fields["serial_no"] = serialNo + d, err := device.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "未找到设备!") + return + } + + aget := &agent.AgentInfo{} + agents, err := aget.ListLastVersion() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未查询到最新版本!") + return + } + for _, a := range agents { + if strings.ToLower(a.OsType) == strings.ToLower(d.OsType) && strings.ToLower(a.ArchType) == strings.ToLower(d.ArchType) { + aget = &a + break + } + } + plan, err := service.GetUpgradeCommandNow(aget) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未找到小助手包!") + return + } + body, _ := json.Marshal(plan) + dat := message.MsgModel{ + Body: body, + Func: message.FUNC_UPGRADEIMMEDIATELY, + Rid: serialNo, + Version: "v1", + } + payload, _ := json.Marshal(dat) + sub := strings.ReplaceAll(message.TO_AGENT_UNICAST_SUBJECT, "{rid}", serialNo) + msg, err := data.Nc.Request(sub, payload, 6*time.Second) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误,下发通知失败!") + return + } + res, err := message.UnmarshalMsgRespModel(msg.Data) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "消息格式错误,下发通知失败!") + return + } + if res.Code != 200 { + controller.FailCode(c, errors.ServerError, err, "下发通知失败!") + return + } + controller.Success(c, "已通知,自动升级!") +} diff --git a/server/internal/controller/v1/event.go b/server/internal/controller/v1/event.go new file mode 100644 index 0000000..2b814bc --- /dev/null +++ b/server/internal/controller/v1/event.go @@ -0,0 +1,124 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/event" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/event_engine" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" +) + +func CreateEvent(c *gin.Context) { + event := &event.Event{} + err := validator.CheckPostParams(c, event) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + _, err = event.Create() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +func EditEvent(c *gin.Context) { + event := &event.Event{} + err := validator.CheckPostParams(c, event) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + fields["id"] = event.Id + _, err = event.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + var updateColumns []string + _, err = event.Update(updateColumns) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +func GetEventById(c *gin.Context) { + event := &event.Event{} + eventId := c.Param("eventId") + fields := map[string]interface{}{} + fields["id"] = eventId + mRule, err := event.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, mRule) +} + +func GetEventByName(c *gin.Context) { + event := &event.Event{} + eventName := c.Param("eventName") + fields := map[string]interface{}{} + fields["event_name"] = eventName + result, err := event.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +type EventPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + EventName string `json:"eventName"` +} + +func PageEvents(c *gin.Context) { + var pageBody EventPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + e := &event.Event{} + fields := map[string]interface{}{} + fields["event_name"] = pageBody.EventName + page := &model.Page[event.Event]{} + page.Covert(pageBody.PageInfo) + err = e.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +func DeleteEvent(c *gin.Context) { + event := &event.Event{} + eventId := c.Param("eventId") + fields := map[string]interface{}{} + fields["id"] = eventId + result, err := event.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "事件不存在!") + return + } + result.Delete() + controller.Success(c, "") +} + +func SyncEventFromThreshold(c *gin.Context) { + rowsAffected, err := event_engine.BatchSaveEventFromThreshold() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "同步门限定义至事件定义失败!") + return + } + controller.Success(c, rowsAffected) +} diff --git a/server/internal/controller/v1/event_record.go b/server/internal/controller/v1/event_record.go new file mode 100644 index 0000000..395768d --- /dev/null +++ b/server/internal/controller/v1/event_record.go @@ -0,0 +1,166 @@ +package v1 + +import ( + "encoding/csv" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/event" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/gin-gonic/gin" + "time" +) + +func GetEventRecordById(c *gin.Context) { + er := &event.EventRecordStruct{} + eventId := c.Param("eventId") + mRule, err := er.GetById(eventId) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, mRule) +} + +type EventRecordCondition struct { + EventName string `json:"eventName"` + ResourceName string `json:"resourceName"` + Status string `json:"status"` +} + +type EventRecordPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + EventRecordCondition +} + +func PageEventRecords(c *gin.Context) { + var pageBody EventRecordPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + er := &event.EventRecordStruct{} + fields := map[string]interface{}{} + if pageBody.EventName != "" { + fields["event_name"] = pageBody.EventName + } + if pageBody.ResourceName != "" { + fields["resource_name"] = pageBody.ResourceName + } + if pageBody.Status != "" { + fields["task_status"] = pageBody.Status + } + page := &model.Page[event.EventRecordStruct]{} + page.Covert(pageBody.PageInfo) + err = er.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +func ExportEventRecords(c *gin.Context) { + var condition EventRecordCondition + err := c.ShouldBindJSON(&condition) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + er := &event.EventRecordStruct{} + fields := map[string]interface{}{} + if condition.EventName != "" { + fields["event_name"] = condition.EventName + } + if condition.ResourceName != "" { + fields["resource_name"] = condition.ResourceName + } + if condition.Status != "" { + fields["task_status"] = condition.Status + } + count, err := er.Count(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + + if count > 1000 { + controller.FailCode(c, errors.InvalidParameter, nil, "数据量过大,请调整查询范围!") + return + } + + events, err := er.GetEvents(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + + c.Writer.Header().Set("Content-Disposition", "attachment; filename=events.xlsx") + c.Writer.Header().Set("Content-Type", "application/octet-stream") + w := csv.NewWriter(c.Writer) + c.Writer.Write([]byte("\xEF\xBB\xBF")) + w.Write([]string{"事件等级", "事件编号", "事件名称", "资源名称", "资源类型", "所在算力节点", "发生时间", "事件内容", "处理状态"}) + for _, record := range events { + w.Write([]string{GetLevel(record.Level), record.Id, record.EventName, record.ResourceName, record.ResourceType, record.ResourceNode, GetTimeStr(record.EventTime), record.EventInfo, GetStatus(record.TaskStatus)}) + } + + w.Flush() + c.Writer.Flush() +} + +func GetLevel(level string) string { + if level == "WARN" { + return "警告" + } else if level == "CRITICAL" { + return "严重" + } else { + return "信息" + } +} + +func GetStatus(status string) string { + if status == "0" { + return "初始化" + } else if status == "1" { + return "成功" + } else if status == "2" { + return "失败" + } else if status == "3" { + return "执行中" + } else if status == "4" { + return "触发失败" + } else { + return "未处理" + } +} + +func GetTimeStr(t time.Time) string { + return t.Local().Format("2006-01-02 15:04:05") +} + +func EventRecordsStatistic(c *gin.Context) { + var condition EventRecordCondition + err := c.ShouldBindJSON(&condition) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + if condition.EventName != "" { + fields["event_name"] = condition.EventName + } + if condition.ResourceName != "" { + fields["resource_name"] = condition.ResourceName + } + if condition.Status != "" { + fields["task_status"] = condition.Status + } + er := &event.EventRecordStruct{} + statistic, err := er.Statistic(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + controller.Success(c, statistic) +} diff --git a/server/internal/controller/v1/history_event_record.go b/server/internal/controller/v1/history_event_record.go new file mode 100644 index 0000000..0b845f0 --- /dev/null +++ b/server/internal/controller/v1/history_event_record.go @@ -0,0 +1,176 @@ +package v1 + +import ( + "encoding/csv" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/event" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/gin-gonic/gin" + "time" +) + +func GetHistoryEventRecordById(c *gin.Context) { + her := &event.HistoryEventRecordStruct{} + eventId := c.Param("eventId") + mRule, err := her.GetById(eventId) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, mRule) +} + +type HistoryEventRecordCondition struct { + EventName string `json:"eventName"` + Level string `json:"level"` + ResourceName string `json:"resourceName"` + ResourceType string `json:"resourceType"` + ResourceNode string `json:"ResourceNode"` + StartTime *time.Time `json:"StartTime"` + EndTime *time.Time `json:"endTime"` +} + +type HistoryEventRecordPageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + HistoryEventRecordCondition +} + +func PageHistoryEventRecords(c *gin.Context) { + var pageBody HistoryEventRecordPageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + her := &event.HistoryEventRecordStruct{} + fields := map[string]interface{}{} + if pageBody.EventName != "" { + fields["event_name"] = pageBody.EventName + } + if pageBody.Level != "" { + fields["level"] = pageBody.Level + } + if pageBody.ResourceName != "" { + fields["resource_name"] = pageBody.ResourceName + } + if pageBody.ResourceType != "" { + fields["resource_type"] = pageBody.ResourceType + } + if pageBody.ResourceNode != "" { + fields["resource_node"] = pageBody.ResourceNode + } + if pageBody.StartTime != nil { + fields["start_time"] = pageBody.StartTime + } + if pageBody.EndTime != nil { + fields["end_time"] = pageBody.EndTime + } + page := &model.Page[event.HistoryEventRecordStruct]{} + page.Covert(pageBody.PageInfo) + err = her.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +func ExportHistoryEventRecords(c *gin.Context) { + var condition HistoryEventRecordCondition + err := c.ShouldBindJSON(&condition) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + if condition.EventName != "" { + fields["event_name"] = condition.EventName + } + if condition.Level != "" { + fields["level"] = condition.Level + } + if condition.ResourceName != "" { + fields["resource_name"] = condition.ResourceName + } + if condition.ResourceType != "" { + fields["resource_type"] = condition.ResourceType + } + if condition.ResourceNode != "" { + fields["resource_node"] = condition.ResourceNode + } + if condition.StartTime != nil { + fields["start_time"] = condition.StartTime + } + if condition.EndTime != nil { + fields["end_time"] = condition.EndTime + } + her := &event.HistoryEventRecordStruct{} + count, err := her.Count(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + + if count > 1000 { + controller.FailCode(c, errors.InvalidParameter, nil, "数据量过大,请调整查询范围!") + return + } + + events, err := her.GetEvents(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + + c.Writer.Header().Set("Content-Disposition", "attachment; filename=history_events.xlsx") + c.Writer.Header().Set("Content-Type", "application/octet-stream") + w := csv.NewWriter(c.Writer) + c.Writer.Write([]byte("\xEF\xBB\xBF")) + w.Write([]string{"事件等级", "事件编号", "事件名称", "资源名称", "资源类型", "所在算力节点", "发生时间", "事件内容", "处理状态"}) + for _, record := range events { + w.Write([]string{GetLevel(record.Level), record.Id, record.EventName, record.ResourceName, record.ResourceType, record.ResourceNode, GetTimeStr(record.EventTime), record.EventInfo, GetStatus(record.TaskStatus)}) + } + + w.Flush() + c.Writer.Flush() +} + +func HistoryEventRecordsStatistic(c *gin.Context) { + var condition HistoryEventRecordCondition + err := c.ShouldBindJSON(&condition) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + if condition.EventName != "" { + fields["event_name"] = condition.EventName + } + if condition.Level != "" { + fields["level"] = condition.Level + } + if condition.ResourceName != "" { + fields["resource_name"] = condition.ResourceName + } + if condition.ResourceType != "" { + fields["resource_type"] = condition.ResourceType + } + if condition.ResourceNode != "" { + fields["resource_node"] = condition.ResourceNode + } + if condition.StartTime != nil { + fields["start_time"] = condition.StartTime + } + if condition.EndTime != nil { + fields["end_time"] = condition.EndTime + } + her := &event.HistoryEventRecordStruct{} + statistic, err := her.Statistic(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务器错误!") + return + } + controller.Success(c, statistic) +} diff --git a/server/internal/controller/v1/login.go b/server/internal/controller/v1/login.go new file mode 100644 index 0000000..f24e79c --- /dev/null +++ b/server/internal/controller/v1/login.go @@ -0,0 +1,275 @@ +package v1 + +import ( + "bytes" + "crypto/tls" + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/auth" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "github.com/golang/glog" + "gorm.io/gorm" + "io" + "net/http" + "time" +) + +const AUTH_HEADER = "Authorization" + +type UserInfo struct { + *user.UserObj + Token string `json:"token"` +} + +func LoginInfo(c *gin.Context) { + u, exists := c.Get(middleware.LoginUserKey) + if !exists { + controller.FailCode(c, errors.AuthorizationError, nil) + return + } + userObj, ok := u.(*user.UserObj) + if !ok { + controller.FailCode(c, errors.AuthorizationError, nil) + return + } + + if !config.Config.Auth.Enable { + controller.FailCode(c, errors.ServerError, nil, "login is disabled!") + return + } + + url := config.Config.Auth.Url + if url == "" { + controller.FailCode(c, errors.ServerError, nil, "login config is not set!") + return + } + + token := c.Request.Header.Get(AUTH_HEADER) + + var client *http.Client + var request *http.Request + var resp *http.Response + client = &http.Client{Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }} + request, err := http.NewRequest("GET", url+config.Config.Auth.LoginInfo, nil) + if err != nil { + glog.Errorln("failed to create request", err) + controller.FailCode(c, errors.ServerError, err, "failed to create request!") + return + } + request.Header.Add(AUTH_HEADER, token) + resp, err = client.Do(request) + if err != nil { + glog.Errorln("failed to request", err) + controller.FailCode(c, errors.ServerError, err, "failed to request!") + return + } + defer resp.Body.Close() + defer client.CloseIdleConnections() + if resp.StatusCode != 200 { + glog.Errorln("response error") + controller.FailCode(c, errors.ServerError, nil, "response error!") + return + } + + var respBody map[string]interface{} + respStr, _ := io.ReadAll(resp.Body) + err = json.Unmarshal(respStr, &respBody) + if err != nil { + glog.Errorln("failed to decode response", err) + controller.FailCode(c, errors.ServerError, err, "failed to decode response!") + return + } + + data := respBody["data"] + if data == nil { + meta := respBody["meta"] + controller.FailCode(c, errors.ServerError, nil, meta.(map[string]interface{})["message"].(string)) + return + } + userMap := data.(map[string]interface{})["user"] + mobile := userMap.(map[string]interface{})["mobile"] + if mobile != nil { + userObj.Mobile = mobile.(string) + } + provinceId := userMap.(map[string]interface{})["provinceId"] + if provinceId != nil { + userObj.ProvinceId = provinceId.(string) + } + userObj.Status = userMap.(map[string]interface{})["status"].(string) + userinfo := UserInfo{ + UserObj: userObj, + } + controller.Success(c, userinfo) +} + +type LoginBody struct { + AppCode string `json:"appCode"` + Password string `json:"password"` + SingleLogin bool `json:"singleLogin"` + TextCode string `json:"textCode"` + UserName string `json:"username"` + Uuid string `json:"uuid"` +} + +func Login(c *gin.Context) { + if !config.Config.Auth.Enable { + controller.FailCode(c, errors.ServerError, nil, "login is disabled!") + return + } + + url := config.Config.Auth.Url + if url == "" { + controller.FailCode(c, errors.ServerError, nil, "login config is not set!") + return + } + + loginBody := LoginBody{} + err := validator.CheckPostParams(c, &loginBody) + if err != nil || (loginBody.AppCode == "" || loginBody.Password == "" || loginBody.TextCode == "" || + loginBody.UserName == "" || loginBody.Uuid == "") { + controller.FailCode(c, errors.ServerError, err, "请检查参数!") + return + } + + client := &http.Client{Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }} + + authPath := config.Config.Auth.LoginWithCode + reqBody, err := json.Marshal(loginBody) + resp, err := client.Post(url+authPath, "application/json", bytes.NewReader(reqBody)) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + defer resp.Body.Close() + defer client.CloseIdleConnections() + + var respBody map[string]interface{} + respBytes, _ := io.ReadAll(resp.Body) + + log.Info("auth response:" + string(respBytes)) + + if resp.StatusCode != 200 { + glog.Errorln("response error:" + string(respBytes)) + controller.FailCode(c, errors.ServerError, nil, "服务异常!") + return + } + + err = json.Unmarshal(respBytes, &respBody) + if err != nil { + glog.Errorln("failed to decode response", err.Error()) + controller.FailCode(c, errors.ServerError, nil, "服务异常!") + return + } + + data := respBody["data"] + if data == nil { + meta := respBody["meta"] + controller.FailCode(c, errors.ServerError, nil, meta.(map[string]interface{})["message"].(string)) + return + } + + accountMap := data.(map[string]interface{})["account"] + userName := accountMap.(map[string]interface{})["loginName"].(string) + currentUser := user.NewUserModel() + err = currentUser.GetByUserName(userName) + if err != nil { + if err == gorm.ErrRecordNotFound { + glog.Warningln("User does not exist in database registry") + currentUser = nil + } else { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + } + + if currentUser == nil { + glog.Infoln("Moving user to database, user: ", loginBody.UserName) + spec := user.UserSpec{} + spec.UserID = accountMap.(map[string]interface{})["accountId"].(string) + spec.UserName = userName + userMap := data.(map[string]interface{})["user"] + displayName := userMap.(map[string]interface{})["cn"] + if displayName != nil { + spec.DisplayName = displayName.(string) + } else { + spec.DisplayName = userName + } + if userName == "admin" { + spec.Role = 1 + } else { + spec.Role = 0 + } + if config.Config.CfnConfig.Enable { + spec.Namespace = fmt.Sprintf("DEFAULT,%s", config.Config.CfnConfig.CfnWorkSpaceId) + } else { + spec.Namespace = "DEFAULT" + } + + _, err = user.CreateUser(spec) + if err != nil { + glog.Errorln("failed to create user, err: " + err.Error()) + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + } + + detail, err := user.GetUserByUsername(userName) + if err != nil || detail == nil { + glog.Errorln("failed to get user, err: " + err.Error()) + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + userMap := data.(map[string]interface{})["user"] + mobile := userMap.(map[string]interface{})["mobile"] + if mobile != nil { + detail.Mobile = mobile.(string) + } + provinceId := userMap.(map[string]interface{})["provinceId"] + if provinceId != nil { + detail.ProvinceId = provinceId.(string) + } + detail.Status = userMap.(map[string]interface{})["status"].(string) + tokenMap := data.(map[string]interface{})["token"] + authToken := tokenMap.(map[string]interface{})["accessToken"].(string) + + go func() { + userModel := user.NewUserModel() + userModel.UserID = detail.UserID + userModel.LastLoginTime = time.Now() + userModel.LoginFrequency = detail.LoginFrequency + 1 + _, err = userModel.UpdateLastLoginTime() + if err != nil { + glog.Errorln("Failed to update last_login_time", err) + } + }() + + token, err := auth.Authorize(authToken, detail) + if err != nil || token == "" { + glog.Errorln("Failed to get token", err) + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + userinfo := UserInfo{ + UserObj: detail, + Token: token, + } + + controller.Success(c, userinfo) +} diff --git a/server/internal/controller/v1/logs.go b/server/internal/controller/v1/logs.go new file mode 100644 index 0000000..9444e6c --- /dev/null +++ b/server/internal/controller/v1/logs.go @@ -0,0 +1,41 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + devc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/message" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "github.com/gin-gonic/gin" + "github.com/golang/glog" +) + +// 获取设备运行日志 +func GetDeviceLogs(c *gin.Context) { + device := &devc.AssetDeviceInfo{} + serialNo := c.Param("serialNo") + comType := c.Param("comType") + fields := map[string]interface{}{} + fields["serial_no"] = serialNo + _, err := device.Get(fields) + if err != nil { + glog.Error(err) + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + loglines := []string{} + switch comType { + case "agent": + loglines, err = service.GetDeviceLogs(message.FUNC_AGENTLOG, serialNo, 100) + break + case "syslog": + break + case "telegraf": + loglines, err = service.GetDeviceLogs(message.FUNC_TELEGRAFLOG, serialNo, 100) + break + } + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + } + controller.Success(c, loglines) +} diff --git a/server/internal/controller/v1/metric.go b/server/internal/controller/v1/metric.go new file mode 100644 index 0000000..339cb91 --- /dev/null +++ b/server/internal/controller/v1/metric.go @@ -0,0 +1,467 @@ +package v1 + +import ( + "context" + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/data" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + mc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/metric" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + v1 "github.com/prometheus/client_golang/api/prometheus/v1" + "github.com/prometheus/common/model" + "strings" + "time" +) + +type QueryBody struct { + Rids string `json:"rids"` + OrgId string `json:"orgId"` + AssetType string `json:"assetType"` + RuleNos string `json:"ruleNo"` + Start string `json:"start"` + End string `json:"end"` + Step time.Duration `json:"step"` +} + +type Metric struct { + RuleNo string `json:"ruleNo"` + RuleName string `json:"ruleName"` + Data interface{} `json:"data"` +} + +type Pair struct { + Time model.Time `json:"time"` + Value interface{} `json:"value"` +} + +func QueryMetric(c *gin.Context) { + body := request.GetBody(c) + var b QueryBody + err := json.Unmarshal(body, &b) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数(body)是否符合要求!") + return + } + + var end time.Time + if b.End != "" { + end, err = time.Parse(time.RFC3339, b.End) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "invalid end") + return + } + } else { + end = time.Now() + } + + var start time.Time + if b.Start != "" { + start, err = time.Parse(time.RFC3339, b.Start) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "invalid start") + return + } + } else if b.End == "" { + start = end + } + + if end.Before(start) { + controller.FailCode(c, errors.InvalidParameter, err, "invalid start and end") + return + } + + if b.Step == 0 { + duration := end.Sub(start) + durationSeconds := duration.Seconds() + b.Step = time.Duration(durationSeconds/6) * time.Second + if b.Step == 0 { + b.Step = time.Second + } + } + + ruleNos := strings.Split(b.RuleNos, ",") + if len(ruleNos) == 0 { + controller.Success(c, nil) + return + } + + rids := strings.Split(b.Rids, ",") + if len(rids) == 0 { + controller.Success(c, nil) + return + } + + if data.V1api == nil { + log.Info("prometheus client is nil") + controller.Success(c, nil) + return + } + + device := &device.DeviceInfo{} + devices, err := device.GetBySerialNos(rids) + if len(devices) == 0 { + controller.FailCode(c, errors.InvalidParameter, err, "rids are not exist") + return + } + + osType := make(map[string]string, len(devices)) + for _, info := range devices { + osType[info.SerialNo] = info.OsType + } + + rule := mc.MetricsRule{} + rules, err := rule.GetByRuleNo(ruleNos) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + + if len(rules) == 0 { + controller.Success(c, nil) + return + } + + result := make(map[string][]Metric, len(rids)) + for _, rid := range rids { + var isWindows bool + if osType[rid] == "" || strings.ToLower(osType[rid]) == "windows" { + isWindows = true + } else { + isWindows = false + } + result[rid] = []Metric{} + for _, metricsRule := range rules { + var ruleQl string + if isWindows { + ruleQl = metricsRule.RuleQlWindows + } else { + ruleQl = metricsRule.RuleQl + } + promQl := strings.ReplaceAll(ruleQl, "$rid", rid) + queryRange, _, err := data.V1api.QueryRange(context.TODO(), promQl, v1.Range{ + Start: start, + End: end, + Step: b.Step, + }) + if err != nil { + log.Info("failed to query range, err: ", err.Error()) + continue + } + + var data interface{} + resultType := queryRange.Type() + switch resultType { + case model.ValScalar: + scalar := queryRange.(*model.Scalar) + data = []Pair{ + { + scalar.Timestamp, + scalar.Value, + }, + } + case model.ValMatrix: + matrix := queryRange.(model.Matrix) + size := len(matrix) + if size > 1 { + temp := make(map[string][]Pair) + for _, stream := range matrix { + var pairs []Pair + for _, value := range stream.Values { + pairs = append(pairs, Pair{ + value.Timestamp, + value.Value, + }) + } + key, _ := json.Marshal(stream.Metric) + temp[string(key)] = pairs + } + data = temp + } else if size > 0 { + var pairs []Pair + values := matrix[0].Values + for i := range values { + pairs = append(pairs, Pair{ + values[i].Timestamp, + values[i].Value, + }) + } + data = pairs + } + case model.ValString: + str := queryRange.(*model.String) + data = []Pair{ + { + str.Timestamp, + str.Value, + }, + } + case model.ValVector: + vector := queryRange.(model.Vector) + size := len(vector) + if size > 1 { + temp := make(map[string][]Pair) + for _, sample := range vector { + key, _ := json.Marshal(sample.Metric.String()) + temp[string(key)] = []Pair{{ + sample.Timestamp, + sample.Value}, + } + } + data = temp + } else if size > 0 { + data = []Pair{ + { + vector[0].Timestamp, + vector[0].Value, + }, + } + } + default: + continue + } + + result[rid] = append(result[rid], Metric{ + metricsRule.RuleNo, + metricsRule.RuleName, + data, + }) + } + } + + controller.Success(c, result) +} + +type ProcessMetricQueryBody struct { + Rid string `json:"rid"` + PName string `json:"pName"` + Start string `json:"start"` + End string `json:"end"` + Step time.Duration `json:"step"` +} + +func QueryProcessMetric(c *gin.Context) { + body := request.GetBody(c) + var b ProcessMetricQueryBody + err := json.Unmarshal(body, &b) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数(body)是否符合要求!") + return + } + + if b.Rid == "" || b.PName == "" { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数(body)是否符合要求!") + } + + var end time.Time + if b.End != "" { + end, err = time.Parse(time.RFC3339, b.End) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "invalid end") + return + } + } else { + end = time.Now() + } + + var start time.Time + if b.Start != "" { + start, err = time.Parse(time.RFC3339, b.Start) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "invalid start") + return + } + } else if b.End == "" { + start = end + } + + if end.Before(start) { + controller.FailCode(c, errors.InvalidParameter, err, "invalid start and end") + return + } + + if b.Step == 0 { + duration := end.Sub(start) + durationSeconds := duration.Seconds() + b.Step = time.Duration(durationSeconds/6) * time.Second + if b.Step == 0 { + b.Step = time.Second + } + } + + d := &device.DeviceInfo{} + r, err := d.GetBySerialNo(b.Rid) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "rid are not exist") + return + } + + isWindows := strings.ToLower(r.OsType) == "windows" + promQLs := make(map[string]string) + if isWindows { + promQLs["read"] = fmt.Sprintf( + `rate(windows_process_io_bytes_total{rid="%s", process="%s", mode="read"}[5m])`, b.Rid, b.PName) + promQLs["write"] = fmt.Sprintf( + `rate(windows_process_io_bytes_total{rid="%s", process="%s", mode="write"}[5m])`, b.Rid, b.PName) + promQLs["cpu"] = fmt.Sprintf( + `sum(rate(windows_process_cpu_time_total{rid="%s", process="%s"}[5m]))`, b.Rid, b.PName) + promQLs["memory"] = fmt.Sprintf( + `sum(windows_process_page_file_bytes{rid="%s", process="%s"})`, b.Rid, b.PName) + } else { + promQLs["read"] = fmt.Sprintf( + `rate(namedprocess_namegroup_read_bytes_total{rid="%s",groupname="%s"}[5m])`, b.Rid, b.PName) + promQLs["write"] = fmt.Sprintf( + `rate(namedprocess_namegroup_write_bytes_total{rid="%s",groupname="%s"}[5m])`, b.Rid, b.PName) + promQLs["cpu"] = fmt.Sprintf( + `sum(rate(namedprocess_namegroup_cpu_seconds_total{rid="%s",groupname="%s"}[5m]))`, b.Rid, b.PName) + promQLs["memory"] = fmt.Sprintf( + `sum(namedprocess_namegroup_memory_bytes{rid="%s",groupname="%s"})`, b.Rid, b.PName) + } + + result := make(map[string][]Pair) + for key, promQL := range promQLs { + queryRange, _, err := data.V1api.QueryRange(context.TODO(), promQL, v1.Range{ + Start: start, + End: end, + Step: b.Step, + }) + if err != nil { + log.Info("failed to query range, err: ", err.Error()) + continue + } + + var pairs []Pair + resultType := queryRange.Type() + switch resultType { + case model.ValScalar: + scalar := queryRange.(*model.Scalar) + pairs = append(pairs, Pair{ + scalar.Timestamp, + scalar.Value, + }) + case model.ValMatrix: + matrix := queryRange.(model.Matrix) + if len(matrix) == 0 { + continue + } + values := matrix[0].Values + for i := range values { + pairs = append(pairs, Pair{ + values[i].Timestamp, + values[i].Value, + }) + } + case model.ValString: + str := queryRange.(*model.String) + pairs = append(pairs, Pair{ + str.Timestamp, + str.Value, + }) + case model.ValVector: + vector := queryRange.(model.Vector) + for i := range vector { + pairs = append(pairs, Pair{ + vector[i].Timestamp, + vector[i].Value, + }) + } + default: + continue + } + result[key] = pairs + } + + controller.Success(c, result) +} + +func QueryProcessListMetric(c *gin.Context) { + rid := c.Param("rid") + + d := &device.DeviceInfo{} + r, err := d.GetBySerialNo(rid) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "rid are not exist") + return + } + + isWindows := strings.ToLower(r.OsType) == "windows" + promQLs := make(map[string]string) + if isWindows { + promQLs["pName"] = fmt.Sprintf( + `sum(windows_process_start_time{rid="%s"}) by (process)`, rid) + promQLs["state"] = fmt.Sprintf( + `sum(windows_process_threads{rid="%s"}) by (process) > 0`, rid) + promQLs["cpu"] = fmt.Sprintf( + `sum(rate(windows_process_cpu_time_total{rid="%s"}[5m])) by (process)`, rid) + promQLs["memory"] = fmt.Sprintf( + `sum(windows_process_page_file_bytes{rid="%s"}) by (process)`, rid) + promQLs["diskIO"] = fmt.Sprintf( + `sum(rate(windows_process_io_bytes_total{rid="%s", mode="read"}[5m])) by (process)`, rid) + } else { + promQLs["pName"] = fmt.Sprintf( + `namedprocess_namegroup_num_procs{rid="%s"} == 1`, rid) + promQLs["state"] = fmt.Sprintf( + `sum(namedprocess_namegroup_states{rid="%s", state=~"Other|Zombie"}) by (groupname) == 0`, rid) + promQLs["cpu"] = fmt.Sprintf( + `sum(rate(namedprocess_namegroup_cpu_seconds_total{rid="%s"}[5m])) by (groupname)`, rid) + promQLs["memory"] = fmt.Sprintf( + `sum(namedprocess_namegroup_memory_bytes{rid="%s"}) by (groupname)`, rid) + promQLs["diskIO"] = fmt.Sprintf( + `rate(namedprocess_namegroup_read_bytes_total{rid="%s"}[5m]) + rate(namedprocess_namegroup_write_bytes_total{rid="%s"}[5m])`, rid, rid) + } + + temp := make(map[string][]*model.Sample) + time := time.Now() + for key, promQL := range promQLs { + queryRange, _, err := data.V1api.Query(context.TODO(), promQL, time) + if err != nil { + log.Info("failed to query range, err: ", err.Error()) + continue + } + + if queryRange.Type() == model.ValVector { + temp[key] = queryRange.(model.Vector) + } + } + + samples := temp["pName"] + result := make(map[string]map[string]interface{}, len(samples)) + var processName model.LabelName + if isWindows { + processName = "process" + } else { + processName = "groupname" + } + for _, sample := range samples { + + result[string(sample.Metric[processName])] = make(map[string]interface{}, 3) + } + + delete(temp, "pName") + + samples = temp["state"] + for _, sample := range samples { + pName := string(sample.Metric[processName]) + if _, ok := result[pName]; ok { + result[pName]["status"] = true + } + } + + delete(temp, "state") + + for key, value := range temp { + for _, sample := range value { + pName := string(sample.Metric[processName]) + if _, ok := result[pName]; !ok { + continue + } + result[pName][key] = sample.Value + } + } + + controller.Success(c, result) +} diff --git a/server/internal/controller/v1/metricrule.go b/server/internal/controller/v1/metricrule.go new file mode 100644 index 0000000..cd5f1f7 --- /dev/null +++ b/server/internal/controller/v1/metricrule.go @@ -0,0 +1,176 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + mc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/metric" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "github.com/gin-gonic/gin" +) + +// 创建指标规则 +func CreateMetricRule(c *gin.Context) { + rule := &mc.MetricsRule{} + err := validator.CheckPostParams(c, rule) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + queryNo := map[string]interface{}{ + "rule_no": rule.RuleNo, + } + r, _ := rule.Get(queryNo) + if r.RuleNo != "" { + controller.FailCode(c, errors.InvalidParameter, err, "编号重复!") + return + } + + if rule.RuleKey != "" { + queryKey := map[string]interface{}{ + "rule_key": rule.RuleKey, + } + rr, _ := rule.Get(queryKey) + if rr.RuleKey != "" { + controller.FailCode(c, errors.InvalidParameter, err, "KEY值重复!") + return + } + } + _, err = rule.Create() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +// 编辑指标规则 +func EditMetricRule(c *gin.Context) { + rule := &mc.MetricsRule{} + err := validator.CheckPostParams(c, rule) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + fields["id"] = rule.Id + oldRule, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + if rule.RuleNo != oldRule.RuleNo { + controller.FailCode(c, errors.InvalidParameter, err, "编号不允许修改!") + return + } + + if rule.RuleKey != "" { + queryKey := map[string]interface{}{ + "rule_key": rule.RuleKey, + } + rr, _ := rule.Get(queryKey) + if rr.RuleKey != "" && rr.RuleKey != oldRule.RuleKey { + controller.FailCode(c, errors.InvalidParameter, err, "KEY值重复!") + return + } + } + updateColumns := []string{} + _, err = rule.Update(updateColumns) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +// 根据编号获取规则 +func GetMetricRule(c *gin.Context) { + rule := &mc.MetricsRule{} + ruleNo := c.Param("ruleNo") + fields := map[string]interface{}{} + fields["rule_no"] = ruleNo + mRule, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, mRule) +} + +// 根据扩展key获取规则 +func GetMetricRuleByKey(c *gin.Context) { + rule := &mc.MetricsRule{} + ruleKey := c.Param("ruleKey") + fields := map[string]interface{}{} + fields["rule_key"] = ruleKey + mRule, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, mRule) +} + +type PageBody struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Keyword string `json:"keyword"` +} + +// 根据扩展key获取规则 +func PageMetrics(c *gin.Context) { + var pageBody PageBody + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + rule := &mc.MetricsRule{} + fields := map[string]interface{}{} + fields["keyword"] = pageBody.Keyword + page := &model.Page[mc.MetricsRule]{} + page.Covert(pageBody.PageInfo) + err = rule.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +// 删除指标规则 +func DeleteMetric(c *gin.Context) { + rule := &mc.MetricsRule{} + ruleNo := c.Param("ruleNo") + fields := map[string]interface{}{} + fields["rule_no"] = ruleNo + mRule, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + mRule.Delete() + controller.Success(c, "") +} + +type DeleteBody struct { + RuleNos []string `json:"ruleNos" binding:"required"` +} + +// 批量删除指标规则 +func DeleteBatchMetric(c *gin.Context) { + var deleteBody DeleteBody + err := c.ShouldBindJSON(&deleteBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + rule := &mc.MetricsRule{} + _, err = rule.DeleteBatch(deleteBody.RuleNos) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "删除失败!") + return + } + controller.Success(c, "删除成功!") +} diff --git a/server/internal/controller/v1/minio.go b/server/internal/controller/v1/minio.go new file mode 100644 index 0000000..4a933d1 --- /dev/null +++ b/server/internal/controller/v1/minio.go @@ -0,0 +1,91 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service" + "github.com/gin-gonic/gin" + "log" + "os" +) + +func init() { + _ = os.Mkdir("/tmp", os.FileMode(0777)) +} + +func GetPresignedUrl(c *gin.Context) { + filename := c.Param("filename") + if filename == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + url, err := service.GetPresignedUrl("cpn", filename, 10000) + if err != nil { + log.Println(err) + controller.FailCode(c, errors.ServerError, err, "minio connection fail!") + return + } + controller.Success(c, url) +} + +func PostPresignedUrl(c *gin.Context) { + filename := c.Param("filename") + if filename == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + formData, err := service.PostPresignedUrl("cpn", filename, 10000) + if err != nil { + log.Println(err) + controller.FailCode(c, errors.ServerError, err, "minio connection fail!") + return + } + controller.Success(c, formData) +} + +func PutPresignedUrl(c *gin.Context) { + filename := c.Param("filename") + if filename == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + data, err := service.PutPresignedUrl("cpn", filename, 10000) + if err != nil { + log.Println(err) + controller.FailCode(c, errors.ServerError, err, "minio connection fail!") + return + } + controller.Success(c, data) +} + +func UploadFile(c *gin.Context) { + _, headers, err := c.Request.FormFile("file") + if err != nil { + log.Printf("Error when try to get file: %v", err) + } + filename := c.Request.PostForm.Get("filename") + if filename == "" { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + //headers.Size 获取文件大小 + if headers.Size > 1024*1024*200 { + controller.FailCode(c, errors.InvalidParameter, err, "文件大小不能超过200M") + return + } + err = c.SaveUploadedFile(headers, "/tmp/"+headers.Filename) + if err != nil { + log.Printf("Error upload file: %v", err) + controller.FailCode(c, errors.ServerError, err, "上传文件失败!") + return + } + err = service.UploadFile("cpn", filename, "/tmp/"+headers.Filename) + if err != nil { + log.Printf("Error upload minio file: %v", err) + controller.FailCode(c, errors.ServerError, err, "上传文件失败!") + return + } + controller.Success(c, "") +} diff --git a/server/internal/controller/v1/schedule.go b/server/internal/controller/v1/schedule.go new file mode 100644 index 0000000..4e653fb --- /dev/null +++ b/server/internal/controller/v1/schedule.go @@ -0,0 +1,549 @@ +package v1 + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/event" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/id" + sc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/schedule" + tk "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/schedule" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + excel "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/service/schedule_engine" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/validator" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "time" +) + +func CreateSchedRule(c *gin.Context) { + rule := &sc.SchedRule{} + err := validator.CheckPostParams(c, rule) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if ur, bl := c.Get(middleware.LoginUserKey); bl { + if u, b := ur.(*user.User); b { + rule.CreateBy = u.Name + } + } + if _, err = rule.Create(); err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, "") +} + +// 编辑调度规则 +func EditSchedRule(c *gin.Context) { + rule := &sc.SchedRule{} + err := validator.CheckPostParams(c, rule) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + fields := map[string]interface{}{} + fields["id"] = rule.Id + _, err = rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "无法查找到对象!") + return + } + updateColumns := []string{} + _, err = rule.Update(updateColumns) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "数据库错误!") + return + } + controller.Success(c, "") +} + +// 根据ID获取规则 +func GetSchedRule(c *gin.Context) { + rule := &sc.SchedRule{} + id := c.Param("id") + fields := map[string]interface{}{} + fields["id"] = id + result, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +func StatisticSchedRule(c *gin.Context) { + rule := &sc.SchedRule{} + total, err := rule.Count() + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "数据库异常!") + return + } + now := time.Now() + lastYear := now.AddDate(-1, 1, 0) + startDate := time.Date(lastYear.Year(), lastYear.Month(), 1, 0, 0, 0, 0, time.Local) + tmp, err := rule.CountByMonth(startDate) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "数据库异常!") + return + } + group := make(map[string]interface{}) + for _, item := range tmp { + dateStr := item["date"].(string) + group[dateStr] = item["count"] + } + for startDate.Before(now) { + dateStr := startDate.Format("2006-01") + if _, exist := group[dateStr]; !exist { + group[dateStr] = 0 + } + startDate = startDate.AddDate(0, 1, 0) + } + result := map[string]interface{}{ + "total": total, + "group": group, + } + controller.Success(c, result) +} + +type PageBodySchedRule struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + Keyword string `json:"keyword"` + Status string `json:"status"` +} + +// 分页获取规则 +func PageSchedRules(c *gin.Context) { + var pageBody PageBodySchedRule + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + rule := &sc.SchedRule{} + fields := map[string]interface{}{} + fields["keyword"] = pageBody.Keyword + if pageBody.Status != "" { + fields["rule_status"] = pageBody.Status + } + page := &model.Page[sc.SchedRule]{} + page.Covert(pageBody.PageInfo) + err = rule.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +type DeleteBodySchedRule struct { + Ids []int64 `json:"ids" binding:"required"` +} + +// 批量删除规则 +func DeleteSchedRules(c *gin.Context) { + var deleteBody DeleteBodySchedRule + err := c.ShouldBindJSON(&deleteBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + rule := &sc.SchedRule{} + _, err = rule.DeleteBatch(deleteBody.Ids) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "删除失败!") + return + } + controller.Success(c, "删除成功!") +} + +// 停用启用操作 +func DoSchedRule(c *gin.Context) { + rule := &sc.SchedRule{} + id := c.Param("id") + option := c.Param("option") + fields := map[string]interface{}{} + fields["id"] = id + result, err := rule.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + if option == "0" { + //todo 开启任务 + } else if option == "1" { + //todo 停止任务 + } else { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + result.RuleStatus = option + result.Update(nil) + controller.Success(c, "执行成功!") +} + +type PageBodySchedTask struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + ListBodySchedTask +} + +type ListBodySchedTask struct { + TaskName string `json:"taskName"` + TaskStatus string `json:"taskStatus"` + StartTime *time.Time `json:"startTime"` + EndTime *time.Time `json:"endTime"` +} + +// 分页获取规则 +func PageSchedTasks(c *gin.Context) { + var pageBody PageBodySchedTask + err := c.ShouldBindJSON(&pageBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + task := &sc.SchedTask{} + fields := map[string]interface{}{} + fields["task_name"] = pageBody.TaskName + if pageBody.TaskStatus != "" { + fields["task_status"] = pageBody.TaskStatus + } + + if pageBody.StartTime == nil { + fields["start_time"] = time.Now().Add(-30 * 24 * time.Hour) + } else { + fields["start_time"] = pageBody.StartTime + } + + if pageBody.EndTime == nil { + fields["end_time"] = time.Now() + } else { + fields["end_time"] = pageBody.EndTime + } + + page := &model.Page[sc.SchedTask]{} + page.Covert(pageBody.PageInfo) + err = task.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + controller.Success(c, page) +} + +// 分页获取规则 +func ExportSchedTasks(c *gin.Context) { + var listBody ListBodySchedTask + err := c.ShouldBindJSON(&listBody) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + task := &sc.SchedTask{} + fields := map[string]interface{}{} + fields["task_name"] = listBody.TaskName + if listBody.TaskStatus != "" { + fields["task_status"] = listBody.TaskStatus + } + fields["start_time"] = listBody.StartTime + fields["end_time"] = listBody.EndTime + tasks, err := task.ListAll(fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "未找到记录!") + return + } + rows := [][]interface{}{} + for _, t := range tasks { + row := []interface{}{ + t.TaskName, t.Id, t.StartTime, t.EndTime, tk.TriggerTypeMap[t.TriggerType], "", tk.TaskStatusMap[t.TaskStatus], + } + rows = append(rows, row) + } + header := []string{"任务名称", "任务编号", "开始时间", "结束时间", "触发方式", "触发事件", "状态"} + f, err := excel.ExportExcel("调度任务", header, rows) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "生成excel文件失败!") + return + } + f.SetColWidth("调度任务", "A", "A", 40) + f.SetColWidth("调度任务", "C", "D", 15) + f.SetColWidth("调度任务", "F", "F", 40) + defer func() { + if err := f.Close(); err != nil { + fmt.Println(err) + } + }() + if err := f.SaveAs("/tmp/task.xlsx"); err != nil { + fmt.Println(err) + controller.FailCode(c, errors.ServerError, err, "生成下载文件失败!") + return + } + c.Header("Content-Type", "application/octet-stream") + c.Header("Content-Disposition", "attachment; filename=task.xlsx") + c.Header("Content-Transfer-Encoding", "binary") + c.File("/tmp/task.xlsx") + return +} + +// 根据ID获取调度任务 +func GetSchedTask(c *gin.Context) { + task := &sc.SchedTask{} + id := c.Param("id") + fields := map[string]interface{}{} + fields["id"] = id + result, err := task.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +// 根据EventId获取调度任务 +func GetSchedTaskByEvent(c *gin.Context) { + task := &sc.SchedTask{} + eventId := c.Param("eventId") + fields := map[string]interface{}{} + fields["event_id"] = eventId + result, err := task.Get(fields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +type TriggerTaskBody struct { + PlanId string `json:"planId" validate:"required"` + HandleAdvice string `json:"handleAdvice"` + // 资源Id + ResourceID string `json:"resourceId"` + // 资源名称(cpCode) + ResourceName string `json:"resourceName"` + // 资源节点 + ResourceNode string `json:"resourceNode"` + // 资源类型 + ResourceType string `json:"resourceType"` + + // 方案参数 + SchemeParams string `json:"schemeParams"` +} + +// 手动触发调度任务 +func TriggerSchedTask_UserManual(c *gin.Context) { + var body TriggerTaskBody + err := c.ShouldBindJSON(&body) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + // 暂不入库 + record := event.EventRecord{ + ResourceType: body.ResourceType, + ResourceNode: body.ResourceNode, + ResourceName: body.ResourceName, + ResourceId: body.ResourceID, + Id: id.NewEventRecord(), + } + + task := &sc.SchedTask{} + + t := time.Now() + sno := fmt.Sprintf("%d-%d%d-%s", t.Year(), t.Month(), t.Day(), record.Id) + task.Id = record.ResourceType + "-" + sno + task.TaskName = "" + task.EventId = record.Id + task.StartTime = time.Now() + task.PlanId = body.PlanId + task.CreateTime = time.Now() + task.HandleAdvice = body.HandleAdvice + task.HandleTime = time.Now() + err = schedule_engine.PlanHandle(task.PlanId, task.Id, body.SchemeParams, record) + if err != nil { + //log.Errorf("%v", err) + controller.FailCode(c, errors.ServerError, err, "调度方案失败!") + return + } + task.TaskStatus = sc.TASK_STATUS_ING + task.TriggerType = sc.TRIGGER_TYPE_MANUAL + _, err = task.Create() + if err != nil { + log.Errorf("生成调度任务失败:%v,事件ID:%s", err, record.Id) + controller.FailCode(c, errors.ServerError, err, "生成调度任务失败!") + return + } + + controller.Success(c, "") +} + +// 手动触发调度任务 +func TriggerSchedTask(c *gin.Context) { + eventId := c.Param("eventId") + event := &event.EventRecord{} + eventFields := map[string]interface{}{} + eventFields["id"] = eventId + record, err := event.Get(eventFields) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + var body TriggerTaskBody + err = c.ShouldBindJSON(&body) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + task := &sc.SchedTask{} + fields := map[string]interface{}{} + fields["event_id"] = eventId + taskRecord, err := task.Get(fields) + if ur, bl := c.Get(middleware.LoginUserKey); bl { + if u, b := ur.(*user.User); b { + task.HandleUsername = u.Name + taskRecord.HandleUsername = u.Name + } + } + if err != nil { + t := time.Now() + sno := fmt.Sprintf("%d-%d%d-%s", t.Year(), t.Month(), t.Day(), eventId) + task.Id = record.ResourceType + "-" + sno + task.TaskName = "" + task.EventId = eventId + task.StartTime = time.Now() + task.PlanId = body.PlanId + task.CreateTime = time.Now() + task.HandleAdvice = body.HandleAdvice + task.HandleTime = time.Now() + err = schedule_engine.PlanHandle(task.PlanId, task.Id, "", record) + if err != nil { + log.Errorf("%v", err) + controller.FailCode(c, errors.ServerError, err, "调度方案失败!") + return + } + task.TaskStatus = sc.TASK_STATUS_ING + task.TriggerType = sc.TRIGGER_TYPE_MANUAL + _, err = task.Create() + if err != nil { + log.Errorf("生成调度任务失败:%v,事件ID:%s", err, eventId) + controller.FailCode(c, errors.ServerError, err, "生成调度任务失败!") + return + } + } else { + taskRecord.TriggerType = sc.TRIGGER_TYPE_MANUAL + taskRecord.StartTime = time.Now() + taskRecord.EventId = eventId + taskRecord.PlanId = body.PlanId + taskRecord.HandleAdvice = body.HandleAdvice + taskRecord.HandleTime = time.Now() + err = schedule_engine.PlanHandle(taskRecord.PlanId, taskRecord.Id, "", record) + if err != nil { + log.Errorf("%v", err) + controller.FailCode(c, errors.ServerError, err, "调度失败!") + return + } + taskRecord.TaskStatus = sc.TASK_STATUS_ING + _, err = taskRecord.Update(nil) + if err != nil { + log.Errorf("生成调度任务失败:%v,事件ID:%s", err, eventId) + controller.FailCode(c, errors.ServerError, err, "生成调度任务失败!") + return + } + } + controller.Success(c, "") +} + +type TaskCallBackBody struct { + Status string `json:"status" validate:"required"` // 1:成功,2:失败 + EndTime int64 `json:"endTime"` //秒级时间戳 +} + +// 调度任务回调 +func TaskCallBack(c *gin.Context) { + taskId := c.Param("taskId") + var body TaskCallBackBody + err := c.ShouldBindJSON(&body) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + task := &sc.SchedTask{} + fields := map[string]interface{}{} + fields["id"] = taskId + taskRecord, err := task.Get(fields) + if err != nil { + log.Errorf("回调任务失败:%v", err) + controller.FailCode(c, errors.InvalidParameter, err, "未找到调度任务,请检查参数!") + return + } + taskRecord.TaskStatus = body.Status + if body.EndTime <= 0 { + taskRecord.EndTime = time.Now() + } else { + taskRecord.EndTime = time.Unix(body.EndTime, 22) + } + _, err = taskRecord.Update(nil) + + // todo 将事件更新至事件历史表(一删一增) + + if err != nil { + log.Errorf("更新回调任务失败:%v", err) + controller.FailCode(c, errors.ServerError, err, "内部错误!") + return + } + go func() { + evt := &event.EventRecord{} + f := map[string]interface{}{} + f["id"] = taskRecord.EventId + e, err := evt.Get(f) + if err == nil { + eh := &event.HistoryEventRecord{ + Id: e.Id, + EventName: e.EventName, + EventKey: e.EventKey, + Level: e.Level, + ResourceId: e.ResourceId, + ResourceName: e.ResourceName, + ResourceType: e.ResourceType, + ResourceNode: e.ResourceNode, + EventTime: e.EventTime, + EventInfo: e.EventInfo, + OperatorUser: taskRecord.HandleUsername, + OperatorFinishTime: taskRecord.EndTime, + CreateTime: time.Now(), + } + rows, _ := eh.SaveOrUpdate() + if rows > 0 { + e.Delete() + } + } + }() + controller.Success(c, "回调成功") +} + +// 任务状态数统计 +func CountTaskStatus(c *gin.Context) { + task := &sc.SchedTask{} + result, err := task.CountStatusNum() + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + controller.Success(c, result) +} + +// 调度任务自动化率 +func AutoRatio(c *gin.Context) { + task := &sc.SchedTask{} + result, err := task.AutoRatio() + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "数据库异常!") + return + } + controller.Success(c, result) +} diff --git a/server/internal/controller/v1/statistic.go b/server/internal/controller/v1/statistic.go new file mode 100644 index 0000000..76163dd --- /dev/null +++ b/server/internal/controller/v1/statistic.go @@ -0,0 +1,232 @@ +package v1 + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + devc "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/device" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/gin-gonic/gin" + "strconv" + "strings" + "time" +) + +func GetDeviceOnlineStatistic(c *gin.Context) { + duration := c.Query("duration") + if len(duration) <= 1 { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + var timeDuration time.Duration + if strings.HasSuffix(duration, "h") { + timeDuration = time.Hour + } else if strings.HasSuffix(duration, "m") { + timeDuration = time.Minute + } else { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + timeInt, err := strconv.ParseInt(duration[0:len(duration)-1], 10, 64) + if err != nil || timeInt <= 0 { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + if timeInt > 1440 || (timeDuration == time.Hour && timeInt > 24) { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + result := make(map[string]int) + + now := time.Now() + todayBegin := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + timeInterval := time.Duration((timeInt - 1) * timeDuration.Nanoseconds()) + timeIntervalStart := todayBegin + var timeIntervalEnd time.Time + sql := "SELECT CASE " + for timeIntervalStart.Before(now) { + timeIntervalEnd = timeIntervalStart.Add(timeInterval) + timeStartStr := timeIntervalStart.Format("200601021504") + timeEndStr := timeIntervalEnd.Format("200601021504") + sql += "WHEN id BETWEEN '" + timeStartStr + "' AND '" + timeEndStr + "' THEN '" + timeStartStr + "' " + result[timeStartStr] = 0 + timeIntervalStart = timeIntervalEnd.Add(timeDuration) + } + + sql += "END AS time, MAX(count) AS count FROM perc_device_online_count WHERE id >= '" + todayBegin.Format("200601021504") + "' AND id <= '" + now.Format("200601021504") + "' GROUP BY time;" + + d := device.DeviceOnlineCount{} + tResult, err := d.Query(sql) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + for _, item := range tResult { + result[item.Time] = item.Count + } + + delete(result, "") + + controller.Success(c, result) +} + +func GetDeviceUsageRate(c *gin.Context) { + d := &devc.DeviceInfo{} + + result, err := d.GetHistoryUsageRate() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + result1, err := d.GetTodayUsageRate() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + result["today"] = result1["today"] + + controller.Success(c, result) +} + +type DeviceOperateLogCondition struct { + PageInfo *request.PageInfo `json:"pageInfo" binding:"required"` + StartTime *time.Time `json:"startTime"` + EndTime *time.Time `json:"endTime"` + Operate string `json:"operate"` +} + +func GetDeviceOperateLog(c *gin.Context) { + serialNo := c.Param("serialNo") + + var body DeviceOperateLogCondition + err := c.ShouldBindJSON(&body) + if err != nil { + controller.FailCode(c, errors.InvalidParameter, err, "请检查参数!") + return + } + + op := &devc.DeviceOperateLog{} + fields := make(map[string]interface{}) + fields["serial_no"] = serialNo + if body.StartTime != nil { + fields["operate_time >"] = body.StartTime + } else { + now := time.Now() + todayBegin := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + fields["operate_time >"] = todayBegin + } + + if body.EndTime != nil { + fields["operate_time <"] = body.EndTime + } + + if len(body.Operate) > 0 { + fields["operate"] = body.Operate + } + + page := &model.Page[devc.DeviceOperateLog]{ + CurrentPage: body.PageInfo.CurrentPage, + PageSize: body.PageInfo.PageSize, + Order: body.PageInfo.Order, + } + + err = op.Page(page, fields) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + if page.Data == nil { + page.Data = []devc.DeviceOperateLog{} + } + + controller.Success(c, page) +} + +func GetDeviceRunTime(c *gin.Context) { + serialNo := c.Param("serialNo") + duration := c.Query("duration") + + result := make(map[string]int) + d := &devc.DeviceRunTime{} + now := time.Now() + var startDate string + if duration == "day" { + nowStr := now.Format("20060102") + tResult, err := d.GetRunTimeByDay(serialNo, nowStr) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + result[nowStr] = tResult.RunTime + } else if duration == "month" { + startDate = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()).Format("20060102") + endDate := now.Format("20060102") + tmp, err := d.StatisticRunTimeByDuration(serialNo, startDate, endDate) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + tDate := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) + for tDate.Before(now) { + result[tDate.Format("20060102")] = 0 + tDate = tDate.Add(24 * time.Hour) + } + + for _, runTime := range tmp { + result[runTime.Date] = runTime.RunTime + } + } else { + controller.FailCode(c, errors.InvalidParameter, nil, "请检查参数!") + return + } + + controller.Success(c, result) +} + +func GetAllDeviceRunTime(c *gin.Context) { + d := &devc.DeviceRunTime{} + result, err := d.StatisticRunTimeByAllDevice() + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + controller.Success(c, result) +} + +func GetDeviceBootCount(c *gin.Context) { + serialNo := c.Param("serialNo") + + d := &devc.DeviceOperateLog{} + now := time.Now() + monthBegin := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location()) + startDate := monthBegin.Format("2006-01-02 15:04:05.999999999 -0700") + endDate := now.Format("2006-01-02 15:04:05.999999999 -0700") + tResult, err := d.StatisticDeviceBootCountByDuration(serialNo, startDate, endDate) + if err != nil { + controller.FailCode(c, errors.ServerError, err, "服务异常!") + return + } + + result := make(map[string]int) + tDate := monthBegin + for tDate.Before(now) { + result[tDate.Format("20060102")] = 0 + tDate = tDate.Add(24 * time.Hour) + } + + for _, dateCount := range tResult { + result[dateCount.Date] = dateCount.Count + } + + controller.Success(c, result) +} diff --git a/server/internal/middleware/app_context.go b/server/internal/middleware/app_context.go new file mode 100644 index 0000000..5de3602 --- /dev/null +++ b/server/internal/middleware/app_context.go @@ -0,0 +1,27 @@ +package middleware + +import ( + "github.com/gin-gonic/gin" +) + +const ( + CLUSTERID = "clusterId" + NAMESPACE = "namespace" +) + +func AppContextHandler() gin.HandlerFunc { + return func(c *gin.Context) { + ns := c.Request.Header.Get("namespace") + if len(ns) != 0 { + c.Set(NAMESPACE, ns) + } + + clusterId := c.Param("cluster") + if len(clusterId) != 0 { + c.Set(CLUSTERID, clusterId) + } + + c.Next() + } + +} diff --git a/server/internal/middleware/authentication.go b/server/internal/middleware/authentication.go new file mode 100644 index 0000000..e954de6 --- /dev/null +++ b/server/internal/middleware/authentication.go @@ -0,0 +1,230 @@ +package middleware + +import ( + "crypto/tls" + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/auth" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/authen" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "github.com/gin-gonic/gin" + "github.com/golang/glog" + "gorm.io/gorm" + "io" + "net/http" + "regexp" +) + +const ( + LoginUserKey = "login-user" +) + +func AuthenticationHandler() gin.HandlerFunc { + return func(c *gin.Context) { + + match, _ := regexp.MatchString("/healthz", c.Request.RequestURI) + if match { + c.Next() + return + } + match, _ = regexp.MatchString("/run", c.Request.RequestURI) + if match { + c.Next() + return + } + match, _ = regexp.MatchString("/login", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/api/v1/socket/*", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/api/v1/*", c.Request.RequestURI) + if match { + rawToken := c.Request.Header.Get("Authorization") + if rawToken == "" { + glog.Warning("unauthorized access, token not specified") + response.Resp().FailCode(c, errors.AuthorizationError, "token should be specified in header with 'Authorization' key") + return + } + + //todo 临时用 + if config.Config.AppConfig.Debug { + if rawToken == "mock token" { + u, _ := user.GetUserByUsername("admin") + c.Set(LoginUserKey, u) + c.Next() + return + } + } + + var username, apiToken string + ok, bearerToken := authen.JWTAuthorizer.IsBearerToken(rawToken) + if ok { + loginInfo, err := auth.Validate(bearerToken) + //marshal, _ := json.Marshal(loginInfo) + //fmt.Print(string(marshal)) + + if err != nil { + if authen.JWTAuthorizer.IsTokenExpired(err) { + glog.Warning("unauthorized access, bearer token expired") + response.Resp().FailCode(c, errors.AuthorizationError, "bearer token expired") + return + } + glog.Warningf("validate bearer token failed, %s", err) + response.Resp().FailCode(c, errors.AuthorizationError, fmt.Sprint("validate bearer token failed, %s", err)) + return + } + username = loginInfo.Username + apiToken = loginInfo.Token + } else { + glog.Warningf("validate bearer token failed") + response.Resp().FailCode(c, errors.AuthorizationError, "validate bearer token failed") + + return + } + + u, err := user.GetUserByUsername(username) + if err != nil { + // 适配算网用户,支持单点登录 + if config.Config.CfnConfig.Enable { + u, err = CheckUserLogin(c) + if err != nil { + glog.Errorf("unauthorized access, user not found or not login, %s", username) + response.Resp().FailCode(c, errors.AuthorizationError, "user not found or not login") + return + } + // todo? + u.APIToken = apiToken + } else { + if err == gorm.ErrRecordNotFound { + glog.Errorf("unauthorized access, user not found, %s", username) + response.Resp().FailCode(c, errors.AuthorizationError, "user not found") + return + } + glog.Errorf("get user from db failed, user %s, %s", username, err) + response.Resp().FailCode(c, errors.ServerError, fmt.Sprintf("get user from db failed, user %s, %s", username, err)) + + return + } + } + + if apiToken != "" && apiToken != u.APIToken { + glog.Warningf("unauthorized access, password mismatch, user %s", username) + response.Resp().FailCode(c, errors.AuthorizationError, "password mismatch") + return + } + + c.Set(LoginUserKey, u) + c.Next() + } + + //match, _ = regexp.MatchString("/", c.Request.RequestURI) + //if match { + // c.Next() + // return + //} + + } +} + +const AUTH_HEADER = "Authorization" + +func CheckUserLogin(c *gin.Context) (*user.UserObj, error) { + url := config.Config.Auth.Url + if url == "" { + return nil, errors.NewBusinessError(errors.ServerError, "login config is not set!") + } + token := c.Request.Header.Get(AUTH_HEADER) + + var client *http.Client + var request *http.Request + var resp *http.Response + client = &http.Client{Transport: &http.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }} + request, err := http.NewRequest("GET", url+config.Config.Auth.LoginInfo, nil) + if err != nil { + glog.Errorln("failed to create request [Get LoginInfo]!", err) + return nil, errors.NewBusinessError(errors.ServerError, "failed to create request [Get LoginInfo]!") + } + request.Header.Add(AUTH_HEADER, token) + resp, err = client.Do(request) + if err != nil { + glog.Errorln("failed to request [Get LoginInfo]!", err) + return nil, errors.NewBusinessError(errors.ServerError, "failed to request [Get LoginInfo]!") + } + defer resp.Body.Close() + defer client.CloseIdleConnections() + if resp.StatusCode != 200 { + glog.Errorln("response error [Get LoginInfo]!") + glog.Errorln("response status code: %d, %s", resp.StatusCode, resp.Body) + return nil, errors.NewBusinessError(errors.ServerError, "response error [Get LoginInfo]!") + } + + var respBody map[string]interface{} + respStr, _ := io.ReadAll(resp.Body) + err = json.Unmarshal(respStr, &respBody) + if err != nil { + glog.Errorln("failed to decode response [Get LoginInfo]!", err) + return nil, errors.NewBusinessError(errors.ServerError, "failed to decode response [Get LoginInfo]!") + } + + data := respBody["data"] + if data == nil { + meta := respBody["meta"] + return nil, fmt.Errorf("failed to get user info from login server! %s", meta) + } + + userObj := &user.UserObj{} + userMap := data.(map[string]interface{})["user"] + + userId := userMap.(map[string]interface{})["userId"] + if userId != nil { + userObj.UserID = userId.(string) + } + + cn := userMap.(map[string]interface{})["cn"] + if cn != nil { + userObj.DisplayName = cn.(string) + } + mobile := userMap.(map[string]interface{})["mobile"] + if mobile != nil { + userObj.Mobile = mobile.(string) + } + provinceId := userMap.(map[string]interface{})["provinceId"] + if provinceId != nil { + userObj.ProvinceId = provinceId.(string) + } + userObj.Status = userMap.(map[string]interface{})["status"].(string) + + accountMap := data.(map[string]interface{})["account"] + userName := accountMap.(map[string]interface{})["loginName"] + if userName != nil { + userObj.UserName = userName.(string) + } + + if userName == "admin" { + userObj.Role = 1 + } else { + userObj.Role = 0 + } + + if config.Config.CfnConfig.Enable { + userObj.Namespace = fmt.Sprintf("DEFAULT,%s", config.Config.CfnConfig.CfnWorkSpaceId) + } else { + userObj.Namespace = "DEFAULT" + } + + return userObj, nil +} diff --git a/server/internal/middleware/authorization.go b/server/internal/middleware/authorization.go new file mode 100644 index 0000000..131e31d --- /dev/null +++ b/server/internal/middleware/authorization.go @@ -0,0 +1,49 @@ +package middleware + +import ( + "github.com/gin-gonic/gin" + "github.com/golang/glog" + "regexp" +) + +func AuthorizationHandler() gin.HandlerFunc { + return func(c *gin.Context) { + + match, _ := regexp.MatchString("/healthz", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/run", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/login", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/api/v1/socket/*", c.Request.RequestURI) + if match { + c.Next() + return + } + + match, _ = regexp.MatchString("/api/v1/*", c.Request.RequestURI) + if match { + _, exist := c.Get(LoginUserKey) + if !exist { + glog.Fatal("Authorization middleware should work together with Authentication middleware") + c.Next() + return + } + + c.Next() + } + + } +} diff --git a/server/internal/middleware/cors.go b/server/internal/middleware/cors.go new file mode 100644 index 0000000..43bbab5 --- /dev/null +++ b/server/internal/middleware/cors.go @@ -0,0 +1,10 @@ +package middleware + +import ( + "github.com/gin-contrib/cors" + "github.com/gin-gonic/gin" +) + +func CorsHandler() gin.HandlerFunc { + return cors.Default() +} diff --git a/server/internal/middleware/logger.go b/server/internal/middleware/logger.go new file mode 100644 index 0000000..32efe7f --- /dev/null +++ b/server/internal/middleware/logger.go @@ -0,0 +1,53 @@ +package middleware + +import ( + "bytes" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "go.uber.org/zap" + "time" +) + +type responseWriter struct { + gin.ResponseWriter + body *bytes.Buffer +} + +func (w responseWriter) Write(b []byte) (int, error) { + w.body.Write(b) + return w.ResponseWriter.Write(b) +} + +func (w responseWriter) WriteString(s string) (int, error) { + w.body.WriteString(s) + return w.ResponseWriter.WriteString(s) +} + +// CustomLogger 接收gin框架默认的日志 +func CustomLogger() gin.HandlerFunc { + return func(c *gin.Context) { + blw := &responseWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer} + c.Writer = blw + // 读取body数据 + //body := request.GetBody(c) + c.Next() + + cost := time.Since(c.GetTime("requestStartTime")) + if config.Config.AppEnv != "production" { + path := c.Request.URL.Path + log.Logger.Info(path, + zap.Int("status", c.Writer.Status()), + zap.String("method", c.Request.Method), + zap.String("path", path), + zap.String("query", c.Request.URL.RawQuery), + //zap.Any("body", string(body)), + zap.String("ip", c.ClientIP()), + zap.String("user-agent", c.Request.UserAgent()), + zap.String("errors", c.Errors.ByType(gin.ErrorTypePrivate).String()), + zap.String("cost", cost.String()), + //zap.String("response", blw.body.String()), + ) + } + } +} diff --git a/server/internal/middleware/recovery.go b/server/internal/middleware/recovery.go new file mode 100644 index 0000000..42e7c95 --- /dev/null +++ b/server/internal/middleware/recovery.go @@ -0,0 +1,40 @@ +package middleware + +import ( + "errors" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + e "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + response2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/gin-gonic/gin" + "net/http" + "strings" +) + +// CustomRecovery 自定义错误 (panic) 拦截中间件、对可能发生的错误进行拦截、统一记录 +func CustomRecovery() gin.HandlerFunc { + DefaultErrorWriter := &PanicExceptionRecord{} + return gin.RecoveryWithWriter(DefaultErrorWriter, func(c *gin.Context, err interface{}) { + // 这里针对发生的panic等异常进行统一响应即 + // 这里针对发生的panic等异常进行统一响应即 + errStr := "" + if config.Config.Debug == true { + errStr = fmt.Sprintf("%v", err) + } + response2.Resp().SetHttpCode(http.StatusInternalServerError).FailCode(c, e.ServerError, errStr) + }) +} + +// PanicExceptionRecord panic等异常记录 +type PanicExceptionRecord struct{} + +func (p *PanicExceptionRecord) Write(b []byte) (n int, err error) { + s1 := "An error occurred in the server's internal code:" + var build strings.Builder + build.WriteString(s1) + build.Write(b) + errStr := build.String() + log.Error(errStr) + return len(errStr), errors.New(errStr) +} diff --git a/server/internal/middleware/request_cost.go b/server/internal/middleware/request_cost.go new file mode 100644 index 0000000..2fb0e1a --- /dev/null +++ b/server/internal/middleware/request_cost.go @@ -0,0 +1,13 @@ +package middleware + +import ( + "github.com/gin-gonic/gin" + "time" +) + +func RequestCostHandler() gin.HandlerFunc { + return func(c *gin.Context) { + c.Set("requestStartTime", time.Now()) + c.Next() + } +} diff --git a/server/internal/middleware/vue_embed.go b/server/internal/middleware/vue_embed.go new file mode 100644 index 0000000..591ff03 --- /dev/null +++ b/server/internal/middleware/vue_embed.go @@ -0,0 +1,93 @@ +package middleware + +import ( + "embed" + "github.com/gin-gonic/gin" + "io/fs" + "net/http" + "os" + "path" + "strings" +) + +const INDEX = "index.html" + +type ServeFileSystem interface { + http.FileSystem + Exists(prefix string, path string) bool +} + +type localFileSystem struct { + http.FileSystem + root string + indexes bool +} + +func LocalFile(root string, indexes bool) *localFileSystem { + return &localFileSystem{ + FileSystem: gin.Dir(root, indexes), + root: root, + indexes: indexes, + } +} + +func (l *localFileSystem) Exists(prefix string, filepath string) bool { + if p := strings.TrimPrefix(filepath, prefix); len(p) < len(filepath) { + name := path.Join(l.root, p) + stats, err := os.Stat(name) + if err != nil { + return false + } + if stats.IsDir() { + if !l.indexes { + index := path.Join(name, INDEX) + _, err := os.Stat(index) + if err != nil { + return false + } + } + } + return true + } + return false +} + +func ServeRoot(urlPrefix, root string) gin.HandlerFunc { + return Serve(urlPrefix, LocalFile(root, false)) +} + +// Static returns a middleware handler that serves static files in the given directory. +func Serve(urlPrefix string, fs ServeFileSystem) gin.HandlerFunc { + fileserver := http.FileServer(fs) + if urlPrefix != "" { + fileserver = http.StripPrefix(urlPrefix, fileserver) + } + return func(c *gin.Context) { + if fs.Exists(urlPrefix, c.Request.URL.Path) { + fileserver.ServeHTTP(c.Writer, c.Request) + c.Abort() + } + } +} + +type embedFileSystem struct { + http.FileSystem +} + +func (e embedFileSystem) Exists(prefix string, path string) bool { + _, err := e.Open(path) + if err != nil { + return false + } + return true +} + +func EmbedFolder(fsEmbed embed.FS, targetPath string) ServeFileSystem { + fsys, err := fs.Sub(fsEmbed, targetPath) + if err != nil { + panic(err) + } + return embedFileSystem{ + FileSystem: http.FS(fsys), + } +} diff --git a/server/internal/model/agent/agent_info.go b/server/internal/model/agent/agent_info.go new file mode 100644 index 0000000..41bd149 --- /dev/null +++ b/server/internal/model/agent/agent_info.go @@ -0,0 +1,127 @@ +package agent + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "gorm.io/gorm" + "time" +) + +const ( + OS_WINDOWS = "Windows" + OS_LINUX = "Linux" + OS_LINUX_LIST = "Ubuntu,CentOS,KylinOS" + OS_LINUX_UBUNTU = "Ubuntu" + OS_LINUX_CENTOS = "CentOS" + OS_LINUX_KylinOS = "KylinOS" +) + +// 小助手信息 +// 表名:perc_agent_info +type AgentInfo struct { + Id string `gorm:"column:id;primaryKey" json:"id"` //type:string comment:主键 version:2023-9-11 14:25 + Version string `gorm:"column:version" json:"version" validate:"required"` //type:string comment:版本 version:2023-9-11 14:25 + VersionNum int64 `gorm:"column:version_num" json:"versionNum"` //type:int comment:版本排序号 + OsPlatform string `gorm:"column:os_platform" json:"osPlatform"` //type:string comment:操作系统平台;字典:Windows\Linux + OsType string `gorm:"column:os_type" json:"osType" validate:"required"` //type:string comment:操作系统类型;字典:Windows\Ubuntu\CentOS\KylinOS version:2023-9-11 14:25 + ArchType string `gorm:"column:arch_type" json:"archType" validate:"required"` //type:string comment:芯片架构类型;字典: X86\ARM version:2023-9-11 14:25 + PackageUrl string `gorm:"column:package_url" json:"packageUrl"` //type:string comment:程序包地址;oss地址 version:2023-9-11 14:25 + BucketName string `gorm:"column:bucket_name" json:"bucketName"` //type:string comment:桶名称 + Filename string `gorm:"column:filename" json:"filename"` //type:string comment:文件名称 + CompressionType string `gorm:"column:compression_type" json:"compressionType"` //type:string comment:压缩格式 + Command string `gorm:"column:command" json:"command"` //type:string comment:启动命令 + Describe string `gorm:"column:describe" json:"describe"` //type:string comment:描述 version:2023-9-11 14:25 + CreateBy string `gorm:"column:create_by" json:"createBy"` //type:string comment:创建人 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:*time.Time comment:创建时间 version:2023-9-11 14:25 + UpdateTime time.Time `gorm:"column:update_time" json:"updateTime"` //type:*time.Time comment:更新时间 +} + +func (AgentInfo) TableName() string { + return "perc_agent_info" +} + +func (a *AgentInfo) Create() (int64, error) { + a.CreateTime = time.Now() + a.UpdateTime = time.Now() + a.Id = utils.NewAgentID() + + tx := model.DB().Create(a) + + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (a *AgentInfo) CreateBatch(agents []AgentInfo) (int64, error) { + for i, _ := range agents { + agents[i].CreateTime = time.Now() + agents[i].UpdateTime = time.Now() + agents[i].Id = utils.NewAgentID() + } + tx := model.DB().CreateInBatches(agents, len(agents)) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (a *AgentInfo) Delete() (int64, error) { + tx := model.DB().Delete(a) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (a *AgentInfo) Update(fields []string) (int64, error) { + a.UpdateTime = time.Now() + tx := model.DB().Model(&a).Select(fields).Updates(a) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (a *AgentInfo) Get(fields map[string]interface{}) (AgentInfo, error) { + agent := AgentInfo{} + tx := model.DB().Where(fields).First(&agent) + if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { + return agent, tx.Error + } + return agent, nil +} + +func (a *AgentInfo) HasNewVersion(fields map[string]interface{}) (bool, error) { + cout := int64(0) + tx := model.DB().Model(a).Where("os_type=? and arch_type=? and version_num >=?", fields["os_type"], fields["arch_type"], fields["version_num"]).Count(&cout) + if tx.Error != nil || cout > int64(0) { + return true, tx.Error + } + return false, nil +} + +// 获取最近的版本 +func (a *AgentInfo) ListLastVersion() ([]AgentInfo, error) { + agents := []AgentInfo{} + tx := model.DB().Raw("SELECT * FROM perc_agent_info A INNER JOIN (SELECT os_type,arch_type,MAX (version_num) AS version_num FROM perc_agent_info GROUP BY os_type,arch_type) b ON A.arch_type=b.arch_type AND A.os_type=b.os_type AND A.version_num=b.version_num").Find(&agents) + if tx.Error != nil { + return nil, tx.Error + } + return agents, nil +} + +func (a *AgentInfo) Page(page *model.Page[AgentInfo], fields map[string]interface{}) error { + keyword := fields["keyword"] + query := model.DB() + if keyword != "" { + keyword = fmt.Sprintf("%%%s%%", keyword) + query = query.Where("concat(version,os_platform,os_type,arch_type,describe) like ?", keyword) + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/model/app_manage/data/agent_whitelist.go b/server/internal/model/app_manage/data/agent_whitelist.go new file mode 100644 index 0000000..b063b96 --- /dev/null +++ b/server/internal/model/app_manage/data/agent_whitelist.go @@ -0,0 +1,6 @@ +package data + +type AgentWhitelist struct { + // 项目目录白名单、日志文件白名单 + Project []string `json:"project"` +} diff --git a/server/internal/model/app_manage/node/machine_node.go b/server/internal/model/app_manage/node/machine_node.go new file mode 100644 index 0000000..fe5b412 --- /dev/null +++ b/server/internal/model/app_manage/node/machine_node.go @@ -0,0 +1,96 @@ +package node + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/secure" + "gorm.io/gorm" +) + +type MachineNode struct { + model.BaseUserModifyDbModel + Name string `gorm:"column:name" json:"name"` + HostName string `gorm:"column:hostname" json:"hostName"` + OsName string `gorm:"column:os_name" json:"osName"` + OsOccupyCpu float64 `gorm:"column:os_occupy_cpu" json:"osOccupyCpu"` + OsOccupyMemory float64 `gorm:"column:os_occupy_memory" json:"osOccupyMemory"` + OsOccupyDisk float64 `gorm:"column:os_occupy_disk" json:"osOccupyDisk"` + HostIpv4s string `gorm:"column:host_ipv4s" json:"hostIpv4s"` + Status int `gorm:"column:status" json:"status,omitempty"` // 假设可以为null + StatusMsg string `gorm:"column:status_msg" json:"statusMsg"` + TransportMode int `gorm:"column:transport_mode" json:"transportMode,omitempty"` + CfnAgentUrl string `gorm:"column:cfn_agent_url" json:"cfnAgentUrl"` + CfnAgentUsername string `gorm:"column:cfn_agent_username" json:"cfnAgentUsername"` + CfnAgentPassword string `gorm:"column:cfn_agent_password" json:"cfnAgentPassword"` + CfnAgentProtocol string `gorm:"column:cfn_agent_protocol" json:"cfnAgentProtocol"` + CfnAgentTimeout int `gorm:"column:cfn_agent_timeout" json:"cfnAgentTimeout,omitempty"` + CfnAgentHttpProxy string `gorm:"column:cfn_agent_http_proxy" json:"cfnAgentHttpProxy"` + CfnAgentHttpProxyType string `gorm:"column:cfn_agent_http_proxy_type" json:"cfnAgentHttpProxyType"` + CfnAgentVersion string `gorm:"column:cfn_agent_version" json:"cfnAgentVersion"` + CfnAgentUptime int64 `gorm:"column:cfn_agent_uptime" json:"cfnAgentUptime"` + CfnAgentBuildTime int64 `gorm:"column:cfn_agent_build_time" json:"cfnAgentBuildTime"` + CfnAgentProjectCount int `gorm:"column:cfn_agent_project_count" json:"cfnAgentProjectCount,omitempty"` + CfnAgentScriptCount int `gorm:"column:cfn_agent_script_count" json:"cfnAgentScriptCount,omitempty"` + JavaVersion string `gorm:"column:java_version" json:"javaVersion"` + JvmTotalMemory int64 `gorm:"column:jvm_total_memory" json:"jvmTotalMemory,omitempty"` + JvmFreeMemory int64 `gorm:"column:jvm_free_memory" json:"jvmFreeMemory,omitempty"` + TemplateNode int `gorm:"column:template_node" json:"templateNode,omitempty"` + InstallId string `gorm:"column:install_id" json:"installId"` + TransportEncryption int `gorm:"column:transport_encryption" json:"transportEncryption,omitempty"` // 传输加密方式 0 不加密 1 BASE64 2 AES + Group string `gorm:"column:group_name" json:"groupName"` +} + +func NewMachine() *MachineNode { + n := &MachineNode{} + n.Handler = n + return n +} + +func (*MachineNode) TableName() string { + return "sched_machine_node_info" +} + +func (m *MachineNode) ListGroup() ([]string, error) { + var result []string + tx := model.DB().Table(m.TableName()).Select("group_name").Distinct().Scan(&result) + return result, tx.Error +} + +func (*MachineNode) FindResult(db *gorm.DB) (interface{}, error) { + var result []MachineNode + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (m *MachineNode) Authorize() string { + return secure.Sha1Encrypt(m.CfnAgentUsername + "@" + m.CfnAgentPassword) +} + +// 根据Name查询MachineNode是否存在 +func (m *MachineNode) ExistMachineNodeByName(name string) (bool, error) { + var count int64 + tx := model.DB().Table(m.TableName()).Where("name = ?", name).Count(&count) + return count > 0, tx.Error +} + +// 根据CfnAgentUrl查询MachineNode是否存在 +func (m *MachineNode) ExistMachineNodeByCfnAgentUrl(url string) (bool, error) { + var count int64 + tx := model.DB().Table(m.TableName()).Where("cfn_agent_url = ?", url).Count(&count) + return count > 0, tx.Error +} + +// 根据CfnAgentUrl查询MachineNode +func (m *MachineNode) GetMachineNodeByCfnAgentUrl(url string) (*MachineNode, error) { + var result MachineNode + tx := model.DB().Table(m.TableName()).Where("cfn_agent_url = ?", url).First(&result) + return &result, tx.Error +} + +// 更新MachineNode的CfnAgentPassword +func (m *MachineNode) UpdateMachineNodeCfnAgentPassword(url, password string) error { + tx := model.DB().Table(m.TableName()).Where("cfn_agent_url = ?", url).Update("cfn_agent_password", password) + return tx.Error +} diff --git a/server/internal/model/app_manage/node/node.go b/server/internal/model/app_manage/node/node.go new file mode 100644 index 0000000..e00246a --- /dev/null +++ b/server/internal/model/app_manage/node/node.go @@ -0,0 +1,72 @@ +package node + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" +) + +type Node struct { + model.BaseMachineModel + Url string `gorm:"column:url" json:"url"` + LoginName string `gorm:"column:login_name" json:"loginName"` + LoginPwd string `gorm:"column:login_pwd" json:"loginPwd"` + Name string `gorm:"column:name" json:"name"` + Protocol string `gorm:"column:protocol" json:"protocol"` + OpenStatus int `gorm:"column:open_status" json:"openStatus"` + TimeOut int `gorm:"column:timeout" json:"timeOut"` + HttpProxy string `gorm:"column:http_proxy" json:"httpProxy"` + HttpProxyType string `gorm:"column:http_proxy_type" json:"httpProxyType"` + SortValue float32 `gorm:"column:sort_value" json:"sortValue"` + MachineNodeData *MachineNode `gorm:"-" json:"machineNodeData"` +} + +func New() *Node { + n := &Node{} + n.Handler = n + return n +} + +func (*Node) TableName() string { + return "sched_node_info" +} + +func (n *Node) ListGroup() ([]string, error) { + var result []string + tx := model.DB().Table(n.TableName()).Select("\"group\"").Distinct().Scan(&result) + return result, tx.Error +} + +func (n *Node) FindResult(db *gorm.DB) (interface{}, error) { + var result []Node + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +// 根据节点id获取节点信息 +func GetNodeById(id string) *Node { + node := New() + model.DB().Where("id = ?", id).First(node) + return node +} + +// 根据节点id批量获取节点信息 +func GetNodeByIds(ids []string) []Node { + var nodes []Node + model.DB().Where("id in (?)", ids).Find(&nodes) + return nodes +} + +// 根据工作空间(WorkspaceId)计算节点数量 +func CountNodeByWorkspaceId(workspaceId string) (int64, error) { + var count int64 + tx := model.DB().Table(New().TableName()).Where("workspace_id = ?", workspaceId).Count(&count) + return count, tx.Error +} + +// 根据MachineId更新Node的LoginPwd +func UpdateNodeLoginPwdByMachineId(machineId string, loginPwd string) error { + return model.DB().Table(New().TableName()).Where("machine_id = ?", machineId).Update("login_pwd", loginPwd).Error +} diff --git a/server/internal/model/app_manage/out_giving/after_opt/after_opt.go b/server/internal/model/app_manage/out_giving/after_opt/after_opt.go new file mode 100644 index 0000000..99c035a --- /dev/null +++ b/server/internal/model/app_manage/out_giving/after_opt/after_opt.go @@ -0,0 +1,8 @@ +package after_opt + +const ( + No = 0 + Restart = 1 + Order_Must_Restart = 2 + Order_Restart = 3 +) diff --git a/server/internal/model/app_manage/out_giving/out_giving_instance_log.go b/server/internal/model/app_manage/out_giving/out_giving_instance_log.go new file mode 100644 index 0000000..f04909f --- /dev/null +++ b/server/internal/model/app_manage/out_giving/out_giving_instance_log.go @@ -0,0 +1,39 @@ +package out_giving + +import ( + "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" +) + +type OutGivingExecLog struct { + Id string `gorm:"column:id;primary_key" json:"id"` + LogsId string `gorm:"column:logs_id" json:"logsId"` +} + +func (o *OutGivingExecLog) TableName() string { + return "sched_out_giving_instance_log" +} + +// 保存一条OutGivingExecLog +func SaveOutGivingExecLog(outGivingExecLog *OutGivingExecLog) error { + return model.DB().Create(outGivingExecLog).Error +} + +//// 根据Id查询OutGivingExecLog +//func GetOutGivingExecLogById(id string) (*OutGivingExecLog, error) { +// outGivingExecLog := new(OutGivingExecLog) +// return outGivingExecLog, model.DB().Where("id = ?", id).First(outGivingExecLog).Error +//} + +// 根据Id查询OutGivingExecLog +func GetOutGivingExecLogById(id string) (*OutGivingExecLog, error) { + outGivingExecLog := new(OutGivingExecLog) + if err := model.DB().Where("id = ?", id).First(outGivingExecLog).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil // 如果记录不存在,返回nil, nil + } + return nil, err // 其他类型的错误仍然返回 + } + return outGivingExecLog, nil +} diff --git a/server/internal/model/app_manage/out_giving/out_giving_log.go b/server/internal/model/app_manage/out_giving/out_giving_log.go new file mode 100644 index 0000000..e0630a1 --- /dev/null +++ b/server/internal/model/app_manage/out_giving/out_giving_log.go @@ -0,0 +1,94 @@ +package out_giving + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" + "time" +) + +// OutGivingLog 项目分发日志 +type OutGivingLog struct { + model.BaseWorkspaceModel + OutGivingID string `gorm:"column:out_giving_id;comment:'分发id'" json:"outGivingId"` // 分发id + Status int `gorm:"column:status;comment:'状态'" json:"status"` // 状态 + StartTime time.Time `gorm:"column:start_time" json:"startTime"` + EndTime time.Time `gorm:"column:end_time" json:"endTime"` + Result string `gorm:"column:result;comment:'处理消息'" json:"result"` // 处理消息 + NodeID string `gorm:"column:node_id;comment:'节点id'" json:"nodeId"` // 节点id + ProjectID string `gorm:"column:project_id;comment:'项目id'" json:"projectId"` // 项目id + FileSize int64 `gorm:"column:file_size;comment:'文件大小'" json:"fileSize"` // 文件大小 + ProgressSize int64 `gorm:"column:progress_size;comment:'进度信息'" json:"progressSize"` // 进度信息 + + // 由于Go不支持泛型且GORM没有直接的表关联继承模型的方式,此处省略了直接的“parents = OutGivingModel.class”等Java特定注解的转换。 + // 在Go中,通常会通过外键或者关联查询来实现类似的关系。 +} + +func NewOutGivingLog() *OutGivingLog { + n := &OutGivingLog{} + n.Handler = n + return n +} + +// TableName 自定义表名 +func (o *OutGivingLog) TableName() string { + return "sched_outgiving_log" +} + +func (o *OutGivingLog) FindResult(db *gorm.DB) (interface{}, error) { + var result []OutGivingLog + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (o *OutGivingLog) Page(page *model.Page[OutGivingLog], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + //query = query.Where(fields) + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +// 根据outGivingId删除OutGivingLog +func DeleteOutGivingLogByOutGivingId(outGivingId string) error { + return model.DB().Table(NewOutGivingLog().TableName()).Where("out_giving_id = ?", outGivingId).Delete(&OutGivingLog{}).Error +} + +// 批量保存OutGivingLog +func SaveOutGivingLog(outGivingLogs []OutGivingLog) error { + return model.DB().Create(&outGivingLogs).Error +} + +// 更新OutGivingLog +func UpdateOutGivingLog(outGivingLog *OutGivingLog) error { + return model.DB().Model(outGivingLog).Updates(outGivingLog).Error +} + +func CountOutGivingLogByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(NewOutGivingLog().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} + +// DeleteOutGivingLogByWorkspaceId +func DeleteOutGivingLogByWorkspaceId(workspaceId string) error { + return model.DB().Table(NewOutGivingLog().TableName()).Where("workspace_id = ?", workspaceId).Delete(&OutGivingLog{}).Error +} diff --git a/server/internal/model/app_manage/out_giving/out_giving_model.go b/server/internal/model/app_manage/out_giving/out_giving_model.go new file mode 100644 index 0000000..4736f29 --- /dev/null +++ b/server/internal/model/app_manage/out_giving/out_giving_model.go @@ -0,0 +1,305 @@ +package out_giving + +import ( + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/file_utils" + "gorm.io/gorm" + "sort" + "strings" +) + +const ( + // 不做任何操作 + No = 0 + // 并发重启 + Restart = 1 + // 完整顺序重启(有重启失败将结束本次) + Order_Must_Restart = 2 + // 顺序重启(有重启失败将继续) + Order_Restart = 3 +) + +// OutGivingModel 分发实体 +// 单文件分发或单压缩包分发 +type OutGivingModel struct { + model.BaseWorkspaceModel + Group *string `gorm:"column:group" json:"group"` + /** + * 名称 + */ + Name string `gorm:"column:name" json:"name"` + /** + * 分发间隔时间 + */ + IntervalTime int `gorm:"column:interval_time" json:"intervalTime"` + /** + * 节点下的项目列表 + */ + OutGivingNodeProjectList string `gorm:"column:out_giving_node_project_list" json:"outGivingNodeProjectList"` + /** + * 分发后的操作 + */ + AfterOpt int `gorm:"column:after_opt" json:"afterOpt"` + /** + * 是否清空旧包发布 + */ + ClearOld bool `gorm:"column:clear_old" json:"clearOld"` + /** + * 是否为单独创建的分发项目 + */ + OutGivingProject bool `gorm:"column:out_giving_project" json:"outGivingProject"` + /** + * 状态 + */ + Status int `gorm:"column:status" json:"status"` + /** + * 二级目录,LevelName + */ + SecondaryDirectory *string `gorm:"column:secondary_directory" json:"secondaryDirectory"` + /** + * 保存项目文件前先关闭 + */ + UploadCloseFirst bool `gorm:"column:upload_close_first" json:"uploadCloseFirst"` + /** + * 状态消息 + */ + StatusMsg string `gorm:"column:status_msg" json:"statusMsg"` + /** + * 构建发布状态通知 + */ + Webhook string `gorm:"column:webhook" json:"webhook"` +} + +// TableName sets the table name for GORM +func (*OutGivingModel) TableName() string { + return "sched_out_giving" +} + +func NewOutGivingModel() *OutGivingModel { + n := &OutGivingModel{} + n.Handler = n + return n +} + +func (o *OutGivingModel) FindResult(db *gorm.DB) (interface{}, error) { + var result []OutGivingModel + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (o *OutGivingModel) Page(page *model.Page[OutGivingModel], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + //query = query.Where(fields) + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +// 查询所有分发模型 +func ListOutGivingModel() []OutGivingModel { + var outGivingModel []OutGivingModel + model.DB().Table(NewOutGivingModel().TableName()).Find(&outGivingModel) + return outGivingModel +} + +// 根据Id 查询OutGivingModel +func GetOutGivingModelById(id string) *OutGivingModel { + var outGivingModel OutGivingModel + model.DB().Table(NewOutGivingModel().TableName()).Where("id = ?", id).First(&outGivingModel) + return &outGivingModel +} + +// 根据Id和WorkspaceId删除OutGivingModel,并返回受影响行数 +func DeleteOutGivingModelById(id string) (int64, error) { + tx := model.DB().Table(NewOutGivingModel().TableName()).Where("id = ?", id).Delete(&OutGivingModel{}) + return tx.RowsAffected, tx.Error +} + +// 更新分发模型 +func UpdateOutGivingModel(outGivingModel *OutGivingModel, updateFields []string) error { + return model.DB().Table(NewOutGivingModel().TableName()).Where("id = ?", outGivingModel.Id).Select(updateFields).Updates(outGivingModel).Error +} + +// ListByWorkspace 根据Workspace查询OutGivingModel +func ListOutGivingModelByWorkspace(workspaceId string) []OutGivingModel { + var outGivingModel []OutGivingModel + model.DB().Table(NewOutGivingModel().TableName()).Where("workspace_id = ?", workspaceId).Find(&outGivingModel) + return outGivingModel +} + +// 更新分发模型,将状态为out_giving.DONE的状态改为out_giving.ING +func UpdateOutGivingModelStatus(oldStatus int, newStatus int) (int64, error) { + updateSql := `UPDATE ` + NewOutGivingModel().TableName() + ` SET status=? WHERE status=?` + tx := model.DB().Table(NewOutGivingModel().TableName()).Exec(updateSql, newStatus, oldStatus) + return tx.RowsAffected, tx.Error +} + +// 指定workspaceId, nodeId,计算符合条件的项目数 +func ExistsOutGivingModel(workspaceId, nodeId string) (bool, error) { + var result int64 + tx := model.DB().Table(NewOutGivingModel().TableName()).Where("workspace_id = ? and node_id = ?", workspaceId, nodeId).Count(&result) + if tx.Error != nil { + return false, tx.Error + } + return result > 0, nil +} + +func CountOutGivingModelByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(NewOutGivingModel().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} + +// **************************************** + +// SetSecondaryDirectory validates and sets the secondary directory +func (o *OutGivingModel) SetSecondaryDirectory(secondaryDirectory string) error { + if secondaryDirectory != "" { + err := file_utils.CheckFilePathSlip(secondaryDirectory) + if err != nil { + return fmt.Errorf("二级目录不能越级: %w", err) + } + } + space := strings.TrimSpace(secondaryDirectory) + o.SecondaryDirectory = &space + return nil +} + +// GetOutGivingNodeProjectList converts the list string to a slice of OutGivingNodeProject +func (o *OutGivingModel) GetOutGivingNodeProjectList() []OutGivingNodeProject { + return o.GetOutGivingNodeProjectListBySelect("") +} + +// GetOutGivingNodeProjectListBySelect filters and sorts the list +func (o *OutGivingModel) GetOutGivingNodeProjectListBySelect(selectStr string) []OutGivingNodeProject { + var outGivingNodeProjects []OutGivingNodeProject + bytes := []byte(o.OutGivingNodeProjectList) + err := json.Unmarshal(bytes, &outGivingNodeProjects) + if err != nil { + return outGivingNodeProjects + } + + if outGivingNodeProjects == nil { + return outGivingNodeProjects + } + list := strings.Split(strings.TrimSpace(selectStr), ",") + for i := range outGivingNodeProjects { + if outGivingNodeProjects[i].SortValue != nil { + if outGivingNodeProjects[i].SortValue == nil { + outGivingNodeProjects[i].SortValue = &i + } + } + } + filteredProjects := filterAndSortProjects(outGivingNodeProjects, list) + return filteredProjects +} + +// filterAndSortProjects filters projects based on the selection and sorts them +func filterAndSortProjects(projects []OutGivingNodeProject, selection []string) []OutGivingNodeProject { + if len(selection) == 0 { + return projects + } + selectedProjects := projects[:0] + for _, project := range projects { + projectKey := fmt.Sprintf("%s@%s", project.ProjectId, project.NodeId) + if contains(selection, projectKey) { + selectedProjects = append(selectedProjects, project) + } + } + //sortedProjects := sortProjects(selectedProjects) + return selectedProjects +} + +// contains checks if the selection contains the given key +func contains(selection []string, key string) bool { + for _, s := range selection { + if s == "" { + return true + } + + if s == key { + return true + } + } + return false +} + +// sortProjects sorts projects by their sort value +func sortProjects(projects []OutGivingNodeProject) []OutGivingNodeProject { + sort.SliceStable(projects, func(i, j int) bool { + return *projects[i].SortValue < *projects[j].SortValue + }) + + return projects +} + +// SetOutGivingNodeProjectList updates the list string from a slice of OutGivingNodeProject +func (o *OutGivingModel) SetOutGivingNodeProjectList(outGivingNodeProjects []OutGivingNodeProject) { + if outGivingNodeProjects == nil { + o.OutGivingNodeProjectList = "" + } else { + marshal, err := json.Marshal(outGivingNodeProjects) + if err != nil { + o.OutGivingNodeProjectList = "" + return + } + o.OutGivingNodeProjectList = string(marshal) + } +} + +// CheckContains checks if the model contains a project with the given node and project IDs +// 判断是否包含某个项目id +func (o *OutGivingModel) CheckContains(nodeId, projectId string) bool { + nodeProjectList := o.GetOutGivingNodeProjectList() + project := o.GetNodeProject(nodeProjectList, nodeId, projectId) + return project != nil +} + +// GetNodeProject gets a project from the list with the given node and project IDs +// 从指定数组中获取对应信息 +func (o *OutGivingModel) GetNodeProject(projects []OutGivingNodeProject, nodeId, projectId string) *OutGivingNodeProject { + for _, project := range projects { + if strings.EqualFold(project.NodeId, nodeId) && strings.EqualFold(project.ProjectId, projectId) { + return &project + } + } + return nil +} + +// GetDelete compares the old and new projects and returns deleted ones +func (o *OutGivingModel) GetDelete(newProjects []OutGivingNodeProject) []OutGivingNodeProject { + oldProjects := o.GetOutGivingNodeProjectList() + if oldProjects == nil || len(oldProjects) == 0 { + return nil + } + var deletedProjects []OutGivingNodeProject + // 如果在newsProject中不存在,则将该节点项目添加到delete列表中 + for _, oldProject := range oldProjects { + if o.GetNodeProject(newProjects, oldProject.NodeId, oldProject.ProjectId) != nil { + continue + } + deletedProjects = append(deletedProjects, oldProject) + } + return deletedProjects +} diff --git a/server/internal/model/app_manage/out_giving/out_giving_model_test.go b/server/internal/model/app_manage/out_giving/out_giving_model_test.go new file mode 100644 index 0000000..b28e8b9 --- /dev/null +++ b/server/internal/model/app_manage/out_giving/out_giving_model_test.go @@ -0,0 +1,12 @@ +package out_giving + +import ( + "fmt" + "strings" + "testing" +) + +func TestOutGivingModel_GetOutGivingNodeProjectListBySelect(t *testing.T) { + list := strings.Split("", ",") + fmt.Print(list) +} diff --git a/server/internal/model/app_manage/out_giving/out_giving_node_project.go b/server/internal/model/app_manage/out_giving/out_giving_node_project.go new file mode 100644 index 0000000..9b7d231 --- /dev/null +++ b/server/internal/model/app_manage/out_giving/out_giving_node_project.go @@ -0,0 +1,53 @@ +package out_giving + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" +) + +// OutGivingNodeProject 结构体扩展了BaseNodeProject,包含了排序值和是否禁用的字段 +type OutGivingNodeProject struct { + NodeId string `json:"nodeId"` + ProjectId string `json:"projectId"` + SortValue *int `json:"sortValue"` + Disabled bool `json:"disabled,omitempty"` +} + +// GetDisabled 返回默认禁用状态,如果Disabled为nil,则返回false +func (o *OutGivingNodeProject) GetDisabled() bool { + // 如果Disabled为nil,则返回false,其他情况返回Disabled的值 + if o.Disabled != true { + return false + } + return o.Disabled +} + +func (o *OutGivingNodeProject) FindResult(db *gorm.DB) (interface{}, error) { + var result []OutGivingNodeProject + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (o *OutGivingNodeProject) Page(page *model.Page[OutGivingNodeProject], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + //query = query.Where(fields) + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/model/app_manage/out_giving/status/status.go b/server/internal/model/app_manage/out_giving/status/status.go new file mode 100644 index 0000000..07397a1 --- /dev/null +++ b/server/internal/model/app_manage/out_giving/status/status.go @@ -0,0 +1,23 @@ +package status + +// Status 枚举表示状态 +type Status int + +const ( + // NO 未分发 + NO = 0 + // ING 分发中 + ING = 1 + // 分发成功 + Ok = 2 + // DONE 分发结束 + DONE = 2 + // CANCEL 已取消 // 系统取消分发 + CANCEL = 3 + // FAIL 分发失败 + FAIL = 4 + // 准备分发 + Prepare = 5 + // 手动取消分发 + ArtificialCancel = 6 +) diff --git a/server/internal/model/app_manage/project_info/project_info.go b/server/internal/model/app_manage/project_info/project_info.go new file mode 100644 index 0000000..1652d39 --- /dev/null +++ b/server/internal/model/app_manage/project_info/project_info.go @@ -0,0 +1,160 @@ +package project_info + +import ( + "database/sql" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "github.com/araujo88/lambda-go/pkg/core" + "gorm.io/gorm" +) + +type ProjectInfo struct { + model.BaseWorkspaceModel + ProjectId string `gorm:"column:project_id" json:"projectId"` + NodeId string `gorm:"column:node_id" json:"nodeId"` + Name string `gorm:"column:name" json:"name"` + Lib string `gorm:"column:lib" json:"lib"` + WhitelistDirectory string `gorm:"column:whitelist_directory" json:"whitelistDirectory"` + LogPath string `gorm:"column:log_path" json:"logPath"` + Jvm string `gorm:"column:jvm" json:"jvm"` + Args string `gorm:"column:args" json:"args"` + Token string `gorm:"column:token" json:"token"` + RunMode string `gorm:"column:run_mode" json:"runMode"` + OutGivingProject bool `gorm:"column:out_giving_project" json:"outGivingProject"` + //SortValue string `gorm:"column:sort_value" json:"sortValue"` + TriggerToken string `gorm:"column:trigger_token" json:"triggerToken"` + Group *string `gorm:"column:group" json:"group"` + DslContent string `gorm:"column:dsl_content" json:"dslContent"` + DslEnv string `gorm:"column:dsl_env" json:"dslEnv"` + AutoStart bool `gorm:"column:auto_start" json:"autoStart"` + NodeName string `gorm:"column:node_name" json:"nodeName"` + WorkspaceName string `gorm:"column:workspace_name" json:"workspaceName"` +} + +func New() *ProjectInfo { + n := &ProjectInfo{} + n.Handler = n + return n +} + +func (*ProjectInfo) TableName() string { + return "sched_project_info" +} + +// 删除所有项目 +func ClearAll() (int64, error) { + return model.DB().Where("1 = 1").Delete(&ProjectInfo{}).RowsAffected, nil +} + +// 根据Id删除项目 +func DeleteProjectById(id string) (int64, error) { + return model.DB().Where("id = ?", id).Delete(&ProjectInfo{}).RowsAffected, nil +} + +// 根据Id查询项目 +func GetProjectById(id string) (ProjectInfo, error) { + var project ProjectInfo + err := model.DB().Where("id = ?", id).First(&project).Error + return project, err +} + +// 根据Id批量查询项目 +func GetProjectByIds(ids []string) []ProjectInfo { + var projects []ProjectInfo + model.DB().Where("id in (?)", ids).Find(&projects) + return projects +} + +// 根据nodeId和workspace_id删除项目 +func DeleteProjectByNodeIdAndWorkspaceId(nodeId, workspaceId string) (int64, error) { + return model.DB().Where("node_id = ? and workspace_id = ?", nodeId, workspaceId).Delete(&ProjectInfo{}).RowsAffected, nil +} + +// 根据nodeId删除项目 +func DeleteProjectByNodeId(nodeId string) (int64, error) { + return model.DB().Where("node_id = ?", nodeId).Delete(&ProjectInfo{}).RowsAffected, nil +} + +// 根据nodeId查询项目 +func GetProjectByNodeId(nodeId string) ([]ProjectInfo, error) { + var result []ProjectInfo + err := model.DB().Table(New().TableName()).Table(New().TableName()).Where("node_id = ?", nodeId).Find(&result).Error + if err != nil { + return nil, err + } + return result, nil +} + +// 指定workspaceId, nodeId,计算符合条件的项目数 +func Exists_1(workspaceId, nodeId string) (bool, error) { + var result int64 + tx := model.DB().Table(New().TableName()).Where("workspace_id = ? and node_id = ?", workspaceId, nodeId).Count(&result) + if tx.Error != nil { + return false, tx.Error + } + return result > 0, nil + +} + +// 指定workspaceId, nodeId, projectId,计算符合条件的项目数 +func Exists(workspaceId, nodeId, projectId string) (bool, error) { + var result int64 + tx := model.DB().Table(New().TableName()).Where("workspace_id = ? and node_id = ? and project_id = ?", workspaceId, nodeId, projectId).Count(&result) + if tx.Error != nil { + return false, tx.Error + } + return result > 0, nil +} + +// 指定Id,计算符合条件的项目数 +func ExistsById(id string) (bool, error) { + var result int64 + tx := model.DB().Table(New().TableName()).Where("id = ?", id).Count(&result) + if tx.Error != nil { + return false, tx.Error + } + return result > 0, nil +} + +func (p *ProjectInfo) ListGroup() ([]string, error) { + var result []sql.NullString + tx := model.DB().Table(p.TableName()).Select("\"group\"").Distinct().Scan(&result) + if len(result) > 0 { + us := core.Map(result, func(s sql.NullString) string { + if s.Valid { + return s.String + } + return "" + }) + return us, tx.Error + } + return []string{}, tx.Error +} + +func (p *ProjectInfo) CreateOrUpdate() (err error) { + _, err = p.Create(p) + if err != nil { + fmt.Println(err.Error()) + _, err = p.Update(p, nil) + } + return err +} + +func (p *ProjectInfo) FindResult(db *gorm.DB) (interface{}, error) { + var result []ProjectInfo + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +// 根据工作空间(WorkspaceId)计算项目数量 +func CountProjectByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(New().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} diff --git a/server/internal/model/app_manage/script_info/node_script_cache_model.go b/server/internal/model/app_manage/script_info/node_script_cache_model.go new file mode 100644 index 0000000..c51b8a4 --- /dev/null +++ b/server/internal/model/app_manage/script_info/node_script_cache_model.go @@ -0,0 +1,136 @@ +package script_info + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" +) + +// 脚本模版实体 对应NodeScriptCacheModel +type NodeScriptCacheModel struct { + model.BaseWorkspaceModel + ScriptId string `gorm:"column:script_id" json:"scriptId"` + Name string `gorm:"column:name" json:"name"` + LastRunUser string `gorm:"column:last_run_user" json:"lastRunUser"` + AutoExecCron string `gorm:"column:auto_exec_cron" json:"autoExecCron"` + DefArgs string `gorm:"column:def_args" json:"defArgs"` + Description string `gorm:"column:description" json:"description"` + ScriptType string `gorm:"column:script_type" json:"scriptType"` + TriggerToken string `gorm:"column:trigger_token" json:"trigger_token"` + NodeId string `gorm:"column:node_id" json:"nodeId"` + NodeName string `gorm:"column:node_name" json:"nodeName"` + WorkspaceName string `gorm:"column:workspace_name" json:"workspaceName"` +} + +func NewNodeScriptCacheModel() *NodeScriptCacheModel { + n := &NodeScriptCacheModel{} + n.Handler = n + return n +} + +func (*NodeScriptCacheModel) TableName() string { + return "sched_script_info" +} + +func (s *NodeScriptCacheModel) ListGroup() ([]string, error) { + var result []string + tx := model.DB().Table(s.TableName()).Select("\"group\"").Distinct().Scan(&result) + return result, tx.Error +} + +func (s *NodeScriptCacheModel) CreateOrUpdate() (err error) { + _, err = s.Create(s) + if err != nil { + fmt.Println(err.Error()) + _, err = s.Update(s, nil) + } + return err +} + +// 根据Id删除脚本 +func DeleteNodeScriptById(id string) (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("id = ?", id).Delete(&NodeScriptCacheModel{}) + return tx.RowsAffected, tx.Error +} + +// 根据nodeId删除脚本 +func DeleteNodeScriptByNodeId(nodeId string) (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("node_id = ?", nodeId).Delete(&NodeScriptCacheModel{}) + return tx.RowsAffected, tx.Error +} + +// 根据nodeId查询脚本 +func GetNodeScriptByNodeId(nodeId string) ([]NodeScriptCacheModel, error) { + var result []NodeScriptCacheModel + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("node_id = ?", nodeId).Find(&result) + return result, tx.Error +} + +// 根据Id查询脚本 +func GetNodeScriptById(id string) (NodeScriptCacheModel, error) { + var result NodeScriptCacheModel + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("id = ?", id).First(&result) + return result, tx.Error +} + +// 根据IdworkspaceId删除脚本 +func DeleteNodeScriptByIdAndWorkspaceId(id, workspaceId string) (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("id = ? and workspace_id = ?", id, workspaceId).Delete(&NodeScriptCacheModel{}) + return tx.RowsAffected, tx.Error +} + +// 根据NodeId和workspaceId删除脚本 +func DeleteNodeScriptByNodeIdAndWorkspaceId(nodeId, workspaceId string) (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("node_id = ? and workspace_id = ?", nodeId, workspaceId).Delete(&NodeScriptCacheModel{}) + return tx.RowsAffected, tx.Error +} + +// 删除所有脚本 +func DeleteAllNodeScript() (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("1 = 1").Delete(&NodeScriptCacheModel{}) + return tx.RowsAffected, tx.Error +} + +// 批量保存脚本 +func SaveNodeScript(scripts []NodeScriptCacheModel) (int64, error) { + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).CreateInBatches(scripts, 100) + return tx.RowsAffected, tx.Error +} + +func (s *NodeScriptCacheModel) FindResult(db *gorm.DB) (interface{}, error) { + var result []NodeScriptCacheModel + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (s *NodeScriptCacheModel) HasScriptNode() ([]string, error) { + var nodeIds = make([]string, 0) + tx := model.DB().Table(s.TableName()).Select("node_id").Distinct().Scan(&nodeIds) + if tx.Error != nil { + return nodeIds, tx.Error + } + return nodeIds, nil +} + +// 指定workspaceId, nodeId,计算符合条件的项目数 +func ExistsNodeScriptCacheModel(workspaceId, nodeId string) (bool, error) { + var result int64 + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("workspace_id = ? and node_id = ?", workspaceId, nodeId).Count(&result) + if tx.Error != nil { + return false, tx.Error + } + return result > 0, nil + +} + +func CountNodeScriptByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(NewNodeScriptCacheModel().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} diff --git a/server/internal/model/app_manage/script_info/node_script_execute_log_cache_model.go b/server/internal/model/app_manage/script_info/node_script_execute_log_cache_model.go new file mode 100644 index 0000000..e8d926d --- /dev/null +++ b/server/internal/model/app_manage/script_info/node_script_execute_log_cache_model.go @@ -0,0 +1,148 @@ +package script_info + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/secure" + "gorm.io/gorm" + "strings" +) + +// NodeScriptExecuteLogCacheModel 结构体 +type NodeScriptExecuteLogCacheModel struct { + model.BaseNodeModel // 继承自 BaseNodeModel + + // 使用 GORM 标签映射字段到数据库列 + Name string `gorm:"-" json:"name"` // 不会映射到数据库,因为有PropIgnore注解 + ScriptId string `gorm:"column:script_id" json:"scriptId"` + ScriptName string `gorm:"column:script_name" json:"scriptName"` + + // 触发类型 {0,手动,1 自动触发} + TriggerExecType int `gorm:"column:trigger_exec_type" json:"triggerExecType"` +} + +// 实现 fullId 方法 +func (n *NodeScriptExecuteLogCacheModel) fullId() string { + encrypt := secure.Sha1Encrypt(n.WorkspaceId + n.NodeId + n.ScriptId) + return encrypt +} + +// SetName 方法 +func (n *NodeScriptExecuteLogCacheModel) SetName(name string) { + n.Name = name + n.ScriptName = name +} + +// SetScriptName 方法 +func (n *NodeScriptExecuteLogCacheModel) SetScriptName(scriptName string) { + n.ScriptName = scriptName + n.Name = scriptName +} + +func NewNodeScriptExecuteLogCacheModel() *NodeScriptExecuteLogCacheModel { + n := &NodeScriptExecuteLogCacheModel{} + n.Handler = n + return n +} + +func (*NodeScriptExecuteLogCacheModel) TableName() string { + return "sched_script_execute_log" +} + +func (n *NodeScriptExecuteLogCacheModel) FindResult(db *gorm.DB) (interface{}, error) { + var result []NodeScriptExecuteLogCacheModel + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +// Page 可以使用类似 {"age >": 30} 这样的字段映射来过滤年龄大于30的结果 +func (n *NodeScriptExecuteLogCacheModel) Page(page *model.Page[NodeScriptExecuteLogCacheModel], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + // 支持模糊查询 + if strings.Contains(key, "%") { + kk := strings.ReplaceAll(key, "%", "") + query = query.Where(kk+" like ?", "%"+value.(string)+"%") + continue + } + + // 检查字段是否包含操作符 + if strings.Contains(key, ">") || strings.Contains(key, "<") { + // 分割字段名和操作符 + parts := strings.Split(key, " ") + if len(parts) == 2 { + field := parts[0] + op := parts[1] + switch op { + case ">": + query = query.Where(field+" > ?", value) + case "<": + query = query.Where(field+" < ?", value) + default: + query = query.Where(key+" = ?", value) + } + } else { + query = query.Where(key+" = ?", value) + } + } else { + query = query.Where(key+" = ?", value) + } + + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +// 根据ids批量删除NodeScriptExecuteLogCacheModel +func DeleteNodeScriptExecuteLogByIds(ids []string) (int64, error) { + return model.DB().Where("id in (?)", ids).Delete(&NodeScriptExecuteLogCacheModel{}).RowsAffected, nil +} + +// 根据Id和 []workspace 数组获取脚本 +func GetNodeScriptExecuteLogByIdAndWorkspaceIds(id string, workspaceIds []string) (NodeScriptExecuteLogCacheModel, error) { + var script NodeScriptExecuteLogCacheModel + err := model.DB().Where("id = ? and workspace_id in (?)", id, workspaceIds).First(&script).Error + return script, err +} + +// 根据Id workspaceId删除脚本 +func DeleteNodeScriptExecuteLogByIdAndWorkspaceIds(id string, workspaceIds []string) (int64, error) { + var script NodeScriptExecuteLogCacheModel + tx := model.DB().Where("id = ? and workspace_id in (?)", id, workspaceIds).Delete(&script) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +// 根据NodeId workspaceId删除脚本 +func DeleteNodeScriptExecuteLogByNodeIdAndWorkspaceIds(nodeId string, workspaceIds []string) (int64, error) { + var script NodeScriptExecuteLogCacheModel + tx := model.DB().Where("node_id = ? and workspace_id in (?)", nodeId, workspaceIds).Delete(&script) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func CountNodeScriptExecuteLogByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(NewNodeScriptExecuteLogCacheModel().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} diff --git a/server/internal/model/app_manage/script_info/server_script_model.go b/server/internal/model/app_manage/script_info/server_script_model.go new file mode 100644 index 0000000..86dc74a --- /dev/null +++ b/server/internal/model/app_manage/script_info/server_script_model.go @@ -0,0 +1,154 @@ +package script_info + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/command_utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/file_utils" + "github.com/google/uuid" + "gorm.io/gorm" + "path/filepath" +) + +// ScriptModel represents the script template model in the database. +type ScriptModel struct { + model.BaseWorkspaceModel + + Name string `gorm:"column:name" json:"name"` + LastRunUser string `gorm:"column:last_run_user" json:"lastRunUser"` + AutoExecCron string `gorm:"column:auto_exec_cron" json:"autoExecCron"` + DefArgs string `gorm:"column:def_args" json:"defArgs"` + Description string `gorm:"column:description" json:"description"` + + Context string `gorm:"column:context" json:"context"` + NodeIds string `gorm:"column:node_ids" json:"nodeIds"` + TriggerToken string `gorm:"column:trigger_token" json:"triggerToken"` +} + +func NewScriptModel() *ScriptModel { + n := &ScriptModel{} + n.Handler = n + return n +} + +func (*ScriptModel) TableName() string { + return "sched_server_script_info" +} + +func (s *ScriptModel) FindResult(db *gorm.DB) (interface{}, error) { + var result []ScriptModel + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +func (s *ScriptModel) Page(page *model.Page[ScriptModel], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +// 根据查询条件获取单个脚本(First),如果没有则返回空 +func GetServerScriptModel(fields map[string]interface{}) (ScriptModel, error) { + var script ScriptModel + err := model.DB().Where(fields).First(&script).Error + return script, err +} + +// 根据Id和获取脚本 +func GetServerScriptModelById(id string) (ScriptModel, error) { + var script ScriptModel + err := model.DB().Where("id = ?", id).First(&script).Error + return script, err +} + +// 根据Id和 []workspace 数组获取脚本 +func GetServerScriptModelByIdAndWorkspaceIds(id string, workspaceIds []string) (ScriptModel, error) { + var script ScriptModel + err := model.DB().Where("id = ? and workspace_id in (?)", id, workspaceIds).First(&script).Error + return script, err +} + +// 根据Id和 []workspace 数组删除脚本 +func DeleteServerScriptByIdAndWorkspaceIds(id string, workspaceIds []string) (int64, error) { + var script ScriptModel + tx := model.DB().Where("id = ? and workspace_id in (?)", id, workspaceIds).Delete(&script) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +// 根据Id更新脚本 +func UpdateServerScriptById(id string, fields map[string]interface{}) (int64, error) { + tx := model.DB().Model(&ScriptModel{}).Where("id = ?", id).Updates(fields) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func CountScriptByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(NewScriptModel().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} + +/***********************************************/ + +// ScriptPath generates the script's path based on its ID. +func (s *ScriptModel) ScriptPath() (string, error) { + // Implement your logic to get the script path based on your application's setup. + // JpomApplication and other dependencies would need to be replaced with Go equivalents. + if s.Id == "" { + return "", fmt.Errorf("id 为空") + } + path, err := utils.GetDataPath() + if err != nil { + return "", fmt.Errorf("获取数据目录失败: %v", err) + } + scriptPath := filepath.Join(path, "script", s.Id) + // Return a hypothetical path for demonstration purposes. + return scriptPath, nil +} + +// LogFilePath generates the log file's path given the script ID and execution ID. +func (s *ScriptModel) LogFilePath(executeId string) (string, error) { + scriptFolderPath, err := s.ScriptPath() + if err != nil { + return "", err + } + scriptLogFilePath := filepath.Join(scriptFolderPath, "log", executeId) + ".log" + return scriptLogFilePath, nil +} + +func (s *ScriptModel) ScriptFile() (string, error) { + dataPath, _ := utils.GetDataPath() + fileName := fmt.Sprintf("%s.%s", uuid.New().String(), command_utils.SUFFIX) + scriptFile := filepath.Join(dataPath, "script_run_cache", fileName) + err := file_utils.WriteScript(s.Context, scriptFile) + if err != nil { + return "", err + } + return scriptFile, nil +} diff --git a/server/internal/model/app_manage/server_white_list/server_white_list.go b/server/internal/model/app_manage/server_white_list/server_white_list.go new file mode 100644 index 0000000..1c39e63 --- /dev/null +++ b/server/internal/model/app_manage/server_white_list/server_white_list.go @@ -0,0 +1,33 @@ +package server_white_list + +import "path/filepath" + +type ServerWhitelist struct { + OutGiving string `json:"outGiving"` + //AllowRemoteDownloadHost []string `json:"allowRemoteDownloadHost"` + //StaticDir []string `json:"staticDir"` +} + +func GetId(workspaceId string) string { + return "OUTGIVING_WHITELIST-" + workspaceId +} + +// CheckPath 用于判断给定路径是否在白名单列表中 +func CheckPath(list []string, path string) bool { + if list == nil || len(list) == 0 { + return false + } + if path == "" { + return false + } + + normalizedPath := filepath.Clean(path) + + for _, item := range list { + normalizedItem := filepath.Clean(item) + if normalizedPath == normalizedItem { + return true + } + } + return false +} diff --git a/server/internal/model/app_manage/system_parameters/system_parameters.go b/server/internal/model/app_manage/system_parameters/system_parameters.go new file mode 100644 index 0000000..587a4dd --- /dev/null +++ b/server/internal/model/app_manage/system_parameters/system_parameters.go @@ -0,0 +1,36 @@ +package system_parameters + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" +) + +type SystemParameters struct { + model.BaseUserModifyDbModel + Value string `gorm:"column:value" json:"value"` + Description string `gorm:"column:description" json:"description"` +} + +func (*SystemParameters) TableName() string { + return "sched_system_parameters" +} + +func (w *SystemParameters) Page(page *model.Page[SystemParameters], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + //query = query.Where(fields) + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/model/app_manage/workspace/workspace.go b/server/internal/model/app_manage/workspace/workspace.go new file mode 100644 index 0000000..8c25c06 --- /dev/null +++ b/server/internal/model/app_manage/workspace/workspace.go @@ -0,0 +1,71 @@ +package workspace + +import ( + "database/sql" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "github.com/araujo88/lambda-go/pkg/core" + "gorm.io/gorm" +) + +type Workspace struct { + model.BaseUserModifyDbModel + Name string `gorm:"column:name" json:"name"` //type:string comment:名称 version:2024-02-12 14:22 + Description string `gorm:"column:description" json:"description"` //type:string comment:描述 version:2024-02-12 14:22 + Group *string `gorm:"column:group" json:"group"` //type:string comment:分组 version:2024-02-12 14:22 +} + +func New() *Workspace { + w := &Workspace{} + w.Handler = w + return w +} + +// 说明: +func (*Workspace) TableName() string { + return "sched_workspace" +} + +func (w *Workspace) ListGroup() ([]string, error) { + var result []sql.NullString + tx := model.DB().Table(w.TableName()).Select("\"group\"").Distinct().Scan(&result) + if len(result) > 0 { + us := core.Map(result, func(s sql.NullString) string { + if s.Valid { + return s.String + } + return "" + }) + return us, tx.Error + } + return []string{}, tx.Error +} + +func (w *Workspace) FindResult(db *gorm.DB) (interface{}, error) { + var result []Workspace + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +// 根据Id判断是否存在 +func (w *Workspace) ExistById(id string) (bool, error) { + var count int64 + err := model.DB().Table(w.TableName()).Where("id = ?", id).Count(&count).Error + return count > 0, err +} + +// 根据Id获取环境变量 +func GetWorkspaceById(id string) (*Workspace, error) { + var workspace Workspace + err := model.DB().Table(workspace.TableName()).Where("id = ?", id).First(&workspace).Error + return &workspace, err +} + +// 根据Id列表获取环境变量 +func GetWorkspaceByIds(ids []string) ([]Workspace, error) { + var workspaces []Workspace + err := model.DB().Table(New().TableName()).Where("id in (?)", ids).Find(&workspaces).Error + return workspaces, err +} diff --git a/server/internal/model/app_manage/workspace_env/workspace_env_var.go b/server/internal/model/app_manage/workspace_env/workspace_env_var.go new file mode 100644 index 0000000..51dcb58 --- /dev/null +++ b/server/internal/model/app_manage/workspace_env/workspace_env_var.go @@ -0,0 +1,54 @@ +package workspace_env + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" +) + +type WorkspaceEnvVar struct { + model.BaseWorkspaceModel + Name string `gorm:"column:name" json:"name"` + Description string `gorm:"column:description" json:"description"` + Value string `gorm:"column:value" json:"value"` + NodeIds string `gorm:"column:node_ids" json:"nodeIds"` + Privacy int `gorm:"column:privacy" json:"privacy"` + TriggerToken string `gorm:"column:trigger_token" json:"triggerToken"` +} + +func New() *WorkspaceEnvVar { + w := &WorkspaceEnvVar{} + w.Handler = w + return w +} + +func (*WorkspaceEnvVar) TableName() string { + return "sched_workspace_env_var" +} + +func (w *WorkspaceEnvVar) FindResult(db *gorm.DB) (interface{}, error) { + var result []WorkspaceEnvVar + if db == nil { + return result, nil + } + err := db.Find(&result).Error + return result, err +} + +// 根据工作空间(WorkspaceId)计算环境变量数量 +func CountWorkspaceEnvVarByWorkspaceId(workspaceId string) (int64, error) { + var result int64 + tx := model.DB().Table(New().TableName()).Where("workspace_id = ?", workspaceId).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} + +// 根据工作空间(WorkspaceId)删除环境变量 +func DeleteWorkspaceEnvVarByWorkspaceId(workspaceId string) (int64, error) { + tx := model.DB().Table(New().TableName()).Where("workspace_id = ?", workspaceId).Delete(nil) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} diff --git a/server/internal/model/base.go b/server/internal/model/base.go new file mode 100644 index 0000000..ed758e2 --- /dev/null +++ b/server/internal/model/base.go @@ -0,0 +1,342 @@ +package model + +import ( + "errors" + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/data" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/request" + "github.com/google/uuid" + "gorm.io/gorm" + "gorm.io/gorm/schema" + "gorm.io/plugin/soft_delete" + "strings" + "time" +) + +type BaseIdModel struct { + Handler ResultHandler `gorm:"-" json:"-"` + Id string `gorm:"column:id;not null;primarykey" json:"id"` +} + +type ResultHandler interface { + FindResult(*gorm.DB) (interface{}, error) +} + +func (b *BaseIdModel) Create(t schema.Tabler) (int64, error) { + b.GenerateId() + tx := DB().Table(t.TableName()).Create(t) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (b *BaseIdModel) Update(t schema.Tabler, column []string) (int64, error) { + if b.Id == "" { + return 0, errors.New("id cannot be null") + } + db := DB().Table(t.TableName()) + if column != nil && len(column) > 0 { + db = db.Select(column) + } + tx := db.Updates(t) + return tx.RowsAffected, tx.Error +} + +func (b *BaseIdModel) GetById(t schema.Tabler) error { + if b.Id == "" { + return errors.New("id cannot be null") + } + tx := DB().Table(t.TableName()).Take(t) + return tx.Error +} + +func (b *BaseIdModel) Delete(t schema.Tabler) (int64, error) { + if b.Id == "" { + return 0, errors.New("id cannot be null") + } + tx := DB().Table(t.TableName()).Delete(t) + return tx.RowsAffected, tx.Error +} + +func (b *BaseIdModel) GetAll(t schema.Tabler, fields map[string]interface{}, notFields map[string]interface{}) (interface{}, error) { + query := DB().Table(t.TableName()) + if fields != nil { + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + if notFields != nil { + for key := range notFields { + value := notFields[key] + if items, ok := value.([]interface{}); ok { + if len(items) > 0 { + query = query.Where(key+" not in (?)", items) + } else { + query = query.Where(key+" <> ?", items[0]) + } + } else { + query = query.Where(key+" <> ?", value) + } + } + //query = query.Where(fields) + } + return b.Handler.FindResult(query) +} + +// IN db.Where("name in (?)", []string{"jinzhu", "jinzhu 2"}).Find(&users) +func (b *BaseIdModel) Page(t schema.Tabler, page *PageConfig, fields map[string]interface{}) (interface{}, error) { + query := DB() + if fields != nil { + //query = query.Where(fields) + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + return b.Handler.FindResult(page.SelectPages(t, query)) +} + +func (b *BaseIdModel) GenerateId() { + if b.Id == "" { + id, _ := uuid.NewUUID() + b.Id = strings.ReplaceAll(id.String(), "-", "") + } +} + +type BaseDbModel struct { + BaseIdModel + CreateTimeMillis int64 `gorm:"column:create_time_millis" json:"createTimeMillis"` //type:timestamptz comment:数据创建时间 version:2024-02-12 14:22 + ModifyTimeMillis int64 `gorm:"column:modify_time_millis" json:"modifyTimeMillis"` //type:timestamptz comment:数据修改时间 version:2024-02-12 14:22 +} + +func (b *BaseDbModel) Create(t schema.Tabler) (int64, error) { + b.GenerateTime() + return b.BaseIdModel.Create(t) +} + +func (b *BaseDbModel) Update(t schema.Tabler, column []string) (int64, error) { + b.GenerateModifyTime() + return b.BaseIdModel.Update(t, column) +} + +func (b *BaseDbModel) GenerateTime() { + t := time.Now().UnixMilli() + b.CreateTimeMillis = t + b.ModifyTimeMillis = t +} + +func (b *BaseDbModel) GenerateModifyTime() { + b.ModifyTimeMillis = time.Now().UnixMilli() +} + +type BaseUserModifyDbModel struct { + BaseDbModel + CreateUser string `gorm:"column:create_user" json:"createUser"` + ModifyUser string `gorm:"column:modify_user" json:"modifyUser"` +} + +func (b *BaseUserModifyDbModel) SetUserName(userName string) { + b.CreateUser = userName + b.ModifyUser = userName +} + +func (b *BaseUserModifyDbModel) SetModifyUserName(userName string) { + b.ModifyUser = userName +} + +type BaseWorkspaceModel struct { + BaseUserModifyDbModel + WorkspaceId string `gorm:"column:workspace_id" json:"workspaceId"` +} + +func (b *BaseWorkspaceModel) CountByWorkspaceId(t schema.Tabler) (int64, error) { + if b.WorkspaceId == "" { + return 0, errors.New("id cannot be null") + } + var count int64 + tx := DB().Table(t.TableName()).Where("workspace_id = ?", b.WorkspaceId).Count(&count) + return count, tx.Error +} + +func (b *BaseWorkspaceModel) Global() bool { + return strings.EqualFold(b.WorkspaceId, "GLOBAL") +} + +type BaseNodeModel struct { + BaseWorkspaceModel + NodeId string `gorm:"column:node_id" json:"nodeId"` + NodeName string `gorm:"column:node_name" json:"nodeName"` + WorkspaceName string `gorm:"column:workspace_name" json:"workspaceName"` +} + +type BaseGroupModel struct { + BaseWorkspaceModel + Group string `gorm:"column:group" json:"group"` +} + +type BaseMachineModel struct { + BaseGroupModel + MachineId string `gorm:"column:machine_id" json:"machineId"` +} + +type BaseModel struct { + ID string `gorm:"column:id;not null;primarykey" json:"id"` + CreateTime time.Time `gorm:"column:create_time;type:timestamp;<-:create" json:"createTime"` + UpdateTime time.Time `gorm:"column:update_time;type:timestamp" json:"updateTime"` + CreatorID string `gorm:"column:creator_id;type:varchar(64);not null;<-:create" json:"creatorID"` + Modifier string `gorm:"column:modifier;type:varchar(64);not null;" json:"modifier"` +} + +func (model *BaseModel) DB() *gorm.DB { + return DB() +} + +type ContainsDeleteBaseModel struct { + BaseModel + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at;type:int(11) unsigned;not null;default:0;index" json:"-"` +} + +func DB() *gorm.DB { + if c.Config.DatabaseConfig.Type == "sqlite" { + return data.SqliteDB + } else { + return data.PostgreSqlDB["data"] + } +} + +//func DBAuth() *gorm.DB { +// return data.PostgreSqlDB["auth"] +//} + +type Page[T any] struct { + CurrentPage int64 `json:"currentPage"` + PageSize int64 `json:"pageSize"` + Total int64 `json:"total"` + Pages int64 `json:"pages"` + Order string `json:"order"` //db.Order("name DESC") + Data []T `json:"data"` +} + +func (page *Page[T]) SelectPages(query *gorm.DB) (e error) { + var model T + query.Model(&model).Count(&page.Total) + if page.Total == 0 { + page.Data = []T{} + return + } + e = query.Model(&model).Scopes(Paginate(page)).Find(&page.Data).Error + return +} + +func (page *Page[T]) ScanPages(query *gorm.DB) (e error) { + var model T + query.Model(&model).Count(&page.Total) + if page.Total == 0 { + page.Data = []T{} + return + } + e = query.Model(&model).Scopes(Paginate(page)).Scan(&page.Data).Error + return +} + +func Paginate[T any](page *Page[T]) func(db *gorm.DB) *gorm.DB { + return func(db *gorm.DB) *gorm.DB { + if page.CurrentPage <= 0 { + page.CurrentPage = 1 + } + switch { + case page.PageSize > 1000: + page.PageSize = 1000 // 限制一下分页大小 + case page.PageSize <= 0: + page.PageSize = 10 + } + page.Pages = page.Total / page.PageSize + if page.Total%page.PageSize != 0 { + page.Pages++ + } + size := page.PageSize + offset := int((page.CurrentPage - 1) * size) + return db.Order(page.Order).Offset(offset).Limit(int(size)) + } +} + +func (page *Page[T]) Covert(pageInfo *request.PageInfo) { + if pageInfo.CurrentPage <= 0 { + pageInfo.CurrentPage = 1 + } + switch { + case pageInfo.PageSize > 1000: + pageInfo.PageSize = 1000 // 限制一下分页大小 + case pageInfo.PageSize <= 0: + pageInfo.PageSize = 10 + } + page.CurrentPage = pageInfo.CurrentPage + page.PageSize = pageInfo.PageSize + page.Order = pageInfo.Order +} + +// PageConfig 需要配套实现FindResult,Data需要回填。推荐使用Page[T any] +type PageConfig struct { + CurrentPage int64 `json:"currentPage"` + PageSize int64 `json:"pageSize"` + Total int64 `json:"total"` + Pages int64 `json:"pages"` + Order string `json:"order"` //db.Order("name DESC") + Data any `json:"data"` // 需要回填,不好用 +} + +func (page *PageConfig) SelectPages(t schema.Tabler, query *gorm.DB) *gorm.DB { + query.Table(t.TableName()).Count(&page.Total) + if page.Total == 0 { + return nil + } + return query.Table(t.TableName()).Scopes(PaginateConfig(page)) +} + +func PaginateConfig(page *PageConfig) func(db *gorm.DB) *gorm.DB { + return func(db *gorm.DB) *gorm.DB { + if page.CurrentPage <= 0 { + page.CurrentPage = 1 + } + switch { + case page.PageSize > 1000: + page.PageSize = 1000 // 限制一下分页大小 + case page.PageSize <= 0: + page.PageSize = 10 + } + page.Pages = page.Total / page.PageSize + if page.Total%page.PageSize != 0 { + page.Pages++ + } + size := page.PageSize + offset := int((page.CurrentPage - 1) * size) + return db.Order(page.Order).Offset(offset).Limit(int(size)) + } +} + +func (page *PageConfig) Covert(pageInfo *request.PageInfo) { + if pageInfo.CurrentPage <= 0 { + pageInfo.CurrentPage = 1 + } + switch { + case pageInfo.PageSize > 1000: + pageInfo.PageSize = 1000 // 限制一下分页大小 + case pageInfo.PageSize <= 0: + pageInfo.PageSize = 10 + } + page.CurrentPage = pageInfo.CurrentPage + page.PageSize = pageInfo.PageSize + page.Order = pageInfo.Order +} diff --git a/server/internal/model/common/dataselect.go b/server/internal/model/common/dataselect.go new file mode 100644 index 0000000..f8b89f1 --- /dev/null +++ b/server/internal/model/common/dataselect.go @@ -0,0 +1,304 @@ +package common + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/common/sql" + . "github.com/ahmetb/go-linq" + "strings" +) + +const ( + FilterTypeLikeSuffix = "__like" + FilterTypeEqualSuffix = "__eq" + FilterTypeNotEqualSuffix = "__neq" + FilterTypeInSuffix = "__in" +) + +const ( + FilterTypeLike = 0 + FilterTypeEqual = 1 + FilterTypeNotEqual = 2 + FilterTypeIn = 3 +) + +type FilterType int + +// PaginationQuery defines +type PaginationQuery struct { + From int + Size int +} + +// NoPagination is the option for no pigination, currently a very large page +var NoPagination = NewPaginationQuery(-1, -1) + +// DefaultPagination is the default options for pagination +var DefaultPagination = NewPaginationQuery(0, 10) + +// NewPaginationQuery creates a new PaginationQuery +func NewPaginationQuery(from, size int) *PaginationQuery { + return &PaginationQuery{ + From: from, + Size: size, + } +} + +// IsValid checks if a PaginationQuery is valid +func (pq *PaginationQuery) IsValid() bool { + if pq == nil { + return false + } + if pq.From == -1 && pq.Size == -1 { + return true + } + return pq.From >= 0 && pq.Size > 0 +} + +func (pq *PaginationQuery) String() string { + if pq == nil { + return "" + } + if pq.From == -1 || pq.Size == -1 { + return "" + } + return fmt.Sprintf(" LIMIT %d OFFSET %d ", pq.Size, pq.From) +} + +// SortQuery holds options for sort functionality of data select. +type SortQuery struct { + SortByList []SortBy +} + +// SortBy holds the name of the property that should be sorted and whether order should be ascending or descending. +type SortBy struct { + Property string + Ascending bool +} + +// NoSort is as option for no sort. +var NoSort = &SortQuery{ + SortByList: []SortBy{}, +} + +// NewSortQuery takes raw sort options list and returns SortQuery object. For example: +// ["a", "parameter1", "d", "parameter2"] - means that the data should be sorted by +// parameter1 (ascending) and later - for results that return equal under parameter 1 sort - by parameter2 (descending) +func NewSortQuery(sortByListRaw []string) *SortQuery { + if sortByListRaw == nil || len(sortByListRaw)%2 == 1 { + return &SortQuery{SortByList: []SortBy{}} + } + sortByList := []SortBy{} + for i := 0; i+1 < len(sortByListRaw); i += 2 { + // parse order option + var ascending bool + orderOption := sortByListRaw[i] + if orderOption == "a" { + ascending = true + } else if orderOption == "d" { + ascending = false + } else { + // Invalid order option. Only ascending (a), descending (d) options are supported + return &SortQuery{SortByList: []SortBy{}} + } + + // parse property name + propertyName := sortByListRaw[i+1] + sortBy := SortBy{ + Property: propertyName, + Ascending: ascending, + } + // Add to the sort options. + sortByList = append(sortByList, sortBy) + } + return &SortQuery{ + SortByList: sortByList, + } +} + +func (sq *SortQuery) String() string { + if sq == nil { + return "" + } + if len(sq.SortByList) == 0 { + return "" + } + res := fmt.Sprintf(" ORDER BY %s ", sq.SortByList[0].Property) + if sq.SortByList[0].Ascending == false { + res += "desc " + } + return res +} + +// FilterQuery holds options for filter functionality of data select. +// currently it only supports string match +type FilterQuery struct { + FilterByList []FilterBy + Extend string +} + +// FilterBy holds the name of the property that should be . +type FilterBy struct { + Property string + Type FilterType + Value string + values []string +} + +// NoFilter is as option for no filter. +var NoFilter = &FilterQuery{ + FilterByList: []FilterBy{}, +} + +// NewFilterQuery takes raw filter options list and returns FilterQuery object. For example: +// ["user_name", "test"] - means that the data should be filtered by +// user_name (%test%), means user_name contains 'test' +func NewFilterQuery(filterByListRaw []string) *FilterQuery { + if filterByListRaw == nil || len(filterByListRaw)%2 == 1 { + return &FilterQuery{FilterByList: []FilterBy{}} + } + filterByList := parseFilter(filterByListRaw) + return &FilterQuery{ + FilterByList: filterByList, + } +} + +func (fq *FilterQuery) Add(filterByListRaw []string) { + filterByList := parseFilter(filterByListRaw) + fq.FilterByList = append(fq.FilterByList, filterByList...) +} +func parseFilter(filterByListRaw []string) []FilterBy { + filterByList := []FilterBy{} + for i := 0; i+1 < len(filterByListRaw); i += 2 { + // parse property name and value + propertyName := filterByListRaw[i] + propertyValue := filterByListRaw[i+1] + propertyValueArray := strings.Split(propertyValue, " ") + filterBy := FilterBy{ + Property: propertyName, + Type: FilterTypeLike, + Value: strings.Join(propertyValueArray, ","), + } + if strings.HasSuffix(propertyName, FilterTypeEqualSuffix) { + filterBy.Type = FilterTypeEqual + filterBy.Property = strings.TrimSuffix(filterBy.Property, FilterTypeEqualSuffix) + } else if strings.HasSuffix(propertyName, FilterTypeNotEqualSuffix) { + filterBy.Type = FilterTypeNotEqual + filterBy.Property = strings.TrimSuffix(filterBy.Property, FilterTypeNotEqualSuffix) + } else if strings.HasSuffix(propertyName, FilterTypeInSuffix) { + filterBy.Type = FilterTypeIn + filterBy.Property = strings.TrimSuffix(filterBy.Property, FilterTypeInSuffix) + } else { + filterBy.Property = strings.TrimSuffix(filterBy.Property, FilterTypeLikeSuffix) + } + + // Add to the sort options. + filterByList = append(filterByList, filterBy) + } + + return filterByList +} +func (fq *FilterQuery) String() string { + if fq == nil || len(fq.FilterByList) == 0 { + return fmt.Sprintf(" '1' = '1' %s ", fq.Extend) + } + + type index struct { + property string + operator FilterType + } + + indexed := make(map[index][]*FilterBy) + From(fq.FilterByList). + GroupByT( + func(fb FilterBy) index { return index{property: fb.Property, operator: fb.Type} }, + func(fb FilterBy) *FilterBy { return &fb }). + ToMapByT(&indexed, + func(g Group) index { return g.Key.(index) }, + func(g Group) []*FilterBy { + var fbs []*FilterBy + From(g.Group).ToSlice(&fbs) + return fbs + }) + var list []*FilterBy + From(indexed).SelectT(func(kv KeyValue) *FilterBy { + k := kv.Key.(index) + v := kv.Value.([]*FilterBy) + var values []string + From(v).SelectT(func(fb *FilterBy) string { return fb.Value }).ToSlice(&values) + return &FilterBy{ + Property: k.property, + Type: k.operator, + values: values, + } + }).ToSlice(&list) + + var items []string + for _, filterBy := range list { + var constraints []string + if filterBy.Type == FilterTypeEqual { + From(filterBy.values).SelectT(func(v string) string { + return fmt.Sprintf(" %s='%s' ", filterBy.Property, sql.EscapeStringBackslash(v)) + }).ToSlice(&constraints) + items = append(items, fmt.Sprintf(" (%s) ", strings.Join(constraints, " or "))) + } else if filterBy.Type == FilterTypeNotEqual { + From(filterBy.values).SelectT(func(v string) string { + return fmt.Sprintf(" %s!='%s' ", filterBy.Property, sql.EscapeStringBackslash(v)) + }).ToSlice(&constraints) + items = append(items, strings.Join(constraints, " and ")) + } else if filterBy.Type == FilterTypeIn { + From(filterBy.values).SelectT(func(v string) string { + return fmt.Sprintf("%s", strings.Replace(sql.EscapeStringBackslash(v), ",", "','", -1)) + }).ToSlice(&constraints) + items = append(items, fmt.Sprintf(` (%s in ('%s')) `, filterBy.Property, strings.Join(constraints, ","))) + } else { + From(filterBy.values).SelectT(func(v string) string { + if v == "%" { + v = "\\%" + } + return fmt.Sprintf(" %s like '%%%s%%' ", filterBy.Property, sql.EscapeUnderlineInLikeStatement(v)) + }).ToSlice(&constraints) + items = append(items, fmt.Sprintf(" (%s) ", strings.Join(constraints, " or "))) + } + } + + return fmt.Sprintf("%s %s", strings.Join(items, "and"), fq.Extend) +} + +// DataSelectQuery currently included only Pagination and Sort options. +type DataSelectQuery struct { + PaginationQuery *PaginationQuery + SortQuery *SortQuery + FilterQuery *FilterQuery +} + +// NoDataSelect fetches all items with no sort. +var NoDataSelect = NewDataSelectQuery(NoPagination, NoSort, NoFilter) + +// DefaultDataSelect fetches first 10 items from page 1 with no sort. +var DefaultDataSelect = NewDataSelectQuery(DefaultPagination, NoSort, NoFilter) + +// NewDataSelectQuery creates DataSelectQuery object from simpler data select queries. +func NewDataSelectQuery(paginationQuery *PaginationQuery, sortQuery *SortQuery, filterQuery *FilterQuery) *DataSelectQuery { + dataselect := &DataSelectQuery{ + PaginationQuery: &PaginationQuery{From: 0, Size: 10}, + SortQuery: &SortQuery{SortByList: []SortBy{}}, + FilterQuery: &FilterQuery{FilterByList: []FilterBy{}}, + } + if paginationQuery != nil { + pq := *paginationQuery + dataselect.PaginationQuery = &pq + } + if sortQuery != nil && len(sortQuery.SortByList) > 0 { + dataselect.SortQuery.SortByList = append(dataselect.SortQuery.SortByList, sortQuery.SortByList...) + } + if filterQuery != nil && len(filterQuery.FilterByList) > 0 { + dataselect.FilterQuery.FilterByList = append(dataselect.FilterQuery.FilterByList, filterQuery.FilterByList...) + } + if filterQuery != nil { + dataselect.FilterQuery.Extend = filterQuery.Extend + if len(filterQuery.FilterByList) > 0 { + dataselect.FilterQuery.FilterByList = append(dataselect.FilterQuery.FilterByList, filterQuery.FilterByList...) + } + } + return dataselect +} diff --git a/server/internal/model/common/dataselect_test.go b/server/internal/model/common/dataselect_test.go new file mode 100644 index 0000000..b78f63f --- /dev/null +++ b/server/internal/model/common/dataselect_test.go @@ -0,0 +1,138 @@ +package common + +import ( + "errors" + "testing" +) + +func TestNewPaginationQuery(t *testing.T) { + resource := []struct { + label string + from int + size int + }{ + { + "normal", + 1, + 10, + }, + { + "normal", + 0, + 10, + }, + { + "sizeError", + 0, + 0, + }, + { + "fromError", + -1, + 1, + }, + { + "doubleError", + -1, + -1, + }, + } + for _, item := range resource { + pgq := NewPaginationQuery(item.from, item.size) + + flag := pgq.IsValid() + if !flag && item.label == "normal" { + t.Error(errors.New("IsValid error")) + } + + str := pgq.String() + if str == "" && item.label == "normal" { + t.Error(errors.New("string error")) + } + } + + if !NoPagination.IsValid() { + t.Error(errors.New("IsValid error")) + } + if NoPagination.String() != "" { + t.Error(errors.New("string error")) + } +} + +func TestNewSortQuery(t *testing.T) { + resource := []string{"a", "param1", "d", "param2", "d", "param3"} + fake1 := []string{} + fake2 := []string{"a"} + fake3 := []string{"a", "p1", "b", "p2"} + + sq := NewSortQuery(resource) + if sq.String() == "" { + t.Error(errors.New("string error")) + } + + fakeSq1 := NewSortQuery(fake1) + if fakeSq1.String() != "" { + t.Error(errors.New("string error")) + } + + fakeSq2 := NewSortQuery(fake2) + if fakeSq2.String() != "" { + t.Error(errors.New("string error")) + } + + fakeSq3 := NewSortQuery(fake3) + if fakeSq3.String() != "" { + t.Error(errors.New("string error")) + } + + if NoSort.String() != "" { + t.Error(errors.New("string error")) + } +} + +func TestNewFilterQuery(t *testing.T) { + resource := []string{"type", "param"} + fake1 := []string{} + fake2 := []string{"type"} + fake3 := []string{"_neqtype", "param"} + fake4 := []string{"_eqtype", "param"} + + fq := NewFilterQuery(resource) + if fq.String() == " '1' = '1' " { + t.Error(errors.New("string error")) + } + + fqFake1 := NewFilterQuery(fake1) + if fqFake1.String() != " '1' = '1' " { + t.Error(errors.New("string error")) + } + + fqFake2 := NewFilterQuery(fake2) + if fqFake2.String() != " '1' = '1' " { + t.Error(errors.New("string error")) + } + + fqFake3 := NewFilterQuery(fake3) + if fqFake3.String() == " '1' = '1' " { + t.Error(errors.New("string error")) + } + + fqFake4 := NewFilterQuery(fake4) + if fqFake4.String() == " '1' = '1' " { + t.Error(errors.New("string error")) + } +} + +func TestNewDataSelectQuery(t *testing.T) { + resource1 := []string{"type", "param"} + resource2 := []string{"a", "param"} + + pgq := NewPaginationQuery(0, 10) + sq := NewSortQuery(resource2) + fq := NewFilterQuery(resource1) + + NewDataSelectQuery(nil, nil, nil) + NewDataSelectQuery(pgq, nil, nil) + NewDataSelectQuery(pgq, sq, nil) + NewDataSelectQuery(pgq, sq, fq) +} diff --git a/server/internal/model/common/sql/escape.go b/server/internal/model/common/sql/escape.go new file mode 100644 index 0000000..febe7e6 --- /dev/null +++ b/server/internal/model/common/sql/escape.go @@ -0,0 +1,71 @@ +package sql + +// EscapeStringBackslash escapes special characters. +func EscapeStringBackslash(v string) string { + buf := make([]byte, len(v)*2, len(v)*2) + pos := 0 + + for i := 0; i < len(v); i++ { + c := v[i] + switch c { + case '\x00': + buf[pos] = '\\' + buf[pos+1] = '0' + pos += 2 + case '\n': + buf[pos] = '\\' + buf[pos+1] = 'n' + pos += 2 + case '\r': + buf[pos] = '\\' + buf[pos+1] = 'r' + pos += 2 + case '\x1a': + buf[pos] = '\\' + buf[pos+1] = 'Z' + pos += 2 + case '\'': + buf[pos] = '\\' + buf[pos+1] = '\'' + pos += 2 + case '"': + buf[pos] = '\\' + buf[pos+1] = '"' + pos += 2 + case '\\': + buf[pos] = '\\' + buf[pos+1] = '\\' + pos += 2 + default: + buf[pos] = c + pos++ + } + } + + return string(buf[:pos]) +} + +func EscapeSliceForInjection(src []string) []string { + out := make([]string, 0, len(src)) + for i := range src { + out = append(out, EscapeStringBackslash(src[i])) + } + return out +} + +func EscapeUnderlineInLikeStatement(v string) string { + v = EscapeStringBackslash(v) + buf := make([]byte, len(v)*2, len(v)*2) + pos := 0 + for i := 0; i < len(v); i++ { + if v[i] == '_' { + buf[pos] = '\\' + buf[pos+1] = '_' + pos += 2 + } else { + buf[pos] = v[i] + pos++ + } + } + return string(buf[:pos]) +} diff --git a/server/internal/model/device/device_health_record.go b/server/internal/model/device/device_health_record.go new file mode 100644 index 0000000..caf8c0e --- /dev/null +++ b/server/internal/model/device/device_health_record.go @@ -0,0 +1,59 @@ +package device + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +// 设备健康检测记录。 +// 表名:perc_device_health_record +type DeviceHealthRecord struct { + Id int64 `gorm:"column:id;primaryKey" json:"id"` //type:*int comment:主键 version:2023-9-11 14:28 + SerialNo string `gorm:"column:serial_no" json:"serialNo" validate:"required"` //type:string comment:序列号 version:2023-9-11 14:28 + BatchNo string `gorm:"column:batch_no" json:"batchNo" validate:"required"` //type:string comment:检测批次号 version:2023-9-11 14:28 + ItemName string `gorm:"column:item_name" json:"itemName" validate:"required"` //type:string comment:检测项 version:2023-9-11 14:28 + ItemScore string `gorm:"column:item_score" json:"itemScore"` //type:string comment:检测得分 version:2023-9-11 14:28 + ItemResult string `gorm:"column:item_result" json:"itemResult"` //type:string comment:检测结果 version:2023-9-11 14:28 + CheckTime time.Time `gorm:"column:check_time" json:"checkTime" validate:"required"` //type:*time.Time comment:检测时间 version:2023-9-11 14:28 +} + +func (DeviceHealthRecord) TableName() string { + return "perc_device_health_record" +} + +func (d *DeviceHealthRecord) Create() (int64, error) { + d.CheckTime = time.Now() + tx := model.DB().Create(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceHealthRecord) Delete() (int64, error) { + tx := model.DB().Delete(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceHealthRecord) Get(fields map[string]interface{}) (DeviceHealthRecord, error) { + device := DeviceHealthRecord{} + tx := model.DB().Where(fields).First(&device) + if tx.Error != nil { + return device, tx.Error + } + return device, nil +} + +func (d *DeviceHealthRecord) List(limit int, offset int, fields map[string]interface{}) ([]DeviceHealthRecord, int64, error) { + devices := []DeviceHealthRecord{} + tx := model.DB().Limit(limit).Offset(offset).Where(fields).Find(&devices) + if tx.Error != nil { + return nil, 0, tx.Error + } + var total int64 + model.DB().Model(DeviceHealthRecord{}).Where(fields).Count(&total) + return devices, total, nil +} diff --git a/server/internal/model/device/device_info.go b/server/internal/model/device/device_info.go new file mode 100644 index 0000000..55880e1 --- /dev/null +++ b/server/internal/model/device/device_info.go @@ -0,0 +1,252 @@ +package device + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/agent" + "github.com/golang/glog" + "gorm.io/datatypes" + "strings" + + "time" +) + +var agents []agent.AgentInfo + +const ( + AGENT_STATUS_OFF = "0" + AGENT_STATUS_ON = "1" + AGENT_STATUS_ERR = "2" +) + +func init() { + go func() { + defer func() { + if r := recover(); r != nil { + glog.Errorf("recover from lastVersion: %v", r) + } + }() + const interval = time.Minute * 2 + ticker := time.NewTicker(interval) + for _ = range ticker.C { + aget := &agent.AgentInfo{} + agents, _ = aget.ListLastVersion() + } + }() +} + +// 设备信息(一体机)。 +// 表名:perc_device_info +type DeviceInfo struct { + SerialNo string `gorm:"column:serial_no;primaryKey" json:"serialNo" validate:"required"` //type:string comment:序列号 version:2023-9-11 14:27 + OsType string `gorm:"column:os_type" json:"osType"` //type:string comment:操作系统类型;字典:Windows\Ubuntu\CentOS\KylinOS version:2023-9-11 14:27 + ArchType string `gorm:"column:arch_type" json:"archType"` //type:string comment:芯片架构;字典: X86\ARM version:2023-9-11 14:27 + AgentVersion string `gorm:"column:agent_version" json:"agentVersion"` //type:string comment:小助手版本 version:2023-9-11 14:27 + AgentStatus string `gorm:"column:agent_status" json:"agentStatus"` //type:string comment:小助手状态;0:离线,1:在线,2:故障 version:2023-9-11 14:27 + KernelVersion string `gorm:"column:kernel_version" json:"kernelVersion"` + LastStarttime time.Time `gorm:"column:last_starttime" json:"lastStarttime"` //type:time.Time comment:最近开机时间 version:2023-9-11 14:27 + IsNew string `gorm:"column:is_new" json:"isNew"` //type:string comment:是否最新版本(N/Y) + CpuNo string `gorm:"column:cpu_no" json:"cpuNo"` //type:string comment:cpu型号 version:2023-9-11 14:27 + GpuNo string `gorm:"column:gpu_no" json:"gpuNo"` //type:string comment:gpu型号 version:2023-9-11 14:27 + Memory datatypes.JSON `gorm:"column:memory;type:jsonb" json:"memory"` //type:string comment:内存型号 version:2023-9-11 14:27 + Networks datatypes.JSON `gorm:"column:networks;type:jsonb" json:"networks"` //type:string comment:网卡型号;json格式存储 + DiskNo string `gorm:"column:disk_no" json:"diskNo"` //type:string comment:硬盘型号 version:2023-9-11 14:27 + OsInfo string `gorm:"column:os_info" json:"osInfo"` //type:string comment:操作系统 version:2023-9-11 14:27 + OtherInfo string `gorm:"column:other_info" json:"otherInfo"` //type:string comment:其他信息;json格式存储 version:2023-9-11 14:27 + UpdateTime time.Time `gorm:"column:update_time" json:"updateTime"` //type:time.Time comment:更新时间 version:2023-9-11 14:27 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:time.Time comment:创建时间 + IPAddress string `gorm:"column:ip_address" json:"ipAddress"` + Port uint16 `gorm:"column:port" json:"port"` + AgentName string `gorm:"column:agent_name" json:"agentName"` + AgentPwd string `gorm:"column:agent_pwd" json:"agentPwd"` +} + +type AssetInfo struct { + Name string `gorm:"column:name" json:"name"` //资产名称 + AssetType string `gorm:"column:type" json:"assetType"` //资产类型 1 应用一体机 2 调度一体机 3 纳管一体机 + Cn string `gorm:"column:cn" json:"cn"` //关联用户 + AccountName string `gorm:"column:account_name" json:"accountName"` //关联账户 + Address string `gorm:"column:address" json:"address"` //安装地址 + AccountManager string `gorm:"column:account_manager" json:"accountManager"` //客户经理 + Phone string `gorm:"column:phone" json:"phone"` + CompanyId string `gorm:"column:company_id" json:"companyId"` + CompanyName string `gorm:"column:company_name" json:"companyName"` + Uptime time.Time `gorm:"column:uptime" json:"uptime"` //上线时间 + Notes string `gorm:"column:notes" json:"notes"` //备注 + State string `gorm:"column:state" json:"state"` //状态 1 在线 2 离线 3 故障 4 回收中 5 已回收 +} + +func (*DeviceInfo) TableName() string { + return "perc_device_info" +} + +func (d *DeviceInfo) Create() (int64, error) { + d.CreateTime = time.Now() + d.UpdateTime = time.Now() + tx := model.DB().Create(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +// 保存和更新基础信息 +func (d *DeviceInfo) SaveBase() (int64, error) { + c := int64(0) + tx := model.DB().Model(&d).Where("serial_no", d.SerialNo).Count(&c) + if c > 0 { + updated := map[string]interface{}{ + "os_type": d.OsType, + "cpu_no": d.CpuNo, + "gpu_no": d.GpuNo, + "memory": d.Memory, + "networks": d.Networks, + "disk_no": d.DiskNo, + "os_info": d.OsInfo, + "other_info": d.OtherInfo, + "arch_type": d.ArchType, + "update_time": time.Now(), + } + tx = model.DB().Model(&d).Updates(updated) + } else { + d.UpdateTime = time.Now() + d.CreateTime = time.Now() + tx = model.DB().Create(d) + } + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +// 保存和更新健康监测信息 +func (d *DeviceInfo) SaveHealth() (int64, error) { + c := int64(0) + // todo 考虑增加内存缓存 [每台机器每30s一次,存在性能压力] + tx := model.DB().Model(&d).Where("serial_no", d.SerialNo).Count(&c) + //判断是否是最新版本 + fl := "N" + for _, ag := range agents { + if ag.Version == d.AgentVersion && ag.OsType == d.OsType && ag.ArchType == d.ArchType { + fl = "Y" + } + } + if c > 0 { + // todo 考虑增加内存缓存 [每台机器每30s一次,存在性能压力] + // 需评估一下:改为批量更新? 考虑多节点的问题 + updated := map[string]interface{}{ + "agent_version": d.AgentVersion, + "os_type": d.OsType, + "arch_type": d.ArchType, + "os_info": d.OsInfo, + "agent_status": AGENT_STATUS_ON, + "kernel_version": d.KernelVersion, + "last_starttime": d.LastStarttime, + "update_time": time.Now(), + "is_new": fl, + "ip_address": d.IPAddress, + "port": d.Port, + "agent_name": d.AgentName, + "agent_pwd": d.AgentPwd, + } + + tx = model.DB().Model(&d).Updates(updated) + } else { + d.UpdateTime = time.Now() + d.CreateTime = time.Now() + d.IsNew = fl + tx = model.DB().Create(d) + } + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceInfo) Delete() (int64, error) { + tx := model.DB().Delete(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceInfo) Update(fields []string) (int64, error) { + d.UpdateTime = time.Now() + tx := model.DB().Model(&d).Select(fields).Updates(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceInfo) GetHistoryUsageRate() (map[string]interface{}, error) { + result := make(map[string]interface{}, 1) + tx := model.DB().Raw("select ROUND(COUNT(CASE WHEN p.last_starttime IS NOT NULL THEN 1 END) / CAST(COUNT(*) AS DECIMAL(10,1)), 4) as history from asset.t_asset a LEFT JOIN perc_device_info p on p.serial_no=a.serialno").Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} + +func (d *DeviceInfo) GetTodayUsageRate() (map[string]interface{}, error) { + result := make(map[string]interface{}, 1) + tx := model.DB().Raw("select ROUND(COUNT(CASE WHEN p.last_starttime >= CURRENT_DATE THEN 1 END) / CAST(COUNT(*) AS DECIMAL(10,1)), 4) as today from asset.t_asset a LEFT JOIN perc_device_info p on p.serial_no=a.serialno").Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} + +type AssetDeviceInfo struct { + DeviceInfo + AssetInfo +} + +func (d *AssetDeviceInfo) Get(fields map[string]interface{}) (AssetDeviceInfo, error) { + device := AssetDeviceInfo{} + query := model.DB().Table("perc_device_info").Select("perc_device_info.*,pr.name,pr.type,pr.address,pr.company_id,pr.company_name,pr.uptime,pr.notes,pr.account_manager,pr.phone,pr.cn,pr.state").Joins("LEFT JOIN asset.t_asset pr on serial_no=pr.serialno").Where(fields).First(&device) + if query.Error != nil { + return device, query.Error + } + if time.Now().Unix()-device.UpdateTime.Unix() > 90 { + device.AgentStatus = "0" + } else { + device.AgentStatus = "1" + } + return device, nil +} + +func (d *DeviceInfo) GetBySerialNos(serialNos []string) ([]DeviceInfo, error) { + var devices []DeviceInfo + query := model.DB().Table("perc_device_info").Select("*").Where("serial_no in ('" + strings.Join(serialNos, "','") + "')").Find(&devices) + return devices, query.Error +} + +func (d *DeviceInfo) GetBySerialNo(serialNo string) (DeviceInfo, error) { + var device DeviceInfo + query := model.DB().Table("perc_device_info").Select("*").Where("serial_no = '" + serialNo + "'").First(&device) + return device, query.Error +} + +func (d *AssetDeviceInfo) Page(page *model.Page[AssetDeviceInfo], fields map[string]interface{}) error { + query := model.DB().Table("perc_device_info").Select("perc_device_info.*,pr.name,pr.type,pr.company_id,pr.company_name,pr.account_manager,pr.phone,pr.cn,pr.state").Joins("LEFT JOIN asset.t_asset pr on serial_no=pr.serialno").Where(fields).Where("pr.serialno is not NULL") + err := page.ScanPages(query) + if err != nil { + return err + } + for i, _ := range page.Data { + if time.Now().Unix()-page.Data[i].UpdateTime.Unix() > 90 { + page.Data[i].AgentStatus = "0" + } else { + page.Data[i].AgentStatus = "1" + } + } + return nil +} + +func (d *DeviceInfo) CountUpgradeNum(fields map[string]interface{}) ([]map[string]interface{}, error) { + var result []map[string]interface{} + sql := "select IS_NEW as isNew,COUNT(IS_NEW) FROM perc_device_info LEFT JOIN asset.t_asset pr on serial_no=pr.serialno WHERE pr.serialno is not NULL GROUP BY IS_NEW " + query := model.DB().Raw(sql).Scan(&result) + return result, query.Error +} diff --git a/server/internal/model/device/device_online_count.go b/server/internal/model/device/device_online_count.go new file mode 100644 index 0000000..6373617 --- /dev/null +++ b/server/internal/model/device/device_online_count.go @@ -0,0 +1,40 @@ +package device + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +type DeviceOnlineCount struct { + Id string `gorm:"column:id;primaryKey" json:"id"` + Count int `gorm:"column:count" json:"count"` + UpdateTime time.Time `gorm:"column:update_time" json:"updateTime"` +} + +func (DeviceOnlineCount) TableName() string { + return "perc_device_online_count" +} + +func (d *DeviceOnlineCount) CreateOrUpdate() (int64, error) { + updateTime := d.UpdateTime.Format("2006-01-02 15:04:05.999999999 -0700") + tx := model.DB().Exec(fmt.Sprintf("INSERT INTO perc_device_online_count (id, count, update_time) VALUES ('%s', %d, '%s') ON CONFLICT (id) DO UPDATE SET count = perc_device_online_count.count + %d, update_time = '%s';", d.Id, d.Count, updateTime, d.Count, updateTime)) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +type TimeCount struct { + Time string `gorm:"column:time" json:"time"` + Count int `gorm:"column:count" json:"count"` +} + +func (d *DeviceOnlineCount) Query(sql string) ([]TimeCount, error) { + var result []TimeCount + tx := model.DB().Raw(sql).Find(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, nil +} diff --git a/server/internal/model/device/device_operate_log.go b/server/internal/model/device/device_operate_log.go new file mode 100644 index 0000000..226986a --- /dev/null +++ b/server/internal/model/device/device_operate_log.go @@ -0,0 +1,109 @@ +package device + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "strings" + "time" +) + +type DeviceOperateLog struct { + Id int64 `gorm:"column:id;primaryKey" json:"id,omitempty"` //type:*int comment:主键 version:2023-9-11 14:29 + SerialNo string `gorm:"column:serial_no" json:"serialNo"` + Operate string `gorm:"column:operate" json:"operate"` + OperateTime time.Time `gorm:"column:operate_time" json:"operateTime"` +} + +func (*DeviceOperateLog) TableName() string { + return "perc_device_operate_log" +} + +func (d *DeviceOperateLog) Create() (int64, error) { + tx := model.DB().Create(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceOperateLog) List(fields map[string]interface{}) ([]DeviceOperateLog, error) { + query := model.DB().Table(d.TableName()).Select("serial_no, operate, operate_time") + startTime := fields["startTime"] + if startTime == nil { + now := time.Now() + todayBegin := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) + startTime = todayBegin + } + endTime := fields["endTime"] + delete(fields, "endTime") + if endTime == nil { + endTime = time.Now() + } + query = query.Where("serial_no = ? AND operate_time >= ? AND operate_time <= ?", fields["serial_no"], startTime, endTime) + var result []DeviceOperateLog + tx := query.Scan(&result) + return result, tx.Error +} + +// Page 可以使用类似 {"age >": 30} 这样的字段映射来过滤年龄大于30的结果 +func (d *DeviceOperateLog) Page(page *model.Page[DeviceOperateLog], fields map[string]interface{}) error { + query := model.DB() + if fields != nil { + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + // 支持模糊查询 + if strings.Contains(key, "%") { + kk := strings.ReplaceAll(key, "%", "") + query = query.Where(kk+" like ?", "%"+value.(string)+"%") + continue + } + + // 检查字段是否包含操作符 + if strings.Contains(key, ">") || strings.Contains(key, "<") { + // 分割字段名和操作符 + parts := strings.Split(key, " ") + if len(parts) == 2 { + field := parts[0] + op := parts[1] + switch op { + case ">": + query = query.Where(field+" > ?", value) + case "<": + query = query.Where(field+" < ?", value) + default: + query = query.Where(key+" = ?", value) + } + } else { + query = query.Where(key+" = ?", value) + } + } else { + query = query.Where(key+" = ?", value) + } + + } + } + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +type DateCount struct { + Date string `gorm:"column:date" json:"date"` + Count int `gorm:"column:count" json:"count"` +} + +func (d *DeviceOperateLog) StatisticDeviceBootCountByDuration(serialNo, startDate, endDate string) ([]DateCount, error) { + var result []DateCount + tx := model.DB().Raw(fmt.Sprintf("SELECT to_char(date_trunc('day', operate_time), 'YYYYMMDD') AS date, COUNT(*) AS count FROM perc_device_operate_log WHERE serial_no = '%s' AND operate = '1' AND operate_time >= '%s' AND operate_time <= '%s' GROUP BY date ORDER BY date;", serialNo, startDate, endDate)).Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} diff --git a/server/internal/model/device/device_run_time.go b/server/internal/model/device/device_run_time.go new file mode 100644 index 0000000..7b3fc76 --- /dev/null +++ b/server/internal/model/device/device_run_time.go @@ -0,0 +1,66 @@ +package device + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +type DeviceRunTime struct { + Id int64 `gorm:"column:id;primaryKey" json:"id,omitempty"` + Date string `gorm:"column:date" json:"date"` + SerialNo string `gorm:"column:serial_no" json:"serialNo"` + RunTime int64 `gorm:"column:run_time" json:"run_time"` + UpdateTime time.Time `gorm:"column:update_time" json:"updateTime"` +} + +func (*DeviceRunTime) TableName() string { + return "perc_device_run_time" +} + +func (d *DeviceRunTime) UpInsert() (int64, error) { + updateTime := d.UpdateTime.Format("2006-01-02 15:04:05.999999999 -0700") + tx := model.DB().Exec(fmt.Sprintf("INSERT INTO perc_device_run_time (date, serial_no, run_time, update_time) VALUES ('%s', '%s', %d, '%s') ON CONFLICT (serial_no, date) DO UPDATE SET run_time = perc_device_run_time.run_time + %d, update_time = '%s';", d.Date, d.SerialNo, d.RunTime, updateTime, d.RunTime, updateTime)) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +type DateRunTime struct { + Date string `gorm:"column:date" json:"date"` + RunTime int `gorm:"column:run_time" json:"runTime"` +} + +func (d *DeviceRunTime) GetRunTimeByDay(serialNo, date string) (*DateRunTime, error) { + result := &DateRunTime{} + tx := model.DB().Raw(fmt.Sprintf("SELECT date, run_time FROM perc_device_run_time WHERE serial_no = '%s' AND date = '%s';", serialNo, date)).Scan(result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} + +func (d *DeviceRunTime) StatisticRunTimeByDuration(serialNo, startDate, endDate string) ([]DateRunTime, error) { + var result []DateRunTime + tx := model.DB().Raw(fmt.Sprintf("SELECT date, run_time FROM perc_device_run_time WHERE serial_no = '%s' AND date >= '%s' AND date <= '%s' ORDER BY date ASC;", serialNo, startDate, endDate)).Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} + +type DeviceRunTimeStatistic struct { + SerialNo string `gorm:"column:serial_no" json:"serialNo"` + Name string `gorm:"column:name" json:"name"` + RunTime int `gorm:"column:run_time" json:"runTime"` +} + +func (d *DeviceRunTime) StatisticRunTimeByAllDevice() ([]DeviceRunTimeStatistic, error) { + var result []DeviceRunTimeStatistic + tx := model.DB().Raw("select serial_no, name, run_time from asset.t_asset a inner join (select serial_no, sum(run_time) as run_time from perc_device_run_time group by serial_no) b on a.serialno = b.serial_no order by run_time desc;").Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, tx.Error +} diff --git a/server/internal/model/device/device_upgrade_record.go b/server/internal/model/device/device_upgrade_record.go new file mode 100644 index 0000000..a5753c5 --- /dev/null +++ b/server/internal/model/device/device_upgrade_record.go @@ -0,0 +1,63 @@ +package device + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +// 设备升级记录。 +// 表名:perc_device_upgrade_record +type DeviceUpgradeRecord struct { + Id int64 `gorm:"column:id;primaryKey" json:"id"` //type:*int comment:主键 version:2023-9-11 14:29 + SerialNo string `gorm:"column:serial_no" json:"serialNo"` //type:*int comment:序列号 version:2023-9-11 14:29 + AgentId string `gorm:"column:agent_id" json:"agentId"` //type:string comment:小助手版本ID version:2023-9-11 14:29 + AgentVersion string `gorm:"column:agent_version" json:"agentVersion"` //type:string comment:升级版本 version:2023-9-11 14:29 + OldVersion string `gorm:"column:old_version" json:"oldVersion"` //type:string comment:旧版本 + Option string `gorm:"column:option" json:"option"` //type:string comment:操作类型 + UpgradeTime time.Time `gorm:"column:upgrade_time" json:"upgradeTime"` //type:*time.Time comment:升级时间 version:2023-9-11 14:29 + UpgradeStatus string `gorm:"column:upgrade_status" json:"upgradeStatus"` //type:string comment:0:失败,1:成功 version:2023-9-11 14:29 + UpgradeResult string `gorm:"column:upgrade_result" json:"upgradeResult"` //type:string comment:升级结果 version:2023-9-11 14:29 +} + +type UpgradeRecord struct { + DeviceUpgradeRecord + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` +} + +func (DeviceUpgradeRecord) TableName() string { + return "perc_device_upgrade_record" +} + +func (d *DeviceUpgradeRecord) Create() (int64, error) { + tx := model.DB().Create(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRecord) Delete() (int64, error) { + tx := model.DB().Delete(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRecord) Get(fields map[string]interface{}) (DeviceUpgradeRecord, error) { + record := DeviceUpgradeRecord{} + tx := model.DB().Where(fields).First(&record) + if tx.Error != nil { + return record, tx.Error + } + return record, nil +} + +func (d *DeviceUpgradeRecord) Page(page *model.Page[UpgradeRecord], fields map[string]interface{}) error { + query := model.DB().Table("perc_device_upgrade_record").Select("perc_device_upgrade_record.* , a.create_time ").Joins("LEFT JOIN perc_agent_info a on perc_device_upgrade_record.agent_id=a.id").Where(fields) + err := page.ScanPages(query) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/model/device/device_upgrade_rule.go b/server/internal/model/device/device_upgrade_rule.go new file mode 100644 index 0000000..c47fda4 --- /dev/null +++ b/server/internal/model/device/device_upgrade_rule.go @@ -0,0 +1,89 @@ +package device + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" + "time" +) + +// 设备升级规则。 +// 表名:perc_device_upgrade_rule +type DeviceUpgradeRule struct { + Id int64 `gorm:"column:id;primaryKey" json:"id"` //type:*int comment:主键 version:2023-9-11 14:31 + DeviceType string `gorm:"column:device_type" json:"deviceType"` //type:string comment:设备类型;0:为全部,1:应用一体机,2:调度一体机,3:纳管一体机 version:2023-9-11 14:31 + VendorId string `gorm:"column:vendor_id" json:"vendorId"` //type:string comment:企业ID;0:为全部 version:2023-9-11 14:31 + UpgradeTime time.Time `gorm:"column:upgrade_time" json:"upgradeTime"` //type:*time.Time comment:指定升级时间;指定时间升级时有值 version:2023-9-11 14:31 + UpgradeRule string `gorm:"column:upgrade_rule" json:"upgradeRule"` //type:string comment:升级策略;0:立刻升级,1:指定时间升级 version:2023-9-11 14:31 +} + +func (DeviceUpgradeRule) TableName() string { + return "perc_device_upgrade_rule" +} + +func (d *DeviceUpgradeRule) Create() (int64, error) { + tx := model.DB().Create(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRule) Delete() (int64, error) { + tx := model.DB().Delete(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRule) DeleteBatch(ids []int64) (int64, error) { + tx := model.DB().Where("id in ?", ids).Delete(&DeviceUpgradeRule{}) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRule) Update(fields []string) (int64, error) { + tx := model.DB().Model(&d).Select(fields).Updates(d) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (d *DeviceUpgradeRule) Get(fields map[string]interface{}) (DeviceUpgradeRule, error) { + device := DeviceUpgradeRule{} + tx := model.DB().Where(fields).First(&device) + if tx.Error != nil { + return device, tx.Error + } + return device, nil +} + +func (d *DeviceUpgradeRule) GetBatch(ids []int64) ([]DeviceUpgradeRule, error) { + devices := []DeviceUpgradeRule{} + tx := model.DB().Where("id in ?", ids).Find(&devices) + if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { + return devices, tx.Error + } + return devices, nil +} + +func (d *DeviceUpgradeRule) ListAll(fields map[string]interface{}) ([]DeviceUpgradeRule, error) { + devices := []DeviceUpgradeRule{} + tx := model.DB().Where(fields).Find(&devices) + if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { + return devices, tx.Error + } + return devices, nil +} + +func (d *DeviceUpgradeRule) Page(page *model.Page[DeviceUpgradeRule], fields map[string]interface{}) error { + query := model.DB().Where(fields) + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} diff --git a/server/internal/model/event/event.go b/server/internal/model/event/event.go new file mode 100644 index 0000000..893cb04 --- /dev/null +++ b/server/internal/model/event/event.go @@ -0,0 +1,120 @@ +package event + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" + "time" +) + +type Event struct { // 事件定义 + Id int64 `gorm:"column:id;primaryKey" json:"id"` //type:string comment:事件编号 version:2023-10-23 10:19 + EventName string `gorm:"column:event_name" json:"eventName"` //type:string comment:事件名称 version:2023-10-23 10:19 + Level string `gorm:"column:level" json:"level"` //type:string comment:事件等级;信息:INFO,警告:WARN,严重:CRITICAL version:2023-10-23 10:19 + EffectiveObject string `gorm:"column:effective_object" json:"effectiveObject"` //type:string comment:事件对象 version:2023-10-23 10:19 + EventSource string `gorm:"column:event_source" json:"eventSource"` //type:string comment:事件源;指标系统:Metric,纳管系统性能门限:ThresholdSystem version:2023-10-23 10:19 + ThresholdId int `gorm:"column:threshold_id" json:"thresholdId"` //type:string comment:门限Id;门限Id,纳管系统性能门限时启用 version:2023-10-23 10:19 + ThresholdName string `gorm:"column:threshold_name" json:"thresholdName"` //type:string comment:门限名称;门限名称,纳管系统性能门限时启用 version:2023-10-23 10:19 + ThresholdType string `gorm:"column:threshold_type" json:"thresholdType"` //type:string comment:门限类型;门限类型,纳管系统性能门限时启用.门限类型,static静态门限,trends动态门限' version:2023-10-23 10:19 + BelongSpeciality string `gorm:"column:belong_speciality" json:"belongSpeciality"` //type:string comment:所属专业;所属专业,纳管系统性能门限时启用. version:2023-10-23 10:19 + LevelMapping string `gorm:"column:level_mapping" json:"levelMapping"` //type:string comment:事件等级映射;事件等级映射,纳管系统性能门限时启用。默认使用default version:2023-10-23 10:19 + TriggerRule string `gorm:"column:trigger_rule" json:"triggerRule"` //type:string comment:触发规则;json存储(指标系统时启用,key、operator、value 列表) version:2023-10-23 10:19 + TriggerZh string `gorm:"column:trigger_zh" json:"triggerZh"` //type:string comment:触发规则描述 version:2023-10-23 10:19 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:*time.Time comment:创建时间 version:2023-10-23 10:19 +} + +// TableName 表名:perc_event_record,事件记录表。 +// 说明: +func (Event) TableName() string { + return "perc_event" +} + +func (e *Event) BatchCreate(records []*Event) (int64, error) { + tx := model.DB().Create(records) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) Create() (int64, error) { + e.CreateTime = time.Now() + tx := model.DB().Create(e) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) Delete() (int64, error) { + tx := model.DB().Delete(e) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) BatchDelete(ids []Event) (int64, error) { + tx := model.DB().Delete(e, ids) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) Get(fields map[string]interface{}) (*Event, error) { + event := &Event{} + tx := model.DB().Where(fields).First(&event) + if tx.Error != nil { + return nil, tx.Error + } + return event, nil +} + +func (e *Event) Page(page *model.Page[Event], fields map[string]interface{}) error { + eventName := fields["event_name"] + query := model.DB() + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("event_name like ?", eventName) + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +func (e *Event) BatchUpdate(records []*Event) (int64, error) { + tx := model.DB().Updates(records) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) Update(fields []string) (int64, error) { + tx := model.DB().Model(&e).Select(fields).Updates(e) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (e *Event) ListAll(filter map[string]interface{}) ([]Event, error) { + var rules []Event + tx := model.DB().Where(filter).Find(&rules) + if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { + return rules, tx.Error + } + return rules, nil +} + +//func (e *Event) ListThresholds(filter map[string]interface{}) ([]Event, error) { +// var rules []Event +// tx := model.DB().Select([]string{"id", "event_name", "threshold_id"}).Where(filter).Find(&rules) +// if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { +// return rules, tx.Error +// } +// return rules, nil +//} diff --git a/server/internal/model/event/event_record.go b/server/internal/model/event/event_record.go new file mode 100644 index 0000000..60faa0b --- /dev/null +++ b/server/internal/model/event/event_record.go @@ -0,0 +1,222 @@ +package event + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +const ( + CRITICAL = "CRITICAL" + WARN = "WARN" + INFO = "INFO" +) + +type EventRecord struct { + Id string `gorm:"column:id;primaryKey" json:"Id"` //type:string comment:事件编号 version:2023-10-23 10:19 + EventName string `gorm:"column:event_name" json:"EventName"` //type:string comment:事件名称 version:2023-10-23 10:19 + EventKey int64 `gorm:"column:event_key" json:"EventKey"` //type:string comment:事件KEY version:2023-10-23 10:19 + Level string `gorm:"column:level" json:"Level"` //type:string comment:事件等级;信息:INFO,警告:WARN,严重:CRITICAL version:2023-10-23 10:19 + ResourceId string `gorm:"column:resource_id" json:"ResourceId"` //type:string comment:资源ID version:2023-10-23 10:19 + ResourceName string `gorm:"column:resource_name" json:"ResourceName"` //type:string comment:资源名称 version:2023-10-23 10:19 + ResourceType string `gorm:"column:resource_type" json:"ResourceType"` //type:string comment:资源类型 version:2023-10-23 10:19 + ResourceNode string `gorm:"column:resource_node" json:"ResourceNode"` //type:string comment:算力节点;json存储 version:2023-10-23 10:19 + EventTime time.Time `gorm:"column:event_time" json:"EventTime"` //type:*time.Time comment:事件时间 version:2023-10-23 10:19 + EventInfo string `gorm:"column:event_info" json:"EventInfo"` //type:string comment:事件内容 version:2023-10-23 10:19 + TaskId string `gorm:"column:task_id" json:"TaskId"` //type:string comment:事件任务;关联任务ID version:2023-10-23 10:19 + CreateTime time.Time `gorm:"column:create_time" json:"CreateTime"` //type:*time.Time comment:入库时间 version:2023-10-23 10:19 +} + +// TableName 表名:perc_event_record,事件记录表。 +// 说明: +func (EventRecord) TableName() string { + return "perc_event_record" +} + +type EventRecordStruct struct { + Id string `gorm:"column:id;primaryKey" json:"id"` + EventName string `gorm:"column:event_name" json:"eventName"` + EventKey int64 `gorm:"column:event_key" json:"eventKey"` + Level string `gorm:"column:level" json:"level"` + ResourceId string `gorm:"column:resource_id" json:"resourceId"` + ResourceName string `gorm:"column:resource_name" json:"resourceName"` + ResourceType string `gorm:"column:resource_type" json:"resourceType"` + ResourceNode string `gorm:"column:resource_node" json:"resourceNode"` + EventTime time.Time `gorm:"column:event_time" json:"eventTime"` + EventInfo string `gorm:"column:event_info" json:"eventInfo"` + TaskId string `gorm:"column:task_id" json:"taskId"` + TaskStatus string `gorm:"column:task_status" json:"taskStatus"` + TriggerType string `gorm:"column:trigger_type" json:"triggerType"` + PlanId string `gorm:"column:plan_id" json:"planId"` + HandleUsername string `gorm:"column:handle_username" json:"handleUsername"` + HandleAdvice string `gorm:"column:handle_advice" json:"handleAdvice"` + StartTime time.Time `gorm:"column:start_time" json:"startTime"` + EndTime time.Time `gorm:"column:end_time" json:"endTime"` + HandleResult string `gorm:"column:handle_result" json:"handleResult"` + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` +} + +func (r *EventRecord) Get(fields map[string]interface{}) (EventRecord, error) { + event := EventRecord{} + tx := model.DB().Where(fields).First(&event) + if tx.Error != nil { + return event, tx.Error + } + return event, nil +} + +func (e *EventRecordStruct) Count(fields map[string]interface{}) (int64, error) { + query := model.DB().Table("perc_event_record per").Select("count(*)").Joins("LEFT JOIN sched_task st on per.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("per.event_name like ?", eventName) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + status, _ := fields["task_status"] + if status != nil { + if status == "-1" { + query = query.Where("task_id is null") + } else { + query = query.Where("task_status = ?", status) + } + } else { + query = query.Where("task_id is null or task_status in ('0', '3', '4')") + } + var count int64 + tx := query.Count(&count) + return count, tx.Error +} + +func (e *EventRecordStruct) GetEvents(fields map[string]interface{}) ([]EventRecordStruct, error) { + query := model.DB().Table("perc_event_record per").Select("per.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on per.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("per.event_name like ?", eventName) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + status, _ := fields["task_status"] + if status != nil { + if status == "-1" { + query = query.Where("task_id is null") + } else { + query = query.Where("task_status = ?", status) + } + } else { + query = query.Where("task_id is null or task_status in ('0', '3', '4')") + } + var result []EventRecordStruct + tx := query.Find(&result) + return result, tx.Error +} + +func (e *EventRecordStruct) GetById(id string) (*EventRecordStruct, error) { + event := &EventRecordStruct{} + tx := model.DB().Table("perc_event_record per").Select("per.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on per.task_id = st.id").Where("per.id = ?", id).First(event) + if tx.Error != nil { + return nil, tx.Error + } + return event, nil +} + +func (e *EventRecordStruct) Page(page *model.Page[EventRecordStruct], fields map[string]interface{}) error { + query := model.DB().Table("perc_event_record per").Select("per.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on per.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("per.event_name like ?", eventName) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + status, _ := fields["task_status"] + if status != nil { + if status == "-1" { + query = query.Where("task_id is null") + } else { + query = query.Where("task_status = ?", status) + } + } else { + query = query.Where("task_id is null or task_status in ('0', '3', '4')") + } + err := page.ScanPages(query) + if err != nil { + return err + } + return nil +} + +type LevelCount struct { + Level string `gorm:"column:level" json:"level"` + Count int64 `gorm:"column:count" json:"count"` +} + +func (e *EventRecordStruct) Statistic(fields map[string]interface{}) (map[string]int64, error) { + var levelCount []LevelCount + query := model.DB().Table("perc_event_record per").Select("per.level, count(*) as count").Joins("LEFT JOIN sched_task st on per.task_id = st.id").Group("per.level") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("per.event_name like ?", eventName) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + status, _ := fields["task_status"] + if status != nil { + if status == "-1" { + query = query.Where("task_id is null") + } else { + query = query.Where("task_status = ?", status) + } + } else { + query = query.Where("task_id is null or task_status in ('0', '3', '4')") + } + tx := query.Find(&levelCount) + if tx.Error != nil { + return nil, tx.Error + } + result := make(map[string]int64, len(levelCount)) + for _, lc := range levelCount { + result[lc.Level] = lc.Count + } + return result, nil +} + +func (r *EventRecord) Create() (int64, error) { + r.CreateTime = time.Now() + tx := model.DB().Create(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *EventRecord) BatchCreate(records []*EventRecord) (int64, error) { + tx := model.DB().Create(records) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *EventRecord) Delete() (int64, error) { + tx := model.DB().Delete(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} diff --git a/server/internal/model/event/history_event_record.go b/server/internal/model/event/history_event_record.go new file mode 100644 index 0000000..cb5c4e9 --- /dev/null +++ b/server/internal/model/event/history_event_record.go @@ -0,0 +1,212 @@ +package event + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +type HistoryEventRecord struct { + Id string `gorm:"column:id;primaryKey" json:"Id"` //type:string comment:事件编号 version:2023-10-23 10:19 + EventName string `gorm:"column:event_name" json:"EventName"` //type:string comment:事件名称 version:2023-10-23 10:19 + EventKey int64 `gorm:"column:event_key" json:"EventKey"` //type:string comment:事件KEY version:2023-10-23 10:19 + Level string `gorm:"column:level" json:"Level"` //type:string comment:事件等级;信息:INFO,警告:WARN,严重:CRITICAL version:2023-10-23 10:19 + ResourceId string `gorm:"column:resource_id" json:"ResourceId"` //type:string comment:资源ID version:2023-10-23 10:19 + ResourceName string `gorm:"column:resource_name" json:"ResourceName"` //type:string comment:资源名称 version:2023-10-23 10:19 + ResourceType string `gorm:"column:resource_type" json:"ResourceType"` //type:string comment:资源类型 version:2023-10-23 10:19 + ResourceNode string `gorm:"column:resource_node" json:"ResourceNode"` //type:string comment:算力节点;json存储 version:2023-10-23 10:19 + EventTime time.Time `gorm:"column:event_time" json:"EventTime"` //type:*time.Time comment:事件时间 version:2023-10-23 10:19 + EventInfo string `gorm:"column:event_info" json:"EventInfo"` //type:string comment:事件内容 version:2023-10-23 10:19 + TaskId string `gorm:"column:task_id" json:"TaskId"` //type:string comment:事件任务;关联任务ID version:2023-10-23 10:19 + OperatorUser string `gorm:"column:operator_user" json:"operatorUser"` + OperatorFinishTime time.Time `gorm:"column:operator_finish_time" json:"operatorFinishTime"` + CreateTime time.Time `gorm:"column:create_time" json:"CreateTime"` //type:*time.Time comment:入库时间 version:2023-10-23 10:19 +} + +// TableName 表名:perc_history_event_record,历史事件记录表。 +// 说明: +func (HistoryEventRecord) TableName() string { + return "perc_history_event_record" +} + +func (e *HistoryEventRecord) SaveOrUpdate() (int64, error) { + tx := model.DB().Save(e) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +type HistoryEventRecordStruct struct { + EventRecordStruct +} + +func (e *HistoryEventRecordStruct) GetById(id string) (*HistoryEventRecordStruct, error) { + event := &HistoryEventRecordStruct{} + tx := model.DB().Table("perc_history_event_record pher").Select("pher.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on pher.task_id = st.id").Where("pher.id = ?", id).First(event) + if tx.Error != nil { + return nil, tx.Error + } + return event, nil +} + +func (e *HistoryEventRecordStruct) Page(page *model.Page[HistoryEventRecordStruct], fields map[string]interface{}) error { + query := model.DB().Table("perc_history_event_record pher").Select("pher.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on pher.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("pher.event_name like ?", eventName) + } + level, _ := fields["level"] + if level != nil { + query = query.Where("level = ?", level) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + resourceType, _ := fields["resource_type"] + if resourceType != nil { + query = query.Where("resource_type = ?", resourceType) + } + resourceNode, _ := fields["resource_node"] + if resourceNode != nil { + resourceNode = fmt.Sprintf("%%%s%%", resourceNode) + query = query.Where("resource_node like ?", resourceNode) + } + startTime, _ := fields["start_time"] + if startTime != nil { + query = query.Where("event_time >= ?", startTime) + } + endTime, _ := fields["end_time"] + if endTime != nil { + query = query.Where("event_time <= ?", endTime) + } + err := page.ScanPages(query) + if err != nil { + return err + } + return nil +} + +func (e *HistoryEventRecordStruct) Count(fields map[string]interface{}) (int64, error) { + query := model.DB().Table("perc_history_event_record pher").Select("count(*)").Joins("LEFT JOIN sched_task st on pher.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("pher.event_name like ?", eventName) + } + level, _ := fields["level"] + if level != nil { + query = query.Where("level = ?", level) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + resourceType, _ := fields["resource_type"] + if resourceType != nil { + query = query.Where("resource_type = ?", resourceType) + } + resourceNode, _ := fields["resource_node"] + if resourceNode != nil { + resourceNode = fmt.Sprintf("%%%s%%", resourceNode) + query = query.Where("resource_node like ?", resourceNode) + } + startTime, _ := fields["start_time"] + if startTime != nil { + query = query.Where("event_time >= ?", startTime) + } + endTime, _ := fields["end_time"] + if endTime != nil { + query = query.Where("event_time <= ?", endTime) + } + var count int64 + tx := query.Count(&count) + return count, tx.Error +} + +func (e *HistoryEventRecordStruct) GetEvents(fields map[string]interface{}) ([]HistoryEventRecordStruct, error) { + query := model.DB().Table("perc_history_event_record pher").Select("pher.*, st.task_status, st.trigger_type, st.plan_id, st.handle_username, st.handle_advice, st.start_time, st.end_time, st.handle_result").Joins("LEFT JOIN sched_task st on pher.task_id = st.id") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("pher.event_name like ?", eventName) + } + level, _ := fields["level"] + if level != nil { + query = query.Where("level = ?", level) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + resourceType, _ := fields["resource_type"] + if resourceType != nil { + query = query.Where("resource_type = ?", resourceType) + } + resourceNode, _ := fields["resource_node"] + if resourceNode != nil { + resourceNode = fmt.Sprintf("%%%s%%", resourceNode) + query = query.Where("resource_node like ?", resourceNode) + } + startTime, _ := fields["start_time"] + if startTime != nil { + query = query.Where("event_time >= ?", startTime) + } + endTime, _ := fields["end_time"] + if endTime != nil { + query = query.Where("event_time <= ?", endTime) + } + var result []HistoryEventRecordStruct + tx := query.Find(&result) + return result, tx.Error +} + +func (e *HistoryEventRecordStruct) Statistic(fields map[string]interface{}) (map[string]int64, error) { + var levelCount []LevelCount + query := model.DB().Table("perc_history_event_record pher").Select("pher.level, count(*) as count").Joins("LEFT JOIN sched_task st on pher.task_id = st.id").Group("pher.level") + eventName, _ := fields["event_name"] + if eventName != nil { + eventName = fmt.Sprintf("%%%s%%", eventName) + query = query.Where("pher.event_name like ?", eventName) + } + level, _ := fields["level"] + if level != nil { + query = query.Where("level = ?", level) + } + resourceName, _ := fields["resource_name"] + if resourceName != nil { + resourceName = fmt.Sprintf("%%%s%%", resourceName) + query = query.Where("resource_name like ?", resourceName) + } + resourceType, _ := fields["resource_type"] + if resourceType != nil { + query = query.Where("resource_type = ?", resourceType) + } + resourceNode, _ := fields["resource_node"] + if resourceNode != nil { + resourceNode = fmt.Sprintf("%%%s%%", resourceNode) + query = query.Where("resource_node like ?", resourceNode) + } + startTime, _ := fields["start_time"] + if startTime != nil { + query = query.Where("event_time >= ?", startTime) + } + endTime, _ := fields["end_time"] + if endTime != nil { + query = query.Where("event_time <= ?", endTime) + } + tx := query.Find(&levelCount) + if tx.Error != nil { + return nil, tx.Error + } + result := make(map[string]int64, len(levelCount)) + for _, lc := range levelCount { + result[lc.Level] = lc.Count + } + return result, nil +} diff --git a/server/internal/model/id/id.go b/server/internal/model/id/id.go new file mode 100644 index 0000000..1c2209a --- /dev/null +++ b/server/internal/model/id/id.go @@ -0,0 +1,26 @@ +package id + +import "github.com/renstrom/shortuuid" + +const ( + shortIDLen = 12 + longIDlen = 16 +) + +const ( + eventRecordID = "EventRecord-" +) + +func newId(prefix string, len int) string { + uuid := shortuuid.New() + return prefix + uuid[:len] +} + +// newShortID generate short uuid and add type prefix +func newShortID(prefix string) string { + return newId(prefix, shortIDLen) +} + +func NewEventRecord() string { + return newShortID(eventRecordID) +} diff --git a/server/internal/model/message/msg_model.go b/server/internal/model/message/msg_model.go new file mode 100644 index 0000000..e53b356 --- /dev/null +++ b/server/internal/model/message/msg_model.go @@ -0,0 +1,90 @@ +package message + +import ( + "encoding/json" + "net/http" +) + +const ( + TO_SCHEDULE_BROADCAST_SUBJECT = "cfn_to_schedule" + TO_SCHEDULE_QUEUE_SUBJECT = "cfn_to_schedule_queue" + TO_AGENT_UNICAST_SUBJECT = "cfn_to_agent_unicast_{rid}" + TO_AGENT_BROADCAST_SUBJECT = "cfn_to_agent_broadcast" + TO_AGENT_BROADCAST_PUBLIC_SUBJECT = "cfn_to_agent_broadcast_public_{cid}" +) + +const ( + FUNC_HEALTHCHECK = "cfn.schedule.health.probe" + FUNC_ASSETINFO = "cfn.schedule.asset.base_info" + FUNC_AGENTUPGRADERESULT = "cfn.schedule.deamon.agent_upgrade_result" + FUNC_AGENTLOG = "cfn.agent.log.agent" + FUNC_TELEGRAFLOG = "cfn.agent.log.telegraf" + FUNC_COMPONENTINFO = "cfn.agent.component.detail_info" + FUNC_AGENTDOWNLOAD = "cfn.agent.agent.download" + FUNC_UPGRADEPLAN = "cfn.agent.agent.upgrade_plan" + FUNC_UPGRADEIMMEDIATELY = "cfn.agent.agent.upgrade_immediately" + FUNC_GETCOMPANY = "cfn.schedule.asset.company" + FUNC_POWER_ON_OFF = "cfn.schedule.asset.on_off" +) + +// 发布消息体 +type MsgModel struct { + Body []byte `json:"body"` // 函数入参,与函数配套。JSON + Func string `json:"func"` // 功能名称,一般代表一个函数接口。命名规范为:cfn.{agent or schedule}.{包名}.函数名例如:cfn.agent.component.GetComInfo + Rid string `json:"rid"` // 资产ID列表,可选。可用于部分广播 + Version string `json:"version"` // 函数版本 +} + +func UnmarshalMsgModel(data []byte) (MsgModel, error) { + var r MsgModel + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *MsgModel) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// 返回消息体 +type MsgRespModel struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data interface{} `json:"data"` +} + +func NewMsgRespModel() *MsgRespModel { + return &MsgRespModel{ + Code: 0, + Msg: "", + Data: nil, + } +} + +func (r *MsgRespModel) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +func UnmarshalMsgRespModel(data []byte) (MsgRespModel, error) { + var r MsgRespModel + err := json.Unmarshal(data, &r) + return r, err +} + +// FailCode 自定义错误码返回 +func (r *MsgRespModel) Fail(msg ...string) *MsgRespModel { + r.Code = http.StatusInternalServerError + if msg != nil { + r.Msg = msg[0] + } + return r +} + +// Success 正确返回 +func (r *MsgRespModel) Success(data interface{}, msg ...string) *MsgRespModel { + r.Code = http.StatusOK + if msg != nil { + r.Msg = msg[0] + } + r.Data = data + return r +} diff --git a/server/internal/model/metric/metrics_rule.go b/server/internal/model/metric/metrics_rule.go new file mode 100644 index 0000000..9c214fd --- /dev/null +++ b/server/internal/model/metric/metrics_rule.go @@ -0,0 +1,102 @@ +package metric + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "gorm.io/gorm" + "strings" + "time" +) + +// PercMetricsRule 感知指标规则。 +// 表名:perc_metrics_rule +type MetricsRule struct { + Id int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` //type:*int comment:主键 version:2023-9-16 13:50 + RuleNo string `gorm:"column:rule_no" json:"ruleNo" validate:"required"` //type:string comment:规则编号 version:2023-9-16 13:50 + RuleKey string `gorm:"column:rule_key" json:"ruleKey"` //type:string comment:规则key值;唯一 version:2023-9-16 13:50 + RuleName string `gorm:"column:rule_name" json:"ruleName" validate:"required"` //type:string comment:规则名称 version:2023-9-16 13:50 + RuleQl string `gorm:"column:rule_ql" json:"ruleQl"` //type:string comment:规则语句 version:2023-9-16 13:50 + RuleQlWindows string `gorm:"column:rule_ql_windows" json:"ruleQlWindows"` //type:string comment:规则语句 version:2023-9-16 13:50 + RuleUnit string `gorm:"column:rule_unit" json:"ruleUnit"` //type:string comment:规则单位 version:2023-9-16 13:50 + RuleType string `gorm:"column:rule_type" json:"ruleType"` //type:string comment:规则类型 version:2023-9-16 13:50 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:*time.Time comment:创建时间 version:2023-9-16 13:50 +} + +func (MetricsRule) TableName() string { + return "perc_metrics_rule" +} + +func (m *MetricsRule) Create() (int64, error) { + m.CreateTime = time.Now() + tx := model.DB().Create(m) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (m *MetricsRule) Delete() (int64, error) { + tx := model.DB().Delete(m) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (m *MetricsRule) DeleteBatch(ruleNos []string) (int64, error) { + tx := model.DB().Where("rule_no in ?", ruleNos).Delete(&MetricsRule{}) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (m *MetricsRule) Update(fields []string) (int64, error) { + tx := model.DB().Model(&m).Select(fields).Updates(m) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (m *MetricsRule) Get(fields map[string]interface{}) (MetricsRule, error) { + rule := MetricsRule{} + tx := model.DB().Where(fields).First(&rule) + if tx.Error != nil { + return rule, tx.Error + } + return rule, nil +} + +func (m *MetricsRule) Page(page *model.Page[MetricsRule], fields map[string]interface{}) error { + keyword := fields["keyword"] + query := model.DB() + if keyword != "" { + keyword = fmt.Sprintf("%%%s%%", keyword) + query = query.Where("concat(rule_no,rule_key,rule_name,rule_ql,rule_type) like ?", keyword) + } + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +func (m *MetricsRule) GetByRuleNo(keywords []string) ([]MetricsRule, error) { + var rules []MetricsRule + in := "('" + strings.Join(keywords, "','") + "')" + tx := model.DB().Where("rule_no in " + in + "or rule_key in " + in).Find(&rules) + if tx.Error != nil { + return rules, tx.Error + } + return rules, nil +} + +func (m *MetricsRule) ListAll(fields map[string]interface{}) ([]MetricsRule, error) { + rules := []MetricsRule{} + tx := model.DB().Where(fields).Find(&rules) + if tx.Error != nil && tx.Error != gorm.ErrRecordNotFound { + return rules, tx.Error + } + return rules, nil +} diff --git a/server/internal/model/schedule/sched_rule.go b/server/internal/model/schedule/sched_rule.go new file mode 100644 index 0000000..7cd5cb0 --- /dev/null +++ b/server/internal/model/schedule/sched_rule.go @@ -0,0 +1,116 @@ +package schedule + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +const ( + SCHED_RULE_NORMAL = "0" + SCHED_RULE_STOPPED = "1" +) + +type SchedRule struct { + Id int64 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"` //type:*int comment:主键 version:2023-10-23 10:35 + RuleName string `gorm:"column:rule_name" json:"ruleName" validate:"required"` //type:string comment:规则名称 version:2023-10-23 10:35 + RuleDesc string `gorm:"column:rule_desc" json:"ruleDesc"` //type:string comment:规则描述 version:2023-10-23 10:35 + RuleStatus string `gorm:"column:rule_status" json:"ruleStatus" validate:"required"` //type:string comment:规则状态;0:正常,1:停用 version:2023-10-23 10:35 + EventId int64 `gorm:"column:event_id" json:"eventId" validate:"required"` //type:string comment:事件ID version:2023-10-23 10:35 + PlanId string `gorm:"column:plan_id" json:"planId" validate:"required"` //type:string comment:方案ID version:2023-10-23 10:35 + TriggerType string `gorm:"column:trigger_type" json:"triggerType" validate:"required"` //type:string comment:触发策略;0:自动,1:人工,2:定时 version:2023-10-23 10:35 + TriggerCron string `gorm:"column:trigger_cron" json:"triggerCron"` //type:string comment:周期时间;当2:定时,填值 version:2023-10-23 10:35 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:*time.Time comment:发布时间 version:2023-10-23 10:35 + CreateBy string `gorm:"column:create_by" json:"createBy"` //type:string comment:创建人 version:2023-10-23 10:35 +} + +// TableName 表名:sched_rule,调度规则。 +// 说明: +func (SchedRule) TableName() string { + return "sched_rule" +} + +func (r *SchedRule) Create() (int64, error) { + r.CreateTime = time.Now() + tx := model.DB().Create(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedRule) Delete() (int64, error) { + tx := model.DB().Delete(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedRule) DeleteBatch(ids []int64) (int64, error) { + tx := model.DB().Where("id in ?", ids).Delete(&SchedRule{}) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedRule) Update(fields []string) (int64, error) { + tx := model.DB().Model(&r).Select(fields).Updates(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedRule) Get(fields map[string]interface{}) (SchedRule, error) { + rule := SchedRule{} + tx := model.DB().Where(fields).First(&rule) + if tx.Error != nil { + return rule, tx.Error + } + return rule, nil +} + +func (r *SchedRule) Count() (int64, error) { + var result int64 + tx := model.DB().Table(r.TableName()).Count(&result) + if tx.Error != nil { + return 0, tx.Error + } + return result, nil +} + +func (r *SchedRule) CountByMonth(startTime time.Time) ([]map[string]interface{}, error) { + var result []map[string]interface{} + tx := model.DB().Raw(fmt.Sprintf("SELECT TO_CHAR(create_time, 'YYYY-MM') AS date, COUNT(*) as count FROM sched_rule where create_time > '%s' GROUP BY date ORDER BY date;", startTime.Format("2006-01-02"))).Scan(&result) + if tx.Error != nil { + return nil, tx.Error + } + return result, nil +} + +func (r *SchedRule) Page(page *model.Page[SchedRule], fields map[string]interface{}) error { + keyword := fields["keyword"] + query := model.DB() + if keyword != "" { + keyword = fmt.Sprintf("%%%s%%", keyword) + query = query.Where("concat(rule_name,rule_desc) like ?", keyword) + } + delete(fields, "keyword") + query = query.Where(fields) + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +func (r *SchedRule) GetAll() ([]SchedRule, error) { + var rules []SchedRule + tx := model.DB().Find(&rules) + if tx.Error != nil { + return nil, tx.Error + } + return rules, nil +} diff --git a/server/internal/model/schedule/sched_scheme_params.go b/server/internal/model/schedule/sched_scheme_params.go new file mode 100644 index 0000000..08692de --- /dev/null +++ b/server/internal/model/schedule/sched_scheme_params.go @@ -0,0 +1,38 @@ +package schedule + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +// SchedSchemeParams 方案参数推荐表。 +// 说明: +// 表名:sched_schema_params +// group: SchedSchemeParams +type SchedSchemeParams struct { + Id string `gorm:"column:id" json:"Id"` //type:string comment:主键 version:2023-11-14 15:20 + SchemeId string `gorm:"column:scheme_id" json:"SchemeId"` //type:string comment:方案id; version:2023-11-14 15:20 + ResourceIdMapping string `gorm:"column:resource_id_mapping" json:"ResourceIdMapping"` //type:string comment:资源ID映射字段;对应scheme_node_param内某字段 version:2023-11-14 15:20 + ResourceNameMapping string `gorm:"column:resource_name_mapping" json:"ResourceNameMapping"` //type:string comment:资源名称映射字段;对应scheme_node_param内某字段 version:2023-11-14 15:20 + ResourceTypeMapping string `gorm:"column:resource_type_mapping" json:"ResourceTypeMapping"` //type:string comment:资源类型映射字段;对应scheme_node_param内某字段 version:2023-11-14 15:20 + ResourceNodeMapping string `gorm:"column:resource_node_mapping" json:"ResourceNodeMapping"` //type:string comment:算力节点映射字段;对应scheme_node_param内某字段 version:2023-11-14 15:20 + ExtentionPropertiesMapping string `gorm:"column:extention_properties_mapping" json:"ExtentionPropertiesMapping"` //type:string comment:其他变量映射字段;json存储:对应scheme_node_param内某字段 version:2023-11-14 15:20 + SchemeNodeParam string `gorm:"column:scheme_node_param" json:"SchemeNodeParam"` //type:string comment:参数推荐值;json存储:带有值 version:2023-11-14 15:20 + CreatedTime time.Time `gorm:"column:created_time" json:"CreatedTime"` //type:time.Time comment:创建时间 version:2023-11-14 15:20 +} + +// TableName 表名:sched_schema_params,方案参数推荐表。 +// 说明: +func (SchedSchemeParams) TableName() string { + return "sched_scheme_params" +} + +func (r *SchedSchemeParams) Get(schemeId string) (SchedSchemeParams, error) { + filter := SchedSchemeParams{SchemeId: schemeId} + params := SchedSchemeParams{} + tx := model.DB().Where(&filter).First(¶ms) + if tx.Error != nil { + return params, tx.Error + } + return params, nil +} diff --git a/server/internal/model/schedule/sched_task.go b/server/internal/model/schedule/sched_task.go new file mode 100644 index 0000000..52d111b --- /dev/null +++ b/server/internal/model/schedule/sched_task.go @@ -0,0 +1,171 @@ +package schedule + +import ( + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +const ( + TASK_STATUS_INIT = "0" + TASK_STATUS_SUCCESS = "1" + TASK_STATUS_FAIL = "2" + TASK_STATUS_ING = "3" + TASK_STATUS_TRIGGER_FAIL = "4" + TRIGGER_TYPE_AUTO = "0" + TRIGGER_TYPE_MANUAL = "1" +) + +var TaskStatusMap = map[string]string{ + TASK_STATUS_INIT: "初始化", + TASK_STATUS_SUCCESS: "成功", + TASK_STATUS_FAIL: "失败", + TASK_STATUS_ING: "执行中", + TASK_STATUS_TRIGGER_FAIL: "触发失败", +} + +var TriggerTypeMap = map[string]string{ + TRIGGER_TYPE_AUTO: "自动", + TRIGGER_TYPE_MANUAL: "手工", +} + +type SchedTask struct { + Id string `gorm:"column:id;primaryKey;" json:"id"` //type:*int comment:任务ID version:2023-10-23 10:33 + TaskName string `gorm:"column:task_name" json:"taskName"` //type:string comment:任务名称 version:2023-10-23 10:33 + TaskStatus string `gorm:"column:task_status" json:"taskStatus"` //type:string comment:事件状态;0:初始化,1:成功,2:失败,3:处理中,4:触发失败,5:已取消 version:2023-10-23 10:33 + TriggerType string `gorm:"column:trigger_type" json:"triggerType"` //type:string comment:触发方式;0:自动,1:人工 version:2023-10-23 10:33 + EventId string `gorm:"column:event_id" json:"eventId" validate:"required"` //事件记录编号 + EventName string `gorm:"column:event_name" json:"eventName"` //事件记录名称 + StartTime time.Time `gorm:"column:start_time" json:"startTime"` //type:*time.Time comment:开始时间 version:2023-10-23 10:33 + EndTime time.Time `gorm:"column:end_time" json:"endTime"` //type:*time.Time comment:结束时间 version:2023-10-23 10:33 + PlanId string `gorm:"column:plan_id" json:"planId"` //type:string comment:方案ID version:2023-10-23 10:33 + HandleUsername string `gorm:"column:handle_username" json:"handleUsername"` //type:string comment:处理人 version:2023-10-23 10:33 + HandleTime time.Time `gorm:"column:handle_time" json:"handleTime"` //type:*time.Time comment:处理时间 version:2023-10-23 10:33 + HandleAdvice string `gorm:"column:handle_advice" json:"handleAdvice"` //type:string comment:处理意见 version:2023-10-23 10:33 + HandleResult string `gorm:"column:handle_result" json:"handleResult"` //type:string comment:处理结果 version:2023-10-23 10:33 + CreateTime time.Time `gorm:"column:create_time" json:"createTime"` //type:*time.Time comment:创建时间 version:2023-10-23 10:33 +} + +// 调度方案 +type Scheme struct { + SchemeId string `gorm:"column:scheme_id;primaryKey;" json:"schemeId"` + SchemeName string `gorm:"column:scheme_name" json:"schemeName"` + SchemeType string `gorm:"column:scheme_type" json:"schemeType"` + SchemeVersion string `gorm:"column:scheme_version" json:"schemeVersion"` + Status string `gorm:"column:status" json:"status" validate:"required"` +} + +// TableName 表名:sched_task,调度任务。 +// 说明: +func (SchedTask) TableName() string { + return "sched_task" +} + +func (r *SchedTask) Create() (int64, error) { + r.CreateTime = time.Now() + tx := model.DB().Create(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedTask) Delete() (int64, error) { + tx := model.DB().Delete(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedTask) DeleteBatch(ids []int64) (int64, error) { + tx := model.DB().Where("id in ?", ids).Delete(&SchedTask{}) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedTask) Update(fields []string) (int64, error) { + tx := model.DB().Model(&r).Select(fields).Updates(r) + if tx.Error != nil { + return 0, tx.Error + } + return tx.RowsAffected, nil +} + +func (r *SchedTask) Get(fields map[string]interface{}) (SchedTask, error) { + rule := SchedTask{} + tx := model.DB().Where(fields).First(&rule) + if tx.Error != nil { + return rule, tx.Error + } + return rule, nil +} + +func (r *SchedTask) Page(page *model.Page[SchedTask], fields map[string]interface{}) error { + taskName := fields["task_name"] + query := model.DB() + if taskName != "" { + taskName = fmt.Sprintf("%%%s%%", taskName) + query = query.Where("task_name like ?", taskName) + } + startTime := fields["start_time"] + if startTime != nil { + query = query.Where("start_time >= ?", startTime) + } + endTime := fields["end_time"] + if endTime != nil { + query = query.Where("end_time <= ?", endTime) + } + delete(fields, "task_name") + delete(fields, "start_time") + delete(fields, "end_time") + query = query.Where(fields) + err := page.SelectPages(query) + if err != nil { + return err + } + return nil +} + +func (r *SchedTask) ListAll(fields map[string]interface{}) ([]SchedTask, error) { + tasks := []SchedTask{} + taskName := fields["task_name"] + query := model.DB() + if taskName != "" { + taskName = fmt.Sprintf("%%%s%%", taskName) + query = query.Where("task_name like ?", taskName) + } + startTime := fields["start_time"] + if startTime != nil { + query = query.Where("start_time >= ?", startTime) + } + endTime := fields["end_time"] + if endTime != nil { + query = query.Where("end_time <= ?", endTime) + } + delete(fields, "task_name") + delete(fields, "start_time") + delete(fields, "end_time") + query = query.Where(fields) + tx := query.Find(&tasks) + if tx.Error != nil { + return nil, tx.Error + } + return tasks, nil +} + +func (r *SchedTask) CountStatusNum() ([]map[string]interface{}, error) { + result := []map[string]interface{}{} + sql := "select task_status as taskStatus,COUNT(task_status) FROM sched_task GROUP BY task_status" + query := model.DB().Raw(sql).Scan(&result) + return result, query.Error +} + +func (r *SchedTask) AutoRatio() (map[string]interface{}, error) { + var result map[string]interface{} + sql := "SELECT ROUND(COUNT(*) / CAST((SELECT COUNT(*) FROM sched_task) AS DECIMAL(10,1)), 4) AS ratio FROM sched_task WHERE trigger_type = '0';" + query := model.DB().Raw(sql).First(&result) + return result, query.Error +} diff --git a/server/internal/model/user/user.go b/server/internal/model/user/user.go new file mode 100644 index 0000000..f19abf6 --- /dev/null +++ b/server/internal/model/user/user.go @@ -0,0 +1,32 @@ +package user + +import ( + "gorm.io/gorm" +) + +type User struct { + ID int `gorm:"column:user_id"` + Name string `gorm:"column:login_name"` + EncryptedPassword string `gorm:"column:login_pass"` +} + +func (User) TableName() string { + return "sys_account" +} + +func (m User) GetUserID() int { + return m.ID +} + +func (m User) GetUserName() string { + return m.Name +} + +func FindOneByName(name string, db *gorm.DB) (user *User, err error) { + var u User + if err = db.Where("login_name = ?", name).First(&u).Error; err != nil { + return + } + user = &u + return +} diff --git a/server/internal/model/user/user_model.go b/server/internal/model/user/user_model.go new file mode 100644 index 0000000..058c4dd --- /dev/null +++ b/server/internal/model/user/user_model.go @@ -0,0 +1,148 @@ +package user + +import ( + "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model" + "time" +) + +// UserModel sys_users record +type UserModel struct { + UserID string `gorm:"column:user_id;primarykey"` + Username string `gorm:"column:user_name"` + Namespace string `gorm:"column:namespace"` + Displayname string `gorm:"column:displayname"` + Password string `gorm:"column:password"` + EncryptedPassword string `gorm:"column:encrypted_password"` + Email string `gorm:"column:email"` + Phone string `gorm:"column:phone"` + CreationTime time.Time `gorm:"column:creation_time"` + LastLoginTime time.Time `gorm:"column:last_login_time"` + LoginFrequency int `gorm:"column:login_frequency"` + ConfirmCode string `gorm:"column:confirm_code"` + Active int8 `gorm:"column:active"` + APIToken string `gorm:"column:api_token"` + Role int32 `gorm:"column:role"` + AdminRole int32 `gorm:"column:admin_role"` + Avatar string `gorm:"column:avatar"` + EnvEdition int `gorm:"column:env_edition"` + Migrated int `gorm:"column:migrated"` + Type int `gorm:"column:type"` + Deleted int `gorm:"column:deleted"` // 1 is deleted + Comment string `gorm:"column:comment"` + StickedTenants string `gorm:"column:sticked_tenants"` + OrgId string `gorm:"column:org_id"` +} + +func (u *UserModel) TableName() string { + return "sys_users" +} + +type UserInfo struct { + UserName string `json:"userName" orm:"column:user_name)"` + UserId string `json:"userId" orm:"column:user_id)"` + Role int32 `json:"role,omitempty" orm:"column:role)"` + StickedTenants string `json:"stickedTenants" orm:"column:sticked_tenants)"` + DisplayName string `json:"displayName,omitempty"` +} + +// DirectorySummary count of each user directory +type DirectorySummary struct { + Type int `gorm:"column:type)" json:"type"` + Count int `gorm:"column:count)" json:"count"` +} + +func NewUserModel() *UserModel { + return &UserModel{} +} + +// Insert add a new user record to db +func (u *UserModel) Insert() error { + tx := model.DB().Table(u.TableName()).Create(u) + return tx.Error +} + +// Get fetch a user record by id +func (u *UserModel) Get() error { + if u.UserID == "" { + return errors.New("id cannot be null") + } + tx := model.DB().Table(u.TableName()).Take(u) + return tx.Error +} + +// UpdateLastLoginTime update last login time by user id +func (u *UserModel) UpdateLastLoginTime() (int64, error) { + tx := model.DB().Table(u.TableName()).Select("last_login_time", "login_frequency").Updates(u) + return tx.RowsAffected, tx.Error +} + +func (u *UserModel) GetByUserName(user string) error { + tx := model.DB().Table(u.TableName()).Where("user_name = ?", user).First(u) + return tx.Error +} + +func (u *UserModel) Update(column []string) error { + db := model.DB().Table(u.TableName()) + if column != nil { + db = db.Select(column) + } + return db.Updates(u).Error +} + +func (u *UserModel) GetAll(fields map[string]interface{}, notFields map[string]interface{}) ([]UserModel, error) { + query := model.DB().Table(u.TableName()) + if fields != nil { + for key := range fields { + value := fields[key] + switch value.(type) { + case []string, []int, []int64, []interface{}: + query = query.Where(key+" in (?)", value) + default: + query = query.Where(key+" = ?", value) + } + } + } + if notFields != nil { + for key := range notFields { + value := notFields[key] + if items, ok := value.([]interface{}); ok { + if len(items) > 0 { + query = query.Where(key+" not in (?)", items) + } else { + query = query.Where(key+" <> ?", items[0]) + } + } else { + query = query.Where(key+" <> ?", value) + } + } + query = query.Where(fields) + } + var result []UserModel + err := query.Find(&result).Error + return result, err +} + +func (u *UserModel) Page(page *model.Page[UserModel], fields map[string]interface{}) error { + query := model.DB().Table(u.TableName()).Select("*").Where(fields) + return page.ScanPages(query) +} + +type user struct { + UserID int32 `gorm:"column:user_id)" json:"-"` + UserName string `gorm:"column:user_name)" json:"userName"` + Role int `json:"-"` + Email string `json:"email"` + IsCreator bool `json:"isCreator"` + IsAdmin bool `json:"isAdmin"` +} + +type UsersProfile struct { + Namespace string `gorm:"column:namespace)"` + UserID string `gorm:"column:user_id)"` + AccountType string `gorm:"column:account_type)"` + ProjectAccountID string `gorm:"column:project_account_id)"` + Role int32 `gorm:"column:role)"` + DisplayName string `gorm:"column:displayname)"` + OrgId string `gorm:"column:org_id)"` +} diff --git a/server/internal/model/user/usercreate.go b/server/internal/model/user/usercreate.go new file mode 100644 index 0000000..52930e0 --- /dev/null +++ b/server/internal/model/user/usercreate.go @@ -0,0 +1,71 @@ +package user + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/rand" + "time" +) + +// UserSpec defines the fields needed to create a new user +type UserSpec struct { + UserID string + UserName string `json:"userName"` + Password string `json:"password"` + OldPassword string `json:"oldPassword"` + Namespace string `json:"namespace"` + DisplayName string `json:"displayName"` + Email string `json:"email"` + Phone string `json:"phone"` + APIToken string `json:"apiToken"` + // TODO: remove Role, user Roles instead + Role int32 `json:"role"` + Avatar string `json:"avatar"` + InviteCode string `json:"inviteCode"` + AccountType string `json:"accountType"` + AccountID string `json:"accountID"` + AccountDetail string `json:"accountDetail"` + ProjectAccountID string `json:"projectAccountID"` + DefaultUserBalance *int64 `json:"defaultUserBalance"` + ResetPassword bool `json:"resetPassword"` + Roles []string `json:"roles"` + Comment *string `json:"comment"` + SendEmail bool `json:"sendEmail"` + OrgId string `json:"orgId"` +} + +// for active filed +const ( + UserStatusActive int8 = 1 +) + +// CreateUser creates a new user and returns its detail +func CreateUser(spec UserSpec) (*UserObj, error) { + + // if user does not pass api Token, generate one + apiToken := spec.APIToken + if len(apiToken) == 0 { + apiToken = string(rand.Krand(48, rand.KC_RAND_KIND_ALL)) + } + + um := &UserModel{ + UserID: spec.UserID, + Username: spec.UserName, + Displayname: spec.DisplayName, + APIToken: apiToken, + Role: spec.Role, + CreationTime: time.Now(), + Active: UserStatusActive, + Type: 3, // authSystem user + } + if spec.Role == 2 { + um.AdminRole = 1 + } else { + um.AdminRole = 0 + } + + err := um.Insert() + if err != nil { + return nil, err + } + + return ToUser(um), nil +} diff --git a/server/internal/model/user/userdetail.go b/server/internal/model/user/userdetail.go new file mode 100644 index 0000000..fed3d5d --- /dev/null +++ b/server/internal/model/user/userdetail.go @@ -0,0 +1,12 @@ +package user + +// GetUserDetailByUsername returns a user's details from user name +func GetUserByUsername(username string) (*UserObj, error) { + um := &UserModel{} + // TODO: use one SQL to get all information + if err := um.GetByUserName(username); err != nil { + return nil, err + } + user := ToUser(um) + return user, nil +} diff --git a/server/internal/model/user/userlist.go b/server/internal/model/user/userlist.go new file mode 100644 index 0000000..01ab8b9 --- /dev/null +++ b/server/internal/model/user/userlist.go @@ -0,0 +1,77 @@ +package user + +import ( + "strings" + "time" +) + +// User sys_users record +type UserObj struct { + UserID string `json:"userID"` + UserName string `json:"userName"` + Namespace string `json:"namespace,omitempty"` + DisplayName string `json:"displayName,omitempty"` + Email string `json:"email,omitempty"` + Phone string `json:"phone,omitempty"` + CreationTime *time.Time `json:"creationTime,omitempty"` + APIToken string `json:"apiToken,omitempty"` + Role int32 `json:"role"` + AdminRole int32 `json:"adminRole,omitempty"` + Avatar string `json:"avatar,omitempty"` + Balance int64 `json:"balance,omitempty"` + TeamCount int `json:"teamCount,omitempty"` + ProjectCount int `json:"project_count,omitempty"` + TenantCount int `json:"tenantCount,omitempty"` + Active int8 `json:"active"` + LoginFrequency int `json:"login_frequency,omitempty"` + EnvEdition int `json:"env_edition,omitempty"` + Migrated int `json:"migrated,omitempty"` + Password string `json:"password,omitempty"` + EncryptedPassword string `json:"encrypted_password,omitempty"` + Type int `json:"type,omitempty"` + GlobalRoles []string `json:"globalRoles,omitempty"` + PartialRoles []string `json:"partialRoles,omitempty"` + Comment string `json:"comment,omitempty"` + MailSent bool `json:"mailSent,omitempty"` + TenantAdmin int `json:"tenantAdmin"` + StickedTenants []string `json:"stickedTenants"` + OrgId string `json:"orgId"` + Mobile string `json:"mobile"` + ProvinceId string `json:"provinceId"` + Status string `json:"status"` +} + +// ToUser converts a UserModel to User +func ToUser(um *UserModel) *UserObj { + if um == nil { + return nil + } + u := &UserObj{ + UserID: um.UserID, + UserName: um.Username, + Namespace: um.Namespace, + DisplayName: um.Displayname, + EncryptedPassword: um.EncryptedPassword, + Email: um.Email, + Phone: um.Phone, + Role: um.Role, + AdminRole: um.AdminRole, + Avatar: um.Avatar, + Active: um.Active, + LoginFrequency: um.LoginFrequency, + EnvEdition: um.EnvEdition, + Migrated: um.Migrated, + Type: um.Type, + Comment: um.Comment, + APIToken: um.APIToken, + OrgId: um.OrgId, + } + if um.StickedTenants != "" { + u.StickedTenants = strings.Split(um.StickedTenants, ",") + } + if !um.CreationTime.IsZero() { + temp := um.CreationTime + u.CreationTime = &temp + } + return u +} diff --git a/server/internal/pkg/auth/cert.go b/server/internal/pkg/auth/cert.go new file mode 100644 index 0000000..bb04ef3 --- /dev/null +++ b/server/internal/pkg/auth/cert.go @@ -0,0 +1,12 @@ +package auth + +import ( + "encoding/base64" +) + +var secret = loadSecret() + +func loadSecret() []byte { + block, _ := base64.StdEncoding.DecodeString(`IUkVLcM72OGEOJgQX3BXjLP4dsLs084joI2aQWcmB8rLxPyEX2cxLdVllRrx/v/Tzh2iSPsftmcABQ+q5kVYdQ==`) + return block +} diff --git a/server/internal/pkg/auth/info.go b/server/internal/pkg/auth/info.go new file mode 100644 index 0000000..25533de --- /dev/null +++ b/server/internal/pkg/auth/info.go @@ -0,0 +1,48 @@ +package auth + +import ( + "encoding/base64" + "encoding/json" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/crypto" +) + +// if extra info should be traced in the future, +// add in this struct, it's not wise to touch the +// auth logic, what should be as stable as possible. +type LoginInfo struct { + Username string `json:"username"` + Password string `json:"password"` + DisplayName string `json:"displayName"` + Token string `json:"token"` + UserID string `json:"userId"` + Role int32 `json:"role"` +} + +func (i LoginInfo) Encrypt() (encrypted string, err error) { + var buffer []byte + if buffer, err = json.Marshal(i); err != nil { + return + } + if buffer, err = crypto.AEADEncrypt(buffer); err != nil { + return + } + encrypted = base64.StdEncoding.EncodeToString(buffer) + return +} + +func Decrypt(encrypted string) (decrypted *LoginInfo, err error) { + var buffer []byte + buffer, err = base64.StdEncoding.DecodeString(encrypted) + if err != nil { + return + } + if buffer, err = crypto.AEADDecrypt(buffer); err != nil { + return + } + var t LoginInfo + if err = json.Unmarshal(buffer, &t); err != nil { + return + } + decrypted = &t + return +} diff --git a/server/internal/pkg/auth/jwt.go b/server/internal/pkg/auth/jwt.go new file mode 100644 index 0000000..538adac --- /dev/null +++ b/server/internal/pkg/auth/jwt.go @@ -0,0 +1,98 @@ +package auth + +import ( + "errors" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/model/user" + "github.com/dgrijalva/jwt-go" + "time" +) + +const ( + TokenExpired = "token expired" +) + +var ( + UnexpectedSingingMethod = errors.New("unexpected signing method") + UnknownEntity = errors.New("unknown entity") +) + +type entity struct { + Encrypted string `json:"encrypted"` + //------------更改token后新增的,兼容权限系统的token内容 -by King 2022-10-07 + Username string `json:"login_loginname"` + Token string `json:"token"` + Role int32 `json:"role"` + //------------- + LoginAppId string `json:"login_app_id"` + LoginUid string `json:"login_uid"` + LoginAccountId string `json:"login_account_id"` + ClientIp string `json:"client_ip"` + LoginAccountName string `json:"login_account_name"` + UsersAppId string `json:"users_app_id"` + LoginUname string `json:"login_uname"` + jwt.StandardClaims +} + +func Authorize(authToken string, user *user.UserObj) (string, error) { + if authToken == "" || user == nil { + return "", nil + } + var jwtToken *jwt.Token + // 设置时钟偏移量 + jwt.TimeFunc = func() time.Time { + return time.Now().Add(60 * time.Second) + } + + jwtToken, err := jwt.ParseWithClaims(authToken, &entity{}, validateSecret) + if err != nil { + return "", err + } + obj, ok := jwtToken.Claims.(*entity) + if !ok { + return "", UnknownEntity + } + + obj.Token = user.APIToken + obj.Role = user.Role + obj.Encrypted = user.EncryptedPassword + jwtToken = jwt.NewWithClaims(jwt.SigningMethodHS512, obj) + var rawToken string + if rawToken, err = jwtToken.SignedString(secret); err != nil { + return "", err + } + return rawToken, nil +} + +func Validate(rawToken string) (loginInfo *LoginInfo, err error) { + var token *jwt.Token + if token, err = jwt.ParseWithClaims(rawToken, &entity{}, validateSecret); err != nil { + return nil, err + } + obj, ok := token.Claims.(*entity) + if !ok { + return nil, UnknownEntity + } + loginInfo = &LoginInfo{ + Username: obj.Username, + DisplayName: obj.LoginAccountName, + Token: obj.Token, + UserID: obj.LoginAccountId, + Role: obj.Role, + } + return +} + +func IsTokenExpiredErr(err error) bool { + if jve, ok := err.(*jwt.ValidationError); ok && jve.Inner != nil { + return jve.Errors&jwt.ValidationErrorExpired == jwt.ValidationErrorExpired + } + return false +} + +func validateSecret(token *jwt.Token) (obj interface{}, err error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + err = UnexpectedSingingMethod + return + } + return secret, nil +} diff --git a/server/internal/pkg/authen/contract/configuration.go b/server/internal/pkg/authen/contract/configuration.go new file mode 100644 index 0000000..0ccd453 --- /dev/null +++ b/server/internal/pkg/authen/contract/configuration.go @@ -0,0 +1,8 @@ +package contract + +type Configuration interface { + Secret() []byte + JWTCert() []byte + JWTTokenLife() int + JWTIssuer() string +} diff --git a/server/internal/pkg/authen/contract/jwt.go b/server/internal/pkg/authen/contract/jwt.go new file mode 100644 index 0000000..2ba602a --- /dev/null +++ b/server/internal/pkg/authen/contract/jwt.go @@ -0,0 +1,6 @@ +package contract + +type LoginInfo interface { + GetUserID() int + GetUserName() string +} diff --git a/server/internal/pkg/authen/contract/user.go b/server/internal/pkg/authen/contract/user.go new file mode 100644 index 0000000..9e6705f --- /dev/null +++ b/server/internal/pkg/authen/contract/user.go @@ -0,0 +1,6 @@ +package contract + +type User interface { + GetUserID() int + GetUserName() string +} diff --git a/server/internal/pkg/authen/root.go b/server/internal/pkg/authen/root.go new file mode 100644 index 0000000..d73bb05 --- /dev/null +++ b/server/internal/pkg/authen/root.go @@ -0,0 +1,14 @@ +package authen + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/authen/contract" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/authen/utility" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/authen/utility/crypto" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/authen/utility/jwt" +) + +var ( + Configuration contract.Configuration = utility.NewBaseConfig() + LoginInfoCryptor = crypto.NewAEADCryptor(Configuration) + JWTAuthorizer = jwt.NewJWTAuthorizer(Configuration, LoginInfoCryptor) +) diff --git a/server/internal/pkg/authen/utility/configuration.go b/server/internal/pkg/authen/utility/configuration.go new file mode 100644 index 0000000..8856f30 --- /dev/null +++ b/server/internal/pkg/authen/utility/configuration.go @@ -0,0 +1,189 @@ +package utility + +import ( + "encoding/pem" + "github.com/golang/glog" + "io/ioutil" + "os" + "strconv" + "strings" +) + +func NewBaseConfig() *cfg { + return &cfg{ + secret: secret(), + jwtCert: jwtCert(), + jwtTokenLife: jwtTokenLife(), + jwtIssuer: jwtIssuer(), + } +} + +type cfg struct { + secret Lazy + jwtCert Lazy + jwtTokenLife Lazy + jwtIssuer Lazy +} + +func (s cfg) Secret() (secret []byte) { + Must(s.secret.Value(&secret)) + return +} + +func (s cfg) JWTCert() (jwtCert []byte) { + Must(s.jwtCert.Value(&jwtCert)) + return +} + +func (s cfg) JWTTokenLife() (tokenLife int) { + Must(s.jwtTokenLife.Value(&tokenLife)) + return +} + +func (s cfg) JWTIssuer() (issuer string) { + Must(s.jwtIssuer.Value(&issuer)) + return +} + +func (s cfg) Data() interface{} { + return &struct { + Secret string `json:"secret"` + JWTCert string `json:"jwtCert"` + JWTTokenLife int `json:"jwtTokenLife"` + JWTIssuer string `json:"jwtIssuer"` + }{ + Secret: "********", + JWTCert: "********", + JWTTokenLife: s.JWTTokenLife(), + JWTIssuer: s.JWTIssuer(), + } +} + +func GetEnv(key, defaultValue string) (value string) { + if value = os.Getenv(key); value == "" { + value = defaultValue + } + return +} + +func secret() Lazy { + return NewLazy(func() (value interface{}, err error) { + if s := GetEnv("AEAD_SECRET", "internal"); s == "" || s == "internal" { + value = []byte("dazyunsecretkeysforuserstenx20141019generatedKey") + return + } else { + value = []byte(s) + } + return + }) +} + +func jwtCert() Lazy { + return NewLazy(func() (value interface{}, err error) { + if c := GetEnv("JWT_CERT", "internal"); c == "" || c == "internal" { + value = loadSecret() + return + } else if _, err = os.Stat(c); err == nil { + var content []byte + if content, err = ioutil.ReadFile(c); err != nil { + return + } + block, _ := pem.Decode(content) + value = block.Bytes + return + } + return + }) +} + +func jwtTokenLife() Lazy { + return NewLazy(func() (value interface{}, err error) { + hourStr := GetEnv("BEARER_TOKEN_LIFE", "2") + var hour int + if hour, err = strconv.Atoi(hourStr); err != nil { + glog.Fatalf("parse jwt token life failed, should be specified by number in hour, %s", err) + } + value = hour + return + }) +} + +func jwtIssuer() Lazy { + return NewLazy(func() (value interface{}, err error) { + value = GetEnv("TOKEN_ISSUER", "api-server") + return + }) +} + +func corsAllowHeaders() Lazy { + return NewLazy(func() (value interface{}, err error) { + headers := GetEnv( + "ALLOW_HEADERS", + "Content-Type,username,authorization,teamspace,project,onbehalfuser") + value = strings.Split(headers, ",") + return + }) +} + +func corsAllowMethods() Lazy { + return NewLazy(func() (value interface{}, err error) { + methods := GetEnv("ALLOW_METHODS", "GET,POST,PUT,DELETE,PATCH") + value = strings.Split(methods, ",") + return + }) +} + +func loadSecret() []byte { + block, _ := pem.Decode([]byte(`-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY-----`)) + return block.Bytes +} diff --git a/server/internal/pkg/authen/utility/crypto/aead.go b/server/internal/pkg/authen/utility/crypto/aead.go new file mode 100644 index 0000000..1d3c938 --- /dev/null +++ b/server/internal/pkg/authen/utility/crypto/aead.go @@ -0,0 +1,83 @@ +package crypto + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha512" + "golang.org/x/crypto/pbkdf2" + "io" +) + +func NewAEADCryptor(c config) *aead { + return &aead{ + secret: c.Secret(), + } +} + +type aead struct { + secret []byte +} + +func (a aead) Encrypt(content []byte) (encrypted []byte, err error) { + var salt []byte + if salt, err = randBytes(64); err != nil { + return + } + var block cipher.Block + if block, err = aes.NewCipher(a.key(salt)); err != nil { + return + } + var iv []byte + if iv, err = randBytes(12); err != nil { + return + } + if _, err = io.ReadFull(rand.Reader, iv); err != nil { + return + } + var aes256gcm cipher.AEAD + if aes256gcm, err = cipher.NewGCM(block); err != nil { + return + } + withTag := aes256gcm.Seal(nil, iv, content, nil) + encryptedLen := len(withTag) - 16 + withoutTag := withTag[:encryptedLen] + tag := withTag[encryptedLen:] + encrypted = bytes.Join([][]byte{salt, iv, tag, withoutTag}, []byte{}) + return +} + +func (a aead) Decrypt(encrypted []byte) (content []byte, err error) { + if len(encrypted) <= 92 { + err = Undecryptable + return + } + salt := encrypted[:64] + iv := encrypted[64:76] + tag := encrypted[76:92] + withoutTag := encrypted[92:] + withTag := bytes.Join([][]byte{withoutTag, tag}, []byte{}) + var block cipher.Block + if block, err = aes.NewCipher(a.key(salt)); err != nil { + return + } + var aes256gcm cipher.AEAD + if aes256gcm, err = cipher.NewGCM(block); err != nil { + return + } + content, err = aes256gcm.Open(nil, iv, withTag, nil) + return +} + +func (a aead) key(salt []byte) []byte { + return pbkdf2.Key(a.secret, salt, 2145, 32, sha512.New) +} + +func randBytes(length int) (bytes []byte, err error) { + bytes = make([]byte, length) + if _, err = io.ReadFull(rand.Reader, bytes); err != nil { + return + } + return +} diff --git a/server/internal/pkg/authen/utility/crypto/cipher.go b/server/internal/pkg/authen/utility/crypto/cipher.go new file mode 100644 index 0000000..663b81e --- /dev/null +++ b/server/internal/pkg/authen/utility/crypto/cipher.go @@ -0,0 +1,69 @@ +package crypto + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "encoding/base64" +) + +var ( + seckey = []byte("Q1A2Z3X!D^R$T&G*B(N)U088") //24Byte + base64Tables = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + iv = []byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} +) + +func base64Decode(src string) ([]byte, error) { + coder := base64.NewEncoding(base64Tables) + return coder.DecodeString(src) +} + +func aesPadding(src []byte, blockSize int) []byte { + padding := blockSize - len(src)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(src, padtext...) +} + +func aesUnPadding(src []byte) []byte { + length := len(src) + unpadding := int(src[length-1]) + return src[:(length - unpadding)] +} +func Encrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + + arr := aesPadding([]byte(src), aes.BlockSize) + mode := cipher.NewCBCEncrypter(block, iv) + mode.CryptBlocks(arr, arr) + return string(arr), nil +} +func Decrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + arr := []byte(src) + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(arr, arr) + arr = aesUnPadding(arr) + return string(arr), nil + +} + +func Base64AndDecrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + arr, err := base64Decode(src) + if err != nil { + return "", err + } + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(arr, arr) + arr = aesUnPadding(arr) + return string(arr), nil +} diff --git a/server/internal/pkg/authen/utility/crypto/common.go b/server/internal/pkg/authen/utility/crypto/common.go new file mode 100644 index 0000000..01170c1 --- /dev/null +++ b/server/internal/pkg/authen/utility/crypto/common.go @@ -0,0 +1,35 @@ +package crypto + +import ( + "errors" + "hash" +) + +var Undecryptable = errors.New("undecryptable input") + +type config interface { + Secret() []byte +} + +// https://nodejs.org/api/crypto.html#crypto_crypto_createdecipher_algorithm_password_options +// openssl/evp.h - EVP_BytesToKey +func bytesToKey(hashAlgorithm func() hash.Hash, secret, salt []byte, iteration int, keySize, ivSize int) (key, iv []byte) { + h := hashAlgorithm() + var d, result []byte + sum := make([]byte, 0, h.Size()) + for len(result) < keySize+ivSize { + h.Reset() + h.Write(d) + h.Write(secret) + h.Write(salt) + sum = h.Sum(sum[:0]) + for j := 1; j < iteration; j++ { + h.Reset() + h.Write(sum) + sum = h.Sum(sum[:0]) + } + d = append(d[:0], sum...) + result = append(result, d...) + } + return result[:keySize], result[keySize : keySize+ivSize] +} diff --git a/server/internal/pkg/authen/utility/crypto/des.go b/server/internal/pkg/authen/utility/crypto/des.go new file mode 100644 index 0000000..2281183 --- /dev/null +++ b/server/internal/pkg/authen/utility/crypto/des.go @@ -0,0 +1,87 @@ +package crypto + +import ( + "crypto/cipher" + "crypto/des" + "crypto/md5" +) + +func NewDESCryptor(c config) *desEDE3CBC { + k, iv := bytesToKey(md5.New, c.Secret(), []byte{}, 1, 24, 8) + return &desEDE3CBC{ + key: k, + iv: iv, + } +} + +type desEDE3CBC struct { + key []byte + iv []byte +} + +func (d desEDE3CBC) Encrypt(content []byte) (encrypted []byte, err error) { + var block cipher.Block + if block, err = des.NewTripleDESCipher(d.key); err != nil { + return + } + cbc := cipher.NewCBCEncrypter(block, d.iv) + encrypted, err = d.crypt(content, cbc) + return +} + +func (d desEDE3CBC) Decrypt(encrypted []byte) (content []byte, err error) { + var block cipher.Block + if block, err = des.NewTripleDESCipher(d.key); err != nil { + return + } + cbc := cipher.NewCBCDecrypter(block, d.iv) + content, err = d.crypt(encrypted, cbc) + return +} + +func (d desEDE3CBC) crypt(in []byte, cbc cipher.BlockMode) (out []byte, err error) { + blockSize := cbc.BlockSize() + padded := padding(in, blockSize) + entriesCount := len(padded) + crypted := make([][]byte, entriesCount) + for i := 0; i < entriesCount; i++ { + crypted[i] = make([]byte, blockSize) + cbc.CryptBlocks(crypted[i], padded[i]) + } + contentSize := len(in) + out = make([]byte, contentSize) + for i := 0; i < entriesCount; i++ { + for j := 0; j < blockSize; j++ { + index := i*blockSize + j + if index >= contentSize { + break + } + out[index] = crypted[i][j] + } + } + return +} + +func padding(content []byte, blockSize int) (padded [][]byte) { + contentLength := len(content) + size := contentLength / blockSize + if contentLength%blockSize != 0 { + size++ + } + padded = make([][]byte, size) + for i := 0; i < size; i++ { + padded[i] = make([]byte, blockSize) + entry := padded[i] + for j := 0; j < blockSize; j++ { + index := i*blockSize + j + if index >= contentLength { + for k := j; k < blockSize; k++ { + entry[k] = 0 + } + break + } + entry[j] = content[index] + } + } + return +} diff --git a/server/internal/pkg/authen/utility/jwt/jwt.go b/server/internal/pkg/authen/utility/jwt/jwt.go new file mode 100644 index 0000000..b9a357d --- /dev/null +++ b/server/internal/pkg/authen/utility/jwt/jwt.go @@ -0,0 +1,181 @@ +package jwt + +import ( + "encoding/base64" + "errors" + "github.com/dgrijalva/jwt-go" + "strings" + "time" +) + +var ( + UnexpectedSingingMethod = errors.New("unexpected signing method") + UnknownEntity = errors.New("unknown entity") +) + +func NewJWTAuthorizer(c config, cryptor cryptor) *authorizer { + tl := time.Duration(c.JWTTokenLife()) + return &authorizer{ + tokenLifeInHour: tl, + tokenLifeInSecond: int(time.Hour * tl / time.Second), + issuer: c.JWTIssuer(), + cert: c.JWTCert(), + cryptor: cryptor, + } +} + +type config interface { + JWTCert() []byte + JWTTokenLife() int + JWTIssuer() string +} + +type loginInfo interface { + GetUserID() int + GetUserName() string + GetUserToken() string +} + +type authorizer struct { + tokenLifeInHour time.Duration + tokenLifeInSecond int + issuer string + cert []byte + cryptor cryptor +} + +type entity struct { + Encrypted string `json:"encrypted"` + jwt.StandardClaims `json:",inline"` +} + +func (a authorizer) Authorize(li loginInfo) (token string, err error) { + i := &info{ + Username: li.GetUserName(), + Token: li.GetUserToken(), + UserID: li.GetUserID(), + } + now := time.Now() + var encrypted string + if encrypted, err = encryptLoginInfo(i, a.cryptor); err != nil { + return + } + claims := jwt.NewWithClaims(jwt.SigningMethodHS512, &entity{ + Encrypted: encrypted, + StandardClaims: jwt.StandardClaims{ + ExpiresAt: now.Add(a.tokenLifeInHour * time.Hour).Unix(), + Issuer: a.issuer, + }, + }) + var rawToken string + if rawToken, err = claims.SignedString(a.cert); err != nil { + return + } + token = (&dto{ + Token: rawToken, + ExpiresIn: a.tokenLifeInSecond, + IssuedAt: now, + UserID: i.UserID, + }).String() + return +} + +func (a authorizer) Validate(token string) (l loginInfo, err error) { + var t *jwt.Token + if t, err = jwt.ParseWithClaims(token, &entity{}, a.validateCert); err != nil { + return + } + obj, ok := t.Claims.(*entity) + if !ok { + err = UnknownEntity + return + } + var li *info + if li, err = decryptLoginInfo(obj.Encrypted, a.cryptor); err != nil { + return + } + l = li + return +} + +const ( + bearerKeyword = "Bearer" + bearerKeywordLength = len(bearerKeyword) +) + +func (authorizer) IsBearerToken(rawToken string) (ok bool, token string) { + ok = len(rawToken) > bearerKeywordLength && + strings.EqualFold(bearerKeyword, rawToken[:bearerKeywordLength]) + if ok { + token = strings.TrimSpace(rawToken[bearerKeywordLength:]) + } + return +} + +func (authorizer) IsTokenExpired(err error) bool { + if jve, ok := err.(*jwt.ValidationError); ok && jve.Inner != nil { + return jve.Errors&jwt.ValidationErrorExpired == jwt.ValidationErrorExpired + } + return false +} + +func (a authorizer) validateCert(token *jwt.Token) (obj interface{}, err error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + err = UnexpectedSingingMethod + return + } + return a.cert, nil +} + +var ( + secret = loadSecret() +) + +func loadSecret() []byte { + block, _ := base64.StdEncoding.DecodeString(`IUkVLcM72OGEOJgQX3BXjLP4dsLs084joI2aQWcmB8rLxPyEX2cxLdVllRrx/v/Tzh2iSPsftmcABQ+q5kVYdQ==`) + return block +} + +type LoginInfo struct { + Username string `json:"username"` + Encrypted string `json:"encrypted"` +} + +type tokenEntity struct { + Encrypted string `json:"encrypted"` + Username string `json:"login_loginname"` + Role int32 `json:"role"` + ApiToken string `json:"api_token"` + LoginAppId string `json:"login_app_id"` + LoginUid string `json:"login_uid"` + LoginAccountId string `json:"login_account_id"` + ClientIp string `json:"client_ip"` + LoginAccountName string `json:"login_account_name"` + UsersAppId string `json:"users_app_id"` + LoginUname string `json:"login_uname"` + jwt.StandardClaims +} + +func (authorizer) ValidateToken(rawToken string) (loginInfo *LoginInfo, err error) { + var token *jwt.Token + if token, err = jwt.ParseWithClaims(rawToken, &tokenEntity{}, validateSecret); err != nil { + return nil, err + } + obj, ok := token.Claims.(*tokenEntity) + if !ok { + return nil, UnknownEntity + } + loginInfo = &LoginInfo{ + Username: obj.Username, + Encrypted: obj.Encrypted, + } + return +} + +func validateSecret(token *jwt.Token) (obj interface{}, err error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + err = UnexpectedSingingMethod + return + } + return secret, nil +} diff --git a/server/internal/pkg/authen/utility/jwt/login_info.go b/server/internal/pkg/authen/utility/jwt/login_info.go new file mode 100644 index 0000000..79b9a19 --- /dev/null +++ b/server/internal/pkg/authen/utility/jwt/login_info.go @@ -0,0 +1,71 @@ +package jwt + +import ( + "encoding/base64" + "encoding/json" + "time" +) + +type dto struct { + Token string `json:"token"` + ExpiresIn int `json:"expiresIn"` + IssuedAt time.Time `json:"issuedAt"` + UserID int `json:"userID"` +} + +func (t dto) String() string { + c, _ := json.Marshal(t) + return string(c) +} + +type cryptor interface { + Encrypt(content []byte) (encrypted []byte, err error) + Decrypt(encrypted []byte) (content []byte, err error) +} + +type info struct { + Username string `json:"username"` + Token string `json:"token"` + UserID int `json:"userId"` +} + +func (i info) GetUserID() int { + return i.UserID +} + +func (i info) GetUserName() string { + return i.Username +} + +func (i info) GetUserToken() string { + return i.Token +} + +func encryptLoginInfo(i *info, cryptor cryptor) (encrypted string, err error) { + var buffer []byte + if buffer, err = json.Marshal(i); err != nil { + return + } + if buffer, err = cryptor.Encrypt(buffer); err != nil { + return + } + encrypted = base64.StdEncoding.EncodeToString(buffer) + return +} + +func decryptLoginInfo(encrypted string, cryptor cryptor) (decrypted *info, err error) { + var buffer []byte + buffer, err = base64.StdEncoding.DecodeString(encrypted) + if err != nil { + return + } + if buffer, err = cryptor.Decrypt(buffer); err != nil { + return + } + var t info + if err = json.Unmarshal(buffer, &t); err != nil { + return + } + decrypted = &t + return +} diff --git a/server/internal/pkg/authen/utility/lazy.go b/server/internal/pkg/authen/utility/lazy.go new file mode 100644 index 0000000..af69fce --- /dev/null +++ b/server/internal/pkg/authen/utility/lazy.go @@ -0,0 +1,55 @@ +package utility + +import ( + "errors" + "reflect" + "sync" +) + +type Lazy interface { + Value(value interface{}) (err error) +} + +var ( + TypeMismatched = errors.New("type mismatched") +) + +type lazy struct { + lock *sync.Once + fetch func() (value interface{}, err error) + value interface{} + done bool +} + +func (l *lazy) Value(value interface{}) (err error) { + if l.done { + l.setValueTo(value) + return + } + l.lock.Do(func() { + if l.value, err = l.fetch(); err != nil { + l.lock = new(sync.Once) + return + } else { + l.setValueTo(value) + l.done = true + } + }) + return +} + +func (l lazy) setValueTo(receiver interface{}) (err error) { + rv := reflect.Indirect(reflect.ValueOf(receiver)) + vv := reflect.ValueOf(l.value) + if vv.Type().AssignableTo(rv.Type()) && rv.CanSet() { + rv.Set(reflect.ValueOf(l.value)) + } + return TypeMismatched +} + +func NewLazy(fetch func() (value interface{}, err error)) Lazy { + return &lazy{ + lock: new(sync.Once), + fetch: fetch, + } +} diff --git a/server/internal/pkg/authen/utility/lazy_test.go b/server/internal/pkg/authen/utility/lazy_test.go new file mode 100644 index 0000000..e93917b --- /dev/null +++ b/server/internal/pkg/authen/utility/lazy_test.go @@ -0,0 +1,23 @@ +package utility + +import "testing" + +func TestLazy_Value(t *testing.T) { + i := 0 + someLazyValue := NewLazy(func() (value interface{}, err error) { + value = "some lazy value" + i++ + return + }) + var theValueOfSomeLazyValue string + if err := someLazyValue.Value(&theValueOfSomeLazyValue); err != nil { + t.Fatalf("get value failed, %s", err) + } + t.Logf("value of lazy: %s", theValueOfSomeLazyValue) + if err := someLazyValue.Value(&theValueOfSomeLazyValue); err != nil { + t.Fatalf("get value failed, %s", err) + } + if i > 1 { + t.Fatalf("lazy should only evaluate once, but %d times", i) + } +} diff --git a/server/internal/pkg/authen/utility/must.go b/server/internal/pkg/authen/utility/must.go new file mode 100644 index 0000000..7da8f67 --- /dev/null +++ b/server/internal/pkg/authen/utility/must.go @@ -0,0 +1,38 @@ +package utility + +import "reflect" + +func Must(err error) { + if err != nil { + panic(err) + } +} + +type receiver interface { + Value(interface{}) +} + +type holder struct { + value interface{} +} + +func (h holder) Value(receiver interface{}) { + reflect.Indirect(reflect.ValueOf(receiver)).Set(reflect.ValueOf(h.value)) +} + +// So everyone who may use this, must be familiar with golang. +// Then they should take care with the 'receiver'. +// func someMethod(someArg string, otherArg int) (returnValue int, err error) +// for instance a method like above, then MustGet can used like below +// var returnValue int +// MustGet(someMethod("someArg", /* otherArg */ 888)).Value(&returnValue) +// and if someMethod's second return value (the err) was not nil +// the expression panic, other way the 'returnValue' should be the first +// return value of someMethod. +// YOU SHOULD take care of the receiver type yourself, if the 'var returnValue int' +// line goes to 'var returnValue string', then it also panic, since the first +// return value of someMethod is int not string. +func MustGet(anything interface{}, err error) receiver { + Must(err) + return &holder{value: anything} +} diff --git a/server/internal/pkg/authen/utility/must_test.go b/server/internal/pkg/authen/utility/must_test.go new file mode 100644 index 0000000..0ccc39a --- /dev/null +++ b/server/internal/pkg/authen/utility/must_test.go @@ -0,0 +1,57 @@ +package utility + +import ( + "errors" + "testing" +) + +func chaosMonkeyA(t *testing.T) error { + t.Logf("chaosMonkeyA") + return errors.New("chaosMonkeyA") +} + +func chaosMonkeyB(t *testing.T) (string, error) { + t.Logf("chaosMonkeyB") + return "chaosMonkeyB", errors.New("chaosMonkeyB") +} + +func iAmWalkingInLine(t *testing.T) (float64, error) { + t.Logf("iAmWalkingInLine") + return 88888888.88888888, nil +} + +func TestMust(t *testing.T) { + func() { + defer func() { + if err := recover(); err != nil { + t.Logf("caseA: should panic, %s", err) + } else { + t.Fatalf("caseA: should panic, but didn't") + } + }() + Must(chaosMonkeyA(t)) + }() + func() { + defer func() { + if err := recover(); err != nil { + t.Logf("caseB: should panic, %s", err) + } else { + t.Fatalf("caseB: should panic, but didn't") + } + }() + var value string + MustGet(chaosMonkeyB(t)).Value(&value) + }() + func() { + defer func() { + if err := recover(); err != nil { + t.Fatalf("caseC: should not panic, but paniced %s", err) + } else { + t.Logf("caseC: everything went fine") + } + }() + var value float64 + MustGet(iAmWalkingInLine(t)).Value(&value) + t.Logf("caseC: value, %f", value) + }() +} diff --git a/server/internal/pkg/cache/lru_cache.go b/server/internal/pkg/cache/lru_cache.go new file mode 100644 index 0000000..88a37de --- /dev/null +++ b/server/internal/pkg/cache/lru_cache.go @@ -0,0 +1,67 @@ +package cache + +import ( + "container/list" + "sync" +) + +type KeyType interface{} // 保持不变,用于兼容各种可比较的键类型 +type ValueType any + +type entry struct { + key KeyType + value ValueType +} + +type LRUCache struct { + capacity int + cache map[KeyType]*list.Element + list *list.List + mu sync.Mutex +} + +func NewLRUCache(capacity int) *LRUCache { + return &LRUCache{ + capacity: capacity, + cache: make(map[KeyType]*list.Element), + list: list.New(), + } +} + +func (c *LRUCache) Get(key KeyType) (ValueType, bool) { + c.mu.Lock() + defer c.mu.Unlock() + + if elem, ok := c.cache[key]; ok { + c.list.MoveToFront(elem) + return elem.Value.(*entry).value, true + } + return nil, false +} + +func (c *LRUCache) Put(key KeyType, value ValueType) { + c.mu.Lock() + defer c.mu.Unlock() + + if elem, ok := c.cache[key]; ok { + c.list.MoveToFront(elem) + elem.Value.(*entry).value = value + } else { + elem := c.list.PushFront(&entry{key, value}) + c.cache[key] = elem + + if len(c.cache) > c.capacity { + c.removeOldest() + } + } +} + +func (c *LRUCache) removeOldest() { + elem := c.list.Back() + if elem != nil { + c.list.Remove(elem) + delete(c.cache, elem.Value.(*entry).key) + } +} + +// 其他可能需要的方法,如 Delete, Len 等可以根据需要添加 diff --git a/server/internal/pkg/command_utils/command_param.go b/server/internal/pkg/command_utils/command_param.go new file mode 100644 index 0000000..32bc03f --- /dev/null +++ b/server/internal/pkg/command_utils/command_param.go @@ -0,0 +1,36 @@ +package command_utils + +import ( + "encoding/json" +) + +// CommandParam 命令行参数结构体 +type CommandParam struct { + Value string `json:"value"` // 参数值 + Desc string `json:"desc"` // 描述 +} + +// ToCommandList 将给定的参数字符串转换为命令行参数的列表 +func ToCommandList(paramsStr string) ([]string, error) { + paramList, err := params(paramsStr) + + if err != nil { + return nil, err + } + return extractValues(paramList), nil +} + +// params 将给定的参数字符串转换为CommandParam对象列表 +func params(defParams string) ([]CommandParam, error) { + var commandParams []CommandParam + err := json.Unmarshal([]byte(defParams), &commandParams) + return commandParams, err +} + +func extractValues(params []CommandParam) []string { + values := make([]string, 0, len(params)) + for _, p := range params { + values = append(values, p.Value) + } + return values +} diff --git a/server/internal/pkg/command_utils/command_util.go b/server/internal/pkg/command_utils/command_util.go new file mode 100644 index 0000000..f3c1a4a --- /dev/null +++ b/server/internal/pkg/command_utils/command_util.go @@ -0,0 +1,100 @@ +package command_utils + +import ( + "bytes" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/transform" + "io" + "os" + "path/filepath" + "runtime" + "strings" +) + +var COMMAND []string +var SUFFIX string +var EXECUTE_PREFIX string + +func init() { + if runtime.GOOS == "linux" { + // 执行 Linux 系统命令 + COMMAND = []string{"/bin/bash", "-c"} + } else if runtime.GOOS == "darwin" { + // 执行 Mac 系统命令 + COMMAND = []string{"/bin/bash", "-c"} + } else { + // 执行 Windows 系统命令 + COMMAND = []string{"cmd", "/c"} + } + + if runtime.GOOS == "windows" { + SUFFIX = "bat" + EXECUTE_PREFIX = "" + } else { + SUFFIX = "sh" + EXECUTE_PREFIX = "bash" + } +} + +func PaddingPrefix(command []string) []string { + if EXECUTE_PREFIX == "" { + return command + } + command = append([]string{EXECUTE_PREFIX}, command...) + + return command +} + +func GenerateCommand(file *os.File, args string) string { + absPath, _ := filepath.Abs(file.Name()) + return fmt.Sprintf("%s %s %s", EXECUTE_PREFIX, absPath, args) +} + +func GetCommand() []string { + return append([]string(nil), COMMAND...) +} + +// GetDefaultEncoding 是一个占位符,你需要实现这个函数来获取系统默认编码。 +func GetDefaultEncoding() string { + // 请在这里编写代码来获取系统默认编码 + osInfo := utils.GetOSInfo() + if osInfo.IsWindows { + return "GBK" + } + return "UTF-8" +} + +// DecodeString 根据指定的编码解码字符串。 +func DecodeString(s string, encoding string) (string, error) { + decoder, err := GetDecoder(encoding) + if err != nil { + return "", err + } + + if decoder == nil { + return s, nil + } + + reader := strings.NewReader(s) + transformedReader := transform.NewReader(reader, decoder) + buffer := new(bytes.Buffer) + if _, err := io.Copy(buffer, transformedReader); err != nil { + return "", err + } + + return buffer.String(), nil +} + +// GetDecoder 根据编码名称返回一个解码器。 +func GetDecoder(encodingStr string) (transform.Transformer, error) { + switch encodingStr { + case "GBK": + return simplifiedchinese.GBK.NewDecoder(), nil + case "UTF-8": + return nil, nil + default: + return nil, fmt.Errorf("Unsupported encoding: %s", encodingStr) + } +} diff --git a/server/internal/pkg/common/ioc/spring.go b/server/internal/pkg/common/ioc/spring.go new file mode 100644 index 0000000..8b60db4 --- /dev/null +++ b/server/internal/pkg/common/ioc/spring.go @@ -0,0 +1,405 @@ +package ioc + +import ( + "errors" + "reflect" + "regexp" + "strings" +) + +const ( + TagName = "autowired" + PreHandling = "preHandling" + PostHandling = "postHandling" + InterfaceType = "InterfaceType" + ImplementationType = "ImplementationType" + BeanName = "BeanName" + PanicOnError = "panicOnError" + NilOnError = "nilOnError" +) + +var ( + TypeMismatch = errors.New("type mismatch") + FactoryNotFound = errors.New("factory not found") + ErrorHandlerNotFound = errors.New("error handler not found") + BeanNameNotSpecified = errors.New("bean name not specified") + + AspectType = aspectType() + beanNamePattern = regexp.MustCompile(`beanName\((?P.+)\)`) + bindMethodPattern = regexp.MustCompile(`bindMethod\((?P.+)\)`) + errorHandlerPattern = regexp.MustCompile(`errorHandler\((?P.+)\)`) + occasionPattern = regexp.MustCompile(`occasion\((?P.+)\)`) + + kernel = make(map[string]Factory) + container = make(map[string]reflect.Type) + panicOnError = new(panicIfError) + nilOnError = new(nilIfError) + errorHandlers = map[string]ErrorHandler{ + PanicOnError: panicOnError, + NilOnError: nilOnError, + } + ignoredTypes = make([]reflect.Type, 0) +) + +type Aspect interface { +} + +type ErrorHandler interface { + Handle(interface{}, error) (breakOperation bool) +} + +type Factory interface { + New(interface{}) (interface{}, error) +} + +func Register(beanName string, factory Factory) { + kernel[beanName] = factory +} + +func Resolve(beanName string) Factory { + return kernel[beanName] +} + +func RegisterErrorHandler(name string, handler ErrorHandler) { + errorHandlers[name] = handler +} + +func RegisterIgnoreType(obj interface{}) { + t := reflect.TypeOf(obj) + for ; t.Kind() == reflect.Ptr; t = t.Elem() { + } + ignoredTypes = append(ignoredTypes, t) +} + +func RegisterInterfaceTypeBinding(binding interface{}) { + bv := reflect.ValueOf(binding) + for ; bv.Kind() == reflect.Ptr; bv = bv.Elem() { + } + bt := bv.Type() + fit, exist := bt.FieldByName(InterfaceType) + if !exist { + panic("interface type must be defined") + } + fii, exist := bt.FieldByName(ImplementationType) + if !exist { + panic("implementation type must be defined") + } + fiit := fii.Type + for ; fiit.Kind() == reflect.Ptr; fiit = fiit.Elem() { + } + vbk := bv.FieldByName(BeanName) + bindingKey := "global" + if vbk.IsValid() && vbk.CanInterface() { + bindingKey, _ = vbk.Interface().(string) + } + id := fit.Type.Name() + bindingKey + container[id] = fiit +} + +func InjectPre(input interface{}, target interface{}, bindingMethod string) { + if target == nil { + return + } + inject(input, reflect.ValueOf(target), bindingMethod, PreHandling, 0) +} + +func InjectPost(input interface{}, target interface{}, bindingMethod string) { + if target == nil { + return + } + inject(input, reflect.ValueOf(target), bindingMethod, PostHandling, 0) +} + +type dummyAspectFieldStruct struct { + Dummy Aspect +} + +func aspectType() reflect.Type { + if df, exist := reflect.TypeOf(dummyAspectFieldStruct{}).FieldByName("Dummy"); exist { + return df.Type + } + panic("filed of aspect not found") +} + +// 增加breakOperation 返回值,以便在内层注入失败且break后,外层也break +func inject(input interface{}, target reflect.Value, bindingMethod, occasion string, level int) (breakOperation bool) { + if level > 5 { + return + } + type_, value, injectable := getUnderlayType(target) + if !injectable || !value.IsValid() { + return + } + count := type_.NumField() + for i := 0; i < count; i++ { + field := type_.Field(i) + if ignored(field.Type) { + continue + } + if breakOperation = injectOneField(&field, &value, i, input, bindingMethod, occasion, level); breakOperation { + break + } + child := value.FieldByName(field.Name) + if breakOperation = inject(input, child, bindingMethod, occasion, level+1); breakOperation { + break + } + } + return breakOperation +} + +func createAndSetDefaultValue(value *reflect.Value, fieldIndex int) (target reflect.Value) { + fv := value.Field(fieldIndex) + if ignored(fv.Type()) { + return + } + fvk := fv.Kind() + if fvk == reflect.Struct { + target = fv + return + } + if fvk == reflect.Interface { + if !fv.IsNil() { + target = fv.Elem() + return + } + id := fv.Type().Name() + "global" + if ct, exist := container[id]; exist { + cv := reflect.New(ct) + if fv.CanSet() && cv.IsValid() { + fv.Set(cv) + target = cv + return + } + } + } + if !fv.CanSet() { + return + } + ft := fv.Type() + if ft.Kind() != reflect.Ptr || !fv.IsNil() { + return + } + + for ft.Kind() == reflect.Ptr { + ft = ft.Elem() + fv = fv.Elem() + } + if !fv.CanSet() || ft.Kind() != reflect.Struct { + return + } + target = reflect.New(ft).Elem() + fv.Set(target) + return +} + +func ignored(t reflect.Type) bool { + for ; t.Kind() == reflect.Ptr; t = t.Elem() { + } + for _, tt := range ignoredTypes { + if t == tt { + return true + } + } + return false +} + +func getUnderlayType(value reflect.Value) (underlayType reflect.Type, underlayValue reflect.Value, injectable bool) { + if !value.IsValid() { + return + } + t := value.Type() + k := t.Kind() + for { + if k == reflect.Struct { + underlayType = t + underlayValue = value + injectable = true + return + } else if k == reflect.Ptr { + t = t.Elem() + if value.IsNil() { + if created := reflect.New(t); created.IsValid() && value.CanSet() && created.Type().AssignableTo(value.Type()) { + value.Set(created) + } else { + return + } + } + value = value.Elem() + k = t.Kind() + } else { + break + } + } + return +} + +func getBeanConfig(tagValue, bindingMethod, occasion string) (beanName string, errorHandler ErrorHandler, notForThisMethod bool) { + configs := strings.SplitN(tagValue, ";", -1) + occ := PreHandling + for _, config := range configs { + c := strings.TrimSpace(config) + if o := occasionPattern.FindStringSubmatch(c); o != nil { + occ = strings.TrimSpace(o[1]) + if occ != occasion { + notForThisMethod = true + return + } + } + if bm := bindMethodPattern.FindStringSubmatch(c); bm != nil { + rawBM := bm[1] + bindingMethods := strings.SplitN(rawBM, ",", -1) + found := false + for _, bmm := range bindingMethods { + if strings.TrimSpace(bmm) == bindingMethod { + found = true + break + } + } + if !found { + notForThisMethod = true + return + } + } + if bn := beanNamePattern.FindStringSubmatch(c); bn != nil { + beanName = bn[1] + continue + } + if eh := errorHandlerPattern.FindStringSubmatch(c); eh != nil { + ehName := eh[1] + if ehh, exist := errorHandlers[ehName]; exist { + errorHandler = ehh + continue + } + panic(ErrorHandlerNotFound) + } + } + if occ != occasion { + notForThisMethod = true + return + } + if errorHandler == nil { + errorHandler = nilOnError + } + return +} + +func injectOneField(field *reflect.StructField, value *reflect.Value, fieldIndex int, input interface{}, bindingMethod, occasion string, level int) (breakOperation bool) { + beanConfig, exist := field.Tag.Lookup(TagName) + if !exist { + if target := createAndSetDefaultValue(value, fieldIndex); target.IsValid() { + if breakOperation := inject(input, target, bindingMethod, occasion, level+1); breakOperation { + return breakOperation + } + } + return + } + beanName, errorHandler, notForThisMethod := getBeanConfig(beanConfig, bindingMethod, occasion) + if notForThisMethod { + return + } + var instance interface{} + var err error + if beanName == "" { + beanName = "global" + } + created := false + factory, exist := kernel[beanName] + if breakOperation := inject(input, reflect.ValueOf(factory), bindingMethod, occasion, level+1); breakOperation { + return breakOperation + } + if !exist { + ft := field.Type + if ft.Kind() == reflect.Interface { + id := ft.Name() + beanName + if fit, exist := container[id]; exist { + if fiv := reflect.New(fit); fiv.CanInterface() { + instance = fiv.Interface() + created = true + } + } else { + breakOperation = errorHandler.Handle(input, FactoryNotFound) + return + } + } else { + breakOperation = errorHandler.Handle(input, FactoryNotFound) + return + } + } else { + if instance, err = factory.New(input); err != nil { + breakOperation = errorHandler.Handle(input, err) + return + } + } + if (beanName == "" || beanName == "global") && !created { + panic(BeanNameNotSpecified) + } + situation := resolveSituation(reflect.TypeOf(instance), field.Type) + if situation == "mismatch" { + breakOperation = errorHandler.Handle(input, TypeMismatch) + return + } + if situation == "aspect" { + return + } + if injected := setValue(field, value, instance, situation); injected.IsValid() { + inject(input, *injected, bindingMethod, occasion, level+1) + } + return +} + +func setValue(field *reflect.StructField, target *reflect.Value, instance interface{}, situation string) (injected *reflect.Value) { + var finalTarget reflect.Value + var finalValue reflect.Value + if situation == "ok" { + finalTarget = target.FieldByName(field.Name) + finalValue = reflect.ValueOf(instance) + } else if situation == "ptrToValue" { + finalTarget = target.FieldByName(field.Name) + finalValue = reflect.ValueOf(instance).Elem() + } else if situation == "valueToPtr" { + finalTarget = target.FieldByName(field.Name).Elem() + finalValue = reflect.ValueOf(instance) + } + if finalTarget.CanSet() { + finalTarget.Set(finalValue) + } + return &finalValue +} + +func resolveSituation(gotType, expectType reflect.Type) string { + if expectType == AspectType { + return "aspect" + } + if gotType.AssignableTo(expectType) { + return "ok" + } + situation := "mismatch" + if gotType != expectType { + if gotType.Kind() == reflect.Ptr && expectType.Kind() != reflect.Ptr { + if gotType.Elem() == expectType { + situation = "ptrToValue" + } + } else if gotType.Kind() != reflect.Ptr && expectType.Kind() == reflect.Ptr { + if gotType == expectType.Elem() { + situation = "valueToPtr" + } + } + } + return situation +} + +type panicIfError struct { +} + +func (panicIfError) Handle(_ interface{}, err error) (breakOperation bool) { + breakOperation = true + panic(err) +} + +type nilIfError struct { +} + +func (nilIfError) Handle(_ interface{}, _ error) (breakOperation bool) { + breakOperation = false + return +} diff --git a/server/internal/pkg/crypto/aead.go b/server/internal/pkg/crypto/aead.go new file mode 100644 index 0000000..4bb0eab --- /dev/null +++ b/server/internal/pkg/crypto/aead.go @@ -0,0 +1,77 @@ +package crypto + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha512" + "errors" + "golang.org/x/crypto/pbkdf2" + "io" +) + +var secret = []byte("dazyunsecretkeysforuserstenx20141019generatedKey") +var Undecryptable = errors.New("undecryptable input") + +func key(salt []byte) []byte { + return pbkdf2.Key(secret, salt, 2145, 32, sha512.New) +} + +func randBytes(length int) (bytes []byte, err error) { + bytes = make([]byte, length) + if _, err = io.ReadFull(rand.Reader, bytes); err != nil { + return + } + return +} + +func AEADEncrypt(content []byte) (encrypted []byte, err error) { + var salt []byte + if salt, err = randBytes(64); err != nil { + return + } + var block cipher.Block + if block, err = aes.NewCipher(key(salt)); err != nil { + return + } + var iv []byte + if iv, err = randBytes(12); err != nil { + return + } + if _, err = io.ReadFull(rand.Reader, iv); err != nil { + return + } + var aes256gcm cipher.AEAD + if aes256gcm, err = cipher.NewGCM(block); err != nil { + return + } + withTag := aes256gcm.Seal(nil, iv, content, nil) + encryptedLen := len(withTag) - 16 + withoutTag := withTag[:encryptedLen] + tag := withTag[encryptedLen:] + encrypted = bytes.Join([][]byte{salt, iv, tag, withoutTag}, []byte{}) + return +} + +func AEADDecrypt(encrypted []byte) (content []byte, err error) { + if len(encrypted) <= 92 { + err = Undecryptable + return + } + salt := encrypted[:64] + iv := encrypted[64:76] + tag := encrypted[76:92] + withoutTag := encrypted[92:] + withTag := bytes.Join([][]byte{withoutTag, tag}, []byte{}) + var block cipher.Block + if block, err = aes.NewCipher(key(salt)); err != nil { + return + } + var aes256gcm cipher.AEAD + if aes256gcm, err = cipher.NewGCM(block); err != nil { + return + } + content, err = aes256gcm.Open(nil, iv, withTag, nil) + return +} diff --git a/server/internal/pkg/errors/code.go b/server/internal/pkg/errors/code.go new file mode 100644 index 0000000..63f7ce2 --- /dev/null +++ b/server/internal/pkg/errors/code.go @@ -0,0 +1,38 @@ +package errors + +const ( + SUCCESS = 200 + FAILURE = 600 + NotFound = 404 + InvalidParameter = 400 + ServerError = 500 + TooManyRequests = 429 + AuthorizationError = 401 + RBACError = 403 +) + +type ErrorText struct { + Language string +} + +func NewErrorText(language string) *ErrorText { + return &ErrorText{ + Language: language, + } +} + +func (et *ErrorText) Text(code int) (str string) { + var ok bool + switch et.Language { + case "zh_CN": + str, ok = zhCNText[code] + case "en": + str, ok = enUSText[code] + default: + str, ok = zhCNText[code] + } + if !ok { + return "unknown error" + } + return +} diff --git a/server/internal/pkg/errors/code_test.go b/server/internal/pkg/errors/code_test.go new file mode 100644 index 0000000..b3a89e7 --- /dev/null +++ b/server/internal/pkg/errors/code_test.go @@ -0,0 +1,16 @@ +package errors + +import ( + "testing" +) + +func TestText(t *testing.T) { + var errorText = NewErrorText("zh_CN") + if "OK" != errorText.Text(0) { + t.Error("text 返回 msg 不是预期的") + } + + if "unknown error" != errorText.Text(1202389) { + t.Error("text 返回 msg 不是预期的") + } +} diff --git a/server/internal/pkg/errors/en-us.go b/server/internal/pkg/errors/en-us.go new file mode 100644 index 0000000..d82eff4 --- /dev/null +++ b/server/internal/pkg/errors/en-us.go @@ -0,0 +1,12 @@ +package errors + +var enUSText = map[int]string{ + SUCCESS: "OK", + FAILURE: "FAIL", + NotFound: "resources not found", + ServerError: "Internal server error", + TooManyRequests: "Too many requests", + InvalidParameter: "Parameter error", + AuthorizationError: "Authorization error", + RBACError: "No access", +} diff --git a/server/internal/pkg/errors/error.go b/server/internal/pkg/errors/error.go new file mode 100644 index 0000000..56b444d --- /dev/null +++ b/server/internal/pkg/errors/error.go @@ -0,0 +1,63 @@ +package errors + +import ( + "errors" + "fmt" + c "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" +) + +type BusinessError struct { + code int + message string + contextErr []error +} + +func (e *BusinessError) Error() string { + return fmt.Sprintf("[Code]:%d [Msg]:%s, [context error] %s", e.code, e.message, e.contextErr) +} + +func (e *BusinessError) GetCode() int { + return e.code +} + +func (e *BusinessError) GetMessage() string { + return e.message +} + +func (e *BusinessError) SetCode(code int) { + e.code = code +} + +func (e *BusinessError) SetMessage(message string) { + e.message = message +} + +func (e *BusinessError) SetContextErr(err error) { + e.contextErr = append(e.contextErr, err) +} + +func (e *BusinessError) GetContextErr() []error { + return e.contextErr +} + +// NewBusinessError Create a business error +func NewBusinessError(code int, message ...string) *BusinessError { + var msg string + if message != nil { + msg = message[0] + } else { + msg = NewErrorText(c.Config.Language).Text(code) + } + err := new(BusinessError) + err.SetCode(code) + err.SetMessage(msg) + return err +} + +func AsBusinessError(err error) (*BusinessError, error) { + var BusinessError = new(BusinessError) + if errors.As(err, &BusinessError) { + return BusinessError, nil + } + return nil, err +} diff --git a/server/internal/pkg/errors/zh-cn.go b/server/internal/pkg/errors/zh-cn.go new file mode 100644 index 0000000..dcaf4b9 --- /dev/null +++ b/server/internal/pkg/errors/zh-cn.go @@ -0,0 +1,12 @@ +package errors + +var zhCNText = map[int]string{ + SUCCESS: "OK", + FAILURE: "FAIL", + NotFound: "资源不存在", + ServerError: "服务器内部错误", + TooManyRequests: "请求过多", + InvalidParameter: "参数错误", + AuthorizationError: "权限错误", + RBACError: "暂无访问权限", +} diff --git a/server/internal/pkg/file_download_client/download.go b/server/internal/pkg/file_download_client/download.go new file mode 100644 index 0000000..dc66e30 --- /dev/null +++ b/server/internal/pkg/file_download_client/download.go @@ -0,0 +1,42 @@ +package file_download_client + +import ( + "errors" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/httputils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "net/http" + "os" + "time" +) + +func DownloadFileToLocal(fileUrl, localFilePath string, retry int) error { + var fileBytes []byte + if retry <= 0 { + retry = 3 + } + + for retry > 0 { + object, statusCode, _, err := httputils.HttpGet(fileUrl, 600*time.Second, map[string]string{}, []*http.Cookie{}) + if err != nil || statusCode >= 400 { + return errors.New(fmt.Sprintf("下载失败,err:%s, statusCode:%s", err, statusCode)) + } else { + fileBytes = object + break + } + retry-- + } + + localFile, err := os.Create(localFilePath) + if err != nil { + log.Errorf("创建本地文件失败: %s", localFilePath) + return err + } + defer localFile.Close() + + if _, err := localFile.Write(fileBytes); err != nil { + log.Errorf("写入本地文件失败: %s", localFilePath) + return err + } + return nil +} diff --git a/server/internal/pkg/func_make/func_make.go b/server/internal/pkg/func_make/func_make.go new file mode 100644 index 0000000..2a479b1 --- /dev/null +++ b/server/internal/pkg/func_make/func_make.go @@ -0,0 +1,51 @@ +package func_make + +import ( + "errors" + "reflect" +) + +type FuncMap map[string]reflect.Value + +func New() FuncMap { + return make(FuncMap, 2) +} + +func (f FuncMap) Register(name string, fn any) error { + v := reflect.ValueOf(fn) + if v.Kind() != reflect.Func { + return errors.New(name + " is not a function type.") + } + f[name] = v + return nil +} + +func (f FuncMap) Registers(funcMap map[string]any) (err error) { + for k, v := range funcMap { + err = f.Register(k, v) + if err != nil { + break + } + } + return +} + +func (f FuncMap) Call(name string, params ...any) (result []reflect.Value, err error) { + if _, ok := f[name]; !ok { + err = errors.New(name + " method does not exist.") + return + } + in := make([]reflect.Value, len(params)) + for k, param := range params { + in[k] = reflect.ValueOf(param) + } + + defer func() { + if e := recover(); e != nil { + err = errors.New("call " + name + " method fail. " + e.(string)) + } + }() + + result = f[name].Call(in) + return +} diff --git a/server/internal/pkg/func_make/func_make_test.go b/server/internal/pkg/func_make/func_make_test.go new file mode 100644 index 0000000..bebaf43 --- /dev/null +++ b/server/internal/pkg/func_make/func_make_test.go @@ -0,0 +1,45 @@ +package func_make + +import ( + "testing" +) + +var ( + funcMap = map[string]interface{}{ + "test": func(str string) string { + return str + }, + } + funcMake = New() +) + +func TestRegisters(t *testing.T) { + err := funcMake.Registers(funcMap) + if err != nil { + t.Errorf("绑定失败") + } +} + +func TestRegister(t *testing.T) { + err := funcMake.Register("test1", func(str ...string) string { + var res string + for _, v := range str { + res += v + } + return res + }) + if err != nil { + t.Errorf("绑定失败") + } +} + +func TestCall(t *testing.T) { + TestRegisters(t) + TestRegister(t) + if _, err := funcMake.Call("test", "1"); err != nil { + t.Errorf("请求test方法失败:%s", err) + } + if _, err := funcMake.Call("test1", "2323", "ddd"); err != nil { + t.Errorf("请求test1方法失败:%s", err) + } +} diff --git a/server/internal/pkg/httputils/http.go b/server/internal/pkg/httputils/http.go new file mode 100644 index 0000000..c8a4cfb --- /dev/null +++ b/server/internal/pkg/httputils/http.go @@ -0,0 +1,90 @@ +package httputils + +import ( + "crypto/tls" + "io" + "net" + "net/http" + "time" +) + +const DefaultTimeout = 10 * time.Second + +func HttpGet(url string, timeout time.Duration, customHeaders map[string]string, cookies []*http.Cookie) ([]byte, int, []*http.Cookie, error) { + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + return nil, 0, nil, err + } + + for _, c := range cookies { + req.AddCookie(c) + } + + transport, err := CreateTransport(&http.Transport{}, timeout, customHeaders) + if err != nil { + return nil, 0, nil, err + } + + client := http.Client{Transport: transport, Timeout: timeout} + + resp, err := client.Do(req) + if err != nil { + return nil, 0, nil, err + } + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + return body, resp.StatusCode, resp.Cookies(), err +} + +type customHeadersRoundTripper struct { + headers map[string]string + originalRT http.RoundTripper +} + +func (rt *customHeadersRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + // note: no need to check for nil or empty map - newCustomHeadersRoundTripper will assure us there will always be at least 1 + for k, v := range rt.headers { + req.Header.Set(k, v) + } + return rt.originalRT.RoundTrip(req) +} + +func newCustomHeadersRoundTripper(headers map[string]string, rt http.RoundTripper) http.RoundTripper { + if len(headers) == 0 { + // if there are no custom headers then there is no need for a special RoundTripper; therefore just return the original RoundTripper + return rt + } + return &customHeadersRoundTripper{ + headers: headers, + originalRT: rt, + } +} + +// Creates a new HTTP Transport with TLS, Timeouts, and optional custom headers. +// +// Please remember that setting long timeouts is not recommended as it can make +// idle connections stay open for as long as 2 * timeout. This should only be +// done in cases where you know the request is very likely going to be reused at +// some point in the near future. +func CreateTransport(transportConfig *http.Transport, timeout time.Duration, customHeaders map[string]string) (http.RoundTripper, error) { + // Limits the time spent establishing a TCP connection if a new one is + // needed. If DialContext is not set, Dial is used, we only create a new one + // if neither is defined. + if transportConfig.DialContext == nil { + transportConfig.DialContext = (&net.Dialer{ + Timeout: timeout, + }).DialContext + } + + transportConfig.IdleConnTimeout = timeout + + transportConfig.TLSClientConfig = &tls.Config{ + InsecureSkipVerify: true, + } + + // We might need some custom RoundTrippers to manipulate the requests (for auth and other custom request headers). + // Chain together the RoundTrippers that we need, retaining the outer-most round tripper so we can return it. + outerRoundTripper := newCustomHeadersRoundTripper(customHeaders, transportConfig) + + return outerRoundTripper, nil +} diff --git a/server/internal/pkg/request/pageinfo.go b/server/internal/pkg/request/pageinfo.go new file mode 100644 index 0000000..72877d8 --- /dev/null +++ b/server/internal/pkg/request/pageinfo.go @@ -0,0 +1,7 @@ +package request + +type PageInfo struct { + CurrentPage int64 `json:"currentPage"` + PageSize int64 `json:"pageSize"` + Order string `json:"order"` //db.Order("name DESC") +} diff --git a/server/internal/pkg/request/request.go b/server/internal/pkg/request/request.go new file mode 100644 index 0000000..aa88eca --- /dev/null +++ b/server/internal/pkg/request/request.go @@ -0,0 +1,57 @@ +package request + +import ( + "bytes" + "errors" + "github.com/gin-gonic/gin" + "io/ioutil" + "net/http" +) + +func GetQueryParams(c *gin.Context) map[string]any { + query := c.Request.URL.Query() + var queryMap = make(map[string]any, len(query)) + for k := range query { + queryMap[k] = c.Query(k) + } + return queryMap +} + +func GetPostFormParams(c *gin.Context) (map[string]any, error) { + if err := c.Request.ParseMultipartForm(32 << 20); err != nil { + if !errors.Is(err, http.ErrNotMultipart) { + return nil, err + } + } + var postMap = make(map[string]any, len(c.Request.PostForm)) + for k, v := range c.Request.PostForm { + if len(v) > 1 { + postMap[k] = v + } else if len(v) == 1 { + postMap[k] = v[0] + } + } + + return postMap, nil +} + +func GetBody(c *gin.Context) []byte { + // 读取body数据 + body, err := c.GetRawData() + if err != nil { + return nil + } + //把读过的字节流重新放到body + c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) + return body +} + +type RequestBody map[string]interface{} + +func GetBodyToMap(c *gin.Context) map[string]interface{} { + var requestBody RequestBody + if err := c.ShouldBindJSON(&requestBody); err != nil { + return map[string]interface{}{} + } + return requestBody +} diff --git a/server/internal/pkg/response/response.go b/server/internal/pkg/response/response.go new file mode 100644 index 0000000..4817be8 --- /dev/null +++ b/server/internal/pkg/response/response.go @@ -0,0 +1,158 @@ +package response + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + "github.com/gin-gonic/gin" + "net/http" + "time" +) + +type Result struct { + Code int `json:"code"` + Msg string `json:"msg"` + Data interface{} `json:"data"` + Cost string `json:"cost"` + Now time.Time `json:"now"` +} + +type Response struct { + HttpCode int + Result *Result +} + +func (r *Response) IsSuccess() bool { + return r.HttpCode == 200 +} + +func (r *Response) IsBusinessSuccess() bool { + if !r.IsSuccess() { + return false + } + return r.Result.Code == 200 +} + +func Resp() *Response { + // 初始化response + return &Response{ + HttpCode: http.StatusOK, + Result: &Result{ + Code: 0, + Msg: "", + Data: nil, + Cost: "", + Now: time.Now(), + }, + } +} + +// Fail 错误返回 +func (r *Response) Fail(c *gin.Context, code int, msg string, data ...any) { + r.SetCode(code) + r.SetHttpCode(code) + r.SetMessage(msg) + if data != nil { + r.WithData(data[0]) + } + r.json(c) +} + +// FailCode 自定义错误码返回 +func (r *Response) FailCode(c *gin.Context, code int, msg ...string) { + r.SetCode(code) + r.SetHttpCode(code) + if msg != nil { + r.SetMessage(msg[0]) + } + r.json(c) +} + +// Success 正确返回 +func (r *Response) Success(c *gin.Context) { + r.SetCode(errors.SUCCESS) + r.json(c) +} + +// WithDataSuccess 成功后需要返回值 +func (r *Response) WithDataSuccess(c *gin.Context, data interface{}) { + r.SetCode(errors.SUCCESS) + r.WithData(data) + r.json(c) +} + +// SetCode 设置返回code码 +func (r *Response) SetCode(code int) *Response { + r.Result.Code = code + return r +} + +// SetHttpCode 设置http状态码 +func (r *Response) SetHttpCode(code int) *Response { + r.HttpCode = code + return r +} + +type defaultRes struct { + Result any `json:"result"` +} + +// WithData 设置返回data数据 +func (r *Response) WithData(data any) *Response { + switch data.(type) { + case string, int, bool: + r.Result.Data = &defaultRes{Result: data} + default: + r.Result.Data = data + } + return r +} + +// SetMessage 设置返回自定义错误消息 +func (r *Response) SetMessage(message string) *Response { + r.Result.Msg = message + return r +} + +var ErrorText = errors.NewErrorText(config.Config.Language) + +// json 返回 gin 框架的 HandlerFunc +func (r *Response) json(c *gin.Context) { + if r.Result.Msg == "" { + r.Result.Msg = ErrorText.Text(r.Result.Code) + } + + // if r.Data == nil { + // r.Data = struct{}{} + // } + + r.Result.Cost = time.Since(c.GetTime("requestStartTime")).String() + c.AbortWithStatusJSON(r.HttpCode, r.Result) +} + +// Success 业务成功响应 +func Success(c *gin.Context, data ...any) { + if data != nil { + Resp().WithDataSuccess(c, data[0]) + return + } + Resp().Success(c) +} + +// FailCode 业务失败响应 +func FailCode(c *gin.Context, code int, data ...any) { + if data != nil { + Resp().WithData(data[0]).FailCode(c, code) + return + } + + Resp().FailCode(c, code) +} + +// Fail 业务失败响应 +func Fail(c *gin.Context, code int, message string, data ...any) { + if data != nil { + Resp().WithData(data[0]).FailCode(c, code, message) + return + } + Resp().FailCode(c, code, message) +} diff --git a/server/internal/pkg/secure/aes.go b/server/internal/pkg/secure/aes.go new file mode 100644 index 0000000..affbe63 --- /dev/null +++ b/server/internal/pkg/secure/aes.go @@ -0,0 +1,107 @@ +package secure + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "encoding/base64" +) + +func EncryptAES(plaintext string, key string) (string, error) { + block, err := aes.NewCipher([]byte(key)) + if err != nil { + return "", err + } + + ecb := NewECBEncrypter(block) + paddedPlaintext := pad(plaintext, block.BlockSize()) + encrypted := make([]byte, len(paddedPlaintext)) + ecb.CryptBlocks(encrypted, paddedPlaintext) + + return base64.StdEncoding.EncodeToString(encrypted), nil +} + +func DecryptAES(ciphertext string, key string) (string, error) { + block, err := aes.NewCipher([]byte(key)) + if err != nil { + return "", err + } + + decodedCiphertext, err := base64.StdEncoding.DecodeString(ciphertext) + if err != nil { + return "", err + } + + decrypted := make([]byte, len(decodedCiphertext)) + ecb := NewECBDecrypter(block) + ecb.CryptBlocks(decrypted, decodedCiphertext) + + return string(unpad(decrypted)), nil +} + +// ECBEncrypter 实现 AES-256-ECB 加密模式 +type ECBEncrypter struct { + b cipher.Block + blockSize int +} + +// NewECBEncrypter 创建一个 AES-256-ECB 加密模式的 ECBEncrypter +func NewECBEncrypter(b cipher.Block) cipher.BlockMode { + return &ECBEncrypter{b, b.BlockSize()} +} + +func (x *ECBEncrypter) BlockSize() int { return x.blockSize } + +func (x *ECBEncrypter) CryptBlocks(dst, src []byte) { + if len(src)%x.blockSize != 0 { + panic("crypto/cipher: input not full blocks") + } + if len(dst) < len(src) { + panic("crypto/cipher: output smaller than input") + } + for len(src) > 0 { + x.b.Encrypt(dst, src[:x.blockSize]) + src = src[x.blockSize:] + dst = dst[x.blockSize:] + } +} + +// ECBDecrypter 实现 AES-256-ECB 解密模式 +type ECBDecrypter struct { + b cipher.Block + blockSize int +} + +// NewECBDecrypter 创建一个 AES-256-ECB 解密模式的 ECBDecrypter +func NewECBDecrypter(b cipher.Block) cipher.BlockMode { + return &ECBDecrypter{b, b.BlockSize()} +} + +func (x *ECBDecrypter) BlockSize() int { return x.blockSize } + +func (x *ECBDecrypter) CryptBlocks(dst, src []byte) { + if len(src)%x.blockSize != 0 { + panic("crypto/cipher: input not full blocks") + } + if len(dst) < len(src) { + panic("crypto/cipher: output smaller than input") + } + for len(src) > 0 { + x.b.Decrypt(dst, src[:x.blockSize]) + src = src[x.blockSize:] + dst = dst[x.blockSize:] + } +} + +func pad(s string, blockSize int) []byte { + padding := blockSize - len(s)%blockSize + padText := []byte{byte(padding)} + padText = append(padText, bytes.Repeat([]byte{byte(padding)}, padding-1)...) + return append([]byte(s), padText...) +} + +func unpad(s []byte) []byte { + length := len(s) + unpadding := int(s[length-1]) + return s[:length-unpadding] +} diff --git a/server/internal/pkg/secure/base64.go b/server/internal/pkg/secure/base64.go new file mode 100644 index 0000000..ca3a924 --- /dev/null +++ b/server/internal/pkg/secure/base64.go @@ -0,0 +1,28 @@ +package secure + +import ( + "encoding/base64" +) + +const ( + //base64Table = "123QRSTUabcdVWXYZHijKLAWDCABDstEFGuvwxyzGHIJklmnopqr234560178912" + base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" // 假设原始字符串中有重复字符 +) + +var coder = base64.NewEncoding(base64Table) + +func Base64Encode(src []byte) []byte { + return []byte(coder.EncodeToString(src)) +} + +func Base64Decode(src []byte) ([]byte, error) { + return coder.DecodeString(string(src)) +} + +func Base64StdDecode(src string) ([]byte, error) { + return base64.StdEncoding.DecodeString(src) +} + +func Base64StdEncode(src []byte) string { + return base64.StdEncoding.EncodeToString(src) +} diff --git a/server/internal/pkg/secure/cipher.go b/server/internal/pkg/secure/cipher.go new file mode 100644 index 0000000..187fa1e --- /dev/null +++ b/server/internal/pkg/secure/cipher.go @@ -0,0 +1,141 @@ +package secure + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/base64" + "encoding/pem" + "errors" + "github.com/golang/glog" +) + +var ( + seckey = []byte("Q1A2Z3X!D^R$T&G*B(N)U088") //24Byte + base64Tables = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" + iv = []byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} +) + +func base64Encode(src []byte) string { + coder := base64.NewEncoding(base64Tables) + return coder.EncodeToString(src) +} + +func base64Decode(src string) ([]byte, error) { + coder := base64.NewEncoding(base64Tables) + return coder.DecodeString(src) +} + +func aesPadding(src []byte, blockSize int) []byte { + padding := blockSize - len(src)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(src, padtext...) +} + +func aesUnPadding(src []byte) []byte { + length := len(src) + unpadding := int(src[length-1]) + return src[:(length - unpadding)] +} +func Encrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + + arr := aesPadding([]byte(src), aes.BlockSize) + mode := cipher.NewCBCEncrypter(block, iv) + mode.CryptBlocks(arr, arr) + return string(arr), nil +} +func Decrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + arr := []byte(src) + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(arr, arr) + arr = aesUnPadding(arr) + return string(arr), nil + +} + +func EncryptAndBase64(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + + arr := aesPadding([]byte(src), aes.BlockSize) + mode := cipher.NewCBCEncrypter(block, iv) + mode.CryptBlocks(arr, arr) + return base64Encode(arr), nil +} + +func Base64AndDecrypt(src string) (string, error) { + block, err := aes.NewCipher(seckey) + if err != nil { + return "", nil + } + arr, err := base64Decode(src) + if err != nil { + glog.Errorln("Failed to decode the content:", err) + return "", err + } + mode := cipher.NewCBCDecrypter(block, iv) + mode.CryptBlocks(arr, arr) + arr = aesUnPadding(arr) + return string(arr), nil +} + +func RsaDecrypt(ciphertext string, private_key string) (string, error) { + prk := []byte("-----BEGIN RSA PRIVATE KEY-----\n" + + private_key + + "\n-----END RSA PRIVATE KEY-----") + block, _ := pem.Decode(prk) + if block == nil { + return "", errors.New("private key error!") + } + pKCS8PrivateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes) + if err != nil { + return "", err + } + cipherbytes, err := base64.StdEncoding.DecodeString(ciphertext) + if err != nil { + return "", err + } + privateKey := pKCS8PrivateKey.(*rsa.PrivateKey) + decrypt, err := rsa.DecryptPKCS1v15(rand.Reader, privateKey, cipherbytes) + if err != nil { + return "", err + } + return string(decrypt), nil +} + +func RsaEncrypt(text string, public_key string) (string, error) { + prk := []byte("-----BEGIN RSA PUBLIC KEY-----\n" + + public_key + + "\n-----END RSA PUBLIC KEY-----") + block, _ := pem.Decode(prk) + if block == nil { + return "", errors.New("public key error!") + } + pKIXPublicKey, err := x509.ParsePKIXPublicKey(block.Bytes) + if err != nil { + return "", err + } + publicKey := pKIXPublicKey.(*rsa.PublicKey) + encryptStr, err := rsa.EncryptPKCS1v15(rand.Reader, publicKey, []byte(text)) + if err != nil { + return "", err + } + base64Str := base64.StdEncoding.EncodeToString(encryptStr) + if err != nil { + return "", err + } + return base64Str, nil +} diff --git a/server/internal/pkg/secure/md5.go b/server/internal/pkg/secure/md5.go new file mode 100644 index 0000000..0f5a20e --- /dev/null +++ b/server/internal/pkg/secure/md5.go @@ -0,0 +1,63 @@ +package secure + +import ( + "crypto/md5" + "encoding/base64" + "encoding/hex" + "io" +) + +func DecodeBase64(str string) (string, error) { + data, err := base64.StdEncoding.DecodeString(str) + if err != nil { + return "", err + } + return string(data), nil +} + +func MD5Sum(str ...string) string { + h := md5.New() + for _, s := range str { + io.WriteString(h, s) + } + return hex.EncodeToString(h.Sum(nil)) +} + +func EncodeMD5(str string) string { + h := md5.New() + io.WriteString(h, str) + + strSum := h.Sum(nil) + res := hex.EncodeToString(strSum) + return res +} + +func EncodeMD5NoFeature(str string) string { + encryption := func(txt string) string { + hexDigits := []byte{'!', '/', '|', '~', '`', '^', '\'', '*', '?', '/', '-', '_', '=', '+', '.', ','} + + mdInst := md5.New() + io.WriteString(mdInst, txt) + md := mdInst.Sum(nil) + + pos := 0 + mdLength := len(md) + str := make([]byte, mdLength*2) + + for i := 0; i < mdLength; i++ { + byte0 := md[i] + str[pos] = hexDigits[byte0>>4&0xf] + pos++ + str[pos] = hexDigits[byte0&0xf] + pos++ + } + + return string(str) + } + + for i := 0; i < 32; i++ { + str = encryption(str) + } + + return str +} diff --git a/server/internal/pkg/secure/sha1.go b/server/internal/pkg/secure/sha1.go new file mode 100644 index 0000000..43f384d --- /dev/null +++ b/server/internal/pkg/secure/sha1.go @@ -0,0 +1,18 @@ +package secure + +import ( + "crypto/sha1" + "encoding/hex" + "io" +) + +func Sha1Encrypt(text string) string { + data := []byte(text) + hasher := sha1.New() + _, err := io.WriteString(hasher, string(data)) + if err != nil { + return "" + } + sum := hasher.Sum(nil) + return hex.EncodeToString(sum) +} diff --git a/server/internal/pkg/utils/collect/collect.go b/server/internal/pkg/utils/collect/collect.go new file mode 100644 index 0000000..974b7af --- /dev/null +++ b/server/internal/pkg/utils/collect/collect.go @@ -0,0 +1,23 @@ +package collect + +// SubtractCollections 计算两个切片的差集 +func SubtractCollections[T comparable](slice1, slice2 []T) []T { + resultMap := make(map[T]bool) + var result = make([]T, 0) + + for _, item := range slice1 { + resultMap[item] = true + } + + for _, item := range slice2 { + if _, exists := resultMap[item]; exists { + delete(resultMap, item) + } + } + + for item := range resultMap { + result = append(result, item) + } + + return result +} diff --git a/server/internal/pkg/utils/data/outGiving/M5ZE22/3028.jpg b/server/internal/pkg/utils/data/outGiving/M5ZE22/3028.jpg new file mode 100644 index 0000000..260ed0f Binary files /dev/null and b/server/internal/pkg/utils/data/outGiving/M5ZE22/3028.jpg differ diff --git a/server/internal/pkg/utils/data/outGiving/MXZ084/7f93be24-9c3a-43fb-b0ea-9c8e32955319 b/server/internal/pkg/utils/data/outGiving/MXZ084/7f93be24-9c3a-43fb-b0ea-9c8e32955319 new file mode 100644 index 0000000..260ed0f Binary files /dev/null and b/server/internal/pkg/utils/data/outGiving/MXZ084/7f93be24-9c3a-43fb-b0ea-9c8e32955319 differ diff --git a/server/internal/pkg/utils/data/outGiving/MXZ084/884b0817-5eac-4bbd-b02a-6fe9cb3454db b/server/internal/pkg/utils/data/outGiving/MXZ084/884b0817-5eac-4bbd-b02a-6fe9cb3454db new file mode 100644 index 0000000..260ed0f Binary files /dev/null and b/server/internal/pkg/utils/data/outGiving/MXZ084/884b0817-5eac-4bbd-b02a-6fe9cb3454db differ diff --git a/server/internal/pkg/utils/data/outGiving/MXZ084/cd256eb8-5f08-4529-819a-8c72cbde2b20 b/server/internal/pkg/utils/data/outGiving/MXZ084/cd256eb8-5f08-4529-819a-8c72cbde2b20 new file mode 100644 index 0000000..260ed0f Binary files /dev/null and b/server/internal/pkg/utils/data/outGiving/MXZ084/cd256eb8-5f08-4529-819a-8c72cbde2b20 differ diff --git a/server/internal/pkg/utils/data/outGiving/MXZ084/d20f00d7-983c-4a6b-b72b-d6957c9eca66 b/server/internal/pkg/utils/data/outGiving/MXZ084/d20f00d7-983c-4a6b-b72b-d6957c9eca66 new file mode 100644 index 0000000..260ed0f Binary files /dev/null and b/server/internal/pkg/utils/data/outGiving/MXZ084/d20f00d7-983c-4a6b-b72b-d6957c9eca66 differ diff --git a/server/internal/pkg/utils/excel.go b/server/internal/pkg/utils/excel.go new file mode 100644 index 0000000..e50f67b --- /dev/null +++ b/server/internal/pkg/utils/excel.go @@ -0,0 +1,75 @@ +package utils + +import ( + "github.com/xuri/excelize/v2" + "strconv" +) + +// maxCharCount 最多26个字符A-Z +const maxCharCount = 26 + +// ExportExcel 导出Excel文件 +// sheetName 工作表名称, 注意这里不要取sheet1这种名字,否则导致文件打开时发生部分错误。 +// headers 列名切片, 表头 +// rows 数据切片,是一个二维数组 +func ExportExcel(sheetName string, headers []string, rows [][]interface{}) (*excelize.File, error) { + f := excelize.NewFile() + sheetIndex, _ := f.NewSheet(sheetName) + maxColumnRowNameLen := 1 + len(strconv.Itoa(len(rows))) + columnCount := len(headers) + if columnCount > maxCharCount { + maxColumnRowNameLen++ + } else if columnCount > maxCharCount*maxCharCount { + maxColumnRowNameLen += 2 + } + columnNames := make([][]byte, 0, columnCount) + for i, header := range headers { + columnName := getColumnName(i, maxColumnRowNameLen) + columnNames = append(columnNames, columnName) + // 初始化excel表头,这里的index从1开始要注意 + curColumnName := getColumnRowName(columnName, 1) + err := f.SetCellValue(sheetName, curColumnName, header) + if err != nil { + return nil, err + } + } + for rowIndex, row := range rows { + for columnIndex, columnName := range columnNames { + // 从第二行开始 + err := f.SetCellValue(sheetName, getColumnRowName(columnName, rowIndex+2), row[columnIndex]) + if err != nil { + return nil, err + } + } + } + f.SetActiveSheet(sheetIndex) + return f, nil +} + +// getColumnName 生成列名 +// Excel的列名规则是从A-Z往后排;超过Z以后用两个字母表示,比如AA,AB,AC;两个字母不够以后用三个字母表示,比如AAA,AAB,AAC +// 这里做数字到列名的映射:0 -> A, 1 -> B, 2 -> C +// maxColumnRowNameLen 表示名称框的最大长度,假设数据是10行,1000列,则最后一个名称框是J1000(如果有表头,则是J1001),是4位 +// 这里根据 maxColumnRowNameLen 生成切片,后面生成名称框的时候可以复用这个切片,而无需扩容 +func getColumnName(column, maxColumnRowNameLen int) []byte { + const A = 'A' + if column < maxCharCount { + // 第一次就分配好切片的容量 + slice := make([]byte, 0, maxColumnRowNameLen) + return append(slice, byte(A+column)) + } else { + // 递归生成类似AA,AB,AAA,AAB这种形式的列名 + return append(getColumnName(column/maxCharCount-1, maxColumnRowNameLen), byte(A+column%maxCharCount)) + } +} + +// getColumnRowName 生成名称框 +// Excel的名称框是用A1,A2,B1,B2来表示的,这里需要传入前一步生成的列名切片,然后直接加上行索引来生成名称框,就无需每次分配内存 +func getColumnRowName(columnName []byte, rowIndex int) (columnRowName string) { + l := len(columnName) + columnName = strconv.AppendInt(columnName, int64(rowIndex), 10) + columnRowName = string(columnName) + // 将列名恢复回去 + columnName = columnName[:l] + return +} diff --git a/server/internal/pkg/utils/file_utils/file_utils.go b/server/internal/pkg/utils/file_utils/file_utils.go new file mode 100644 index 0000000..bac4ea9 --- /dev/null +++ b/server/internal/pkg/utils/file_utils/file_utils.go @@ -0,0 +1,617 @@ +package file_utils + +import ( + "bufio" + "fmt" + "github.com/mattn/go-isatty" + "io" + "io/ioutil" + "math" + "os" + "path/filepath" + "sort" + "strconv" + "strings" +) + +func fileToJson(file os.FileInfo) map[string]interface{} { + jsonObj := make(map[string]interface{}) + jsonObj["isDirectory"] = file.IsDir() + jsonObj["fileSizeLong"] = file.Size() + jsonObj["filename"] = file.Name() + jsonObj["modifyTimeLong"] = file.ModTime().UnixMilli() + return jsonObj +} + +func ParseInfo(fileDir string, fileNames []os.DirEntry, time bool, startPath string) []map[string]interface{} { + + if len(fileNames) == 0 { + return []map[string]interface{}{} + } + jsonObjects := make([]map[string]interface{}, len(fileNames)) + for i, file := range fileNames { + info, err := file.Info() + if err != nil { + jsonObjects[i] = map[string]interface{}{} + continue + } + jsonObj := fileToJson(info) + if startPath != "" { + join := filepath.Join(fileDir, file.Name()) + levelName := DelStartPath(join, startPath, false) + jsonObj["levelName"] = levelName + } + jsonObjects[i] = jsonObj + } + if time { + sort.Slice(jsonObjects, func(i, j int) bool { + return jsonObjects[j]["modifyTimeLong"].(int64) > jsonObjects[i]["modifyTimeLong"].(int64) + }) + } else { + sort.Slice(jsonObjects, func(i, j int) bool { + return strings.Compare(jsonObjects[i]["filename"].(string), jsonObjects[j]["filename"].(string)) < 0 + }) + } + return jsonObjects +} + +func DelStartPath(file, baseFile string, inName bool) string { + // 检查baseFile和file是否为同一路径,这部分需要在Go中自定义实现,因为Go标准库没有提供这样的功能 + err := CheckSlip(baseFile, file) + if err != nil { + return "" + } + + var newWhitePath string + if inName { + newWhitePath, _ = filepath.Abs(file) + } else { + dir := filepath.Dir(file) + newWhitePath, _ = filepath.Abs(dir) + } + + itemAbsPath, _ := filepath.Abs(baseFile) + itemAbsPath = filepath.Clean(itemAbsPath) + newWhitePath = filepath.Clean(newWhitePath) + + // 移除前缀 + path := strings.TrimPrefix(newWhitePath, itemAbsPath) + + // 此处的normalize在Go中由Clean完成,不需要额外操作 + // path = normalize(path) + path = strings.ReplaceAll(path, "\\", "/") + if strings.HasPrefix(path, "/") { + path = path[1:] + } + return path +} + +func readLogFile(logFile string, line int) map[string]interface{} { + data := make(map[string]interface{}) + lines := make([]string, 0, 1000) + readCount := 0 + file, err := os.Open(logFile) + if err != nil { + return data + } + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() && readCount < line { + readCount++ + } + for scanner.Scan() { + lines = append(lines, scanner.Text()) + } + data["line"] = readCount + 1 + data["getLine"] = line + data["dataLines"] = lines + return data +} + +func readEnvFile(baseFile string, attachEnv string) map[string]string { + envMap := make(map[string]string) + if attachEnv == "" { + return envMap + } + envFiles := strings.Split(strings.TrimSpace(attachEnv), ",") + for _, envFile := range envFiles { + envFilePath := filepath.Join(baseFile, envFile) + content, err := ioutil.ReadFile(envFilePath) + if err == nil { + lines := strings.Split(string(content), "\n") + for _, line := range lines { + keyValue := strings.SplitN(line, "=", 2) + if len(keyValue) == 2 { + envMap[keyValue[0]] = keyValue[1] + } + } + } + } + return envMap +} + +func AppendLines(lines []string, file string) error { + // 以追加和写入模式打开文件,文件权限为写入模式 + f, err := os.OpenFile(file, os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModeAppend) + if err != nil { + return err + } + defer f.Close() + + writer := bufio.NewWriter(f) + for _, line := range lines { + _, err := writer.WriteString(line + "\n") // 添加换行符 + if err != nil { + return err + } + } + err = writer.Flush() + if err != nil { + return err + } + + return nil +} + +func ReadLines(filePath string, callback func(string)) error { + // 打开文件,返回一个文件对象 + file, err := os.Open(filePath) + if err != nil { + return err + } + defer file.Close() // 关闭文件,确保资源释放 + + // 创建一个扫描器,从文件对象中按行读取文本 + scanner := bufio.NewScanner(file) + + // 循环读取每一行 + for scanner.Scan() { + line := scanner.Text() // 当前行文本内容 + callback(line) + } + + // 检查扫描过程中是否有错误发生 + if err := scanner.Err(); err != nil { + return err + } + + return nil +} + +// WriteScript 使用当前系统的换行符写文件 +func WriteScript(context string, scriptFile string) error { + lineSeparator := "\n" + if isatty.IsTerminal(os.Stdout.Fd()) || isatty.IsCygwinTerminal(os.Stdout.Fd()) { + lineSeparator = "\r\n" + } + + // 替换换行符 + replaced := strings.Replace(context, "\n", lineSeparator, -1) + + // 使用 os.Create 创建文件,若文件已存在则会清空原有内容 + file, err := os.Create(scriptFile) + if err != nil { + return err + } + defer file.Close() // 关闭文件,确保资源释放 + + // 使用 bufio.NewWriter 创建一个缓冲 writer,提高写入效率 + writer := bufio.NewWriter(file) + + // 使用 WriteString 写入字符串到缓冲 writer + _, err = writer.WriteString(replaced) + if err != nil { + return err + } + + // 刷新缓冲,确保所有数据写入到文件 + err = writer.Flush() + if err != nil { + return err + } + + return nil +} + +// CheckFilePathSlip 用于检查文件路径是否包含滑动漏洞 +func CheckFilePathSlip(filePath string) error { + //借助临时目录检测 + tempDir := os.TempDir() + joined := filepath.Join(tempDir, filePath) + // 检查路径,你可以根据自己需求进行相应的操作 + return CheckSlip(tempDir, joined) +} + +// CheckSlip 用于检查文件路径是否包含滑动漏洞 +func CheckSlip(parentFilePath string, filePath string) error { + absParentPath, err := filepath.Abs(parentFilePath) + if err != nil { + return err + } + + absFilePath, err := filepath.Abs(filePath) + if err != nil { + return err + } + + if !IsSub(absParentPath, absFilePath) { + return fmt.Errorf("New file is outside of the parent dir: %s", absFilePath) + } + + return nil +} + +// 判断路径是否是目录的子目录 +func IsSub(parentDir string, file string) bool { + rel, err := filepath.Rel(parentDir, file) + if err != nil { + return false + } + return !strings.HasPrefix(rel, "..") && !strings.HasPrefix(rel, ".") +} + +func IsDirectory(path string) (bool, error) { + fileInfo, err := os.Stat(path) + if err != nil { + return false, err + } + return fileInfo.IsDir(), nil +} + +func IsFile(path string) (bool, error) { + fileInfo, err := os.Stat(path) + if err != nil { + return false, err + } + return !fileInfo.IsDir(), nil +} + +func ListFilesInDirectory(dirPath string) []string { + dir, err := os.Open(dirPath) + if err != nil { + return nil + } + defer dir.Close() + + names, err := dir.ReadDir(-1) + if err != nil { + return nil + } + + var fileNames []string + for _, entry := range names { + if !entry.IsDir() { + fileNames = append(fileNames, filepath.Join(dirPath, entry.Name())) + } + } + + return fileNames +} + +func CheckFileExists(filePath string) (bool, error) { + _, err := os.Stat(filePath) + if err != nil { + if os.IsNotExist(err) { + return false, nil // 文件不存在 + } + return false, err // 其他错误(如权限问题) + } + return true, nil // 文件存在 +} + +// TempMoveContent 安全地移动文件夹内容 +func TempMoveContent(src, target string) error { + srcFile, err := os.Stat(src) + if err != nil { + return err + } + targetFile, err := os.Stat(target) + if err != nil { + if !os.IsNotExist(err) { + return err + } + } + + // isSubdir时: 将文件内容先复制到临时目录,避免递归出现自己 mv 自己的情况 + if targetFile != nil && srcFile.IsDir() && targetFile.IsDir() && isSubdir(src, target) { + // 创建临时目录 + tmpDir, err := ioutil.TempDir("", "mv-") + if err != nil { + return err + } + defer os.Remove(tmpDir) + + // 将源目录内容移动到临时目录 + if err := moveContent(src, tmpDir); err != nil { + return err + } + + // 创建目标目录 + if err := os.MkdirAll(target, 0755); err != nil { + return err + } + + // 从临时目录移动内容到目标目录 + if err := moveContent(tmpDir, target); err != nil { + return err + } + } else { + // 直接移动源目录内容到目标目录 + if err := moveContent(src, target); err != nil { + return err + } + + // 删除源目录 + if err := os.RemoveAll(src); err != nil { + return err + } + } + + return nil +} + +// isSubdir 判断 src 是否为 target 的子目录 +func isSubdir(src, target string) bool { + srcP, err := filepath.EvalSymlinks(src) + if err != nil { + return false + } + targetP, err := filepath.EvalSymlinks(target) + if err != nil { + return false + } + + return strings.HasPrefix(srcP, targetP+string(filepath.Separator)) +} + +// moveContent 移动目录内容 +func moveContent(src, target string) error { + return filepath.Walk(src, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + targetPath := filepath.Join(target, filepath.FromSlash(filepath.ToSlash(path[len(src):]))) + if info.IsDir() { + return os.MkdirAll(targetPath, info.Mode()) + } + + return os.Rename(path, targetPath) + }) +} + +func CheckDir(filePath string) { + // 获取目录部分 + + dirPath := filepath.Dir(filePath) + + // 创建目录 + err := os.MkdirAll(dirPath, 0755) + if err != nil { + fmt.Printf("Error creating directory: %v\n", err) + return + } + + fmt.Println("Directory created successfully.") +} + +func DeleteFile(filePath string) error { + err := os.Remove(filePath) + if err != nil { + return fmt.Errorf("删除文件失败: %v", err) + } + return nil +} + +// 创建目录及其所有必要的父目录 +func MkdirAll(dir string) error { + err := os.MkdirAll(dir, 0755) + if err != nil { + return fmt.Errorf("failed to create directory: %w", err) + } + return nil +} + +// 移动文件或目录,如果`src`是目录且`recursive`为true,则递归移动 +func MoveFileOrDir(src, dst string, recursive bool) error { + stat, err := os.Stat(src) + if err != nil { + return fmt.Errorf("failed to stat source: %w", err) + } + + if stat.IsDir() { + if recursive { + // 自定义递归移动目录的逻辑 + return MoveDirectoryRecursively(src, dst) + } else { + return fmt.Errorf("source is a directory but recursive flag is not set") + } + } else { + // 确保目标目录存在 + dir := filepath.Dir(dst) + if err = MkdirAll(dir); err != nil { + return err + } + // 移动文件 + // 检查目标目录是否存在 + dstDirInfo, err := os.Stat(dst) + if err != nil { + return fmt.Errorf("target directory does not exist: %s", err) + } + if dstDirInfo.IsDir() { + // 构建目标文件路径 + dst = filepath.Join(dst, filepath.Base(src)) + } + + // 注意:dst为目录时,windows下会报错 + // ,os.Rename函数用于重命名文件或目录。当你遇到invalid cross-device link错误时,这通常意味着你正在尝试在不同的文件系统之间移动(或重命名)一个文件或目录 + //err = os.Rename(src, dst) + err = CustomRename(src, dst) + if err != nil { + return fmt.Errorf("failed to move file: %w", err) + } + } + return nil +} + +// 递归移动目录 +func MoveDirectoryRecursively(srcDir, dstDir string) error { + entries, err := os.ReadDir(srcDir) + if err != nil { + return fmt.Errorf("failed to read directory: %w", err) + } + + for _, entry := range entries { + srcPath := filepath.Join(srcDir, entry.Name()) + dstPath := filepath.Join(dstDir, entry.Name()) + + if entry.IsDir() { + if err := os.MkdirAll(dstPath, 0755); err != nil { + return err + } + if err := MoveDirectoryRecursively(srcPath, dstPath); err != nil { + return err + } + } else { + if err := os.Rename(srcPath, dstPath); err != nil { + return err + } + } + } + + // 如果源目录为空,尝试删除它 + if err := os.Remove(srcDir); err != nil && !os.IsNotExist(err) { + return err + } + + return nil +} + +func CustomRename(src, dst string) error { + // 1. 检查源文件是否存在 + if _, err := os.Stat(src); os.IsNotExist(err) { + return fmt.Errorf("source file does not exist: %s", src) + } + + // 2. 检查目标文件或目录是否已存在 + if _, err := os.Stat(dst); !os.IsNotExist(err) { + // 如果目标已存在,删除它 + if err := os.Remove(dst); err != nil { + return fmt.Errorf("failed to remove existing target: %s", err) + } + } + + // 3. 复制源文件内容到目标 + sf, err := os.Open(src) + if err != nil { + return fmt.Errorf("failed to open source file: %s", err) + } + + df, err := os.Create(dst) + if err != nil { + return fmt.Errorf("failed to create destination file: %s", err) + } + + if _, err := io.Copy(df, sf); err != nil { + return fmt.Errorf("failed to copy file content: %s", err) + } + + defer func() { + sf.Close() + df.Close() + // 4. 删除源文件(非原子性操作,可能存在并发风险) + if err := os.Remove(src); err != nil { + + } + }() + + return nil +} + +func Del(path string) error { + if _, err := os.Stat(path); os.IsNotExist(err) { + return nil // 文件或目录不存在,直接返回 + } + + if isDir := filepath.IsAbs(path); isDir { + err := filepath.Walk(path, func(p string, info os.FileInfo, err error) error { + if err != nil { + return err + } + return os.Remove(p) + }) + if err != nil && err != filepath.SkipDir { + return fmt.Errorf("failed to delete directory: %w", err) + } + } else { + err := os.Remove(path) + if err != nil { + return fmt.Errorf("failed to delete file: %w", err) + } + } + + return nil +} + +func Clean(directory string) bool { + if directory == "" { + return true + } + + info, err := os.Stat(directory) + if err != nil || !info.IsDir() { + return true + } + + err = filepath.Walk(directory, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil // Skip directories, as they will be removed recursively + } + return Del(path) + }) + if err != nil { + return false + } + return true +} + +const ( + ByteUnit = 1 << (10 * iota) + KiloByte + MegaByte + GigaByte +) + +var ( + UnitNames = []string{"B", "KB", "MB", "GB"} +) + +func ReadableFileSize(filename string) string { + size, err := getFileSize(filename) + if err != nil { + return "0" + } + + if size <= 0 { + return "0" + } + + digitGroups := int(math.Min(float64(len(UnitNames)-1), math.Floor(math.Log(float64(size))/math.Log(1024)))) + value := float64(size) / math.Pow(1024, float64(digitGroups)) + + formattedValue := strconv.FormatFloat(value, 'f', -1, 64) + formattedValue = formattedValue[:len(formattedValue)-2] // Remove the last two digits after decimal point + + return formattedValue + " " + UnitNames[digitGroups] +} + +func getFileSize(filename string) (int64, error) { + info, err := os.Stat(filename) + if err != nil { + return 0, err + } + return info.Size(), nil +} diff --git a/server/internal/pkg/utils/id.go b/server/internal/pkg/utils/id.go new file mode 100644 index 0000000..9e0666f --- /dev/null +++ b/server/internal/pkg/utils/id.go @@ -0,0 +1,32 @@ +package utils + +import ( + "github.com/segmentio/ksuid" +) + +const ( + shortIDLen = 12 + longIDlen = 16 +) + +const ( + agentID = "AID-" +) + +func newId(prefix string, len int) string { + uuid := ksuid.New() + return prefix + uuid.String()[:len] +} + +// newShortID generate short uuid and add type prefix +func newShortID(prefix string) string { + return newId(prefix, shortIDLen) +} + +// newLongID generate long uuid and add type prefix +func newLongID(prefix string) string { + return newId(prefix, longIDlen) +} +func NewAgentID() string { + return newShortID(agentID) +} diff --git a/server/internal/pkg/utils/osInfo.go b/server/internal/pkg/utils/osInfo.go new file mode 100644 index 0000000..e1181e9 --- /dev/null +++ b/server/internal/pkg/utils/osInfo.go @@ -0,0 +1,35 @@ +package utils + +import ( + "runtime" +) + +// OSInfo 表示操作系统信息的简单结构体 +type OSInfo struct { + Name string + IsUnix bool + IsLinux bool + IsWindows bool + IsMac bool +} + +// GetOSInfo 获取操作系统信息 +func GetOSInfo() OSInfo { + var info OSInfo + info.Name = runtime.GOOS + + switch info.Name { + case "linux": + info.IsUnix = true + info.IsLinux = true + case "darwin": + info.IsUnix = true + info.IsMac = true + case "windows": + info.IsWindows = true + default: + info.Name = "Unknown" + } + + return info +} diff --git a/server/internal/pkg/utils/rand/rand.go b/server/internal/pkg/utils/rand/rand.go new file mode 100644 index 0000000..45ed47f --- /dev/null +++ b/server/internal/pkg/utils/rand/rand.go @@ -0,0 +1,37 @@ +package rand + +import ( + "math/rand" + "time" +) + +const ( + KC_RAND_KIND_NUM = 0 // 纯数字 + KC_RAND_KIND_LOWER = 1 // 小写字母 + KC_RAND_KIND_UPPER = 2 // 大写字母 + KC_RAND_KIND_ALL = 3 // 数字、大小写字母 +) + +func Krand(size int, kind int) []byte { + ikind, kinds, result := kind, [][]int{{10, 48}, {26, 97}, {26, 65}}, make([]byte, size) + is_all := kind > 2 || kind < 0 + rand.Seed(time.Now().UnixNano()) + for i := 0; i < size; i++ { + if is_all { // random ikind + ikind = rand.Intn(3) + } + scope, base := kinds[ikind][0], kinds[ikind][1] + result[i] = uint8(base + rand.Intn(scope)) + } + return result +} + +var letterRunes = []rune("abcdefghijklmnopqrstuvwxyz") + +func RandString(n int) string { + b := make([]rune, n) + for i := range b { + b[i] = letterRunes[rand.Intn(len(letterRunes))] + } + return string(b) +} diff --git a/server/internal/pkg/utils/string_utils/string_utils.go b/server/internal/pkg/utils/string_utils/string_utils.go new file mode 100644 index 0000000..73d1ef5 --- /dev/null +++ b/server/internal/pkg/utils/string_utils/string_utils.go @@ -0,0 +1,47 @@ +package string_utils + +import ( + "fmt" + "github.com/robfig/cron/v3" +) + +func RemoveDuplicates(res []string) []string { + uniqueStrings := make(map[string]bool) // 创建一个映射来存储已遇到的字符串 + result := []string{} // 初始化一个新的切片用于存放不重复的字符串 + + for _, s := range res { + if _, found := uniqueStrings[s]; !found { // 如果字符串不在映射中 + uniqueStrings[s] = true // 将字符串添加到映射中 + result = append(result, s) // 并将其添加到结果切片 + } + } + + return result +} + +// DefaultIfBlank 检查字符串是否为空,如果为空则返回默认字符串,否则返回原字符串。 +func DefaultIfBlank(str string, defaultStr string) string { + if str == "" { + return defaultStr + } + return str +} + +// CheckCron 验证 cron 表达式 +func CheckCron(cronStr string) error { + if len(cronStr) == 0 { + return nil + } + + if cronStr[0] == '!' { + // 不用验证 + return nil + } + + parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Second) + _, err := parser.Parse(cronStr) + if err != nil { + return fmt.Errorf("无效的 cron 表达式: %w", err) + } + return nil +} diff --git a/server/internal/pkg/utils/utils.go b/server/internal/pkg/utils/utils.go new file mode 100644 index 0000000..1cd8331 --- /dev/null +++ b/server/internal/pkg/utils/utils.go @@ -0,0 +1,206 @@ +package utils + +import ( + "database/sql/driver" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/utils/file_utils" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/utils" + "github.com/google/uuid" + "os" + "path/filepath" + "regexp" + "strings" + "time" +) + +type FormatDate struct { + time.Time +} + +const ( + timeFormat = "2006-01-02 15:04:05" +) + +func (t FormatDate) MarshalJSON() ([]byte, error) { + if &t == nil || t.IsZero() { + return []byte("null"), nil + } + return []byte(fmt.Sprintf("\"%s\"", t.Format(timeFormat))), nil +} + +func (t FormatDate) Value() (driver.Value, error) { + var zeroTime time.Time + if t.Time.UnixNano() == zeroTime.UnixNano() { + return nil, nil + } + return t.Time, nil +} + +func (t *FormatDate) Scan(v interface{}) error { + if value, ok := v.(time.Time); ok { + *t = FormatDate{value} + return nil + } + return fmt.Errorf("can not convert %v to timestamp", v) +} + +func (t *FormatDate) String() string { + if t == nil || t.IsZero() { + return "" + } + return fmt.Sprintf("%s", t.Time.Format(timeFormat)) +} + +func (t *FormatDate) UnmarshalJSON(data []byte) error { + str := string(data) + if str == "null" { + return nil + } + t1, err := time.ParseInLocation(timeFormat, strings.Trim(str, "\""), time.Local) + *t = FormatDate{t1} + return err +} + +func StringToBool(s string) bool { + switch s { + case "0", "false": + return false + case "1", "true": + return true + default: + return false + } +} + +func BoolToString(b bool) string { + if b { + return "true" + } + return "false" +} + +// GetRunPath 获取执行目录作为默认目录 +func GetRunPath() string { + currentPath, err := os.Getwd() + if err != nil { + return "" + } + return currentPath +} + +// GetCurrentAbPathByExecutable 获取当前执行文件绝对路径 +func GetCurrentAbPathByExecutable() (string, error) { + exePath, err := os.Executable() + if err != nil { + return "", err + } + res, _ := filepath.EvalSymlinks(exePath) + return filepath.Dir(res), nil +} + +// GetDataPath 获取当前执行文件路径,如果是临时目录则获取运行命令的工作目录 +func GetDataPath() (dir string, err error) { + path, err := utils.GetCurrentPath() + + if err != nil { + path = utils.GetRunPath() + } + dataPath := filepath.Join(path, "data") + + isDir, err := file_utils.IsDirectory(dataPath) + if err != nil || isDir == false { + err = os.MkdirAll(dataPath, 0755) + if err != nil { + return "", err + } + } + + return dataPath, nil + +} + +func GetUserTempPath(userId string) (string, error) { + path, err := GetFixedTempPathName() + if err != nil { + return "", err + } + + joinPath := filepath.Join(path, userId) + return joinPath, nil +} + +// 获取临时文件存储路径 +func GetFixedTempPathName() (string, error) { + tempPath, err := getTempPath() + if err != nil { + return "", err + } + return filepath.Abs(tempPath) +} + +// 获取临时文件存储路径 +func GetTempPathName() (string, error) { + tempPath, err := getTempPath() + if err != nil { + return "", err + } + // 生成随机的一个文件夹、避免同一个节点分发同一个文件,mv 失败 + tempPath = filepath.Join(tempPath, uuid.New().String()) + return filepath.Abs(tempPath) +} + +// 获取临时文件存储路径 +func getTempPath() (string, error) { + basePath, err := utils.GetDefaultPath() + if err != nil { + return "", err + } + timestamp := time.Now().Format("2006-01-02") + path := filepath.Join(basePath, timestamp) + if err := os.MkdirAll(path, 0755); err != nil { + return "", err + } + return path, nil +} + +// 清理临时文件存储目录: +// 将basePath目录下所有格式为2006-01-02格式文件夹,并删除超过 30 天的所有文件夹 +func CleanTempPath() { + basePath, err := utils.GetDefaultPath() + if err != nil { + return + } + + // 获取basePath目录下,所有格式为2006-01-02格式文件夹 + // 匹配 YYYY-MM-DD 格式的文件夹 + datePattern := regexp.MustCompile(`^\d{4}-\d{2}-\d{2}$`) + now := time.Now() + filepath.Walk(basePath, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + // 只处理目录 + if !info.IsDir() { + return nil + } + + // 检查文件夹名是否匹配日期格式 + if datePattern.MatchString(info.Name()) { + // 尝试解析文件夹名以确认它是一个有效的日期 + if past, err := time.Parse("2006-01-02", info.Name()); err == nil { + diff := now.Sub(past) + diffDays := diff.Hours() / 24 + + if diffDays >= 30 { + log.Info("删除临时文件夹: %s", path) + os.RemoveAll(path) + } + } + } + + return nil + }) + +} diff --git a/server/internal/pkg/utils/utils_test.go b/server/internal/pkg/utils/utils_test.go new file mode 100644 index 0000000..a299523 --- /dev/null +++ b/server/internal/pkg/utils/utils_test.go @@ -0,0 +1,7 @@ +package utils + +import "testing" + +func TestCleanTempPath(t *testing.T) { + CleanTempPath() +} diff --git a/server/internal/pkg/xxl_job/core.go b/server/internal/pkg/xxl_job/core.go new file mode 100644 index 0000000..f879c78 --- /dev/null +++ b/server/internal/pkg/xxl_job/core.go @@ -0,0 +1,314 @@ +package xxl_job + +import ( + "encoding/json" + "fmt" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/pkg/log" + "github.com/go-resty/resty/v2" + "net/http" + "strconv" + "strings" + "time" +) + +const ( + // xxl + contentType = "application/x-www-form-urlencoded" + xxlLogin = "/login" + xxlAdd = "/jobinfo/add" + xxlUpdate = "/jobinfo/update" + xxlRemove = "/jobinfo/remove" + // 2.0 之后 start + xxlStart = "/jobinfo/start" + // 2.0 之后stop + xxlStop = "/jobinfo/stop" + xxlPageList = "/jobinfo/pageList" + xxlGetJobCode = "/jobcode?jobId=" + xxlSaveJobCode = "/jobcode/save" +) + +// 新增调度任务,返回任务的Id +func ListIdByJobDesc(taskVO XxlJobBaseInfo, start, length string) (bool, []XxlJobInfo) { + // 登录 + cookies := login() + if cookies == nil { + return false, nil + } + + jobGroup, _ := getJobGroupInt(cookies) + + // 查询任务 + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second).R(). + SetCookies(cookies). + SetQueryParam("jobGroup", jobGroup). + SetQueryParam("jobDesc", taskVO.JobDesc). + SetQueryParam("triggerStatus", "0"). + SetQueryParam("executorHandler", taskVO.ExecutorHandler). + SetQueryParam("author", "cfn-schedule"). + SetQueryParam("start", start). + SetQueryParam("length", length). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlPageList)) + if err != nil { + log.Errorf("查询任务异常:%s", err) + return false, nil + } + // 反序列化 + var pageListDisabled PageList + err = json.Unmarshal(resp.Body(), &pageListDisabled) + + // 查询任务 + resp, err = resty.New().SetTimeout(time.Duration(5)*time.Second).R(). + SetCookies(cookies). + SetQueryParam("jobGroup", jobGroup). + SetQueryParam("jobDesc", taskVO.JobDesc). + SetQueryParam("triggerStatus", "1"). + SetQueryParam("executorHandler", taskVO.ExecutorHandler). + SetQueryParam("author", "cfn-schedule"). + SetQueryParam("start", start). + SetQueryParam("length", length). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlPageList)) + if err != nil { + log.Errorf("查询任务异常:%s", err) + return false, nil + } + // 反序列化 + var pageListEnable PageList + err = json.Unmarshal(resp.Body(), &pageListEnable) + + var data = make([]XxlJobInfo, 0) + + if err != nil || pageListDisabled.Data == nil || pageListDisabled.RecordsTotal == 0 { + + } else { + data = pageListDisabled.Data + } + + if err != nil || pageListEnable.Data == nil || pageListEnable.RecordsTotal == 0 { + + } else { + data = append(data, pageListEnable.Data...) + } + + return true, data +} + +// 新增调度任务,返回任务的Id +func Add(taskVO XxlJobBaseInfo) (bool, string) { + // 登录 + cookies := login() + if cookies == nil { + return false, "登录失败,请重试" + } + + // 新增任务 + request := getRequest(cookies, taskVO) + resp, err := request.Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlAdd)) + if err != nil { + log.Errorf("新增异常:%s", err) + return false, "添加任务异常" + } + // 反序列化 + var respVO RespVO + err = json.Unmarshal(resp.Body(), &respVO) + if err != nil { + log.Errorf("新增异常:%s", err) + return false, "添加任务异常" + } + if respVO.Code == 200 { + // 2.0 之后 Content 返回的主键,之前的没有 + if respVO.Content == "" { + // 获取主键 + ok, pageListData := ListIdByJobDesc(taskVO, "0", "1") + if !ok { + return false, "查询任务数据失败" + } + data := pageListData[0] + return true, strconv.Itoa(data.ID) + } + return true, respVO.Content + } + return false, respVO.Msg +} + +// 修改调度任务 +func Modify(taskVO XxlJobBaseInfo) (bool, string) { + // 登录 + cookies := login() + if cookies == nil || len(cookies) == 0 { + return false, "登录失败,请重试" + } + // 修改任务 + resp, err := getRequest(cookies, taskVO).Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlUpdate)) + if err != nil { + log.Errorf("修改任务异常:%s", err) + return false, "修改任务异常" + } + // 反序列化 + var respVO RespVO + err = json.Unmarshal(resp.Body(), &respVO) + if err != nil { + log.Errorf("修改任务异常:%s", err) + return false, "修改任务异常" + } + return respVO.Code == 200, respVO.Msg +} + +// 删除调度任务 +func Delete(id string) (bool, string) { + // 登录 + cookies := login() + if cookies == nil { + return false, "登录失败,请重试" + } + // 新增任务 + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetCookies(cookies). + SetHeader("Content-Type", contentType). + SetQueryParam("id", id). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlRemove)) + if err != nil { + log.Errorf("删除任务异常:%s", err) + return false, "删除任务异常" + } + // 反序列化 + var respVO RespVO + err = json.Unmarshal(resp.Body(), &respVO) + if err != nil { + log.Errorf("删除任务异常:%s", err) + return false, "删除任务异常" + } + return respVO.Code == 200, respVO.Msg +} + +// 启用度任务 +func Enable(id string) (bool, string) { + // 登录 + cookies := login() + if cookies == nil { + return false, "登录失败,请重试" + } + // 启动任务 + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetCookies(cookies). + SetHeader("Content-Type", contentType). + SetQueryParam("id", id). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlStart)) + if err != nil { + log.Errorf("启用任务异常:%s", err) + return false, "启动任务异常" + } + // 反序列化 + var respVO RespVO + err = json.Unmarshal(resp.Body(), &respVO) + if err != nil { + log.Errorf("启用任务异常:%s", err) + return false, "启动任务异常" + } + return respVO.Code == 200, "启动成功" +} + +// 禁用调度任务 +func Disabled(id string) (bool, string) { + // 登录 + cookies := login() + if cookies == nil { + return false, "登录失败,请重试" + } + // 禁用任务 + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetCookies(cookies). + SetHeader("Content-Type", contentType). + SetQueryParam("id", id). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Token, xxlStop)) + if err != nil { + log.Errorf("禁用任务异常:%s", err) + return false, "禁用任务异常" + } + // 反序列化 + var respVO RespVO + err = json.Unmarshal(resp.Body(), &respVO) + if err != nil { + log.Errorf("禁用任务异常:%s", err) + return false, "禁用任务异常" + } + return respVO.Code == 200, "禁用成功" +} + +// 登录xxl, 可以新增缓存 +func login() []*http.Cookie { + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetHeader("Content-Type", contentType). + SetQueryParam("userName", "admin"). + SetQueryParam("password", "123456Wp!@#"). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, xxlLogin)) + + //request.Header.Set("Content-Type", "application/json;charset=UTF-8") + //request.Header.Set("XXL-JOB-ACCESS-TOKEN", e.opts.AccessToken) + if err != nil { + log.Errorf("登录异常:%s", err) + return nil + } + return resp.Cookies() +} + +func getJobGroupInt(cookies []*http.Cookie) (string, error) { + resp, err := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetCookies(cookies). + SetHeader("Content-Type", contentType). + SetQueryParam("appname", "cfn-schedule"). + SetQueryParam("title", ""). + SetQueryParam("start", "0"). + SetQueryParam("length", "10"). + Post(fmt.Sprintf("%s%s", config.Config.XxlJob.Url, "/jobgroup/pageList")) + if err != nil { + log.Errorf("登录异常:%s", err) + return "", err + } + + // 反序列化 + var res XxlJobGroupList + err = json.Unmarshal(resp.Body(), &res) + id := res.Data[0].ID + return strconv.Itoa(id), nil +} + +// 获取新增、修改请求的参数 +func getRequest(cookies []*http.Cookie, taskVO XxlJobBaseInfo) *resty.Request { + jobGroup, _ := getJobGroupInt(cookies) + + request := resty.New().SetTimeout(time.Duration(5)*time.Second). + R(). + SetCookies(cookies). + SetHeader("Content-Type", contentType). + SetQueryParam("jobGroup", jobGroup). + SetQueryParam("jobDesc", taskVO.JobDesc). + SetQueryParam("executorRouteStrategy", "FIRST"). + SetQueryParam("cronGen_display", taskVO.JobCron). + SetQueryParam("jobCron", taskVO.JobCron). + SetQueryParam("scheduleConf", taskVO.JobCron). + SetQueryParam("scheduleType", "CRON"). + SetQueryParam("glueType", "BEAN"). + SetQueryParam("executorHandler", taskVO.ExecutorHandler). + SetQueryParam("executorBlockStrategy", "SERIAL_EXECUTION"). + SetQueryParam("executorFailStrategy", "FAIL_ALARM"). + SetQueryParam("childJobId", ""). + SetQueryParam("executorTimeout", "0"). + SetQueryParam("misfireStrategy", "DO_NOTHING"). + SetQueryParam("executorFailRetryCount", "0"). + SetQueryParam("author", "cfn-schedule"). + SetQueryParam("alarmEmail", "txxx@inspur.com"). + SetQueryParam("executorParam", ""). + SetQueryParam("glueRemark", "GLUE代码") + + if len(strings.TrimSpace(taskVO.Id)) > 0 { + request.SetQueryParam("id", taskVO.Id) + } + + return request +} diff --git a/server/internal/pkg/xxl_job/resp.go b/server/internal/pkg/xxl_job/resp.go new file mode 100644 index 0000000..39f1f85 --- /dev/null +++ b/server/internal/pkg/xxl_job/resp.go @@ -0,0 +1,7 @@ +package xxl_job + +type RespVO struct { + Code int `json:"code"` + Msg string `json:"msg"` + Content string `json:"content"` +} diff --git a/server/internal/pkg/xxl_job/xxl_job_base_info.go b/server/internal/pkg/xxl_job/xxl_job_base_info.go new file mode 100644 index 0000000..678495c --- /dev/null +++ b/server/internal/pkg/xxl_job/xxl_job_base_info.go @@ -0,0 +1,9 @@ +package xxl_job + +// 新增/修改参数 https://blog.csdn.net/qq_38428623/article/details/126178834 +type XxlJobBaseInfo struct { + Id string `json:"id"` + JobDesc string `json:"jobDesc"` + JobCron string `json:"jobCron"` + ExecutorHandler string `json:"executorHandler"` +} diff --git a/server/internal/pkg/xxl_job/xxl_job_group_list.go b/server/internal/pkg/xxl_job/xxl_job_group_list.go new file mode 100644 index 0000000..cb86d90 --- /dev/null +++ b/server/internal/pkg/xxl_job/xxl_job_group_list.go @@ -0,0 +1,29 @@ +package xxl_job + +import "encoding/json" + +func UnmarshalXxlJobGroupList(data []byte) (XxlJobGroupList, error) { + var r XxlJobGroupList + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *XxlJobGroupList) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +type XxlJobGroupList struct { + Data []Datum `json:"data"` + RecordsFiltered int `json:"recordsFiltered"` + RecordsTotal int `json:"recordsTotal"` +} + +type Datum struct { + AddressList string `json:"addressList,omitempty"` + AddressType int `json:"addressType,omitempty"` + Appname string `json:"appname,omitempty"` + ID int `json:"id,omitempty"` + RegistryList []string `json:"registryList,omitempty"` + Title string `json:"title,omitempty"` + UpdateTime string `json:"updateTime,omitempty"` +} diff --git a/server/internal/pkg/xxl_job/xxl_job_info_page_list.go b/server/internal/pkg/xxl_job/xxl_job_info_page_list.go new file mode 100644 index 0000000..dbaeac4 --- /dev/null +++ b/server/internal/pkg/xxl_job/xxl_job_info_page_list.go @@ -0,0 +1,35 @@ +package xxl_job + +import "time" + +// 分页查询 +type PageList struct { + RecordsFiltered int `json:"recordsFiltered"` + Data []XxlJobInfo `json:"data"` + RecordsTotal int `json:"recordsTotal"` +} + +// 业务数据 +type XxlJobInfo struct { + ID int `json:"id"` + JobGroup int `json:"jobGroup"` + ScheduleConf string `json:"scheduleConf"` + JobDesc string `json:"jobDesc"` + AddTime time.Time `json:"addTime"` + UpdateTime time.Time `json:"updateTime"` + Author string `json:"author"` + AlarmEmail string `json:"alarmEmail"` + MisfireStrategy string `json:"misfireStrategy"` + + ExecutorRouteStrategy string `json:"executorRouteStrategy"` + ExecutorHandler string `json:"executorHandler"` + ExecutorParam string `json:"executorParam"` + ExecutorBlockStrategy string `json:"executorBlockStrategy"` + ExecutorFailRetryCount int `json:"executorFailRetryCount"` + GlueType string `json:"glueType"` + GlueSource string `json:"glueSource"` + GlueRemark string `json:"glueRemark"` + GlueUpdatetime time.Time `json:"glueUpdatetime"` + ChildJobID string `json:"childJobId"` + TriggerStatus int `json:"triggerStatus"` +} diff --git a/server/internal/routers/api_router.go b/server/internal/routers/api_router.go new file mode 100644 index 0000000..a21388e --- /dev/null +++ b/server/internal/routers/api_router.go @@ -0,0 +1,263 @@ +package routers + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/data" + controllerV1 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/assets" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node/manage" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node/manage/file" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node/manage/log" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node/script" + nodeSystem "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/node/system" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/outgiving" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/server_script" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/controller/v1/app_manage/system" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/socket" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/socket/handler" + "github.com/gin-gonic/gin" +) + +func setApiRoute(r *gin.Engine) { + // version 1 + v1 := r.Group("/api/v1") + { + v1.POST("/login", controllerV1.Login) + v1.GET("/login-info", controllerV1.LoginInfo) + + v1.POST("/user/page", app_manage.PageUsers) + v1.GET("/user/workspace", app_manage.GetUserWorkSpace) + v1.PUT("/user/workspace", app_manage.EditUserWorkSpace) + + //v1.POST("/login", controllerV1.Login) + v1.GET("/hello-world", controllerV1.HelloWorld) + v1.POST("/device/check-health", controllerV1.CheckHeartBeat) + v1.POST("/device/push-baseinfo", controllerV1.PushDeviceInfo) + v1.POST("/device/page-devices", controllerV1.PageDevices) + v1.GET("/device/count-upgrade", controllerV1.CountDeviceUpgrade) + v1.GET("/device/:serialNo", controllerV1.GetDeviceInfo) + v1.GET("/device/:serialNo/configs", controllerV1.ListDeviceConfigs) + + v1.POST("/device/create-record", controllerV1.CreateDeviceUpgradeRecord) + v1.POST("/device/:serialNo/upgrade-record", controllerV1.PageDeviceUpgradeRecord) + v1.POST("/device/:serialNo/upgrade", controllerV1.DoDeviceUpgrade) + v1.POST("/device/create-rule", controllerV1.CreateDeviceUpgradeRule) + v1.POST("/device/page-rules", controllerV1.PageDeviceUpgradeRule) + v1.DELETE("/device/delete-rule", controllerV1.DeleteDeviceUpgradeRule) + + v1.GET("/agent/list-lastversion", controllerV1.ListLastVersion) + v1.POST("/agent/release", controllerV1.Release) + v1.POST("/agent/page-versions", controllerV1.PageVersions) + + v1.POST("/metric/create-rule", controllerV1.CreateMetricRule) + v1.POST("/metric/edit-rule", controllerV1.EditMetricRule) + v1.GET("/metric/:ruleNo", controllerV1.GetMetricRule) + v1.GET("/metric/key/:ruleKey", controllerV1.GetMetricRuleByKey) + v1.POST("/metric/page", controllerV1.PageMetrics) + v1.DELETE("/metric/:ruleNo", controllerV1.DeleteMetric) + v1.DELETE("/metric/delete-batch", controllerV1.DeleteBatchMetric) + v1.GET("/metric/query", controllerV1.QueryMetric) + v1.POST("/metric/query", controllerV1.QueryMetric) + v1.POST("/metric/query/process", controllerV1.QueryProcessMetric) + v1.GET("/metric/query/process-list/:rid", controllerV1.QueryProcessListMetric) + + v1.GET("/minio/download/:filename", controllerV1.GetPresignedUrl) + v1.GET("/minio/post-upload/:filename", controllerV1.PostPresignedUrl) + v1.GET("/minio/put-upload/:filename", controllerV1.PutPresignedUrl) + v1.POST("/minio/upload", controllerV1.UploadFile) + + v1.GET("/sched/rule/:id", controllerV1.GetSchedRule) + v1.GET("/sched/statistic-rule", controllerV1.StatisticSchedRule) + v1.POST("/sched/create-rule", controllerV1.CreateSchedRule) + v1.PUT("/sched/edit-rule", controllerV1.EditSchedRule) + v1.POST("/sched/page-rules", controllerV1.PageSchedRules) + v1.DELETE("/sched/delete-batch", controllerV1.DeleteSchedRules) + v1.POST("/sched/rule/:id/:option", controllerV1.DoSchedRule) + v1.POST("/sched/page-tasks", controllerV1.PageSchedTasks) + v1.POST("/sched/excel-tasks", controllerV1.ExportSchedTasks) + v1.GET("/sched/task/:id", controllerV1.GetSchedTask) + v1.GET("/sched/task-event/:eventId", controllerV1.GetSchedTaskByEvent) + v1.POST("/sched/task-event/:eventId/trigger", controllerV1.TriggerSchedTask) + v1.POST("/sched/task-event/user-manual/trigger", controllerV1.TriggerSchedTask_UserManual) + v1.POST("/sched/task/:taskId/callback", controllerV1.TaskCallBack) + v1.GET("/sched/task/count-status", controllerV1.CountTaskStatus) + v1.GET("/sched/task/auto-ratio", controllerV1.AutoRatio) + + v1.GET("/logs/:serialNo/:comType", controllerV1.GetDeviceLogs) + + v1.POST("/event", controllerV1.CreateEvent) + v1.PUT("/event", controllerV1.EditEvent) + v1.GET("/event/:eventId", controllerV1.GetEventById) + v1.GET("/event/name/:eventName", controllerV1.GetEventByName) + v1.POST("/event/page", controllerV1.PageEvents) + v1.DELETE("/event/:eventId", controllerV1.DeleteEvent) + v1.POST("/event/threshold/sync", controllerV1.SyncEventFromThreshold) + + v1.POST("/event-record/statistic", controllerV1.EventRecordsStatistic) + v1.GET("/event-record/:eventId", controllerV1.GetEventRecordById) + v1.POST("/event-record/page", controllerV1.PageEventRecords) + v1.POST("/event-record/export", controllerV1.ExportEventRecords) + + v1.POST("/history-event-record/statistic", controllerV1.HistoryEventRecordsStatistic) + v1.GET("/history-event-record/:eventId", controllerV1.GetHistoryEventRecordById) + v1.POST("/history-event-record/page", controllerV1.PageHistoryEventRecords) + v1.POST("/history-event-record/export", controllerV1.ExportHistoryEventRecords) + + v1.GET("/statistic/device/online", controllerV1.GetDeviceOnlineStatistic) + v1.GET("/statistic/device/usage-rate", controllerV1.GetDeviceUsageRate) + v1.GET("/statistic/device/:serialNo/run-time", controllerV1.GetDeviceRunTime) + v1.GET("/statistic/device/:serialNo/operate_log", controllerV1.GetDeviceOperateLog) + v1.GET("/statistic/device/:serialNo/boot-count", controllerV1.GetDeviceBootCount) + v1.GET("/statistic/device/run-time", controllerV1.GetAllDeviceRunTime) + + // 适配算网 + v1.GET("/node/serialno", app_manage.GetNodeBySerialNo) + v1.GET("/node/random_ports", app_manage.GetRandomPorts) + + // controller.system.WorkspaceController + v1.POST("/system/workspace/list", system.PageWorkspaces) + v1.GET("/system/workspace/list-group", system.ListWorkSpaceGroup) + v1.GET("/system/workspace/list-all", system.ListAllWorkspaces) + v1.POST("/system/workspace/edit", system.EditWorkspace) + v1.GET("/system/workspace/pre_check_delete", system.PreCheckDelete) + v1.DELETE("/system/workspace/:id", system.DeleteWorkspace) + + // controller.system.WorkspaceEnvVarController 去掉了 /system/ 前缀 + v1.POST("/system/workspace_env/list", system.PageWorkspaceEnvs) + v1.POST("/system/workspace_env/edit", system.EditWorkspaceEnv) + v1.DELETE("/system/workspace_env", system.DeleteWorkspaceEnv) + + // controller.node.NodeEditController + v1.GET("/node/list-all", node.GetAllNodesByWorkspaceId) + v1.POST("/node/list", node.PageNodesByWorkspaceId) + v1.GET("/node/list-group", node.ListNodeGroup) + v1.POST("/node/edit", node.EditNode) + v1.DELETE("/node", node.DeleteNode) + v1.POST("/node/unbind", node.UnbindNode) + v1.GET("/node/sync-to-workspace", node.SyncToWorkspace) + v1.POST("/node/sort-item", node.SortItem) + + // controller.node.NodeUpdateController + v1.GET("/node/fast-install", node.FastInstallNode) + + // EditProjectController + v1.POST("/node/manage/getProjectData", manage.GetProjectData) + v1.POST("/node/manage/project-access-list", manage.ProjectAccessList) + v1.POST("/node/manage/saveProject", manage.SaveProject) + v1.POST("/node/manage/release-outgiving", manage.ReleaseOutgiving) + + // projectManageControl + v1.POST("/node/manage/getProjectPort", manage.GetProjectPort) + v1.POST("/node/manage/project_list", manage.PageProject) + v1.POST("/node/manage/deleteProject", manage.DeleteProject) + v1.POST("/node/manage/project/start", manage.StartProject) + v1.POST("/node/manage/project/stop", manage.StopProject) + v1.POST("/node/manage/project/restart", manage.RestartProject) + + // ProjectFileControl todo rename_file_folder + v1.POST("/node/manage/file/getFileList", file.GetFileList) + v1.GET("/node/manage/file/generate-sharding-id", file.GenerateShardingId) + v1.POST("/node/manage/file/upload-sharding", file.UploadSharding) + v1.POST("/node/manage/file/sharding-merge", file.ShardingMerge) + v1.POST("/node/manage/file/remote-download", file.RemoteDownload) + v1.POST("/node/manage/file/deleteFile", file.DeleteFile) + v1.GET("/node/manage/file/newFileFolder", file.NewFileFolder) + v1.GET("/node/manage/file/read_file", file.ReadFile) + v1.POST("/node/manage/file/update_config_file", file.UpdateConfigFile) + + // logBackController + v1.POST("/node/manage/log/log-size", log.LogSize) + + // nodeProjectInfoController + v1.GET("/node/list-project-group", node.ListProjectGroup) + v1.POST("/node/project_list", node.ProjectList) + v1.POST("/node/project_list_all", node.ProjectListAll) + v1.POST("/node/sync_project", node.SyncProject) + v1.GET("/node/clear_all_project", node.ClearAll) + + // func.assets.controller.MachineNodeController + v1.POST("/machine/page", assets.PageMachine) + v1.POST("/machine/edit", assets.EditMachine) + v1.POST("/machine/delete", assets.DeleteMachine) + v1.POST("/machine/distribute", assets.Distribute) + v1.GET("/machine/list-group", assets.ListMachineGroup) + v1.GET("/machine/list-template-node", assets.ListTemplateNode) + v1.POST("/machine/white-list", assets.Whitelist) + v1.POST("/machine/save-whitelist", assets.SaveWhitelist) + v1.POST("/machine/config-data", assets.ConfigData) + v1.POST("/machine/config", assets.SaveConfig) + + // WhitelistDirectoryController /node/system + v1.POST("/node/system/white-list", nodeSystem.WhiteList) + v1.POST("/node/system/whitelistDirectory_submit", nodeSystem.WhitelistDirectorySubmit) + + // node_script_controller + v1.POST("/node/script/list", script.ScriptList) + v1.POST("/node/script/list_all", script.ScriptListAll) + v1.POST("/node/script/save", script.Save) + v1.POST("/node/script/item", script.Item) + v1.POST("/node/script/del", script.Del) + v1.GET("/node/script/sync", script.SyncScript) + v1.POST("/node/script/clear_all", script.ClearAll) + v1.GET("/node/script/unbind", script.Unbind) + + // node_script_log_controller + v1.POST("/node/script_log/list", script.ScriptLogList) + v1.POST("/node/script_log/log", script.Log) + v1.POST("/node/script_log/del", script.DelLog) + + // controller.outgiving.OutGivingWhitelistController + v1.GET("/outgiving/white-list", outgiving.GetWhiteList) + v1.POST("/outgiving/white-list", outgiving.SaveWhiteList) + + // outGivingController + v1.POST("/outgiving/dispatch-list", outgiving.DispatchList) + v1.GET("/outgiving/dispatch-list-all", outgiving.DispatchListAll) + v1.POST("/outgiving/save", outgiving.SaveConnected) + v1.POST("/outgiving/release_del", outgiving.ReleaseDel) + v1.POST("/outgiving/unbind", outgiving.Unbind) + + // outGivingProjectEditController + v1.POST("/outgiving/save_project", outgiving.SavePorject) + v1.POST("/outgiving/delete_project", outgiving.DeletePorject) + + // outGivingLogController + v1.POST("/outgiving/log_list_data", outgiving.ListData) + v1.GET("/outgiving/exec_logs", outgiving.GetLogsIdByExecId) + + // outGivingProjectFileController + v1.POST("/outgiving/getItemData", outgiving.GetItemData) + v1.POST("/outgiving/upload_sharding", outgiving.UploadSharding) + v1.POST("/outgiving/upload_sharding_merge", outgiving.ShardingMerge) + v1.POST("/outgiving/remote_download", outgiving.RemoteDownload) + v1.POST("/outgiving/cancel", outgiving.Cancel) + + // script_controller + v1.POST("/script/list", server_script.ScriptList) + v1.GET("/script/list_all", server_script.ScriptListAll) + v1.POST("/script/save", server_script.Save) + v1.GET("/script/get", server_script.Get) + v1.POST("/script/del", server_script.Del) + v1.GET("/script/unbind", server_script.Unbind) + v1.GET("/script/sync_to_workspace", server_script.SyncToWorkspace) + + socketRoute := v1.Group("/socket") + { + // 应用WebSocket中间件到特定路由 + socketRoute.GET("/console", socket.WsHandshakeInterceptor, handler.ConsoleHandlerInterceptor) + socketRoute.GET("/node/script_run", socket.WsHandshakeInterceptor, handler.NodeScriptHandlerInterceptor) + } + + } + + if config.Config.CfnConfig.Enable { + //注册的gin的路由 + r.POST("run", gin.WrapF(data.Xxljob.RunTask)) + r.POST("kill", gin.WrapF(data.Xxljob.KillTask)) + r.POST("log", gin.WrapF(data.Xxljob.TaskLog)) + r.POST("beat", gin.WrapF(data.Xxljob.Beat)) + r.POST("idleBeat", gin.WrapF(data.Xxljob.IdleBeat)) + } +} diff --git a/server/internal/routers/router.go b/server/internal/routers/router.go new file mode 100644 index 0000000..acf5eac --- /dev/null +++ b/server/internal/routers/router.go @@ -0,0 +1,80 @@ +package routers + +import ( + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/config" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/middleware" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/errors" + response2 "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/pkg/response" + "git.inspur.com/sbg-jszt/cfn/cfn-schedule/internal/routers/vue" + "github.com/gin-gonic/gin" + "io/ioutil" + "net/http" +) + +func SetRouters() *gin.Engine { + var r *gin.Engine + + if config.Config.Debug == false { + // 生产模式 + r = ReleaseRouter() + r.Use( + middleware.AuthenticationHandler(), + middleware.RequestCostHandler(), + middleware.CustomLogger(), + middleware.CustomRecovery(), + middleware.CorsHandler(), + middleware.AppContextHandler(), + middleware.AuthorizationHandler(), + ) + } else { + // 开发调试模式 + r = gin.New() + r.Use( + //gin.Logger(), + middleware.AuthenticationHandler(), + middleware.RequestCostHandler(), + middleware.CustomLogger(), + middleware.CustomRecovery(), + middleware.CorsHandler(), + middleware.AppContextHandler(), + middleware.AuthorizationHandler(), + ) + } + //// set up trusted agents + //err := r.SetTrustedProxies([]string{"127.0.0.1"}) + //if err != nil { + // panic(err) + //} + + // ping + r.Any("/ping", func(c *gin.Context) { + c.AbortWithStatusJSON(http.StatusOK, gin.H{ + "message": "pong!", + }) + }) + + // 设置 API 路由 + setApiRoute(r) + + if config.Config.WebEmbed == true { + vue.AddVueRouter(r) + } else { + r.NoRoute(func(c *gin.Context) { + response2.Resp().SetHttpCode(http.StatusNotFound).FailCode(c, errors.NotFound) + }) + } + + return r +} + +// ReleaseRouter 生产模式使用官方建议设置为 release 模式 +func ReleaseRouter() *gin.Engine { + // 切换到生产模式 + gin.SetMode(gin.ReleaseMode) + // 禁用 gin 输出接口访问日志 + gin.DefaultWriter = ioutil.Discard + + engine := gin.New() + + return engine +} diff --git a/server/internal/routers/vue/static/dist/assets/images/asideNav.svg b/server/internal/routers/vue/static/dist/assets/images/asideNav.svg new file mode 100644 index 0000000..6a03a6d --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/images/asideNav.svg @@ -0,0 +1,40 @@ + + + + Group 5 Copy 5 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/assets/images/inms_logo.png b/server/internal/routers/vue/static/dist/assets/images/inms_logo.png new file mode 100644 index 0000000..e3feced Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/images/inms_logo.png differ diff --git a/server/internal/routers/vue/static/dist/assets/images/topNav.svg b/server/internal/routers/vue/static/dist/assets/images/topNav.svg new file mode 100644 index 0000000..3a5aef6 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/images/topNav.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/assets/images/user-login.png b/server/internal/routers/vue/static/dist/assets/images/user-login.png new file mode 100644 index 0000000..128ee02 Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/images/user-login.png differ diff --git a/server/internal/routers/vue/static/dist/assets/images/user-login1.png b/server/internal/routers/vue/static/dist/assets/images/user-login1.png new file mode 100644 index 0000000..8556a13 Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/images/user-login1.png differ diff --git a/server/internal/routers/vue/static/dist/assets/images/user-login2.png b/server/internal/routers/vue/static/dist/assets/images/user-login2.png new file mode 100644 index 0000000..a4fc18a Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/images/user-login2.png differ diff --git a/server/internal/routers/vue/static/dist/assets/images/user-login3.png b/server/internal/routers/vue/static/dist/assets/images/user-login3.png new file mode 100644 index 0000000..5b790a6 Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/images/user-login3.png differ diff --git a/server/internal/routers/vue/static/dist/assets/login/background.png b/server/internal/routers/vue/static/dist/assets/login/background.png new file mode 100644 index 0000000..c5fdfd6 Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/login/background.png differ diff --git a/server/internal/routers/vue/static/dist/assets/login/code.jpg b/server/internal/routers/vue/static/dist/assets/login/code.jpg new file mode 100644 index 0000000..cafc731 Binary files /dev/null and b/server/internal/routers/vue/static/dist/assets/login/code.jpg differ diff --git a/server/internal/routers/vue/static/dist/assets/login/password.svg b/server/internal/routers/vue/static/dist/assets/login/password.svg new file mode 100644 index 0000000..18d75b4 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/login/password.svg @@ -0,0 +1,11 @@ + + + + Imported Layers + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/assets/login/user-name.svg b/server/internal/routers/vue/static/dist/assets/login/user-name.svg new file mode 100644 index 0000000..454caea --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/login/user-name.svg @@ -0,0 +1,11 @@ + + + + Imported Layers + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/custom/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/custom/iconfont.js new file mode 100644 index 0000000..551751d --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/custom/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/dark-blue/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/dark-blue/iconfont.js new file mode 100644 index 0000000..427c008 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/dark-blue/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/dark-default/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/dark-default/iconfont.js new file mode 100644 index 0000000..f2f3247 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/dark-default/iconfont.js @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/dark-green/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/dark-green/iconfont.js new file mode 100644 index 0000000..0d8fc45 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/dark-green/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/dark-orange/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/dark-orange/iconfont.js new file mode 100644 index 0000000..c985bef --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/dark-orange/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/dark-red/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/dark-red/iconfont.js new file mode 100644 index 0000000..d70ab94 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/dark-red/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/light-blue/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/light-blue/iconfont.js new file mode 100644 index 0000000..40960c2 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/light-blue/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/light-default/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/light-default/iconfont.js new file mode 100644 index 0000000..b29b7d1 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/light-default/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/light-green/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/light-green/iconfont.js new file mode 100644 index 0000000..7d039cd --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/light-green/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/light-orange/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/light-orange/iconfont.js new file mode 100644 index 0000000..00fbfc9 --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/light-orange/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/assets/style-icon/light-red/iconfont.js b/server/internal/routers/vue/static/dist/assets/style-icon/light-red/iconfont.js new file mode 100644 index 0000000..1c358ac --- /dev/null +++ b/server/internal/routers/vue/static/dist/assets/style-icon/light-red/iconfont.js @@ -0,0 +1 @@ + diff --git a/server/internal/routers/vue/static/dist/config.js b/server/internal/routers/vue/static/dist/config.js new file mode 100644 index 0000000..c21edf9 --- /dev/null +++ b/server/internal/routers/vue/static/dist/config.js @@ -0,0 +1,36 @@ +{ + "SYSTEMCODE": "JPOM", + "SYSTEMNAME": "标准框架", + "VERSION": "1.0.0", + "BASE_URL": "/api", + "INDEX_URL": "/assets/machine-list", + "DOC_URL": null, + "SOCKET_URL": null, + "TIMEOUT": 50000, + "ISLOG": false, + "ISALARMDIC": false, + "SHOWLOCK": true, + "SHOWTAB": true, + "LOCKTIME": 30, + "ERRORLOG": false, + "ERRORSERVICE": false, + "SHOWMESSAGE": false, + "AUTHTYPE": 2, + "BUTTONPERM": true, + "defaultStyle":{ + "layout": "top", + "overallStyle": {"theme": "dark","subTheme":"light" }, + "primaryColor": { "color": "#409EFF", "name": "primary-default"}, + "tabStyle":{"isOpen":true,"tabStyle":"capsule-style"} + }, + "useUrlMap": true, + "urlMap": [ + { + "prefix": "/api/auth-external-microservice", + "port": "9081", + "pathRewrite": { + "/api":"" + } + } + ] +} diff --git a/server/internal/routers/vue/static/dist/css/app.ea1fb021.css b/server/internal/routers/vue/static/dist/css/app.ea1fb021.css new file mode 100644 index 0000000..15a75b5 --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/app.ea1fb021.css @@ -0,0 +1 @@ +.primary-t{background:#303133}.regular-t{background:#606266}.secondary-t{background:#909398}.primary-t{background:#c0c4cc}.Border-Base{background:#dcdfe6}.Border-Light{background:#e4e7ed}.Border-Lighter{background:#ebeef5}.Border-Extralight{background:#f2f6fc}.placeholder{background-color:#c0c4cc}.Background-B{background-color:#000;color:#fff}.Background-W{background-color:#fff;border:1px dashed #dcdfe6;color:#000}.lock-container[data-v-3d4ed791]{z-index:1001;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.lock-container[data-v-3d4ed791]:before{z-index:-999;content:"";position:absolute;left:0;top:0;width:100%;height:100%;background-image:url(../img/925c4d3b1235f7ec344ab3211f65a1b3.png);background-size:cover}.lock-form[data-v-3d4ed791]{width:360px}.verifyImg[data-v-3d4ed791]{width:95px;height:38px;cursor:pointer}.framework[data-v-0d7d287a]{width:100%;height:100vh}.lock-page[data-v-0d7d287a]{position:absolute;top:0;bottom:0;left:0;right:0}[data-v-0d7d287a] .displayNone{display:none}[data-v-0d7d287a] .el-cascader-menu__wrap{height:auto}body,html{margin:0;padding:0;height:100%;overflow:hidden}::-webkit-scrollbar{width:15px;height:15px}::-webkit-scrollbar-thumb{background:#959595;border-radius:10px;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background-color:#b9c6e0;border-radius:10px;background-clip:content-box}::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-thumb:vertical:hover{border:3px solid transparent;border-left:4px solid transparent}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:horizontal:hover{border:3px solid transparent;border-top:4px solid transparent}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-track:vertical{border-left:0 solid #424242}::-webkit-scrollbar-track:horizontal{border-top:0 solid #424242}::-webkit-scrollbar-corner{background-color:transparent}.fade-enter-active,.fade-leave-active{-webkit-transition:opacity .28s;transition:opacity .28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform-enter-active,.fade-transform-leave-active{-webkit-transition:all .5s;transition:all .5s}.fade-transform-enter{opacity:0;-webkit-transform:translateX(-30px);transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;-webkit-transform:translateX(30px);transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}.breadcrumb-move{-webkit-transition:all .5s;transition:all .5s}.breadcrumb-leave-active{position:absolute}.ivu-loading-bar[data-v-0602a50a]{width:100%;position:fixed;top:0;left:0;right:0;z-index:2000}.ivu-loading-bar-inner[data-v-0602a50a]{-webkit-transition:width .2s linear;transition:width .2s linear}.ivu-loading-bar-inner-color-primary[data-v-0602a50a]{background-color:#2d8cf0}.ivu-loading-bar-inner-failed-color-error[data-v-0602a50a]{background-color:#ed4014}.svg-icon[data-v-19904efa]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/css/chunk-2607ffe4.a1ff7a38.css b/server/internal/routers/vue/static/dist/css/chunk-2607ffe4.a1ff7a38.css new file mode 100644 index 0000000..f4ed779 --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/chunk-2607ffe4.a1ff7a38.css @@ -0,0 +1 @@ +.frame-body[data-v-4175330d]{height:100%;width:100%} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/css/chunk-53c1c9b8.7aedef3e.css b/server/internal/routers/vue/static/dist/css/chunk-53c1c9b8.7aedef3e.css new file mode 100644 index 0000000..d386ac9 --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/chunk-53c1c9b8.7aedef3e.css @@ -0,0 +1 @@ +.wscn-http404-container[data-v-59c85baa]{margin:0 auto}.wscn-http404[data-v-59c85baa]{margin-top:100px;position:relative;width:900px;padding:0 50px;overflow:hidden}.wscn-http404 .pic-404[data-v-59c85baa]{position:relative;float:left;width:600px;overflow:hidden}.wscn-http404 .pic-404__parent[data-v-59c85baa]{width:100%}.wscn-http404 .pic-404__child[data-v-59c85baa]{position:absolute}.wscn-http404 .pic-404__child.left[data-v-59c85baa]{width:80px;top:17px;left:220px;opacity:0;-webkit-animation-name:cloudLeft-59c85baa;animation-name:cloudLeft-59c85baa;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}.wscn-http404 .pic-404__child.mid[data-v-59c85baa]{width:46px;top:10px;left:420px;opacity:0;-webkit-animation-name:cloudMid-59c85baa;animation-name:cloudMid-59c85baa;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1.2s;animation-delay:1.2s}.wscn-http404 .pic-404__child.right[data-v-59c85baa]{width:62px;top:100px;left:500px;opacity:0;-webkit-animation-name:cloudRight-59c85baa;animation-name:cloudRight-59c85baa;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes cloudLeft-59c85baa{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@keyframes cloudLeft-59c85baa{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@-webkit-keyframes cloudMid-59c85baa{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@keyframes cloudMid-59c85baa{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@-webkit-keyframes cloudRight-59c85baa{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}@keyframes cloudRight-59c85baa{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}.wscn-http404 .bullshit[data-v-59c85baa]{position:relative;float:left;width:300px;padding:30px 0;overflow:hidden}.wscn-http404 .bullshit__oops[data-v-59c85baa]{font-size:32px;line-height:40px;color:#1482f0;margin-bottom:20px;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__headline[data-v-59c85baa],.wscn-http404 .bullshit__oops[data-v-59c85baa]{font-weight:700;opacity:0;-webkit-animation-name:slideUp-59c85baa;animation-name:slideUp-59c85baa;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__headline[data-v-59c85baa]{font-size:20px;line-height:24px;color:#222;margin-bottom:10px;-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-59c85baa]{line-height:21px;color:grey;margin-bottom:30px;-webkit-animation-delay:.2s;animation-delay:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-59c85baa],.wscn-http404 .bullshit__return-home[data-v-59c85baa]{font-size:14px;opacity:0;-webkit-animation-name:slideUp-59c85baa;animation-name:slideUp-59c85baa;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__return-home[data-v-59c85baa]{display:block;float:left;width:110px;height:36px;background:#1482f0;border-radius:100px;text-align:center;color:#fff;line-height:36px;cursor:pointer;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes slideUp-59c85baa{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes slideUp-59c85baa{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/css/chunk-5fa3659f.968c1d9a.css b/server/internal/routers/vue/static/dist/css/chunk-5fa3659f.968c1d9a.css new file mode 100644 index 0000000..391397d --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/chunk-5fa3659f.968c1d9a.css @@ -0,0 +1 @@ +.header-right[data-v-07e7e7d4],.top-menu[data-v-07e7e7d4]{display:-webkit-box;display:-ms-flexbox;display:flex}.top-menu[data-v-07e7e7d4]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.top-menu .logoImg[data-v-07e7e7d4]{max-width:100%;max-height:100%;margin-left:10px;vertical-align:middle}.title[data-v-07e7e7d4]{margin-left:1rem;font-family:MicrosoftYaHeiLight,微软雅黑 Light,微软雅黑,sans-serif;font-weight:200;line-height:50px;font-style:normal;font-size:18px;color:#fff;text-align:center;vertical-align:middle}[data-v-07e7e7d4] .el-menu--horizontal>.el-menu-item.is-active,[data-v-07e7e7d4] .el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border:0}[data-v-07e7e7d4] .el-menu--horizontal>.el-menu-item{font-size:12px;height:50px;line-height:50px}[data-v-07e7e7d4] .el-menu--horizontal>.el-submenu .el-submenu__title{height:50px;line-height:50px}[data-v-07e7e7d4] .el-submenu__title{font-size:12px} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/css/chunk-libs.a5962d9e.css b/server/internal/routers/vue/static/dist/css/chunk-libs.a5962d9e.css new file mode 100644 index 0000000..2e29419 --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/chunk-libs.a5962d9e.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.674f50d2.eot);src:url(../fonts/fontawesome-webfont.674f50d2.eot?#iefix&v=4.7.0) format("embedded-opentype"),url(../fonts/fontawesome-webfont.af7ae505.woff2) format("woff2"),url(../fonts/fontawesome-webfont.fee66e71.woff) format("woff"),url(../fonts/fontawesome-webfont.b06871f2.ttf) format("truetype"),url(../img/760bd83ee04dff470e0277f3eb7deebe.svg#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s linear infinite}.fa-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@use "sass:math";@font-face{font-family:element-icons;src:url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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5qkAAOapAAAABwAA5qoAAOaqAAAACAAA5qsAAOarAAAACQAA5qwAAOasAAAACgAA5q0AAOatAAAACwAA5q4AAOauAAAADAAA5q8AAOavAAAADQAA5rAAAOawAAAADgAA5rEAAOaxAAAADwAA5rIAAOayAAAAEAAA5rMAAOazAAAAEQAA5rQAAOa0AAAAEgAA5rUAAOa1AAAAEwAA5rYAAOa2AAAAFAAA5rgAAOa4AAAAFQAA5rkAAOa5AAAAFgAA5roAAOa6AAAAFwAA5rsAAOa7AAAAGAAA5rwAAOa8AAAAGQAA5r0AAOa9AAAAGgAA5r4AAOa+AAAAGwAA5r8AAOa/AAAAHAAA5sEAAObBAAAAHQAA5sIAAObCAAAAHgAA5sMAAObDAAAAHwAA5sQAAObEAAAAIAAA5sUAAObFAAAAIQAA5sYAAObGAAAAIgAA5scAAObHAAAAIwAA5sgAAObIAAAAJAAA5skAAObJAAAAJQAA5soAAObKAAAAJgAA5ssAAObLAAAAJwAA5swAAObMAAAAKAAA5s0AAObNAAAAKQAA5s4AAObOAAAAKgAA5s8AAObPAAAAKwAA5tAAAObQAAAALAAA5tEAAObRAAAALQAA5tIAAObSAAAALgAA5tMAAObTAAAALwAA5tQAAObUAAAAMAAA5tUAAObVAAAAMQAA5tYAAObWAAAAMgAA5tcAAObXAAAAMwAA5tgAAObYAAAANAAA5tkAAObZAAAANQAA5toAAObaAAAANgAA5tsAAObbAAAANwAA5twAAObcAAAAOAAA5t0AAObdAAAAOQAA5t4AAObeAAAAOgAA5t8AAObfAAAAOwAA5uAAAObgAAAAPAAA5uEAAObhAAAAPQAA5uIAAObiAAAAPgAA5uMAAObjAAAAPwAA5uQAAObkAAAAQAAA5uUAAOblAAAAQQAA5uYAAObmAAAAQgAA5ucAAObnAAAAQwAA5ugAAOboAAAARAAA5ukAAObpAAAARQAA5uoAAObqAAAARgAA5usAAObrAAAARwAA5uwAAObsAAAASAAA5u0AAObtAAAASQAA5u4AAObuAAAASgAA5vAAAObwAAAASwAA5vEAAObxAAAATAAA5vIAAObyAAAATQAA5vMAAObzAAAATgAA5vYAAOb2AAAATwAA5vcAAOb3AAAAUAAA5vgAAOb4AAAAUQAA5vkAAOb5AAAAUgAA5voAAOb6AAAAUwAA5vsAAOb7AAAAVAAA5vwAAOb8AAAAVQAA5v0AAOb9AAAAVgAA5v4AAOb+AAAAVwAA5v8AAOb/AAAAWAAA5wIAAOcCAAAAWQAA5wMAAOcDAAAAWgAA5wQAAOcEAAAAWwAA5wUAAOcFAAAAXAAA5wYAAOcGAAAAXQAA5wcAAOcHAAAAXgAA5wgAAOcIAAAAXwAA5wkAAOcJAAAAYAAA5woAAOcKAAAAYQAA5wsAAOcLAAAAYgAA5wwAAOcMAAAAYwAA5w0AAOcNAAAAZAAA5w4AAOcOAAAAZQAA5w8AAOcPAAAAZgAA5xAAAOcQAAAAZwAA5xEAAOcRAAAAaAAA5xIAAOcSAAAAaQAA5xMAAOcTAAAAagAA5xUAAOcVAAAAawAA5xYAAOcWAAAAbAAA5xcAAOcXAAAAbQAA5xgAAOcYAAAAbgAA5xkAAOcZAAAAbwAA5xsAAOcbAAAAcAAA5xwAAOccAAAAcQAA5x0AAOcdAAAAcgAA5x4AAOceAAAAcwAA5x8AAOcfAAAAdAAA5yAAAOcgAAAAdQAA5yIAAOciAAAAdgAA5yMAAOcjAAAAdwAA5yQAAOckAAAAeAAA5yUAAOclAAAAeQAA5yYAAOcmAAAAegAA5ycAAOcnAAAAewAA5ygAAOcoAAAAfAAA5ykAAOcpAAAAfQAA5yoAAOcqAAAAfgAA5ysAAOcrAAAAfwAA5y0AAOctAAAAgAAA5y4AAOcuAAAAgQAA5y8AAOcvAAAAggAA5zAAAOcwAAAAgwAA5zEAAOcxAAAAhAAA5zIAAOcyAAAAhQAA5zMAAOczAAAAhgAA5zQAAOc0AAAAhwAA5zUAAOc1AAAAiAAA5zYAAOc2AAAAiQAA5zcAAOc3AAAAigAA5zgAAOc4AAAAiwAA5zkAAOc5AAAAjAAA5zoAAOc6AAAAjQAA5zsAAOc7AAAAjgAA5zwAAOc8AAAAjwAA5z0AAOc9AAAAkAAA5z4AAOc+AAAAkQAA5z8AAOc/AAAAkgAA50AAAOdAAAAAkwAA50EAAOdBAAAAlAAA50QAAOdEAAAAlQAA50UAAOdFAAAAlgAA50cAAOdHAAAAlwAA50gAAOdIAAAAmAAA50kAAOdJAAAAmQAA50oAAOdKAAAAmgAA50sAAOdLAAAAmwAA50wAAOdMAAAAnAAA500AAOdNAAAAnQAA504AAOdOAAAAngAA508AAOdPAAAAnwAA51AAAOdQAAAAoAAA51EAAOdRAAAAoQAA51IAAOdSAAAAogAA51MAAOdTAAAAowAA51QAAOdUAAAApAAA51UAAOdVAAAApQAA51YAAOdWAAAApgAA51cAAOdXAAAApwAA51gAAOdYAAAAqAAA51kAAOdZAAAAqQAA51oAAOdaAAAAqgAA51sAAOdbAAAAqwAA51wAAOdcAAAArAAA510AAOddAAAArQAA514AAOdeAAAArgAA518AAOdfAAAArwAA52AAAOdgAAAAsAAA52EAAOdhAAAAsQAA52MAAOdjAAAAsgAA52QAAOdkAAAAswAA52UAAOdlAAAAtAAA52YAAOdmAAAAtQAA52cAAOdnAAAAtgAA52gAAOdoAAAAtwAA52kAAOdpAAAAuAAA52oAAOdqAAAAuQAA52sAAOdrAAAAugAA52wAAOdsAAAAuwAA520AAOdtAAAAvAAA524AAOduAAAAvQAA528AAOdvAAAAvgAA53AAAOdwAAAAvwAA53EAAOdxAAAAwAAA53IAAOdyAAAAwQAA53MAAOdzAAAAwgAA53QAAOd0AAAAwwAA53UAAOd1AAAAxAAA53YAAOd2AAAAxQAA53cAAOd3AAAAxgAA53gAAOd4AAAAxwAA53kAAOd5AAAAyAAA53oAAOd6AAAAyQAA53sAAOd7AAAAygAA53wAAOd8AAAAywAA530AAOd9AAAAzAAA534AAOd+AAAAzQAA538AAOd/AAAA1QAA54AAAOeAAAAA1gAA54EAAOeBAAAA1wAA54IAAOeCAAAAzgAA54MAAOeDAAAA2AAA54QAAOeEAAAA2QAA54UAAOeFAAAAzwAA54YAAOeGAAAA0AAA54cAAOeHAAAA0QAA54gAAOeIAAAA0gAA54kAAOeJAAAA0wAA54oAAOeKAAAA2gAA54sAAOeLAAAA1AAA54wAAOeMAAAA2wAA540AAOeNAAAA3AAA544AAOeOAAAA3QAA548AAOePAAAA3gAA55AAAOeQAAAA3wAA55EAAOeRAAAA4AAA55IAAOeSAAAA4QAA55MAAOeTAAAA4gAA55QAAOeUAAAA4wAA55UAAOeVAAAA5AAA55YAAOeWAAAA5QAA55cAAOeXAAAA5gAA55gAAOeYAAAA5wAA55kAAOeZAAAA6AAA55oAAOeaAAAA6QAA55sAAOebAAAA6gAA55wAAOecAAAA6wAA550AAOedAAAA7AAA554AAOeeAAAA7QAA558AAOefAAAA7gAA56AAAOegAAAA7wAA56EAAOehAAAA8AAA56IAAOeiAAAA8QAA56MAAOejAAAA8gAA56QAAOekAAAA8wAA56UAAOelAAAA9AAA56YAAOemAAAA9QAA56cAAOenAAAA9gAA56gAAOeoAAAA9wAA56kAAOepAAAA+AAA56oAAOeqAAAA+QAA56sAAOerAAAA+gAA56wAAOesAAAA+wAA560AAOetAAAA/AAA564AAOeuAAAA/QAA568AAOevAAAA/gAA57AAAOewAAAA/wAA57EAAOexAAABAAAA57IAAOeyAAABAQAA57MAAOezAAABAgAA57QAAOe0AAABAwAA57UAAOe1AAABBAAA57YAAOe2AAABBQAA57cAAOe3AAABBgAA57gAAOe4AAABBwAA57kAAOe5AAABCAAA57oAAOe6AAABCQAA57sAAOe7AAABCgAA57wAAOe8AAABCwAA570AAOe9AAABDAAA574AAOe+AAABDQAA578AAOe/AAABDgAA58AAAOfAAAABDwAA58EAAOfBAAABEAAA58IAAOfCAAABEQAA58MAAOfDAAABEgAA58QAAOfEAAABEwAA58UAAOfFAAABFAAA58YAAOfGAAABFQAA58cAAOfHAAABFgAA58kAAOfJAAABFwAA58oAAOfKAAABGAAAAAAAAABuALoBLgHeAkYCrAMeA24D9gRaBO4FaAWeBjwGhAbuBywHbAeoCBQIaAiyCTQJign+CooK3gtCC5gMBAx2DPgNQA2GDcgODA5aDvgPUA+4EAwQZBD8EVgRxhIKElYSwhMyE6IUAhQaFEYUZBSSFNQVEhU2FVoVgBWoFe4WQhamFwgXMhdiF5IXvBfuGBgYSBh4GNgZDhlkGaAZ6BqmGuwbXhvCHEwcsB0UHVwdvh5sHtAfUB+wH/wgWiC2IQIhaCGoIiAioiMYI3Ij2iQUJJYk9iWKJiYmoCb+J14ntif0KGQomikOKVwpoingKi4qpCryK1YrwCxOLH4s4C0qLYIt4C5QLogu5i8kL74wGDB0MNwxJDHoMkwymDLsM2Qz8DRINJw1EjWuNfw2UDagNxY3qjgs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LlpbLVpaLQAABAAA/8ADgANAAAIACAAWABoAAAEnFRchESERIQEhAREUBiMhIiY1ETQ2EyEVIQMmpsD/AP6AAoD9YAHgAQASDv1ADhISzgFA/sACQKamQAEA/QADQP8A/aAOEhIOA0AOEv4AQAAAAAAFAAD/wAOAA0AAAwATABcAGwAfAAATESERJSEyFhURFAYjISImNRE0NhMhFSERMxUjESEVIcACgP1gAsAOEhIO/UAOEhKuAYD+gMDAAYD+gAMA/QADAEASDvzADhISDgNADhL+QEABAED+wEAAAAAAAwAAAAADwAMAAAUAFwAdAAATESERISclIRchMhYVERQGIyEiJjURNDYBNxcHJzeAAwD+ZoD++gEggAGgDhISDvzADhISAay1LeKeLQLA/YACAIBAgBIO/cAOEhIOAsAOEv4KtS3jny0AAAAAAwAAAAADwAMAAAUAFwAjAAATESERISclIRchMhYVERQGIyEiJjURNDYBJzcXNxcHFwcnByeAAwD+ZoD++gEggAGgDhISDvzADhISAYFbLlpaLltbLlpaLgLA/YACAIBAgBIO/cAOEhIOAsAOEv5AWi5bWy5aWi5bWy4AAAMAAAAAA8ADAAAFABcAGwAAExEhESEnJSEXITIWFREUBiMhIiY1ETQ2ASEVIYADAP5mgP76ASCAAaAOEhIO/MAOEhIBDgFA/sACwP2AAgCAQIASDv3ADhISDgLADhL+YEAAAAADAAAAAAPAAwAABQAXACMAABMRIREhJyUhFyEyFhURFAYjISImNRE0NgE1MxUzFSMVIzUjNYADAP5mgP76ASCAAaAOEhIO/MAOEhIBjkCAgECAAsD9gAIAgECAEg79wA4SEg4CwA4S/mCAgECAgEAAAwAA//8DugMAAAMADQAkAAABIQMhEzUhJyMRNz4BMwEhIiY1ETQ2MyEXITIWHQEzMhYHAw4BA279hGACfDL+poDmOgMRCwJO/TkOEhIOASCAAWAOEhcPEwNwAxEBwP6AAcBAgP5A6AsN/gASDgLADhKAEg5gGQ/+QAsNAAIAAAAAA8ADAAAFABcAABMRIREhJyUhFyEyFhURFAYjISImNRE0NoADAP5mgP76ASCAAaAOEhIO/MAOEhICwP2AAgCAQIASDv3ADhISDgLADhIAAAUAAP+8A6kDVQADAAYACgAQABQAADcX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APkAAwABBAkACgBWAQcAAwABBAkACwAmAV0KQ3JlYXRlZCBieSBpY29uZm9udAplbGVtZW50UmVndWxhcmVsZW1lbnRlbGVtZW50VmVyc2lvbiAxLjBlbGVtZW50R2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20ACgBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AAoAZQBsAGUAbQBlAG4AdABSAGUAZwB1AGwAYQByAGUAbABlAG0AZQBuAHQAZQBsAGUAbQBlAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAZQBsAGUAbQBlAG4AdABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEZAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4BDwEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgAPaWNlLWNyZWFtLXJvdW5kEGljZS1jcmVhbS1zcXVhcmUIbG9sbGlwb3ANcG90YXRvLXN0cmlwcwhtaWxrLXRlYQlpY2UtZHJpbmsHaWNlLXRlYQZjb2ZmZWUGb3JhbmdlBHBlYXIFYXBwbGUGY2hlcnJ5CndhdGVybWVsb24FZ3JhcGUMcmVmcmlnZXJhdG9yEmdvYmxldC1zcXVhcmUtZnVsbA1nb2JsZXQtc3F1YXJlC2dvYmxldC1mdWxsBmdvYmxldApjb2xkLWRyaW5rCmNvZmZlZS1jdXAJd2F0ZXItY3VwCWhvdC13YXRlcglpY2UtY3JlYW0HZGVzc2VydAVzdWdhcgl0YWJsZXdhcmUGYnVyZ2VyCmtuaWZlLWZvcmsKZm9yay1zcG9vbgdjaGlja2VuBGZvb2QGZGlzaC0xBGRpc2gMcmVmcmVzaC1sZWZ0DXJlZnJlc2gtcmlnaHQPd2FybmluZy1vdXRsaW5lB3NldHRpbmcNcGhvbmUtb3V0bGluZQxtb3JlLW91dGxpbmUIZmluaXNoZWQEdmlldwdsb2FkaW5nB3JlZnJlc2gEcmFuawRzb3J0DG1vYmlsZS1waG9uZQdzZXJ2aWNlBHNlbGwIc29sZC1vdXQGZGVsZXRlBW1pbnVzBHBsdXMFY2hlY2sFY2xvc2UNZC1hcnJvdy1yaWdodAxkLWFycm93LWxlZnQKYXJyb3ctbGVmdAphcnJvdy1kb3duC2Fycm93LXJpZ2h0CGFycm93LXVwA2tleQR1c2VyBnVubG9jawRsb2NrA3RvcAl0b3AtcmlnaHQIdG9wLWxlZnQFcmlnaHQEYmFjawZib3R0b20MYm90dG9tLXJpZ2h0C2JvdHRvbS1sZWZ0Cm1vb24tbmlnaHQEbW9vbhBjbG91ZHktYW5kLXN1bm55DXBhcnRseS1jbG91ZHkGY2xvdWR5BXN1bm55BnN1bnNldAlzdW5yaXNlLTEHc3VucmlzZQpoZWF2eS1yYWluCWxpZ2h0bmluZwpsaWdodC1yYWluCndpbmQtcG93ZXIFd2F0Y2gHd2F0Y2gtMQV0aW1lcgthbGFybS1jbG9jawxtYXAtbG9jYXRpb24PZGVsZXRlLWxvY2F0aW9uDGFkZC1sb2NhdGlvbhRsb2NhdGlvbi1pbmZvcm1hdGlvbhBsb2NhdGlvbi1vdXRsaW5lBXBsYWNlCGRpc2NvdmVyDWZpcnN0LWFpZC1raXQIdHJvcGh5LTEGdHJvcGh5BW1lZGFsB21lZGFsLTEJc3RvcHdhdGNoA21pYwhiYXNlYmFsbAZzb2NjZXIIZm9vdGJhbGwKYmFza2V0YmFsbAhzdGFyLW9mZg1jb3B5LWRvY3VtZW50C2Z1bGwtc2NyZWVuDXN3aXRjaC1idXR0b24DYWltBGNyb3AIb2RvbWV0ZXIEdGltZQxjaXJjbGUtY2hlY2sOcmVtb3ZlLW91dGxpbmUTY2lyY2xlLXBsdXMtb3V0bGluZQdiYW5nemh1BGJlbGwSY2xvc2Utbm90aWZpY2F0aW9uCm1pY3JvcGhvbmUTdHVybi1vZmYtbWljcm9waG9uZQhwb3NpdGlvbghwb3N0Y2FyZAdtZXNzYWdlEGNoYXQtbGluZS1zcXVhcmUPY2hhdC1kb3Qtc3F1YXJlDmNoYXQtZG90LXJvdW5kC2NoYXQtc3F1YXJlD2NoYXQtbGluZS1yb3VuZApjaGF0LXJvdW5kBnNldC11cAh0dXJuLW9mZgRvcGVuCmNvbm5lY3Rpb24EbGluawNjcHUFdGh1bWIGZmVtYWxlBG1hbGUFZ3VpZGUEaGVscARuZXdzBHNoaXAFdHJ1Y2sHYmljeWNsZQlwcmljZS10YWcIZGlzY291bnQGd2FsbGV0BGNvaW4FbW9uZXkJYmFuay1jYXJkA2JveAdwcmVzZW50DnNob3BwaW5nLWJhZy0yDnNob3BwaW5nLWJhZy0xD3Nob3BwaW5nLWNhcnQtMg9zaG9wcGluZy1jYXJ0LTESc2hvcHBpbmctY2FydC1mdWxsB3Ntb2tpbmcKbm8tc21va2luZwVob3VzZQp0YWJsZS1sYW1wBnNjaG9vbA9vZmZpY2UtYnVpbGRpbmcMdG9pbGV0LXBhcGVyCm5vdGVib29rLTIKbm90ZWJvb2stMQVmaWxlcwpjb2xsZWN0aW9uCXJlY2VpdmluZw9waWN0dXJlLW91dGxpbmUVcGljdHVyZS1vdXRsaW5lLXJvdW5kCnN1aXRjYXNlLTEIc3VpdGNhc2UEZmlsbQxlZGl0LW91dGxpbmUOY29sbGVjdGlvbi10YWcNZGF0YS1hbmFseXNpcwlwaWUtY2hhcnQKZGF0YS1ib2FyZAdyZWFkaW5nC21hZ2ljLXN0aWNrCmNvb3JkaW5hdGUFbW91c2UJZGF0YS1saW5lBWJydXNoB2hlYWRzZXQIdW1icmVsbGEIc2Npc3NvcnMMdmlkZW8tY2FtZXJhBm1vYmlsZQdhdHRyYWN0B21vbml0b3IIem9vbS1vdXQHem9vbS1pbgZzZWFyY2gGY2FtZXJhDHRha2Vhd2F5LWJveAd1cGxvYWQyCGRvd25sb2FkCXBhcGVyY2xpcAdwcmludGVyDGRvY3VtZW50LWFkZAhkb2N1bWVudBBkb2N1bWVudC1jaGVja2VkDWRvY3VtZW50LWNvcHkPZG9jdW1lbnQtZGVsZXRlD2RvY3VtZW50LXJlbW92ZQd0aWNrZXRzDmZvbGRlci1jaGVja2VkDWZvbGRlci1kZWxldGUNZm9sZGVyLXJlbW92ZQpmb2xkZXItYWRkDWZvbGRlci1vcGVuZWQGZm9sZGVyBGVkaXQMY2lyY2xlLWNsb3NlBGRhdGUJY2FyZXQtdG9wDGNhcmV0LWJvdHRvbQtjYXJldC1yaWdodApjYXJldC1sZWZ0BXNoYXJlBG1vcmUFcGhvbmUSdmlkZW8tY2FtZXJhLXNvbGlkB3N0YXItb24EbWVudQ1tZXNzYWdlLXNvbGlkB2QtY2FyZXQMY2FtZXJhLXNvbGlkB3N1Y2Nlc3MFZXJyb3IIbG9jYXRpb24HcGljdHVyZQtjaXJjbGUtcGx1cwRpbmZvBnJlbW92ZQd3YXJuaW5nCHF1ZXN0aW9uCnVzZXItc29saWQGcy1ncmlkB3MtY2hlY2sGcy1kYXRhBnMtZm9sZA1zLW9wcG9ydHVuaXR5CHMtY3VzdG9tB3MtdG9vbHMHcy1jbGFpbQlzLWZpbmFuY2UJcy1jb21tZW50BnMtZmxhZwtzLW1hcmtldGluZwdzLWdvb2RzBnMtaGVscAZzLXNob3AGcy1vcGVuDHMtbWFuYWdlbWVudAhzLXRpY2tldAlzLXJlbGVhc2UGcy1ob21lC3MtcHJvbW90aW9uC3Mtb3BlcmF0aW9uCHMtdW5mb2xkCnMtcGxhdGZvcm0Hcy1vcmRlcg1zLWNvb3BlcmF0aW9uCnZpZGVvLXBsYXkLdmlkZW8tcGF1c2UFZ29vZHMGdXBsb2FkCXNvcnQtZG93bgdzb3J0LXVwE2Mtc2NhbGUtdG8tb3JpZ2luYWwFZWxlbWUMZGVsZXRlLXNvbGlkDnBsYXRmb3JtLWVsZW1lAAAA) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination:after,.el-pagination:before{display:table;content:""}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:transparent}.el-pagination button:focus{outline:none}.el-pagination button:hover{color:#409eff}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:50% no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more:before,.el-pagination--small li.more:before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev:disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409eff}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;display:inline-block;vertical-align:top;font-size:0;padding:0;margin:0}.el-pager .more:before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;vertical-align:top;display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:0}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409eff}.el-pager li.active{color:#409eff;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px;padding-bottom:10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:transparent;border:none;outline:none;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button:before{content:"";position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:hsla(0,0%,100%,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default:before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled):before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:none}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:"";height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:1px solid #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.el-menu:after,.el-menu:before{display:table;content:""}.el-menu:after{clear:both}.el-menu.el-menu--horizontal{border-bottom:1px solid #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909398}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:none}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909398}.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909398}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:none;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909398}.el-menu-item:focus,.el-menu-item:hover{outline:none;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409eff}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909398}.el-submenu__title:focus,.el-submenu__title:hover{outline:none;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:none!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909398}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button,.el-radio-button__inner{position:relative;display:inline-block;outline:none}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409eff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #409eff;box-shadow:-1px 0 0 0 #409eff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409eff}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:none;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff}.el-switch.is-checked .el-switch__core:after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected:after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409eff;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type):after{content:"";position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409eff}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotate(180deg);transform:rotate(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotate(180deg);transform:rotate(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909398}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#409eff}.el-select>.el-input{display:block}.el-select__input{border:none;outline:none;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909398}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909398}.el-select .el-tag__close.el-icon-close:before{display:block;-webkit-transform:translateY(.5px);transform:translateY(.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;background-color:#fff;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909398}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell{background-color:#fff}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909398;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#f5f7fa}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#fff}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#409eff}.el-table th.el-table__cell.required>div:before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border:after,.el-table--group:after,.el-table:before{content:"";position:absolute;background-color:#ebeef5;z-index:1}.el-table--border:after,.el-table--group:after{top:0;right:0;width:1px;height:100%}.el-table:before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell{border-right:1px solid #ebeef5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:1px solid #ebeef5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right:before,.el-table__fixed:before{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #ebeef5}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff}.el-table .descending .sort-caret.descending{border-top-color:#409eff}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#f5f7fa}.el-table__body tr.current-row>td.el-table__cell{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409eff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#409eff}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc}.el-date-table td{width:32px;padding:4px 0;text-align:center;cursor:pointer;position:relative}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td div{padding:3px 0}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409eff;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#409eff}.el-date-table td.in-range div,.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#409eff}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409eff}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#409eff;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:1px solid #ebeef5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409eff;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409eff}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#409eff}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409eff}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409eff;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409eff}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:1px solid #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409eff;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:none;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input:-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:none;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409eff}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409eff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:transparent;cursor:pointer;outline:none;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409eff}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909398;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409eff}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds:after{left:66.66667%}.el-time-panel__content.has-seconds:before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:none;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409eff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper:after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:none;background:transparent;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status:before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67c23a}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{display:table;content:""}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:#409eff;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item:after,.el-form-item:before{display:table;content:""}.el-form-item:after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini.el-form-item{margin-bottom:18px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content:after,.el-form-item__content:before{display:table;content:""}.el-form-item__content:after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:"*";color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409eff;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8);transform:scale(.8)}.el-tabs__new-tab:hover{color:#409eff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909398}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:inset 0 0 2px 2px #409eff;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#409eff}.el-tabs__item:hover{color:#409eff;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909398}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409eff}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}to{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909398;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409eff}.el-tree-node{white-space:nowrap;outline:none}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0deg);transform:rotate(0deg);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a}.el-alert--success.is-light .el-alert__description{color:#67c23a}.el-alert--success.is-dark{background-color:#67c23a;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909398;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409eff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow:after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow:after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow:after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow:after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow:after{border-right-color:#fff}.el-slider:after,.el-slider:before{display:table;content:""}.el-slider:after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409eff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper:after{content:"";height:100%}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{display:inline-block;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409eff;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px}.el-slider.is-vertical .el-slider__button-wrapper,.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409eff}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:hsla(0,0%,100%,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#409eff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409eff;stroke-linecap:round}.el-loading-spinner i{color:#409eff}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row:after,.el-row:before{display:table;content:""}.el-row:after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{display:none;width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{position:relative;right:16.66667%}.el-col-push-4{position:relative;left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{position:relative;right:20.83333%}.el-col-push-5{position:relative;left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{position:relative;right:29.16667%}.el-col-push-7{position:relative;left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{position:relative;right:33.33333%}.el-col-push-8{position:relative;left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{position:relative;right:41.66667%}.el-col-push-10{position:relative;left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{position:relative;right:45.83333%}.el-col-push-11{position:relative;left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{position:relative;right:54.16667%}.el-col-push-13{position:relative;left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{position:relative;right:58.33333%}.el-col-push-14{position:relative;left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{position:relative;right:66.66667%}.el-col-push-16{position:relative;left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{position:relative;right:70.83333%}.el-col-push-17{position:relative;left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{position:relative;right:79.16667%}.el-col-push-19{position:relative;left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{position:relative;right:83.33333%}.el-col-push-20{position:relative;left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{position:relative;right:91.66667%}.el-col-push-22{position:relative;left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{position:relative;right:95.83333%}.el-col-push-23{position:relative;left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:none}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff}.el-upload:focus .el-upload-dragger{border-color:#409eff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409eff;font-style:normal}.el-upload-dragger:hover{border-color:#409eff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409eff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67c23a}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409eff}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909398;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409eff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:transparent;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409eff;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909398}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409eff}.el-badge__content--success{background-color:#67c23a}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon,.el-rate__item{display:inline-block;position:relative}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal,.el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#67c23a;border-color:#67c23a}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#409eff;border-color:#409eff}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#67c23a}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#409eff}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#67c23a}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#409eff}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:transparent;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{content:"";display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow:before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:none;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:none;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card,.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45);transform:scale(.45)}.collapse-transition{-webkit-transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out;transition:height .3s ease-in-out,padding-top .3s ease-in-out,padding-bottom .3s ease-in-out}.horizontal-collapse-transition{-webkit-transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out;transition:width .3s ease-in-out,padding-left .3s ease-in-out,padding-right .3s ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:none}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,.03));filter:drop-shadow(0 2px 12px rgba(0,0,0,.03))}.el-popper .popper__arrow:after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow:after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow:after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow:after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow:after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#409eff;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409eff}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67c23a}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close:before{display:block}.el-tag--dark{background-color:#409eff;color:#fff}.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409eff}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:focus{border-color:#409eff}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909398}.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:1px solid #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909398}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:none;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#409eff;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input:-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{font-size:12px;margin-top:8px;width:280px}.el-color-predefine,.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex}.el-color-predefine__colors{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409eff;box-shadow:0 0 3px 2px #409eff}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(180deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(transparent));background:linear-gradient(0deg,#000,transparent)}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:none;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff}.el-color-dropdown__link-btn{cursor:pointer;color:#409eff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:hsla(0,0%,100%,.7)}.el-color-picker__trigger{display:inline-block;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;cursor:pointer}.el-color-picker__color,.el-color-picker__trigger{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-color-picker__color{display:block;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{color:#999}.el-color-picker__empty,.el-color-picker__icon{font-size:12px;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;color:#fff;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:none;border-color:#409eff}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909398}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:normal;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:none;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:none;border-color:#409eff}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;left:5px;top:0;color:#c0c4cc}.el-input__icon,.el-input__prefix{height:100%;text-align:center;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{width:25px;line-height:40px}.el-input__icon:after{content:"";height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:none;border-color:#409eff}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#409eff;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409eff}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909398;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909398;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner:after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px}.el-aside,.el-header{-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;padding:20px}.el-footer,.el-main{-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#409eff}.el-timeline-item__node--success{background-color:#67c23a}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909398;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:none;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409eff}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409eff}.el-link.el-link--default:after{border-color:#409eff}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#409eff}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary:after{border-color:#409eff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--primary.is-underline:hover:after{border-color:#409eff}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--danger.is-underline:hover:after{border-color:#f56c6c}.el-link.el-link--success{color:#67c23a}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success:after{border-color:#67c23a}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--success.is-underline:hover:after{border-color:#67c23a}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--warning.is-underline:hover:after{border-color:#e6a23c}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-link.el-link--info.is-underline:hover:after{border-color:#909399}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error,.el-image__placeholder{background:#f5f7fa}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}to{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:none}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#409eff;color:#409eff}.el-button.is-plain:active{background:#fff;outline:none}.el-button.is-active,.el-button.is-plain:active{border-color:#3a8ee6;color:#3a8ee6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:"";position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:hsla(0,0%,100%,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#409eff;border-color:#409eff}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#fff}.el-button--primary:active{outline:none}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff;color:#fff}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#fff;outline:none}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#fff;background-color:#67c23a;border-color:#67c23a}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#fff}.el-button--success:active{outline:none}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67c23a;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a;color:#fff}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#fff;outline:none}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{outline:none}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:none}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{outline:none}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:none}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{outline:none}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:none}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409eff;background:transparent;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{display:table;content:""}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:first-child{border-right-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:last-child{border-left-color:hsla(0,0%,100%,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:hsla(0,0%,100%,.5);border-right-color:hsla(0,0%,100%,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table td.is-today{color:#409eff}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;color:#409eff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{line-height:24px}.el-page-header,.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex}.el-page-header__left{cursor:pointer;margin-right:40px;position:relative}.el-page-header__left:after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409eff}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-checked .el-checkbox__inner:after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{content:"";position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409eff}.el-checkbox__inner:after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:none;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:none;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409eff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:none;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:none;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409eff}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff}.el-radio__input.is-checked .el-radio__inner:after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409eff}.el-radio__input.is-focus .el-radio__inner{border-color:#409eff}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409eff}.el-radio__inner:after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:none;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity .34s ease-out;transition:opacity .34s ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,152,.3);-webkit-transition:background-color .3s;transition:background-color .3s}.el-scrollbar__thumb:hover{background-color:rgba(144,147,152,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity .12s ease-out;transition:opacity .12s ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:1px solid #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:none}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%);transform:translate(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(100%);transform:translate(100%)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%);transform:translate(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translate(-100%);transform:translate(-100%)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translate(0);transform:translate(0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0);transform:translate(0)}to{-webkit-transform:translateY(100%);transform:translateY(100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px;padding-bottom:0}.el-drawer__header>:first-child,.el-drawer__title{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#dcdde0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#dcdde0;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909398}.el-empty__bottom{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions__body{color:#606266;background-color:#fff}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #ebeef5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small{font-size:12px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini{font-size:12px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon:after{content:":";position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909398;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title{margin-top:20px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67c23a}.el-result .icon-error{fill:#f56c6c}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#e6a23c}body,html{margin:0;padding:0;height:100%;overflow:hidden}::-webkit-scrollbar{width:15px;height:15px}::-webkit-scrollbar-thumb{background:#959595;border-radius:10px;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background-color:#b9c6e0;border-radius:10px;background-clip:content-box}::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-thumb:vertical:hover{border:3px solid transparent;border-left:4px solid transparent}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:horizontal:hover{border:3px solid transparent;border-top:4px solid transparent}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-track:vertical{border-left:0 solid #424242}::-webkit-scrollbar-track:horizontal{border-top:0 solid #424242}::-webkit-scrollbar-corner{background-color:transparent}.custom-aside[data-v-9aeef600]{width:100%;height:100%;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:2px 0 10px 0 rgba(38,47,62,.04);box-shadow:2px 0 10px 0 rgba(38,47,62,.04);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.custom-aside[data-v-9aeef600],.hover-aside[data-v-9aeef600]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.hover-aside[data-v-9aeef600]{-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.collapse-content[data-v-9aeef600]{position:absolute;width:200px;z-index:1000}.system-info-aside[data-v-9aeef600]{min-height:48px;padding:9px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.custom-aside .system-info-aside .logoImg[data-v-9aeef600]{max-width:100%;max-height:100%;vertical-align:middle}.custom-aside .system-info-aside .title[data-v-9aeef600]{display:inline-block;margin-left:8px;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;font-weight:200;line-height:18px;font-style:normal;font-size:18px;text-align:center;vertical-align:middle;word-break:break-all}.aside-menu[data-v-9aeef600]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;border:none;width:100%}.aside-menu[data-v-9aeef600]::-webkit-scrollbar{display:none}.el-submenu.is-active .el-submenu__title[data-v-9aeef600],.el-submenu.is-active .el-submenu__title i[data-v-9aeef600],[data-v-9aeef600] .el-menu-item.is-active,[data-v-9aeef600] .el-menu-item.is-active i{font-weight:500}.custom-aside[data-v-9aeef600] .el-menu-item,.custom-aside[data-v-9aeef600] .el-submenu .el-submenu__title{height:38px;line-height:38px}.fold-menu[data-v-9aeef600]{width:100%;height:40px;line-height:40px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px}[data-v-9aeef600] .el-menu-item,[data-v-9aeef600] .el-submenu__title{font-size:12px}[data-v-9aeef600] .el-menu-item i,[data-v-9aeef600] .el-submenu__title i{color:inherit}[data-v-45c0ffc4] .el-drawer__header{padding:0 16px;margin:0;-webkit-box-shadow:inset 0 -1px 0 0 #dbdee6;box-shadow:inset 0 -1px 0 0 #dbdee6}[data-v-45c0ffc4] .el-drawer__close-btn{font-size:14px}[data-v-45c0ffc4] .el-drawer__body{padding-bottom:16px}[data-v-45c0ffc4] .el-drawer__body::-webkit-scrollbar{display:none}.setting4[data-v-45c0ffc4] .el-button,[data-v-45c0ffc4] .el-tag{-webkit-box-flex:1;-ms-flex:1;flex:1}.drawer-header[data-v-45c0ffc4]{height:40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;font-weight:500}.drawer-header img[data-v-45c0ffc4]{margin-right:4px}.setting-icon i[data-v-45c0ffc4]{line-height:inherit}.setting-drawer-index-content[data-v-45c0ffc4]{padding:0 8px}.setting-drawer-index-content .setting-item[data-v-45c0ffc4]{font-size:12px;font-weight:500}.setting-drawer-index-content .setting-drawer-index-title[data-v-45c0ffc4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.setting-drawer-index-content .setting-drawer-index-title img[data-v-45c0ffc4]{margin-right:4px}.setting-drawer-index-content .setting-drawer-index-blockChecbox[data-v-45c0ffc4]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.setting-drawer-index-content .setting-drawer-index-blockChecbox[data-v-45c0ffc4]:not(.setting4){-webkit-box-shadow:inset 0 -1px 0 0 #dbdee6;box-shadow:inset 0 -1px 0 0 #dbdee6}.setting-drawer-index-content .setting-drawer-index-blockChecbox.setting1 .setting-drawer-index-item[data-v-45c0ffc4]{width:80px;height:32px;text-align:center}.setting-drawer-index-content .setting-drawer-index-blockChecbox.setting1 .setting-drawer-index-item span[data-v-45c0ffc4]{line-height:32px}.setting-drawer-index-content .setting-drawer-index-blockChecbox.setting2 .setting-drawer-index-item[data-v-45c0ffc4]{width:128px;height:80px}.setting-drawer-index-content .setting-drawer-index-blockChecbox.setting3 .setting-drawer-index-item[data-v-45c0ffc4]{width:80px;height:56px}.setting-drawer-index-content .setting-drawer-index-blockChecbox .layout-title[data-v-45c0ffc4]{position:absolute;bottom:0;left:0;width:100%;height:20px;line-height:20px;background:rgba(36,41,57,.64);text-align:center;color:#fff;font-weight:500}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item[data-v-45c0ffc4]{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0 8px;position:relative;border-radius:4px;margin-bottom:16px;cursor:pointer}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item[data-v-45c0ffc4]:last-child{margin-right:0}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item .item-content[data-v-45c0ffc4]{height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item .active[data-v-45c0ffc4]{border:1px solid #06f}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item img[data-v-45c0ffc4]{margin:0}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item .setting-drawer-index-selectIcon[data-v-45c0ffc4]{position:absolute;bottom:0;right:0;width:14px;height:14px}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock[data-v-45c0ffc4]{width:20px;height:20px;padding:0;border-radius:0;border:0;cursor:pointer;margin-left:0;margin-right:8px;text-align:center}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock i[data-v-45c0ffc4]{color:#fff;font-size:14px}.setting-drawer-index-handle[data-v-45c0ffc4]{position:absolute;top:240px;background:#1890ff;width:48px;height:48px;right:300px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;pointer-events:auto;z-index:1001;text-align:center;font-size:16px;border-radius:4px 0 0 4px}.setting-drawer-index-handle i[data-v-45c0ffc4]{color:#fff;font-size:20px}.setting-header[data-v-45c0ffc4]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.custom-header[data-v-1625708c],.setting-header[data-v-45c0ffc4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.custom-header[data-v-1625708c]{width:100%;height:100%;-webkit-box-shadow:0 0 24px 0 rgba(45,48,59,.08);box-shadow:0 0 24px 0 rgba(45,48,59,.08);overflow:hidden;position:relative;z-index:100}.system-info[data-v-1625708c]{min-width:200px;max-width:360px}.custom-header .logoImg[data-v-1625708c]{max-width:100%;max-height:100%;margin-left:16px;vertical-align:middle}.title[data-v-1625708c]{margin-left:8px;margin-right:30px;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;line-height:50px;font-style:normal;font-size:20px;text-align:center;vertical-align:middle}.custom-header[data-v-1625708c] .el-menu--horizontal .el-submenu .el-submenu__title,.custom-header[data-v-1625708c] .el-menu--horizontal>.el-menu-item,.custom-header[data-v-1625708c] .el-menu.el-menu--horizontal{border:0}[data-v-1625708c] .el-menu--horizontal>.el-menu-item,[data-v-1625708c] .el-menu--horizontal>.el-submenu .el-submenu__title{height:50px;line-height:50px}[data-v-1625708c] .el-menu-item,[data-v-1625708c] .el-submenu__title{font-size:12px;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;padding:0 16px}.el-submenu__title i[data-v-1625708c],[data-v-1625708c] .el-menu-item i{color:inherit}.popover-content[data-v-1625708c]{-webkit-box-flex:0;-ms-flex:none;flex:none;margin:0 auto}.custom-header-right[data-v-1625708c],.header-operate[data-v-1625708c]{display:-webkit-box;display:-ms-flexbox;display:flex}.header-operate[data-v-1625708c]{height:50px;line-height:50px;margin-right:16px}.header-operate .operate-item[data-v-1625708c]{padding:0 8px;text-align:center}.header-operate .operate-item i[data-v-1625708c]{margin:0;font-size:16px;line-height:inherit;vertical-align:baseline}.header-operate[data-v-1625708c] .el-menu .el-submenu__title i{font-size:16px}.header-operate .operate-item .split-line[data-v-1625708c]{display:inline-block;width:1px;height:16px;border-radius:0 0 2px 2px;vertical-align:middle}.header-operate[data-v-1625708c] .tag-option.is-active .el-submenu__title{background:inherit!important}.header-operate .circular[data-v-1625708c],.header-operate .custom-avatar[data-v-1625708c]{width:28px;height:28px;line-height:28px;border-radius:14px;text-align:center;display:inline-block}.header-operate .custom-avatar[data-v-1625708c]{overflow:hidden;color:#fff}.user-info[data-v-1625708c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 8px}.user-info .custom-avatar[data-v-1625708c]{color:#fff}.user-info .user-name[data-v-1625708c]{margin-left:4px;font-weight:600;-webkit-box-flex:1;-ms-flex:1;flex:1}.darken-border[data-v-1625708c]{border-bottom:1px solid}.custom-text-avatar[data-v-1625708c]{width:24px;height:24px;line-height:24px;text-align:center;overflow:hidden;border-radius:8px}.header-operate[data-v-1625708c] .el-menu{border:0}.header-operate .operate-item[data-v-1625708c] .el-submenu__title{padding:0}[data-v-1625708c] .personalPanel.is-active>.el-submenu__title{background:inherit!important}.custom-header .el-menu{font-weight:400}.custom-header .el-menu-item.is-active,.custom-header .el-submenu.is-active .el-submenu__title{font-weight:500}.personalPanel .el-submenu__icon-arrow{display:none}[v-cloak]{display:none!important}.tab-content[data-v-02ad73ee]{font-size:12px;padding:6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff}.page-style[data-v-02ad73ee]{background:#e3eaf2;padding-bottom:0}.move-arrow[data-v-02ad73ee]{display:inline-block;margin:0 6px;cursor:pointer}.tag-content[data-v-02ad73ee]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden}.tag-item[data-v-02ad73ee],.tags-view[data-v-02ad73ee]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.tag-item[data-v-02ad73ee]{padding:4px 10px;margin:0 8px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:2px}.page-style .tag-item[data-v-02ad73ee]{padding:6px 10px;background:#dde3ee;color:#63709c}.page-style .active-tag[data-v-02ad73ee]{background:#f1f4f8;color:#242939}.capsule-style .tag-item[data-v-02ad73ee]{background:#f1f4f8;color:#63709c}.tag-item .label[data-v-02ad73ee]{max-width:80px;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:16px;line-height:16px;margin-right:8px;cursor:pointer}.tag-item .el-icon-close[data-v-02ad73ee]{cursor:pointer}.tagOption[data-v-02ad73ee]{margin-left:10px}.framework-container[data-v-30691c47]{width:100%;height:100%;background:#f5f7fa}[data-v-30691c47] .displayNone{display:none}[data-v-30691c47] .el-cascader-menu__wrap{height:auto}[data-v-30691c47] .el-main{padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}[data-v-30691c47] .el-header{position:relative}.framework-main-padding[data-v-30691c47]{padding:16px;width:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 0 6px -2px rgba(45,48,59,.04);box-shadow:0 0 6px -2px rgba(45,48,59,.04);border-radius:2px}.framework-main-padding.hide-padding[data-v-30691c47]{padding:0;-webkit-box-shadow:none;box-shadow:none}.framework-main[data-v-30691c47]{height:100%;overflow:auto;background:#fff}.framework-main[data-v-30691c47]::-webkit-scrollbar{display:none}html{font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif}html .custom-header{font-weight:400}html .custom-header .el-menu .el-submenu [class^=el-icon-]{width:auto}html .custom-header .el-menu .el-menu-item,html .custom-header .el-menu .el-submenu__title{height:50px;line-height:50px}html .custom-header .el-menu.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{margin-top:0;margin-left:4px}html .custom-header .el-menu.el-menu--horizontal .el-menu-item:not(.is-disabled):not(.is-active):focus{color:inherit;background:inherit}html .custom-aside .el-menu-item [class^=el-icon-],html .popover-content .el-menu-item [class^=el-icon-]{width:auto}html .custom-aside .el-menu-item .el-icon-arrow-right,html .popover-content .el-menu-item .el-icon-arrow-right{font-size:16px;margin:0}html .popover-menu .el-dropdown-menu__item .el-icon-arrow-right{font-size:12px;width:auto}html .el-menu .el-menu-item,html .el-menu .el-submenu__title{font-size:12px}html .menu-icon{font-size:16px;min-height:16px;min-width:16px}html .sub-menu .el-menu .el-menu-item,html .sub-menu .el-menu .el-submenu__title{height:32px;line-height:32px;padding:0 4px}html .sub-menu .el-menu .padding-menu{padding:0 8px}html .dark .darken-border{border-color:#1c202c}html .dark .active-color{color:#fff}html .dark .custom-aside,html .dark.custom-header{background:#242939;color:#9eaacc}html .dark .custom-aside .el-dropdown,html .dark.custom-header .el-dropdown{color:#9eaacc}html .dark .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .dark .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .dark .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title,html .dark .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title .circular:hover{background:#1c202c}html .dark .el-menu,html .dark .el-menu .el-menu-item,html .dark .el-menu .el-submenu .el-submenu__title{background:#242939;color:#9eaacc}html .dark .el-menu .el-menu-item:hover,html .dark .el-menu .el-submenu .el-submenu__title:hover{color:#9eaacc;background:#1c202c}html .dark .el-menu .el-menu-item.is-active,html .dark .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}html .dark .el-menu .el-menu-item .carry-border:after{background-color:#1c202c}html .dark .el-menu .el-menu-item.is-active .hasAfter:after{background:#fff}html .dark .el-menu--popup .el-submenu.is-active .el-menu-item{background:none}html .dark .custom-aside .parent-node,html .dark .custom-aside .system-info-aside{-webkit-box-shadow:inset 0 -1px 0 0 #1c202c;box-shadow:inset 0 -1px 0 0 #1c202c}html .dark .custom-aside .fold-menu{-webkit-box-shadow:inset 0 1px 0 0 #1c202c;box-shadow:inset 0 1px 0 0 #1c202c}html .dark .header-operate .split-line{background:#1c202c}html .dark .custom-aside .scrollbar .el-scrollbar__thumb,html .dark.popover-menu .scrollbar .el-scrollbar__thumb{background:#141720}html .dark1 .darken-border{border-color:#10121a}html .dark1 .custom-aside{background:#1f2433;color:#9eaacc}html .dark1 .custom-aside .parent-node{-webkit-box-shadow:inset 0 -1px 0 0 #10121a;box-shadow:inset 0 -1px 0 0 #10121a}html .dark1 .custom-aside .fold-menu{background-color:#242939}html .dark1 .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .dark1 .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .dark1 .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title{background:#171b26}html .dark1 .el-menu,html .dark1 .el-menu .el-menu-item,html .dark1 .el-menu .el-submenu .el-submenu__title{background:#1f2433;color:#9eaacc}html .dark1 .el-menu .el-menu-item:hover,html .dark1 .el-menu .el-submenu .el-submenu__title:hover{color:#9eaacc;background:#171b26}html .dark1 .el-menu .el-menu-item.is-active,html .dark1 .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}html .dark1 .el-menu .el-menu-item.is-active .hasAfter:after{background:#fff}html .dark1.popover-menu{background:#1f2433;color:#9eaacc}html .dark1 .scrollbar .el-scrollbar__thumb{background:#10121a}html .dark1.popover-menu,html .dark.popover-menu{background:#1c202c;color:#9eaacc}html .dark1.popover-menu .menu-item,html .dark.popover-menu .menu-item{color:#9eaacc}html .dark1.popover-menu .menu-item.active-menu-content,html .dark1.popover-menu .menu-item:hover,html .dark.popover-menu .menu-item.active-menu-content,html .dark.popover-menu .menu-item:hover{background:#242939}html .dark1.popover-menu .search-box .el-input__inner,html .dark.popover-menu .search-box .el-input__inner{background:#202533;border:none}html .dark1.popover-menu .recent-search-item-label,html .dark.popover-menu .recent-search-item-label{background:#202533}html .dark1.popover-menu .menu-title,html .dark.popover-menu .menu-title{-webkit-box-shadow:inset 0 -1px 0 0 #2c3246;box-shadow:inset 0 -1px 0 0 #2c3246}html .dark1.popover-menu .child-content .padding-content,html .dark.popover-menu .child-content .padding-content{background:#242939}html .dark1.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active,html .dark1.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active,html .dark.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#409eff}html .dark1.primary-default.popover-menu .active-menu-item,html .dark.primary-default.popover-menu .active-menu-item{background:#409eff;color:#fff}html .dark1.primary-default.popover-menu .recent-search-item-label,html .dark.primary-default.popover-menu .recent-search-item-label{color:#409eff}html .dark1.primary-dark-blue .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark1.primary-dark-blue .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-dark-blue .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-dark-blue .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark.primary-dark-blue .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark.primary-dark-blue .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-dark-blue .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-dark-blue .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#06f}html .dark1.primary-dark-blue.popover-menu .active-menu-item,html .dark.primary-dark-blue.popover-menu .active-menu-item{background:#06f;color:#fff}html .dark1.primary-dark-blue.popover-menu .recent-search-item-label,html .dark.primary-dark-blue.popover-menu .recent-search-item-label{color:#06f}html .dark1.primary-green .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark1.primary-green .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-green .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-green .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark.primary-green .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark.primary-green .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-green .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-green .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#0bb783}html .dark1.primary-green.popover-menu .active-menu-item,html .dark.primary-green.popover-menu .active-menu-item{background:#0bb783;color:#fff}html .dark1.primary-green.popover-menu .recent-search-item-label,html .dark.primary-green.popover-menu .recent-search-item-label{color:#0bb783}html .dark1.primary-orange .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark1.primary-orange .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-orange .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-orange .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark.primary-orange .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark.primary-orange .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-orange .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-orange .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#ff770f}html .dark1.primary-orange.popover-menu .active-menu-item,html .dark.primary-orange.popover-menu .active-menu-item{background:#ff770f;color:#fff}html .dark1.primary-orange.popover-menu .recent-search-item-label,html .dark.primary-orange.popover-menu .recent-search-item-label{color:#ff770f}html .dark1.primary-red .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark1.primary-red .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-red .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-red .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark.primary-red .custom-aside .el-menu.combined-aside .el-menu-item.is-active,html .dark.primary-red .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-red .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-red .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#d7000f}html .dark1.primary-red.popover-menu .active-menu-item,html .dark.primary-red.popover-menu .active-menu-item{background:#d7000f;color:#fff}html .dark1.primary-red.popover-menu .recent-search-item-label,html .dark.primary-red.popover-menu .recent-search-item-label{color:#d7000f}html .light .darken-border{border-color:#ebeef5}html .light .custom-aside,html .light.custom-header,html .light.popover-menu{background:#fff;color:#242939}html .light .custom-aside .el-dropdown,html .light.custom-header .el-dropdown,html .light.popover-menu .el-dropdown{color:#242939}html .light .el-menu,html .light .el-menu .el-menu-item,html .light .el-menu .el-submenu .el-submenu__title{background:#fff;color:#242939}html .light .el-menu .el-menu-item:hover,html .light .el-menu .el-submenu .el-submenu__title:hover{color:#242939}html .light .el-menu .el-menu-item .carry-border:after{background-color:#ebeef5}html .light .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .light .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .light .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title{background:#fcfcfc}html .light .custom-aside .parent-node,html .light .custom-aside .system-info-aside{-webkit-box-shadow:inset 0 -1px 0 0 #ebeef5;box-shadow:inset 0 -1px 0 0 #ebeef5}html .light .custom-aside .fold-menu{-webkit-box-shadow:inset 0 1px 0 0 #ebeef5;box-shadow:inset 0 1px 0 0 #ebeef5}html .light .custom-aside .tree-aside .el-submenu .el-menu-item.is-active .hasAfter:after{height:25%;top:40%}html .light .custom-aside .tree-aside .el-menu .tree-line,html .light .header-operate .split-line{background:#ebeef5}html .light.popover-menu.menu-content{-webkit-box-shadow:inset 1px 0 0 0 hsla(0,0%,80%,.3),4px 0 8px 0 rgba(38,47,62,.04),8px 0 24px 0 rgba(38,47,62,.04);box-shadow:inset 1px 0 0 0 hsla(0,0%,80%,.3),4px 0 8px 0 rgba(38,47,62,.04),8px 0 24px 0 rgba(38,47,62,.04)}html .light.popover-menu .menu-item{color:#242939}html .light.popover-menu .menu-title{-webkit-box-shadow:inset 0 -1px 0 0 #dbdee6;box-shadow:inset 0 -1px 0 0 #dbdee6}html .light.popover-menu .parent-node .child-content .padding-content{background:#fff;-webkit-box-shadow:0 0 8px -2px rgba(36,41,57,.24);box-shadow:0 0 8px -2px rgba(36,41,57,.24)}html .light .custom-aside .scrollbar .el-scrollbar__thumb,html .light.popover-menu .scrollbar .el-scrollbar__thumb{background:#ebeef5}html .light.primary-default .active-color{color:#409eff}html .light.primary-default .el-menu--popup .el-menu-item.is-active>div,html .light.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-default:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#f5f9ff}html .light.primary-default:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#409eff}html .light.primary-default .el-menu .el-menu-item.is-active,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title{color:#409eff}html .light.primary-default .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#409eff}html .light.primary-default .el-menu .el-menu-item:hover,html .light.primary-default .el-menu .el-submenu .el-submenu__title:hover{background:#f5f9ff}html .light.primary-default.popover-menu .active-menu-content,html .light.primary-default.popover-menu .active-menu-item,html .light.primary-default.popover-menu .recent-search-item-label{background:#f5f9ff;color:#409eff}html .light.primary-default.popover-menu .menu-item:hover{background:#f5f9ff}html .light.primary-default .capsule-style .active-tag{background:#f5f9ff;color:#409eff}html .light.primary-dark-blue .active-color{color:#06f}html .light.primary-dark-blue .el-menu--popup .el-menu-item.is-active>div,html .light.primary-dark-blue .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-dark-blue:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#f5f9ff}html .light.primary-dark-blue:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#06f}html .light.primary-dark-blue .el-menu .el-menu-item.is-active,html .light.primary-dark-blue .el-menu .el-submenu.is-active>.el-submenu__title{color:#06f}html .light.primary-dark-blue .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-dark-blue .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#06f}html .light.primary-dark-blue .el-menu .el-menu-item:hover,html .light.primary-dark-blue .el-menu .el-submenu__title:hover{background:#f5f9ff}html .light.primary-dark-blue.popover-menu .active-menu-content,html .light.primary-dark-blue.popover-menu .active-menu-item,html .light.primary-dark-blue.popover-menu .recent-search-item-label{background:#f5f9ff;color:#06f}html .light.primary-dark-blue.popover-menu .menu-item:hover{background:#f5f9ff}html .light.primary-dark-blue .capsule-style .active-tag{background:#f5f9ff;color:#06f}html .light.primary-green .active-color{color:#0bb783}html .light.primary-green .el-menu--popup .el-menu-item.is-active>div,html .light.primary-green .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-green:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#f5fcfa}html .light.primary-green:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#0bb783}html .light.primary-green .el-menu .el-menu-item.is-active,html .light.primary-green .el-menu .el-submenu.is-active>.el-submenu__title{color:#0bb783}html .light.primary-green .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-green .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#0bb783}html .light.primary-green .el-menu .el-menu-item:hover,html .light.primary-green .el-menu .el-submenu__title:hover{background:#f5fcfa}html .light.primary-green.popover-menu .active-menu-content,html .light.primary-green.popover-menu .active-menu-item,html .light.primary-green.popover-menu .recent-search-item-label{background:#f5fcfa;color:#0bb783}html .light.primary-green.popover-menu .menu-item:hover{background:#f5fcfa}html .light.primary-green .capsule-style .active-tag{background:#f5fcfa;color:#0bb783}html .light.primary-orange .active-color{color:#ff770f}html .light.primary-orange .el-menu--popup .el-menu-item.is-active>div,html .light.primary-orange .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-orange:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#fff9f5}html .light.primary-orange:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#ff770f}html .light.primary-orange .el-menu .el-menu-item.is-active,html .light.primary-orange .el-menu .el-submenu.is-active>.el-submenu__title{color:#ff770f}html .light.primary-orange .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-orange .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#ff770f}html .light.primary-orange .el-menu .el-menu-item:hover,html .light.primary-orange .el-menu .el-submenu__title:hover{background:#fff9f5}html .light.primary-orange.popover-menu .active-menu-content,html .light.primary-orange.popover-menu .active-menu-item,html .light.primary-orange.popover-menu .recent-search-item-label{background:#fff9f5;color:#ff770f}html .light.primary-orange.popover-menu .menu-item:hover{background:#fff9f5}html .light.primary-orange .capsule-style .active-tag{background:#fff9f5;color:#ff770f}html .light.primary-red .active-color{color:#d7000f}html .light.primary-red .el-menu--popup .el-menu-item.is-active>div,html .light.primary-red .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-red:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#fff1f2}html .light.primary-red:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#d7000f}html .light.primary-red .el-menu .el-menu-item.is-active,html .light.primary-red .el-menu .el-submenu.is-active>.el-submenu__title{color:#d7000f}html .light.primary-red .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-red .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#d7000f}html .light.primary-red .el-menu .el-menu-item:hover,html .light.primary-red .el-menu .el-submenu__title:hover{background:#fff1f2}html .light.primary-red.popover-menu .active-menu-content,html .light.primary-red.popover-menu .active-menu-item,html .light.primary-red.popover-menu .recent-search-item-label{background:#fff1f2;color:#d7000f}html .light.primary-red.popover-menu .menu-item:hover{background:#fff1f2}html .light.primary-red .capsule-style .active-tag{background:#fff1f2;color:#d7000f}html .light.primary-chinaMobile .el-menu--popup .el-menu-item.is-active>div,html .light.primary-chinaMobile .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-chinaMobile:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#eaf7ff}html .light.primary-chinaMobile:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#0085d0}html .light.primary-chinaMobile .el-menu-item.is-active,html .light.primary-chinaMobile .el-submenu.is-active>.el-submenu__title{color:#0085d0}html .light.primary-chinaMobile .el-menu-item.is-active .carry-icon:after,html .light.primary-chinaMobile .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#0085d0}html .light.primary-chinaMobile .el-menu-item:hover,html .light.primary-chinaMobile .el-submenu__title:hover{background:#eaf7ff}html .light.primary-chinaMobile.popover-menu .active-menu-content,html .light.primary-chinaMobile.popover-menu .active-menu-item,html .light.primary-chinaMobile.popover-menu .recent-search-item-label{background:#eaf7ff;color:#0085d0}html .light.primary-chinaMobile.popover-menu .menu-item:hover{background:#eaf7ff}html .light.primary-chinaMobile .capsule-style .active-tag{background:#eaf7ff;color:#0085d0}html .light.primary-chinaUnicom .el-menu--popup .el-menu-item.is-active>div,html .light.primary-chinaUnicom .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-chinaUnicom:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#fff6f7}html .light.primary-chinaUnicom:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#c3000e}html .light.primary-chinaUnicom .el-menu-item.is-active,html .light.primary-chinaUnicom .el-submenu.is-active>.el-submenu__title{color:#c3000e}html .light.primary-chinaUnicom .el-menu-item.is-active .carry-icon:after,html .light.primary-chinaUnicom .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#c3000e}html .light.primary-chinaUnicom .el-menu-item:hover,html .light.primary-chinaUnicom .el-submenu__title:hover{background:#fff6f7}html .light.primary-chinaUnicom.popover-menu .active-menu-content,html .light.primary-chinaUnicom.popover-menu .active-menu-item,html .light.primary-chinaUnicom.popover-menu .recent-search-item-label{background:#fff6f7;color:#c3000e}html .light.primary-chinaUnicom.popover-menu .menu-item:hover{background:#fff6f7}html .light.primary-chinaUnicom .capsule-style .active-tag{background:#fff6f7;color:#c3000e}html .light.primary-chinaTelecom .el-menu--popup .el-menu-item.is-active>div,html .light.primary-chinaTelecom .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .light.primary-chinaTelecom:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active{background:#ebf4ff}html .light.primary-chinaTelecom:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#00489e}html .light.primary-chinaTelecom .el-menu-item.is-active,html .light.primary-chinaTelecom .el-submenu.is-active>.el-submenu__title{color:#00489e}html .light.primary-chinaTelecom .el-menu-item.is-active .carry-icon:after,html .light.primary-chinaTelecom .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#00489e}html .light.primary-chinaTelecom .el-menu-item:hover,html .light.primary-chinaTelecom .el-submenu__title:hover{background:#ebf4ff}html .light.primary-chinaTelecom.popover-menu .active-menu-content,html .light.primary-chinaTelecom.popover-menu .active-menu-item,html .light.primary-chinaTelecom.popover-menu .recent-search-item-label{background:#ebf4ff;color:#00489e}html .light.primary-chinaTelecom.popover-menu .menu-item:hover{background:#ebf4ff}html .light.primary-chinaTelecom .capsule-style .active-tag{background:#ebf4ff;color:#00489e}html .chinaMobile .header-operate .custom-avatar{background-color:#0078bc}html .chinaMobile .custom-aside,html .chinaMobile.custom-header{background:#0085d0;color:#e1edff}html .chinaMobile .custom-aside .el-dropdown,html .chinaMobile.custom-header .el-dropdown{color:#e1edff}html .chinaMobile .el-menu,html .chinaMobile .el-menu .el-menu-item,html .chinaMobile .el-menu .el-submenu .el-submenu__title{background:#0085d0;color:#e1edff}html .chinaMobile .el-menu .el-menu-item:hover,html .chinaMobile .el-menu .el-submenu .el-submenu__title:hover{color:#fff}html .chinaMobile .el-menu .el-menu-item:hover,html .chinaMobile .el-menu .el-submenu:hover,html .chinaMobile .el-menu .el-submenu__title:hover{background:none}html .chinaMobile .el-menu .el-menu-item.is-active,html .chinaMobile .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}html .chinaMobile .el-menu .el-menu-item .carry-border:after{background-color:#0078bc}html .chinaMobile .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .chinaMobile .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .chinaMobile .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title,html .chinaMobile .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title .circular:hover{background:#0071b1}html .chinaMobile .el-menu--popup .el-submenu.is-active .el-menu-item{background:none}html .chinaMobile .el-menu--popup .el-menu-item.is-active>div,html .chinaMobile .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#0071b1}html .chinaMobile.popover-menu{background:#0071b1;color:#e1edff}html .chinaMobile.popover-menu .menu-item{color:#e1edff}html .chinaMobile.popover-menu .menu-item.active-menu-content,html .chinaMobile.popover-menu .menu-item:hover{background:#0085d0}html .chinaMobile.popover-menu .search-box .el-input__inner{background:#0078bc;border:none}html .chinaMobile.popover-menu .active-menu-item,html .chinaMobile.popover-menu .recent-search-item-label{background:#0078bc;color:#fff}html .chinaMobile.popover-menu .menu-title{-webkit-box-shadow:inset 0 -1px 0 0 #007ec6;box-shadow:inset 0 -1px 0 0 #007ec6}html .chinaMobile.popover-menu .child-content .padding-content{background:#0085d0}html .chinaMobile .custom-aside .system-info-aside{-webkit-box-shadow:inset 0 -1px 0 0 #0078bc;box-shadow:inset 0 -1px 0 0 #0078bc}html .chinaMobile .custom-aside .fold-menu{-webkit-box-shadow:inset 0 1px 0 0 #0078bc;box-shadow:inset 0 1px 0 0 #0078bc}html .chinaMobile .custom-aside .el-menu .el-menu-item.is-active .hasAfter:after{background:#fff}html .chinaMobile .header-operate .split-line{background:#0078bc}html .chinaMobile .custom-aside .scrollbar .el-scrollbar__thumb,html .chinaMobile.popover-menu .scrollbar .el-scrollbar__thumb{background:#006ba7}html .chinaUnicom .header-operate .custom-avatar{background-color:#af000d}html .chinaUnicom .custom-aside,html .chinaUnicom.custom-header{background:#c3000e;color:#ffb6bb}html .chinaUnicom .custom-aside .el-dropdown,html .chinaUnicom.custom-header .el-dropdown{color:#ffb6bb}html .chinaUnicom .el-menu,html .chinaUnicom .el-menu .el-menu-item,html .chinaUnicom .el-menu .el-submenu .el-submenu__title{background:#c3000e;color:#ffb6bb}html .chinaUnicom .el-menu .el-menu-item.is-active,html .chinaUnicom .el-menu .el-menu-item:hover,html .chinaUnicom .el-menu .el-submenu .el-submenu__title:hover,html .chinaUnicom .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}html .chinaUnicom .el-menu .el-menu-item:hover,html .chinaUnicom .el-menu .el-submenu:hover,html .chinaUnicom .el-menu .el-submenu__title:hover{background:none}html .chinaUnicom .el-menu .el-menu-item .carry-border:after{background-color:#af000d}html .chinaUnicom .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .chinaUnicom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .chinaUnicom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title,html .chinaUnicom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title .circular:hover{background:#af000d}html .chinaUnicom .el-menu--popup .el-submenu.is-active .el-menu-item{background:none}html .chinaUnicom .el-menu--popup .el-menu-item.is-active>div,html .chinaUnicom .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#af000d}html .chinaUnicom.popover-menu{background:#a4000c;color:#ffb6bb}html .chinaUnicom.popover-menu .menu-item{color:#ffb6bb}html .chinaUnicom.popover-menu .menu-item.active-menu-content,html .chinaUnicom.popover-menu .menu-item:hover{background:#c3000e}html .chinaUnicom.popover-menu .search-box .el-input__inner{background:#af000d;border:none}html .chinaUnicom.popover-menu .active-menu-item,html .chinaUnicom.popover-menu .recent-search-item-label{background:#af000d;color:#fff}html .chinaUnicom.popover-menu .menu-title{-webkit-box-shadow:inset 0 -1px 0 0 #af000d;box-shadow:inset 0 -1px 0 0 #af000d}html .chinaUnicom.popover-menu .child-content .padding-content{background:#c3000e}html .chinaUnicom .custom-aside .system-info-aside{-webkit-box-shadow:inset 0 -1px 0 0 #af000d;box-shadow:inset 0 -1px 0 0 #af000d}html .chinaUnicom .custom-aside .fold-menu{-webkit-box-shadow:inset 0 1px 0 0 #af000d;box-shadow:inset 0 1px 0 0 #af000d}html .chinaUnicom .custom-aside .el-menu .el-menu-item.is-active .hasAfter:after{background:#fff}html .chinaUnicom .header-operate .split-line{background:#af000d}html .chinaUnicom .custom-aside .scrollbar .el-scrollbar__thumb,html .chinaUnicom.popover-menu .scrollbar .el-scrollbar__thumb{background:#9a000b}html .chinaTelecom .header-operate .custom-avatar{background-color:#003f8a}html .chinaTelecom .custom-aside,html .chinaTelecom.custom-header{background:#00489e;color:#e1edff}html .chinaTelecom .custom-aside .el-dropdown,html .chinaTelecom.custom-header .el-dropdown,html .chinaTelecom .menu-item{color:#e1edff}html .chinaTelecom .el-menu,html .chinaTelecom .el-menu .el-menu-item,html .chinaTelecom .el-menu .el-submenu .el-submenu__title{background:#00489e;color:#e1edff}html .chinaTelecom .el-menu .el-menu-item.is-active,html .chinaTelecom .el-menu .el-menu-item:hover,html .chinaTelecom .el-menu .el-submenu .el-submenu__title:hover,html .chinaTelecom .el-menu .el-submenu.is-active>.el-submenu__title{color:#fff}html .chinaTelecom .el-menu .el-menu-item:hover,html .chinaTelecom .el-menu .el-submenu:hover,html .chinaTelecom .el-menu .el-submenu__title:hover{background:none}html .chinaTelecom .el-menu .el-menu-item .carry-border:after{background-color:#003f8a}html .chinaTelecom .el-menu:not(.el-menu--popup) .el-menu-item.is-active,html .chinaTelecom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-menu-item,html .chinaTelecom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title,html .chinaTelecom .el-menu:not(.el-menu--popup) .el-submenu.is-active .el-submenu__title .circular:hover{background:#003f8a}html .chinaTelecom .el-menu--popup .el-submenu.is-active .el-menu-item{background:none}html .chinaTelecom .el-menu--popup .el-menu-item.is-active>div,html .chinaTelecom .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#003f8a}html .chinaTelecom.popover-menu{background:#003f8a;color:#e1edff}html .chinaTelecom.popover-menu .search-box .el-input__inner{background:#004394;border:none}html .chinaTelecom.popover-menu .active-menu-item,html .chinaTelecom.popover-menu .recent-search-item-label{background:#004394;color:#fff}html .chinaTelecom.popover-menu .menu-title{-webkit-box-shadow:inset 0 -1px 0 0 #004394;box-shadow:inset 0 -1px 0 0 #004394}html .chinaTelecom.popover-menu .child-content .padding-content,html .chinaTelecom.popover-menu .menu-item.active-menu-content,html .chinaTelecom.popover-menu .menu-item:hover{background:#00489e}html .chinaTelecom .custom-aside .system-info-aside{-webkit-box-shadow:inset 0 -1px 0 0 #003f8a;box-shadow:inset 0 -1px 0 0 #003f8a}html .chinaTelecom .custom-aside .fold-menu{-webkit-box-shadow:inset 0 1px 0 0 #003f8a;box-shadow:inset 0 1px 0 0 #003f8a}html .chinaTelecom .custom-aside .el-menu .el-menu-item.is-active .hasAfter:after{background:#fff}html .chinaTelecom .header-operate .split-line{background:#003f8a}html .chinaTelecom .custom-aside .scrollbar .el-scrollbar__thumb,html .chinaTelecom.popover-menu .scrollbar .el-scrollbar__thumb{background:#003575}html .dark1.primary-default .custom-avatar,html .dark.primary-default .custom-avatar,html .light.primary-default .custom-avatar{background-color:#409eff}html .dark1.primary-dark-blue .custom-avatar,html .dark.primary-dark-blue .custom-avatar,html .light.primary-dark-blue .custom-avatar{background-color:#06f}html .dark1.primary-green .custom-avatar,html .dark.primary-green .custom-avatar,html .light.primary-green .custom-avatar{background-color:#0bb783}html .dark1.primary-orange .custom-avatar,html .dark.primary-orange .custom-avatar,html .light.primary-orange .custom-avatar{background-color:#ff770f}html .dark1.primary-red .custom-avatar,html .dark.primary-red .custom-avatar,html .light.primary-red .custom-avatar{background-color:#d7000f}html .dark1.primary-chinaMobile .custom-avatar,html .dark.primary-chinaMobile .custom-avatar,html .light.primary-chinaMobile .custom-avatar{background-color:#0085d0}html .dark1.primary-chinaUnicom .custom-avatar,html .dark.primary-chinaUnicom .custom-avatar,html .light.primary-chinaUnicom .custom-avatar{background-color:#c3000e}html .dark1.primary-chinaTelecom .custom-avatar,html .dark.primary-chinaTelecom .custom-avatar,html .light.primary-chinaTelecom .custom-avatar{background-color:#00489e}.menu-title[data-v-3f2d5189]{display:-webkit-box;display:-ms-flexbox;display:flex}.menu-icon[data-v-3f2d5189]{display:inline-block;margin-right:6px;width:auto;text-align:center;vertical-align:middle}.el-menu--collapse .icon[data-v-3f2d5189]{width:auto}[data-v-3f2d5189] .el-menu-item,[data-v-3f2d5189] .el-submenu__title{font-size:12px}.el-menu .el-submenu .el-submenu .el-menu .menu-icon[data-v-3f2d5189]{display:none}.tree-line[data-v-3f2d5189]{position:absolute;width:1px;height:calc(100% - 32px);z-index:1;top:16px}.bottom-menu[data-v-3f2d5189]{height:100%;position:relative}.el-menu .el-submenu .el-menu-item.is-active .hasAfter[data-v-3f2d5189]:after{content:"";width:2px;height:5%;top:50%;float:left;position:absolute;z-index:2;left:-12px;border-radius:1px}.active-icon-right[data-v-3f2d5189]{display:none;position:absolute;right:20px;top:calc(50% - 6px)}.el-submenu .active-icon-right[data-v-3f2d5189]{right:20px}[data-v-3f2d5189] .el-menu>.el-menu-item>span{display:inline-block}.max-menu[data-v-3f2d5189]:first-of-type{margin:4px 0 8px}.max-menu[data-v-3f2d5189]{margin:8px 0}.carry-border[data-v-3f2d5189]{position:relative;margin-top:4px}.carry-border[data-v-3f2d5189]:after{content:"";width:100%;height:1px;display:block;z-index:100}.scrollbar[data-v-1857b0ea]{-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%}.scrollbar[data-v-1857b0ea] .el-scrollbar__wrap{overflow-x:hidden}.scrollbar[data-v-1857b0ea] .el-scrollbar__bar.is-vertical{width:4px;right:4px}.el-menu[data-v-1857b0ea]{border:none}[data-v-1857b0ea] .el-menu-item.is-active .active-icon-right{display:inline-block}.el-menu--collapse[data-v-1857b0ea] .el-menu-item .active-icon-right{display:none}.icon[data-v-1857b0ea]{display:inline-block;font-size:12px;width:auto;text-align:center;vertical-align:middle}.max-menu[data-v-1857b0ea]:first-of-type{margin:4px 0 8px}.max-menu[data-v-1857b0ea]{margin:8px 0}.carry-border[data-v-1857b0ea]{position:relative;margin-top:4px}.carry-border[data-v-1857b0ea]:after{content:"";width:100%;height:1px;display:block;z-index:100}.combine-side[data-v-a90ef2d2]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.parent-node[data-v-a90ef2d2]{padding:12px 20px;font-weight:500;font-size:14px;height:48px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:4px;color:#fff}.parent-node span[data-v-a90ef2d2]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.light .parent-node[data-v-a90ef2d2]{color:#1e222d}.parent-node span[data-v-a90ef2d2]{margin-left:6px}.carry-icon[data-v-a70faf2c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.el-menu--horizontal>.el-menu-item span[data-v-a70faf2c]{line-height:16px;margin-top:2px}.menu-item[data-v-24c3d486]{height:32px;line-height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 8px;cursor:pointer}.menu-item[data-v-24c3d486],.menu-label[data-v-24c3d486]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-label[data-v-24c3d486]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}@media screen and (min-width:1600px){.menu-label[data-v-24c3d486]{font-size:13px}.menu-item[data-v-24c3d486]{height:34px;line-height:34px}}.menu-item .el-icon-star-off[data-v-24c3d486]{display:none}.menu-item:hover>.el-icon-star-off[data-v-24c3d486]{display:inline-block}.list-item[data-v-fadc493e]{padding:0 4px}.parent-node[data-v-fadc493e]{position:relative}.parent-node:hover>.child-content[data-v-fadc493e]{display:block}.child-content[data-v-fadc493e]{display:none;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;padding-left:4px;left:100%;top:0;z-index:102}.padding-content[data-v-fadc493e]{padding:4px 0}.scrollbar[data-v-36af0016]{height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.scrollbar[data-v-36af0016] .el-scrollbar__wrap{overflow-x:hidden}.scrollbar[data-v-36af0016] .el-scrollbar__bar.is-vertical{width:4px;right:0}@media screen and (min-width:1920px){.all-menu-tree[data-v-36af0016]{width:1600px;-webkit-column-gap:24px;-moz-column-gap:24px;column-gap:24px}}@media screen and (max-width:1920px){.all-menu-tree[data-v-36af0016]{width:1420px;-webkit-column-gap:24px;-moz-column-gap:24px;column-gap:24px}}@media screen and (max-width:1600px){.all-menu-tree[data-v-36af0016]{width:1185px;-webkit-column-gap:16px;-moz-column-gap:16px;column-gap:16px}}@media screen and (max-width:1440px){.all-menu-tree[data-v-36af0016]{width:1066px;-webkit-column-gap:16px;-moz-column-gap:16px;column-gap:16px}}@media screen and (max-width:1366px){.all-menu-tree[data-v-36af0016]{width:994px;-webkit-column-gap:16px;-moz-column-gap:16px;column-gap:16px}}@media screen and (max-width:1280px){.all-menu-tree[data-v-36af0016]{width:948px;-webkit-column-gap:16px;-moz-column-gap:16px;column-gap:16px}}@media screen and (max-width:1024px){.all-menu-tree[data-v-36af0016]{width:750px;-webkit-column-gap:16px;-moz-column-gap:16px;column-gap:16px}}.cont[data-v-36af0016]{-webkit-column-break-inside:avoid;-moz-column-break-inside:avoid;break-inside:avoid}.cont>div[data-v-36af0016]:not(.list){line-height:normal}.list[data-v-36af0016]{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;height:38px;padding:0 8px;line-height:38px;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,微软雅黑,Arial,sans-serif;font-weight:400;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}.menu-title[data-v-36af0016]{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.child-content[data-v-36af0016]{margin-left:4px;width:176px}.padding-content[data-v-36af0016]{padding:4px 0}[data-v-36af0016] .el-dropdown{width:100%}[data-v-36af0016] .el-dropdown-menu__item:focus,[data-v-36af0016] .el-dropdown-menu__item:not(.is-disabled):hover{background:none}.el-dropdown-menu.el-popper.popover-menu{margin:0;padding:0;border:0}.el-dropdown-menu.el-popper.popover-menu .popper__arrow{display:none}.el-dropdown-menu.el-popper.popover-menu .el-dropdown-menu__item:focus,.el-dropdown-menu.el-popper.popover-menu .el-dropdown-menu__item:not(.is-disabled):hover{background:none}.menu-content[data-v-af1f0dce]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:16px 16px;list-style:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:12px;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.menu-content[data-v-af1f0dce] .el-input{width:40%}.tree-content[data-v-af1f0dce]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.popover-content[data-v-af1f0dce]{padding-bottom:20px}.tree-content[data-v-af1f0dce]::-webkit-scrollbar{display:none}.search-box[data-v-af1f0dce]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.search-box .recent-search[data-v-af1f0dce],.search-item-content[data-v-af1f0dce]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;overflow:hidden}.search-item-content[data-v-af1f0dce]{-ms-flex-wrap:wrap;flex-wrap:wrap}.search-box .recent-search-item[data-v-af1f0dce]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.recent-search-item-label[data-v-af1f0dce]{display:inline-block;word-break:keep-all;padding:2px 8px;margin:0 6px;line-height:16px;cursor:pointer}.search-box .el-icon-close[data-v-af1f0dce]{font-size:16px}.active-icon-right[data-v-af1f0dce]{display:none;position:absolute;right:20px;top:calc(50% - 6px)}[data-v-af1f0dce] .el-menu-item.is-active .active-icon-right{display:inline-block}.el-menu--collapse[data-v-af1f0dce] .el-menu-item .active-icon-right{display:none}@media screen and (min-width:1600px){.menu-content[data-v-af1f0dce]{font-size:13px}}.popover-menu[data-v-0d199d4f]{width:600px;position:fixed;z-index:101;top:0;height:100%;-webkit-box-shadow:0 0 16px -2px rgba(36,41,57,.24);box-shadow:0 0 16px -2px rgba(36,41,57,.24)}[data-v-2fe459c4] .el-menu{padding-top:4px}.icon[data-v-2fe459c4]{display:inline-block;text-align:center;vertical-align:middle}.el-menu--collapse[data-v-2fe459c4] .el-menu-item span{display:none}.popover-menu-item[data-v-2fe459c4]{position:relative;width:100%}.max-menu[data-v-2fe459c4]:first-of-type{margin:4px 0 8px}.max-menu[data-v-2fe459c4]{margin:8px 0}.carry-border[data-v-2fe459c4]{height:100%;position:relative}.carry-border[data-v-2fe459c4]:after{content:"";width:100%;height:1px;display:block;position:absolute;bottom:-4px;z-index:100}.active-icon-right[data-v-2fe459c4]{display:none}.fav-menu[data-v-2fe459c4]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.fav-menu-label[data-v-2fe459c4]{-webkit-box-flex:1;-ms-flex:1;flex:1}[data-v-2fe459c4] .el-menu-item.is-active .active-icon-right{display:inline-block}.el-menu--collapse[data-v-2fe459c4] .el-menu-item .active-icon-right,.el-menu--collapse[data-v-2fe459c4] .el-menu-item .el-icon-arrow-right{display:none}[data-v-2fe459c4] .el-dropdown{width:100%}.child-content[data-v-2fe459c4]{width:176px}.padding-content[data-v-2fe459c4]{padding:4px 0}.el-tooltip__popper.menu-tooltip{background-image:linear-gradient(179deg,rgba(67,76,106,.64),rgba(36,41,57,.8));border-radius:2px;padding:6px 4px;font-size:12px;margin-left:24px}.menu-tooltip .popper__arrow{display:none}.menu-title[data-v-3737178c]{display:-webkit-box;display:-ms-flexbox;display:flex}.el-menu-item[data-v-3737178c],[data-v-3737178c] .el-submenu__title{font-size:12px}.el-menu-item i[data-v-3737178c],[data-v-3737178c] .el-submenu__title i{color:inherit}.el-menu-top[data-v-6e71a736]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex}.custom-menu[data-v-6e71a736]{-ms-flex-negative:0;flex-shrink:0}.custom-menu .menu-item[data-v-6e71a736]:focus{background:none}.el-menu-top .custom-menu .all-menu-item[data-v-6e71a736]{margin:0 6px}.menu-item .menu-icon[data-v-6e71a736]{margin-right:6px}.fav-menus[data-v-6e71a736] .el-menu-item{vertical-align:none}.fav-menus[data-v-6e71a736] .padding-menu{display:inline-block}.more-menu[data-v-6e71a736],.more-menu i[data-v-6e71a736]{vertical-align:baseline}.fold-menu[data-v-6e71a736] .el-submenu__icon-arrow{display:none}.el-menu-item i[data-v-6e71a736],[data-v-6e71a736] .el-submenu__title i{color:inherit}.el-menu.not-show-active[data-v-6e71a736] .is-active,.el-menu.not-show-active[data-v-6e71a736] .is-active .el-submenu__title{background:inherit!important;color:inherit!important}.el-popover.popover-menu-container{width:100vw;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:0;padding:0;left:0!important;border:none}.popover-menu-container .popover-menu{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:280px;font-size:12px;-webkit-box-shadow:0 4px 8px 0 rgba(38,47,62,.04),0 8px 24px 0 rgba(38,47,62,.04);box-shadow:0 4px 8px 0 rgba(38,47,62,.04),0 8px 24px 0 rgba(38,47,62,.04);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.menu-nav[data-v-27afcd0e]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:16px}.menu-nav[data-v-27afcd0e] .el-breadcrumb{max-height:100%;overflow:hidden;word-break:keep-all}.el-icon-location-outline[data-v-27afcd0e]{margin-right:10px}[data-v-27afcd0e] .el-breadcrumb__inner.is-link{color:#1e222d;font-weight:400}[data-v-27afcd0e] .el-breadcrumb__item:last-child .el-breadcrumb__inner{font-size:12px}[data-v-27afcd0e] .el-breadcrumb__item:first-child .el-breadcrumb__inner{font-size:14px;color:#1e222d;font-weight:500}.svg-icon[data-v-5bd0ca0a]{width:1em;height:1em;vertical-align:-.15em;fill:currentColor;overflow:hidden}.menu-title[data-v-7756c278]{display:-webkit-box;display:-ms-flexbox;display:flex}.el-menu-item[data-v-7756c278],[data-v-7756c278] .el-submenu__title{font-size:12px}.el-menu-item i[data-v-7756c278],[data-v-7756c278] .el-submenu__title i{color:inherit}.el-menu--popup .carry-icon[data-v-7756c278]{padding:0 8px}.carry-icon>span[data-v-7756c278]{line-height:16px;margin-top:2px}[data-v-7756c278] .el-submenu__title .el-icon-arrow-down{display:none}.menu-title[data-v-247bc96a]{display:-webkit-box;display:-ms-flexbox;display:flex}.el-menu-item i[data-v-247bc96a],[data-v-247bc96a] .el-submenu__title i{color:inherit}.carry-icon[data-v-247bc96a]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.carry-icon>span[data-v-247bc96a]{line-height:16px;margin-top:2px}[data-v-247bc96a] .el-submenu__title .el-icon-arrow-down{display:none}.el-menu-top{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-menu-top>.el-menu-item>.carry-icon:after,.el-menu-top>.el-submenu>.el-submenu__title>.carry-icon:after{content:"";height:2px;width:67%;position:absolute;bottom:0;border-radius:1px}.splitpanes{display:flex;width:100%;height:100%}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;box-sizing:border-box;position:relative;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:after,.splitpanes.default-theme .splitpanes__splitter:before{content:"";position:absolute;top:50%;left:50%;background-color:rgba(0,0,0,.14901960784313725);transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:after,.splitpanes.default-theme .splitpanes__splitter:hover:before{background-color:rgba(0,0,0,.25098039215686274)}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after,.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after,.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.echarts{width:600px;height:400px} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/css/theme-colors-91d1495d.css b/server/internal/routers/vue/static/dist/css/theme-colors-91d1495d.css new file mode 100644 index 0000000..b46115e --- /dev/null +++ b/server/internal/routers/vue/static/dist/css/theme-colors-91d1495d.css @@ -0,0 +1,686 @@ +.primary-t{background:#303133} +.regular-t{background:#606266} +.secondary-t{background:#909398} +.el-pagination{color:#303133} +.el-pagination button:hover:not(:disabled){color:#409eff} +.el-pagination .btn-next,.el-pagination .btn-prev{color:#303133} +.el-pagination__sizes{color:#606266} +.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409eff} +.el-pagination__total{color:#606266} +.el-pagination__jump{color:#606266} +.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:#f4f4f5;color:#606266} +.el-pagination.is-background .el-pager li:not(.disabled):hover:not(.active){color:#409eff} +.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409eff} +.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{color:#303133} +.el-pager li:hover{color:#409eff} +.el-pager li.active{color:#409eff} +.el-dialog__headerbtn .el-dialog__close{color:#909399} +.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409eff} +.el-dialog__title{color:#303133} +.el-dialog__body{color:#606266} +.el-autocomplete-suggestion li{color:#606266} +.el-dropdown{color:#606266} +.el-dropdown-menu__item{color:#606266} +.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff} +.el-menu--horizontal>.el-menu-item{color:#909398} +.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133} +.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409eff;color:#303133} +.el-menu--horizontal>.el-submenu .el-submenu__title{color:#909398} +.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{color:#909398} +.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133} +.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{color:#303133} +.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409eff;color:#303133} +.el-menu-item{color:#303133} +.el-menu-item i{color:#909398} +.el-menu-item:focus,.el-menu-item:hover{background-color:#ecf5ff} +.el-menu-item.is-active{color:#409eff} +.el-submenu__title{color:#303133} +.el-submenu__title i{color:#909398} +.el-submenu__title:focus,.el-submenu__title:hover{background-color:#ecf5ff} +.el-submenu__title:hover{background-color:#ecf5ff} +.el-submenu.is-active .el-submenu__title{border-bottom-color:#409eff} +.el-menu-item-group__title{color:#909398} +.el-radio-button__inner{color:#606266} +.el-radio-button__inner:hover{color:#409eff} +.el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #409eff;box-shadow:-1px 0 0 0 #409eff} +.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff} +.el-switch__label{color:#303133} +.el-switch__label.is-active{color:#409eff} +.el-switch.is-checked .el-switch__core{border-color:#409eff;background-color:#409eff} +.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409eff} +.el-select-dropdown__item{color:#606266} +.el-select-dropdown__item.selected{color:#409eff} +.el-select-group__title{color:#909399} +.el-select .el-input__inner:focus{border-color:#409eff} +.el-select .el-input .el-select__caret.is-show-close:hover{color:#909398} +.el-select .el-input.is-focus .el-input__inner{border-color:#409eff} +.el-select__close:hover{color:#909398} +.el-select .el-tag__close.el-icon-close:hover{background-color:#909398} +.el-table{color:#606266} +.el-table__empty-text{color:#909398} +.el-table thead{color:#909398} +.el-table th.el-table__cell>.cell.highlight{color:#409eff} +.el-table__fixed-footer-wrapper tbody td.el-table__cell{color:#606266} +.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{color:#606266} +.el-table .ascending .sort-caret.ascending{border-bottom-color:#409eff} +.el-table .descending .sort-caret.descending{border-top-color:#409eff} +.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#ecf5ff} +.el-table__body tr.current-row>td.el-table__cell{background-color:#ecf5ff} +.el-table__column-filter-trigger i{color:#909399} +.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff} +.el-table-filter__list-item.is-active{background-color:#409eff} +.el-table-filter__bottom button{color:#606266} +.el-table-filter__bottom button:hover{color:#409eff} +.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266} +.el-date-table td.today span{color:#409eff} +.el-date-table td.available:hover{color:#409eff} +.el-date-table td.current:not(.disabled) span{background-color:#409eff} +.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409eff} +.el-date-table td.selected span{background-color:#409eff} +.el-date-table td.week{color:#606266} +.el-date-table th{color:#606266} +.el-month-table td.today .cell{color:#409eff} +.el-month-table td .cell{color:#606266} +.el-month-table td .cell:hover{color:#409eff} +.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{background-color:#409eff} +.el-month-table td.current:not(.disabled) .cell{color:#409eff} +.el-year-table .el-icon{color:#303133} +.el-year-table td.today .cell{color:#409eff} +.el-year-table td .cell{color:#606266} +.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409eff} +.el-date-range-picker__time-header>.el-icon-arrow-right{color:#303133} +.el-date-picker__header-label{color:#606266} +.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409eff} +.time-select-item.selected:not(.disabled){color:#409eff} +.el-date-editor .el-range-input{color:#606266} +.el-date-editor .el-range-separator{color:#303133} +.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#409eff} +.el-picker-panel{color:#606266} +.el-picker-panel__shortcut{color:#606266} +.el-picker-panel__shortcut:hover{color:#409eff} +.el-picker-panel__shortcut.active{color:#409eff} +.el-picker-panel__icon-btn{color:#303133} +.el-picker-panel__icon-btn:hover{color:#409eff} +.el-time-spinner__arrow{color:#909398} +.el-time-spinner__arrow:hover{color:#409eff} +.el-time-spinner__item{color:#606266} +.el-time-spinner__item.active:not(.disabled){color:#303133} +.el-time-panel__btn{color:#303133} +.el-time-panel__btn.confirm{color:#409eff} +.el-popover{color:#606266} +.el-popover__title{color:#303133} +.el-message-box__title{color:#303133} +.el-message-box__headerbtn .el-message-box__close{color:#909399} +.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409eff} +.el-message-box__content{color:#606266} +.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#f56c6c} +.el-message-box__status.el-icon-success{color:#67c23a} +.el-message-box__status.el-icon-info{color:#909399} +.el-message-box__status.el-icon-warning{color:#e6a23c} +.el-message-box__status.el-icon-error{color:#f56c6c} +.el-message-box__errormsg{color:#f56c6c} +.el-breadcrumb__inner{color:#606266} +.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:#303133} +.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409eff} +.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:#606266} +.el-form-item__label{color:#606266} +.el-form-item__error{color:#f56c6c} +.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{color:#f56c6c} +.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c} +.el-form-item.is-error .el-input__validateIcon{color:#f56c6c} +.el-tabs__active-bar{background-color:#409eff} +.el-tabs__new-tab:hover{color:#409eff} +.el-tabs__nav-next,.el-tabs__nav-prev{color:#909398} +.el-tabs__item{color:#303133} +.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409eff inset;box-shadow:inset 0 0 2px 2px #409eff} +.el-tabs__item.is-active{color:#409eff} +.el-tabs__item:hover{color:#409eff} +.el-tabs--border-card>.el-tabs__header .el-tabs__item{color:#909398} +.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409eff} +.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409eff} +.el-tree{color:#606266} +.el-tree__empty-text{color:#909398} +.el-tree__drop-indicator{background-color:#409eff} +.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409eff} +.el-alert--success.is-light{background-color:#f0f9eb;color:#67c23a} +.el-alert--success.is-light .el-alert__description{color:#67c23a} +.el-alert--success.is-dark{background-color:#67c23a} +.el-alert--info.is-light{background-color:#f4f4f5;color:#909399} +.el-alert--info.is-dark{background-color:#909399} +.el-alert--info .el-alert__description{color:#909399} +.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c} +.el-alert--warning.is-light .el-alert__description{color:#e6a23c} +.el-alert--warning.is-dark{background-color:#e6a23c} +.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c} +.el-alert--error.is-light .el-alert__description{color:#f56c6c} +.el-alert--error.is-dark{background-color:#f56c6c} +.el-notification__title{color:#303133} +.el-notification__content{color:#606266} +.el-notification__closeBtn{color:#909398} +.el-notification__closeBtn:hover{color:#606266} +.el-notification .el-icon-success{color:#67c23a} +.el-notification .el-icon-error{color:#f56c6c} +.el-notification .el-icon-info{color:#909399} +.el-notification .el-icon-warning{color:#e6a23c} +.el-input-number__decrease,.el-input-number__increase{color:#606266} +.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409eff} +.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409eff} +.el-tooltip__popper[x-placement^=top] .popper__arrow{border-top-color:#303133} +.el-tooltip__popper[x-placement^=top] .popper__arrow:after{border-top-color:#303133} +.el-tooltip__popper[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133} +.el-tooltip__popper[x-placement^=bottom] .popper__arrow:after{border-bottom-color:#303133} +.el-tooltip__popper[x-placement^=right] .popper__arrow{border-right-color:#303133} +.el-tooltip__popper[x-placement^=right] .popper__arrow:after{border-right-color:#303133} +.el-tooltip__popper[x-placement^=left] .popper__arrow{border-left-color:#303133} +.el-tooltip__popper[x-placement^=left] .popper__arrow:after{border-left-color:#303133} +.el-tooltip__popper.is-dark{background:#303133} +.el-tooltip__popper.is-light{border:1px solid #303133} +.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133} +.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133} +.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133} +.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133} +.el-slider__bar{background-color:#409eff} +.el-slider__button{border:2px solid #409eff} +.el-slider__marks-text{color:#909399} +.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409eff} +.el-loading-spinner .el-loading-text{color:#409eff} +.el-loading-spinner .path{stroke:#409eff} +.el-loading-spinner i{color:#409eff} +.el-upload__tip{color:#606266} +.el-upload--picture-card:hover,.el-upload:focus{border-color:#409eff;color:#409eff} +.el-upload:focus .el-upload-dragger{border-color:#409eff} +.el-upload-dragger .el-upload__text{color:#606266} +.el-upload-dragger .el-upload__text em{color:#409eff} +.el-upload-dragger:hover{border-color:#409eff} +.el-upload-dragger.is-dragover{border:2px dashed #409eff} +.el-upload-list__item{color:#606266} +.el-upload-list__item .el-icon-upload-success{color:#67c23a} +.el-upload-list__item .el-icon-close{color:#606266} +.el-upload-list__item .el-icon-close-tip{color:#409eff} +.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409eff} +.el-upload-list__item-name{color:#606266} +.el-upload-list__item-name [class^=el-icon]{color:#909398} +.el-upload-list__item-delete{color:#606266} +.el-upload-list__item-delete:hover{color:#409eff} +.el-upload-cover__title{color:#303133} +.el-progress__text{color:#606266} +.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a} +.el-progress.is-success .el-progress__text{color:#67c23a} +.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c} +.el-progress.is-warning .el-progress__text{color:#e6a23c} +.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c} +.el-progress.is-exception .el-progress__text{color:#f56c6c} +.el-progress-bar__inner{background-color:#409eff} +.el-message--info .el-message__content{color:#909399} +.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8} +.el-message--success .el-message__content{color:#67c23a} +.el-message--warning{background-color:#fdf6ec;border-color:#faecd8} +.el-message--warning .el-message__content{color:#e6a23c} +.el-message--error{background-color:#fef0f0;border-color:#fde2e2} +.el-message--error .el-message__content{color:#f56c6c} +.el-message__closeBtn:hover{color:#909398} +.el-message .el-icon-success{color:#67c23a} +.el-message .el-icon-error{color:#f56c6c} +.el-message .el-icon-info{color:#909399} +.el-message .el-icon-warning{color:#e6a23c} +.el-badge__content{background-color:#f56c6c} +.el-badge__content--primary{background-color:#409eff} +.el-badge__content--success{background-color:#67c23a} +.el-badge__content--warning{background-color:#e6a23c} +.el-badge__content--info{background-color:#909399} +.el-badge__content--danger{background-color:#f56c6c} +.el-card{color:#303133} +.el-step__head.is-process{color:#303133;border-color:#303133} +.el-step__head.is-success{color:#67c23a;border-color:#67c23a} +.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c} +.el-step__head.is-finish{color:#409eff;border-color:#409eff} +.el-step__title.is-process{color:#303133} +.el-step__title.is-success{color:#67c23a} +.el-step__title.is-error{color:#f56c6c} +.el-step__title.is-finish{color:#409eff} +.el-step__description.is-process{color:#303133} +.el-step__description.is-success{color:#67c23a} +.el-step__description.is-error{color:#f56c6c} +.el-step__description.is-finish{color:#409eff} +.el-collapse-item__header{color:#303133} +.el-collapse-item__header.focusing:focus:not(:hover){color:#409eff} +.el-collapse-item__content{color:#303133} +.el-tag:not(.el-tag--plain):not(.el-tag--dark):not(.el-tag--success):not(.el-tag--info):not(.el-tag--warning):not(.el-tag--danger){background-color:#ecf5ff;border-color:#d9ecff;color:#409eff} +.el-tag.is-hit{border-color:#409eff} +.el-tag .el-tag__close{color:#409eff} +.el-tag .el-tag__close:hover{background-color:#409eff} +.el-tag.el-tag--info:not(.el-tag--plain){background-color:#f4f4f5;border-color:#e9e9eb;color:#909399} +.el-tag.el-tag--info.is-hit{border-color:#909399} +.el-tag.el-tag--info .el-tag__close{color:#909399} +.el-tag.el-tag--info .el-tag__close:hover{background-color:#909399} +.el-tag.el-tag--success:not(.el-tag--plain){background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a} +.el-tag.el-tag--success.is-hit{border-color:#67c23a} +.el-tag.el-tag--success .el-tag__close{color:#67c23a} +.el-tag.el-tag--success .el-tag__close:hover{background-color:#67c23a} +.el-tag.el-tag--warning:not(.el-tag--plain){background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c} +.el-tag.el-tag--warning.is-hit{border-color:#e6a23c} +.el-tag.el-tag--warning .el-tag__close{color:#e6a23c} +.el-tag.el-tag--warning .el-tag__close:hover{background-color:#e6a23c} +.el-tag.el-tag--danger:not(.el-tag--plain){background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c} +.el-tag.el-tag--danger.is-hit{border-color:#f56c6c} +.el-tag.el-tag--danger .el-tag__close{color:#f56c6c} +.el-tag.el-tag--danger .el-tag__close:hover{background-color:#f56c6c} +.el-tag--dark{background-color:#409eff} +.el-tag--dark,.el-tag--dark.is-hit{border-color:#409eff} +.el-tag--dark .el-tag__close:hover{background-color:#66b1ff} +.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399} +.el-tag--dark.el-tag--info.is-hit{border-color:#909399} +.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a} +.el-tag--dark.el-tag--success.is-hit{border-color:#67c23a} +.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c} +.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c} +.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c} +.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c} +.el-tag--plain{border-color:#b3d8ff;color:#409eff} +.el-tag--plain.is-hit{border-color:#409eff} +.el-tag--plain .el-tag__close{color:#409eff} +.el-tag--plain .el-tag__close:hover{background-color:#409eff} +.el-tag--plain.el-tag--info{color:#909399} +.el-tag--plain.el-tag--info.is-hit{border-color:#909399} +.el-tag--plain.el-tag--info .el-tag__close{color:#909399} +.el-tag--plain.el-tag--info .el-tag__close:hover{background-color:#909399} +.el-tag--plain.el-tag--success{color:#67c23a} +.el-tag--plain.el-tag--success.is-hit{border-color:#67c23a} +.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a} +.el-tag--plain.el-tag--success .el-tag__close:hover{background-color:#67c23a} +.el-tag--plain.el-tag--warning{color:#e6a23c} +.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c} +.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c} +.el-tag--plain.el-tag--warning .el-tag__close:hover{background-color:#e6a23c} +.el-tag--plain.el-tag--danger{color:#f56c6c} +.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c} +.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c} +.el-tag--plain.el-tag--danger .el-tag__close:hover{background-color:#f56c6c} +.el-cascader .el-input .el-input__inner:focus{border-color:#409eff} +.el-cascader .el-input .el-icon-circle-close:hover{color:#909398} +.el-cascader .el-input.is-focus .el-input__inner{border-color:#409eff} +.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909398} +.el-cascader__suggestion-list{color:#606266} +.el-cascader__suggestion-item.is-checked{color:#409eff} +.el-cascader__search-input{color:#606266} +.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409eff;box-shadow:0 0 3px 2px #409eff} +.el-color-dropdown__btn:hover{color:#409eff;border-color:#409eff} +.el-color-dropdown__link-btn{color:#409eff} +.el-color-dropdown__link-btn:hover{color:tint(#409eff,20%)} +.el-textarea__inner{color:#606266} +.el-textarea__inner:focus{border-color:#409eff} +.el-textarea .el-input__count{color:#909399} +.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c} +.el-textarea.is-exceed .el-input__count{color:#f56c6c} +.el-input .el-input__clear:hover{color:#909398} +.el-input .el-input__count{color:#909399} +.el-input__inner{color:#606266} +.el-input__inner:focus{border-color:#409eff} +.el-input.is-active .el-input__inner{border-color:#409eff} +.el-input.is-exceed .el-input__inner{border-color:#f56c6c} +.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c} +.el-input-group__append,.el-input-group__prepend{color:#909399} +.el-transfer__button{background-color:#409eff} +.el-transfer-panel__item.el-checkbox{color:#606266} +.el-transfer-panel__item:hover{color:#409eff} +.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{color:#303133} +.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{color:#909398} +.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:#606266} +.el-transfer-panel .el-transfer-panel__empty{color:#909398} +.el-timeline-item__node--primary{background-color:#409eff} +.el-timeline-item__node--success{background-color:#67c23a} +.el-timeline-item__node--warning{background-color:#e6a23c} +.el-timeline-item__node--danger{background-color:#f56c6c} +.el-timeline-item__node--info{background-color:#909399} +.el-timeline-item__content{color:#303133} +.el-timeline-item__timestamp{color:#909398} +.el-link.is-underline:hover:after{border-bottom:1px solid #409eff} +.el-link.el-link--default{color:#606266} +.el-link.el-link--default:hover{color:#409eff} +.el-link.el-link--default:after{border-color:#409eff} +.el-link.el-link--primary{color:#409eff} +.el-link.el-link--primary:hover{color:#66b1ff} +.el-link.el-link--primary:after{border-color:#409eff} +.el-link.el-link--primary.is-disabled{color:#a0cfff} +.el-link.el-link--primary.is-underline:hover:after{border-color:#409eff} +.el-link.el-link--danger{color:#f56c6c} +.el-link.el-link--danger:after{border-color:#f56c6c} +.el-link.el-link--danger.is-underline:hover:after{border-color:#f56c6c} +.el-link.el-link--success{color:#67c23a} +.el-link.el-link--success:after{border-color:#67c23a} +.el-link.el-link--success.is-underline:hover:after{border-color:#67c23a} +.el-link.el-link--warning{color:#e6a23c} +.el-link.el-link--warning:after{border-color:#e6a23c} +.el-link.el-link--warning.is-underline:hover:after{border-color:#e6a23c} +.el-link.el-link--info{color:#909399} +.el-link.el-link--info:after{border-color:#909399} +.el-link.el-link--info.is-underline:hover:after{border-color:#909399} +.el-divider__text{color:#303133} +.el-image-viewer__close{background-color:#606266} +.el-image-viewer__actions{background-color:#606266} +.el-image-viewer__next,.el-image-viewer__prev{background-color:#606266} +.el-button:not(.el-button--primary):not(.el-button--success):not(.el-button--info):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){color:#606266} +.el-button:focus.el-button--default:not(.is-plain):not(.el-button--primary),.el-button:hover.el-button--default:not(.is-plain):not(.el-button--primary){color:#409eff;border-color:#c6e2ff;background-color:#ecf5ff} +.el-button:active.el-button--default:not(.is-plain):not(.el-button--primary){color:#3a8ee6;border-color:#3a8ee6} +.el-button.is-plain:focus.el-button--default,.el-button.is-plain:hover.el-button--default{border-color:#409eff;color:#409eff} +.el-button.is-active:not(.el-button--primary),.el-button.is-plain:active:not(.el-button--primary){border-color:#3a8ee6;color:#3a8ee6} +.el-button--primary{background-color:#409eff;border-color:#409eff} +.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff} +.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6} +.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{background-color:#a0cfff;border-color:#a0cfff} +.el-button--primary.is-plain{color:#409eff;background:#ecf5ff;border-color:#b3d8ff} +.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409eff;border-color:#409eff} +.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6} +.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff} +.el-button--success{background-color:#67c23a;border-color:#67c23a} +.el-button--success.is-plain{color:#67c23a;background:#f0f9eb} +.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67c23a;border-color:#67c23a} +.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{background-color:#f0f9eb;border-color:#e1f3d8} +.el-button--warning{background-color:#e6a23c;border-color:#e6a23c} +.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec} +.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c} +.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{background-color:#fdf6ec;border-color:#faecd8} +.el-button--danger{background-color:#f56c6c;border-color:#f56c6c} +.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0} +.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c} +.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{background-color:#fef0f0;border-color:#fde2e2} +.el-button--info{background-color:#909399;border-color:#909399} +.el-button--info.is-plain{color:#909399;background:#f4f4f5} +.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399} +.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{background-color:#f4f4f5;border-color:#e9e9eb} +.el-button--text{color:#409eff} +.el-button--text:focus,.el-button--text:hover{color:#66b1ff} +.el-button--text:active{color:#3a8ee6} +.el-calendar-table thead th{color:#606266} +.el-calendar-table td.is-today{color:#409eff} +.el-backtop{color:#409eff} +.el-page-header__content{color:#303133} +.el-checkbox{color:#606266} +.el-checkbox.is-bordered.is-checked{border-color:#409eff} +.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#409eff;border-color:#409eff} +.el-checkbox__input.is-checked+.el-checkbox__label{color:#409eff} +.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409eff} +.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409eff;border-color:#409eff} +.el-checkbox__inner:hover{border-color:#409eff} +.el-checkbox-button__inner{color:#606266} +.el-checkbox-button__inner:hover{color:#409eff} +.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:#409eff;border-color:#409eff;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff} +.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409eff} +.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409eff} +.el-radio{color:#606266} +.el-radio.is-bordered.is-checked{border-color:#409eff} +.el-radio__input.is-checked .el-radio__inner{border-color:#409eff;background:#409eff} +.el-radio__input.is-checked+.el-radio__label{color:#409eff} +.el-radio__input.is-focus .el-radio__inner{border-color:#409eff} +.el-radio__inner:hover{border-color:#409eff} +.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409eff;box-shadow:0 0 2px 2px #409eff} +.el-scrollbar__thumb{background-color:rgba(144,147,152,.3)} +.el-scrollbar__thumb:hover{background-color:rgba(144,147,152,.5)} +.el-cascader-menu{color:#606266} +.el-cascader-node.is-selectable.in-active-path{color:#606266} +.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409eff} +.el-empty__description p{color:#909398} +.el-descriptions{color:#303133} +.el-descriptions__body{color:#606266} +.el-descriptions-item__label.is-bordered-label{color:#909398} +.el-result__title p{color:#303133} +.el-result__subtitle p{color:#606266} +.el-result .icon-success{fill:#67c23a} +.el-result .icon-error{fill:#f56c6c} +.el-result .icon-info{fill:#909399} +.el-result .icon-warning{fill:#e6a23c} +html .dark.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active,html .dark.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark1.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active,html .dark1.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#409eff} +html .dark.primary-default.popover-menu .active-menu-item,html .dark1.primary-default.popover-menu .active-menu-item{background:#409eff} +html .dark.primary-default.popover-menu .recent-search-item-label,html .dark1.primary-default.popover-menu .recent-search-item-label{color:#409eff} +html .light.primary-default .active-color{color:#409eff} +html .light.primary-default:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter:after{background:#409eff} +html .light.primary-default .el-menu .el-menu-item.is-active,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title{color:#409eff} +html .light.primary-default .el-menu .el-menu-item.is-active .carry-icon:after,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon:after{background:#409eff} +html .light.primary-default.popover-menu .active-menu-content,html .light.primary-default.popover-menu .active-menu-item,html .light.primary-default.popover-menu .recent-search-item-label{color:#409eff} +html .light.primary-default .capsule-style .active-tag{color:#409eff} +html .dark.primary-default .custom-avatar,html .dark1.primary-default .custom-avatar,html .light.primary-default .custom-avatar{background-color:#409eff} +.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF} +.el-textarea__inner:focus{border-color:#409EFF} +.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C} +.el-textarea.is-exceed .el-input__count{color:#F56C6C} +.el-input__inner:focus{border-color:#409EFF} +.el-input.is-active .el-input__inner{border-color:#409EFF} +.el-input.is-exceed .el-input__inner{border-color:#F56C6C} +.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C} +.el-tag:not(.el-tag--plain):not(.el-tag--dark):not(.el-tag--success):not(.el-tag--info):not(.el-tag--warning):not(.el-tag--danger){background-color:#ecf5ff;border-color:#d9ecff;color:#409eff;color:#409EFF} +.el-tag.is-hit{border-color:#409EFF} +.el-tag.el-tag--success.is-hit{border-color:#67C23A} +.el-tag.el-tag--warning.is-hit{border-color:#E6A23C} +.el-tag.el-tag--danger.is-hit{border-color:#F56C6C} +.el-tag--dark{background-color:#409eff;border-color:#409eff} +.el-tag--dark.is-hit{border-color:#409EFF} +.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A} +.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C} +.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C} +.el-tag--plain.is-hit{border-color:#409EFF} +.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A} +.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C} +.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C} +.el-select-dropdown__item.selected{color:#409EFF} +.el-scrollbar__thumb{background-color:rgba(144,147,152,0.3)} +.el-scrollbar__thumb:hover{background-color:rgba(144,147,152,0.5)} +.el-select .el-input__inner:focus{border-color:#409EFF} +.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF} +.el-pagination button:hover:not(:disabled){color:#409EFF} +.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF} +.el-pagination.is-background .el-pager li:not(.disabled):hover:not(.active){color:#409EFF} +.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF} +.el-pager li:hover{color:#409EFF} +.el-pager li.active{color:#409EFF} +.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF} +.el-button:focus.el-button--default:not(.is-plain):not(.el-button--primary),.el-button:hover.el-button--default:not(.is-plain):not(.el-button--primary){color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff} +.el-button.is-plain:focus.el-button--default,.el-button.is-plain:hover.el-button--default{border-color:#409EFF;color:#409EFF} +.el-button.is-plain:active:not(.el-button--primary):not(.el-button--success):not(.el-button--info):not(.el-button--warning):not(.el-button--danger):not(.el-button--text){border-color:#3a8ee6;color:#3a8ee6} +.el-button.is-active{color:#3a8ee6;border-color:#3a8ee6} +.el-button--primary{background-color:#409EFF;border-color:#409EFF} +.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6} +.el-button--primary.is-active{background:#3a8ee6;border-color:#3a8ee6} +.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff} +.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF} +.el-button--success{background-color:#67C23A;border-color:#67C23A} +.el-button--success.is-plain{color:#67C23A;background:#f0f9eb} +.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A} +.el-button--warning{background-color:#E6A23C;border-color:#E6A23C} +.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec} +.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C} +.el-button--danger{background-color:#F56C6C;border-color:#F56C6C} +.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0} +.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C} +.el-button--text{color:#409EFF} +.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133} +.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133} +.el-menu-item.is-active{color:#409EFF} +.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF} +.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF} +.el-input-number__decrease:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled) ~ .el-input .el-input__inner:not(.is-disabled){border-color:#409EFF} +.el-radio.is-bordered.is-checked{border-color:#409EFF} +.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF} +.el-radio__input.is-checked+.el-radio__label{color:#409EFF} +.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF} +.el-radio__inner:hover{border-color:#409EFF} +.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px #409EFF} +.el-radio-button__inner:hover{color:#409EFF} +.el-radio-button__orig-radio:checked+.el-radio-button__inner{background-color:#409EFF;border-color:#409EFF;box-shadow:-1px 0 0 0 #409EFF} +.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){box-shadow:0 0 2px 2px #409EFF} +.el-checkbox.is-bordered.is-checked{border-color:#409EFF} +.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF} +.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF} +.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF} +.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF} +.el-checkbox__inner:hover{border-color:#409EFF} +.el-checkbox-button__inner:hover{color:#409EFF} +.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:#409EFF;border-color:#409EFF;box-shadow:-1px 0 0 0 #8cc5ff} +.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF} +.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF} +.el-switch__label.is-active{color:#409EFF} +.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF} +.el-tooltip__popper[x-placement^="top"] .popper__arrow{border-top-color:#303133} +.el-tooltip__popper[x-placement^="top"] .popper__arrow::after{border-top-color:#303133} +.el-tooltip__popper[x-placement^="bottom"] .popper__arrow{border-bottom-color:#303133} +.el-tooltip__popper[x-placement^="bottom"] .popper__arrow::after{border-bottom-color:#303133} +.el-tooltip__popper[x-placement^="right"] .popper__arrow{border-right-color:#303133} +.el-tooltip__popper[x-placement^="right"] .popper__arrow::after{border-right-color:#303133} +.el-tooltip__popper[x-placement^="left"] .popper__arrow{border-left-color:#303133} +.el-tooltip__popper[x-placement^="left"] .popper__arrow::after{border-left-color:#303133} +.el-tooltip__popper.is-light[x-placement^="top"] .popper__arrow{border-top-color:#303133} +.el-tooltip__popper.is-light[x-placement^="bottom"] .popper__arrow{border-bottom-color:#303133} +.el-tooltip__popper.is-light[x-placement^="left"] .popper__arrow{border-left-color:#303133} +.el-tooltip__popper.is-light[x-placement^="right"] .popper__arrow{border-right-color:#303133} +.el-table th.el-table__cell>.cell.highlight{color:#409EFF} +.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF} +.el-table .descending .sort-caret.descending{border-top-color:#409EFF} +.el-table-filter__list-item.is-active{background-color:#409EFF} +.el-table-filter__bottom button:hover{color:#409EFF} +.el-date-table td.today span{color:#409EFF} +.el-date-table td.available:hover{color:#409EFF} +.el-date-table td.current:not(.disabled) span{background-color:#409EFF} +.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF} +.el-date-table td.selected span{background-color:#409EFF} +.el-month-table td.today .cell{color:#409EFF} +.el-month-table td .cell:hover{color:#409EFF} +.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{background-color:#409EFF} +.el-month-table td.current:not(.disabled) .cell{color:#409EFF} +.el-year-table td.today .cell{color:#409EFF} +.el-year-table td .cell:hover{color:#409EFF} +.el-year-table td.current:not(.disabled) .cell{color:#409EFF} +.el-time-spinner__arrow:hover{color:#409EFF} +.el-range-editor.is-active{border-color:#409EFF} +.el-range-editor.is-active:hover{border-color:#409EFF} +.el-picker-panel__shortcut:hover{color:#409EFF} +.el-picker-panel__shortcut.active{color:#409EFF} +.el-picker-panel__icon-btn:hover{color:#409EFF} +.el-date-picker__header-label:hover{color:#409EFF} +.el-date-picker__header-label.active{color:#409EFF} +.el-time-panel__btn.confirm{color:#409EFF} +.time-select-item.selected:not(.disabled){color:#409EFF} +.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF} +.el-message-box__input input.invalid{border-color:#F56C6C} +.el-message-box__input input.invalid:focus{border-color:#F56C6C} +.el-message-box__status.el-icon-success{color:#67C23A} +.el-message-box__status.el-icon-warning{color:#E6A23C} +.el-message-box__status.el-icon-error{color:#F56C6C} +.el-message-box__errormsg{color:#F56C6C} +.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF} +.el-form-item__error{color:#F56C6C} +.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{color:#F56C6C} +.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#F56C6C} +.el-form-item.is-error .el-input__validateIcon{color:#F56C6C} +.el-tabs__active-bar{background-color:#409EFF} +.el-tabs__new-tab:hover{color:#409EFF} +.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:0 0 2px 2px #409EFF inset} +.el-tabs__item.is-active{color:#409EFF} +.el-tabs__item:hover{color:#409EFF} +.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF} +.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF} +.el-tree__drop-indicator{background-color:#409EFF} +.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF} +.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A} +.el-alert--success.is-light .el-alert__description{color:#67C23A} +.el-alert--success.is-dark{background-color:#67C23A} +.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C} +.el-alert--warning.is-light .el-alert__description{color:#E6A23C} +.el-alert--warning.is-dark{background-color:#E6A23C} +.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C} +.el-alert--error.is-light .el-alert__description{color:#F56C6C} +.el-alert--error.is-dark{background-color:#F56C6C} +.el-notification .el-icon-success{color:#67C23A} +.el-notification .el-icon-error{color:#F56C6C} +.el-notification .el-icon-warning{color:#E6A23C} +.el-slider__bar{background-color:#409EFF} +.el-slider__button{border:solid 2px #409EFF} +.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF} +.el-loading-spinner .el-loading-text{color:#409EFF} +.el-loading-spinner .path{stroke:#409EFF} +.el-loading-spinner i{color:#409EFF} +.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A} +.el-progress.is-success .el-progress__text{color:#67C23A} +.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C} +.el-progress.is-warning .el-progress__text{color:#E6A23C} +.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C} +.el-progress.is-exception .el-progress__text{color:#F56C6C} +.el-progress-bar__inner{background-color:#409EFF} +.el-upload--picture-card:hover{border-color:#409EFF;color:#409EFF} +.el-upload:focus{border-color:#409EFF;color:#409EFF} +.el-upload:focus .el-upload-dragger{border-color:#409EFF} +.el-upload-dragger .el-upload__text em{color:#409EFF} +.el-upload-dragger:hover{border-color:#409EFF} +.el-upload-dragger.is-dragover{border:2px dashed #409EFF} +.el-upload-list__item .el-icon-upload-success{color:#67C23A} +.el-upload-list__item .el-icon-close-tip{color:#409EFF} +.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF} +.el-upload-list__item-name [class^="el-icon"]{color:#909398} +.el-upload-list__item-delete:hover{color:#409EFF} +.el-message--success .el-message__content{color:#67C23A} +.el-message--warning .el-message__content{color:#E6A23C} +.el-message--error .el-message__content{color:#F56C6C} +.el-message .el-icon-success{color:#67C23A} +.el-message .el-icon-error{color:#F56C6C} +.el-message .el-icon-warning{color:#E6A23C} +.el-badge__content{background-color:#F56C6C} +.el-badge__content--primary{background-color:#409EFF} +.el-badge__content--success{background-color:#67C23A} +.el-badge__content--warning{background-color:#E6A23C} +.el-badge__content--danger{background-color:#F56C6C} +.el-step__head.is-success{color:#67C23A;border-color:#67C23A} +.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C} +.el-step__head.is-finish{color:#409EFF;border-color:#409EFF} +.el-step__title.is-success{color:#67C23A} +.el-step__title.is-error{color:#F56C6C} +.el-step__title.is-finish{color:#409EFF} +.el-step__description.is-success{color:#67C23A} +.el-step__description.is-error{color:#F56C6C} +.el-step__description.is-finish{color:#409EFF} +.el-collapse-item__header.focusing:focus:not(:hover){color:#409EFF} +.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF} +.el-cascader .el-input .el-input__inner:focus{border-color:#409EFF} +.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF} +.el-cascader__suggestion-item.is-checked{color:#409EFF} +.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px #409EFF} +.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF} +.el-color-dropdown__link-btn{color:#409EFF} +.el-color-dropdown__link-btn:hover{color:tint(#409EFF, 20%)} +.el-transfer__button{background-color:#409EFF} +.el-transfer-panel__item:hover{color:#409EFF} +.el-timeline-item__node--primary{background-color:#409EFF} +.el-timeline-item__node--success{background-color:#67C23A} +.el-timeline-item__node--warning{background-color:#E6A23C} +.el-timeline-item__node--danger{background-color:#F56C6C} +.el-link.is-underline:hover:after{border-bottom:1px solid #409EFF} +.el-link.el-link--default:hover{color:#409EFF} +.el-link.el-link--default:after{border-color:#409EFF} +.el-link.el-link--primary{color:#409EFF} +.el-link.el-link--primary:after{border-color:#409EFF} +.el-link.el-link--primary.is-underline:hover:after{border-color:#409EFF} +.el-link.el-link--danger{color:#F56C6C} +.el-link.el-link--danger:after{border-color:#F56C6C} +.el-link.el-link--danger.is-underline:hover:after{border-color:#F56C6C} +.el-link.el-link--success{color:#67C23A} +.el-link.el-link--success:after{border-color:#67C23A} +.el-link.el-link--success.is-underline:hover:after{border-color:#67C23A} +.el-link.el-link--warning{color:#E6A23C} +.el-link.el-link--warning:after{border-color:#E6A23C} +.el-link.el-link--warning.is-underline:hover:after{border-color:#E6A23C} +.el-image-viewer__prev{background-color:#606266} +.el-image-viewer__next{background-color:#606266} +.el-calendar-table td.is-today{color:#409EFF} +.el-backtop{color:#409EFF} +.el-result .icon-success{fill:#67C23A} +.el-result .icon-error{fill:#F56C6C} +.el-result .icon-warning{fill:#E6A23C} +html .dark.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div,html .dark1.primary-default .el-menu--popup .el-menu-item.is-active>div,html .dark1.primary-default .el-menu--popup .el-submenu.is-active .el-submenu__title>div{background:#409EFF} +html .dark.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active,html .dark1.primary-default .custom-aside .el-menu.tree-aside .el-submenu .el-menu-item.is-active{background:#409EFF} +html .dark.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active,html .dark1.primary-default .custom-aside .combined-aside .el-menu .el-menu-item.is-active{background:#409EFF} +html .dark.primary-default.popover-menu .active-menu-item,html .dark1.primary-default.popover-menu .active-menu-item{background:#409EFF} +html .dark.primary-default.popover-menu .recent-search-item-label,html .dark1.primary-default.popover-menu .recent-search-item-label{color:#409EFF} +html .light.primary-default .active-color{color:#409EFF} +html .light.primary-default:not(.custom-header) .el-menu:not(.el-menu--popup) .el-menu-item.is-active .hasAfter::after{background:#409EFF} +html .light.primary-default .el-menu .el-menu-item.is-active,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title{color:#409EFF} +html .light.primary-default .el-menu .el-menu-item.is-active .carry-icon::after,html .light.primary-default .el-menu .el-submenu.is-active>.el-submenu__title .carry-icon::after{background:#409EFF} +html .light.primary-default.popover-menu .active-menu-content,html .light.primary-default.popover-menu .active-menu-item,html .light.primary-default.popover-menu .recent-search-item-label{color:#409EFF} +html .light.primary-default .capsule-style .active-tag{color:#409EFF} +html .dark.primary-default .custom-avatar,html .dark1.primary-default .custom-avatar,html .light.primary-default .custom-avatar{background-color:#409EFF} \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/error/401.html b/server/internal/routers/vue/static/dist/error/401.html new file mode 100644 index 0000000..c62e659 --- /dev/null +++ b/server/internal/routers/vue/static/dist/error/401.html @@ -0,0 +1,114 @@ + + + + + 401 + + + + + + + 401 + + + + + + + + + + +
+

授权过期,请重新登录

+ 返回首页 +
+ + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/error/403.html b/server/internal/routers/vue/static/dist/error/403.html new file mode 100644 index 0000000..e508939 --- /dev/null +++ b/server/internal/routers/vue/static/dist/error/403.html @@ -0,0 +1,114 @@ + + + + + 401 + + + + + + + 权限不足 + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/error/404.html b/server/internal/routers/vue/static/dist/error/404.html new file mode 100644 index 0000000..60572eb --- /dev/null +++ b/server/internal/routers/vue/static/dist/error/404.html @@ -0,0 +1,114 @@ + + + + + 404 + + + + + + + 404 + + + + + + + + + + +
+

页面未找到

+ 返回首页 +
+ + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/error/500.html b/server/internal/routers/vue/static/dist/error/500.html new file mode 100644 index 0000000..9a80e4e --- /dev/null +++ b/server/internal/routers/vue/static/dist/error/500.html @@ -0,0 +1,114 @@ + + + + + 500 + + + + + + + 500 + + + + + + + + + + +
+

访问出错了!

+ 返回首页 +
+ + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/error/error-bg.svg b/server/internal/routers/vue/static/dist/error/error-bg.svg new file mode 100644 index 0000000..8e79ad1 --- /dev/null +++ b/server/internal/routers/vue/static/dist/error/error-bg.svg @@ -0,0 +1,125 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/favicon.ico b/server/internal/routers/vue/static/dist/favicon.ico new file mode 100644 index 0000000..f286b88 Binary files /dev/null and b/server/internal/routers/vue/static/dist/favicon.ico differ diff --git a/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.674f50d2.eot b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.674f50d2.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.674f50d2.eot differ diff --git a/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.af7ae505.woff2 b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.af7ae505.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.af7ae505.woff2 differ diff --git a/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.b06871f2.ttf b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.b06871f2.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.b06871f2.ttf differ diff --git a/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.fee66e71.woff b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.fee66e71.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/server/internal/routers/vue/static/dist/fonts/fontawesome-webfont.fee66e71.woff differ diff --git a/server/internal/routers/vue/static/dist/framework/appPaas/checkconfig.json b/server/internal/routers/vue/static/dist/framework/appPaas/checkconfig.json new file mode 100644 index 0000000..f32a580 --- /dev/null +++ b/server/internal/routers/vue/static/dist/framework/appPaas/checkconfig.json @@ -0,0 +1 @@ +true \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/framework/appPaas/projects.json b/server/internal/routers/vue/static/dist/framework/appPaas/projects.json new file mode 100644 index 0000000..98cba74 --- /dev/null +++ b/server/internal/routers/vue/static/dist/framework/appPaas/projects.json @@ -0,0 +1,15 @@ +[{ + "id": 13, + "name": "凤巢研发平台", + "tenantId": 1, + "environments": [ + { + "id": 5, + "name": "开发环境" + }, + { + "id": 9, + "name": "正式环境" + } + ] + }] \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/framework/appPaas/roles.json b/server/internal/routers/vue/static/dist/framework/appPaas/roles.json new file mode 100644 index 0000000..90815d4 --- /dev/null +++ b/server/internal/routers/vue/static/dist/framework/appPaas/roles.json @@ -0,0 +1,8 @@ +{ + "code": 20000, + "msg": "成功", + "data": { + "roleCode": "M-S-MANAGER" + }, + "traceId": "" + } \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/img/45e21c93b8f1cc0d3466ea59170f18e7.png b/server/internal/routers/vue/static/dist/img/45e21c93b8f1cc0d3466ea59170f18e7.png new file mode 100644 index 0000000..561e840 Binary files /dev/null and b/server/internal/routers/vue/static/dist/img/45e21c93b8f1cc0d3466ea59170f18e7.png differ diff --git a/server/internal/routers/vue/static/dist/img/760bd83ee04dff470e0277f3eb7deebe.svg b/server/internal/routers/vue/static/dist/img/760bd83ee04dff470e0277f3eb7deebe.svg new file mode 100644 index 0000000..97715cf --- /dev/null +++ b/server/internal/routers/vue/static/dist/img/760bd83ee04dff470e0277f3eb7deebe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/img/925c4d3b1235f7ec344ab3211f65a1b3.png b/server/internal/routers/vue/static/dist/img/925c4d3b1235f7ec344ab3211f65a1b3.png new file mode 100644 index 0000000..a36b1e6 Binary files /dev/null and b/server/internal/routers/vue/static/dist/img/925c4d3b1235f7ec344ab3211f65a1b3.png differ diff --git a/server/internal/routers/vue/static/dist/index.html b/server/internal/routers/vue/static/dist/index.html new file mode 100644 index 0000000..0493e33 --- /dev/null +++ b/server/internal/routers/vue/static/dist/index.html @@ -0,0 +1,116 @@ +inms-web
\ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/js/app.236063e9.js b/server/internal/routers/vue/static/dist/js/app.236063e9.js new file mode 100644 index 0000000..f2b9bde --- /dev/null +++ b/server/internal/routers/vue/static/dist/js/app.236063e9.js @@ -0,0 +1,17 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["app"],{0:function(e,t,n){e.exports=n("56d7")},"0162":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-delete-no",use:"icon-delete-no-usage",viewBox:"0 0 16 16",content:''});i.a.add(c);t["default"]=c},"019c":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-no-data",use:"icon-no-data-usage",viewBox:"0 0 250 179",content:''});i.a.add(c);t["default"]=c},"01c8":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-set_hover",use:"icon-set_hover-usage",viewBox:"0 0 15 15",content:''});i.a.add(c);t["default"]=c},"0331":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-single",use:"icon-single-usage",viewBox:"0 0 14 14",content:'告警实时监控'});i.a.add(c);t["default"]=c},"04bf":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-open-message",use:"icon-open-message-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"08ad":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-enlarge",use:"icon-enlarge-usage",viewBox:"0 0 15 15",content:''});i.a.add(c);t["default"]=c},"0ab2":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-share-no",use:"icon-share-no-usage",viewBox:"0 0 16 16",content:''});i.a.add(c);t["default"]=c},"0b60":function(e,t,n){"use strict";n.r(t),t["default"]="data:image/jpeg;base64,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"},"0c1d":function(e,t,n){"use strict";n("7456")},"0c65":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-single_hover",use:"icon-single_hover-usage",viewBox:"0 0 14 14",content:'告警实时监控'});i.a.add(c);t["default"]=c},"0e58c":function(e,t,n){"use strict";var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"lock-container"},[t("div",{staticClass:"lock-form"},[t("div",[t("h3",[e._v(" "+e._s(e.userId)+" ")]),t("el-form",{ref:"form",attrs:{inline:"",model:e.form}},[t("el-form-item",{attrs:{prop:"passwd",rules:[{required:!0,message:"请输入登录密码"}]}},[t("el-input",{staticStyle:{width:"200px"},attrs:{placeholder:"请输入登录密码",type:"password"},model:{value:e.form.passwd,callback:function(t){e.$set(e.form,"passwd",t)},expression:"form.passwd"}})],1),t("el-form-item",{attrs:{prop:"verify",rules:[{required:!0,message:"请输入验证码"}]}},[t("div",{staticStyle:{display:"flex","text-align":"center","align-items":"center"}},[t("el-input",{staticStyle:{width:"102px"},attrs:{type:"text",placeholder:"验证码"},model:{value:e.form.verify,callback:function(t){e.$set(e.form,"verify",t)},expression:"form.verify"}}),t("img",{staticClass:"verifyImg",attrs:{id:"captchaImg",src:e.captchaUrl},on:{click:e.setCaptchUrl}}),t("el-button-group",{staticStyle:{"margin-left":"10px"}},[t("el-button",{on:{click:e.handleLogin}},[t("svg-icon",{attrs:{"icon-class":"deblocking"}})],1),t("el-button",{on:{click:e.handleLogout}},[t("svg-icon",{attrs:{"icon-class":"lockOut"}})],1)],1)],1)])],1)],1)])])},o=[],a=n("5880"),i=n("ad0c"),c=n("8bbf"),s=n.n(c);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */u=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(I){c=function(e,t,n){return e[t]=n}}function s(e,t,n,r){var o=t&&t.prototype instanceof h?t:h,a=Object.create(o.prototype),i=new O(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return A()}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var c=E(i,n);if(c){if(c===d)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=f(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===d)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(I){return{type:"throw",arg:I}}}e.wrap=s;var d={};function h(){}function p(){}function v(){}var g={};c(g,o,(function(){return this}));var m=Object.getPrototypeOf,y=m&&m(m(L([])));y&&y!==t&&n.call(y,o)&&(g=y);var w=v.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(o,a,i,c){var s=f(e[o],e,a);if("throw"!==s.type){var u=s.arg,d=u.value;return d&&"object"==l(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,c)}),(function(e){r("throw",e,i,c)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,c)}))}c(s.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function E(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,E(e,t),"throw"===t.method))return d;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var r=f(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,d;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(c&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;M(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),d}},e}function f(e,t,n,r,o,a,i){try{var c=e[a](i),s=c.value}catch(l){return void n(l)}c.done?t(s):Promise.resolve(s).then(r,o)}function d(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function i(e){f(a,r,o,i,c,"next",e)}function c(e){f(a,r,o,i,c,"throw",e)}i(void 0)}))}}function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t'});i.a.add(c);t["default"]=c},"18a8":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-shouye",use:"icon-shouye-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"1afd":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-search-no",use:"icon-search-no-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"1c4c":function(e,t,n){"use strict";n.r(t);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"framework"},[t("router-view"),e.isLock&&e.islogon?t("LockPage",{staticClass:"lock-page"}):e._e()],1)},o=[],a=n("6ef1"),i=a["a"],c=(n("10ec"),n("9173")),s=Object(c["a"])(i,r,o,!1,null,"0d7d287a",null);t["default"]=s.exports},"1cb3":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n("8bbf"),o=n.n(r);function a(){if(o.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){var e=o.a.prototype.$config.PERMISSIONSYSTEM.URL_MENUS;return o.a.axios.get(e).then((function(e){return e}))}return o.a.axios.get("configs/menuconfig.json?_="+(new Date).getTime()).then((function(e){return e.data}))}},"1df2":function(e,t,n){},"1eae":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-enlarge_hover",use:"icon-enlarge_hover-usage",viewBox:"0 0 15 15",content:''});i.a.add(c);t["default"]=c},"1f30":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-light-selected",use:"icon-light-selected-usage",viewBox:"0 0 14 14",content:''});i.a.add(c);t["default"]=c},"1fa4":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-enter",use:"icon-enter-usage",viewBox:"0 0 10 13",content:''});i.a.add(c);t["default"]=c},"1fed":function(e,t,n){"use strict";n.r(t);var r=n("48c4"),o=n("8bbf"),a=n.n(o);a.a.config.errorHandler=function(e,t,n){r["a"].dispatch("errorLog/addErrorLog",{err:e,info:n,url:window.location.href})}},2:function(e,t){},"202f":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-xitong",use:"icon-xitong-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},2034:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-compare",use:"icon-compare-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"21f1":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-deblocking",use:"icon-deblocking-usage",viewBox:"0 0 1055 1024",content:''});i.a.add(c);t["default"]=c},"222d":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-home",use:"icon-home-usage",viewBox:"0 0 1025 1024",content:''});i.a.add(c);t["default"]=c},2415:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-view-audit",use:"icon-view-audit-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"25ad":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-zhishiku",use:"icon-zhishiku-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"2af2":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-design",use:"icon-design-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},3:function(e,t){},3001:function(e,t,n){"use strict";(function(e){var r=n("cc86"),o=n.n(r),a=n("98df");n("c071");function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}var c=0;function s(e){c||e.prototype.$Progress.start(),c++}function l(e){c--,c<=0&&(e.prototype.$Progress.finish(),c=0)}function u(e){e.prototype.$Progress.error(),c=0}t["a"]={install:function(t,n){var r=function(r,o,a){if(r=parseInt(r),e.isEqual(2e4,r)||e.isEqual(200,r))return a&&a.loading&&l(),n.dispatch("global/receiveResponse"),o instanceof Blob||o+""==="[object Blob]"?o:o.data;if(!e.isEqual(30002,r)){if([30004,30005,30006].includes(r))return o;if(e.isEqual(50004,r)||e.isEqual(700,r))return n.dispatch("global/receiveResponse"),Promise.reject(o.meta.message);var i="后台服务异常",c="";return c=o.meta?o.meta.message||"":o.msg||o.message||o.data||"",c&&e.isString(c)&&(i=c),t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:i,duration:5e3}),a&&a.loading&&u(),n.dispatch("global/receiveResponse"),Promise.reject(i)}n.dispatch("user/clearLoginData"),window.location.reload()},c=function(e,o,a){var i="";if(a&&a.baseURL&&a.url&&(i=a.baseURL+a.url),2!==Math.floor(e/100)){if(401===e){if(window.self!==window.top)return null===o||void 0===o?void 0:o.data;t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:"认证失败或者token过期,请尝试重新登陆!",duration:5e3}),setTimeout((function(){n.dispatch("user/clearLoginData"),"/login"!==t.prototype.$routePath&&window.location.reload()}),2e3)}else 404===e?t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:i+"未找到",duration:5e3}):600===e?t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:i+"取消重复请求",duration:5e3}):700===e?t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:i+"取消未完成请求",duration:5e3}):t.prototype.$config.ERRORSERVICE&&Notification.error({title:"错误",message:i+"后台服务异常",duration:5e3});return a&&a.loading&&u(),n.dispatch("global/receiveResponse"),Promise.reject(new Error("后台服务异常"))}return o instanceof Blob||o+""==="[object Blob]"?(a&&a.loading&&l(),n.dispatch("global/receiveResponse"),o):o.code?r(o.code,o,a):o.meta&&o.meta.code?r(o.meta.code,o,a):(a&&a.loading&&l(),n.dispatch("global/receiveResponse"),o)},f=t.prototype.$config,d=t.prototype.$config,h=o.a.create({baseURL:f.BASE_URL,timeout:f.TIMEOUT||5e3});h.pending={};var p=o.a.CancelToken;h.removePending=function(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];h.pending[e]&&n&&(r?h.pending[e](600):h.pending[e](700),l(t)),delete h.pending[e]};var v=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.url;return n=t?e.url:e.url.replace(e.baseURL,""),e.params&&e.params._&&delete e.params._,"get"===e.method?encodeURI(n+JSON.stringify(e.params)):encodeURI(n+JSON.stringify(e.data))};h.cancelService=function(e){var t=v(e,!0);h.removePending(t,!0)},h.interceptors.request.use((function(r){var o;if(!1!==(null===(o=r.headers)||void 0===o?void 0:o.cancelToken)){var a=v(r,!0);h.removePending(a,!0),r.cancelToken=new p((function(e){h.pending[a]=e}))}s(t),n.dispatch("global/sendRequest"),r.useCustomToken||("params"in r?e.merge(r.params,{_:(new Date).getTime()}):e.merge(r,{params:{_:(new Date).getTime()}})),r.url.includes("?")&&(r.params=t.prototype.$utils.getUrlVars(r.url),e.merge(r.params,{_:(new Date).getTime()}),r.url=r.url.slice(0,r.url.indexOf("?")));var i,c,l,u=null;(!t.prototype.$config.PERMISSIONSYSTEM_ENABLE&&t.prototype.$config.PERMISSIONSYSTEM.CONF_TOKEN?u=t.prototype.$config.PERMISSIONSYSTEM.CONF_TOKEN:localStorage.getItem("inmsToken")&&(u="Bearer "+localStorage.getItem("inmsToken")),u)&&(null!==(i=r.headers)&&void 0!==i&&i.Workspaceid?e.merge(r.headers,{Authorization:u}):e.merge(r.headers,{Authorization:u,Workspaceid:null===(c=t.prototype.$store.getters)||void 0===c||null===(l=c["user/curWorkspace"])||void 0===l?void 0:l.id}));if(e.merge(r.headers,{phoenix:"phoenixOrg"}),e.merge(r.headers,{token:u}),r.headers&&r.headers.responseTagrget&&(r.responseTagrget=r.headers.responseTagrget,delete r.headers.responseTagrget),!0===d.useUrlMap){var f=d.urlMap||[],g=r.baseURL,m=r.url,y=g+m,w=f.find((function(e){return y.includes(e.prefix)})),b=window.location.hostname,S=window.location.protocol+"//";if(w){r.baseURL="";var E="".concat(S).concat(b,":").concat(w.port).concat(y);if(null!==w&&void 0!==w&&w.pathRewrite){var x=Object.keys(null===w||void 0===w?void 0:w.pathRewrite);x.forEach((function(e){E=E.replace(e,null===w||void 0===w?void 0:w.pathRewrite[e])}))}return r.url=E,r}return r}return r}),(function(e){a["a"].error(e),Promise.reject(e)})),h.interceptors.response.use((function(e){var t=e.config.responseTagrget,n=t&&"object"===i(t)?t.successTagrget:t;return"all"===n?e:"data"===n?e.data:c(e.status,e.data,e.config)}),(function(e){var t,n,r=e.config||{},o=r.responseTagrget,a=o&&"object"===i(o)?o.errorTagrget:o;return"all"===a?Promise.reject(e):"data"===a?Promise.reject(e&&e.response):c((null===e||void 0===e||null===(t=e.response)||void 0===t?void 0:t.status)||e.message,e.message||(null===e||void 0===e||null===(n=e.response)||void 0===n?void 0:n.data),e.config?e.config:e)})),t.axios=h,Object.defineProperties(t.prototype,{$axios:{get:function(){return h}}})}}}).call(this,n("e4be"))},"316b":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-download",use:"icon-download-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"3ac5":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-search",use:"icon-search-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},4:function(e,t){},4578:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-play",use:"icon-play-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"48c4":function(e,t,n){"use strict";var r={logs:[]},o={ADD_ERROR_LOG:function(e,t){e.logs.push(t)},CLEAR_ERROR_LOG:function(e){e.logs.splice(0)}},a={addErrorLog:function(e,t){var n=e.commit;n("ADD_ERROR_LOG",t)},clearErrorLog:function(e){var t=e.commit;t("CLEAR_ERROR_LOG")}},i={namespaced:!0,state:r,mutations:o,actions:a},c={catchArr:function(e){return e.viewCache.catchArr},userId:function(e){return e.user.userId},currentUser:function(e){return e.user.currentUser},inmsToken:function(e){return e.user.inmsToken},errorLogs:function(e){return e.errorLog.logs},sysName:function(e){return e.system.name},sysVersion:function(e){return e.system.version},buttons:function(e){return e.user.buttons}},s=c,l={namespaced:!0,state:{reqCount:0},mutations:{SEND_REQ:function(e){return e.reqCount+=1},RECEIVE_RES:function(e){return e.reqCount-=1}},getters:{isLoading:function(e){return e.reqCount>0}},actions:{sendRequest:function(e){var t=e.commit;t("SEND_REQ")},receiveResponse:function(e){var t=e.commit;t("RECEIVE_RES")}}},u={namespaced:!0,state:{pageHeight:window.innerHeight,showTab:!0,layout:"",overallStyle:"",primaryColor:{},tabStyle:{},asideWidth:0},mutations:{SET_PAGEHEIGHT:function(e,t){e.pageHeight=t},SET_SHOWTAB:function(e,t){e.showTab=t},SET_LAYOUT:function(e,t){e.layout=t},SET_OVERALLSTYLE:function(e,t){e.overallStyle=t},SET_PRIMARYCOLOR:function(e,t){e.primaryColor=t},SET_ASIDEWIDTH:function(e,t){e.asideWidth=t},SET_TABSTYLE:function(e,t){e.tabStyle=t}},getters:{getPageHeight:function(e){return e.pageHeight-(e.showTab?50:0)},getShowTab:function(e){return e.showTab},getLayout:function(e){return e.layout},getOverallStyle:function(e){return e.overallStyle},getPrimaryColor:function(e){return e.primaryColor},getTabStyle:function(e){return e.tabStyle},getAsideWidth:function(e){return e.asideWidth}},actions:{setPageHeight:function(e,t){var n=e.commit;n("SET_PAGEHEIGHT",t)},setShowTab:function(e,t){var n=e.commit;n("SET_SHOWTAB",t)},setLayout:function(e,t){var n=e.commit;n("SET_LAYOUT",t)},setOverallStyle:function(e,t){var n=e.commit;n("SET_OVERALLSTYLE",t)},setPrimaryColor:function(e,t){var n=e.commit;n("SET_PRIMARYCOLOR",t)},setTabStyle:function(e,t){var n=e.commit;n("SET_TABSTYLE",t)},setAsideWidth:function(e,t){var n=e.commit;n("SET_ASIDEWIDTH",t)}}},f=n("cfdb"),d=n("a409"),h=n("8bbf"),p=n.n(h),v={name:"",version:"",docUrl:"",indexUrl:"",socketUrl:"",secretType:"",secretKey:""},g={SYSTEM_SET_NAME:function(e,t){e.name=t},SYSTEM_SET_VERSION:function(e,t){e.version=t},SYSTEM_SET_DOC_URL:function(e,t){e.docUrl||(e.docUrl=t)},SYSTEM_SET_INDEX_URL:function(e,t){e.indexUrl||(e.indexUrl=t)},SYSTEM_SET_SOCKET_URL:function(e,t){e.socketUrl=t},SYSTEM_SET_SECRET_TYPE:function(e,t){e.secretType=t},SYSTEM_SET_SECRET_KEY:function(e,t){e.secretKey=t}},m={getName:function(e){return e.name},getVersion:function(e){return e.version},getDocUrl:function(e){return e.docUrl},getIndexUrl:function(e){return e.indexUrl},getSocketUrl:function(e){return e.socketUrl},getSecretType:function(e){return e.secretType},getSecretKey:function(e){return e.secretKey}},y={initAppInfo:function(e,t){var n=e.commit;return Object(d["a"])().then((function(e){return n("SYSTEM_SET_NAME","泛算调度平台"),n("SYSTEM_SET_VERSION",e.version),n("SYSTEM_SET_SECRET_TYPE",e.encrypt),n("SYSTEM_SET_SECRET_KEY",e.secretKey),e.indexUrl&&n("SYSTEM_SET_INDEX_URL",e.indexUrl),e.docUrl&&n("SYSTEM_SET_DOC_URL",e.docUrl),e})).catch((function(){return n("SYSTEM_SET_NAME",p.a.prototype.$config.SYSTEMNAME),n("SYSTEM_SET_VERSION",p.a.prototype.$config.VERSION),n("SYSTEM_SET_SECRET_TYPE",null),n("SYSTEM_SET_SECRET_KEY",null),{appCode:p.a.prototype.$config.SYSTEMCODE,appName:p.a.prototype.$config.SYSTEMNAME,version:p.a.prototype.$config.VERSION,encrypt:null,secretKey:null}}))},setDocUrl:function(e,t){var n=e.commit;n("SYSTEM_SET_DOC_URL",t)},setIndexUrl:function(e,t){var n=e.commit;n("SYSTEM_SET_INDEX_URL",t)},setSocketUrl:function(e,t){var n=e.commit;n("SYSTEM_SET_SOCKET_URL",t)}},w={namespaced:!0,getters:m,state:v,mutations:g,actions:y},b=null,S={lockTime:18e5,isShowLock:!1,isLock:!1},E={lockTime:function(e){return e.lockTime},isShowLock:function(e){return e.isShowLock},isLock:function(e){return e.isLock}},x={SET_ISLOCK:function(e,t){e.isLock=t},SET_LOCKTIME:function(e,t){e.lockTime=t},SET_ISSHOWLOCK:function(e,t){e.isShowLock=t}},M={setLockTime:function(e,t){var n=e.commit;n("SET_LOCKTIME",1e3*t*60)},setIsShowLock:function(e,t){var n=e.commit;n("SET_ISSHOWLOCK",t)},setIsLock:function(e,t){var n=e.commit,r=e.state;n("SET_ISLOCK",t),t||(clearTimeout(b),b=setTimeout((function(){n("SET_ISLOCK",!0)}),r.lockTime))}},O={namespaced:!0,getters:E,state:S,mutations:x,actions:M},L=n("be1d"),A={namespaced:!0,state:{catchArr:[]},mutations:{ADDKEEPALIVE:function(e,t){!e.catchArr.includes(t)&&e.catchArr.push(t)},REMOVEKEEPALIVE:function(e,t){var n=e.catchArr.indexOf(t);n>-1&&e.catchArr.splice(n,1)}},getters:{catchArr:function(e){return e.catchArr}},actions:{addKeepAlive:function(e,t){var n=e.commit;n("ADDKEEPALIVE",t)},removeKeepAlive:function(e,t){var n=e.commit;n("REMOVEKEEPALIVE",t)}}},I=n("5880"),k=n.n(I);p.a.use(k.a);var T=new k.a.Store({strict:!1,modules:{user:L["a"],global:l,layout:u,menu:f["a"],errorLog:i,sysInfo:w,systemLock:O,viewCache:A},getters:s});t["a"]=T},"49ca":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-edit",use:"icon-edit-usage",viewBox:"0 0 16 16",content:''});i.a.add(c);t["default"]=c},"4ab8":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-restore",use:"icon-restore-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"4add":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-create1",use:"icon-create1-usage",viewBox:"0 0 13 13",content:''});i.a.add(c);t["default"]=c},"4ed2":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-back",use:"icon-back-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"4f17":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-view-sync",use:"icon-view-sync-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"4fab":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-message",use:"icon-message-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},5:function(e,t){},5070:function(e,t,n){"use strict";n("64c3")},"56d7":function(e,t,n){"use strict";n.r(t),function(e){n.d(t,"router",(function(){return O}));n("5ed4"),n("b779"),n("e28d");var r=n("d81f"),o=n.n(r),a=n("d013"),i=n.n(a),c=n("e1d1"),s=n.n(c),l=n("9726"),u=n("1564"),f=n("98df"),d=n("48c4");n.d(t,"store",(function(){return d["a"]}));var h=n("8bbf"),p=n.n(h),v=n("963c"),g=n.n(v),m=n("d5fb");function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function w(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm:ss";return e(t).format(n)})),new p.a({router:O,store:d["a"],logger:f["a"],render:function(e){return e(M)}}).$mount("#app");var t=localStorage.getItem("layoutSetting")&&JSON.parse(localStorage.getItem("layoutSetting")),n=t||{},o=n.layout,a=n.overallStyle,i=n.primaryColor,c=n.tabStyle,s=o&&a&&i&&c&&t||p.a.prototype.$config.defaultStyle;Object(r["initThemeColor"])(s)}))}.call(this,n("0489"))},5880:function(e,t){e.exports=Vuex},"5d3d":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-example",use:"icon-example-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},6:function(e,t){},"60dc":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-view-submit",use:"icon-view-submit-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"62f0":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-set",use:"icon-set-usage",viewBox:"0 0 15 15",content:''});i.a.add(c);t["default"]=c},"64c3":function(e,t,n){},"64ee":function(e,t,n){},"6a2d":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-drag-dark",use:"icon-drag-dark-usage",viewBox:"0 0 10 10",content:''});i.a.add(c);t["default"]=c},"6abb":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-share",use:"icon-share-usage",viewBox:"0 0 15 16",content:''});i.a.add(c);t["default"]=c},"6ac8":function(e,t,n){var r={"./custom/init.js":"b49c"};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id="6ac8"},"6ba7":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-create2",use:"icon-create2-usage",viewBox:"0 0 13 13",content:''});i.a.add(c);t["default"]=c},"6bc7":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-view-exception",use:"icon-view-exception-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"6d93":function(e,t,n){"use strict";n.r(t);n("faf5");var r=n("faa0"),o=n("48c4"),a=n("8bbf"),i=n.n(a);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function s(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */s=function(){return e};var e={},t=Object.prototype,n=t.hasOwnProperty,r="function"==typeof Symbol?Symbol:{},o=r.iterator||"@@iterator",a=r.asyncIterator||"@@asyncIterator",i=r.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(I){l=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var o=t&&t.prototype instanceof h?t:h,a=Object.create(o.prototype),i=new O(r||[]);return a._invoke=function(e,t,n){var r="suspendedStart";return function(o,a){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw a;return A()}for(n.method=o,n.arg=a;;){var i=n.delegate;if(i){var c=E(i,n);if(c){if(c===d)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var s=f(e,t,n);if("normal"===s.type){if(r=n.done?"completed":"suspendedYield",s.arg===d)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(r="completed",n.method="throw",n.arg=s.arg)}}}(e,n,i),a}function f(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(I){return{type:"throw",arg:I}}}e.wrap=u;var d={};function h(){}function p(){}function v(){}var g={};l(g,o,(function(){return this}));var m=Object.getPrototypeOf,y=m&&m(m(L([])));y&&y!==t&&n.call(y,o)&&(g=y);var w=v.prototype=h.prototype=Object.create(g);function b(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(o,a,i,s){var l=f(e[o],e,a);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"==c(d)&&n.call(d,"__await")?t.resolve(d.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(l.arg)}var o;this._invoke=function(e,n){function a(){return new t((function(t,o){r(e,n,t,o)}))}return o=o?o.then(a,a):a()}}function E(e,t){var n=e.iterator[t.method];if(void 0===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,E(e,t),"throw"===t.method))return d;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var r=f(n,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,d;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,d):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,d)}function x(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function M(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(x,this),this.reset(!0)}function L(e){if(e){var t=e[o];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,a=function t(){for(;++r=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(c&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),M(n),d}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;M(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),d}},e}function l(e,t){return p(e)||h(e,t)||f(e,t)||u()}function u(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,t){if(e){if("string"===typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n'});i.a.add(c);t["default"]=c},"6ef1":function(e,t,n){"use strict";(function(e){var r=n("5880"),o=n("0e58c");function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t'});i.a.add(c);t["default"]=c},7456:function(e,t,n){},7676:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-exit-fullscreen",use:"icon-exit-fullscreen-usage",viewBox:"0 0 128 128",content:''});i.a.add(c);t["default"]=c},"7a68":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-location",use:"icon-location-usage",viewBox:"0 0 1025 1024",content:''});i.a.add(c);t["default"]=c},"7f71":function(e,t,n){},"81fb":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-update",use:"icon-update-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},8407:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-stick-dis",use:"icon-stick-dis-usage",viewBox:"0 0 12 12",content:''});i.a.add(c);t["default"]=c},"8ab9":function(e,t,n){var r=function(e){return e.keys().map(e)},o=n("e24a");r(o)},"8bbf":function(e,t){e.exports=Vue},"8ec4":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-unstick-dis",use:"icon-unstick-dis-usage",viewBox:"0 0 12 12",content:''});i.a.add(c);t["default"]=c},"8ed0":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-document",use:"icon-document-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},9086:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-restore_hover",use:"icon-restore_hover-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"914c":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-close",use:"icon-close-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"92b6":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-cancel-normal",use:"icon-cancel-normal-usage",viewBox:"0 0 16 16",content:''});i.a.add(c);t["default"]=c},9726:function(e,t,n){"use strict";var r={add:"Add",edit:"Edit",remove:"Remove",detail:"Detail",search:"Search",clear:"Clear",export:"Export",import:"Import",saving:"Saving",removing:"Removing",searching:"Searching",exporting:"Exporting",importing:"Importing",operation:"Operation",more:"More",lock:"Lock",hideMenu:"Hide Menu",fullScreen:"Full Screen",cancelFullScreen:"Cancel Full Screen",logOut:"Quit",confirm:"Confirm",ok:"OK",cancel:"Cancel",alreadyCanceled:"Already Canceled",close:"Close",closeAll:"Close All",all:"All",other:"Other",sureToDelete:"Sure to delete",remind:"Remind",needSelectRows:"Please select the data row"},o={index:"Index",sampleMenu:"Sample Menu",samplePage:"Sample Page",authManager:"Auth Manager",firstLevelMenu:"First Level Menu",secondLevelMenu:"Second Level Menu",secondLevelMenu2:"Second Level Menu 2",threeLevelMenu:"Three Level Menu",threeLevelMenu2:"Three Level Menu 2",fourLevelMenu:"Four Level Menu",integratedMode:"Integrated Mode",builtInFunction:"built-in function",iframe:"iframe",popupMenu:"Popup Menu",crud:"CRUD",userManagement:"User Management",accountManagement:"Account Management",roleManagement:"Role Management",functionManagement:" Function Management",otherManagement:"Other Management"},a={success:"Success",failed:"Failed",error:"Error",exception:"Exception"},i={samplePage:"CRUD Sample Page",username:"Username",input:"please input content",selectPlease:"please select",label:"Label",status:"Status",account:"Account",button:"Button",searchCondition:"Search Condition",functionality:"Functionality",taskTheme:"Task Theme",taskDefinition:"Task Definition",businessType:"Business Type",taskClassification:"Task Classification",starttime:"Starttime",endtime:"Endtime",distributedWay:"Distributed Way",grabbingOrders:"Grabbing Orders",designatedPerson:"Designated Person",handler:"Handler",sample1:"Sample One",sample2:"Sample Two"},c={sample:i};function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t'});i.a.add(c);t["default"]=c},"9b26":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-pause-no",use:"icon-pause-no-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"9ba1":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-view-search",use:"icon-view-search-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"9bc8":function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-detail",use:"icon-detail-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},"9deb":function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return i}));var r=n("48c4"),o=n("8bbf"),a=n.n(o);function i(t){if(a.a.prototype.$config.ISLOG&&a.a.prototype.$strMenuList)return t.operateFullName=r["a"].getters["user/userId"],t.operateModule=a.a.prototype.$strMenuList.split("/")[0],t.operatePath=a.a.prototype.$strMenuList,t.operateIp="127.0.0.1",t.operateTime=e().format("YYYY-MM-DD HH:mm:ss"),t.operateUserName=r["a"].getters["user/userId"],a.a.axios.post("/fm/logmanage/OperateLogController/insertOperationLog",t)}}).call(this,n("0489"))},a207:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-confirm-normal",use:"icon-confirm-normal-usage",viewBox:"0 0 16 16",content:''});i.a.add(c);t["default"]=c},a301:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-export",use:"icon-export-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},a409:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"e",(function(){return s})),n.d(t,"h",(function(){return l})),n.d(t,"d",(function(){return u})),n.d(t,"g",(function(){return f})),n.d(t,"f",(function(){return d})),n.d(t,"c",(function(){return h})),n.d(t,"b",(function(){return p}));var r=n("085d"),o=n.n(r),a=n("8bbf"),i=n.n(a);function c(){var e=i.a.prototype.$config.PERMISSIONSYSTEM.URL_APPINFO,t={appCode:i.a.prototype.$config.SYSTEMCODE};return i.a.axios.post(e,t)}function s(e){var t=e.userId,n=e.password,r=e.verify,a=e.uuid,c=(e.secretType,e.secretKey,e.publicKey);if(i.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){if(""!==c){var s=new o.a(c,"pkcs8-public-pem");s.setOptions({encryptionScheme:"pkcs1"}),t=s.encrypt(t,"base64","utf8"),n=s.encrypt(n,"base64","utf8")}var l=i.a.prototype.$config.PERMISSIONSYSTEM.URL_LOGIN,u={username:t,password:n,appCode:i.a.prototype.$config.SYSTEMCODE,textCode:r,uuid:a,singleLogin:!0};return i.a.axios.post(l,u)}return Promise.resolve({token:{accessToken:"inmsToken"},account:{loginName:t,accountId:t},user:{provinceId:"100000"}})}function l(e){var t=i.a.prototype.$config.PERMISSIONSYSTEM_THIRDLOGIN,n={token:e};return i.a.axios.post(t,n)}function u(){return i.a.axios.get("/v1/system/workspace/list-all")}function f(){if(i.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){var e=i.a.prototype.$config.PERMISSIONSYSTEM.URL_RENEW;return i.a.axios.post(e)}var t={};return t}function d(){if(i.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){var e=i.a.prototype.$config.PERMISSIONSYSTEM.URL_LOGOUT;return i.a.axios.post(e)}return Promise.resolve({logout:!0})}function h(){if(i.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){var e=i.a.prototype.$config.PERMISSIONSYSTEM.URL_USERINFO;return i.a.axios.get(e)}var t=localStorage.getItem("userId")||"admin",n={account:{loginName:t,accountId:t},user:{provinceId:"100000"}};return Promise.resolve(n)}function p(){if(i.a.prototype.$config.PERMISSIONSYSTEM_ENABLE){var e=i.a.prototype.$config.PERMISSIONSYSTEM.URL_BUTTONS;return i.a.axios.get(e)}return[]}},aa04:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-drag-light",use:"icon-drag-light-usage",viewBox:"0 0 10 10",content:''});i.a.add(c);t["default"]=c},aa11:function(e,t,n){},aa61:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-fullscreen",use:"icon-fullscreen-usage",viewBox:"0 0 128 128",content:''});i.a.add(c);t["default"]=c},ad0c:function(e,t,n){"use strict";var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";t["a"]={createGuid:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:18,t="",n=0,o=r.length;while(n++=o&&(a=o-1),t+=r[a]}return t},guid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0,n="x"===e?t:3&t|8;return n.toString(16)}))},addGuid:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:18;if(!e.GUID){var n="",o=0,a=r.length;while(o++=a&&(i=a-1),n+=r[i]}e.GUID=n}return e.GUID},isJSON:function(e){try{JSON.parse(e)}catch(t){return!1}return!0}}},ae70:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-guzhang",use:"icon-guzhang-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},afe6:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-double_hover",use:"icon-double_hover-usage",viewBox:"0 0 14 14",content:''});i.a.add(c);t["default"]=c},b11c:function(e,t,n){"use strict";function r(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=o(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){s=!0,i=e},f:function(){try{c||null==n.return||n.return()}finally{if(s)throw i}}}}function o(e,t){if(e){if("string"===typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n'});i.a.add(c);t["default"]=c},b49c:function(e,t,n){"use strict";n.r(t);n("8ab9"),n("aa11");var r=n("8bbf"),o=n.n(r);o.a.directive("dialogDrag",{bind:function(e,t,n,r){var o=e.querySelector(".el-dialog__header"),a=e.querySelector(".el-dialog");o.style.cssText+=";cursor:move;",a.style.cssText+=";top:0px;";var i=function(){return window.document.currentStyle?function(e,t){return e.currentStyle[t]}:function(e,t){return getComputedStyle(e,!1)[t]}}();o.onmousedown=function(e){var t=e.clientX-o.offsetLeft,n=e.clientY-o.offsetTop,r=document.body.clientWidth,c=document.documentElement.clientHeight,s=a.offsetWidth,l=a.offsetHeight,u=a.offsetLeft,f=r-a.offsetLeft-s,d=a.offsetTop,h=c-a.offsetTop-l,p=i(a,"left"),v=i(a,"top");p.includes("%")?(p=+document.body.clientWidth*(+p.replace(/%/g,"")/100),v=+document.body.clientHeight*(+v.replace(/%/g,"")/100)):(p=+p.replace(/\px/g,""),v=+v.replace(/\px/g,"")),document.onmousemove=function(e){var r=e.clientX-t,o=e.clientY-n;-r>u?r=-u:r>f&&(r=f),-o>d?o=-d:o>h&&(o=h),a.style.cssText+=";left:".concat(r+p,"px;top:").concat(o+v,"px;")},document.onmouseup=function(e){document.onmousemove=null,document.onmouseup=null}}}});n("7f71"),n("9f3c");var a=n("c071"),i=n.n(a),c=n("cc86"),s=n.n(c),l=n("3001"),u=n("ad0c");function f(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=d(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw a}}}}function d(e,t){if(e){if("string"===typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0;--o){var a=this.tryEntries[o],i=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var c=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(c&&s){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),u}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;E(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:L(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=void 0),u}},e}function O(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=L(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw a}}}}function L(e,t){if(e){if("string"===typeof e)return A(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n95&&te(),X({percent:e,status:"success",show:!0})}),200)}},update:function(e){te(),X({percent:e,status:"success",show:!0})},finish:function(){te(),X({percent:100,status:"success",show:!0}),ee()},error:function(){te(),X({percent:100,status:"error",show:!0}),ee()},config:function(e){e.color&&(W=e.color),e.duration&&(K=e.duration),e.failedColor&&(q=e.failedColor),e.height&&(J=e.height)},destroy:function(){te();var e=Z();Y=null,e.destroy()}},re=n("98df");function oe(e,t){for(var n=0;n'});i.a.add(c);t["default"]=c},b779:function(e,t,n){},be1d:function(e,t,n){"use strict";(function(e){var r=n("a409");t["a"]={namespaced:!0,state:{loaded:!1,userId:"",currentUser:{},inmsToken:"",resToken:"",buttons:[],workspaces:JSON.parse(localStorage.getItem("jpomWorkspaces"))||[],curWorkspace:JSON.parse(localStorage.getItem("jpomCurWorkspace"))||{}},mutations:{INIT_USERID:function(e,t){return e.userId=t},INIT_USER:function(e,t){return e.currentUser=t},SET_TOKEN:function(e,t){return e.inmsToken=t},SET_RES_TOKEN:function(e,t){return e.resToken=t},SET_LOADED:function(e,t){return e.loaded=t},SET_BUTTONS:function(e,t){return e.buttons=t},SET_WORKSPACES:function(e,t){e.workspaces=JSON.parse(JSON.stringify(t)),localStorage.setItem("jpomWorkspaces",JSON.stringify(t))},SET_CURWORKSPACE:function(e,t){e.curWorkspace=JSON.parse(JSON.stringify(t)),localStorage.setItem("jpomCurWorkspace",JSON.stringify(t))}},getters:{currentUser:function(e){return e.currentUser},resToken:function(e){return e.resToken},inmsToken:function(e){return e.inmsToken},userId:function(e){return e.userId},loaded:function(e){return e.loaded},buttons:function(e){return e.buttons},curWorkspace:function(e){return e.curWorkspace},workspaces:function(e){return e.workspaces}},actions:{renewToken:function(t){var n=t.commit;return Object(r["g"])().then((function(t){return e.has(t,"accessToken")&&(n("SET_TOKEN",t.accessToken),localStorage.setItem("inmsToken",t.accessToken)),t}))},thirdLogin:function(t,n){return Object(r["h"])(n).then((function(n){if(e.has(n,"token")){var r=t.commit,o=t.dispatch;r("INIT_USER",n),r("INIT_USERID",n.user.userId),r("SET_TOKEN",n.token.accessToken),o("getButtons"),localStorage.setItem("userId",n.user.userId),localStorage.setItem("inmsToken",n.token.accessToken)}return n})).catch((function(e){return window.console.log(e),null}))},login:function(t,n){var o=n.userId,a=n.password,i=n.verify,c=n.uuid,s=n.secretType,l=n.secretKey,u=n.publicKey;return Object(r["e"])({userId:o,password:a,verify:i,uuid:c,secretType:s,secretKey:l,publicKey:u}).then((function(n){var r=t.commit,a=t.dispatch;if(e.has(n,"token"))r("INIT_USER",n),r("INIT_USERID",o),r("SET_TOKEN",n.token),a("getButtons"),a("getWorkspaces"),localStorage.setItem("userId",o),localStorage.setItem("userInfo",JSON.stringify(n)),localStorage.setItem("inmsToken",n.token),e.has(n,"settings.lock-screen-min")&&a("systemLock/setLockTime",n.settings["lock-screen-min"].settingVal,{root:!0});else if(n.code&&2!==Math.floor(n.code/100))throw Error(new Error(n.msg||"登录失败请重试"));return n}))},initUserInfo:function(t){return new Promise((function(n,o){Object(r["c"])().then((function(r){var o=t.commit,a=t.dispatch;t.state,t.rootState;r.user.provinceId&&r.user.provinceId+""!=="86"||(r.user.provinceId="100000"),r.user.provinceId+="",o("INIT_USER",r),o("INIT_USERID",r.account.loginName),localStorage.setItem("userId",r.account.loginName),o("SET_TOKEN",localStorage.getItem("inmsToken")),a("getButtons"),e.has(r,"settings.lock-screen-min")&&a("systemLock/setLockTime",r.settings["lock-screen-min"].settingVal,{root:!0}),n(r)})).catch((function(e){window.console.log(e),o(new Error("INITUSERINFOERROR"))}))}))},logout:function(e){var t=e.dispatch;e.commit,e.state;return new Promise((function(e,n){Object(r["f"])().then((function(){t("clearLoginData").then((function(){e()}))})).catch((function(e){n(e)}))}))},clearLoginData:function(t){var n=t.commit;n("INIT_USER",{}),n("INIT_USERID",""),n("SET_TOKEN",""),e.isEqual("true",localStorage.getItem("remember"))||(localStorage.removeItem("userId"),localStorage.removeItem("userInfo")),localStorage.removeItem("inmsToken")},setLoaded:function(e,t){var n=e.commit;n("SET_LOADED",t)},getButtons:function(e){var t=e.commit;e.state;return new Promise((function(e,n){Object(r["b"])().then((function(n){t("SET_BUTTONS",n),e()})).catch((function(e){n(e)}))}))},getWorkspaces:function(e){var t=e.commit;return new Promise((function(e,n){Object(r["d"])().then((function(n){t("SET_WORKSPACES",n||[]),n.length?t("SET_CURWORKSPACE",n[0]):t("SET_CURWORKSPACE",{}),e()})).catch((function(e){n(e)}))}))}}}}).call(this,n("e4be"))},c028:function(e,t,n){var r={"./custom/App.vue":"1c4c"};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id="c028"},c1d9:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-tousu",use:"icon-tousu-usage",viewBox:"0 0 1040 1024",content:''});i.a.add(c);t["default"]=c},c419:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-pause",use:"icon-pause-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},c9e8:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-double",use:"icon-double-usage",viewBox:"0 0 14 14",content:''});i.a.add(c);t["default"]=c},cda6:function(e,t,n){var r={"./custom/router/index.js":"6d93"};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id="cda6"},cfcd:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-baobiao",use:"icon-baobiao-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},cfdb:function(e,t,n){"use strict";(function(e){var r=n("b11c"),o=n("1cb3"),a=n("d9b6"),i=n("c071");function c(e){return u(e)||l(e)||d(e)||s()}function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function l(e){if("undefined"!==typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function u(e){if(Array.isArray(e))return h(e)}function f(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=d(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw a}}}}function d(e,t){if(e){if("string"===typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n10&&e.recentMenus.splice(9,1),r["a"].localStorage().setObject(p,e.recentMenus)},ADD_FAV_MENU:function(e,t){var n,o=!1,a=f(e.favMenus);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.id===t.id){o=!0;break}}}catch(c){a.e(c)}finally{a.f()}o||e.favMenus.push(t),r["a"].localStorage().setObject(v,e.favMenus)},DEL_FAV_MENU:function(e,t){var n,o=0,a=f(e.favMenus);try{for(a.s();!(n=a.n()).done;){var i=n.value;if(i.id===t.id)break;o++}}catch(c){a.e(c)}finally{a.f()}e.favMenus.splice(o,1),r["a"].localStorage().setObject(v,e.favMenus)},SET_OPENEDVIEWS_MENU:function(e,t){e.openedViewsMenus=t,r["a"].localStorage().setObject(g,e.openedViewsMenus)},ADD_OPENEDVIEWS_MENU:function(e,t){e.openedViewsMenus.push(t),r["a"].localStorage().setObject(g,e.openedViewsMenus)},SET_ACTIVE_MENU_IDS:function(e,t){e.activeMenuIds=t}},getters:{getCurrentMenuId:function(e){return e.currentMenuId},getCurrentMenu:function(t){var n=e.find(t.allMenusList,{id:t.currentMenuId});return n},getDefaultMenuId:function(e){return e.defaultMenuId},getDefaultMenu:function(t){var n=e.find([].concat(c(t.defaultMenus||[]),c(t.allMenusList)),{id:t.defaultMenuId});return n},getDefaultMenus:function(e){return e.defaultMenus},getAllMenus:function(e){return e.allMenus},getAllMenusList:function(e){return e.allMenusList},getFavMenus:function(e){return e.favMenus},getRecentMenus:function(e){return e.recentMenus},getOpenedViewsMenus:function(e){return e.openedViewsMenus},getHideHeader:function(e){return e.hideHeader},getOneMenuById:function(t){return function(n){var r=e.find(t.allMenusList,{id:n});return r}},getOneMenuByUrl:function(t){return function(n,r){var o=e.find(t.allMenusList,{url:n,extendQuery:JSON.stringify(r)});return o||(o=e.find(t.allMenusList,{url:n})),o}},getRootMenuByUrl:function(t){return function(n,r){var o=e.find(t.allMenusList,{url:n});return o}},getActiveMenuIds:function(e){return e.activeMenuIds}},actions:{initAllMenus:function(e,t){var n=e.commit,r=e.state;return Object(o["a"])().then((function(e){if(!e||0===e.length)throw Error("获取权限异常");a["a"].processMenus(e);var o=a["a"].getFlattenMenus(e);if(t&&o&&(e.unshift(t),o.unshift(t)),n("SET_ALL_MENUS_LIST",o),n("SET_ALL_MENUS",e),r.defaultMenus&&r.defaultMenus.length)n("SET_DEFAULT_MENU_ID",r.defaultMenus[0].id);else{var i,c=f(o);try{for(c.s();!(i=c.n()).done;){var s=i.value;s.children&&0!==s.children.length||"/extendpane"===s.url||(n("SET_DEFAULT_MENU_ID",s.id),n("SET_OPENEDVIEWS_MENU",new Array(s)))}}catch(l){c.e(l)}finally{c.f()}}}))},setAllMenusList:function(e,t){var n=e.commit;n("SET_ALL_MENUS_LIST",t)},setAllMenus:function(e,t){var n=e.commit;n("SET_ALL_MENUS",t)},setCurrentMenuId:function(e,t){var n=e.commit;n("SET_CURRENT_MENU_ID",t)},setDefaultMenuId:function(e,t){var n=e.commit;n("SET_DEFAULT_MENU_ID",t)},setActiveMenuIds:function(e,t){var n=e.commit;n("SET_ACTIVE_MENU_IDS",t)},addRecentMenu:function(e,t){var n=e.commit;n("ADD_RECENT_MENU",t)},addFavMenu:function(e,t){var n=e.commit;n("ADD_FAV_MENU",t)},delFavMenu:function(e,t){var n=e.commit;n("DEL_FAV_MENU",t)},addOpendViews:function(t,n){var r=t.commit,o=t.state,a=e.find(o.openedViewsMenus,{id:n.id});return a?(r("SET_CURRENT_MENU_ID",a.id),!0):o.openedViewsMenus&&o.openedViewsMenus.length<20?(r("ADD_OPENEDVIEWS_MENU",n),r("SET_CURRENT_MENU_ID",n.id),!0):(i["Notification"].warning({title:"提示",message:"最多打开20个Tab页,请您先关闭之前页面!",duration:5e3}),!1)},removeOpendViews:function(e,t){var n=e.commit,r=e.state,o=r.openedViewsMenus;if(o&&o.length>1){var a,c=[],s=f(o);try{for(s.s();!(a=s.n()).done;){var l=a.value;l.id!==t&&c.push(l)}}catch(u){s.e(u)}finally{s.f()}c&&c.length>0&&n("SET_CURRENT_MENU_ID",c[c.length-1].id),n("SET_OPENEDVIEWS_MENU",c)}else i["Notification"].warning({title:"提示",message:"请您至少保留一个页面!",duration:5e3})},clearAllOpendViews:function(e){var t=e.commit,n=e.getters,r=[],o=n.getDefaultMenu;o?(r.push(o),t("SET_OPENEDVIEWS_MENU",r),t("SET_CURRENT_MENU_ID",o.id)):t("SET_OPENEDVIEWS_MENU",r)},clearOtherOpendViews:function(t){t.dispatch;var n=t.commit,r=t.state,o=[],a=e.find(r.allMenusList,{id:r.currentMenuId});a&&o.push(a),n("SET_OPENEDVIEWS_MENU",o)}}}}).call(this,n("e4be"))},d02f:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-jishu",use:"icon-jishu-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},d5fb:function(e,t,n){"use strict";var r={add:"添加",edit:"编辑",remove:"删除",detail:"详情",clear:"清空",search:"查询",export:"导出",import:"导入",saving:"保存中",removing:"删除中",searching:"查询中",exporting:"导出中",importing:"导入中",operation:"操作",more:"更多",lock:"锁定",hideMenu:"隐藏菜单",fullScreen:"全屏",cancelFullScreen:"取消全屏",logOut:"退出",confirm:"确定",ok:"确定",cancel:"取消",alreadyCanceled:"已经取消",close:"关闭",closeAll:"全部关闭",all:"全部",other:"其他",sureToDelete:"确定删除",remind:"提示",needSelectRows:"请选择数据"},o={index:"首页",sampleMenu:"菜单局部",samplePage:"示例页面",authManager:"权限管理",firstLevelMenu:"一级菜单",secondLevelMenu:"二级菜单",secondLevelMenu2:"二级菜单 2",threeLevelMenu:"三级菜单",threeLevelMenu2:"三级菜单 2",fourLevelMenu:"四级菜单",integratedMode:"集成方式",builtInFunction:"内部功能",iframe:"嵌入框架",popupMenu:"弹出菜单",crud:"增删改查",userManagement:"用户管理",accountManagement:"账号管理",roleManagement:"角色管理",functionManagement:"功能管理",otherManagement:"其它管理"},a={success:"成功",failed:"失败",error:"错误",exception:"异常"},i={samplePage:"增删改查样例",username:"用户名",input:"请输入内容",selectPlease:"请选择",label:"显示名称",status:"状态",account:"账号",button:"按钮",searchCondition:"查询条件",functionality:"功能",taskTheme:"任务主题",taskDefinition:"任务内容",businessType:"业务类型",taskClassification:"任务分类",starttime:"开始时间",endtime:"结束时间",distributedWay:"派单方式",grabbingOrders:"抢单模式",designatedPerson:"指定人员",handler:"处理人",sample1:"样例 1",sample2:"样例 2"},c={sample:i};function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t'});i.a.add(c);t["default"]=c},d872:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-fold",use:"icon-fold-usage",viewBox:"0 0 9 9",content:''});i.a.add(c);t["default"]=c},d8ae:function(e,t,n){"use strict";n.r(t);var r=n("2eae"),o=n.n(r),a=n("b9a9"),i=n.n(a),c=new o.a({id:"icon-shiwuchuli",use:"icon-shiwuchuli-usage",viewBox:"0 0 1024 1024",content:''});i.a.add(c);t["default"]=c},d9b6:function(e,t,n){"use strict";(function(e){var r=n("b404"),o=n.n(r),a=n("48c4"),i=n("ded7");function c(e,t){var n="undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=s(e))||t&&e&&"number"===typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw a}}}}function s(e,t){if(e){if("string"===typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0){var s=e(t,i.children,r);if(s)return s}}}catch(l){a.e(l)}finally{a.f()}}else if(t&&t.id===r)return t},o={},i=c(n);try{for(i.s();!(t=i.n()).done;){var s=t.value;if(o=r(s,s.children,e),o)return o}}catch(l){i.e(l)}finally{i.f()}return o},checkPermission:function(t){var n=!1,r=a["a"].getters["menu/getAllMenusList"];return e.forEach(r,(function(e){e.id===t&&(n=!0)})),n},filterMenu:function(e,t){var n=t||a["a"].getters["menu/getAllMenus"],r=function t(n,r){if(n&&n.children){var a,i=c(n.children);try{for(i.s();!(a=i.n()).done;){var s=a.value,l={};o.a.extend(l,s),l.children=[],l.hasChildren=!1,s.label.indexOf(e)>=0?(r.children||(r.children=[]),r.children.push(l),r.hasChildren=!0,t(s,l)):(t(s,l),l.hasChildren&&(r.children.push(l),r.hasChildren=!0))}}catch(u){i.e(u)}finally{i.f()}}};if(e){var i=[];return n.forEach((function(e){var t={};o.a.extend(t,e),t.children=[],t.hasChildren=!1,r(e,t),t.children&&t.children.length>0&&i.push(t)})),i}return n},filterMenu2:function(e,t){var n=t||a["a"].getters["menu/getAllMenus"],r=function t(n,r){if(n&&n.children){var a,i=c(n.children);try{for(i.s();!(a=i.n()).done;){var s=a.value,l={};o.a.extend(l,s),l.children=[],l.hasChildren=!1,s.label.indexOf(e)>=0?(r.children||(r.children=[]),r.children.push(s),r.hasChildren=!0):(t(s,l),l.hasChildren&&(r.children.push(l),r.hasChildren=!0))}}catch(u){i.e(u)}finally{i.f()}}};if(e){var i=[];return n.forEach((function(e){var t={};o.a.extend(t,e),t.children=[],t.hasChildren=!1,r(e,t),t.children&&t.children.length>0&&i.push(t)})),i}return n},serializeMenus:function(t){var n=this;return e.forEach(t,(function(t){t.hasChildren=!e.isEmpty(t.children),t.isValidLeafMenu=!t.hasChildren,t.hasChildren&&n.serializeMenus(t.children)})),t},getFlattenMenus:function(t){var n=function t(n,r,o){for(var a,i,c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,u=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,f=0;f'});i.a.add(c);t["default"]=c},ded7:function(e,t,n){"use strict";t["a"]={getUrlKey:function(e){return decodeURIComponent((new RegExp("[?|&]"+e+"=([^&;]+?)(&|#|;|$)").exec(location.href)||[,""])[1].replace(/\+/g,"%20"))||null},getUrlVars:function(e){for(var t,n={},r=e.slice(e.indexOf("?")+1).split("&"),o=0;o'});i.a.add(c);t["default"]=c},e24a:function(e,t,n){var r={"./default/back.svg":"4ed2","./default/bug.svg":"dcdc","./default/cancel-normal.svg":"92b6","./default/close.svg":"914c","./default/compare.svg":"2034","./default/confirm-normal.svg":"a207","./default/create1.svg":"4add","./default/create2.svg":"6ba7","./default/dark-selected.svg":"b68f","./default/deblocking.svg":"21f1","./default/delete-no.svg":"0162","./default/delete.svg":"6dec","./default/design.svg":"2af2","./default/detail.svg":"9bc8","./default/document.svg":"8ed0","./default/double.svg":"c9e8","./default/double_hover.svg":"afe6","./default/download.svg":"316b","./default/drag-dark.svg":"6a2d","./default/drag-light.svg":"aa04","./default/edit-no.svg":"d714","./default/edit.svg":"49ca","./default/enlarge.svg":"08ad","./default/enlarge_hover.svg":"1eae","./default/enter.svg":"1fa4","./default/example.svg":"5d3d","./default/exit-fullscreen.svg":"7676","./default/export.svg":"a301","./default/fold.svg":"d872","./default/fullscreen.svg":"aa61","./default/home.svg":"222d","./default/light-selected.svg":"1f30","./default/location.svg":"7a68","./default/lock.svg":"b26b","./default/lockOut.svg":"740d","./default/message.svg":"4fab","./default/no-data.svg":"019c","./default/open-message.svg":"04bf","./default/pause-no.svg":"9b26","./default/pause.svg":"c419","./default/play.svg":"4578","./default/restore.svg":"4ab8","./default/restore_hover.svg":"9086","./default/search-no.svg":"1afd","./default/search.svg":"3ac5","./default/set.svg":"62f0","./default/set_hover.svg":"01c8","./default/share-cancel.svg":"e040","./default/share-no.svg":"0ab2","./default/share.svg":"6abb","./default/single.svg":"0331","./default/single_hover.svg":"0c65","./default/stick-dis.svg":"8407","./default/unfold.svg":"9ad9","./default/unstick-dis.svg":"8ec4","./default/update.svg":"81fb","./default/view-audit.svg":"2415","./default/view-exception.svg":"6bc7","./default/view-search.svg":"9ba1","./default/view-submit.svg":"60dc","./default/view-sync.svg":"4f17","./hunan/baobiao.svg":"cfcd","./hunan/gongdan.svg":"165f","./hunan/guzhang.svg":"ae70","./hunan/jishu.svg":"d02f","./hunan/shiwuchuli.svg":"d8ae","./hunan/shouye.svg":"18a8","./hunan/tousu.svg":"c1d9","./hunan/xitong.svg":"202f","./hunan/zhishiku.svg":"25ad"};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id="e24a"},f365:function(e,t,n){"use strict";n("64ee")},faf5:function(e,t,n){"use strict";n("cc86"),n("8bbf")}},[[0,"runtime","chunk-libs"]]]); \ No newline at end of file diff --git a/server/internal/routers/vue/static/dist/js/chunk-2607ffe4.0e7dc75e.js b/server/internal/routers/vue/static/dist/js/chunk-2607ffe4.0e7dc75e.js new file mode 100644 index 0000000..36ca9ce --- /dev/null +++ b/server/internal/routers/vue/static/dist/js/chunk-2607ffe4.0e7dc75e.js @@ -0,0 +1 @@ +(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2607ffe4"],{"3e5d":function(e,t,r){},"85e0":function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e._self._c;return t("iframe",{staticClass:"frame-body",attrs:{frameborder:"none",scrolling:"auto",src:e.Url}})},u=[],i=r("5880");function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),x(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;x(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:j(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},t}function m(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(s){return void r(s)}c.done?e(u):Promise.resolve(u).then(n,o)}function v(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){m(i,n,o,a,c,"next",t)}function c(t){m(i,n,o,a,c,"throw",t)}a(void 0)}))}}function g(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function w(t){for(var e=1;e=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),L(r),l}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;L(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:x(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},t}function P(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(s){return void r(s)}c.done?e(u):Promise.resolve(u).then(n,o)}function _(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){P(i,n,o,a,c,"next",t)}function c(t){P(i,n,o,a,c,"throw",t)}a(void 0)}))}}function C(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function I(t){for(var e=1;ef?f=g:(p.lastTickCount=o,p.lastAutoInterval=f),f}},i.inherits(u,o);var c=u;e.exports=c},"003e":function(e,t,n){var i=n("357b");function r(e,t){return t=t||[0,0],i.map([0,1],(function(n){var i=t[n],r=e[n]/2,o=[],a=[];return o[n]=i-r,a[n]=i+r,o[1-n]=a[1-n]=t[1-n],Math.abs(this.dataToPoint(o)[n]-this.dataToPoint(a)[n])}),this)}function o(e){var t=e.getBoundingRect();return{coordSys:{type:"geo",x:t.x,y:t.y,width:t.width,height:t.height,zoom:e.getZoom()},api:{coord:function(t){return e.dataToPoint(t)},size:i.bind(r,e)}}}e.exports=o},"0063":function(e,t,n){var i=n("357b"),r=n("0e58"),o=n("509d"),a=n("eb71"),s=r.extend({type:"cartesian2dAxis",axis:null,init:function(){s.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){s.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){s.superApply(this,"restoreData",arguments),this.resetRange()},getCoordSysModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.option.gridIndex,id:this.option.gridId})[0]}});function l(e,t){return t.type||(t.data?"category":"value")}i.merge(s.prototype,a);var u={offset:0};o("x",s,l,u),o("y",s,l,u);var c=s;e.exports=c},"0074":function(e,t,n){var i=n("357b"),r=n("3fcc"),o=n("b91a"),a=n("9aea"),s=i.bind,l=r.extend({type:"dataZoom.inside",init:function(e,t){this._range},render:function(e,t,n,r){l.superApply(this,"render",arguments),this._range=e.getPercentRange(),i.each(this.getTargetCoordInfo(),(function(t,r){var o=i.map(t,(function(e){return a.generateCoordId(e.model)}));i.each(t,(function(t){var l=t.model,c={};i.each(["pan","zoom","scrollMove"],(function(e){c[e]=s(u[e],this,t,r)}),this),a.register(n,{coordId:a.generateCoordId(l),allCoordIds:o,containsPoint:function(e,t,n){return l.coordinateSystem.containPoint([t,n])},dataZoomId:e.id,dataZoomModel:e,getRange:c})}),this)}),this)},dispose:function(){a.unregister(this.api,this.dataZoomModel.id),l.superApply(this,"dispose",arguments),this._range=null}}),u={zoom:function(e,t,n,i){var r=this._range,a=r.slice(),s=e.axisModels[0];if(s){var l=h[t](null,[i.originX,i.originY],s,n,e),u=(l.signal>0?l.pixelStart+l.pixelLength-l.pixel:l.pixel-l.pixelStart)/l.pixelLength*(a[1]-a[0])+a[0],c=Math.max(1/i.scale,0);a[0]=(a[0]-u)*c+u,a[1]=(a[1]-u)*c+u;var d=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return o(0,a,[0,100],0,d.minSpan,d.maxSpan),this._range=a,r[0]!==a[0]||r[1]!==a[1]?a:void 0}},pan:c((function(e,t,n,i,r,o){var a=h[i]([o.oldX,o.oldY],[o.newX,o.newY],t,r,n);return a.signal*(e[1]-e[0])*a.pixel/a.pixelLength})),scrollMove:c((function(e,t,n,i,r,o){var a=h[i]([0,0],[o.scrollDelta,o.scrollDelta],t,r,n);return a.signal*(e[1]-e[0])*o.scrollDelta}))};function c(e){return function(t,n,i,r){var a=this._range,s=a.slice(),l=t.axisModels[0];if(l){var u=e(s,l,t,n,i,r);return o(u,s,[0,100],"all"),this._range=s,a[0]!==s[0]||a[1]!==s[1]?s:void 0}}}var h={grid:function(e,t,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return e=e||[0,0],"x"===o.dim?(a.pixel=t[0]-e[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=t[1]-e[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(e,t,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return e=e?s.pointToCoord(e):[0,0],t=s.pointToCoord(t),"radiusAxis"===n.mainType?(a.pixel=t[0]-e[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=t[1]-e[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(e,t,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return e=e||[0,0],"horizontal"===o.orient?(s.pixel=t[0]-e[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=t[1]-e[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}},d=l;e.exports=d},"008b":function(e,t,n){var i=n("7fdc"),r=n("8eea"),o=n("be16").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function l(){this.init(),this._w=s,r.call(this,128,112)}function u(e,t,n){return n^e&(t^n)}function c(e,t,n){return e&t|n&(e|t)}function h(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function d(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function v(e,t){return e>>>0>>0?1:0}i(l,r),l.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._ah,i=0|this._bh,r=0|this._ch,o=0|this._dh,s=0|this._eh,l=0|this._fh,y=0|this._gh,b=0|this._hh,w=0|this._al,x=0|this._bl,_=0|this._cl,M=0|this._dl,I=0|this._el,C=0|this._fl,S=0|this._gl,D=0|this._hl,T=0;T<32;T+=2)t[T]=e.readInt32BE(4*T),t[T+1]=e.readInt32BE(4*T+4);for(;T<160;T+=2){var A=t[T-30],k=t[T-30+1],E=f(A,k),N=p(k,A);A=t[T-4],k=t[T-4+1];var O=g(A,k),P=m(k,A),L=t[T-14],B=t[T-14+1],j=t[T-32],z=t[T-32+1],R=N+B|0,F=E+L+v(R,N)|0;R=R+P|0,F=F+O+v(R,P)|0,R=R+z|0,F=F+j+v(R,z)|0,t[T]=F,t[T+1]=R}for(var V=0;V<160;V+=2){F=t[V],R=t[V+1];var H=c(n,i,r),$=c(w,x,_),U=h(n,w),W=h(w,n),G=d(s,I),Z=d(I,s),Y=a[V],Q=a[V+1],q=u(s,l,y),K=u(I,C,S),X=D+Z|0,J=b+G+v(X,D)|0;X=X+K|0,J=J+q+v(X,K)|0,X=X+Q|0,J=J+Y+v(X,Q)|0,X=X+R|0,J=J+F+v(X,R)|0;var ee=W+$|0,te=U+H+v(ee,W)|0;b=y,D=S,y=l,S=C,l=s,C=I,I=M+X|0,s=o+J+v(I,M)|0,o=r,M=_,r=i,_=x,i=n,x=w,w=X+ee|0,n=J+te+v(w,X)|0}this._al=this._al+w|0,this._bl=this._bl+x|0,this._cl=this._cl+_|0,this._dl=this._dl+M|0,this._el=this._el+I|0,this._fl=this._fl+C|0,this._gl=this._gl+S|0,this._hl=this._hl+D|0,this._ah=this._ah+n+v(this._al,w)|0,this._bh=this._bh+i+v(this._bl,x)|0,this._ch=this._ch+r+v(this._cl,_)|0,this._dh=this._dh+o+v(this._dl,M)|0,this._eh=this._eh+s+v(this._el,I)|0,this._fh=this._fh+l+v(this._fl,C)|0,this._gh=this._gh+y+v(this._gl,S)|0,this._hh=this._hh+b+v(this._hl,D)|0},l.prototype._hash=function(){var e=o.allocUnsafe(64);function t(t,n,i){e.writeInt32BE(t,i),e.writeInt32BE(n,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=l},"009a":function(e,t,n){var i=n("357b"),r=n("cb77"),o=n("405f"),a=n("2452"),s=n("b8ab"),l=s.prototype,u=Math.ceil,c=Math.floor,h=1e3,d=60*h,f=60*d,p=24*f,g=function(e,t,n,i){while(n>>1;e[r][1]n&&(s=n);var l=v.length,h=g(v,s,0,l),d=v[Math.min(h,l-1)],f=d[1];if("year"===d[0]){var p=o/f,m=r.nice(p/e,!0);f*=m}var y=this.getSetting("useUTC")?0:60*new Date(+i[0]||+i[1]).getTimezoneOffset()*1e3,b=[Math.round(u((i[0]-y)/f)*f+y),Math.round(c((i[1]-y)/f)*f+y)];a.fixExtent(b,i),this._stepLvl=d,this._interval=f,this._niceExtent=b},parse:function(e){return+r.parseDate(e)}});i.each(["contain","normalize"],(function(e){m.prototype[e]=function(t){return l[e].call(this,this.parse(t))}}));var v=[["hh:mm:ss",h],["hh:mm:ss",5*h],["hh:mm:ss",10*h],["hh:mm:ss",15*h],["hh:mm:ss",30*h],["hh:mm\nMM-dd",d],["hh:mm\nMM-dd",5*d],["hh:mm\nMM-dd",10*d],["hh:mm\nMM-dd",15*d],["hh:mm\nMM-dd",30*d],["hh:mm\nMM-dd",f],["hh:mm\nMM-dd",2*f],["hh:mm\nMM-dd",6*f],["hh:mm\nMM-dd",12*f],["MM-dd\nyyyy",p],["MM-dd\nyyyy",2*p],["MM-dd\nyyyy",3*p],["MM-dd\nyyyy",4*p],["MM-dd\nyyyy",5*p],["MM-dd\nyyyy",6*p],["week",7*p],["MM-dd\nyyyy",10*p],["week",14*p],["week",21*p],["month",31*p],["week",42*p],["month",62*p],["week",70*p],["quarter",95*p],["month",31*p*4],["month",31*p*5],["half-year",380*p/2],["month",31*p*8],["month",31*p*10],["year",380*p]];m.create=function(e){return new m({useUTC:e.ecModel.get("useUTC")})};var y=m;e.exports=y},"0114":function(e,t,n){var i=n("357b"),r=n("f298"),o=n("9188"),a=n("4547"),s=["axisLine","axisTickLabel","axisName"],l=["splitLine","splitArea","minorSplitLine"],u=a.extend({type:"radiusAxis",axisPointerClass:"PolarAxisPointer",render:function(e,t){if(this.group.removeAll(),e.get("show")){var n=e.axis,r=n.polar,a=r.getAngleAxis(),u=n.getTicksCoords(),h=n.getMinorTicksCoords(),d=a.getExtent()[0],f=n.getExtent(),p=c(r,e,d),g=new o(e,p);i.each(s,g.add,g),this.group.add(g.getGroup()),i.each(l,(function(t){e.get(t+".show")&&!n.scale.isBlank()&&this["_"+t](e,r,d,f,u,h)}),this)}},_splitLine:function(e,t,n,o,a){var s=e.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),c=0;u=u instanceof Array?u:[u];for(var h=[],d=0;d"}},"0227":function(e,t,n){var i=n("3e1f"),r=n("357b"),o=n("0a8d"),a=n("a153"),s=n("e031"),l=s.ContextCachedBy,u=function(e){i.call(this,e)};u.prototype={constructor:u,type:"text",brush:function(e,t){var n=this.style;this.__dirty&&a.normalizeTextStyle(n,!0),n.fill=n.stroke=n.shadowBlur=n.shadowColor=n.shadowOffsetX=n.shadowOffsetY=null;var i=n.text;null!=i&&(i+=""),a.needDrawText(i,n)?(this.setTransform(e),a.renderText(this,e,i,n,null,t),this.restoreTransform(e)):e.__attrCachedBy=l.NONE},getBoundingRect:function(){var e=this.style;if(this.__dirty&&a.normalizeTextStyle(e,!0),!this._rect){var t=e.text;null!=t?t+="":t="";var n=o.getBoundingRect(e.text+"",e.font,e.textAlign,e.textVerticalAlign,e.textPadding,e.textLineHeight,e.rich);if(n.x+=e.x||0,n.y+=e.y||0,a.getStroke(e.textStroke,e.textStrokeWidth)){var i=e.textStrokeWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect}},r.inherits(u,i);var c=u;e.exports=c},"02ce":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("84ad"),a=o.updateCenterAndZoom;i.registerAction({type:"geoRoam",event:"geoRoam",update:"updateTransform"},(function(e,t){var n=e.componentType||"series";t.eachComponent({mainType:n,query:e},(function(t){var i=t.coordinateSystem;if("geo"===i.type){var o=a(i,e,t.get("scaleLimit"));t.setCenter&&t.setCenter(o.center),t.setZoom&&t.setZoom(o.zoom),"series"===n&&r.each(t.seriesGroup,(function(e){e.setCenter(o.center),e.setZoom(o.zoom)}))}}))}))},"0327":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=n("f298"),a=n("faa9"),s=n("c66e"),l=r.each,u=r.indexOf,c=r.curry,h=["dataToPoint","pointToData"],d=["grid","xAxis","yAxis","geo","graph","polar","radiusAxis","angleAxis","bmap"];function f(e,t,n){var i=this._targetInfoList=[],r={},o=m(t,e);l(v,(function(e,t){(!n||!n.include||u(n.include,t)>=0)&&e(o,i,r)}))}var p=f.prototype;function g(e){return e[0]>e[1]&&e.reverse(),e}function m(e,t){return a.parseFinder(e,t,{includeMainTypes:d})}p.setOutputRanges=function(e,t){this.matchOutputRanges(e,t,(function(e,t,n){if((e.coordRanges||(e.coordRanges=[])).push(t),!e.coordRange){e.coordRange=t;var i=w[e.brushType](0,n,t);e.__rangeOffset={offset:_[e.brushType](i.values,e.range,[1,1]),xyMinMax:i.xyMinMax}}}))},p.matchOutputRanges=function(e,t,n){l(e,(function(e){var i=this.findTargetInfo(e,t);i&&!0!==i&&r.each(i.coordSyses,(function(i){var r=w[e.brushType](1,i,e.range);n(e,r.values,i,t)}))}),this)},p.setInputRanges=function(e,t){l(e,(function(e){var n=this.findTargetInfo(e,t);if(e.range=e.range||[],n&&!0!==n){e.panelId=n.panelId;var i=w[e.brushType](0,n.coordSys,e.coordRange),r=e.__rangeOffset;e.range=r?_[e.brushType](i.values,r.offset,I(i.xyMinMax,r.xyMinMax)):i.values}}),this)},p.makePanelOpts=function(e,t){return r.map(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:t&&t(n),clipPath:s.makeRectPanelClipPath(i),isTargetByCursor:s.makeRectIsTargetByCursor(i,e,n.coordSysModel),getLinearBrushOtherExtent:s.makeLinearBrushOtherExtent(i)}}))},p.controlSeries=function(e,t,n){var i=this.findTargetInfo(e,n);return!0===i||i&&u(i.coordSyses,t.coordinateSystem)>=0},p.findTargetInfo=function(e,t){for(var n=this._targetInfoList,i=m(t,e),r=0;r=0||u(i,e.getAxis("y").model)>=0)&&o.push(e)})),t.push({panelId:"grid--"+e.id,gridModel:e,coordSysModel:e,coordSys:o[0],coordSyses:o,getPanelRect:b.grid,xAxisDeclared:s[e.id],yAxisDeclared:c[e.id]})})))},geo:function(e,t){l(e.geoModels,(function(e){var n=e.coordinateSystem;t.push({panelId:"geo--"+e.id,geoModel:e,coordSysModel:e,coordSys:n,coordSyses:[n],getPanelRect:b.geo})}))}},y=[function(e,t){var n=e.xAxisModel,i=e.yAxisModel,r=e.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===t.gridModel},function(e,t){var n=e.geoModel;return n&&n===t.geoModel}],b={grid:function(){return this.coordSys.grid.getRect().clone()},geo:function(){var e=this.coordSys,t=e.getBoundingRect().clone();return t.applyTransform(o.getTransform(e)),t}},w={lineX:c(x,0),lineY:c(x,1),rect:function(e,t,n){var i=t[h[e]]([n[0][0],n[1][0]]),r=t[h[e]]([n[0][1],n[1][1]]),o=[g([i[0],r[0]]),g([i[1],r[1]])];return{values:o,xyMinMax:o}},polygon:function(e,t,n){var i=[[1/0,-1/0],[1/0,-1/0]],o=r.map(n,(function(n){var r=t[h[e]](n);return i[0][0]=Math.min(i[0][0],r[0]),i[1][0]=Math.min(i[1][0],r[1]),i[0][1]=Math.max(i[0][1],r[0]),i[1][1]=Math.max(i[1][1],r[1]),r}));return{values:o,xyMinMax:i}}};function x(e,t,n,i){var o=n.getAxis(["x","y"][e]),a=g(r.map([0,1],(function(e){return t?o.coordToData(o.toLocalCoord(i[e])):o.toGlobalCoord(o.dataToCoord(i[e]))}))),s=[];return s[e]=a,s[1-e]=[NaN,NaN],{values:a,xyMinMax:s}}var _={lineX:c(M,0),lineY:c(M,1),rect:function(e,t,n){return[[e[0][0]-n[0]*t[0][0],e[0][1]-n[0]*t[0][1]],[e[1][0]-n[1]*t[1][0],e[1][1]-n[1]*t[1][1]]]},polygon:function(e,t,n){return r.map(e,(function(e,i){return[e[0]-n[0]*t[i][0],e[1]-n[1]*t[i][1]]}))}};function M(e,t,n,i){return[t[0]-i[e]*n[0],t[1]-i[e]*n[1]]}function I(e,t){var n=C(e),i=C(t),r=[n[0]/i[0],n[1]/i[1]];return isNaN(r[0])&&(r[0]=1),isNaN(r[1])&&(r[1]=1),r}function C(e){return e?[e[0][1]-e[0][0],e[1][1]-e[1][0]]:[NaN,NaN]}var S=f;e.exports=S},"042b":function(e,t,n){var i=n("e2a7"),r=n("357b"),o=r.isFunction,a={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var n=e.getData(),r=(e.visualColorAccessPath||"itemStyle.color").split("."),a=e.get(r),s=!o(a)||a instanceof i?null:a;a&&!s||(a=e.getColorFromPalette(e.name,null,t.getSeriesCount())),n.setVisual("color",a);var l=(e.visualBorderColorAccessPath||"itemStyle.borderColor").split("."),u=e.get(l);if(n.setVisual("borderColor",u),!t.isSeriesFiltered(e)){s&&n.each((function(t){n.setItemVisual(t,"color",s(e.getDataParams(t)))}));var c=function(e,t){var n=e.getItemModel(t),i=n.get(r,!0),o=n.get(l,!0);null!=i&&e.setItemVisual(t,"color",i),null!=o&&e.setItemVisual(t,"borderColor",o)};return{dataEach:n.hasItemOption?c:null}}}};e.exports=a},"045e":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(){if(r.default.prototype.$isServer)return 0;if(void 0!==a)return a;var e=document.createElement("div");e.className="el-scrollbar__wrap",e.style.visibility="hidden",e.style.width="100px",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth;e.style.overflow="scroll";var n=document.createElement("div");n.style.width="100%",e.appendChild(n);var i=n.offsetWidth;return e.parentNode.removeChild(e),a=t-i,a};var i=n("8bbf"),r=o(i);function o(e){return e&&e.__esModule?e:{default:e}}var a=void 0},"0489":function(e,t,n){!function(t,n){e.exports=n()}(0,(function(){"use strict";var e=1e3,t=6e4,n=36e5,i="millisecond",r="second",o="minute",a="hour",s="day",l="week",u="month",c="quarter",h="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},v=function(e,t,n){var i=String(e);return!i||i.length>=t?e:""+Array(t+1-i.length).join(n)+e},y={s:v,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),i=Math.floor(n/60),r=n%60;return(t<=0?"+":"-")+v(i,2,"0")+":"+v(r,2,"0")},m:function e(t,n){if(t.date()1)return e(a[0])}else{var s=t.name;w[s]=t,r=s}return!i&&r&&(b=r),r||!i&&b},M=function(e,t){if(x(e))return e.clone();var n="object"==typeof t?t:{};return n.date=e,n.args=arguments,new C(n)},I=y;I.l=_,I.i=x,I.w=function(e,t){return M(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var C=function(){function m(e){this.$L=_(e.locale,null,!0),this.parse(e)}var v=m.prototype;return v.parse=function(e){this.$d=function(e){var t=e.date,n=e.utc;if(null===t)return new Date(NaN);if(I.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var i=t.match(p);if(i){var r=i[2]-1||0,o=(i[7]||"0").substring(0,3);return n?new Date(Date.UTC(i[1],r,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)):new Date(i[1],r,i[3]||1,i[4]||0,i[5]||0,i[6]||0,o)}}return new Date(t)}(e),this.$x=e.x||{},this.init()},v.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},v.$utils=function(){return I},v.isValid=function(){return!(this.$d.toString()===f)},v.isSame=function(e,t){var n=M(e);return this.startOf(t)<=n&&n<=this.endOf(t)},v.isAfter=function(e,t){return M(e)0&&!g.min?g.min=0:null!=g.min&&g.min<0&&!g.max&&(g.max=0);var m=c;if(null!=g.color&&(m=r.defaults({color:g.color},c)),g=r.merge(r.clone(g),{boundaryGap:e,splitNumber:t,scale:n,axisLine:i,axisTick:o,axisType:l,axisLabel:u,name:g.text,nameLocation:"end",nameGap:f,nameTextStyle:m,triggerEvent:p},!1),h||(g.name=""),"string"===typeof d){var v=g.name;g.name=d.replace("{value}",null!=v?v:"")}else"function"===typeof d&&(g.name=d(g.name,g));var y=r.extend(new a(g,null,this.ecModel),s);return y.mainType="radar",y.componentIndex=this.componentIndex,y}),this);this.getIndicatorModels=function(){return g}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:r.merge({lineStyle:{color:"#bbb"}},l.axisLine),axisLabel:u(l.axisLabel,!1),axisTick:u(l.axisTick,!1),axisType:"interval",splitLine:u(l.splitLine,!0),splitArea:u(l.splitArea,!0),indicator:[]}}),h=c;e.exports=h},"0634":function(e,t,n){var i=n("357b"),r=i.each,o=n("a1ff"),a=n("a7e5"),s=n("f59f"),l=n("faa9"),u=n("f298"),c=n("aa76"),h=c.createTask,d=n("de5c"),f=l.makeInner(),p=d();function g(){this.group=new o,this.uid=a.getUID("viewChart"),this.renderTask=h({plan:b,reset:w}),this.renderTask.context={view:this}}g.prototype={type:"chart",init:function(e,t){},render:function(e,t,n,i){},highlight:function(e,t,n,i){y(e.getData(),i,"emphasis")},downplay:function(e,t,n,i){y(e.getData(),i,"normal")},remove:function(e,t){this.group.removeAll()},dispose:function(){},incrementalPrepareRender:null,incrementalRender:null,updateTransform:null,filterForExposedEvent:null};var m=g.prototype;function v(e,t,n){if(e&&(e.trigger(t,n),e.isGroup&&!u.isHighDownDispatcher(e)))for(var i=0,r=e.childCount();i0&&(s=this.getLineLength(i)/u*1e3),s!==this._period||l!==this._loop){i.stopAnimation();var d=c;h&&(d=c(n)),i.__t>0&&(d=-s*i.__t),i.__t=0;var f=i.animate("",l).when(s,{__t:1}).delay(d).during((function(){r.updateSymbolPosition(i)}));l||f.done((function(){r.remove(i)})),f.start()}this._period=s,this._loop=l}},h.getLineLength=function(e){return l.dist(e.__p1,e.__cp1)+l.dist(e.__cp1,e.__p2)},h.updateAnimationPoints=function(e,t){e.__p1=t[0],e.__p2=t[1],e.__cp1=t[2]||[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]},h.updateData=function(e,t,n){this.childAt(0).updateData(e,t,n),this._updateEffectSymbol(e,t)},h.updateSymbolPosition=function(e){var t=e.__p1,n=e.__p2,i=e.__cp1,r=e.__t,o=e.position,a=[o[0],o[1]],s=u.quadraticAt,c=u.quadraticDerivativeAt;o[0]=s(t[0],i[0],n[0],r),o[1]=s(t[1],i[1],n[1],r);var h=c(t[0],i[0],n[0],r),d=c(t[1],i[1],n[1],r);if(e.rotation=-Math.atan2(d,h)-Math.PI/2,"line"===this._symbolType||"rect"===this._symbolType||"roundRect"===this._symbolType)if(void 0!==e.__lastT&&e.__lastTr?t=i(t):t.length-1?(this.$options.signingSchemeOptions={hash:r[0]},this.$options.signingScheme=i):(this.$options.signingScheme=r[0],this.$options.signingSchemeOptions={hash:null}):(this.$options.signingSchemeOptions={hash:r[1]},this.$options.signingScheme=r[0])}else o.isObject(t.signingScheme)&&(this.$options.signingScheme=t.signingScheme.scheme||i,this.$options.signingSchemeOptions=o.omit(t.signingScheme,"scheme"));if(!s.isSignature(this.$options.signingScheme))throw Error("Unsupported signing scheme");if(this.$options.signingSchemeOptions.hash&&-1===e[this.$options.environment].indexOf(this.$options.signingSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}if(t.encryptionScheme){if(o.isString(t.encryptionScheme)?(this.$options.encryptionScheme=t.encryptionScheme.toLowerCase(),this.$options.encryptionSchemeOptions={}):o.isObject(t.encryptionScheme)&&(this.$options.encryptionScheme=t.encryptionScheme.scheme||n,this.$options.encryptionSchemeOptions=o.omit(t.encryptionScheme,"scheme")),!s.isEncryption(this.$options.encryptionScheme))throw Error("Unsupported encryption scheme");if(this.$options.encryptionSchemeOptions.hash&&-1===e[this.$options.environment].indexOf(this.$options.encryptionSchemeOptions.hash))throw Error("Unsupported hashing algorithm for "+this.$options.environment+" environment")}this.keyPair.setOptions(this.$options)},h.prototype.generateKeyPair=function(e,t){if(e=e||2048,t=t||65537,e%8!==0)throw Error("Key size must be a multiple of 8.");return this.keyPair.generate(e,t.toString(16)),this.$cache={},this},h.prototype.importKey=function(e,t){if(!e)throw Error("Empty key given");if(t&&(t=c[t]||t),!l.detectAndImport(this.keyPair,e,t)&&void 0===t)throw Error("Key format must be specified");return this.$cache={},this},h.prototype.exportKey=function(e){return e=e||u,e=c[e]||e,this.$cache[e]||(this.$cache[e]=l.detectAndExport(this.keyPair,e)),this.$cache[e]},h.prototype.isPrivate=function(){return this.keyPair.isPrivate()},h.prototype.isPublic=function(e){return this.keyPair.isPublic(e)},h.prototype.isEmpty=function(e){return!(this.keyPair.n||this.keyPair.e||this.keyPair.d)},h.prototype.encrypt=function(e,t,n){return this.$$encryptKey(!1,e,t,n)},h.prototype.decrypt=function(e,t){return this.$$decryptKey(!1,e,t)},h.prototype.encryptPrivate=function(e,t,n){return this.$$encryptKey(!0,e,t,n)},h.prototype.decryptPublic=function(e,t){return this.$$decryptKey(!0,e,t)},h.prototype.$$encryptKey=function(e,t,n,i){try{var r=this.keyPair.encrypt(this.$getDataForEncrypt(t,i),e);return"buffer"!=n&&n?r.toString(n):r}catch(o){throw Error("Error during encryption. Original error: "+o)}},h.prototype.$$decryptKey=function(e,n,i){try{n=o.isString(n)?t.from(n,"base64"):n;var r=this.keyPair.decrypt(n,e);if(null===r)throw Error("Key decrypt method returns null.");return this.$getDecryptedData(r,i)}catch(a){throw Error("Error during decryption (probably incorrect key). Original error: "+a)}},h.prototype.sign=function(e,t,n){if(!this.isPrivate())throw Error("This is not private key");var i=this.keyPair.sign(this.$getDataForEncrypt(e,n));return t&&"buffer"!=t&&(i=i.toString(t)),i},h.prototype.verify=function(e,t,n,i){if(!this.isPublic())throw Error("This is not public key");return i=i&&"buffer"!=i?i:null,this.keyPair.verify(this.$getDataForEncrypt(e,n),t,i)},h.prototype.getKeySize=function(){return this.keyPair.keySize},h.prototype.getMaxMessageSize=function(){return this.keyPair.maxMessageLength},h.prototype.$getDataForEncrypt=function(e,n){if(o.isString(e)||o.isNumber(e))return t.from(""+e,n||"utf8");if(t.isBuffer(e))return e;if(o.isObject(e))return t.from(JSON.stringify(e));throw Error("Unexpected data type")},h.prototype.$getDecryptedData=function(e,t){return t=t||"buffer","buffer"==t?e:"json"==t?JSON.parse(e.toString()):e.toString(t)},h}()}).call(this,n("e6c7").Buffer)},"087e":function(e,t,n){var i=n("e6c7"),r=i.Buffer;function o(e,t){for(var n in e)t[n]=e[n]}function a(e,t,n){return r(e,t,n)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=i:(o(i,t),t.Buffer=a),o(r,a),a.from=function(e,t,n){if("number"===typeof e)throw new TypeError("Argument must not be a number");return r(e,t,n)},a.alloc=function(e,t,n){if("number"!==typeof e)throw new TypeError("Argument must be a number");var i=r(e);return void 0!==t?"string"===typeof n?i.fill(t,n):i.fill(t):i.fill(0),i},a.allocUnsafe=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return r(e)},a.allocUnsafeSlow=function(e){if("number"!==typeof e)throw new TypeError("Argument must be a number");return i.SlowBuffer(e)}},"0929":function(e,t,n){"use strict";var i=n("a817");function r(){this.handlers=[]}r.prototype.use=function(e,t){return this.handlers.push({fulfilled:e,rejected:t}),this.handlers.length-1},r.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},r.prototype.forEach=function(e){i.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=r},"09cb":function(e,t,n){var i=n("2fcc");n("cc7d");var r=i.extendComponentModel({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(e){var t,n=this.ecModel;return n.eachComponent(e,(function(e){e.getCoordSysModel()===this&&(t=e)}),this),t},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}});e.exports=r},"0a10":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=60)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},15:function(e,t){e.exports=n("d9fe")},18:function(e,t){e.exports=n("8bf6")},21:function(e,t){e.exports=n("4e54")},26:function(e,t){e.exports=n("5552")},3:function(e,t){e.exports=n("bb1a")},31:function(e,t){e.exports=n("0a99")},40:function(e,t){e.exports=n("e636")},51:function(e,t){e.exports=n("b3ff")},6:function(e,t){e.exports=n("51b5")},60:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-cascader-panel",e.border&&"is-bordered"],on:{keydown:e.handleKeyDown}},e._l(e.menus,(function(e,t){return n("cascader-menu",{key:t,ref:"menu",refInFor:!0,attrs:{index:t,nodes:e}})})),1)},r=[];i._withStripped=!0;var o,a,s=n(26),l=n.n(s),u=n(15),c=n.n(u),h=n(18),d=n.n(h),f=n(51),p=n.n(f),g=n(3),m=function(e){return e.stopPropagation()},v={inject:["panel"],components:{ElCheckbox:d.a,ElRadio:p.a},props:{node:{required:!0},nodeId:String},computed:{config:function(){return this.panel.config},isLeaf:function(){return this.node.isLeaf},isDisabled:function(){return this.node.isDisabled},checkedValue:function(){return this.panel.checkedValue},isChecked:function(){return this.node.isSameNode(this.checkedValue)},inActivePath:function(){return this.isInPath(this.panel.activePath)},inCheckedPath:function(){var e=this;return!!this.config.checkStrictly&&this.panel.checkedNodePaths.some((function(t){return e.isInPath(t)}))},value:function(){return this.node.getValueByOption()}},methods:{handleExpand:function(){var e=this,t=this.panel,n=this.node,i=this.isDisabled,r=this.config,o=r.multiple,a=r.checkStrictly;!a&&i||n.loading||(r.lazy&&!n.loaded?t.lazyLoad(n,(function(){var t=e.isLeaf;if(t||e.handleExpand(),o){var i=!!t&&n.checked;e.handleMultiCheckChange(i)}})):t.handleExpand(n))},handleCheckChange:function(){var e=this.panel,t=this.value,n=this.node;e.handleCheckChange(t),e.handleExpand(n)},handleMultiCheckChange:function(e){this.node.doCheck(e),this.panel.calculateMultiCheckedValue()},isInPath:function(e){var t=this.node,n=e[t.level-1]||{};return n.uid===t.uid},renderPrefix:function(e){var t=this.isLeaf,n=this.isChecked,i=this.config,r=i.checkStrictly,o=i.multiple;return o?this.renderCheckbox(e):r?this.renderRadio(e):t&&n?this.renderCheckIcon(e):null},renderPostfix:function(e){var t=this.node,n=this.isLeaf;return t.loading?this.renderLoadingIcon(e):n?null:this.renderExpandIcon(e)},renderCheckbox:function(e){var t=this.node,n=this.config,i=this.isDisabled,r={on:{change:this.handleMultiCheckChange},nativeOn:{}};return n.checkStrictly&&(r.nativeOn.click=m),e("el-checkbox",l()([{attrs:{value:t.checked,indeterminate:t.indeterminate,disabled:i}},r]))},renderRadio:function(e){var t=this.checkedValue,n=this.value,i=this.isDisabled;return Object(g["isEqual"])(n,t)&&(n=t),e("el-radio",{attrs:{value:t,label:n,disabled:i},on:{change:this.handleCheckChange},nativeOn:{click:m}},[e("span")])},renderCheckIcon:function(e){return e("i",{class:"el-icon-check el-cascader-node__prefix"})},renderLoadingIcon:function(e){return e("i",{class:"el-icon-loading el-cascader-node__postfix"})},renderExpandIcon:function(e){return e("i",{class:"el-icon-arrow-right el-cascader-node__postfix"})},renderContent:function(e){var t=this.panel,n=this.node,i=t.renderLabelFn,r=i?i({node:n,data:n.data}):null;return e("span",{class:"el-cascader-node__label"},[r||n.label])}},render:function(e){var t=this,n=this.inActivePath,i=this.inCheckedPath,r=this.isChecked,o=this.isLeaf,a=this.isDisabled,s=this.config,u=this.nodeId,c=s.expandTrigger,h=s.checkStrictly,d=s.multiple,f=!h&&a,p={on:{}};return"click"===c?p.on.click=this.handleExpand:(p.on.mouseenter=function(e){t.handleExpand(),t.$emit("expand",e)},p.on.focus=function(e){t.handleExpand(),t.$emit("expand",e)}),!o||a||h||d||(p.on.click=this.handleCheckChange),e("li",l()([{attrs:{role:"menuitem",id:u,"aria-expanded":n,tabindex:f?null:-1},class:{"el-cascader-node":!0,"is-selectable":h,"in-active-path":n,"in-checked-path":i,"is-active":r,"is-disabled":f}},p]),[this.renderPrefix(e),this.renderContent(e),this.renderPostfix(e)])}},y=v,b=n(0),w=Object(b["a"])(y,o,a,!1,null,null,null);w.options.__file="packages/cascader-panel/src/cascader-node.vue";var x,_,M=w.exports,I=n(6),C=n.n(I),S={name:"ElCascaderMenu",mixins:[C.a],inject:["panel"],components:{ElScrollbar:c.a,CascaderNode:M},props:{nodes:{type:Array,required:!0},index:Number},data:function(){return{activeNode:null,hoverTimer:null,id:Object(g["generateId"])()}},computed:{isEmpty:function(){return!this.nodes.length},menuId:function(){return"cascader-menu-"+this.id+"-"+this.index}},methods:{handleExpand:function(e){this.activeNode=e.target},handleMouseMove:function(e){var t=this.activeNode,n=this.hoverTimer,i=this.$refs.hoverZone;if(t&&i)if(t.contains(e.target)){clearTimeout(n);var r=this.$el.getBoundingClientRect(),o=r.left,a=e.clientX-o,s=this.$el,l=s.offsetWidth,u=s.offsetHeight,c=t.offsetTop,h=c+t.offsetHeight;i.innerHTML='\n \n \n '}else n||(this.hoverTimer=setTimeout(this.clearHoverZone,this.panel.config.hoverThreshold))},clearHoverZone:function(){var e=this.$refs.hoverZone;e&&(e.innerHTML="")},renderEmptyText:function(e){return e("div",{class:"el-cascader-menu__empty-text"},[this.t("el.cascader.noData")])},renderNodeList:function(e){var t=this.menuId,n=this.panel.isHoverMenu,i={on:{}};n&&(i.on.expand=this.handleExpand);var r=this.nodes.map((function(n,r){var o=n.hasChildren;return e("cascader-node",l()([{key:n.uid,attrs:{node:n,"node-id":t+"-"+r,"aria-haspopup":o,"aria-owns":o?t:null}},i]))}));return[].concat(r,[n?e("svg",{ref:"hoverZone",class:"el-cascader-menu__hover-zone"}):null])}},render:function(e){var t=this.isEmpty,n=this.menuId,i={nativeOn:{}};return this.panel.isHoverMenu&&(i.nativeOn.mousemove=this.handleMouseMove),e("el-scrollbar",l()([{attrs:{tag:"ul",role:"menu",id:n,"wrap-class":"el-cascader-menu__wrap","view-class":{"el-cascader-menu__list":!0,"is-empty":t}},class:"el-cascader-menu"},i]),[t?this.renderEmptyText(e):this.renderNodeList(e)])}},D=S,T=Object(b["a"])(D,x,_,!1,null,null,null);T.options.__file="packages/cascader-panel/src/cascader-menu.vue";var A=T.exports,k=n(21),E=function(){function e(e,t){for(var n=0;n1?t-1:0),i=1;i1?i-1:0),o=1;o0},e.prototype.syncCheckState=function(e){var t=this.getValueByOption(),n=this.isSameNode(e,t);this.doCheck(n)},e.prototype.doCheck=function(e){this.checked!==e&&(this.config.checkStrictly?this.checked=e:(this.broadcast("check",e),this.setCheckState(e),this.emit("check")))},E(e,[{key:"isDisabled",get:function(){var e=this.data,t=this.parent,n=this.config,i=n.disabled,r=n.checkStrictly;return e[i]||!r&&t&&t.isDisabled}},{key:"isLeaf",get:function(){var e=this.data,t=this.loaded,n=this.hasChildren,i=this.children,r=this.config,o=r.lazy,a=r.leaf;if(o){var s=Object(k["isDef"])(e[a])?e[a]:!!t&&!i.length;return this.hasChildren=!s,s}return!n}}]),e}(),L=P;function B(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var j=function e(t,n){return t.reduce((function(t,i){return i.isLeaf?t.push(i):(!n&&t.push(i),t=t.concat(e(i.children,n))),t}),[])},z=function(){function e(t,n){B(this,e),this.config=n,this.initNodes(t)}return e.prototype.initNodes=function(e){var t=this;e=Object(g["coerceTruthyValueToArray"])(e),this.nodes=e.map((function(e){return new L(e,t.config)})),this.flattedNodes=this.getFlattedNodes(!1,!1),this.leafNodes=this.getFlattedNodes(!0,!1)},e.prototype.appendNode=function(e,t){var n=new L(e,this.config,t),i=t?t.children:this.nodes;i.push(n)},e.prototype.appendNodes=function(e,t){var n=this;e=Object(g["coerceTruthyValueToArray"])(e),e.forEach((function(e){return n.appendNode(e,t)}))},e.prototype.getNodes=function(){return this.nodes},e.prototype.getFlattedNodes=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=e?this.leafNodes:this.flattedNodes;return t?n:j(this.nodes,e)},e.prototype.getNodeByValue=function(e){var t=this.getFlattedNodes(!1,!this.config.lazy).filter((function(t){return Object(g["valueEquals"])(t.path,e)||t.value===e}));return t&&t.length?t[0]:null},e}(),R=z,F=n(9),V=n.n(F),H=n(40),$=n.n(H),U=n(31),W=n.n(U),G=Object.assign||function(e){for(var t=1;t0){var l=n.store.getNodeByValue(o);l.data[s]||n.lazyLoad(l,(function(){n.handleExpand(l)})),n.loadCount===n.checkedValue.length&&n.$parent.computePresentText()}}t&&t(i)};i.lazyLoad(e,r)},calculateMultiCheckedValue:function(){this.checkedValue=this.getCheckedNodes(this.leafOnly).map((function(e){return e.getValueByOption()}))},scrollIntoView:function(){if(!this.$isServer){var e=this.$refs.menu||[];e.forEach((function(e){var t=e.$el;if(t){var n=t.querySelector(".el-scrollbar__wrap"),i=t.querySelector(".el-cascader-node.is-active")||t.querySelector(".el-cascader-node.in-active-path");W()(n,i)}}))}},getNodeByValue:function(e){return this.store.getNodeByValue(e)},getFlattedNodes:function(e){var t=!this.config.lazy;return this.store.getFlattedNodes(e,t)},getCheckedNodes:function(e){var t=this.checkedValue,n=this.multiple;if(n){var i=this.getFlattedNodes(e);return i.filter((function(e){return e.checked}))}return this.isEmptyValue(t)?[]:[this.getNodeByValue(t)]},clearCheckedNodes:function(){var e=this.config,t=this.leafOnly,n=e.multiple,i=e.emitPath;n?(this.getCheckedNodes(t).filter((function(e){return!e.isDisabled})).forEach((function(e){return e.doCheck(!1)})),this.calculateMultiCheckedValue()):this.checkedValue=i?[]:null}}},te=ee,ne=Object(b["a"])(te,i,r,!1,null,null,null);ne.options.__file="packages/cascader-panel/src/cascader-panel.vue";var ie=ne.exports;ie.install=function(e){e.component(ie.name,ie)};t["default"]=ie},9:function(e,t){e.exports=n("e19e")}})},"0a39":function(e,t,n){var i=n("d996"),r=n("ceb4"),o=n("f431")("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),i(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},"0a46":function(e,t,n){var i=n("7fdc"),r=n("8eea"),o=n("be16").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function l(){this.init(),this._w=s,r.call(this,64,56)}function u(e){return e<<1|e>>>31}function c(e){return e<<5|e>>>27}function h(e){return e<<30|e>>>2}function d(e,t,n,i){return 0===e?t&n|~t&i:2===e?t&n|t&i|n&i:t^n^i}i(l,r),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._a,i=0|this._b,r=0|this._c,o=0|this._d,s=0|this._e,l=0;l<16;++l)t[l]=e.readInt32BE(4*l);for(;l<80;++l)t[l]=u(t[l-3]^t[l-8]^t[l-14]^t[l-16]);for(var f=0;f<80;++f){var p=~~(f/20),g=c(n)+d(p,i,r,o)+s+t[f]+a[p]|0;s=o,o=r,r=h(i),i=n,n=g}this._a=n+this._a|0,this._b=i+this._b|0,this._c=r+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0},l.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},"0a79":function(e,t,n){var i=n("357b"),r=n("5d42"),o=r.devicePixelRatio,a=n("13c6"),s=n("51ca");function l(){return!1}function u(e,t,n){var r=i.createCanvas(),o=t.getWidth(),a=t.getHeight(),s=r.style;return s&&(s.position="absolute",s.left=0,s.top=0,s.width=o+"px",s.height=a+"px",r.setAttribute("data-zr-dom-id",e)),r.width=o*n,r.height=a*n,r}var c=function(e,t,n){var r;n=n||o,"string"===typeof e?r=u(e,t,n):i.isObject(e)&&(r=e,e=r.id),this.id=e,this.dom=r;var a=r.style;a&&(r.onselectstart=l,a["-webkit-user-select"]="none",a["user-select"]="none",a["-webkit-touch-callout"]="none",a["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",a["padding"]=0,a["margin"]=0,a["border-width"]=0),this.domBack=null,this.ctxBack=null,this.painter=t,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=n};c.prototype={constructor:c,__dirty:!0,__used:!1,__drawIndex:0,__startIndex:0,__endIndex:0,incremental:!1,getElementCount:function(){return this.__endIndex-this.__startIndex},initContext:function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},createBackBuffer:function(){var e=this.dpr;this.domBack=u("back-"+this.id,this.painter,e),this.ctxBack=this.domBack.getContext("2d"),1!==e&&this.ctxBack.scale(e,e)},resize:function(e,t){var n=this.dpr,i=this.dom,r=i.style,o=this.domBack;r&&(r.width=e+"px",r.height=t+"px"),i.width=e*n,i.height=t*n,o&&(o.width=e*n,o.height=t*n,1!==n&&this.ctxBack.scale(n,n))},clear:function(e,t){var n,i=this.dom,r=this.ctx,o=i.width,l=i.height,u=(t=t||this.clearColor,this.motionBlur&&!e),c=this.lastFrameAlpha,h=this.dpr;(u&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(i,0,0,o/h,l/h)),r.clearRect(0,0,o,l),t&&"transparent"!==t)&&(t.colorStops?(n=t.__canvasGradient||a.getGradient(r,t,{x:0,y:0,width:o,height:l}),t.__canvasGradient=n):t.image&&(n=s.prototype.getCanvasPattern.call(t,r)),r.save(),r.fillStyle=n||t,r.fillRect(0,0,o,l),r.restore());if(u){var d=this.domBack;r.save(),r.globalAlpha=c,r.drawImage(d,0,0,o,l),r.restore()}}};var h=c;e.exports=h},"0a8d":function(e,t,n){var i=n("53de"),r=n("4dfc"),o=n("357b"),a=o.getContext,s=o.extend,l=o.retrieve2,u=o.retrieve3,c=o.trim,h={},d=0,f=5e3,p=/\{([a-zA-Z0-9_]+)\|([^}]*)\}/g,g="12px sans-serif",m={};function v(e,t){m[e]=t}function y(e,t){t=t||g;var n=e+":"+t;if(h[n])return h[n];for(var i=(e+"").split("\n"),r=0,o=0,a=i.length;of&&(d=0,h={}),d++,h[n]=r,r}function b(e,t,n,i,r,o,a,s){return a?x(e,t,n,i,r,o,a,s):w(e,t,n,i,r,o,s)}function w(e,t,n,r,o,a,s){var l=N(e,t,o,a,s),u=y(e,t);o&&(u+=o[1]+o[3]);var c=l.outerHeight,h=_(0,u,n),d=M(0,c,r),f=new i(h,d,u,c);return f.lineHeight=l.lineHeight,f}function x(e,t,n,r,o,a,s,l){var u=O(e,{rich:s,truncate:l,font:t,textAlign:n,textPadding:o,textLineHeight:a}),c=u.outerWidth,h=u.outerHeight,d=_(0,c,n),f=M(0,h,r);return new i(d,f,c,h)}function _(e,t,n){return"right"===n?e-=t:"center"===n&&(e-=t/2),e}function M(e,t,n){return"middle"===n?e-=t/2:"bottom"===n&&(e-=t),e}function I(e,t,n){var i=t.textPosition,r=t.textDistance,o=n.x,a=n.y;r=r||0;var s=n.height,l=n.width,u=s/2,c="left",h="top";switch(i){case"left":o-=r,a+=u,c="right",h="middle";break;case"right":o+=r+l,a+=u,h="middle";break;case"top":o+=l/2,a-=r,c="center",h="bottom";break;case"bottom":o+=l/2,a+=s+r,c="center";break;case"inside":o+=l/2,a+=u,c="center",h="middle";break;case"insideLeft":o+=r,a+=u,h="middle";break;case"insideRight":o+=l-r,a+=u,c="right",h="middle";break;case"insideTop":o+=l/2,a+=r,c="center";break;case"insideBottom":o+=l/2,a+=s-r,c="center",h="bottom";break;case"insideTopLeft":o+=r,a+=r;break;case"insideTopRight":o+=l-r,a+=r,c="right";break;case"insideBottomLeft":o+=r,a+=s-r,h="bottom";break;case"insideBottomRight":o+=l-r,a+=s-r,c="right",h="bottom";break}return e=e||{},e.x=o,e.y=a,e.textAlign=c,e.textVerticalAlign=h,e}function C(e,t,n){var i={textPosition:e,textDistance:n};return I({},i,t)}function S(e,t,n,i,r){if(!t)return"";var o=(e+"").split("\n");r=D(t,n,i,r);for(var a=0,s=o.length;a=o;u++)a-=o;var c=y(n,t);return c>a&&(n="",c=0),a=e-c,i.ellipsis=n,i.ellipsisWidth=c,i.contentWidth=a,i.containerWidth=e,i}function T(e,t){var n=t.containerWidth,i=t.font,r=t.contentWidth;if(!n)return"";var o=y(e,i);if(o<=n)return e;for(var a=0;;a++){if(o<=r||a>=t.maxIterations){e+=t.ellipsis;break}var s=0===a?A(e,r,t.ascCharWidth,t.cnCharWidth):o>0?Math.floor(e.length*r/o):0;e=e.substr(0,s),o=y(e,i)}return""===e&&(e=t.placeholder),e}function A(e,t,n,i){for(var r=0,o=0,a=e.length;oh)e="",a=[];else if(null!=d)for(var f=D(d-(n?n[1]+n[3]:0),t,r.ellipsis,{minChar:r.minChar,placeholder:r.placeholder}),p=0,g=a.length;po&&P(n,e.substring(o,a)),P(n,i[2],i[1]),o=p.lastIndex}ov)return{lines:[],width:0,height:0};I.textWidth=y(I.text,T);var E=C.textWidth,N=null==E||"auto"===E;if("string"===typeof E&&"%"===E.charAt(E.length-1))I.percentWidth=E,d.push(I),E=0;else{if(N){E=I.textWidth;var O=C.textBackgroundColor,L=O&&O.image;L&&(L=r.findExistImage(L),r.isImageReady(L)&&(E=Math.max(E,L.width*A/L.height)))}var B=D?D[1]+D[3]:0;E+=B;var j=null!=m?m-_:null;null!=j&&jl&&(e.scrollTop=a-e.clientHeight)}else e.scrollTop=0}},"0ab4":function(e,t,n){"use strict";var i=n("a817");e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function r(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=r(window.location.href),function(t){var n=i.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return function(){return!0}}()},"0b9d":function(e,t,n){var i=n("357b"),r=n("53de"),o=n("cb77"),a=o.parsePercent,s=n("405f"),l=i.each,u=["left","right","top","bottom","width","height"],c=[["width","left","right"],["height","top","bottom"]];function h(e,t,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;t.eachChild((function(l,u){var c,h,d=l.position,f=l.getBoundingRect(),p=t.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===e){var m=f.width+(g?-g.x+f.x:0);c=o+m,c>i||l.newline?(o=0,c=m,a+=s+n,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);h=a+v,h>r||l.newline?(o+=s+n,a=0,h=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=o,d[1]=a,"horizontal"===e?o=c+n:a=h+n)}))}var d=h,f=i.curry(h,"vertical"),p=i.curry(h,"horizontal");function g(e,t,n){var i=t.width,r=t.height,o=a(e.x,i),l=a(e.y,r),u=a(e.x2,i),c=a(e.y2,r);return(isNaN(o)||isNaN(parseFloat(e.x)))&&(o=0),(isNaN(u)||isNaN(parseFloat(e.x2)))&&(u=i),(isNaN(l)||isNaN(parseFloat(e.y)))&&(l=0),(isNaN(c)||isNaN(parseFloat(e.y2)))&&(c=r),n=s.normalizeCssArray(n||0),{width:Math.max(u-o-n[1]-n[3],0),height:Math.max(c-l-n[0]-n[2],0)}}function m(e,t,n){n=s.normalizeCssArray(n||0);var i=t.width,o=t.height,l=a(e.left,i),u=a(e.top,o),c=a(e.right,i),h=a(e.bottom,o),d=a(e.width,i),f=a(e.height,o),p=n[2]+n[0],g=n[1]+n[3],m=e.aspect;switch(isNaN(d)&&(d=i-c-g-l),isNaN(f)&&(f=o-h-p-u),null!=m&&(isNaN(d)&&isNaN(f)&&(m>i/o?d=.8*i:f=.8*o),isNaN(d)&&(d=m*f),isNaN(f)&&(f=d/m)),isNaN(l)&&(l=i-c-d-g),isNaN(u)&&(u=o-h-f-p),e.left||e.right){case"center":l=i/2-d/2-n[3];break;case"right":l=i-d-g;break}switch(e.top||e.bottom){case"middle":case"center":u=o/2-f/2-n[0];break;case"bottom":u=o-f-p;break}l=l||0,u=u||0,isNaN(d)&&(d=i-g-l-(c||0)),isNaN(f)&&(f=o-p-u-(h||0));var v=new r(l+n[3],u+n[0],d,f);return v.margin=n,v}function v(e,t,n,o,a){var s=!a||!a.hv||a.hv[0],l=!a||!a.hv||a.hv[1],u=a&&a.boundingMode||"all";if(s||l){var c;if("raw"===u)c="group"===e.type?new r(0,0,+t.width||0,+t.height||0):e.getBoundingRect();else if(c=e.getBoundingRect(),e.needLocalTransform()){var h=e.getLocalTransform();c=c.clone(),c.applyTransform(h)}t=m(i.defaults({width:c.width,height:c.height},t),n,o);var d=e.position,f=s?t.x-c.x:0,p=l?t.y-c.y:0;e.attr("position","raw"===u?[f,p]:[d[0]+f,d[1]+p])}}function y(e,t){return null!=e[c[t][0]]||null!=e[c[t][1]]&&null!=e[c[t][2]]}function b(e,t,n){!i.isObject(n)&&(n={});var r=n.ignoreSize;!i.isArray(r)&&(r=[r,r]);var o=s(c[0],0),a=s(c[1],1);function s(n,i){var o={},a=0,s={},c=0,d=2;if(l(n,(function(t){s[t]=e[t]})),l(n,(function(e){u(t,e)&&(o[e]=s[e]=t[e]),h(o,e)&&a++,h(s,e)&&c++})),r[i])return h(t,n[1])?s[n[2]]=null:h(t,n[2])&&(s[n[1]]=null),s;if(c!==d&&a){if(a>=d)return o;for(var f=0;f1&&i&&i.length>1){var s=o(i)/o(r);!isFinite(s)&&(s=1),t.pinchScale=s;var l=a(i);return t.pinchX=l[0],t.pinchY=l[1],{type:"pinch",target:e[0].target,event:t}}}}},l=r;e.exports=l},"0c21":function(e,t,n){var i=n("1c97"),r=i([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),o={getAreaStyle:function(e,t){return r(this,e,t)}};e.exports=o},"0cfa":function(e,t,n){var i=n("2fcc"),r=n("d6e9"),o=n("357b"),a=n("faa9"),s=a.defaultEmphasis,l=n("5571"),u=n("405f"),c=u.encodeHTML,h=n("0d8d"),d=n("8ef8"),f=n("990b"),p=f.initCurvenessList,g=f.createEdgeMapForCurveness,m=i.extendSeriesModel({type:"series.graph",init:function(e){m.superApply(this,"init",arguments);var t=this;function n(){return t._categoriesData}this.legendVisualProvider=new d(n,n),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},mergeOption:function(e){m.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(e){m.superApply(this,"mergeDefaultAndTheme",arguments),s(e,["edgeLabel"],["show"])},getInitialData:function(e,t){var n=e.edges||e.links||[],i=e.data||e.nodes||[],r=this;if(i&&n){p(this);var a=h(i,n,this,!0,s);return o.each(a.edges,(function(e){g(e.node1,e.node2,this,e.dataIndex)}),this),a.data}function s(e,n){e.wrapMethod("getItemModel",(function(e){var t=r._categoriesModels,n=e.getShallow("category"),i=t[n];return i&&(i.parentModel=e.parentModel,e.parentModel=i),e}));var i=r.getModel("edgeLabel"),o=new l({label:i.option},i.parentModel,t),a=r.getModel("emphasis.edgeLabel"),s=new l({emphasis:{label:a.option}},a.parentModel,t);function u(e){return e=this.parsePath(e),e&&"label"===e[0]?o:e&&"emphasis"===e[0]&&"label"===e[1]?s:this.parentModel}n.wrapMethod("getItemModel",(function(e){return e.customizeGetParent(u),e}))}},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(e,t,n){if("edge"===n){var i=this.getData(),r=this.getDataParams(e,n),o=i.graph.getEdgeByIndex(e),a=i.getName(o.node1.dataIndex),s=i.getName(o.node2.dataIndex),l=[];return null!=a&&l.push(a),null!=s&&l.push(s),l=c(l.join(" > ")),r.value&&(l+=" : "+c(r.value)),l}return m.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var e=o.map(this.option.categories||[],(function(e){return null!=e.value?e:o.extend({value:0},e)})),t=new r(["value"],this);t.initData(e),this._categoriesData=t,this._categoriesModels=t.mapArray((function(e){return t.getItemModel(e,!0)}))},setZoom:function(e){this.option.zoom=e},setCenter:function(e){this.option.center=e},isAnimationEnabled:function(){return m.superCall(this,"isAnimationEnabled")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,opacity:.5},emphasis:{label:{show:!0}}}}),v=m;e.exports=v},"0d37":function(e,t){var n={shadowBlur:1,shadowOffsetX:1,shadowOffsetY:1,textShadowBlur:1,textShadowOffsetX:1,textShadowOffsetY:1,textBoxShadowBlur:1,textBoxShadowOffsetX:1,textBoxShadowOffsetY:1};function i(e,t,i){return n.hasOwnProperty(t)?i*e.dpr:i}e.exports=i},"0d6d":function(e,t,n){var i=n("be16").Buffer;function r(e){i.isBuffer(e)||(e=i.from(e));for(var t=e.length/4|0,n=new Array(t),r=0;r>>24]^c[p>>>16&255]^h[g>>>8&255]^d[255&m]^t[v++],a=u[p>>>24]^c[g>>>16&255]^h[m>>>8&255]^d[255&f]^t[v++],s=u[g>>>24]^c[m>>>16&255]^h[f>>>8&255]^d[255&p]^t[v++],l=u[m>>>24]^c[f>>>16&255]^h[p>>>8&255]^d[255&g]^t[v++],f=o,p=a,g=s,m=l;return o=(i[f>>>24]<<24|i[p>>>16&255]<<16|i[g>>>8&255]<<8|i[255&m])^t[v++],a=(i[p>>>24]<<24|i[g>>>16&255]<<16|i[m>>>8&255]<<8|i[255&f])^t[v++],s=(i[g>>>24]<<24|i[m>>>16&255]<<16|i[f>>>8&255]<<8|i[255&p])^t[v++],l=(i[m>>>24]<<24|i[f>>>16&255]<<16|i[p>>>8&255]<<8|i[255&g])^t[v++],o>>>=0,a>>>=0,s>>>=0,l>>>=0,[o,a,s,l]}var s=[0,1,2,4,8,16,32,64,128,27,54],l=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var n=[],i=[],r=[[],[],[],[]],o=[[],[],[],[]],a=0,s=0,l=0;l<256;++l){var u=s^s<<1^s<<2^s<<3^s<<4;u=u>>>8^255&u^99,n[a]=u,i[u]=a;var c=e[a],h=e[c],d=e[h],f=257*e[u]^16843008*u;r[0][a]=f<<24|f>>>8,r[1][a]=f<<16|f>>>16,r[2][a]=f<<8|f>>>24,r[3][a]=f,f=16843009*d^65537*h^257*c^16843008*a,o[0][u]=f<<24|f>>>8,o[1][u]=f<<16|f>>>16,o[2][u]=f<<8|f>>>24,o[3][u]=f,0===a?a=s=1:(a=c^e[e[e[d^c]]],s^=e[e[s]])}return{SBOX:n,INV_SBOX:i,SUB_MIX:r,INV_SUB_MIX:o}}();function u(e){this._key=r(e),this._reset()}u.blockSize=16,u.keySize=32,u.prototype.blockSize=u.blockSize,u.prototype.keySize=u.keySize,u.prototype._reset=function(){for(var e=this._key,t=e.length,n=t+6,i=4*(n+1),r=[],o=0;o>>24,a=l.SBOX[a>>>24]<<24|l.SBOX[a>>>16&255]<<16|l.SBOX[a>>>8&255]<<8|l.SBOX[255&a],a^=s[o/t|0]<<24):t>6&&o%t===4&&(a=l.SBOX[a>>>24]<<24|l.SBOX[a>>>16&255]<<16|l.SBOX[a>>>8&255]<<8|l.SBOX[255&a]),r[o]=r[o-t]^a}for(var u=[],c=0;c>>24]]^l.INV_SUB_MIX[1][l.SBOX[d>>>16&255]]^l.INV_SUB_MIX[2][l.SBOX[d>>>8&255]]^l.INV_SUB_MIX[3][l.SBOX[255&d]]}this._nRounds=n,this._keySchedule=r,this._invKeySchedule=u},u.prototype.encryptBlockRaw=function(e){return e=r(e),a(e,this._keySchedule,l.SUB_MIX,l.SBOX,this._nRounds)},u.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),n=i.allocUnsafe(16);return n.writeUInt32BE(t[0],0),n.writeUInt32BE(t[1],4),n.writeUInt32BE(t[2],8),n.writeUInt32BE(t[3],12),n},u.prototype.decryptBlock=function(e){e=r(e);var t=e[1];e[1]=e[3],e[3]=t;var n=a(e,this._invKeySchedule,l.INV_SUB_MIX,l.INV_SBOX,this._nRounds),o=i.allocUnsafe(16);return o.writeUInt32BE(n[0],0),o.writeUInt32BE(n[3],4),o.writeUInt32BE(n[2],8),o.writeUInt32BE(n[1],12),o},u.prototype.scrub=function(){o(this._keySchedule),o(this._invKeySchedule),o(this._key)},e.exports.AES=u},"0d76":function(e,t,n){var i=n("357b"),r=n("f298"),o={NONE:"none",DESCENDANT:"descendant",ANCESTOR:"ancestor",SELF:"self"},a=2,s=4;function l(e,t,n){r.Group.call(this);var i=new r.Sector({z2:a});i.seriesIndex=t.seriesIndex;var o=new r.Text({z2:s,silent:e.getModel("label").get("silent")});function l(){o.ignore=o.hoverIgnore}function u(){o.ignore=o.normalIgnore}this.add(i),this.add(o),this.updateData(!0,e,"normal",t,n),this.on("emphasis",l).on("normal",u).on("mouseover",l).on("mouseout",u)}var u=l.prototype;u.updateData=function(e,t,n,o,a){this.node=t,t.piece=this,o=o||this._seriesModel,a=a||this._ecModel;var s=this.childAt(0);s.dataIndex=t.dataIndex;var l=t.getModel(),u=t.getLayout(),c=i.extend({},u);c.label=null;var d=h(t,o,a);p(t,o,d);var f,g=l.getModel("itemStyle").getItemStyle();if("normal"===n)f=g;else{var m=l.getModel(n+".itemStyle").getItemStyle();f=i.merge(m,g)}f=i.defaults({lineJoin:"bevel",fill:f.fill||d},f),e?(s.setShape(c),s.shape.r=u.r0,r.updateProps(s,{shape:{r:u.r}},o,t.dataIndex),s.useStyle(f)):"object"===typeof f.fill&&f.fill.type||"object"===typeof s.style.fill&&s.style.fill.type?(r.updateProps(s,{shape:c},o),s.useStyle(f)):r.updateProps(s,{shape:c,style:f},o),this._updateLabel(o,d,n);var v=l.getShallow("cursor");if(v&&s.attr("cursor",v),e){var y=o.getShallow("highlightPolicy");this._initEvents(s,t,o,y)}this._seriesModel=o||this._seriesModel,this._ecModel=a||this._ecModel,r.setHoverStyle(this)},u.onEmphasis=function(e){var t=this;this.node.hostTree.root.eachNode((function(n){n.piece&&(t.node===n?n.piece.updateData(!1,n,"emphasis"):f(n,t.node,e)?n.piece.childAt(0).trigger("highlight"):e!==o.NONE&&n.piece.childAt(0).trigger("downplay"))}))},u.onNormal=function(){this.node.hostTree.root.eachNode((function(e){e.piece&&e.piece.updateData(!1,e,"normal")}))},u.onHighlight=function(){this.updateData(!1,this.node,"highlight")},u.onDownplay=function(){this.updateData(!1,this.node,"downplay")},u._updateLabel=function(e,t,n){var o=this.node.getModel(),a=o.getModel("label"),s="normal"===n||"emphasis"===n?a:o.getModel(n+".label"),l=o.getModel("emphasis.label"),u=s.get("formatter"),c=u?n:"normal",h=i.retrieve(e.getFormattedLabel(this.node.dataIndex,c,null,null,"label"),this.node.name);!1===D("show")&&(h="");var d=this.node.getLayout(),f=s.get("minAngle");null==f&&(f=a.get("minAngle")),f=f/180*Math.PI;var p=d.endAngle-d.startAngle;null!=f&&Math.abs(p)Math.PI/2?"right":"left"):_&&"center"!==_?"left"===_?(m=d.r0+x,v>Math.PI/2&&(_="right")):"right"===_&&(m=d.r-x,v>Math.PI/2&&(_="left")):(m=(d.r+d.r0)/2,_="center"),g.attr("style",{text:h,textAlign:_,textVerticalAlign:D("verticalAlign")||"middle",opacity:D("opacity")});var M=m*y+d.cx,I=m*b+d.cy;g.attr("position",[M,I]);var C=D("rotate"),S=0;function D(e){var t=s.get(e);return null==t?a.get(e):t}"radial"===C?(S=-v,S<-Math.PI/2&&(S+=Math.PI)):"tangential"===C?(S=Math.PI/2-v,S>Math.PI/2?S-=Math.PI:S<-Math.PI/2&&(S+=Math.PI)):"number"===typeof C&&(S=C*Math.PI/180),g.attr("rotation",S)},u._initEvents=function(e,t,n,i){e.off("mouseover").off("mouseout").off("emphasis").off("normal");var r=this,o=function(){r.onEmphasis(i)},a=function(){r.onNormal()},s=function(){r.onDownplay()},l=function(){r.onHighlight()};n.isAnimationEnabled()&&e.on("mouseover",o).on("mouseout",a).on("emphasis",o).on("normal",a).on("downplay",s).on("highlight",l)},i.inherits(l,r.Group);var c=l;function h(e,t,n){var i=e.getVisual("color"),r=e.getVisual("visualMeta");r&&0!==r.length||(i=null);var o=e.getModel("itemStyle").get("color");if(o)return o;if(i)return i;if(0===e.depth)return n.option.color[0];var a=n.option.color.length;return o=n.option.color[d(e)%a],o}function d(e){var t=e;while(t.depth>1)t=t.parentNode;var n=e.getAncestors()[0];return i.indexOf(n.children,t)}function f(e,t,n){return n!==o.NONE&&(n===o.SELF?e===t:n===o.ANCESTOR?e===t||e.isAncestorOf(t):e===t||e.isDescendantOf(t))}function p(e,t,n){var i=t.getData();i.setItemVisual(e.dataIndex,"color",n)}e.exports=c},"0d8d":function(e,t,n){var i=n("357b"),r=n("d6e9"),o=n("4133"),a=n("9fb2"),s=n("490b"),l=n("9354"),u=n("3061");function c(e,t,n,c,h){for(var d=new o(c),f=0;f "+b)),m++)}var w,x=n.get("coordinateSystem");if("cartesian2d"===x||"polar"===x)w=u(e,n);else{var _=l.get(x),M=_&&"view"!==_.type&&_.dimensions||[];i.indexOf(M,"value")<0&&M.concat(["value"]);var I=s(e,{coordDimensions:M});w=new r(I,n),w.initData(e)}var C=new r(["value"],n);return C.initData(g,p),h&&h(w,C),a({mainData:w,struct:d,structAttr:"graph",datas:{node:w,edge:C},datasAttr:{node:"data",edge:"edgeData"}}),d.update(),d}e.exports=c},"0dbe":function(e,t,n){var i=n("99f8");e.exports=function(e){if(!i(e))throw TypeError(e+" is not an object!");return e}},"0e58":function(e,t,n){var i=n("357b"),r=n("5571"),o=n("a7e5"),a=n("f59f"),s=a.enableClassManagement,l=a.parseClassType,u=n("faa9"),c=u.makeInner,h=n("0b9d"),d=n("2735"),f=c(),p=r.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(e,t,n,i){r.call(this,e,t,n,i),this.uid=o.getUID("ec_cpt_model")},init:function(e,t,n,i){this.mergeDefaultAndTheme(e,n)},mergeDefaultAndTheme:function(e,t){var n=this.layoutMode,r=n?h.getLayoutParams(e):{},o=t.getTheme();i.merge(e,o.get(this.mainType)),i.merge(e,this.getDefaultOption()),n&&h.mergeLayoutParam(e,r,n)},mergeOption:function(e,t){i.merge(this.option,e,!0);var n=this.layoutMode;n&&h.mergeLayoutParam(this.option,e,n)},optionUpdated:function(e,t){},getDefaultOption:function(){var e=f(this);if(!e.defaultOption){var t=[],n=this.constructor;while(n){var r=n.prototype.defaultOption;r&&t.push(r),n=n.superClass}for(var o={},a=t.length-1;a>=0;a--)o=i.merge(o,t[a],!0);e.defaultOption=o}return e.defaultOption},getReferringComponents:function(e){return this.ecModel.queryComponents({mainType:e,index:this.get(e+"Index",!0),id:this.get(e+"Id",!0)})}});function g(e){var t=[];return i.each(p.getClassesByMainType(e),(function(e){t=t.concat(e.prototype.dependencies||[])})),t=i.map(t,(function(e){return l(e).main})),"dataset"!==e&&i.indexOf(t,"dataset")<=0&&t.unshift("dataset"),t}s(p,{registerWhenExtend:!0}),o.enableSubTypeDefaulter(p),o.enableTopologicalTravel(p,g),i.mixin(p,d);var m=p;e.exports=m},"0ee3":function(e,t,n){var i=n("a436"),r=n("59e0"),o=n("ac59"),a=n("9054"),s=n("6688"),l=n("9b58"),u=n("d95a"),c=n("be16").Buffer;function h(e,t){var n=e.modulus.byteLength(),i=l("sha1").update(c.alloc(0)).digest(),a=i.length;if(0!==t[0])throw new Error("decryption error");var s=t.slice(1,a+1),u=t.slice(a+1),h=o(s,r(u,a)),d=o(u,r(h,n-a-1));if(f(i,d.slice(0,a)))throw new Error("decryption error");var p=a;while(0===d[p])p++;if(1!==d[p++])throw new Error("decryption error");return d.slice(p)}function d(e,t,n){var i=t.slice(0,2),r=2,o=0;while(0!==t[r++])if(r>=t.length){o++;break}var a=t.slice(2,r-1);if(("0002"!==i.toString("hex")&&!n||"0001"!==i.toString("hex")&&n)&&o++,a.length<8&&o++,o)throw new Error("decryption error");return t.slice(r)}function f(e,t){e=c.from(e),t=c.from(t);var n=0,i=e.length;e.length!==t.length&&(n++,i=Math.min(e.length,t.length));var r=-1;while(++rf||new a(t).cmp(l.modulus)>=0)throw new Error("decryption error");o=n?u(new a(t),l):s(t,l);var p=c.alloc(f-o.length);if(o=c.concat([p,o],f),4===r)return h(l,o);if(1===r)return d(l,o,n);if(3===r)return o;throw new Error("unknown padding")}},"0ee5":function(e,t,n){"use strict";(function(t){var i=n("a817"),r=n("b9d3"),o={"Content-Type":"application/x-www-form-urlencoded"};function a(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}function s(){var e;return("undefined"!==typeof XMLHttpRequest||"undefined"!==typeof t&&"[object process]"===Object.prototype.toString.call(t))&&(e=n("776e")),e}var l={adapter:s(),transformRequest:[function(e,t){return r(t,"Accept"),r(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(a(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(a(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"===typeof e)try{e=JSON.parse(e)}catch(t){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};i.forEach(["delete","get","head"],(function(e){l.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){l.headers[e]=i.merge(o)})),e.exports=l}).call(this,n("c32c"))},"0f06":function(e,t,n){"use strict";(function(t,i){var r;e.exports=A,A.ReadableState=T;n("5272").EventEmitter;var o=function(e,t){return e.listeners(t).length},a=n("4337"),s=n("e6c7").Buffer,l=t.Uint8Array||function(){};function u(e){return s.from(e)}function c(e){return s.isBuffer(e)||e instanceof l}var h,d=n(1);h=d&&d.debuglog?d.debuglog("stream"):function(){};var f,p,g,m=n("fa99"),v=n("b3df"),y=n("d0f7"),b=y.getHighWaterMark,w=n("b8fc").codes,x=w.ERR_INVALID_ARG_TYPE,_=w.ERR_STREAM_PUSH_AFTER_EOF,M=w.ERR_METHOD_NOT_IMPLEMENTED,I=w.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n("7fdc")(A,a);var C=v.errorOrDestroy,S=["error","close","destroy","pause","resume"];function D(e,t,n){if("function"===typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}function T(e,t,i){r=r||n("8ce7"),e=e||{},"boolean"!==typeof i&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=b(this,e,"readableHighWaterMark",i),this.buffer=new m,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(f||(f=n("b858").StringDecoder),this.decoder=new f(e.encoding),this.encoding=e.encoding)}function A(e){if(r=r||n("8ce7"),!(this instanceof A))return new A(e);var t=this instanceof r;this._readableState=new T(e,this,t),this.readable=!0,e&&("function"===typeof e.read&&(this._read=e.read),"function"===typeof e.destroy&&(this._destroy=e.destroy)),a.call(this)}function k(e,t,n,i,r){h("readableAddChunk",t);var o,a=e._readableState;if(null===t)a.reading=!1,B(e,a);else if(r||(o=N(a,t)),o)C(e,o);else if(a.objectMode||t&&t.length>0)if("string"===typeof t||a.objectMode||Object.getPrototypeOf(t)===s.prototype||(t=u(t)),i)a.endEmitted?C(e,new I):E(e,a,t,!0);else if(a.ended)C(e,new _);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?E(e,a,t,!1):R(e,a)):E(e,a,t,!1)}else i||(a.reading=!1,R(e,a));return!a.ended&&(a.length=O?e=O:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function L(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=P(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function B(e,t){if(h("onEofChunk"),!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?j(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,z(e)))}}function j(e){var t=e._readableState;h("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(h("emitReadable",t.flowing),t.emittedReadable=!0,i.nextTick(z,e))}function z(e){var t=e._readableState;h("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,G(e)}function R(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(F,e,t))}function F(e,t){while(!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function $(e){h("readable nexttick read 0"),e.read(0)}function U(e,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(W,e,t))}function W(e,t){h("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),G(e),t.flowing&&!t.reading&&e.read(0)}function G(e){var t=e._readableState;h("flow",t.flowing);while(t.flowing&&null!==e.read());}function Z(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n);var n}function Y(e){var t=e._readableState;h("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,i.nextTick(Q,t,e))}function Q(e,t){if(h("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}function q(e,t){for(var n=0,i=e.length;n=t.highWaterMark:t.length>0)||t.ended))return h("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?Y(this):j(this),null;if(e=L(e,t),0===e&&t.ended)return 0===t.length&&Y(this),null;var i,r=t.needReadable;return h("need readable",r),(0===t.length||t.length-e0?Z(e,t):null,null===i?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&Y(this)),null!==i&&this.emit("data",i),i},A.prototype._read=function(e){C(this,new M("_read()"))},A.prototype.pipe=function(e,t){var n=this,r=this._readableState;switch(r.pipesCount){case 0:r.pipes=e;break;case 1:r.pipes=[r.pipes,e];break;default:r.pipes.push(e);break}r.pipesCount+=1,h("pipe count=%d opts=%j",r.pipesCount,t);var a=(!t||!1!==t.end)&&e!==i.stdout&&e!==i.stderr,s=a?u:y;function l(e,t){h("onunpipe"),e===n&&t&&!1===t.hasUnpiped&&(t.hasUnpiped=!0,f())}function u(){h("onend"),e.end()}r.endEmitted?i.nextTick(s):n.once("end",s),e.on("unpipe",l);var c=V(n);e.on("drain",c);var d=!1;function f(){h("cleanup"),e.removeListener("close",m),e.removeListener("finish",v),e.removeListener("drain",c),e.removeListener("error",g),e.removeListener("unpipe",l),n.removeListener("end",u),n.removeListener("end",y),n.removeListener("data",p),d=!0,!r.awaitDrain||e._writableState&&!e._writableState.needDrain||c()}function p(t){h("ondata");var i=e.write(t);h("dest.write",i),!1===i&&((1===r.pipesCount&&r.pipes===e||r.pipesCount>1&&-1!==q(r.pipes,e))&&!d&&(h("false write response, pause",r.awaitDrain),r.awaitDrain++),n.pause())}function g(t){h("onerror",t),y(),e.removeListener("error",g),0===o(e,"error")&&C(e,t)}function m(){e.removeListener("finish",v),y()}function v(){h("onfinish"),e.removeListener("close",m),y()}function y(){h("unpipe"),n.unpipe(e)}return n.on("data",p),D(e,"error",g),e.once("close",m),e.once("finish",v),e.emit("pipe",n),r.flowing||(h("pipe resume"),n.resume()),e},A.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n)),this;if(!e){var i=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0,!1!==r.flowing&&this.resume()):"readable"===e&&(r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,h("on readable",r.length,r.reading),r.length?j(this):r.reading||i.nextTick($,this))),n},A.prototype.addListener=A.prototype.on,A.prototype.removeListener=function(e,t){var n=a.prototype.removeListener.call(this,e,t);return"readable"===e&&i.nextTick(H,this),n},A.prototype.removeAllListeners=function(e){var t=a.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||i.nextTick(H,this),t},A.prototype.resume=function(){var e=this._readableState;return e.flowing||(h("resume"),e.flowing=!e.readableListening,U(this,e)),e.paused=!1,this},A.prototype.pause=function(){return h("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(h("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},A.prototype.wrap=function(e){var t=this,n=this._readableState,i=!1;for(var r in e.on("end",(function(){if(h("wrapped end"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(r){if(h("wrapped data"),n.decoder&&(r=n.decoder.write(r)),(!n.objectMode||null!==r&&void 0!==r)&&(n.objectMode||r&&r.length)){var o=t.push(r);o||(i=!0,e.pause())}})),e)void 0===this[r]&&"function"===typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));for(var o=0;o=e.length?(this._t=void 0,r(1)):r(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},1237:function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("f298"),a=n("405f"),s=n("0b9d"),l=n("44e1"),u=i.extendComponentView({type:"visualMap",autoPositionValues:{left:1,right:1,top:1,bottom:1},init:function(e,t){this.ecModel=e,this.api=t,this.visualMapModel},render:function(e,t,n,i){this.visualMapModel=e,!1!==e.get("show")?this.doRender.apply(this,arguments):this.group.removeAll()},renderBackground:function(e){var t=this.visualMapModel,n=a.normalizeCssArray(t.get("padding")||0),i=e.getBoundingRect();e.add(new o.Rect({z2:-1,silent:!0,shape:{x:i.x-n[3],y:i.y-n[0],width:i.width+n[3]+n[1],height:i.height+n[0]+n[2]},style:{fill:t.get("backgroundColor"),stroke:t.get("borderColor"),lineWidth:t.get("borderWidth")}}))},getControllerVisual:function(e,t,n){n=n||{};var i=n.forceState,o=this.visualMapModel,a={};if("symbol"===t&&(a.symbol=o.get("itemSymbol")),"color"===t){var s=o.get("contentColor");a.color=s}function u(e){return a[e]}function c(e,t){a[e]=t}var h=o.controllerVisuals[i||o.getValueState(e)],d=l.prepareVisualTypes(h);return r.each(d,(function(i){var r=h[i];n.convertOpacityToAlpha&&"opacity"===i&&(i="colorAlpha",r=h.__alphaForOpacity),l.dependsOn(i,t)&&r&&r.applyVisual(e,u,c)})),a[t]},positionGroup:function(e){var t=this.visualMapModel,n=this.api;s.positionElement(e,t.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()})},doRender:r.noop});e.exports=u},"12e6":function(e,t,n){var i=n("357b"),r=n("92dd"),o=n("759b"),a=o.seriesModelMixin,s=r.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],defaultValueDimensions:[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}});i.mixin(s,a,!0);var l=s;e.exports=l},"12f9":function(e,t,n){var i=n("edfd"),r=n("e044");e.exports=n("c477")?function(e,t,n){return i.f(e,t,r(1,n))}:function(e,t,n){return e[t]=n,e}},1348:function(e,t,n){var i=n("357b"),r=n("2636"),o=n("8e0a"),a=n("8303"),s=n("d3e5"),l=n("405f"),u=i.each,c=l.toCamelCase,h=["","-webkit-","-moz-","-o-"],d="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";function f(e){var t="cubic-bezier(0.23, 1, 0.32, 1)",n="left "+e+"s "+t+",top "+e+"s "+t;return i.map(h,(function(e){return e+"transition:"+n})).join(";")}function p(e){var t=[],n=e.get("fontSize"),i=e.getTextColor();i&&t.push("color:"+i),t.push("font:"+e.getFont());var r=e.get("lineHeight");null==r&&(r=Math.round(3*n/2)),n&&t.push("line-height:"+r+"px");var o=e.get("textShadowColor"),a=e.get("textShadowBlur")||0,s=e.get("textShadowOffsetX")||0,l=e.get("textShadowOffsetY")||0;return a&&t.push("text-shadow:"+s+"px "+l+"px "+a+"px "+o),u(["decoration","align"],(function(n){var i=e.get(n);i&&t.push("text-"+n+":"+i)})),t.join(";")}function g(e){var t=[],n=e.get("transitionDuration"),i=e.get("backgroundColor"),o=e.getModel("textStyle"),a=e.get("padding");return n&&t.push(f(n)),i&&(s.canvasSupported?t.push("background-Color:"+i):(t.push("background-Color:#"+r.toHex(i)),t.push("filter:alpha(opacity=70)"))),u(["width","color","radius"],(function(n){var i="border-"+n,r=c(i),o=e.get(r);null!=o&&t.push(i+":"+o+("color"===n?"":"px"))})),t.push(p(o)),null!=a&&t.push("padding:"+l.normalizeCssArray(a).join("px ")+"px"),t.join(";")+";"}function m(e,t,n,i,r){var o=t&&t.painter;if(n){var s=o&&o.getViewportRoot();s&&a.transformLocalCoord(e,s,document.body,i,r)}else{e[0]=i,e[1]=r;var l=o&&o.getViewportRootOffset();l&&(e[0]+=l.offsetLeft,e[1]+=l.offsetTop)}e[2]=e[0]/t.getWidth(),e[3]=e[1]/t.getHeight()}function v(e,t,n){if(s.wxa)return null;var i=document.createElement("div");i.domBelongToZr=!0,this.el=i;var r=this._zr=t.getZr(),a=this._appendToBody=n&&n.appendToBody;this._styleCoord=[0,0,0,0],m(this._styleCoord,r,a,t.getWidth()/2,t.getHeight()/2),a?document.body.appendChild(i):e.appendChild(i),this._container=e,this._show=!1,this._hideTimeout;var l=this;i.onmouseenter=function(){l._enterable&&(clearTimeout(l._hideTimeout),l._show=!0),l._inContent=!0},i.onmousemove=function(e){if(e=e||window.event,!l._enterable){var t=r.handler,n=r.painter.getViewportRoot();o.normalizeEvent(n,e,!0),t.dispatch("mousemove",e)}},i.onmouseleave=function(){l._enterable&&l._show&&l.hideLater(l._hideDelay),l._inContent=!1}}v.prototype={constructor:v,_enterable:!0,update:function(e){var t=this._container,n=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==n.position&&(i.position="relative");var r=e.get("alwaysShowContent");r&&this._moveTooltipIfResized()},_moveTooltipIfResized:function(){var e=this._styleCoord[2],t=this._styleCoord[3],n=e*this._zr.getWidth(),i=t*this._zr.getHeight();this.moveTo(n,i)},show:function(e){clearTimeout(this._hideTimeout);var t=this.el,n=this._styleCoord;t.style.cssText=d+g(e)+";left:"+n[0]+"px;top:"+n[1]+"px;"+(e.get("extraCssText")||""),t.style.display=t.innerHTML?"block":"none",t.style.pointerEvents=this._enterable?"auto":"none",this._show=!0},setContent:function(e){this.el.innerHTML=null==e?"":e},setEnterable:function(e){this._enterable=e},getSize:function(){var e=this.el;return[e.clientWidth,e.clientHeight]},moveTo:function(e,t){var n=this._styleCoord;m(n,this._zr,this._appendToBody,e,t);var i=this.el.style;i.left=n[0]+"px",i.top=n[1]+"px"},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(e){!this._show||this._inContent&&this._enterable||(e?(this._hideDelay=e,this._show=!1,this._hideTimeout=setTimeout(i.bind(this.hide,this),e)):this.hide())},isShow:function(){return this._show},dispose:function(){this.el.parentNode.removeChild(this.el)},getOuterSize:function(){var e=this.el.clientWidth,t=this.el.clientHeight;if(document.defaultView&&document.defaultView.getComputedStyle){var n=document.defaultView.getComputedStyle(this.el);n&&(e+=parseInt(n.borderLeftWidth,10)+parseInt(n.borderRightWidth,10),t+=parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10))}return{width:e,height:t}}};var y=v;e.exports=y},"138d":function(e,t,n){var i=n("a1ff"),r=n("a7e5"),o=n("f59f"),a=function(){this.group=new i,this.uid=r.getUID("viewComponent")};a.prototype={constructor:a,init:function(e,t){},render:function(e,t,n,i){},dispose:function(){},filterForExposedEvent:null};var s=a.prototype;s.updateView=s.updateLayout=s.updateVisual=function(e,t,n,i){},o.enableClassExtend(a),o.enableClassManagement(a,{registerWhenExtend:!0});var l=a;e.exports=l},"13b5":function(e,t,n){var i=n("0e58"),r=n("138d"),o=n("887c"),a=o.detectSourceFormat,s=n("cc5e"),l=s.SERIES_LAYOUT_BY_COLUMN;i.extend({type:"dataset",defaultOption:{seriesLayoutBy:l,sourceHeader:null,dimensions:null,source:null},optionUpdated:function(){a(this)}}),r.extend({type:"dataset"})},"13c6":function(e,t,n){var i=n("0d37"),r=n("e031"),o=r.ContextCachedBy,a=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],s=function(e){this.extendFrom(e,!1)};function l(e,t,n){var i=null==t.x?0:t.x,r=null==t.x2?1:t.x2,o=null==t.y?0:t.y,a=null==t.y2?0:t.y2;t.global||(i=i*n.width+n.x,r=r*n.width+n.x,o=o*n.height+n.y,a=a*n.height+n.y),i=isNaN(i)?0:i,r=isNaN(r)?1:r,o=isNaN(o)?0:o,a=isNaN(a)?0:a;var s=e.createLinearGradient(i,o,r,a);return s}function u(e,t,n){var i=n.width,r=n.height,o=Math.min(i,r),a=null==t.x?.5:t.x,s=null==t.y?.5:t.y,l=null==t.r?.5:t.r;t.global||(a=a*i+n.x,s=s*r+n.y,l*=o);var u=e.createRadialGradient(a,s,0,a,s,l);return u}s.prototype={constructor:s,fill:"#000",stroke:null,opacity:1,fillOpacity:null,strokeOpacity:null,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,font:null,textFont:null,fontStyle:null,fontWeight:null,fontSize:null,fontFamily:null,textTag:null,textFill:"#000",textStroke:null,textWidth:null,textHeight:null,textStrokeWidth:0,textLineHeight:null,textPosition:"inside",textRect:null,textOffset:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowColor:"transparent",textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textBoxShadowColor:"transparent",textBoxShadowBlur:0,textBoxShadowOffsetX:0,textBoxShadowOffsetY:0,transformText:!1,textRotation:0,textOrigin:null,textBackgroundColor:null,textBorderColor:null,textBorderWidth:0,textBorderRadius:0,textPadding:null,rich:null,truncate:null,blend:null,bind:function(e,t,n){var r=this,s=n&&n.style,l=!s||e.__attrCachedBy!==o.STYLE_BIND;e.__attrCachedBy=o.STYLE_BIND;for(var u=0;u0},extendFrom:function(e,t){if(e)for(var n in e)!e.hasOwnProperty(n)||!0!==t&&(!1===t?this.hasOwnProperty(n):null==e[n])||(this[n]=e[n])},set:function(e,t){"string"===typeof e?this[e]=t:this.extendFrom(e,!0)},clone:function(){var e=new this.constructor;return e.extendFrom(this,!0),e},getGradient:function(e,t,n){for(var i="radial"===t.type?u:l,r=i(e,t,n),o=t.colorStops,a=0;a=2){if(a&&"spline"!==a){var s=r(o,a,n,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var l=o.length,u=0;u<(n?l:l-1);u++){var c=s[2*u],h=s[2*u+1],d=o[(u+1)%l];e.bezierCurveTo(c[0],c[1],h[0],h[1],d[0],d[1])}}else{"spline"===a&&(o=i(o,n)),e.moveTo(o[0][0],o[0][1]);u=1;for(var f=o.length;uw||Math.abs(e.dy)>w)){var t=this.seriesModel.getData().tree.root;if(!t)return;var n=t.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+e.dx,y:n.y+e.dy,width:n.width,height:n.height}})}},_onZoom:function(e){var t=e.originX,n=e.originY;if("animating"!==this._state){var i=this.seriesModel.getData().tree.root;if(!i)return;var r=i.getLayout();if(!r)return;var o=new c(r.x,r.y,r.width,r.height),a=this.seriesModel.layoutInfo;t-=a.x,n-=a.y;var s=h.create();h.translate(s,s,[-t,-n]),h.scale(s,s,[e.scale,e.scale]),h.translate(s,s,[t,n]),o.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:o.x,y:o.y,width:o.width,height:o.height}})}},_initEvents:function(e){e.on("click",(function(e){if("ready"===this._state){var t=this.seriesModel.get("nodeClick",!0);if(t){var n=this.findTarget(e.offsetX,e.offsetY);if(n){var i=n.node;if(i.getLayout().isLeafRoot)this._rootToNode(n);else if("zoomToNode"===t)this._zoomToNode(n);else if("link"===t){var r=i.hostTree.data.getItemModel(i.dataIndex),o=r.get("link",!0),a=r.get("target",!0)||"blank";o&&g(o,a)}}}}}),this)},_renderBreadcrumb:function(e,t,n){function i(t){"animating"!==this._state&&(s.aboveViewRoot(e.getViewRoot(),t)?this._rootToNode({node:t}):this._zoomToNode({node:t}))}n||(n=null!=e.get("leafDepth",!0)?{node:e.getViewRoot()}:this.findTarget(t.getWidth()/2,t.getHeight()/2),n||(n={node:e.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new l(this.group))).render(e,t,n.node,m(i,this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=E(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(e){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:e.node})},_rootToNode:function(e){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:e.node})},findTarget:function(e,t){var n,i=this.seriesModel.getViewRoot();return i.eachNode({attr:"viewChildren",order:"preorder"},(function(i){var r=this._storage.background[i.getRawIndex()];if(r){var o=r.transformCoordToLocal(e,t),a=r.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:i,offsetX:o[0],offsetY:o[1]}}}),this),n}});function E(){return{nodeGroup:[],background:[],content:[]}}function N(e,t,n,i,a,s,l,u,c,h){if(l){var d=l.getLayout(),f=e.getData();if(f.setItemGraphicEl(l.dataIndex,null),d&&d.isInView){var p=d.width,g=d.height,m=d.borderWidth,b=d.invisible,w=l.getRawIndex(),C=u&&u.getRawIndex(),k=l.viewChildren,E=d.upperHeight,N=k&&k.length,P=l.getModel("itemStyle"),L=l.getModel("emphasis.itemStyle"),B=W("nodeGroup",v);if(B){if(c.add(B),B.attr("position",[d.x||0,d.y||0]),B.__tmNodeWidth=p,B.__tmNodeHeight=g,d.isAboveViewRoot)return B;var j=l.getModel(),z=W("background",y,h,S);if(z&&F(B,z,N&&d.upperLabelHeight),N)o.isHighDownDispatcher(B)&&o.setAsHighDownDispatcher(B,!1),z&&(o.setAsHighDownDispatcher(z,!0),f.setItemGraphicEl(l.dataIndex,z));else{var R=W("content",y,h,D);R&&V(B,R),z&&o.isHighDownDispatcher(z)&&o.setAsHighDownDispatcher(z,!1),o.setAsHighDownDispatcher(B,!0),f.setItemGraphicEl(l.dataIndex,B)}return B}}}function F(t,n,i){if(n.dataIndex=l.dataIndex,n.seriesIndex=e.seriesIndex,n.setShape({x:0,y:0,width:p,height:g}),b)H(n);else{n.invisible=!1;var r=l.getVisual("borderColor",!0),a=L.get("borderColor"),s=A(P);s.fill=r;var u=T(L);if(u.fill=a,i){var c=p-2*m;$(s,u,r,c,E,{x:m,y:0,width:c,height:E})}else s.text=u.text=null;n.setStyle(s),o.setElementHoverStyle(n,u)}t.add(n)}function V(t,n){n.dataIndex=l.dataIndex,n.seriesIndex=e.seriesIndex;var i=Math.max(p-2*m,0),r=Math.max(g-2*m,0);if(n.culling=!0,n.setShape({x:m,y:m,width:i,height:r}),b)H(n);else{n.invisible=!1;var a=l.getVisual("color",!0),s=A(P);s.fill=a;var u=T(L);$(s,u,a,i,r),n.setStyle(s),o.setElementHoverStyle(n,u)}t.add(n)}function H(e){!e.invisible&&s.push(e)}function $(t,n,i,a,s,u){var c=j.get("name"),h=j.getModel(u?M:x),f=j.getModel(u?I:_),p=h.getShallow("show");o.setLabelStyle(t,n,h,f,{defaultText:p?c:null,autoColor:i,isRectText:!0,labelFetcher:e,labelDataIndex:l.dataIndex,labelProp:u?"upperLabel":"label"}),U(t,u,d),U(n,u,d),u&&(t.textRect=r.clone(u)),t.truncate=p&&h.get("ellipsis")?{outerWidth:a,outerHeight:s,minChar:2}:null}function U(t,n,i){var r=t.text;if(!n&&i.isLeafRoot&&null!=r){var o=e.get("drillDownIcon",!0);t.text=o?o+" "+r:r}}function W(e,i,r,o){var s=null!=C&&n[e][C],l=a[e];return s?(n[e][C]=null,G(l,s,e)):b||(s=new i({z:O(r,o)}),s.__tmDepth=r,s.__tmStorageName=e,Z(l,s,e)),t[e][w]=s}function G(e,t,n){var i=e[w]={};i.old="nodeGroup"===n?t.position.slice():r.extend({},t.shape)}function Z(e,t,n){var r=e[w]={},o=l.parentNode;if(o&&(!i||"drillDown"===i.direction)){var s=0,u=0,c=a.background[o.getRawIndex()];!i&&c&&c.old&&(s=c.old.width,u=c.old.height),r.old="nodeGroup"===n?[0,u]:{x:s,y:u,width:0,height:0}}r.fadein="nodeGroup"!==n}}function O(e,t){var n=e*C+t;return(n-1)/n}e.exports=k},1713:function(e,t,n){var i=n("a2d7"),r=i.createElement,o=n("357b"),a=n("954d"),s=n("364b"),l=n("ecba"),u=n("0227"),c=n("c365"),h=n("5b7d"),d=n("7199"),f=n("8dca"),p=n("ad9f"),g=p.path,m=p.image,v=p.text;function y(e){return parseInt(e,10)}function b(e){return e instanceof s?g:e instanceof l?m:e instanceof u?v:g}function w(e,t){return t&&e&&t.parentNode!==e}function x(e,t,n){if(w(e,t)&&n){var i=n.nextSibling;i?e.insertBefore(t,i):e.appendChild(t)}}function _(e,t){if(w(e,t)){var n=e.firstChild;n?e.insertBefore(t,n):e.appendChild(t)}}function M(e,t){t&&e&&t.parentNode===e&&e.removeChild(t)}function I(e){return e.__textSvgEl}function C(e){return e.__svgEl}var S=function(e,t,n,i){this.root=e,this.storage=t,this._opts=n=o.extend({},n||{});var a=r("svg");a.setAttribute("xmlns","http://www.w3.org/2000/svg"),a.setAttribute("version","1.1"),a.setAttribute("baseProfile","full"),a.style.cssText="user-select:none;position:absolute;left:0;top:0;";var s=r("g");a.appendChild(s);var l=r("g");a.appendChild(l),this.gradientManager=new h(i,l),this.clipPathManager=new d(i,l),this.shadowManager=new f(i,l);var u=document.createElement("div");u.style.cssText="overflow:hidden;position:relative",this._svgDom=a,this._svgRoot=l,this._backgroundRoot=s,this._viewport=u,e.appendChild(u),u.appendChild(a),this.resize(n.width,n.height),this._visibleList=[]};function D(e){return function(){a('In SVG mode painter not support method "'+e+'"')}}S.prototype={constructor:S,getType:function(){return"svg"},getViewportRoot:function(){return this._viewport},getSvgDom:function(){return this._svgDom},getSvgRoot:function(){return this._svgRoot},getViewportRootOffset:function(){var e=this.getViewportRoot();if(e)return{offsetLeft:e.offsetLeft||0,offsetTop:e.offsetTop||0}},refresh:function(){var e=this.storage.getDisplayList(!0);this._paintList(e)},setBackgroundColor:function(e){this._backgroundRoot&&this._backgroundNode&&this._backgroundRoot.removeChild(this._backgroundNode);var t=r("rect");t.setAttribute("width",this.getWidth()),t.setAttribute("height",this.getHeight()),t.setAttribute("x",0),t.setAttribute("y",0),t.setAttribute("id",0),t.style.fill=e,this._backgroundRoot.appendChild(t),this._backgroundNode=t},_paintList:function(e){this.gradientManager.markAllUnused(),this.clipPathManager.markAllUnused(),this.shadowManager.markAllUnused();var t,n=this._svgRoot,i=this._visibleList,r=e.length,o=[];for(t=0;t=0;--i)if(t[i]===e)return!0;return!1}),n}return null}return n[0]},resize:function(e,t){var n=this._viewport;n.style.display="none";var i=this._opts;if(null!=e&&(i.width=e),null!=t&&(i.height=t),e=this._getSize(0),t=this._getSize(1),n.style.display="",this._width!==e||this._height!==t){this._width=e,this._height=t;var r=n.style;r.width=e+"px",r.height=t+"px";var o=this._svgDom;o.setAttribute("width",e),o.setAttribute("height",t)}this._backgroundNode&&(this._backgroundNode.setAttribute("width",e),this._backgroundNode.setAttribute("height",t))},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(e){var t=this._opts,n=["width","height"][e],i=["clientWidth","clientHeight"][e],r=["paddingLeft","paddingTop"][e],o=["paddingRight","paddingBottom"][e];if(null!=t[n]&&"auto"!==t[n])return parseFloat(t[n]);var a=this.root,s=document.defaultView.getComputedStyle(a);return(a[i]||y(s[n])||y(a.style[n]))-(y(s[r])||0)-(y(s[o])||0)|0},dispose:function(){this.root.innerHTML="",this._svgRoot=this._backgroundRoot=this._svgDom=this._backgroundNode=this._viewport=this.storage=null},clear:function(){this._viewport&&this.root.removeChild(this._viewport)},toDataURL:function(){this.refresh();var e=encodeURIComponent(this._svgDom.outerHTML.replace(/>\n\r<"));return"data:image/svg+xml;charset=UTF-8,"+e}},o.each(["getLayer","insertLayer","eachLayer","eachBuiltinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","pathToImage"],(function(e){S.prototype[e]=D(e)}));var T=S;e.exports=T},1746:function(e,t,n){var i=n("ce19"),r=n("9354");function o(e,t){var n=[];return e.eachComponent("parallel",(function(r,o){var a=new i(r,e,t);a.name="parallel_"+o,a.resize(r,t),r.coordinateSystem=a,a.model=r,n.push(a)})),e.eachSeries((function(t){if("parallel"===t.get("coordinateSystem")){var n=e.queryComponents({mainType:"parallel",index:t.get("parallelIndex"),id:t.get("parallelId")})[0];t.coordinateSystem=n.coordinateSystem}})),n}r.register("parallel",{create:o})},"17c9":function(e){e.exports=JSON.parse('{"name":"elliptic","version":"6.5.4","description":"EC cryptography","main":"lib/elliptic.js","files":["lib"],"scripts":{"lint":"eslint lib test","lint:fix":"npm run lint -- --fix","unit":"istanbul test _mocha --reporter=spec test/index.js","test":"npm run lint && npm run unit","version":"grunt dist && git add dist/"},"repository":{"type":"git","url":"git@github.com:indutny/elliptic"},"keywords":["EC","Elliptic","curve","Cryptography"],"author":"Fedor Indutny ","license":"MIT","bugs":{"url":"https://github.com/indutny/elliptic/issues"},"homepage":"https://github.com/indutny/elliptic","devDependencies":{"brfs":"^2.0.2","coveralls":"^3.1.0","eslint":"^7.6.0","grunt":"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1","istanbul":"^0.4.5","mocha":"^8.0.1"},"dependencies":{"bn.js":"^4.11.9","brorand":"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1","inherits":"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}')},"17cd":function(e,t,n){var i=n("a7be"),r=n("4474").concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return i(e,r)}},"17de":function(e,t,n){var i=n("be16").Buffer;function r(e,t,n){var r=e._cipher.encryptBlock(e._prev),o=r[0]^t;return e._prev=i.concat([e._prev.slice(1),i.from([n?t:o])]),o}t.encrypt=function(e,t,n){var o=t.length,a=i.allocUnsafe(o),s=-1;while(++s=0||e===t}function f(e){var t=p(e);if(t){var n=t.axisPointerModel,i=t.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=m(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),aa&&(a=t)})),r.each(n,(function(t){var n=new i({type:"color",mappingMethod:"linear",dataExtent:[o,a],visual:e.get("color")}),r=n.mapValueToVisual(t.getLayout().value),s=t.getModel().get("itemStyle.color");null!=s?t.setVisual("color",s):t.setVisual("color",r)}))}}))}e.exports=o},"1a7b":function(e,t,n){var i=n("357b"),r=n("cb77"),o=r.parsePercent,a=i.each;function s(e){var t=l(e);a(t,(function(e){var t=e.seriesModels;t.length&&(u(e),a(t,(function(t,n){c(t,e.boxOffsetList[n],e.boxWidthList[n])})))}))}function l(e){var t=[],n=[];return e.eachSeriesByType("boxplot",(function(e){var r=e.getBaseAxis(),o=i.indexOf(n,r);o<0&&(o=n.length,n[o]=r,t[o]={axis:r,seriesModels:[]}),t[o].seriesModels.push(e)})),t}function u(e){var t,n,r=e.axis,s=e.seriesModels,l=s.length,u=e.boxWidthList=[],c=e.boxOffsetList=[],h=[];if("category"===r.type)n=r.getBandWidth();else{var d=0;a(s,(function(e){d=Math.max(d,e.getData().count())})),t=r.getExtent(),Math.abs(t[1]-t[0])}a(s,(function(e){var t=e.get("boxWidth");i.isArray(t)||(t=[t,t]),h.push([o(t[0],n)||0,o(t[1],n)||0])}));var f=.8*n-2,p=f/l*.3,g=(f-p*(l-1))/l,m=g/2-f/2;a(s,(function(e,t){c.push(m),m+=p+g,u.push(Math.min(Math.max(g,h[t][0]),h[t][1]))}))}function c(e,t,n){var i=e.coordinateSystem,r=e.getData(),o=n/2,a="horizontal"===e.get("layout")?0:1,s=1-a,l=["x","y"],u=r.mapDimension(l[a]),c=r.mapDimension(l[s],!0);if(!(null==u||c.length<5))for(var h=0;h=r||m<0)break;if(f(y)){if(p){m+=o;continue}break}if(m===n)e[o>0?"moveTo":"lineTo"](y[0],y[1]);else if(l>0){var b=t[g],w="y"===c?1:0,x=(y[w]-b[w])*l;u(h,b),h[w]=b[w]+x,u(d,y),d[w]=y[w]-x,e.bezierCurveTo(h[0],h[1],d[0],d[1],y[0],y[1])}else e.lineTo(y[0],y[1]);g=m,m+=o}return v}function m(e,t,n,i,o,p,g,m,v,y,b){for(var w=0,x=n,_=0;_=o||x<0)break;if(f(M)){if(b){x+=p;continue}break}if(x===n)e[p>0?"moveTo":"lineTo"](M[0],M[1]),u(h,M);else if(v>0){var I=x+p,C=t[I];if(b)while(C&&f(t[I]))I+=p,C=t[I];var S=.5,D=t[w];C=t[I];if(!C||f(C))u(d,M);else{var T,A;if(f(C)&&!b&&(C=M),r.sub(c,C,D),"x"===y||"y"===y){var k="x"===y?0:1;T=Math.abs(M[k]-D[k]),A=Math.abs(M[k]-C[k])}else T=r.dist(M,D),A=r.dist(M,C);S=A/(A+T),l(d,M,c,-v*(1-S))}a(h,h,m),s(h,h,g),a(d,d,m),s(d,d,g),e.bezierCurveTo(h[0],h[1],d[0],d[1],M[0],M[1]),l(h,M,c,v*S)}else e.lineTo(M[0],M[1]);w=x,x+=p}return _}function v(e,t){var n=[1/0,1/0],i=[-1/0,-1/0];if(t)for(var r=0;ri[0]&&(i[0]=o[0]),o[1]>i[1]&&(i[1]=o[1])}return{min:t?n:i,max:t?i:n}}var y=i.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},brush:o(i.prototype.brush),buildPath:function(e,t){var n=t.points,i=0,r=n.length,o=v(n,t.smoothConstraint);if(t.connectNulls){for(;r>0;r--)if(!f(n[r-1]))break;for(;i0;o--)if(!f(n[o-1]))break;for(;r=2*(1<<30))throw new RangeError('The value "'+e+'" is invalid for option "size"');var i=o(e);return t&&0!==t.length?"string"===typeof n?i.fill(t,n):i.fill(t):i.fill(0),i}),!a.kStringMaxLength)try{a.kStringMaxLength=t.binding("buffer").kStringMaxLength}catch(l){}a.constants||(a.constants={MAX_LENGTH:a.kMaxLength},a.kStringMaxLength&&(a.constants.MAX_STRING_LENGTH=a.kStringMaxLength)),e.exports=a}).call(this,n("c32c"))},"1be2":function(e){e.exports=JSON.parse('{"aes-128-ecb":{"cipher":"AES","key":128,"iv":0,"mode":"ECB","type":"block"},"aes-192-ecb":{"cipher":"AES","key":192,"iv":0,"mode":"ECB","type":"block"},"aes-256-ecb":{"cipher":"AES","key":256,"iv":0,"mode":"ECB","type":"block"},"aes-128-cbc":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes-192-cbc":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes-256-cbc":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes128":{"cipher":"AES","key":128,"iv":16,"mode":"CBC","type":"block"},"aes192":{"cipher":"AES","key":192,"iv":16,"mode":"CBC","type":"block"},"aes256":{"cipher":"AES","key":256,"iv":16,"mode":"CBC","type":"block"},"aes-128-cfb":{"cipher":"AES","key":128,"iv":16,"mode":"CFB","type":"stream"},"aes-192-cfb":{"cipher":"AES","key":192,"iv":16,"mode":"CFB","type":"stream"},"aes-256-cfb":{"cipher":"AES","key":256,"iv":16,"mode":"CFB","type":"stream"},"aes-128-cfb8":{"cipher":"AES","key":128,"iv":16,"mode":"CFB8","type":"stream"},"aes-192-cfb8":{"cipher":"AES","key":192,"iv":16,"mode":"CFB8","type":"stream"},"aes-256-cfb8":{"cipher":"AES","key":256,"iv":16,"mode":"CFB8","type":"stream"},"aes-128-cfb1":{"cipher":"AES","key":128,"iv":16,"mode":"CFB1","type":"stream"},"aes-192-cfb1":{"cipher":"AES","key":192,"iv":16,"mode":"CFB1","type":"stream"},"aes-256-cfb1":{"cipher":"AES","key":256,"iv":16,"mode":"CFB1","type":"stream"},"aes-128-ofb":{"cipher":"AES","key":128,"iv":16,"mode":"OFB","type":"stream"},"aes-192-ofb":{"cipher":"AES","key":192,"iv":16,"mode":"OFB","type":"stream"},"aes-256-ofb":{"cipher":"AES","key":256,"iv":16,"mode":"OFB","type":"stream"},"aes-128-ctr":{"cipher":"AES","key":128,"iv":16,"mode":"CTR","type":"stream"},"aes-192-ctr":{"cipher":"AES","key":192,"iv":16,"mode":"CTR","type":"stream"},"aes-256-ctr":{"cipher":"AES","key":256,"iv":16,"mode":"CTR","type":"stream"},"aes-128-gcm":{"cipher":"AES","key":128,"iv":12,"mode":"GCM","type":"auth"},"aes-192-gcm":{"cipher":"AES","key":192,"iv":12,"mode":"GCM","type":"auth"},"aes-256-gcm":{"cipher":"AES","key":256,"iv":12,"mode":"GCM","type":"auth"}}')},"1c36":function(e,t,n){var i=n("3fcc"),r=i.extend({type:"dataZoom.select"});e.exports=r},"1c97":function(e,t,n){var i=n("357b");function r(e){for(var t=0;t=0||r&&i.indexOf(r,s)<0)){var l=t.getShallow(s);null!=l&&(o[e[a][0]]=l)}}return o}}e.exports=r},"1ceb":function(e,t,n){var i=n("357b"),r=i.each,o=i.map,a=i.isFunction,s=i.createHashMap,l=i.noop,u=n("aa76"),c=u.createTask,h=n("a7e5"),d=h.getUID,f=n("d655"),p=n("60a0"),g=n("faa9"),m=g.normalizeToArray;function v(e,t,n,i){this.ecInstance=e,this.api=t,this.unfinished;n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice();this._allHandlers=n.concat(i),this._stageTaskMap=s()}var y=v.prototype;function b(e,t,n,i,o){var a;function s(e,t){return e.setDirty&&(!e.dirtyMap||e.dirtyMap.get(t.__pipeline.id))}o=o||{},r(t,(function(t,r){if(!o.visualType||o.visualType===t.visualType){var l=e._stageTaskMap.get(t.uid),u=l.seriesTaskMap,c=l.overallTask;if(c){var h,d=c.agentStubMap;d.each((function(e){s(o,e)&&(e.dirty(),h=!0)})),h&&c.dirty(),w(c,i);var f=e.getPerformArgs(c,o.block);d.each((function(e){e.perform(f)})),a|=c.perform(f)}else u&&u.each((function(r,l){s(o,r)&&r.dirty();var u=e.getPerformArgs(r,o.block);u.skip=!t.performRawSeries&&n.isSeriesFiltered(r.context.model),w(r,i),a|=r.perform(u)}))}})),e.unfinished|=a}y.restoreData=function(e,t){e.restoreData(t),this._stageTaskMap.each((function(e){var t=e.overallTask;t&&t.dirty()}))},y.getPerformArgs=function(e,t){if(e.__pipeline){var n=this._pipelineMap.get(e.__pipeline.id),i=n.context,r=!t&&n.progressiveEnabled&&(!i||i.progressiveRender)&&e.__idxInPipeline>n.blockIndex,o=r?n.step:null,a=i&&i.modDataCount,s=null!=a?Math.ceil(a/o):null;return{step:o,modBy:s,modDataCount:a}}},y.getPipeline=function(e){return this._pipelineMap.get(e)},y.updateStreamModes=function(e,t){var n=this._pipelineMap.get(e.uid),i=e.getData(),r=i.count(),o=n.progressiveEnabled&&t.incrementalPrepareRender&&r>=n.threshold,a=e.get("large")&&r>=e.get("largeThreshold"),s="mod"===e.get("progressiveChunkMode")?r:null;e.pipelineContext=n.context={progressiveRender:o,modDataCount:s,large:a}},y.restorePipelines=function(e){var t=this,n=t._pipelineMap=s();e.eachSeries((function(e){var i=e.getProgressive(),r=e.uid;n.set(r,{id:r,head:null,tail:null,threshold:e.getProgressiveThreshold(),progressiveEnabled:i&&!(e.preventIncremental&&e.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),N(t,e,e.dataTask)}))},y.prepareStageTasks=function(){var e=this._stageTaskMap,t=this.ecInstance.getModel(),n=this.api;r(this._allHandlers,(function(i){var r=e.get(i.uid)||e.set(i.uid,[]);i.reset&&x(this,i,r,t,n),i.overallReset&&_(this,i,r,t,n)}),this)},y.prepareView=function(e,t,n,i){var r=e.renderTask,o=r.context;o.model=t,o.ecModel=n,o.api=i,r.__block=!e.incrementalPrepareRender,N(this,t,r)},y.performDataProcessorTasks=function(e,t){b(this,this._dataProcessorHandlers,e,t,{block:!0})},y.performVisualTasks=function(e,t,n){b(this,this._visualHandlers,e,t,n)},y.performSeriesTasks=function(e){var t;e.eachSeries((function(e){t|=e.dataTask.perform()})),this.unfinished|=t},y.plan=function(){this._pipelineMap.each((function(e){var t=e.tail;do{if(t.__block){e.blockIndex=t.__idxInPipeline;break}t=t.getUpstream()}while(t)}))};var w=y.updatePayload=function(e,t){"remain"!==t&&(e.context.payload=t)};function x(e,t,n,i,r){var o=n.seriesTaskMap||(n.seriesTaskMap=s()),a=t.seriesType,l=t.getTargetSeries;function u(n){var a=n.uid,s=o.get(a)||o.set(a,c({plan:D,reset:T,count:E}));s.context={model:n,ecModel:i,api:r,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:e},N(e,n,s)}t.createOnAllSeries?i.eachRawSeries(u):a?i.eachRawSeriesByType(a,u):l&&l(i,r).each(u);var h=e._pipelineMap;o.each((function(e,t){h.get(t)||(e.dispose(),o.removeKey(t))}))}function _(e,t,n,i,o){var a=n.overallTask=n.overallTask||c({reset:M});a.context={ecModel:i,api:o,overallReset:t.overallReset,scheduler:e};var l=a.agentStubMap=a.agentStubMap||s(),u=t.seriesType,h=t.getTargetSeries,d=!0,f=t.modifyOutputEnd;function p(t){var n=t.uid,i=l.get(n);i||(i=l.set(n,c({reset:I,onDirty:S})),a.dirty()),i.context={model:t,overallProgress:d,modifyOutputEnd:f},i.agent=a,i.__block=d,N(e,t,i)}u?i.eachRawSeriesByType(u,p):h?h(i,o).each(p):(d=!1,r(i.getSeries(),p));var g=e._pipelineMap;l.each((function(e,t){g.get(t)||(e.dispose(),a.dirty(),l.removeKey(t))}))}function M(e){e.overallReset(e.ecModel,e.api,e.payload)}function I(e,t){return e.overallProgress&&C}function C(){this.agent.dirty(),this.getDownstream().dirty()}function S(){this.agent&&this.agent.dirty()}function D(e){return e.plan&&e.plan(e.model,e.ecModel,e.api,e.payload)}function T(e){e.useClearVisual&&e.data.clearAllVisual();var t=e.resetDefines=m(e.reset(e.model,e.ecModel,e.api,e.payload));return t.length>1?o(t,(function(e,t){return k(t)})):A}var A=k(0);function k(e){return function(t,n){var i=n.data,r=n.resetDefines[e];if(r&&r.dataEach)for(var o=t.start;o0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(e){this.option.selected=r.clone(e)},getValueState:function(e){var t=a.findPieceIndex(e,this._pieceList);return null!=t&&this.option.selected[this.getSelectedMapKey(this._pieceList[t])]?"inRange":"outOfRange"},findTargetDataIndices:function(e){var t=[];return this.eachTargetSeries((function(n){var i=[],r=n.getData();r.each(this.getDataDimension(r),(function(t,n){var r=a.findPieceIndex(t,this._pieceList);r===e&&i.push(n)}),this),t.push({seriesId:n.id,dataIndex:i})}),this),t},getRepresentValue:function(e){var t;if(this.isCategory())t=e.value;else if(null!=e.value)t=e.value;else{var n=e.interval||[];t=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return t},getVisualMeta:function(e){if(!this.isCategory()){var t=[],n=[],i=this,o=this._pieceList.slice();if(o.length){var a=o[0].interval[0];a!==-1/0&&o.unshift({interval:[-1/0,a]}),a=o[o.length-1].interval[1],a!==1/0&&o.push({interval:[a,1/0]})}else o.push({interval:[-1/0,1/0]});var s=-1/0;return r.each(o,(function(e){var t=e.interval;t&&(t[0]>s&&l([s,t[0]],"outOfRange"),l(t.slice()),s=t[1])}),this),{stops:t,outerColors:n}}function l(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValueState(a));var s=e(a,o);r[0]===-1/0?n[0]=s:r[1]===1/0?n[1]=s:t.push({value:r[0],color:s},{value:r[1],color:s})}}}),h={splitNumber:function(){var e=this.option,t=this._pieceList,n=Math.min(e.precision,20),i=this.getExtent(),o=e.splitNumber;o=Math.max(parseInt(o,10),1),e.splitNumber=o;var a=(i[1]-i[0])/o;while(+a.toFixed(n)!==a&&n<5)n++;e.precision=n,a=+a.toFixed(n),e.minOpen&&t.push({interval:[-1/0,i[0]],close:[0,0]});for(var s=0,l=i[0];s","≥"][t[0]]];e.text=e.text||this.formatValueText(null!=e.value?e.value:e.interval,!1,n)}),this)}};function d(e,t){var n=e.inverse;("vertical"===e.orient?!n:n)&&t.reverse()}var f=c;e.exports=f},"1e7b":function(e,t,n){var i=n("bc0f"),r=i.circularLayout;function o(e){e.eachSeriesByType("graph",(function(e){"circular"===e.get("layout")&&r(e,"symbolSize")}))}e.exports=o},"1e89":function(e,t,n){var i=n("4a78"),r=n("78ec"),o="__core-js_shared__",a=r[o]||(r[o]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:i.version,mode:n("2518")?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},"1efe":function(e,t,n){var i=n("0e58");i.registerSubTypeDefaulter("timeline",(function(){return"slider"}))},"1f06":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=95)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},95:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("button",{staticClass:"el-button",class:[e.type?"el-button--"+e.type:"",e.buttonSize?"el-button--"+e.buttonSize:"",{"is-disabled":e.buttonDisabled,"is-loading":e.loading,"is-plain":e.plain,"is-round":e.round,"is-circle":e.circle}],attrs:{disabled:e.buttonDisabled||e.loading,autofocus:e.autofocus,type:e.nativeType},on:{click:e.handleClick}},[e.loading?n("i",{staticClass:"el-icon-loading"}):e._e(),e.icon&&!e.loading?n("i",{class:e.icon}):e._e(),e.$slots.default?n("span",[e._t("default")],2):e._e()])},r=[];i._withStripped=!0;var o={name:"ElButton",inject:{elForm:{default:""},elFormItem:{default:""}},props:{type:{type:String,default:"default"},size:String,icon:{type:String,default:""},nativeType:{type:String,default:"button"},loading:Boolean,disabled:Boolean,plain:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},buttonSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},buttonDisabled:function(){return this.$options.propsData.hasOwnProperty("disabled")?this.disabled:(this.elForm||{}).disabled}},methods:{handleClick:function(e){this.$emit("click",e)}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},"1f7f":function(e,t,n){e.exports=n("e6aa")},2019:function(e,t,n){var i=n("559a"),r=n("2fcc"),o=r.extendComponentView({type:"geo",init:function(e,t){var n=new i(t,!0);this._mapDraw=n,this.group.add(n.group)},render:function(e,t,n,i){if(!i||"geoToggleSelect"!==i.type||i.from!==this.uid){var r=this._mapDraw;e.get("show")?r.draw(e,t,n,this,i):this._mapDraw.group.removeAll(),this.group.silent=e.get("silent")}},dispose:function(){this._mapDraw&&this._mapDraw.remove()}});e.exports=o},"204d":function(e,t){var n=Math.round;function i(e,t,i){if(t){var r=t.x1,a=t.x2,s=t.y1,l=t.y2;e.x1=r,e.x2=a,e.y1=s,e.y2=l;var u=i&&i.lineWidth;u&&(n(2*r)===n(2*a)&&(e.x1=e.x2=o(r,u,!0)),n(2*s)===n(2*l)&&(e.y1=e.y2=o(s,u,!0)))}}function r(e,t,n){if(t){var i=t.x,r=t.y,a=t.width,s=t.height;e.x=i,e.y=r,e.width=a,e.height=s;var l=n&&n.lineWidth;l&&(e.x=o(i,l,!0),e.y=o(r,l,!0),e.width=Math.max(o(i+a,l,!1)-e.x,0===a?0:1),e.height=Math.max(o(r+s,l,!1)-e.y,0===s?0:1))}}function o(e,t,i){if(!t)return e;var r=n(2*e);return(r+n(t))%2===0?r/2:(r+(i?1:-1))/2}t.subPixelOptimizeLine=i,t.subPixelOptimizeRect=r,t.subPixelOptimize=o},"20d3":function(e,t,n){var i=n("ffec"),r=i.forceLayout,o=n("a9f4"),a=o.simpleLayout,s=n("bc0f"),l=s.circularLayout,u=n("cb77"),c=u.linearMap,h=n("d82e"),d=n("357b"),f=n("990b"),p=f.getCurvenessForEdge;function g(e){e.eachSeriesByType("graph",(function(e){var t=e.coordinateSystem;if(!t||"view"===t.type)if("force"===e.get("layout")){var n=e.preservedPoints||{},i=e.getGraph(),o=i.data,s=i.edgeData,u=e.getModel("force"),f=u.get("initLayout");e.preservedPoints?o.each((function(e){var t=o.getId(e);o.setItemLayout(e,n[t]||[NaN,NaN])})):f&&"none"!==f?"circular"===f&&l(e,"value"):a(e);var g=o.getDataExtent("value"),m=s.getDataExtent("value"),v=u.get("repulsion"),y=u.get("edgeLength");d.isArray(v)||(v=[v,v]),d.isArray(y)||(y=[y,y]),y=[y[1],y[0]];var b=o.mapArray("value",(function(e,t){var n=o.getItemLayout(t),i=c(e,g,v);return isNaN(i)&&(i=(v[0]+v[1])/2),{w:i,rep:i,fixed:o.getItemModel(t).get("fixed"),p:!n||isNaN(n[0])||isNaN(n[1])?null:n}})),w=s.mapArray("value",(function(t,n){var r=i.getEdgeByIndex(n),o=c(t,m,y);isNaN(o)&&(o=(y[0]+y[1])/2);var a=r.getModel(),s=d.retrieve3(a.get("lineStyle.curveness"),-p(r,e,n,!0),0);return{n1:b[r.node1.dataIndex],n2:b[r.node2.dataIndex],d:o,curveness:s,ignoreForceLayout:a.get("ignoreForceLayout")}})),x=(t=e.coordinateSystem,t.getBoundingRect()),_=r(b,w,{rect:x,gravity:u.get("gravity"),friction:u.get("friction")}),M=_.step;_.step=function(e){for(var t=0,r=b.length;t=e.length)&&56320===(64512&e.charCodeAt(t+1)))}function a(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"===typeof e)if(t){if("hex"===t)for(e=e.replace(/[^a-z0-9]+/gi,""),e.length%2!==0&&(e="0"+e),r=0;r>6|192,n[i++]=63&a|128):o(e,r)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++r)),n[i++]=a>>18|240,n[i++]=a>>12&63|128,n[i++]=a>>6&63|128,n[i++]=63&a|128):(n[i++]=a>>12|224,n[i++]=a>>6&63|128,n[i++]=63&a|128)}else for(r=0;r>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24;return t>>>0}function u(e,t){for(var n="",i=0;i>>0}return a}function f(e,t){for(var n=new Array(4*e.length),i=0,r=0;i>>24,n[r+1]=o>>>16&255,n[r+2]=o>>>8&255,n[r+3]=255&o):(n[r+3]=o>>>24,n[r+2]=o>>>16&255,n[r+1]=o>>>8&255,n[r]=255&o)}return n}function p(e,t){return e>>>t|e<<32-t}function g(e,t){return e<>>32-t}function m(e,t){return e+t>>>0}function v(e,t,n){return e+t+n>>>0}function y(e,t,n,i){return e+t+n+i>>>0}function b(e,t,n,i,r){return e+t+n+i+r>>>0}function w(e,t,n,i){var r=e[t],o=e[t+1],a=i+o>>>0,s=(a>>0,e[t+1]=a}function x(e,t,n,i){var r=t+i>>>0,o=(r>>0}function _(e,t,n,i){var r=t+i;return r>>>0}function M(e,t,n,i,r,o,a,s){var l=0,u=t;u=u+i>>>0,l+=u>>0,l+=u>>0,l+=u>>0}function I(e,t,n,i,r,o,a,s){var l=t+i+o+s;return l>>>0}function C(e,t,n,i,r,o,a,s,l,u){var c=0,h=t;h=h+i>>>0,c+=h>>0,c+=h>>0,c+=h>>0,c+=h>>0}function S(e,t,n,i,r,o,a,s,l,u){var c=t+i+o+s+u;return c>>>0}function D(e,t,n){var i=t<<32-n|e>>>n;return i>>>0}function T(e,t,n){var i=e<<32-n|t>>>n;return i>>>0}function A(e,t,n){return e>>>n}function k(e,t,n){var i=e<<32-n|t>>>n;return i>>>0}t.inherits=r,t.toArray=a,t.toHex=s,t.htonl=l,t.toHex32=u,t.zero2=c,t.zero8=h,t.join32=d,t.split32=f,t.rotr32=p,t.rotl32=g,t.sum32=m,t.sum32_3=v,t.sum32_4=y,t.sum32_5=b,t.sum64=w,t.sum64_hi=x,t.sum64_lo=_,t.sum64_4_hi=M,t.sum64_4_lo=I,t.sum64_5_hi=C,t.sum64_5_lo=S,t.rotr64_hi=D,t.rotr64_lo=T,t.shr64_hi=A,t.shr64_lo=k},"21ff":function(e,t){var n={"南海诸岛":[32,80],"广东":[0,-10],"香港":[10,5],"澳门":[-10,10],"天津":[5,5]};function i(e,t){if("china"===e){var i=n[t.name];if(i){var r=t.center;r[0]+=i[0]/10.5,r[1]+=-i[1]/14}}}e.exports=i},2240:function(e,t,n){var i=n("be16").Buffer,r=n("3617");function o(e,t,n){var o=t.length,a=r(t,e._cache);return e._cache=e._cache.slice(o),e._prev=i.concat([e._prev,n?t:a]),a}t.encrypt=function(e,t,n){var r,a=i.allocUnsafe(0);while(t.length){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=i.allocUnsafe(0)),!(e._cache.length<=t.length)){a=i.concat([a,o(e,t,n)]);break}r=e._cache.length,a=i.concat([a,o(e,t.slice(0,r),n)]),t=t.slice(r)}return a}},"224d":function(e,t,n){var i;function r(e){this.rand=e}if(e.exports=function(e){return i||(i=new r(null)),i.generate(e)},e.exports.Rand=r,r.prototype.generate=function(e){return this._rand(e)},r.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),n=0;n=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([n]):a[t]?a[t]+", "+n:n}})),a):a}},"22c6":function(e,t,n){t=e.exports=function(e){e=e.toLowerCase();var n=t[e];if(!n)throw new Error(e+" is not supported (we accept pull requests)");return new n};t.sha=n("54f9"),t.sha1=n("0a46"),t.sha224=n("4851"),t.sha256=n("388f"),t.sha384=n("77c6"),t.sha512=n("008b")},"22db":function(e,t,n){var i=n("3617");t.encrypt=function(e,t){var n=i(t,e._prev);return e._prev=e._cipher.encryptBlock(n),e._prev},t.decrypt=function(e,t){var n=e._prev;e._prev=t;var r=e._cipher.decryptBlock(t);return i(r,n)}},"22f8":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("ced6"),a=n("a06b"),s=a.layoutCovers,l=i.extendComponentView({type:"brush",init:function(e,t){this.ecModel=e,this.api=t,this.model,(this._brushController=new o(t.getZr())).on("brush",r.bind(this._onBrush,this)).mount()},render:function(e){return this.model=e,u.apply(this,arguments)},updateTransform:function(e,t){return s(t),u.apply(this,arguments)},updateView:u,dispose:function(){this._brushController.dispose()},_onBrush:function(e,t){var n=this.model.id;this.model.brushTargetManager.setOutputRanges(e,this.ecModel),(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:n,areas:r.clone(e),$from:n}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:n,areas:r.clone(e),$from:n})}});function u(e,t,n,i){(!i||i.$from!==e.id)&&this._brushController.setPanels(e.brushTargetManager.makePanelOpts(n)).enableBrush(e.brushOption).updateCovers(e.areas.slice())}e.exports=l},2373:function(e,t,n){var i=n("2fcc");n("4de1"),n("5bde");var r=n("d396"),o=n("2944");i.registerVisual(r("effectScatter","circle")),i.registerLayout(o("effectScatter"))},"23a8":function(e,t,n){var i=n("2fcc"),r={type:"axisAreaSelect",event:"axisAreaSelected"};i.registerAction(r,(function(e,t){t.eachComponent({mainType:"parallelAxis",query:e},(function(t){t.axis.model.setActiveIntervals(e.intervals)}))})),i.registerAction("parallelAxisExpand",(function(e,t){t.eachComponent({mainType:"parallel",query:e},(function(t){t.setAxisExpand(e)}))}))},"23c4":function(e,t,n){"use strict";const i=n("7fdc"),r=n("1bbc").Buffer,o=n("b6f0"),a=n("4b6e");function s(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new l,this.tree._init(e.body)}function l(e){o.call(this,"der",e)}function u(e){return e<10?"0"+e:e}function c(e,t,n,i){let r;if("seqof"===e?e="seq":"setof"===e&&(e="set"),a.tagByName.hasOwnProperty(e))r=a.tagByName[e];else{if("number"!==typeof e||(0|e)!==e)return i.error("Unknown tag: "+e);r=e}return r>=31?i.error("Multi-octet tag encoding unsupported"):(t||(r|=32),r|=a.tagClassByName[n||"universal"]<<6,r)}e.exports=s,s.prototype.encode=function(e,t){return this.tree._encode(e,t).join()},i(l,o),l.prototype._encodeComposite=function(e,t,n,i){const o=c(e,t,n,this.reporter);if(i.length<128){const e=r.alloc(2);return e[0]=o,e[1]=i.length,this._createEncoderBuffer([e,i])}let a=1;for(let r=i.length;r>=256;r>>=8)a++;const s=r.alloc(2+a);s[0]=o,s[1]=128|a;for(let r=1+a,l=i.length;l>0;r--,l>>=8)s[r]=255&l;return this._createEncoderBuffer([s,i])},l.prototype._encodeStr=function(e,t){if("bitstr"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if("bmpstr"===t){const t=r.alloc(2*e.length);for(let n=0;n=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}let i=0;for(let r=0;r=128;t>>=7)i++}const o=r.alloc(i);let a=o.length-1;for(let r=e.length-1;r>=0;r--){let t=e[r];o[a--]=127&t;while((t>>=7)>0)o[a--]=128|127&t}return this._createEncoderBuffer(o)},l.prototype._encodeTime=function(e,t){let n;const i=new Date(e);return"gentime"===t?n=[u(i.getUTCFullYear()),u(i.getUTCMonth()+1),u(i.getUTCDate()),u(i.getUTCHours()),u(i.getUTCMinutes()),u(i.getUTCSeconds()),"Z"].join(""):"utctime"===t?n=[u(i.getUTCFullYear()%100),u(i.getUTCMonth()+1),u(i.getUTCDate()),u(i.getUTCHours()),u(i.getUTCMinutes()),u(i.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+t+" time is not supported yet"),this._encodeStr(n,"octstr")},l.prototype._encodeNull=function(){return this._createEncoderBuffer("")},l.prototype._encodeInt=function(e,t){if("string"===typeof e){if(!t)return this.reporter.error("String int or enum given, but no values map");if(!t.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=t[e]}if("number"!==typeof e&&!r.isBuffer(e)){const t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=r.from(t)}if(r.isBuffer(e)){let t=e.length;0===e.length&&t++;const n=r.alloc(t);return e.copy(n),0===e.length&&(n[0]=0),this._createEncoderBuffer(n)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);let n=1;for(let r=e;r>=256;r>>=8)n++;const i=new Array(n);for(let r=i.length-1;r>=0;r--)i[r]=255&e,e>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(r.from(i))},l.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},l.prototype._use=function(e,t){return"function"===typeof e&&(e=e(t)),e._getEncoder("der").tree},l.prototype._skipDefault=function(e,t,n){const i=this._baseState;let r;if(null===i["default"])return!1;const o=e.join();if(void 0===i.defaultBuffer&&(i.defaultBuffer=this._encodeValue(i["default"],t,n).join()),o.length!==i.defaultBuffer.length)return!1;for(r=0;r0&&(this.timeoutPending=setTimeout((function(){e.showPopper=!1}),this.hideAfter)))},handleClosePopper:function(){this.enterable&&this.expectedState||this.manual||(clearTimeout(this.timeout),this.timeoutPending&&clearTimeout(this.timeoutPending),this.showPopper=!1,this.disabled&&this.doDestroy())},setExpectedState:function(e){!1===e&&clearTimeout(this.timeoutPending),this.expectedState=e},getFirstElement:function(){var e=this.$slots.default;if(!Array.isArray(e))return null;for(var t=null,n=0;no&&(c=s.interval=o);var h=s.intervalPrecision=a(c),d=s.niceTickExtent=[r(Math.ceil(e[0]/c)*c,h),r(Math.floor(e[1]/c)*c,h)];return l(d,e),s}function a(e){return i.getPrecisionSafe(e)+2}function s(e,t,n){e[t]=Math.max(Math.min(e[t],n[1]),n[0])}function l(e,t){!isFinite(e[0])&&(e[0]=t[0]),!isFinite(e[1])&&(e[1]=t[1]),s(e,0,t),s(e,1,t),e[0]>e[1]&&(e[0]=e[1])}t.intervalScaleNiceTicks=o,t.getIntervalPrecision=a,t.fixExtent=l},2518:function(e,t){e.exports=!0},2523:function(e,t,n){var i=n("6c94"),r=Math.min;e.exports=function(e){return e>0?r(i(e),9007199254740991):0}},2578:function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("f298"),a=n("f6d4"),s=a.createSymbol,l=n("cb77"),u=l.parsePercent,c=l.isNumeric,h=n("0fc5"),d=h.setLabel,f=["itemStyle","borderWidth"],p=[{xy:"x",wh:"width",index:0,posDesc:["left","right"]},{xy:"y",wh:"height",index:1,posDesc:["top","bottom"]}],g=new o.Circle,m=i.extendChartView({type:"pictorialBar",render:function(e,t,n){var i=this.group,r=e.getData(),o=this._data,a=e.coordinateSystem,s=a.getBaseAxis(),l=!!s.isHorizontal(),u=a.grid.getRect(),c={ecSize:{width:n.getWidth(),height:n.getHeight()},seriesModel:e,coordSys:a,coordSysExtent:[[u.x,u.x+u.width],[u.y,u.y+u.height]],isHorizontal:l,valueDim:p[+l],categoryDim:p[1-l]};return r.diff(o).add((function(e){if(r.hasValue(e)){var t=T(r,e),n=v(r,e,t,c),o=N(r,c,n);r.setItemGraphicEl(e,o),i.add(o),z(o,c,n)}})).update((function(e,t){var n=o.getItemGraphicEl(t);if(r.hasValue(e)){var a=T(r,e),s=v(r,e,a,c),l=L(r,s);n&&l!==n.__pictorialShapeStr&&(i.remove(n),r.setItemGraphicEl(e,null),n=null),n?O(n,c,s):n=N(r,c,s,!0),r.setItemGraphicEl(e,n),n.__pictorialSymbolMeta=s,i.add(n),z(n,c,s)}else i.remove(n)})).remove((function(e){var t=o.getItemGraphicEl(e);t&&P(o,e,t.__pictorialSymbolMeta.animationModel,t)})).execute(),this._data=r,this.group},dispose:r.noop,remove:function(e,t){var n=this.group,i=this._data;e.get("animation")?i&&i.eachItemGraphicEl((function(t){P(i,t.dataIndex,e,t)})):n.removeAll()}});function v(e,t,n,i){var o=e.getItemLayout(t),a=n.get("symbolRepeat"),s=n.get("symbolClip"),l=n.get("symbolPosition")||"start",c=n.get("symbolRotate"),h=(c||0)*Math.PI/180||0,d=n.get("symbolPatternSize")||2,f=n.isAnimationEnabled(),p={dataIndex:t,layout:o,itemModel:n,symbolType:e.getItemVisual(t,"symbol")||"circle",color:e.getItemVisual(t,"color"),symbolClip:s,symbolRepeat:a,symbolRepeatDirection:n.get("symbolRepeatDirection"),symbolPatternSize:d,rotation:h,animationModel:f?n:null,hoverAnimation:f&&n.get("hoverAnimation"),z2:n.getShallow("z",!0)||0};y(n,a,o,i,p),w(e,t,o,a,s,p.boundingLength,p.pxSign,d,i,p),x(n,p.symbolScale,h,i,p);var g=p.symbolSize,m=n.get("symbolOffset");return r.isArray(m)&&(m=[u(m[0],g[0]),u(m[1],g[1])]),_(n,g,o,a,s,m,l,p.valueLineWidth,p.boundingLength,p.repeatCutLength,i,p),p}function y(e,t,n,i,o){var a,s=i.valueDim,l=e.get("symbolBoundingData"),u=i.coordSys.getOtherAxis(i.coordSys.getBaseAxis()),c=u.toGlobalCoord(u.dataToCoord(0)),h=1-+(n[s.wh]<=0);if(r.isArray(l)){var d=[b(u,l[0])-c,b(u,l[1])-c];d[1]0?1:a<0?-1:0}function b(e,t){return e.toGlobalCoord(e.dataToCoord(e.scale.parse(t)))}function w(e,t,n,i,o,a,s,l,c,h){var d=c.valueDim,f=c.categoryDim,p=Math.abs(n[f.wh]),g=e.getItemVisual(t,"symbolSize");r.isArray(g)?g=g.slice():(null==g&&(g="100%"),g=[g,g]),g[f.index]=u(g[f.index],p),g[d.index]=u(g[d.index],i?p:Math.abs(a)),h.symbolSize=g;var m=h.symbolScale=[g[0]/l,g[1]/l];m[d.index]*=(c.isHorizontal?-1:1)*s}function x(e,t,n,i,r){var o=e.get(f)||0;o&&(g.attr({scale:t.slice(),rotation:n}),g.updateTransform(),o/=g.getLineScale(),o*=t[i.valueDim.index]),r.valueLineWidth=o}function _(e,t,n,i,o,a,s,l,h,d,f,p){var g=f.categoryDim,m=f.valueDim,v=p.pxSign,y=Math.max(t[m.index]+l,0),b=y;if(i){var w=Math.abs(h),x=r.retrieve(e.get("symbolMargin"),"15%")+"",_=!1;x.lastIndexOf("!")===x.length-1&&(_=!0,x=x.slice(0,x.length-1)),x=u(x,t[m.index]);var M=Math.max(y+2*x,0),I=_?0:2*x,C=c(i),S=C?i:R((w+I)/M),D=w-S*y;x=D/2/(_?S:S-1),M=y+2*x,I=_?0:2*x,C||"fixed"===i||(S=d?R((Math.abs(d)+I)/M):0),b=S*M-I,p.repeatTimes=S,p.symbolMargin=x}var T=v*(b/2),A=p.pathPosition=[];A[g.index]=n[g.wh]/2,A[m.index]="start"===s?T:"end"===s?h-T:h/2,a&&(A[0]+=a[0],A[1]+=a[1]);var k=p.bundlePosition=[];k[g.index]=n[g.xy],k[m.index]=n[m.xy];var E=p.barRectShape=r.extend({},n);E[m.wh]=v*Math.max(Math.abs(n[m.wh]),Math.abs(A[m.index]+T)),E[g.wh]=n[g.wh];var N=p.clipShape={};N[g.xy]=-n[g.xy],N[g.wh]=f.ecSize[g.wh],N[m.xy]=0,N[m.wh]=n[m.wh]}function M(e){var t=e.symbolPatternSize,n=s(e.symbolType,-t/2,-t/2,t,t,e.color);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function I(e,t,n,i){var r=e.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=t.valueDim,u=n.repeatTimes||0,c=0,h=o[t.valueDim.index]+a+2*n.symbolMargin;for(B(e,(function(e){e.__pictorialAnimationIndex=c,e.__pictorialRepeatTimes=u,c0:i<0)&&(r=u-1-e),t[l.index]=h*(r-u/2+.5)+s[l.index],{position:t,scale:n.symbolScale.slice(),rotation:n.rotation}}function g(){B(e,(function(e){e.trigger("emphasis")}))}function m(){B(e,(function(e){e.trigger("normal")}))}}function C(e,t,n,i){var r=e.__pictorialBundle,o=e.__pictorialMainPath;function a(){this.trigger("emphasis")}function s(){this.trigger("normal")}o?j(o,null,{position:n.pathPosition.slice(),scale:n.symbolScale.slice(),rotation:n.rotation},n,i):(o=e.__pictorialMainPath=M(n),r.add(o),j(o,{position:n.pathPosition.slice(),scale:[0,0],rotation:n.rotation},{scale:n.symbolScale.slice()},n,i),o.on("mouseover",a).on("mouseout",s)),E(o,n)}function S(e,t,n){var i=r.extend({},t.barRectShape),a=e.__pictorialBarRect;a?j(a,null,{shape:i},t,n):(a=e.__pictorialBarRect=new o.Rect({z2:2,shape:i,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),e.add(a))}function D(e,t,n,i){if(n.symbolClip){var a=e.__pictorialClipPath,s=r.extend({},n.clipShape),l=t.valueDim,u=n.animationModel,c=n.dataIndex;if(a)o.updateProps(a,{shape:s},u,c);else{s[l.wh]=0,a=new o.Rect({shape:s}),e.__pictorialBundle.setClipPath(a),e.__pictorialClipPath=a;var h={};h[l.wh]=n.clipShape[l.wh],o[i?"updateProps":"initProps"](a,{shape:h},u,c)}}}function T(e,t){var n=e.getItemModel(t);return n.getAnimationDelayParams=A,n.isAnimationEnabled=k,n}function A(e){return{index:e.__pictorialAnimationIndex,count:e.__pictorialRepeatTimes}}function k(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function E(e,t){e.off("emphasis").off("normal");var n=t.symbolScale.slice();t.hoverAnimation&&e.on("emphasis",(function(){this.animateTo({scale:[1.1*n[0],1.1*n[1]]},400,"elasticOut")})).on("normal",(function(){this.animateTo({scale:n.slice()},400,"elasticOut")}))}function N(e,t,n,i){var r=new o.Group,a=new o.Group;return r.add(a),r.__pictorialBundle=a,a.attr("position",n.bundlePosition.slice()),n.symbolRepeat?I(r,t,n):C(r,t,n),S(r,n,i),D(r,t,n,i),r.__pictorialShapeStr=L(e,n),r.__pictorialSymbolMeta=n,r}function O(e,t,n){var i=n.animationModel,r=n.dataIndex,a=e.__pictorialBundle;o.updateProps(a,{position:n.bundlePosition.slice()},i,r),n.symbolRepeat?I(e,t,n,!0):C(e,t,n,!0),S(e,n,!0),D(e,t,n,!0)}function P(e,t,n,i){var a=i.__pictorialBarRect;a&&(a.style.text=null);var s=[];B(i,(function(e){s.push(e)})),i.__pictorialMainPath&&s.push(i.__pictorialMainPath),i.__pictorialClipPath&&(n=null),r.each(s,(function(e){o.updateProps(e,{scale:[0,0]},n,t,(function(){i.parent&&i.parent.remove(i)}))})),e.setItemGraphicEl(t,null)}function L(e,t){return[e.getItemVisual(t.dataIndex,"symbol")||"none",!!t.symbolRepeat,!!t.symbolClip].join(":")}function B(e,t,n){r.each(e.__pictorialBundle.children(),(function(i){i!==e.__pictorialBarRect&&t.call(n,i)}))}function j(e,t,n,i,r,a){t&&e.attr(t),i.symbolClip&&!r?n&&e.attr(n):n&&o[r?"updateProps":"initProps"](e,n,i.animationModel,i.dataIndex,a)}function z(e,t,n){var i=n.color,a=n.dataIndex,s=n.itemModel,l=s.getModel("itemStyle").getItemStyle(["color"]),u=s.getModel("emphasis.itemStyle").getItemStyle(),c=s.getShallow("cursor");B(e,(function(e){e.setColor(i),e.setStyle(r.defaults({fill:i,opacity:n.opacity},l)),o.setHoverStyle(e,u),c&&(e.cursor=c),e.z2=n.z2}));var h={},f=t.valueDim.posDesc[+(n.boundingLength>0)],p=e.__pictorialBarRect;d(p.style,h,s,i,t.seriesModel,a,f),o.setHoverStyle(p,h)}function R(e){var t=Math.round(e);return Math.abs(e-t)<1e-4?t:Math.ceil(e)}var F=m;e.exports=F},"25a8":function(e,t,n){"use strict";var i;function r(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}var o=n("b8fc").codes,a=o.ERR_MISSING_ARGS,s=o.ERR_STREAM_DESTROYED;function l(e){if(e)throw e}function u(e){return e.setHeader&&"function"===typeof e.abort}function c(e,t,o,a){a=r(a);var l=!1;e.on("close",(function(){l=!0})),void 0===i&&(i=n("44c0")),i(e,{readable:t,writable:o},(function(e){if(e)return a(e);l=!0,a()}));var c=!1;return function(t){if(!l&&!c)return c=!0,u(e)?e.abort():"function"===typeof e.destroy?e.destroy():void a(t||new s("pipe"))}}function h(e){e()}function d(e,t){return e.pipe(t)}function f(e){return e.length?"function"!==typeof e[e.length-1]?l:e.pop():l}function p(){for(var e=arguments.length,t=new Array(e),n=0;n0;return c(e,a,s,(function(e){i||(i=e),e&&o.forEach(h),a||(o.forEach(h),r(i))}))}));return t.reduce(d)}e.exports=p},"25e5":function(e,t,n){var i=n("53f2"),r=i.isDimensionStacked,o=n("357b"),a=o.map;function s(e,t,n){var i,o=e.getBaseAxis(),s=e.getOtherAxis(o),u=l(s,n),c=o.dim,h=s.dim,d=t.mapDimension(h),f=t.mapDimension(c),p="x"===h||"radius"===h?1:0,g=a(e.dimensions,(function(e){return t.mapDimension(e)})),m=t.getCalculationInfo("stackResultDimension");return(i|=r(t,g[0]))&&(g[0]=m),(i|=r(t,g[1]))&&(g[1]=m),{dataDimsForPoint:g,valueStart:u,valueAxisDim:h,baseAxisDim:c,stacked:!!i,valueDim:d,baseDim:f,baseDataOffset:p,stackedOverDimension:t.getCalculationInfo("stackedOverDimension")}}function l(e,t){var n=0,i=e.scale.getExtent();return"start"===t?n=i[0]:"end"===t?n=i[1]:i[0]>0?n=i[0]:i[1]<0&&(n=i[1]),n}function u(e,t,n,i){var r=NaN;e.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=e.valueStart);var o=e.baseDataOffset,a=[];return a[o]=n.get(e.baseDim,i),a[1-o]=r,t.dataToPoint(a)}t.prepareDataCoordInfo=s,t.getStackedOnPoint=u},"25f2":function(e,t,n){n("b113"),n("bf4b"),n("3fcc"),n("d8d2"),n("934f"),n("1864"),n("9aab")},2636:function(e,t,n){var i=n("b99c"),r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function o(e){return e=Math.round(e),e<0?0:e>255?255:e}function a(e){return e=Math.round(e),e<0?0:e>360?360:e}function s(e){return e<0?0:e>1?1:e}function l(e){return e.length&&"%"===e.charAt(e.length-1)?o(parseFloat(e)/100*255):o(parseInt(e,10))}function u(e){return e.length&&"%"===e.charAt(e.length-1)?s(parseFloat(e)/100):s(parseFloat(e))}function c(e,t,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?e+(t-e)*n*6:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function h(e,t,n){return e+(t-e)*n}function d(e,t,n,i,r){return e[0]=t,e[1]=n,e[2]=i,e[3]=r,e}function f(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var p=new i(20),g=null;function m(e,t){g&&f(g,t),g=p.put(e,g||t.slice())}function v(e,t){if(e){t=t||[];var n=p.get(e);if(n)return f(t,n);e+="";var i=e.replace(/ /g,"").toLowerCase();if(i in r)return f(t,r[i]),m(e,t),t;if("#"!==i.charAt(0)){var o=i.indexOf("("),a=i.indexOf(")");if(-1!==o&&a+1===i.length){var s=i.substr(0,o),c=i.substr(o+1,a-(o+1)).split(","),h=1;switch(s){case"rgba":if(4!==c.length)return void d(t,0,0,0,1);h=u(c.pop());case"rgb":return 3!==c.length?void d(t,0,0,0,1):(d(t,l(c[0]),l(c[1]),l(c[2]),h),m(e,t),t);case"hsla":return 4!==c.length?void d(t,0,0,0,1):(c[3]=u(c[3]),y(c,t),m(e,t),t);case"hsl":return 3!==c.length?void d(t,0,0,0,1):(y(c,t),m(e,t),t);default:return}}d(t,0,0,0,1)}else{if(4===i.length){var g=parseInt(i.substr(1),16);return g>=0&&g<=4095?(d(t,(3840&g)>>4|(3840&g)>>8,240&g|(240&g)>>4,15&g|(15&g)<<4,1),m(e,t),t):void d(t,0,0,0,1)}if(7===i.length){g=parseInt(i.substr(1),16);return g>=0&&g<=16777215?(d(t,(16711680&g)>>16,(65280&g)>>8,255&g,1),m(e,t),t):void d(t,0,0,0,1)}}}}function y(e,t){var n=(parseFloat(e[0])%360+360)%360/360,i=u(e[1]),r=u(e[2]),a=r<=.5?r*(i+1):r+i-r*i,s=2*r-a;return t=t||[],d(t,o(255*c(s,a,n+1/3)),o(255*c(s,a,n)),o(255*c(s,a,n-1/3)),1),4===e.length&&(t[3]=e[3]),t}function b(e){if(e){var t,n,i=e[0]/255,r=e[1]/255,o=e[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)t=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var c=((s-i)/6+l/2)/l,h=((s-r)/6+l/2)/l,d=((s-o)/6+l/2)/l;i===s?t=d-h:r===s?t=1/3+c-d:o===s&&(t=2/3+h-c),t<0&&(t+=1),t>1&&(t-=1)}var f=[360*t,n,u];return null!=e[3]&&f.push(e[3]),f}}function w(e,t){var n=v(e);if(n){for(var i=0;i<3;i++)n[i]=t<0?n[i]*(1-t)|0:(255-n[i])*t+n[i]|0,n[i]>255?n[i]=255:e[i]<0&&(n[i]=0);return T(n,4===n.length?"rgba":"rgb")}}function x(e){var t=v(e);if(t)return((1<<24)+(t[0]<<16)+(t[1]<<8)+ +t[2]).toString(16).slice(1)}function _(e,t,n){if(t&&t.length&&e>=0&&e<=1){n=n||[];var i=e*(t.length-1),r=Math.floor(i),a=Math.ceil(i),l=t[r],u=t[a],c=i-r;return n[0]=o(h(l[0],u[0],c)),n[1]=o(h(l[1],u[1],c)),n[2]=o(h(l[2],u[2],c)),n[3]=s(h(l[3],u[3],c)),n}}var M=_;function I(e,t,n){if(t&&t.length&&e>=0&&e<=1){var i=e*(t.length-1),r=Math.floor(i),a=Math.ceil(i),l=v(t[r]),u=v(t[a]),c=i-r,d=T([o(h(l[0],u[0],c)),o(h(l[1],u[1],c)),o(h(l[2],u[2],c)),s(h(l[3],u[3],c))],"rgba");return n?{color:d,leftIndex:r,rightIndex:a,value:i}:d}}var C=I;function S(e,t,n,i){if(e=v(e),e)return e=b(e),null!=t&&(e[0]=a(t)),null!=n&&(e[1]=u(n)),null!=i&&(e[2]=u(i)),T(y(e),"rgba")}function D(e,t){if(e=v(e),e&&null!=t)return e[3]=s(t),T(e,"rgba")}function T(e,t){if(e&&e.length){var n=e[0]+","+e[1]+","+e[2];return"rgba"!==t&&"hsva"!==t&&"hsla"!==t||(n+=","+e[3]),t+"("+n+")"}}t.parse=v,t.lift=w,t.toHex=x,t.fastLerp=_,t.fastMapToColor=M,t.lerp=I,t.mapToColor=C,t.modifyHSL=S,t.modifyAlpha=D,t.stringify=T},2677:function(e,t,n){var i=n("ff7e"),r=n("9736"),o=n("57b3"),a=n("4547"),s=["x","y"],l=["width","height"],u=i.extend({makeElOption:function(e,t,n,i,a){var s=n.axis,l=s.coordinateSystem,u=d(l,1-h(s)),f=l.dataToPoint(t)[0],p=i.get("type");if(p&&"none"!==p){var g=r.buildElStyle(i),m=c[p](s,f,u);m.style=g,e.graphicKey=m.type,e.pointer=m}var v=o.layout(n);r.buildCartesianSingleLabelElOption(t,e,v,n,i,a)},getHandleTransform:function(e,t,n){var i=o.layout(t,{labelInside:!1});return i.labelMargin=n.get("handle.margin"),{position:r.getTransformedPosition(t.axis,e,i),rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},updateHandleTransform:function(e,t,n,i){var r=n.axis,o=r.coordinateSystem,a=h(r),s=d(o,a),l=e.position;l[a]+=t[a],l[a]=Math.min(s[1],l[a]),l[a]=Math.max(s[0],l[a]);var u=d(o,1-a),c=(u[1]+u[0])/2,f=[c,c];return f[a]=l[a],{position:l,rotation:e.rotation,cursorPoint:f,tooltipOption:{verticalAlign:"middle"}}}}),c={line:function(e,t,n){var i=r.makeLineShape([t,n[0]],[t,n[1]],h(e));return{type:"Line",subPixelOptimize:!0,shape:i}},shadow:function(e,t,n){var i=e.getBandWidth(),o=n[1]-n[0];return{type:"Rect",shape:r.makeRectShape([t-i/2,n[0]],[i,o],h(e))}}};function h(e){return e.isHorizontal()?0:1}function d(e,t){var n=e.getRect();return[n[s[t]],n[s[t]]+n[l[t]]]}a.registerAxisPointerClass("SingleAxisPointer",u);var f=u;e.exports=f},"26fe":function(e,t,n){var i=n("357b");function r(e){e&&i.isArray(e.series)&&i.each(e.series,(function(e){i.isObject(e)&&"k"===e.type&&(e.type="candlestick")}))}e.exports=r},2735:function(e,t){var n={getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}};e.exports=n},"28a4":function(e,t,n){e.exports=n("12f9")},"291e":function(e,t,n){var i=n("2fcc");(function(){for(var e in i){if(null==i||!i.hasOwnProperty(e)||"default"===e||"__esModule"===e)return;t[e]=i[e]}})();var r=n("3406");(function(){for(var e in r){if(null==r||!r.hasOwnProperty(e)||"default"===e||"__esModule"===e)return;t[e]=r[e]}})(),n("13b5"),n("4d31"),n("76aa"),n("141f"),n("ffd7"),n("6320"),n("1642"),n("ec14"),n("7ec6"),n("dec6"),n("356d"),n("f7bb"),n("a94d"),n("a93e"),n("8af2"),n("5306"),n("2373"),n("529f"),n("3785"),n("077f"),n("31cf"),n("8a1c"),n("8e32"),n("befa"),n("fb32"),n("0fbd"),n("ee0b"),n("bf73"),n("e2ed"),n("94cf"),n("c415"),n("bb09"),n("f79b"),n("6720"),n("7876"),n("77cd"),n("f4ba"),n("65a0"),n("2ab8"),n("37e5"),n("fb61"),n("4206"),n("7c7b"),n("25f2"),n("bc30"),n("a0c8"),n("2b65"),n("eec8"),n("a9b2")},2934:function(e,t,n){var i=n("bb75"),r=n("17cd").f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return r(e)}catch(t){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):r(i(e))}},2944:function(e,t,n){var i=n("357b"),r=i.map,o=n("de5c"),a=n("53f2"),s=a.isDimensionStacked;function l(e){return{seriesType:e,plan:o(),reset:function(e){var t=e.getData(),n=e.coordinateSystem,i=e.pipelineContext,o=i.large;if(n){var a=r(n.dimensions,(function(e){return t.mapDimension(e)})).slice(0,2),l=a.length,u=t.getCalculationInfo("stackResultDimension");return s(t,a[0])&&(a[0]=u),s(t,a[1])&&(a[1]=u),l&&{progress:c}}function c(e,t){for(var i=e.end-e.start,r=o&&new Float32Array(i*l),s=e.start,u=0,c=[],h=[];s>>0},t.writeUInt32BE=function(e,t,n){e[0+n]=t>>>24,e[1+n]=t>>>16&255,e[2+n]=t>>>8&255,e[3+n]=255&t},t.ip=function(e,t,n,i){for(var r=0,o=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)r<<=1,r|=t>>>s+a&1;for(s=0;s<=24;s+=8)r<<=1,r|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)o<<=1,o|=t>>>s+a&1;for(s=1;s<=25;s+=8)o<<=1,o|=e>>>s+a&1}n[i+0]=r>>>0,n[i+1]=o>>>0},t.rip=function(e,t,n,i){for(var r=0,o=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)r<<=1,r|=t>>>s+a&1,r<<=1,r|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;n[i+0]=r>>>0,n[i+1]=o>>>0},t.pc1=function(e,t,n,i){for(var r=0,o=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)r<<=1,r|=t>>s+a&1;for(s=0;s<=24;s+=8)r<<=1,r|=e>>s+a&1}for(s=0;s<=24;s+=8)r<<=1,r|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1;n[i+0]=r>>>0,n[i+1]=o>>>0},t.r28shl=function(e,t){return e<>>28-t};var i=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];t.pc2=function(e,t,n,r){for(var o=0,a=0,s=i.length>>>1,l=0;l>>i[l]&1;for(l=s;l>>i[l]&1;n[r+0]=o>>>0,n[r+1]=a>>>0},t.expand=function(e,t,n){var i=0,r=0;i=(1&e)<<5|e>>>27;for(var o=23;o>=15;o-=4)i<<=6,i|=e>>>o&63;for(o=11;o>=3;o-=4)r|=e>>>o&63,r<<=6;r|=(31&e)<<1|e>>>31,t[n+0]=i>>>0,t[n+1]=r>>>0};var r=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];t.substitute=function(e,t){for(var n=0,i=0;i<4;i++){var o=e>>>18-6*i&63,a=r[64*i+o];n<<=4,n|=a}for(i=0;i<4;i++){o=t>>>18-6*i&63,a=r[256+64*i+o];n<<=4,n|=a}return n>>>0};var o=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];t.permute=function(e){for(var t=0,n=0;n>>o[n]&1;return t>>>0},t.padSplit=function(e,t,n){var i=e.toString(2);while(i.length1e-4)return p[0]=e-n,p[1]=t-r,g[0]=e+n,void(g[1]=t+r);if(c[0]=l(o)*n+e,c[1]=s(o)*r+t,h[0]=l(a)*n+e,h[1]=s(a)*r+t,m(p,c,h),v(g,c,h),o%=u,o<0&&(o+=u),a%=u,a<0&&(a+=u),o>a&&!f?a+=u:oo&&(d[0]=l(w)*n+e,d[1]=s(w)*r+t,m(p,d,p),v(g,d,g))}t.fromPoints=f,t.fromLine=p,t.fromCubic=v,t.fromQuadratic=y,t.fromArc=b},"2d45":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=96)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},96:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"el-button-group"},[e._t("default")],2)},r=[];i._withStripped=!0;var o={name:"ElButtonGroup"},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/button/src/button-group.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},"2dc2":function(e,t){t.f={}.propertyIsEnumerable},"2e36":function(e,t,n){var i=n("357b"),r=i.each,o="\0_ec_hist_store";function a(e,t){var n=c(e);r(t,(function(t,i){for(var r=n.length-1;r>=0;r--){var o=n[r];if(o[i])break}if(r<0){var a=e.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(a){var s=a.getPercentRange();n[0][i]={dataZoomId:i,start:s[0],end:s[1]}}}})),n.push(t)}function s(e){var t=c(e),n=t[t.length-1];t.length>1&&t.pop();var i={};return r(n,(function(e,n){for(var r=t.length-1;r>=0;r--){e=t[r][n];if(e){i[n]=e;break}}})),i}function l(e){e[o]=null}function u(e){return c(e).length}function c(e){var t=e[o];return t||(t=e[o]=[{}]),t}t.push=a,t.pop=s,t.clear=l,t.count=u},"2e5b":function(e,t,n){(function(t){var n="object"==typeof t&&t&&t.Object===Object&&t;e.exports=n}).call(this,n("a032"))},"2e8e":function(e,t,n){"use strict";e.exports=c;var i=n("b8fc").codes,r=i.ERR_METHOD_NOT_IMPLEMENTED,o=i.ERR_MULTIPLE_CALLBACK,a=i.ERR_TRANSFORM_ALREADY_TRANSFORMING,s=i.ERR_TRANSFORM_WITH_LENGTH_0,l=n("8ce7");function u(e,t){var n=this._transformState;n.transforming=!1;var i=n.writecb;if(null===i)return this.emit("error",new o);n.writechunk=null,n.writecb=null,null!=t&&this.push(t),i(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length"+e+""},h=function(e){function t(){e.apply(this,arguments)}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={isMounted:{}};return i.isMounted.get=function(){return!!this.node},t.createFromExistingNode=function(e){return new t({id:e.getAttribute("id"),viewBox:e.getAttribute("viewBox"),content:e.outerHTML})},t.prototype.destroy=function(){this.isMounted&&this.unmount(),e.prototype.destroy.call(this)},t.prototype.mount=function(e){if(this.isMounted)return this.node;var t="string"===typeof e?document.querySelector(e):e,n=this.render();return this.node=n,t.appendChild(n),n},t.prototype.render=function(){var e=this.stringify();return n(c(e)).childNodes[0]},t.prototype.unmount=function(){this.node.parentNode.removeChild(this.node)},Object.defineProperties(t.prototype,i),t}(e);return h}))}).call(this,n("a032"))},"2ee8":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("2fcc")),o=n("357b"),a=n("9188"),s=n("f298"),l=["axisLine","axisTickLabel","axisName"],u=r.extendComponentView({type:"radar",render:function(e,t,n){var i=this.group;i.removeAll(),this._buildAxes(e),this._buildSplitLineAndArea(e)},_buildAxes:function(e){var t=e.coordinateSystem,n=t.getIndicatorAxes(),i=o.map(n,(function(e){var n=new a(e.model,{position:[t.cx,t.cy],rotation:e.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return n}));o.each(i,(function(e){o.each(l,e.add,e),this.group.add(e.getGroup())}),this)},_buildSplitLineAndArea:function(e){var t=e.coordinateSystem,n=t.getIndicatorAxes();if(n.length){var i=e.get("shape"),r=e.getModel("splitLine"),a=e.getModel("splitArea"),l=r.getModel("lineStyle"),u=a.getModel("areaStyle"),c=r.get("show"),h=a.get("show"),d=l.get("color"),f=u.get("color");d=o.isArray(d)?d:[d],f=o.isArray(f)?f:[f];var p=[],g=[];if("circle"===i)for(var m=n[0].getTicksCoords(),v=t.cx,y=t.cy,b=0;b0&&e.unfinished);e.unfinished||this._zr.flush()}}},ie.getDom=function(){return this._dom},ie.getZr=function(){return this._zr},ie.setOption=function(e,t,n){if(this._disposed)we(this.id);else{var i;if(P(t)&&(n=t.lazyUpdate,i=t.silent,t=t.notMerge),this[K]=!0,!this._model||t){var r=new f(this._api),o=this._theme,a=this._model=new c;a.scheduler=this._scheduler,a.init(null,null,o,r)}this._model.setOption(e,Ae),n?(this[X]={silent:i},this[K]=!1):(ae(this),oe.update.call(this),this._zr.flush(),this[X]=!1,this[K]=!1,ce.call(this,i),he.call(this,i))}},ie.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},ie.getModel=function(){return this._model},ie.getOption=function(){return this._model&&this._model.getOption()},ie.getWidth=function(){return this._zr.getWidth()},ie.getHeight=function(){return this._zr.getHeight()},ie.getDevicePixelRatio=function(){return this._zr.painter.dpr||window.devicePixelRatio||1},ie.getRenderedCanvas=function(e){if(s.canvasSupported){e=e||{},e.pixelRatio=e.pixelRatio||1,e.backgroundColor=e.backgroundColor||this._model.get("backgroundColor");var t=this._zr;return t.painter.getRenderedCanvas(e)}},ie.getSvgDataURL=function(){if(s.svgSupported){var e=this._zr,t=e.storage.getDisplayList();return o.each(t,(function(e){e.stopAnimation(!0)})),e.painter.toDataURL()}},ie.getDataURL=function(e){if(!this._disposed){e=e||{};var t=e.excludeComponents,n=this._model,i=[],r=this;N(t,(function(e){n.eachComponent({mainType:e},(function(e){var t=r._componentsMap[e.__viewId];t.group.ignore||(i.push(t),t.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.getRenderedCanvas(e).toDataURL("image/"+(e&&e.type||"png"));return N(i,(function(e){e.group.ignore=!1})),o}we(this.id)},ie.getConnectedDataURL=function(e){if(this._disposed)we(this.id);else if(s.canvasSupported){var t="svg"===e.type,n=this.group,i=Math.min,a=Math.max,l=1/0;if(Le[n]){var u=l,c=l,h=-l,d=-l,f=[],p=e&&e.pixelRatio||1;o.each(Pe,(function(r,s){if(r.group===n){var l=t?r.getZr().painter.getSvgDom().innerHTML:r.getRenderedCanvas(o.clone(e)),p=r.getDom().getBoundingClientRect();u=i(p.left,u),c=i(p.top,c),h=a(p.right,h),d=a(p.bottom,d),f.push({dom:l,left:p.left,top:p.top})}})),u*=p,c*=p,h*=p,d*=p;var g=h-u,m=d-c,v=o.createCanvas(),y=r.init(v,{renderer:t?"svg":"canvas"});if(y.resize({width:g,height:m}),t){var b="";return N(f,(function(e){var t=e.left-u,n=e.top-c;b+=''+e.dom+""})),y.painter.getSvgRoot().innerHTML=b,e.connectedBackgroundColor&&y.painter.setBackgroundColor(e.connectedBackgroundColor),y.refreshImmediately(),y.painter.toDataURL()}return e.connectedBackgroundColor&&y.add(new w.Rect({shape:{x:0,y:0,width:g,height:m},style:{fill:e.connectedBackgroundColor}})),N(f,(function(e){var t=new w.Image({style:{x:e.left*p-u,y:e.top*p-c,image:e.dom}});y.add(t)})),y.refreshImmediately(),v.toDataURL("image/"+(e&&e.type||"png"))}return this.getDataURL(e)}},ie.convertToPixel=o.curry(re,"convertToPixel"),ie.convertFromPixel=o.curry(re,"convertFromPixel"),ie.containPixel=function(e,t){if(!this._disposed){var n,i=this._model;return e=x.parseFinder(i,e),o.each(e,(function(e,i){i.indexOf("Models")>=0&&o.each(e,(function(e){var r=e.coordinateSystem;if(r&&r.containPoint)n|=!!r.containPoint(t);else if("seriesModels"===i){var o=this._chartsMap[e.__viewId];o&&o.containPoint&&(n|=o.containPoint(t,e))}}),this)}),this),!!n}we(this.id)},ie.getVisual=function(e,t){var n=this._model;e=x.parseFinder(n,e,{defaultMainType:"series"});var i=e.seriesModel,r=i.getData(),o=e.hasOwnProperty("dataIndexInside")?e.dataIndexInside:e.hasOwnProperty("dataIndex")?r.indexOfRawIndex(e.dataIndex):null;return null!=o?r.getItemVisual(o,t):r.getVisual(t)},ie.getViewOfComponentModel=function(e){return this._componentsMap[e.__viewId]},ie.getViewOfSeriesModel=function(e){return this._chartsMap[e.__viewId]};var oe={prepareAndUpdate:function(e){ae(this),oe.update.call(this,e)},update:function(e){var t=this._model,n=this._api,i=this._zr,r=this._coordSysMgr,o=this._scheduler;if(t){o.restoreData(t,e),o.performSeriesTasks(t),r.create(t,n),o.performDataProcessorTasks(t,e),le(this,t),r.update(t,n),pe(t),o.performVisualTasks(t,e),ge(this,t,n,e);var l=t.get("backgroundColor")||"transparent";if(s.canvasSupported)i.setBackgroundColor(l);else{var u=a.parse(l);l=a.stringify(u,"rgb"),0===u[3]&&(l="transparent")}ye(t,n)}},updateTransform:function(e){var t=this._model,n=this,i=this._api;if(t){var r=[];t.eachComponent((function(o,a){var s=n.getViewOfComponentModel(a);if(s&&s.__alive)if(s.updateTransform){var l=s.updateTransform(a,t,i,e);l&&l.update&&r.push(s)}else r.push(s)}));var a=o.createHashMap();t.eachSeries((function(r){var o=n._chartsMap[r.__viewId];if(o.updateTransform){var s=o.updateTransform(r,t,i,e);s&&s.update&&a.set(r.uid,1)}else a.set(r.uid,1)})),pe(t),this._scheduler.performVisualTasks(t,e,{setDirty:!0,dirtyMap:a}),ve(n,t,i,e,a),ye(t,this._api)}},updateView:function(e){var t=this._model;t&&(b.markUpdateMethod(e,"updateView"),pe(t),this._scheduler.performVisualTasks(t,e,{setDirty:!0}),ge(this,this._model,this._api,e),ye(t,this._api))},updateVisual:function(e){oe.update.call(this,e)},updateLayout:function(e){oe.update.call(this,e)}};function ae(e){var t=e._model,n=e._scheduler;n.restorePipelines(t),n.prepareStageTasks(),fe(e,"component",t,n),fe(e,"chart",t,n),n.plan()}function se(e,t,n,i,r){var a=e._model;if(i){var s={};s[i+"Id"]=n[i+"Id"],s[i+"Index"]=n[i+"Index"],s[i+"Name"]=n[i+"Name"];var l={mainType:i,query:s};r&&(l.subType=r);var u=n.excludeSeriesId;null!=u&&(u=o.createHashMap(x.normalizeToArray(u))),a&&a.eachComponent(l,(function(t){u&&null!=u.get(t.id)||c(e["series"===i?"_chartsMap":"_componentsMap"][t.__viewId])}),e)}else N(e._componentsViews.concat(e._chartsViews),c);function c(i){i&&i.__alive&&i[t]&&i[t](i.__model,a,e._api,n)}}function le(e,t){var n=e._chartsMap,i=e._scheduler;t.eachSeries((function(e){i.updateStreamModes(e,n[e.__viewId])}))}function ue(e,t){var n=e.type,i=e.escapeConnect,r=Se[n],a=r.actionInfo,s=(a.update||"update").split(":"),l=s.pop();s=null!=s[0]&&L(s[0]),this[K]=!0;var u=[e],c=!1;e.batch&&(c=!0,u=o.map(e.batch,(function(t){return t=o.defaults(o.extend({},t),e),t.batch=null,t})));var h,d=[],f="highlight"===n||"downplay"===n;N(u,(function(e){h=r.action(e,this._model,this._api),h=h||o.extend({},e),h.type=a.event||h.type,d.push(h),f?se(this,l,e,"series"):s&&se(this,l,e,s.main,s.sub)}),this),"none"===l||f||s||(this[X]?(ae(this),oe.update.call(this,e),this[X]=!1):oe[l].call(this,e)),h=c?{type:a.event||n,escapeConnect:i,batch:d}:d[0],this[K]=!1,!t&&this._messageCenter.trigger(h.type,h)}function ce(e){var t=this._pendingActions;while(t.length){var n=t.shift();ue.call(this,n,e)}}function he(e){!e&&this.trigger("updated")}function de(e,t){e.on("rendered",(function(){t.trigger("rendered"),!e.animation.isFinished()||t[X]||t._scheduler.unfinished||t._pendingActions.length||t.trigger("finished")}))}function fe(e,t,n,i){for(var r="component"===t,o=r?e._componentsViews:e._chartsViews,a=r?e._componentsMap:e._chartsMap,s=e._zr,l=e._api,u=0;ut.get("hoverLayerThreshold")&&!s.node&&t.eachSeries((function(t){if(!t.preventUsingHoverLayer){var n=e._chartsMap[t.__viewId];n.__alive&&n.group.traverse((function(e){e.useHoverLayer=!0}))}}))}function _e(e,t){var n=e.get("blendMode")||null;t.group.traverse((function(e){e.isGroup||e.style.blend!==n&&e.setStyle("blend",n),e.eachPendingDisplayable&&e.eachPendingDisplayable((function(e){e.setStyle("blend",n)}))}))}function Me(e,t){var n=e.get("z"),i=e.get("zlevel");t.group.traverse((function(e){"group"!==e.type&&(null!=n&&(e.z=n),null!=i&&(e.zlevel=i))}))}function Ie(e){var t=e._coordSysMgr;return o.extend(new h(e),{getCoordinateSystems:o.bind(t.getCoordinateSystems,t),getComponentByElement:function(t){while(t){var n=t.__ecComponentInfo;if(null!=n)return e._model.getComponent(n.mainType,n.index);t=t.parent}}})}function Ce(){this.eventInfo}ie._initEvents=function(){N(be,(function(e){var t=function(t){var n,i=this.getModel(),r=t.target,a="globalout"===e;if(a)n={};else if(r&&null!=r.dataIndex){var s=r.dataModel||i.getSeriesByIndex(r.seriesIndex);n=s&&s.getDataParams(r.dataIndex,r.dataType,r)||{}}else r&&r.eventData&&(n=o.extend({},r.eventData));if(n){var l=n.componentType,u=n.componentIndex;"markLine"!==l&&"markPoint"!==l&&"markArea"!==l||(l="series",u=n.seriesIndex);var c=l&&null!=u&&i.getComponent(l,u),h=c&&this["series"===c.mainType?"_chartsMap":"_componentsMap"][c.__viewId];n.event=t,n.type=e,this._ecEventProcessor.eventInfo={targetEl:r,packedEvent:n,model:c,view:h},this.trigger(e,n)}};t.zrEventfulCallAtLast=!0,this._zr.on(e,t,this)}),this),N(De,(function(e,t){this._messageCenter.on(t,(function(e){this.trigger(t,e)}),this)}),this)},ie.isDisposed=function(){return this._disposed},ie.clear=function(){this._disposed?we(this.id):this.setOption({series:[]},!0)},ie.dispose=function(){if(this._disposed)we(this.id);else{this._disposed=!0,x.setAttribute(this.getDom(),ze,"");var e=this._api,t=this._model;N(this._componentsViews,(function(n){n.dispose(t,e)})),N(this._chartsViews,(function(n){n.dispose(t,e)})),this._zr.dispose(),delete Pe[this.id]}},o.mixin(ne,u),Ce.prototype={constructor:Ce,normalizeQuery:function(e){var t={},n={},i={};if(o.isString(e)){var r=L(e);t.mainType=r.main||null,t.subType=r.sub||null}else{var a=["Index","Name","Id"],s={name:1,dataIndex:1,dataType:1};o.each(e,(function(e,r){for(var o=!1,l=0;l0&&c===r.length-u.length){var h=r.slice(0,c);"data"!==h&&(t.mainType=h,t[u.toLowerCase()]=e,o=!0)}}s.hasOwnProperty(r)&&(n[r]=e,o=!0),o||(i[r]=e)}))}return{cptQuery:t,dataQuery:n,otherQuery:i}},filter:function(e,t,n){var i=this.eventInfo;if(!i)return!0;var r=i.targetEl,o=i.packedEvent,a=i.model,s=i.view;if(!a||!s)return!0;var l=t.cptQuery,u=t.dataQuery;return c(l,a,"mainType")&&c(l,a,"subType")&&c(l,a,"index","componentIndex")&&c(l,a,"name")&&c(l,a,"id")&&c(u,o,"name")&&c(u,o,"dataIndex")&&c(u,o,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(e,t.otherQuery,r,o));function c(e,t,n,i){return null==e[n]||t[i||n]===e[n]}},afterTrigger:function(){this.eventInfo=null}};var Se={},De={},Te=[],Ae=[],ke=[],Ee=[],Ne={},Oe={},Pe={},Le={},Be=new Date-0,je=new Date-0,ze="_echarts_instance_";function Re(e){var t=0,n=1,i=2,r="__connectUpdateStatus";function o(e,t){for(var n=0;n */ +t.read=function(e,t,n,i,r){var o,a,s=8*r-i-1,l=(1<>1,c=-7,h=n?r-1:0,d=n?-1:1,f=e[t+h];for(h+=d,o=f&(1<<-c)-1,f>>=-c,c+=s;c>0;o=256*o+e[t+h],h+=d,c-=8);for(a=o&(1<<-c)-1,o>>=-c,c+=i;c>0;a=256*a+e[t+h],h+=d,c-=8);if(0===o)o=1-u;else{if(o===l)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,i),o-=u}return(f?-1:1)*a*Math.pow(2,o-i)},t.write=function(e,t,n,i,r,o){var a,s,l,u=8*o-r-1,c=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,f=i?0:o-1,p=i?1:-1,g=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),t+=a+h>=1?d/l:d*Math.pow(2,1-h),t*l>=2&&(a++,l/=2),a+h>=c?(s=0,a=c):a+h>=1?(s=(t*l-1)*Math.pow(2,r),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,r),a=0));r>=8;e[n+f]=255&s,f+=p,s/=256,r-=8);for(a=a<0;e[n+f]=255&a,f+=p,a/=256,u-=8);e[n+f-p]|=128*g}},3061:function(e,t,n){var i=n("357b"),r=n("d6e9"),o=n("490b"),a=n("cc5e"),s=a.SOURCE_FORMAT_ORIGINAL,l=n("f968"),u=l.getDimensionTypeByAxis,c=n("faa9"),h=c.getDataItemValue,d=n("9354"),f=n("c41e"),p=f.getCoordSysInfoBySeries,g=n("d60c"),m=n("53f2"),v=m.enableDataStack,y=n("887c"),b=y.makeSeriesEncodeForAxisCoordSys;function w(e,t,n){n=n||{},g.isInstance(e)||(e=g.seriesDataToSource(e));var a,s=t.get("coordinateSystem"),l=d.get(s),c=p(t);c&&(a=i.map(c.coordSysDims,(function(e){var t={name:e},n=c.axisMap.get(e);if(n){var i=n.get("type");t.type=u(i)}return t}))),a||(a=l&&(l.getDimensionsInfo?l.getDimensionsInfo():l.dimensions.slice())||["x","y"]);var h,f,m=o(e,{coordDimensions:a,generateCoord:n.generateCoord,encodeDefaulter:n.useEncodeDefaulter?i.curry(b,a,t):null});c&&i.each(m,(function(e,t){var n=e.coordDim,i=c.categoryAxisMap.get(n);i&&(null==h&&(h=t),e.ordinalMeta=i.getOrdinalMeta()),null!=e.otherDims.itemName&&(f=!0)})),f||null==h||(m[h].otherDims.itemName=0);var y=v(t,m),w=new r(m,t);w.setCalculationInfo(y);var _=null!=h&&x(e)?function(e,t,n,i){return i===h?n:this.defaultDimValueGetter(e,t,n,i)}:null;return w.hasItemOption=!1,w.initData(e,null,_),w}function x(e){if(e.sourceFormat===s){var t=_(e.data||[]);return null!=t&&!i.isArray(h(t))}}function _(e){var t=0;while(t=0?"p":"n",O=M;if(x&&(r[c][E]||(r[c][E]={p:M,n:M}),O=r[c][E][N]),"radius"===p.dim){var P=p.dataToRadius(k)-M,L=i.dataToAngle(E);Math.abs(P)=r/3?1:2),l=t.y-i(a)*o*(o>=r/3?1:2);a=t.angle-Math.PI/2,e.moveTo(s,l),e.lineTo(t.x+n(a)*o,t.y+i(a)*o),e.lineTo(t.x+n(t.angle)*r,t.y+i(t.angle)*r),e.lineTo(t.x-n(a)*o,t.y-i(a)*o),e.lineTo(s,l)}});e.exports=r},"31a6":function(e,t,n){var i=n("357b"),r=n("3061"),o=n("3ede"),a=n("eb71"),s=n("5571"),l=n("0b9d");l.getLayoutRect;t.getLayoutRect=l.getLayoutRect;var u=n("53f2"),c=u.enableDataStack,h=u.isDimensionStacked,d=u.getStackedDimension,f=n("c402");t.completeDimensions=f;var p=n("490b");t.createDimensions=p;var g=n("f6d4");function m(e){return r(e.getSource(),e)}t.createSymbol=g.createSymbol;var v={isDimensionStacked:h,enableDataStack:c,getStackedDimension:d};function y(e,t){var n=t;s.isInstance(t)||(n=new s(t),i.mixin(n,a));var r=o.createScaleByModel(n);return r.setExtent(e[0],e[1]),o.niceScaleExtent(r,n),r}function b(e){i.mixin(e,a)}t.createList=m,t.dataStack=v,t.createScale=y,t.mixinAxisModelCommonMethods=b},"31cf":function(e,t,n){var i=n("2fcc");n("ee0b"),n("8567"),n("7d04");var r=n("3314"),o=n("3cfb"),a=n("f2b9");i.registerLayout(r),i.registerVisual(o),i.registerProcessor(a("themeRiver"))},3255:function(e,t,n){var i=n("7b30"),r=i.extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{show:!0,position:"inside"},itemStyle:{borderWidth:2},emphasis:{label:{show:!0}}}});e.exports=r},3283:function(e,t,n){var i=n("364b"),r=i.extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(e,t){var n=t.cx,i=t.cy,r=Math.max(t.r,0),o=t.startAngle,a=t.endAngle,s=t.clockwise,l=Math.cos(o),u=Math.sin(o);e.moveTo(l*r+n,u*r+i),e.arc(n,i,r,o,a,!s)}});e.exports=r},"32ad":function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},"32c0":function(e,t,n){var i=n("357b"),r=n("53de"),o=n("5ed9"),a=n("f298"),s=n("0b9d"),l=n("8302"),u=n("96ab"),c=n("f6d4"),h=c.createSymbol,d=n("3ede"),f=n("cb77"),p=n("405f"),g=p.encodeHTML,m=i.bind,v=i.each,y=Math.PI,b=l.extend({type:"timeline.slider",init:function(e,t){this.api=t,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(e,t,n,i){if(this.model=e,this.api=n,this.ecModel=t,this.group.removeAll(),e.get("show",!0)){var r=this._layout(e,n),o=this._createGroup("mainGroup"),a=this._createGroup("labelGroup"),s=this._axis=this._createAxis(r,e);e.formatTooltip=function(e){return g(s.scale.getLabel(e))},v(["AxisLine","AxisTick","Control","CurrentPointer"],(function(t){this["_render"+t](r,o,s,e)}),this),this._renderAxisLabel(r,a,s,e),this._position(r,e)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(e,t){var n=e.get("label.position"),i=e.get("orient"),r=w(e,t);null==n||"auto"===n?n="horizontal"===i?r.y+r.height/2=0||"+"===n?"left":"right"},c={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},h={horizontal:0,vertical:y/2},d="vertical"===i?r.height:r.width,f=e.getModel("controlStyle"),p=f.get("show",!0),g=p?f.get("itemSize"):0,m=p?f.get("itemGap"):0,v=g+m,b=e.get("label.rotate")||0;b=b*y/180;var x=f.get("position",!0),_=p&&f.get("showPlayBtn",!0),M=p&&f.get("showPrevBtn",!0),I=p&&f.get("showNextBtn",!0),C=0,S=d;return"left"===x||"bottom"===x?(_&&(o=[0,0],C+=v),M&&(a=[C,0],C+=v),I&&(s=[S-g,0],S-=v)):(_&&(o=[S-g,0],S-=v),M&&(a=[0,0],C+=v),I&&(s=[S-g,0],S-=v)),l=[C,S],e.get("inverse")&&l.reverse(),{viewRect:r,mainLength:d,orient:i,rotation:h[i],labelRotation:b,labelPosOpt:n,labelAlign:e.get("label.align")||u[i],labelBaseline:e.get("label.verticalAlign")||e.get("label.baseline")||c[i],playPosition:o,prevBtnPosition:a,nextBtnPosition:s,axisExtent:l,controlSize:g,controlGap:m}},_position:function(e,t){var n=this._mainGroup,i=this._labelGroup,r=e.viewRect;if("vertical"===e.orient){var a=o.create(),s=r.x,l=r.y+r.height;o.translate(a,a,[-s,-l]),o.rotate(a,a,-y/2),o.translate(a,a,[s,l]),r=r.clone(),r.applyTransform(a)}var u=v(r),c=v(n.getBoundingRect()),h=v(i.getBoundingRect()),d=n.position,f=i.position;f[0]=d[0]=u[0][0];var p=e.labelPosOpt;if(isNaN(p)){var g="+"===p?0:1;b(d,c,u,1,g),b(f,h,u,1,1-g)}else{g=p>=0?0:1;b(d,c,u,1,g),f[1]=d[1]+p}function m(e){var t=e.position;e.origin=[u[0][0]-t[0],u[1][0]-t[1]]}function v(e){return[[e.x,e.x+e.width],[e.y,e.y+e.height]]}function b(e,t,n,i,r){e[i]+=n[i][r]-t[i][r]}n.attr("position",d),i.attr("position",f),n.rotation=i.rotation=e.rotation,m(n),m(i)},_createAxis:function(e,t){var n=t.getData(),i=t.get("axisType"),r=d.createScaleByModel(t,i);r.getTicks=function(){return n.mapArray(["value"],(function(e){return e}))};var o=n.getDataExtent("value");r.setExtent(o[0],o[1]),r.niceTicks();var a=new u("value",r,e.axisExtent,i);return a.model=t,a},_createGroup:function(e){var t=this["_"+e]=new a.Group;return this.group.add(t),t},_renderAxisLine:function(e,t,n,r){var o=n.getExtent();r.get("lineStyle.show")&&t.add(new a.Line({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:i.extend({lineCap:"round"},r.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(e,t,n,i){var r=i.getData(),o=n.scale.getTicks();v(o,(function(e){var o=n.dataToCoord(e),s=r.getItemModel(e),l=s.getModel("itemStyle"),u=s.getModel("emphasis.itemStyle"),c={position:[o,0],onclick:m(this._changeTimeline,this,e)},h=_(s,l,t,c);a.setHoverStyle(h,u.getItemStyle()),s.get("tooltip")?(h.dataIndex=e,h.dataModel=i):h.dataIndex=h.dataModel=null}),this)},_renderAxisLabel:function(e,t,n,i){var r=n.getLabelModel();if(r.get("show")){var o=i.getData(),s=n.getViewLabels();v(s,(function(i){var r=i.tickValue,s=o.getItemModel(r),l=s.getModel("label"),u=s.getModel("emphasis.label"),c=n.dataToCoord(i.tickValue),h=new a.Text({position:[c,0],rotation:e.labelRotation-e.rotation,onclick:m(this._changeTimeline,this,r),silent:!1});a.setTextStyle(h.style,l,{text:i.formattedLabel,textAlign:e.labelAlign,textVerticalAlign:e.labelBaseline}),t.add(h),a.setHoverStyle(h,a.setTextStyle({},u))}),this)}},_renderControl:function(e,t,n,i){var r=e.controlSize,o=e.rotation,s=i.getModel("controlStyle").getItemStyle(),l=i.getModel("emphasis.controlStyle").getItemStyle(),u=[0,-r/2,r,r],c=i.getPlayState(),h=i.get("inverse",!0);function d(e,n,c,h){if(e){var d={position:e,origin:[r/2,0],rotation:h?-o:0,rectHover:!0,style:s,onclick:c},f=x(i,n,u,d);t.add(f),a.setHoverStyle(f,l)}}d(e.nextBtnPosition,"controlStyle.nextIcon",m(this._changeTimeline,this,h?"-":"+")),d(e.prevBtnPosition,"controlStyle.prevIcon",m(this._changeTimeline,this,h?"+":"-")),d(e.playPosition,"controlStyle."+(c?"stopIcon":"playIcon"),m(this._handlePlayClick,this,!c),!0)},_renderCurrentPointer:function(e,t,n,i){var r=i.getData(),o=i.getCurrentIndex(),a=r.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(e){e.draggable=!0,e.drift=m(s._handlePointerDrag,s),e.ondragend=m(s._handlePointerDragend,s),M(e,o,n,i,!0)},onUpdate:function(e){M(e,o,n,i)}};this._currentPointer=_(a,a,this._mainGroup,{},this._currentPointer,l)},_handlePlayClick:function(e){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:e,from:this.uid})},_handlePointerDrag:function(e,t,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},_handlePointerDragend:function(e){this._pointerChangeTimeline([e.offsetX,e.offsetY],!0)},_pointerChangeTimeline:function(e,t){var n=this._toAxisCoord(e)[0],i=this._axis,r=f.asc(i.getExtent().slice());n>r[1]&&(n=r[1]),no&&(o=u),i.push(u)}for(var c=0;co&&(o=d)}return a.y0=r,a.max=o,a}e.exports=o},3406:function(e,t,n){var i=n("43a9");t.zrender=i;var r=n("5ed9");t.matrix=r;var o=n("d82e");t.vector=o;var a=n("357b"),s=n("2636");t.color=s;var l=n("f298"),u=n("cb77");t.number=u;var c=n("405f");t.format=c;var h=n("fb2f");h.throttle;t.throttle=h.throttle;var d=n("31a6");t.helper=d;var f=n("c305");t.parseGeoJSON=f;var p=n("d6e9");t.List=p;var g=n("5571");t.Model=g;var m=n("96c5");t.Axis=m;var v=n("d3e5");t.env=v;var y=f,b={};a.each(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults","clone","merge"],(function(e){b[e]=a[e]}));var w={};a.each(["extendShape","extendPath","makePath","makeImage","mergePath","resizePath","createIcon","setHoverStyle","setLabelStyle","setTextStyle","setText","getFont","updateProps","initProps","getTransform","clipPointsByRect","clipRectByRect","registerShape","getShapeClass","Group","Image","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","IncrementalDisplayable","CompoundPath","LinearGradient","RadialGradient","BoundingRect"],(function(e){w[e]=l[e]})),t.parseGeoJson=y,t.util=b,t.graphic=w},3443:function(e,t,n){e.exports=n("d673").Transform},3478:function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=r.createHashMap,a=r.isString,s=r.isArray,l=r.each,u=(r.assert,n("a8db")),c=u.parseXML,h=o(),d={registerMap:function(e,t,n){var i;return s(t)?i=t:t.svg?i=[{type:"svg",source:t.svg,specialAreas:t.specialAreas}]:(t.geoJson&&!t.features&&(n=t.specialAreas,t=t.geoJson),i=[{type:"geoJSON",source:t,specialAreas:n}]),l(i,(function(e){var t=e.type;"geoJson"===t&&(t=e.type="geoJSON");var n=f[t];n(e)})),h.set(e,i)},retrieveMap:function(e){return h.get(e)}},f={geoJSON:function(e){var t=e.source;e.geoJSON=a(t)?"undefined"!==typeof JSON&&JSON.parse?JSON.parse(t):new Function("return ("+t+");")():t},svg:function(e){e.svgXML=c(e.source)}};e.exports=d},"3478f":function(e,t,n){(function(t){var i=n("9054"),r=n("78f8"),o=new r,a=new i(24),s=new i(11),l=new i(10),u=new i(3),c=new i(7),h=n("7eff"),d=n("3bae");function f(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._pub=new i(e),this}function p(e,n){return n=n||"utf8",t.isBuffer(e)||(e=new t(e,n)),this._priv=new i(e),this}e.exports=v;var g={};function m(e,t){var n=t.toString("hex"),i=[n,e.toString(16)].join("_");if(i in g)return g[i];var r,d=0;if(e.isEven()||!h.simpleSieve||!h.fermatTest(e)||!o.test(e))return d+=1,d+="02"===n||"05"===n?8:4,g[i]=d,d;switch(o.test(e.shrn(1))||(d+=2),n){case"02":e.mod(a).cmp(s)&&(d+=8);break;case"05":r=e.mod(l),r.cmp(u)&&r.cmp(c)&&(d+=8);break;default:d+=4}return g[i]=d,d}function v(e,t,n){this.setGenerator(t),this.__prime=new i(e),this._prime=i.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,n?(this.setPublicKey=f,this.setPrivateKey=p):this._primeCode=8}function y(e,n){var i=new t(e.toArray());return n?i.toString(n):i}Object.defineProperty(v.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!==typeof this._primeCode&&(this._primeCode=m(this.__prime,this.__gen)),this._primeCode}}),v.prototype.generateKeys=function(){return this._priv||(this._priv=new i(d(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},v.prototype.computeSecret=function(e){e=new i(e),e=e.toRed(this._prime);var n=e.redPow(this._priv).fromRed(),r=new t(n.toArray()),o=this.getPrime();if(r.length0?"P":"N",o=i.getVisual("borderColor"+r)||i.getVisual("color"+r),a=n.getModel(u).getItemStyle(h);t.useStyle(a),t.style.fill=null,t.style.stroke=o}var x=d;e.exports=x},"356d":function(e,t,n){n("7561"),n("90fd")},"357b":function(e,t){var n={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1,"[object Canvas]":1},i={"[object Int8Array]":1,"[object Uint8Array]":1,"[object Uint8ClampedArray]":1,"[object Int16Array]":1,"[object Uint16Array]":1,"[object Int32Array]":1,"[object Uint32Array]":1,"[object Float32Array]":1,"[object Float64Array]":1},r=Object.prototype.toString,o=Array.prototype,a=o.forEach,s=o.filter,l=o.slice,u=o.map,c=o.reduce,h={};function d(e,t){"createCanvas"===e&&(y=null),h[e]=t}function f(e){if(null==e||"object"!==typeof e)return e;var t=e,o=r.call(e);if("[object Array]"===o){if(!Q(e)){t=[];for(var a=0,s=e.length;a1e-10&&(r.width+=a/s,r.height+=a/s,r.x-=a/s/2,r.y-=a/s/2)}return r}return e},contain:function(e,t){var n=this.transformCoordToLocal(e,t),i=this.getBoundingRect(),r=this.style;if(e=n[0],t=n[1],i.contain(e,t)){var o=this.path.data;if(r.hasStroke()){var s=r.lineWidth,l=r.strokeNoScale?this.getLineScale():1;if(l>1e-10&&(r.hasFill()||(s=Math.max(s,this.strokeContainThreshold)),a.containStroke(o,s/l,e,t)))return!0}if(r.hasFill())return a.contain(o,e,t)}return!1},dirty:function(e){null==e&&(e=!0),e&&(this.__dirtyPath=e,this._rect=null),this.__dirty=this.__dirtyText=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(e){return this.animate("shape",e)},attrKV:function(e,t){"shape"===e?(this.setShape(t),this.__dirtyPath=!0,this._rect=null):i.prototype.attrKV.call(this,e,t)},setShape:function(e,t){var n=this.shape;if(n){if(r.isObject(e))for(var i in e)e.hasOwnProperty(i)&&(n[i]=e[i]);else n[e]=t;this.dirty(!0)}return this},getLineScale:function(){var e=this.transform;return e&&u(e[0]-1)>1e-10&&u(e[3]-1)>1e-10?Math.sqrt(u(e[0]*e[3]-e[2]*e[1])):1}},h.extend=function(e){var t=function(t){h.call(this,t),e.style&&this.style.extendFrom(e.style,!1);var n=e.shape;if(n){this.shape=this.shape||{};var i=this.shape;for(var r in n)!i.hasOwnProperty(r)&&n.hasOwnProperty(r)&&(i[r]=n[r])}e.init&&e.init.call(this,t)};for(var n in r.inherits(t,h),e)"style"!==n&&"shape"!==n&&(t.prototype[n]=e[n]);return t},r.inherits(h,i);var d=h;e.exports=d},"36d5":function(e,t){var n=0,i=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+i).toString(36))}},"36fd":function(e,t,n){var i=n("357b"),r=n("a51f"),o=n("4f46"),a=o.retrieveRawValue;function s(e,t){var n=t.getModel("aria");if(n.get("show"))if(n.get("description"))e.setAttribute("aria-label",n.get("description"));else{var o=0;t.eachSeries((function(e,t){++o}),this);var s,l=n.get("data.maxCount")||10,u=n.get("series.maxCount")||10,c=Math.min(o,u);if(!(o<1)){var h=m();s=h?p(g("general.withTitle"),{title:h}):g("general.withoutTitle");var d=[],f=o>1?"series.multiple.prefix":"series.single.prefix";s+=p(g(f),{seriesCount:o}),t.eachSeries((function(e,t){if(t1?"multiple":"single")+".";n=g(i?r+"withName":r+"withoutName"),n=p(n,{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:v(e.subType)});var s=e.getData();window.data=s,s.count()>l?n+=p(g("data.partialData"),{displayCnt:l}):n+=g("data.allData");for(var u=[],h=0;h=0){var c=a.indexOf(l),h=a.substr(u+s.length,c-u-s.length);h.indexOf("sub")>-1?i["marker"+h]={textWidth:4,textHeight:4,textBorderRadius:2,textBackgroundColor:t[h],textOffset:[3,0]}:i["marker"+h]={textWidth:10,textHeight:10,textBorderRadius:5,textBackgroundColor:t[h]},a=a.substr(c+1),u=a.indexOf("{marker")}var d=n.getModel("textStyle"),f=d.get("fontSize"),p=n.get("textLineHeight");null==p&&(p=Math.round(3*f/2)),this.el=new r({style:o.setTextStyle({},d,{rich:i,text:e,textBackgroundColor:n.get("backgroundColor"),textBorderRadius:n.get("borderRadius"),textFill:n.get("textStyle.color"),textPadding:n.get("padding"),textLineHeight:p}),z:n.get("z")}),this._zr.add(this.el);var g=this;this.el.on("mouseover",(function(){g._enterable&&(clearTimeout(g._hideTimeout),g._show=!0),g._inContent=!0})),this.el.on("mouseout",(function(){g._enterable&&g._show&&g.hideLater(g._hideDelay),g._inContent=!1}))},setEnterable:function(e){this._enterable=e},getSize:function(){var e=this.el.getBoundingRect();return[e.width,e.height]},moveTo:function(e,t){if(this.el){var n=this._styleCoord;a(n,this._zr,e,t),this.el.attr("position",[n[0],n[1]])}},hide:function(){this.el&&this.el.hide(),this._show=!1},hideLater:function(e){!this._show||this._inContent&&this._enterable||(e?(this._hideDelay=e,this._show=!1,this._hideTimeout=setTimeout(i.bind(this.hide,this),e)):this.hide())},isShow:function(){return this._show},dispose:function(){clearTimeout(this._hideTimeout),this.el&&this._zr.remove(this.el)},getOuterSize:function(){var e=this.getSize();return{width:e[0],height:e[1]}}};var l=s;e.exports=l},"371e":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=r.isObject,a=r.each,s=r.map,l=r.indexOf,u=(r.retrieve,n("0b9d")),c=u.getLayoutRect,h=n("3ede"),d=h.createScaleByModel,f=h.ifAxisCrossZero,p=h.niceScaleExtent,g=h.estimateLabelUnionRect,m=n("b2ca"),v=n("fe37"),y=n("9354"),b=n("53f2"),w=b.getStackedDimension;function x(e,t,n){return e.getCoordSysModel()===t}function _(e,t,n){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(e,t,n),this.model=e}n("06c0");var M=_.prototype;function I(e,t,n,i){n.getAxesOnZeroOf=function(){return r?[r]:[]};var r,o=e[t],a=n.model,s=a.get("axisLine.onZero"),l=a.get("axisLine.onZeroAxisIndex");if(s){if(null!=l)C(o[l])&&(r=o[l]);else for(var u in o)if(o.hasOwnProperty(u)&&C(o[u])&&!i[c(o[u])]){r=o[u];break}r&&(i[c(r)]=!0)}function c(e){return e.dim+"_"+e.index}}function C(e){return e&&"category"!==e.type&&"time"!==e.type&&f(e)}function S(e,t){var n=e.getExtent(),i=n[0]+n[1];e.toGlobalCoord="x"===e.dim?function(e){return e+t}:function(e){return i-e+t},e.toLocalCoord="x"===e.dim?function(e){return e-t}:function(e){return i-e+t}}M.type="grid",M.axisPointerEnabled=!0,M.getRect=function(){return this._rect},M.update=function(e,t){var n=this._axesMap;this._updateScale(e,this.model),a(n.x,(function(e){p(e.scale,e.model)})),a(n.y,(function(e){p(e.scale,e.model)}));var i={};a(n.x,(function(e){I(n,"y",e,i)})),a(n.y,(function(e){I(n,"x",e,i)})),this.resize(this.model,t)},M.resize=function(e,t,n){var i=c(e.getBoxLayoutParams(),{width:t.getWidth(),height:t.getHeight()});this._rect=i;var r=this._axesList;function o(){a(r,(function(e){var t=e.isHorizontal(),n=t?[0,i.width]:[0,i.height],r=e.inverse?1:0;e.setExtent(n[r],n[1-r]),S(e,t?i.x:i.y)}))}o(),!n&&e.get("containLabel")&&(a(r,(function(e){if(!e.model.get("axisLabel.inside")){var t=g(e);if(t){var n=e.isHorizontal()?"height":"width",r=e.model.get("axisLabel.margin");i[n]-=t[n]+r,"top"===e.position?i.y+=t.height+r:"left"===e.position&&(i.x+=t.width+r)}}})),o())},M.getAxis=function(e,t){var n=this._axesMap[e];if(null!=n){if(null==t)for(var i in n)if(n.hasOwnProperty(i))return n[i];return n[t]}},M.getAxes=function(){return this._axesList.slice()},M.getCartesian=function(e,t){if(null!=e&&null!=t){var n="x"+e+"y"+t;return this._coordsMap[n]}o(e)&&(t=e.yAxisIndex,e=e.xAxisIndex);for(var i=0,r=this._coordsList;i>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function d(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function f(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}function p(e){return(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10}i(l,r),l.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._a,i=0|this._b,r=0|this._c,o=0|this._d,s=0|this._e,l=0|this._f,g=0|this._g,m=0|this._h,v=0;v<16;++v)t[v]=e.readInt32BE(4*v);for(;v<64;++v)t[v]=p(t[v-2])+t[v-7]+f(t[v-15])+t[v-16]|0;for(var y=0;y<64;++y){var b=m+d(s)+u(s,l,g)+a[y]+t[y]|0,w=h(n)+c(n,i,r)|0;m=g,g=l,l=s,s=o+b|0,o=r,r=i,i=n,n=b+w|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=r+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0,this._f=l+this._f|0,this._g=g+this._g|0,this._h=m+this._h|0},l.prototype._hash=function(){var e=o.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=l},3951:function(e,t,n){var i=n("357b"),r=i.createHashMap;function o(e){return{getTargetSeries:function(t){var n={},i=r();return t.eachSeriesByType(e,(function(e){e.__paletteScope=n,i.set(e.uid,e)})),i},reset:function(e,t){var n=e.getRawData(),i={},r=e.getData();r.each((function(e){var t=r.getRawIndex(e);i[t]=e})),n.each((function(t){var o,a=i[t],s=null!=a&&r.getItemVisual(a,"color",!0),l=null!=a&&r.getItemVisual(a,"borderColor",!0);if(s&&l||(o=n.getItemModel(t)),!s){var u=o.get("itemStyle.color")||e.getColorFromPalette(n.getName(t)||t+"",e.__paletteScope,n.count());null!=a&&r.setItemVisual(a,"color",u)}if(!l){var c=o.get("itemStyle.borderColor");null!=a&&r.setItemVisual(a,"borderColor",c)}}))}}}e.exports=o},"397a":function(e,t,n){"use strict";var i=n("be16").Buffer,r=n("2ff3").Transform,o=n("7fdc");function a(e,t){if(!i.isBuffer(e)&&"string"!==typeof e)throw new TypeError(t+" must be a string or a buffer")}function s(e){r.call(this),this._block=i.allocUnsafe(e),this._blockSize=e,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}o(s,r),s.prototype._transform=function(e,t,n){var i=null;try{this.update(e,t)}catch(r){i=r}n(i)},s.prototype._flush=function(e){var t=null;try{this.push(this.digest())}catch(n){t=n}e(t)},s.prototype.update=function(e,t){if(a(e,"Data"),this._finalized)throw new Error("Digest already called");i.isBuffer(e)||(e=i.from(e,t));var n=this._block,r=0;while(this._blockOffset+e.length-r>=this._blockSize){for(var o=this._blockOffset;o0;++s)this._length[s]+=l,l=this._length[s]/4294967296|0,l>0&&(this._length[s]-=4294967296*l);return this},s.prototype._update=function(){throw new Error("_update is not implemented")},s.prototype.digest=function(e){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var n=0;n<4;++n)this._length[n]=0;return t},s.prototype._digest=function(){throw new Error("_digest is not implemented")},e.exports=s},"39ae":function(e,t,n){"use strict";const i=t;i._reverse=function(e){const t={};return Object.keys(e).forEach((function(n){(0|n)==n&&(n|=0);const i=e[n];t[i]=n})),t},i.der=n("4b6e")},"39d4":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("d3e5"),a=n("4791"),s=n("44e1"),l=n("97cc"),u=n("faa9"),c=n("cb77"),h=s.mapVisual,d=s.eachVisual,f=r.isArray,p=r.each,g=c.asc,m=c.linearMap,v=r.noop,y=i.extendComponentModel({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-1/0,1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,dimension:null,inRange:null,outOfRange:null,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(e,t,n){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(e,n)},optionUpdated:function(e,t){var n=this.option;o.canvasSupported||(n.realtime=!1),!t&&l.replaceVisualOption(n,e,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(e){var t=this.stateList;e=r.bind(e,this),this.controllerVisuals=l.createVisualMappings(this.option.controller,t,e),this.targetVisuals=l.createVisualMappings(this.option.target,t,e)},getTargetSeriesIndices:function(){var e=this.option.seriesIndex,t=[];return null==e||"all"===e?this.ecModel.eachSeries((function(e,n){t.push(n)})):t=u.normalizeToArray(e),t},eachTargetSeries:function(e,t){r.each(this.getTargetSeriesIndices(),(function(n){e.call(t,this.ecModel.getSeriesByIndex(n))}),this)},isTargetSeries:function(e){var t=!1;return this.eachTargetSeries((function(n){n===e&&(t=!0)})),t},formatValueText:function(e,t,n){var i,o,a=this.option,s=a.precision,l=this.dataBound,u=a.formatter;return n=n||["<",">"],r.isArray(e)&&(e=e.slice(),i=!0),o=t?e:i?[c(e[0]),c(e[1])]:c(e),r.isString(u)?u.replace("{value}",i?o[0]:o).replace("{value2}",i?o[1]:o):r.isFunction(u)?i?u(e[0],e[1]):u(e):i?e[0]===l[0]?n[0]+" "+o[1]:e[1]===l[1]?n[1]+" "+o[0]:o[0]+" - "+o[1]:o;function c(e){return e===l[0]?"min":e===l[1]?"max":(+e).toFixed(Math.min(s,20))}},resetExtent:function(){var e=this.option,t=g([e.min,e.max]);this._dataExtent=t},getDataDimension:function(e){var t=this.option.dimension,n=e.dimensions;if(null!=t||n.length){if(null!=t)return e.getDimension(t);for(var i=e.dimensions,r=i.length-1;r>=0;r--){var o=i[r],a=e.getDimensionInfo(o);if(!a.isCalculationCoord)return o}}},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){var e=this.ecModel,t=this.option,n={inRange:t.inRange,outOfRange:t.outOfRange},i=t.target||(t.target={}),o=t.controller||(t.controller={});r.merge(i,n),r.merge(o,n);var l=this.isCategory();function u(n){f(t.color)&&!n.inRange&&(n.inRange={color:t.color.slice().reverse()}),n.inRange=n.inRange||{color:e.get("gradientColor")},p(this.stateList,(function(e){var t=n[e];if(r.isString(t)){var i=a.get(t,"active",l);i?(n[e]={},n[e][t]=i):delete n[e]}}),this)}function c(e,t,n){var i=e[t],r=e[n];i&&!r&&(r=e[n]={},p(i,(function(e,t){if(s.isValidType(t)){var n=a.get(t,"inactive",l);null!=n&&(r[t]=n,"color"!==t||r.hasOwnProperty("opacity")||r.hasOwnProperty("colorAlpha")||(r.opacity=[0,0]))}})))}function g(e){var t=(e.inRange||{}).symbol||(e.outOfRange||{}).symbol,n=(e.inRange||{}).symbolSize||(e.outOfRange||{}).symbolSize,i=this.get("inactiveColor");p(this.stateList,(function(o){var a=this.itemSize,s=e[o];s||(s=e[o]={color:l?i:[i]}),null==s.symbol&&(s.symbol=t&&r.clone(t)||(l?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=n&&r.clone(n)||(l?a[0]:[a[0],a[0]])),s.symbol=h(s.symbol,(function(e){return"none"===e||"square"===e?"roundRect":e}));var u=s.symbolSize;if(null!=u){var c=-1/0;d(u,(function(e){e>c&&(c=e)})),s.symbolSize=h(u,(function(e){return m(e,[0,c],[0,a[0]],!0)}))}}),this)}u.call(this,i),u.call(this,o),c.call(this,i,"inRange","outOfRange"),g.call(this,o)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:v,getValueState:v,getVisualMeta:v}),b=y;e.exports=b},"3a53":function(e,t,n){var i=n("6c47"),r=n("40c3"),o=n("0167"),a="Expected a function",s=Math.max,l=Math.min;function u(e,t,n){var u,c,h,d,f,p,g=0,m=!1,v=!1,y=!0;if("function"!=typeof e)throw new TypeError(a);function b(t){var n=u,i=c;return u=c=void 0,g=t,d=e.apply(i,n),d}function w(e){return g=e,f=setTimeout(M,t),m?b(e):d}function x(e){var n=e-p,i=e-g,r=t-n;return v?l(r,h-i):r}function _(e){var n=e-p,i=e-g;return void 0===p||n>=t||n<0||v&&i>=h}function M(){var e=r();if(_(e))return I(e);f=setTimeout(M,x(e))}function I(e){return f=void 0,y&&u?b(e):(u=c=void 0,d)}function C(){void 0!==f&&clearTimeout(f),g=0,u=p=c=f=void 0}function S(){return void 0===f?d:I(r())}function D(){var e=r(),n=_(e);if(u=arguments,c=this,p=e,n){if(void 0===f)return w(p);if(v)return clearTimeout(f),f=setTimeout(M,t),b(p)}return void 0===f&&(f=setTimeout(M,t)),d}return t=o(t)||0,i(n)&&(m=!!n.leading,v="maxWait"in n,h=v?s(o(n.maxWait)||0,t):h,y="trailing"in n?!!n.trailing:y),D.cancel=C,D.flush=S,D}e.exports=u},"3bae":function(e,t,n){"use strict";(function(t,i){var r=65536,o=4294967295;function a(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}var s=n("be16").Buffer,l=t.crypto||t.msCrypto;function u(e,t){if(e>o)throw new RangeError("requested too many random bytes");var n=s.allocUnsafe(e);if(e>0)if(e>r)for(var a=0;at[0]&&(t=t.slice().reverse());var i=e.coordToPoint([t[0],n]),r=e.coordToPoint([t[1],n]);return{x1:i[0],y1:i[1],x2:r[0],y2:r[1]}}function c(e){var t=e.getRadiusAxis();return t.inverse?0:1}function h(e){var t=e[0],n=e[e.length-1];t&&n&&Math.abs(Math.abs(t.coord-n.coord)-360)<1e-4&&e.pop()}var d=a.extend({type:"angleAxis",axisPointerClass:"PolarAxisPointer",render:function(e,t){if(this.group.removeAll(),e.get("show")){var n=e.axis,r=n.polar,o=r.getRadiusAxis().getExtent(),a=n.getTicksCoords(),s=n.getMinorTicksCoords(),u=i.map(n.getViewLabels(),(function(e){e=i.clone(e);return e.coord=n.dataToCoord(e.tickValue),e}));h(u),h(a),i.each(l,(function(t){!e.get(t+".show")||n.scale.isBlank()&&"axisLine"!==t||this["_"+t](e,r,a,s,o,u)}),this)}},_axisLine:function(e,t,n,i,o){var a,s=e.getModel("axisLine.lineStyle"),l=c(t),u=l?0:1;a=0===o[u]?new r.Circle({shape:{cx:t.cx,cy:t.cy,r:o[l]},style:s.getLineStyle(),z2:1,silent:!0}):new r.Ring({shape:{cx:t.cx,cy:t.cy,r:o[l],r0:o[u]},style:s.getLineStyle(),z2:1,silent:!0}),a.style.fill=null,this.group.add(a)},_axisTick:function(e,t,n,o,a){var s=e.getModel("axisTick"),l=(s.get("inside")?-1:1)*s.get("length"),h=a[c(t)],d=i.map(n,(function(e){return new r.Line({shape:u(t,[h,h+l],e.coord)})}));this.group.add(r.mergePath(d,{style:i.defaults(s.getModel("lineStyle").getLineStyle(),{stroke:e.get("axisLine.lineStyle.color")})}))},_minorTick:function(e,t,n,o,a){if(o.length){for(var s=e.getModel("axisTick"),l=e.getModel("minorTick"),h=(s.get("inside")?-1:1)*l.get("length"),d=a[c(t)],f=[],p=0;pv?"left":"right",w=Math.abs(m[1]-y)/g<.3?"middle":m[1]>y?"top":"bottom";h&&h[u]&&h[u].textStyle&&(a=new o(h[u].textStyle,d,d.ecModel));var x=new r.Text({silent:s.isLabelSilent(e)});this.group.add(x),r.setTextStyle(x.style,a,{x:m[0],y:m[1],textFill:a.getTextColor()||e.get("axisLine.lineStyle.color"),text:n.formattedLabel,textAlign:b,textVerticalAlign:w}),p&&(x.eventData=s.makeAxisEventDataBase(e),x.eventData.targetType="axisLabel",x.eventData.value=n.rawLabel)}),this)},_splitLine:function(e,t,n,o,a){var s=e.getModel("splitLine"),l=s.getModel("lineStyle"),c=l.get("color"),h=0;c=c instanceof Array?c:[c];for(var d=[],f=0;f=0;w&&b.depth>m&&(m=b.depth),y.setLayout({depth:w?b.depth:h},!0),"vertical"===o?y.setLayout({dy:n},!0):y.setLayout({dx:n},!0);for(var x=0;xh-1?m:h-1;a&&"left"!==a&&f(e,a,o,S);d="vertical"===o?(r-n)/S:(i-n)/S;g(e,d,o)}function d(e){var t=e.hostGraph.data.getRawDataItem(e.dataIndex);return null!=t.depth&&t.depth>=0}function f(e,t,n,i){if("right"===t){var o=[],a=e,s=0;while(a.length){for(var l=0;l0;o--)l*=.99,w(s,l,a),b(s,r,n,i,a),T(s,l,a),b(s,r,n,i,a)}function v(e,t){var n=[],i="vertical"===t?"y":"x",o=a(e,(function(e){return e.getLayout()[i]}));return o.keys.sort((function(e,t){return e-t})),r.each(o.keys,(function(e){n.push(o.buckets.get(e))})),n}function y(e,t,n,i,o,a){var s=1/0;r.each(e,(function(e){var t=e.length,l=0;r.each(e,(function(e){l+=e.getLayout().value}));var u="vertical"===a?(i-(t-1)*o)/l:(n-(t-1)*o)/l;u0&&(r=s.getLayout()[a]+l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0)),u=s.getLayout()[a]+s.getLayout()[h]+t;var f="vertical"===o?i:n;if(l=u-t-f,l>0)for(r=s.getLayout()[a]-l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0),u=r,d=c-2;d>=0;--d)s=e[d],l=s.getLayout()[a]+s.getLayout()[h]+t-u,l>0&&(r=s.getLayout()[a]-l,"vertical"===o?s.setLayout({x:r},!0):s.setLayout({y:r},!0)),u=s.getLayout()[a]}))}function w(e,t,n){r.each(e.slice().reverse(),(function(e){r.each(e,(function(e){if(e.outEdges.length){var i=D(e.outEdges,x,n)/D(e.outEdges,S,n);if(isNaN(i)){var r=e.outEdges.length;i=r?D(e.outEdges,_,n)/r:0}if("vertical"===n){var o=e.getLayout().x+(i-C(e,n))*t;e.setLayout({x:o},!0)}else{var a=e.getLayout().y+(i-C(e,n))*t;e.setLayout({y:a},!0)}}}))}))}function x(e,t){return C(e.node2,t)*e.getValue()}function _(e,t){return C(e.node2,t)}function M(e,t){return C(e.node1,t)*e.getValue()}function I(e,t){return C(e.node1,t)}function C(e,t){return"vertical"===t?e.getLayout().x+e.getLayout().dx/2:e.getLayout().y+e.getLayout().dy/2}function S(e){return e.getValue()}function D(e,t,n){var i=0,r=e.length,o=-1;while(++o3?0:(e-e%10!==10)*e%10]}};var x={D:function(e){return e.getDay()},DD:function(e){return m(e.getDay())},Do:function(e,t){return t.DoFn(e.getDate())},d:function(e){return e.getDate()},dd:function(e){return m(e.getDate())},ddd:function(e,t){return t.dayNamesShort[e.getDay()]},dddd:function(e,t){return t.dayNames[e.getDay()]},M:function(e){return e.getMonth()+1},MM:function(e){return m(e.getMonth()+1)},MMM:function(e,t){return t.monthNamesShort[e.getMonth()]},MMMM:function(e,t){return t.monthNames[e.getMonth()]},yy:function(e){return m(String(e.getFullYear()),4).substr(2)},yyyy:function(e){return m(e.getFullYear(),4)},h:function(e){return e.getHours()%12||12},hh:function(e){return m(e.getHours()%12||12)},H:function(e){return e.getHours()},HH:function(e){return m(e.getHours())},m:function(e){return e.getMinutes()},mm:function(e){return m(e.getMinutes())},s:function(e){return e.getSeconds()},ss:function(e){return m(e.getSeconds())},S:function(e){return Math.round(e.getMilliseconds()/100)},SS:function(e){return m(Math.round(e.getMilliseconds()/10),2)},SSS:function(e){return m(e.getMilliseconds(),3)},a:function(e,t){return e.getHours()<12?t.amPm[0]:t.amPm[1]},A:function(e,t){return e.getHours()<12?t.amPm[0].toUpperCase():t.amPm[1].toUpperCase()},ZZ:function(e){var t=e.getTimezoneOffset();return(t>0?"-":"+")+m(100*Math.floor(Math.abs(t)/60)+Math.abs(t)%60,4)}},_={d:[s,function(e,t){e.day=t}],Do:[s+c,function(e,t){e.day=parseInt(t,10)}],M:[s,function(e,t){e.month=t-1}],yy:[s,function(e,t){var n=new Date,i=+(""+n.getFullYear()).substr(0,2);e.year=""+(t>68?i-1:i)+t}],h:[s,function(e,t){e.hour=t}],m:[s,function(e,t){e.minute=t}],s:[s,function(e,t){e.second=t}],yyyy:[u,function(e,t){e.year=t}],S:["\\d",function(e,t){e.millisecond=100*t}],SS:["\\d{2}",function(e,t){e.millisecond=10*t}],SSS:[l,function(e,t){e.millisecond=t}],D:[s,d],ddd:[c,d],MMM:[c,g("monthNamesShort")],MMMM:[c,g("monthNames")],a:[c,function(e,t,n){var i=t.toLowerCase();i===n.amPm[0]?e.isPm=!1:i===n.amPm[1]&&(e.isPm=!0)}],ZZ:["[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z",function(e,t){var n,i=(t+"").match(/([+-]|\d\d)/gi);i&&(n=60*i[1]+parseInt(i[2],10),e.timezoneOffset="+"===i[0]?n:-n)}]};_.dd=_.d,_.dddd=_.ddd,_.DD=_.D,_.mm=_.m,_.hh=_.H=_.HH=_.h,_.MM=_.M,_.ss=_.s,_.A=_.a,o.masks={default:"ddd MMM dd yyyy HH:mm:ss",shortDate:"M/D/yy",mediumDate:"MMM d, yyyy",longDate:"MMMM d, yyyy",fullDate:"dddd, MMMM d, yyyy",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},o.format=function(e,t,n){var i=n||o.i18n;if("number"===typeof e&&(e=new Date(e)),"[object Date]"!==Object.prototype.toString.call(e)||isNaN(e.getTime()))throw new Error("Invalid Date in fecha.format");t=o.masks[t]||t||o.masks["default"];var r=[];return t=t.replace(h,(function(e,t){return r.push(t),"@@@"})),t=t.replace(a,(function(t){return t in x?x[t](e,i):t.slice(1,t.length-1)})),t.replace(/@@@/g,(function(){return r.shift()}))},o.parse=function(e,t,n){var i=n||o.i18n;if("string"!==typeof t)throw new Error("Invalid format in fecha.parse");if(t=o.masks[t]||t,e.length>1e3)return null;var r={},s=[],l=[];t=t.replace(h,(function(e,t){return l.push(t),"@@@"}));var u=f(t).replace(a,(function(e){if(_[e]){var t=_[e];return s.push(t[1]),"("+t[0]+")"}return e}));u=u.replace(/@@@/g,(function(){return l.shift()}));var c=e.match(new RegExp(u,"i"));if(!c)return null;for(var d=1;d=0;i--){a=t[i].interval;if(a[0]<=e&&e<=a[1]){o=i;break}}return i>=0&&i=t[0]&&e<=t[1]}}function c(e){var t=e.dimensions;return"lng"===t[0]&&"lat"===t[1]}var h=r.extendChartView({type:"heatmap",render:function(e,t,n){var i;t.eachComponent("visualMap",(function(t){t.eachTargetSeries((function(n){n===e&&(i=t)}))})),this.group.removeAll(),this._incrementalDisplayable=null;var r=e.coordinateSystem;"cartesian2d"===r.type||"calendar"===r.type?this._renderOnCartesianAndCalendar(e,n,0,e.getData().count()):c(r)&&this._renderOnGeo(r,e,i,n)},incrementalPrepareRender:function(e,t,n){this.group.removeAll()},incrementalRender:function(e,t,n,i){var r=t.coordinateSystem;r&&this._renderOnCartesianAndCalendar(t,i,e.start,e.end,!0)},_renderOnCartesianAndCalendar:function(e,t,n,i,r){var a,l,u=e.coordinateSystem;if("cartesian2d"===u.type){var c=u.getAxis("x"),h=u.getAxis("y");a=c.getBandWidth(),l=h.getBandWidth()}for(var d=this.group,f=e.getData(),p="itemStyle",g="emphasis.itemStyle",m="label",v="emphasis.label",y=e.getModel(p).getItemStyle(["color"]),b=e.getModel(g).getItemStyle(),w=e.getModel(m),x=e.getModel(v),_=u.type,M="cartesian2d"===_?[f.mapDimension("x"),f.mapDimension("y"),f.mapDimension("value")]:[f.mapDimension("time"),f.mapDimension("value")],I=n;I0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";var t=this.head,n=""+t.data;while(t=t.next)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return r.alloc(0);if(1===this.length)return this.head.data;var t=r.allocUnsafe(e>>>0),n=this.head,i=0;while(n)a(n.data,t,i),i+=n.data.length,n=n.next;return t},e}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+" "+e})},"3dbc":function(e,t){e.exports={}},"3e1f":function(e,t,n){var i=n("357b"),r=n("13c6"),o=n("9d89"),a=n("7a16");function s(e){for(var t in e=e||{},o.call(this,e),e)e.hasOwnProperty(t)&&"style"!==t&&(this[t]=e[t]);this.style=new r(e.style,this),this._rect=null,this.__clipPaths=null}s.prototype={constructor:s,type:"displayable",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:"pointer",rectHover:!1,progressive:!1,incremental:!1,globalScaleRatio:1,beforeBrush:function(e){},afterBrush:function(e){},brush:function(e,t){},getBoundingRect:function(){},contain:function(e,t){return this.rectContain(e,t)},traverse:function(e,t){e.call(t,this)},rectContain:function(e,t){var n=this.transformCoordToLocal(e,t),i=this.getBoundingRect();return i.contain(n[0],n[1])},dirty:function(){this.__dirty=this.__dirtyText=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(e){return this.animate("style",e)},attrKV:function(e,t){"style"!==e?o.prototype.attrKV.call(this,e,t):this.style.set(t)},setStyle:function(e,t){return this.style.set(e,t),this.dirty(!1),this},useStyle:function(e){return this.style=new r(e,this),this.dirty(!1),this},calculateTextPosition:null},i.inherits(s,o),i.mixin(s,a);var l=s;e.exports=l},"3e97":function(e,t,n){var i=n("357b");function r(e){var t=e.polar;if(t){i.isArray(t)||(t=[t]);var n=[];i.each(t,(function(t,r){t.indicator?(t.type&&!t.shape&&(t.shape=t.type),e.radar=e.radar||[],i.isArray(e.radar)||(e.radar=[e.radar]),e.radar.push(t)):n.push(t)})),e.polar=n}i.each(e.series,(function(e){e&&"radar"===e.type&&e.polarIndex&&(e.radarIndex=e.polarIndex)}))}e.exports=r},"3ede":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=n("5793"),a=n("b8ab"),s=n("630a"),l=n("cb77"),u=n("ac45"),c=u.prepareLayoutBarSeries,h=u.makeColumnLayout,d=u.retrieveColumnLayout,f=n("53de");function p(e,t){var n,i,o,a=e.type,s=t.getMin(),u=t.getMax(),d=e.getExtent();"ordinal"===a?n=t.getCategories().length:(i=t.get("boundaryGap"),r.isArray(i)||(i=[i||0,i||0]),"boolean"===typeof i[0]&&(i=[0,0]),i[0]=l.parsePercent(i[0],1),i[1]=l.parsePercent(i[1],1),o=d[1]-d[0]||Math.abs(d[0])),"dataMin"===s?s=d[0]:"function"===typeof s&&(s=s({min:d[0],max:d[1]})),"dataMax"===u?u=d[1]:"function"===typeof u&&(u=u({min:d[0],max:d[1]}));var f=null!=s,p=null!=u;null==s&&(s="ordinal"===a?n?0:NaN:d[0]-i[0]*o),null==u&&(u="ordinal"===a?n?n-1:NaN:d[1]+i[1]*o),(null==s||!isFinite(s))&&(s=NaN),(null==u||!isFinite(u))&&(u=NaN),e.setBlank(r.eqNaN(s)||r.eqNaN(u)||"ordinal"===a&&!e.getOrdinalMeta().categories.length),t.getNeedCrossZero()&&(s>0&&u>0&&!f&&(s=0),s<0&&u<0&&!p&&(u=0));var m=t.ecModel;if(m&&"time"===a){var v,y=c("bar",m);if(r.each(y,(function(e){v|=e.getBaseAxis()===t.axis})),v){var b=h(y),w=g(s,u,t,b);s=w.min,u=w.max}}return{extent:[s,u],fixMin:f,fixMax:p}}function g(e,t,n,i){var o=n.axis.getExtent(),a=o[1]-o[0],s=d(i,n.axis);if(void 0===s)return{min:e,max:t};var l=1/0;r.each(s,(function(e){l=Math.min(e.offset,l)}));var u=-1/0;r.each(s,(function(e){u=Math.max(e.offset+e.width,u)})),l=Math.abs(l),u=Math.abs(u);var c=l+u,h=t-e,f=1-(l+u)/a,p=h/f-h;return t+=p*(u/c),e-=p*(l/c),{min:e,max:t}}function m(e,t){var n=p(e,t),i=n.extent,r=t.get("splitNumber");"log"===e.type&&(e.base=t.get("logBase"));var o=e.type;e.setExtent(i[0],i[1]),e.niceExtent({splitNumber:r,fixMin:n.fixMin,fixMax:n.fixMax,minInterval:"interval"===o||"time"===o?t.get("minInterval"):null,maxInterval:"interval"===o||"time"===o?t.get("maxInterval"):null});var a=t.get("interval");null!=a&&e.setInterval&&e.setInterval(a)}function v(e,t){if(t=t||e.get("type"),t)switch(t){case"category":return new o(e.getOrdinalMeta?e.getOrdinalMeta():e.getCategories(),[1/0,-1/0]);case"value":return new a;default:return(s.getClass(t)||a).create(e)}}function y(e){var t=e.scale.getExtent(),n=t[0],i=t[1];return!(n>0&&i>0||n<0&&i<0)}function b(e){var t=e.getLabelModel().get("formatter"),n="category"===e.type?e.scale.getExtent()[0]:null;return"string"===typeof t?(t=function(t){return function(n){return n=e.scale.getLabel(n),t.replace("{value}",null!=n?n:"")}}(t),t):"function"===typeof t?function(i,r){return null!=n&&(r=i-n),t(w(e,i),r)}:function(t){return e.scale.getLabel(t)}}function w(e,t){return"category"===e.type?e.scale.getLabel(t):t}function x(e){var t=e.model,n=e.scale;if(t.get("axisLabel.show")&&!n.isBlank()){var i,r,o="category"===e.type,a=n.getExtent();o?r=n.count():(i=n.getTicks(),r=i.length);var s,l=e.getLabelModel(),u=b(e),c=1;r>40&&(c=Math.ceil(r/40));for(var h=0;h1?"."+e[1]:""))}function s(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,(function(e,t){return t.toUpperCase()})),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}var l=i.normalizeCssArray,u=/([&<>"'])/g,c={"&":"&","<":"<",">":">",'"':""","'":"'"};function h(e){return null==e?"":(e+"").replace(u,(function(e,t){return c[t]}))}var d=["a","b","c","d","e","f","g"],f=function(e,t){return"{"+e+(null==t?"":t)+"}"};function p(e,t,n){i.isArray(t)||(t=[t]);var r=t.length;if(!r)return"";for(var o=t[0].$vars||[],a=0;a':'':{renderMode:o,content:"{marker"+a+"|} ",style:{color:n}}:""}function v(e,t){return e+="","0000".substr(0,t-e.length)+e}function y(e,t,n){"week"!==e&&"month"!==e&&"quarter"!==e&&"half-year"!==e&&"year"!==e||(e="MM-dd\nyyyy");var i=o.parseDate(t),r=n?"UTC":"",a=i["get"+r+"FullYear"](),s=i["get"+r+"Month"]()+1,l=i["get"+r+"Date"](),u=i["get"+r+"Hours"](),c=i["get"+r+"Minutes"](),h=i["get"+r+"Seconds"](),d=i["get"+r+"Milliseconds"]();return e=e.replace("MM",v(s,2)).replace("M",s).replace("yyyy",a).replace("yy",a%100).replace("dd",v(l,2)).replace("d",l).replace("hh",v(u,2)).replace("h",u).replace("mm",v(c,2)).replace("m",c).replace("ss",v(h,2)).replace("s",h).replace("SSS",v(d,3)),e}function b(e){return e?e.charAt(0).toUpperCase()+e.substr(1):e}var w=r.truncateText;function x(e){return r.getBoundingRect(e.text,e.font,e.textAlign,e.textVerticalAlign,e.textPadding,e.textLineHeight,e.rich,e.truncate)}function _(e,t,n,i,o,a,s,l){return r.getBoundingRect(e,t,n,i,o,l,a,s)}function M(e,t){if("_blank"===t||"blank"===t){var n=window.open();n.opener=null,n.location=e}else window.open(e,t)}t.addCommas=a,t.toCamelCase=s,t.normalizeCssArray=l,t.encodeHTML=h,t.formatTpl=p,t.formatTplSimple=g,t.getTooltipMarker=m,t.formatTime=y,t.capitalFirst=b,t.truncateText=w,t.getTextBoundingRect=x,t.getTextRect=_,t.windowOpen=M},"409d":function(e,t,n){(function(t){var i,r=n("7558"),o=n("ad0d")._;function a(e,n){null!=e&&("number"==typeof e?this.fromNumber(e,n):t.isBuffer(e)?this.fromBuffer(e):null==n&&"string"!=typeof e?this.fromByteArray(e):this.fromString(e,n))}function s(){return new a(null)}function l(e,t,n,i,r,o){var a=16383&t,s=t>>14;while(--o>=0){var l=16383&this[e],u=this[e++]>>14,c=s*l+u*a;l=a*l+((16383&c)<<14)+n[i]+r,r=(l>>28)+(c>>14)+s*u,n[i++]=268435455&l}return r}a.prototype.am=l,i=28,a.prototype.DB=i,a.prototype.DM=(1<=0;--t)e[t]=this[t];e.t=this.t,e.s=this.s}function v(e){this.t=1,this.s=e<0?-1:0,e>0?this[0]=e:e<-1?this[0]=e+DV:this.t=0}function y(e){var t=s();return t.fromInt(e),t}function b(e,t,n){var i;switch(t){case 2:i=1;break;case 4:i=2;break;case 8:i=3;break;case 16:i=4;break;case 32:i=5;break;case 256:i=8;break;default:return void this.fromRadix(e,t)}this.t=0,this.s=0;var r=e.length,o=!1,s=0;while(--r>=0){var l=8==i?255&e[r]:g(e,r);l<0?"-"==e.charAt(r)&&(o=!0):(o=!1,0===s?this[this.t++]=l:s+i>this.DB?(this[this.t-1]|=(l&(1<>this.DB-s):this[this.t-1]|=l<=this.DB&&(s-=this.DB))}n||8!=i||0==(128&e[0])||(this.s=-1,s>0&&(this[this.t-1]|=(1<0&&this[this.t-1]==e)--this.t}function M(e){if(this.s<0)return"-"+this.negate().toString(e);var t;if(16==e)t=4;else if(8==e)t=3;else if(2==e)t=1;else if(32==e)t=5;else{if(4!=e)return this.toRadix(e);t=2}var n,i=(1<0){s>s)>0&&(r=!0,o=p(n));while(a>=0)s>(s+=this.DB-t)):(n=this[a]>>(s-=t)&i,s<=0&&(s+=this.DB,--a)),n>0&&(r=!0),r&&(o+=p(n))}return r?o:"0"}function I(){var e=s();return a.ZERO.subTo(this,e),e}function C(){return this.s<0?this.negate():this}function S(e){var t=this.s-e.s;if(0!=t)return t;var n=this.t;if(t=n-e.t,0!=t)return this.s<0?-t:t;while(--n>=0)if(0!=(t=this[n]-e[n]))return t;return 0}function D(e){var t,n=1;return 0!=(t=e>>>16)&&(e=t,n+=16),0!=(t=e>>8)&&(e=t,n+=8),0!=(t=e>>4)&&(e=t,n+=4),0!=(t=e>>2)&&(e=t,n+=2),0!=(t=e>>1)&&(e=t,n+=1),n}function T(){return this.t<=0?0:this.DB*(this.t-1)+D(this[this.t-1]^this.s&this.DM)}function A(e,t){var n;for(n=this.t-1;n>=0;--n)t[n+e]=this[n];for(n=e-1;n>=0;--n)t[n]=0;t.t=this.t+e,t.s=this.s}function k(e,t){for(var n=e;n=0;--n)t[n+a+1]=this[n]>>r|s,s=(this[n]&o)<=0;--n)t[n]=0;t[a]=s,t.t=this.t+a+1,t.s=this.s,t.clamp()}function N(e,t){t.s=this.s;var n=Math.floor(e/this.DB);if(n>=this.t)t.t=0;else{var i=e%this.DB,r=this.DB-i,o=(1<>i;for(var a=n+1;a>i;i>0&&(t[this.t-n-1]|=(this.s&o)<>=this.DB;if(e.t>=this.DB;i+=this.s}else{i+=this.s;while(n>=this.DB;i-=e.s}t.s=i<0?-1:0,i<-1?t[n++]=this.DV+i:i>0&&(t[n++]=i),t.t=n,t.clamp()}function P(e,t){var n=this.abs(),i=e.abs(),r=n.t;t.t=r+i.t;while(--r>=0)t[r]=0;for(r=0;r=0)e[n]=0;for(n=0;n=t.DV&&(e[n+t.t]-=t.DV,e[n+t.t+1]=1)}e.t>0&&(e[e.t-1]+=t.am(n,t[n],e,2*n,0,1)),e.s=0,e.clamp()}function B(e,t,n){var i=e.abs();if(!(i.t<=0)){var r=this.abs();if(r.t0?(i.lShiftTo(c,o),r.lShiftTo(c,n)):(i.copyTo(o),r.copyTo(n));var h=o.t,d=o[h-1];if(0!==d){var f=d*(1<1?o[h-2]>>this.F2:0),p=this.FV/f,g=(1<=0&&(n[n.t++]=1,n.subTo(b,n)),a.ONE.dlShiftTo(h,b),b.subTo(o,o);while(o.t=0){var w=n[--v]==d?this.DM:Math.floor(n[v]*p+(n[v-1]+m)*g);if((n[v]+=o.am(0,w,n,y,0,h))0&&n.rShiftTo(c,n),l<0&&a.ZERO.subTo(n,n)}}}function j(e){var t=s();return this.abs().divRemTo(e,null,t),this.s<0&&t.compareTo(a.ZERO)>0&&e.subTo(t,t),t}function z(e){this.m=e}function R(e){return e.s<0||e.compareTo(this.m)>=0?e.mod(this.m):e}function F(e){return e}function V(e){e.divRemTo(this.m,null,e)}function H(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function $(e,t){e.squareTo(t),this.reduce(t)}function U(){if(this.t<1)return 0;var e=this[0];if(0===(1&e))return 0;var t=3&e;return t=t*(2-(15&e)*t)&15,t=t*(2-(255&e)*t)&255,t=t*(2-((65535&e)*t&65535))&65535,t=t*(2-e*t%this.DV)%this.DV,t>0?this.DV-t:-t}function W(e){this.m=e,this.mp=e.invDigit(),this.mpl=32767&this.mp,this.mph=this.mp>>15,this.um=(1<0&&this.m.subTo(t,t),t}function Z(e){var t=s();return e.copyTo(t),this.reduce(t),t}function Y(e){while(e.t<=this.mt2)e[e.t++]=0;for(var t=0;t>15)*this.mpl&this.um)<<15)&e.DM;n=t+this.m.t,e[n]+=this.m.am(0,i,e,t,0,this.m.t);while(e[n]>=e.DV)e[n]-=e.DV,e[++n]++}e.clamp(),e.drShiftTo(this.m.t,e),e.compareTo(this.m)>=0&&e.subTo(this.m,e)}function Q(e,t){e.squareTo(t),this.reduce(t)}function q(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function K(){return 0===(this.t>0?1&this[0]:this.s)}function X(e,t){if(e>4294967295||e<1)return a.ONE;var n=s(),i=s(),r=t.convert(this),o=D(e)-1;r.copyTo(n);while(--o>=0)if(t.sqrTo(n,i),(e&1<0)t.mulTo(i,r,n);else{var l=n;n=i,i=l}return t.revert(n)}function J(e,t){var n;return n=e<256||t.isEven()?new z(t):new W(t),this.exp(e,n)}function ee(){var e=s();return this.copyTo(e),e}function te(){if(this.s<0){if(1==this.t)return this[0]-this.DV;if(0===this.t)return-1}else{if(1==this.t)return this[0];if(0===this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24}function ie(){return 0==this.t?this.s:this[0]<<16>>16}function re(e){return Math.floor(Math.LN2*this.DB/Math.log(e))}function oe(){return this.s<0?-1:this.t<=0||1==this.t&&this[0]<=0?0:1}function ae(e){if(null==e&&(e=10),0===this.signum()||e<2||e>36)return"0";var t=this.chunkSize(e),n=Math.pow(e,t),i=y(n),r=s(),o=s(),a="";this.divRemTo(i,r,o);while(r.signum()>0)a=(n+o.intValue()).toString(e).substr(1)+a,r.divRemTo(i,r,o);return o.intValue().toString(e)+a}function se(e,t){this.fromInt(0),null==t&&(t=10);for(var n=this.chunkSize(t),i=Math.pow(t,n),r=!1,o=0,s=0,l=0;l=n&&(this.dMultiply(i),this.dAddOffset(s,0),o=0,s=0))}o>0&&(this.dMultiply(Math.pow(t,o)),this.dAddOffset(s,0)),r&&a.ZERO.subTo(this,this)}function le(e,t){if("number"==typeof t)if(e<2)this.fromInt(1);else{this.fromNumber(e),this.testBit(e-1)||this.bitwiseTo(a.ONE.shiftLeft(e-1),ve,this),this.isEven()&&this.dAddOffset(1,0);while(!this.isProbablePrime(t))this.dAddOffset(2,0),this.bitLength()>e&&this.subTo(a.ONE.shiftLeft(e-1),this)}else{var n=r.randomBytes(1+(e>>3)),i=7&e;i>0?n[0]&=(1<0){i>i)!=(this.s&this.DM)>>i&&(t[r++]=n|this.s<=0)i<8?(n=(this[e]&(1<>(i+=this.DB-8)):(n=this[e]>>(i-=8)&255,i<=0&&(i+=this.DB,--e)),0!=(128&n)&&(n|=-256),0===r&&(128&this.s)!=(128&n)&&++r,(r>0||n!=this.s)&&(t[r++]=n)}return t}function ce(e){var n=t.from(this.toByteArray());if(!0===e&&0===n[0])n=n.slice(1);else if(o.isNumber(e)){if(n.length>e){for(var i=0;i0?this:e}function pe(e,t,n){var i,r,o=Math.min(e.t,this.t);for(i=0;i>=16,t+=16),0===(255&e)&&(e>>=8,t+=8),0===(15&e)&&(e>>=4,t+=4),0===(3&e)&&(e>>=2,t+=2),0===(1&e)&&++t,t}function De(){for(var e=0;e=this.t?0!=this.s:0!=(this[t]&1<>=this.DB;if(e.t>=this.DB;i+=this.s}else{i+=this.s;while(n>=this.DB;i+=e.s}t.s=i<0?-1:0,i>0?t[n++]=i:i<-1&&(t[n++]=this.DV+i),t.t=n,t.clamp()}function Be(e){var t=s();return this.addTo(e,t),t}function je(e){var t=s();return this.subTo(e,t),t}function ze(e){var t=s();return this.multiplyTo(e,t),t}function Re(){var e=s();return this.squareTo(e),e}function Fe(e){var t=s();return this.divRemTo(e,t,null),t}function Ve(e){var t=s();return this.divRemTo(e,null,t),t}function He(e){var t=s(),n=s();return this.divRemTo(e,t,n),new Array(t,n)}function $e(e){this[this.t]=this.am(0,e-1,this,0,0,this.t),++this.t,this.clamp()}function Ue(e,t){if(0!==e){while(this.t<=t)this[this.t++]=0;this[t]+=e;while(this[t]>=this.DV)this[t]-=this.DV,++t>=this.t&&(this[this.t++]=0),++this[t]}}function We(){}function Ge(e){return e}function Ze(e,t,n){e.multiplyTo(t,n)}function Ye(e,t){e.squareTo(t)}function Qe(e){return this.exp(e,new We)}function qe(e,t,n){var i,r=Math.min(this.t+e.t,t);n.s=0,n.t=r;while(r>0)n[--r]=0;for(i=n.t-this.t;r=0)n[i]=0;for(i=Math.max(t-this.t,0);i2*this.m.t)return e.mod(this.m);if(e.compareTo(this.m)<0)return e;var t=s();return e.copyTo(t),this.reduce(t),t}function et(e){return e}function tt(e){e.drShiftTo(this.m.t-1,this.r2),e.t>this.m.t+1&&(e.t=this.m.t+1,e.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);while(e.compareTo(this.r2)<0)e.dAddOffset(1,this.m.t+1);e.subTo(this.r2,e);while(e.compareTo(this.m)>=0)e.subTo(this.m,e)}function nt(e,t){e.squareTo(t),this.reduce(t)}function it(e,t,n){e.multiplyTo(t,n),this.reduce(n)}function rt(e,t){var n,i,r=e.bitLength(),o=y(1);if(r<=0)return o;n=r<18?1:r<48?3:r<144?4:r<768?5:6,i=r<8?new z(t):t.isEven()?new Xe(t):new W(t);var a=new Array,l=3,u=n-1,c=(1<1){var h=s();i.sqrTo(a[1],h);while(l<=c)a[l]=s(),i.mulTo(h,a[l-2],a[l]),l+=2}var d,f,p=e.t-1,g=!0,m=s();r=D(e[p])-1;while(p>=0){r>=u?d=e[p]>>r-u&c:(d=(e[p]&(1<0&&(d|=e[p-1]>>this.DB+r-u)),l=n;while(0===(1&d))d>>=1,--l;if((r-=l)<0&&(r+=this.DB,--p),g)a[d].copyTo(o),g=!1;else{while(l>1)i.sqrTo(o,m),i.sqrTo(m,o),l-=2;l>0?i.sqrTo(o,m):(f=o,o=m,m=f),i.mulTo(m,a[d],o)}while(p>=0&&0===(e[p]&1<0&&(t.rShiftTo(o,t),n.rShiftTo(o,n));while(t.signum()>0)(r=t.getLowestSetBit())>0&&t.rShiftTo(r,t),(r=n.getLowestSetBit())>0&&n.rShiftTo(r,n),t.compareTo(n)>=0?(t.subTo(n,t),t.rShiftTo(1,t)):(n.subTo(t,n),n.rShiftTo(1,n));return o>0&&n.lShiftTo(o,n),n}function at(e){if(e<=0)return 0;var t=this.DV%e,n=this.s<0?e-1:0;if(this.t>0)if(0===t)n=this[0]%e;else for(var i=this.t-1;i>=0;--i)n=(t*n+this[i])%e;return n}function st(e){var t=e.isEven();if(this.isEven()&&t||0===e.signum())return a.ZERO;var n=e.clone(),i=this.clone(),r=y(1),o=y(0),s=y(0),l=y(1);while(0!=n.signum()){while(n.isEven())n.rShiftTo(1,n),t?(r.isEven()&&o.isEven()||(r.addTo(this,r),o.subTo(e,o)),r.rShiftTo(1,r)):o.isEven()||o.subTo(e,o),o.rShiftTo(1,o);while(i.isEven())i.rShiftTo(1,i),t?(s.isEven()&&l.isEven()||(s.addTo(this,s),l.subTo(e,l)),s.rShiftTo(1,s)):l.isEven()||l.subTo(e,l),l.rShiftTo(1,l);n.compareTo(i)>=0?(n.subTo(i,n),t&&r.subTo(s,r),o.subTo(l,o)):(i.subTo(n,i),t&&s.subTo(r,s),l.subTo(o,l))}return 0!=i.compareTo(a.ONE)?a.ZERO:l.compareTo(e)>=0?l.subtract(e):l.signum()<0?(l.addTo(e,l),l.signum()<0?l.add(e):l):l}z.prototype.convert=R,z.prototype.revert=F,z.prototype.reduce=V,z.prototype.mulTo=H,z.prototype.sqrTo=$,W.prototype.convert=G,W.prototype.revert=Z,W.prototype.reduce=Y,W.prototype.mulTo=q,W.prototype.sqrTo=Q,We.prototype.convert=Ge,We.prototype.revert=Ge,We.prototype.mulTo=Ze,We.prototype.sqrTo=Ye,Xe.prototype.convert=Je,Xe.prototype.revert=et,Xe.prototype.reduce=tt,Xe.prototype.mulTo=it,Xe.prototype.sqrTo=nt;var lt=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],ut=(1<<26)/lt[lt.length-1];function ct(e){var t,n=this.abs();if(1==n.t&&n[0]<=lt[lt.length-1]){for(t=0;t>1,e>lt.length&&(e=lt.length);for(var r=s(),o=0;o=0&&e.call(t,n[r],r)},u.eachEdge=function(e,t){for(var n=this.edges,i=n.length,r=0;r=0&&n[r].node1.dataIndex>=0&&n[r].node2.dataIndex>=0&&e.call(t,n[r],r)},u.breadthFirstTraverse=function(e,t,n,i){if(c.isInstance(t)||(t=this._nodesMap[s(t)]),t){for(var r="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0}));for(r=0,o=i.length;r=0&&this[e][t].setItemVisual(this.dataIndex,n,i)},getVisual:function(n,i){return this[e][t].getItemVisual(this.dataIndex,n,i)},setLayout:function(n,i){this.dataIndex>=0&&this[e][t].setItemLayout(this.dataIndex,n,i)},getLayout:function(){return this[e][t].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[e][t].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[e][t].getRawIndex(this.dataIndex)}}};r.mixin(c,d("hostGraph","data")),r.mixin(h,d("hostGraph","edgeData")),l.Node=c,l.Edge=h,a(c),a(h);var f=l;e.exports=f},"413f":function(e,t,n){"use strict";function i(e,t,n){this.$children.forEach((function(r){var o=r.$options.componentName;o===e?r.$emit.apply(r,[t].concat(n)):i.apply(r,[e,t].concat([n]))}))}t.__esModule=!0,t.default={methods:{dispatch:function(e,t,n){var i=this.$parent||this.$root,r=i.$options.componentName;while(i&&(!r||r!==e))i=i.$parent,i&&(r=i.$options.componentName);i&&i.$emit.apply(i,[t].concat(n))},broadcast:function(e,t,n){i.call(this,e,t,n)}}}},4206:function(e,t,n){n("25f2"),n("7c7b")},"422b":function(e,t,n){var i=n("357b");function r(e){null!=e&&i.extend(this,e),this.otherDims={}}var o=r;e.exports=o},"42c4":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=i.extendComponentView({type:"marker",init:function(){this.markerGroupMap=r.createHashMap()},render:function(e,t,n){var i=this.markerGroupMap;i.each((function(e){e.__keep=!1}));var r=this.type+"Model";t.eachSeries((function(e){var i=e[r];i&&this.renderSeries(e,i,t,n)}),this),i.each((function(e){!e.__keep&&this.group.remove(e.group)}),this)},renderSeries:function(){}});e.exports=o},4301:function(e,t,n){var i=n("357b"),r=n("8e0a"),o=r.Dispatcher,a=n("baab"),s=n("d7bd"),l=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,o.call(this)};l.prototype={constructor:l,addClip:function(e){this._clips.push(e)},addAnimator:function(e){e.animation=this;for(var t=e.getClips(),n=0;n=0&&this._clips.splice(t,1)},removeAnimator:function(e){for(var t=e.getClips(),n=0;ny.getLayout().x&&(y=e),e.depth>b.depth&&(b=e)}));var w=v===y?1:p(v,y)/2,x=w-v.getLayout().x,_=0,M=0,I=0,C=0;if("radial"===i)_=a/(y.getLayout().x+w+x),M=f/(b.depth-1||1),o(m,(function(e){I=(e.getLayout().x+x)*_,C=(e.depth-1)*M;var t=h(I,C);e.setLayout({x:t.x,y:t.y,rawX:I,rawY:C},!0)}));else{var S=e.getOrient();"RL"===S||"LR"===S?(M=f/(y.getLayout().x+w+x),_=a/(b.depth-1||1),o(m,(function(e){C=(e.getLayout().x+x)*M,I="LR"===S?(e.depth-1)*_:a-(e.depth-1)*_,e.setLayout({x:I,y:C},!0)}))):"TB"!==S&&"BT"!==S||(_=a/(y.getLayout().x+w+x),M=f/(b.depth-1||1),o(m,(function(e){I=(e.getLayout().x+x)*_,C="TB"===S?(e.depth-1)*M:f-(e.depth-1)*M,e.setLayout({x:I,y:C},!0)})))}}}e.exports=f},4399:function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=n("ac61"),a=n("cb77"),s=a.parsePercent,l=n("3ede"),u=l.createScaleByModel,c=l.niceScaleExtent,h=n("9354"),d=n("53f2"),f=d.getStackedDimension;function p(e,t,n){var i=t.get("center"),o=n.getWidth(),a=n.getHeight();e.cx=s(i[0],o),e.cy=s(i[1],a);var l=e.getRadiusAxis(),u=Math.min(o,a)/2,c=t.get("radius");null==c?c=[0,"100%"]:r.isArray(c)||(c=[0,c]),c=[s(c[0],u),s(c[1],u)],l.inverse?l.setExtent(c[1],c[0]):l.setExtent(c[0],c[1])}function g(e,t){var n=this,i=n.getAngleAxis(),o=n.getRadiusAxis();if(i.scale.setExtent(1/0,-1/0),o.scale.setExtent(1/0,-1/0),e.eachSeries((function(e){if(e.coordinateSystem===n){var t=e.getData();r.each(t.mapDimension("radius",!0),(function(e){o.scale.unionExtentFromData(t,f(t,e))})),r.each(t.mapDimension("angle",!0),(function(e){i.scale.unionExtentFromData(t,f(t,e))}))}})),c(i.scale,i.model),c(o.scale,o.model),"category"===i.type&&!i.onBand){var a=i.getExtent(),s=360/i.scale.count();i.inverse?a[1]+=s:a[1]-=s,i.setExtent(a[0],a[1])}}function m(e,t){if(e.type=t.get("type"),e.scale=u(t),e.onBand=t.get("boundaryGap")&&"category"===e.type,e.inverse=t.get("inverse"),"angleAxis"===t.mainType){e.inverse^=t.get("clockwise");var n=t.get("startAngle");e.setExtent(n,n+(e.inverse?-360:360))}t.axis=e,e.model=t}n("09cb");var v={dimensions:o.prototype.dimensions,create:function(e,t){var n=[];return e.eachComponent("polar",(function(e,i){var r=new o(i);r.update=g;var a=r.getRadiusAxis(),s=r.getAngleAxis(),l=e.findAxisModel("radiusAxis"),u=e.findAxisModel("angleAxis");m(a,l),m(s,u),p(r,e,t),n.push(r),e.coordinateSystem=r,r.model=e})),e.eachSeries((function(t){if("polar"===t.get("coordinateSystem")){var n=e.queryComponents({mainType:"polar",index:t.get("polarIndex"),id:t.get("polarId")})[0];t.coordinateSystem=n.coordinateSystem}})),n}};h.register("polar",v)},"43a9":function(e,t,n){var i=n("1db0"),r=n("d3e5"),o=n("357b"),a=n("d450"),s=n("5c27"),l=n("9691"),u=n("4301"),c=n("c504"),h=!r.canvasSupported,d={canvas:l},f={},p="4.3.2";function g(e,t){var n=new w(i(),e,t);return f[n.id]=n,n}function m(e){if(e)e.dispose();else{for(var t in f)f.hasOwnProperty(t)&&f[t].dispose();f={}}return this}function v(e){return f[e]}function y(e,t){d[e]=t}function b(e){delete f[e]}var w=function(e,t,n){n=n||{},this.dom=t,this.id=e;var i=this,l=new s,f=n.renderer;if(h){if(!d.vml)throw new Error("You need to require 'zrender/vml/vml' to support IE8");f="vml"}else f&&d[f]||(f="canvas");var p=new d[f](t,l,n,e);this.storage=l,this.painter=p;var g=r.node||r.worker?null:new c(p.getViewportRoot(),p.root);this.handler=new a(l,p,g,p.root),this.animation=new u({stage:{update:o.bind(this.flush,this)}}),this.animation.start(),this._needsRefresh;var m=l.delFromStorage,v=l.addToStorage;l.delFromStorage=function(e){m.call(l,e),e&&e.removeSelfFromZr(i)},l.addToStorage=function(e){v.call(l,e),e.addSelfToZr(i)}};w.prototype={constructor:w,getId:function(){return this.id},add:function(e){this.storage.addRoot(e),this._needsRefresh=!0},remove:function(e){this.storage.delRoot(e),this._needsRefresh=!0},configLayer:function(e,t){this.painter.configLayer&&this.painter.configLayer(e,t),this._needsRefresh=!0},setBackgroundColor:function(e){this.painter.setBackgroundColor&&this.painter.setBackgroundColor(e),this._needsRefresh=!0},refreshImmediately:function(){this._needsRefresh=this._needsRefreshHover=!1,this.painter.refresh(),this._needsRefresh=this._needsRefreshHover=!1},refresh:function(){this._needsRefresh=!0},flush:function(){var e;this._needsRefresh&&(e=!0,this.refreshImmediately()),this._needsRefreshHover&&(e=!0,this.refreshHoverImmediately()),e&&this.trigger("rendered")},addHover:function(e,t){if(this.painter.addHover){var n=this.painter.addHover(e,t);return this.refreshHover(),n}},removeHover:function(e){this.painter.removeHover&&(this.painter.removeHover(e),this.refreshHover())},clearHover:function(){this.painter.clearHover&&(this.painter.clearHover(),this.refreshHover())},refreshHover:function(){this._needsRefreshHover=!0},refreshHoverImmediately:function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.refreshHover()},resize:function(e){e=e||{},this.painter.resize(e.width,e.height),this.handler.resize()},clearAnimation:function(){this.animation.clear()},getWidth:function(){return this.painter.getWidth()},getHeight:function(){return this.painter.getHeight()},pathToImage:function(e,t){return this.painter.pathToImage(e,t)},setCursorStyle:function(e){this.handler.setCursorStyle(e)},findHover:function(e,t){return this.handler.findHover(e,t)},on:function(e,t,n){this.handler.on(e,t,n)},off:function(e,t){this.handler.off(e,t)},trigger:function(e,t){this.handler.trigger(e,t)},clear:function(){this.storage.delRoot(),this.painter.clear()},dispose:function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,b(this.id)}},t.version=p,t.init=g,t.dispose=m,t.getInstance=v,t.registerPainter=y},"43ea":function(e,t,n){var i=n("364b"),r=i.extend({type:"circle",shape:{cx:0,cy:0,r:0},buildPath:function(e,t,n){n&&e.moveTo(t.cx+t.r,t.cy),e.arc(t.cx,t.cy,t.r,0,2*Math.PI,!0)}});e.exports=r},"43ed":function(e,t,n){var i=n("357b"),r=n("cb77"),o=n("53f2"),a=o.isDimensionStacked,s=i.indexOf;function l(e){return!(isNaN(parseFloat(e.x))&&isNaN(parseFloat(e.y)))}function u(e){return!isNaN(parseFloat(e.x))&&!isNaN(parseFloat(e.y))}function c(e,t,n,i,o,s){var l=[],u=a(t,i),c=u?t.getCalculationInfo("stackResultDimension"):i,h=y(t,c,e),d=t.indicesOfNearest(c,h)[0];l[o]=t.get(n,d),l[s]=t.get(c,d);var f=t.get(i,d),p=r.getPrecision(t.get(i,d));return p=Math.min(p,20),p>=0&&(l[s]=+l[s].toFixed(p)),[l,f]}var h=i.curry,d={min:h(c,"min"),max:h(c,"max"),average:h(c,"average")};function f(e,t){var n=e.getData(),r=e.coordinateSystem;if(t&&!u(t)&&!i.isArray(t.coord)&&r){var o=r.dimensions,a=p(t,n,r,e);if(t=i.clone(t),t.type&&d[t.type]&&a.baseAxis&&a.valueAxis){var l=s(o,a.baseAxis.dim),c=s(o,a.valueAxis.dim),h=d[t.type](n,a.baseDataDim,a.valueDataDim,l,c);t.coord=h[0],t.value=h[1]}else{for(var f=[null!=t.xAxis?t.xAxis:t.radiusAxis,null!=t.yAxis?t.yAxis:t.angleAxis],g=0;g<2;g++)d[f[g]]&&(f[g]=y(n,n.mapDimension(o[g]),f[g]));t.coord=f}}return t}function p(e,t,n,i){var r={};return null!=e.valueIndex||null!=e.valueDim?(r.valueDataDim=null!=e.valueIndex?t.getDimension(e.valueIndex):e.valueDim,r.valueAxis=n.getAxis(g(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=t.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=t.mapDimension(r.baseAxis.dim),r.valueDataDim=t.mapDimension(r.valueAxis.dim)),r}function g(e,t){var n=e.getData(),i=n.dimensions;t=n.getDimension(t);for(var r=0;r";t.style.display="none",n("7907").appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+a+"document.F=Object"+r+"/script"+a),e.close(),u=e.F;while(i--)delete u[l][o[i]];return u()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[l]=i(e),n=new s,s[l]=null,n[a]=e):n=u(),void 0===t?n:r(n,t)}},4474:function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},4477:function(e,t,n){var i=n("357b"),r=n("9fb2"),o=n("d6e9"),a=n("490b"),s=function(e,t){this.name=e||"",this.depth=0,this.height=0,this.parentNode=null,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.hostTree=t};function l(e){this.root,this.data,this._nodes=[],this.hostModel=e}function u(e,t){var n=t.children;e.parentNode!==t&&(n.push(e),e.parentNode=t)}s.prototype={constructor:s,isRemoved:function(){return this.dataIndex<0},eachNode:function(e,t,n){"function"===typeof e&&(n=t,t=e,e=null),e=e||{},i.isString(e)&&(e={order:e});var r,o=e.order||"preorder",a=this[e.attr||"children"];"preorder"===o&&(r=t.call(n,this));for(var s=0;!r&&st&&(t=i.height)}this.height=t+1},getNodeById:function(e){if(this.getId()===e)return this;for(var t=0,n=this.children,i=n.length;t=0&&this.hostTree.data.setItemLayout(this.dataIndex,e,t)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(e){if(!(this.dataIndex<0)){var t=this.hostTree,n=t.data.getItemModel(this.dataIndex);return n.getModel(e)}},setVisual:function(e,t){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,e,t)},getVisual:function(e,t){return this.hostTree.data.getItemVisual(this.dataIndex,e,t)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)},isAncestorOf:function(e){var t=e.parentNode;while(t){if(t===this)return!0;t=t.parentNode}return!1},isDescendantOf:function(e){return e!==this&&e.isAncestorOf(this)}},l.prototype={constructor:l,type:"tree",eachNode:function(e,t,n){this.root.eachNode(e,t,n)},getNodeByDataIndex:function(e){var t=this.data.getRawIndex(e);return this._nodes[t]},getNodeByName:function(e){return this.root.getNodeByName(e)},update:function(){for(var e=this.data,t=this._nodes,n=0,i=t.length;nthis.blockSize&&(e=(new this.Hash).update(e).digest()),r(e.length<=this.blockSize);for(var t=e.length;t=0;a--)null==n[a]&&(delete r[t[a]],t.pop())}function p(e,t){var n=e.visual,r=[];i.isObject(n)?s(n,(function(e){r.push(e)})):null!=n&&r.push(n);var o={color:1,symbol:1};t||1!==r.length||o.hasOwnProperty(e.type)||(r[1]=r[0]),_(e,r)}function g(e){return{applyVisual:function(t,n,i){t=this.mapValueToVisual(t),i("color",e(n("color"),t))},_doMap:w([0,1])}}function m(e){var t=this.option.visual;return t[Math.round(a(e,[0,1],[0,t.length-1],!0))]||{}}function v(e){return function(t,n,i){i(e,this.mapValueToVisual(t))}}function y(e){var t=this.option.visual;return t[this.option.loop&&e!==u?e%t.length:e]}function b(){return this.option.visual[0]}function w(e){return{linear:function(t){return a(t,e,this.option.visual,!0)},category:y,piecewise:function(t,n){var i=x.call(this,n);return null==i&&(i=a(t,e,this.option.visual,!0)),i},fixed:b}}function x(e){var t=this.option,n=t.pieceList;if(t.hasSpecialVisual){var i=c.findPieceIndex(e,n),r=n[i];if(r&&r.visual)return r.visual[this.type]}}function _(e,t){return e.visual=t,"color"===e.type&&(e.parsedVisual=i.map(t,(function(e){return r.parse(e)}))),t}var M={linear:function(e){return a(e,this.option.dataExtent,[0,1],!0)},piecewise:function(e){var t=this.option.pieceList,n=c.findPieceIndex(e,t,!0);if(null!=n)return a(n,[0,t.length-1],[0,1],!0)},category:function(e){var t=this.option.categories?this.option.categoryMap[e]:e;return null==t?u:t},fixed:i.noop};function I(e,t,n){return e?t<=n:tn},ie64:function(){return b.ie()&&d},firefox:function(){return y()||i},opera:function(){return y()||r},webkit:function(){return y()||o},safari:function(){return b.webkit()},chrome:function(){return y()||a},windows:function(){return y()||u},osx:function(){return y()||l},linux:function(){return y()||c},iphone:function(){return y()||f},mobile:function(){return y()||f||p||h||m},nativeApp:function(){return y()||g},android:function(){return y()||h},ipad:function(){return y()||p}};e.exports=b},"463f":function(e,t,n){var i=n("2e5b"),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();e.exports=o},4664:function(e,t,n){"use strict";function i(e){this.message=e}i.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},i.prototype.__CANCEL__=!0,e.exports=i},"46b3":function(e,t,n){for(var i=n("2fcc"),r=n("85ff"),o=function(){},a=["treemapZoomToNode","treemapRender","treemapMove"],s=0;ss?t=e(t):t.lengthu)l.call(e,a=s[u++])&&t.push(a)}return t}},"490b":function(e,t,n){var i=n("c402");function r(e,t){return t=t||{},i(t.coordDimensions||[],e,{dimsDef:t.dimensionsDefine||e.dimensionsDefine,encodeDef:t.encodeDefine||e.encodeDefine,dimCount:t.dimensionsCount,encodeDefaulter:t.encodeDefaulter,generateCoord:t.generateCoord,generateCoordCount:t.generateCoordCount})}e.exports=r},"494e":function(e,t,n){var i=n("364b"),r=n("9bd8"),o=i.extend({type:"sector",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},brush:r(i.prototype.brush),buildPath:function(e,t){var n=t.cx,i=t.cy,r=Math.max(t.r0||0,0),o=Math.max(t.r,0),a=t.startAngle,s=t.endAngle,l=t.clockwise,u=Math.cos(a),c=Math.sin(a);e.moveTo(u*r+n,c*r+i),e.lineTo(u*o+n,c*o+i),e.arc(n,i,o,a,s,!l),e.lineTo(Math.cos(s)*r+n,Math.sin(s)*r+i),0!==r&&e.arc(n,i,r,s,a,l),e.closePath()}});e.exports=o},4959:function(e,t){t.encrypt=function(e,t){return e._cipher.encryptBlock(t)},t.decrypt=function(e,t){return e._cipher.decryptBlock(t)}},"496d":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=77)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},2:function(e,t){e.exports=n("ca1c")},3:function(e,t){e.exports=n("bb1a")},5:function(e,t){e.exports=n("bef7")},7:function(e,t){e.exports=n("8bbf")},77:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",[n("transition",{attrs:{name:e.transition},on:{"after-enter":e.handleAfterEnter,"after-leave":e.handleAfterLeave}},[n("div",{directives:[{name:"show",rawName:"v-show",value:!e.disabled&&e.showPopper,expression:"!disabled && showPopper"}],ref:"popper",staticClass:"el-popover el-popper",class:[e.popperClass,e.content&&"el-popover--plain"],style:{width:e.width+"px"},attrs:{role:"tooltip",id:e.tooltipId,"aria-hidden":e.disabled||!e.showPopper?"true":"false"}},[e.title?n("div",{staticClass:"el-popover__title",domProps:{textContent:e._s(e.title)}}):e._e(),e._t("default",[e._v(e._s(e.content))])],2)]),n("span",{ref:"wrapper",staticClass:"el-popover__reference-wrapper"},[e._t("reference")],2)],1)},r=[];i._withStripped=!0;var o=n(5),a=n.n(o),s=n(2),l=n(3),u={name:"ElPopover",mixins:[a.a],props:{trigger:{type:String,default:"click",validator:function(e){return["click","focus","hover","manual"].indexOf(e)>-1}},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:200},title:String,disabled:Boolean,content:String,reference:{},popperClass:String,width:{},visibleArrow:{default:!0},arrowOffset:{type:Number,default:0},transition:{type:String,default:"fade-in-linear"},tabindex:{type:Number,default:0}},computed:{tooltipId:function(){return"el-popover-"+Object(l["generateId"])()}},watch:{showPopper:function(e){this.disabled||(e?this.$emit("show"):this.$emit("hide"))}},mounted:function(){var e=this,t=this.referenceElm=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),t&&(Object(s["addClass"])(t,"el-popover__reference"),t.setAttribute("aria-describedby",this.tooltipId),t.setAttribute("tabindex",this.tabindex),n.setAttribute("tabindex",0),"click"!==this.trigger&&(Object(s["on"])(t,"focusin",(function(){e.handleFocus();var n=t.__vue__;n&&"function"===typeof n.focus&&n.focus()})),Object(s["on"])(n,"focusin",this.handleFocus),Object(s["on"])(t,"focusout",this.handleBlur),Object(s["on"])(n,"focusout",this.handleBlur)),Object(s["on"])(t,"keydown",this.handleKeydown),Object(s["on"])(t,"click",this.handleClick)),"click"===this.trigger?(Object(s["on"])(t,"click",this.doToggle),Object(s["on"])(document,"click",this.handleDocumentClick)):"hover"===this.trigger?(Object(s["on"])(t,"mouseenter",this.handleMouseEnter),Object(s["on"])(n,"mouseenter",this.handleMouseEnter),Object(s["on"])(t,"mouseleave",this.handleMouseLeave),Object(s["on"])(n,"mouseleave",this.handleMouseLeave)):"focus"===this.trigger&&(this.tabindex<0&&console.warn("[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key"),t.querySelector("input, textarea")?(Object(s["on"])(t,"focusin",this.doShow),Object(s["on"])(t,"focusout",this.doClose)):(Object(s["on"])(t,"mousedown",this.doShow),Object(s["on"])(t,"mouseup",this.doClose)))},beforeDestroy:function(){this.cleanup()},deactivated:function(){this.cleanup()},methods:{doToggle:function(){this.showPopper=!this.showPopper},doShow:function(){this.showPopper=!0},doClose:function(){this.showPopper=!1},handleFocus:function(){Object(s["addClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!0)},handleClick:function(){Object(s["removeClass"])(this.referenceElm,"focusing")},handleBlur:function(){Object(s["removeClass"])(this.referenceElm,"focusing"),"click"!==this.trigger&&"focus"!==this.trigger||(this.showPopper=!1)},handleMouseEnter:function(){var e=this;clearTimeout(this._timer),this.openDelay?this._timer=setTimeout((function(){e.showPopper=!0}),this.openDelay):this.showPopper=!0},handleKeydown:function(e){27===e.keyCode&&"manual"!==this.trigger&&this.doClose()},handleMouseLeave:function(){var e=this;clearTimeout(this._timer),this.closeDelay?this._timer=setTimeout((function(){e.showPopper=!1}),this.closeDelay):this.showPopper=!1},handleDocumentClick:function(e){var t=this.reference||this.$refs.reference,n=this.popper||this.$refs.popper;!t&&this.$refs.wrapper.children&&(t=this.referenceElm=this.$refs.wrapper.children[0]),this.$el&&t&&!this.$el.contains(e.target)&&!t.contains(e.target)&&n&&!n.contains(e.target)&&(this.showPopper=!1)},handleAfterEnter:function(){this.$emit("after-enter")},handleAfterLeave:function(){this.$emit("after-leave"),this.doDestroy()},cleanup:function(){(this.openDelay||this.closeDelay)&&clearTimeout(this._timer)}},destroyed:function(){var e=this.reference;Object(s["off"])(e,"click",this.doToggle),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"focusin",this.doShow),Object(s["off"])(e,"focusout",this.doClose),Object(s["off"])(e,"mousedown",this.doShow),Object(s["off"])(e,"mouseup",this.doClose),Object(s["off"])(e,"mouseleave",this.handleMouseLeave),Object(s["off"])(e,"mouseenter",this.handleMouseEnter),Object(s["off"])(document,"click",this.handleDocumentClick)}},c=u,h=n(0),d=Object(h["a"])(c,i,r,!1,null,null,null);d.options.__file="packages/popover/src/main.vue";var f=d.exports,p=function(e,t,n){var i=t.expression?t.value:t.arg,r=n.context.$refs[i];r&&(Array.isArray(r)?r[0].$refs.reference=e:r.$refs.reference=e)},g={bind:function(e,t,n){p(e,t,n)},inserted:function(e,t,n){p(e,t,n)}},m=n(7),v=n.n(m);v.a.directive("popover",g),f.install=function(e){e.directive("popover",g),e.component(f.name,f)},f.directive=g;t["default"]=f}})},"49bd":function(e,t,n){"use strict";n.r(t);var i=n("5e45"),r=n.n(i),o=n("6da7"),a=n.n(o),s=/%[sdj%]/g,l=function(){};function u(){for(var e=arguments.length,t=Array(e),n=0;n=o)return e;switch(e){case"%s":return String(t[i++]);case"%d":return Number(t[i++]);case"%j":try{return JSON.stringify(t[i++])}catch(n){return"[Circular]"}break;default:return e}})),l=t[i];i()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},M={integer:function(e){return M.number(e)&&parseInt(e,10)===e},float:function(e){return M.number(e)&&!M.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===("undefined"===typeof e?"undefined":a()(e))&&!M.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(_.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(_.url)},hex:function(e){return"string"===typeof e&&!!e.match(_.hex)}};function I(e,t,n,i,r){if(e.required&&void 0===t)b(e,t,n,i,r);else{var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=e.type;o.indexOf(s)>-1?M[s](t)||i.push(u(r.messages.types[s],e.fullField,e.type)):s&&("undefined"===typeof t?"undefined":a()(t))!==e.type&&i.push(u(r.messages.types[s],e.fullField,e.type))}}var C=I;function S(e,t,n,i,r){var o="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,l=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=t,h=null,d="number"===typeof t,f="string"===typeof t,p=Array.isArray(t);if(d?h="number":f?h="string":p&&(h="array"),!h)return!1;p&&(c=t.length),f&&(c=t.replace(l,"_").length),o?c!==e.len&&i.push(u(r.messages[h].len,e.fullField,e.len)):a&&!s&&ce.max?i.push(u(r.messages[h].max,e.fullField,e.max)):a&&s&&(ce.max)&&i.push(u(r.messages[h].range,e.fullField,e.min,e.max))}var D=S,T="enum";function A(e,t,n,i,r){e[T]=Array.isArray(e[T])?e[T]:[],-1===e[T].indexOf(t)&&i.push(u(r.messages[T],e.fullField,e[T].join(", ")))}var k=A;function E(e,t,n,i,r){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||i.push(u(r.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var o=new RegExp(e.pattern);o.test(t)||i.push(u(r.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var N=E,O={required:b,whitespace:x,type:C,range:D,enum:k,pattern:N};function P(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t,"string")&&!e.required)return n();O.required(e,t,i,o,r,"string"),h(t,"string")||(O.type(e,t,i,o,r),O.range(e,t,i,o,r),O.pattern(e,t,i,o,r),!0===e.whitespace&&O.whitespace(e,t,i,o,r))}n(o)}var L=P;function B(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&O.type(e,t,i,o,r)}n(o)}var j=B;function z(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&(O.type(e,t,i,o,r),O.range(e,t,i,o,r))}n(o)}var R=z;function F(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&O.type(e,t,i,o,r)}n(o)}var V=F;function H(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),h(t)||O.type(e,t,i,o,r)}n(o)}var $=H;function U(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&(O.type(e,t,i,o,r),O.range(e,t,i,o,r))}n(o)}var W=U;function G(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&(O.type(e,t,i,o,r),O.range(e,t,i,o,r))}n(o)}var Z=G;function Y(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t,"array")&&!e.required)return n();O.required(e,t,i,o,r,"array"),h(t,"array")||(O.type(e,t,i,o,r),O.range(e,t,i,o,r))}n(o)}var Q=Y;function q(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),void 0!==t&&O.type(e,t,i,o,r)}n(o)}var K=q,X="enum";function J(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();O.required(e,t,i,o,r),t&&O[X](e,t,i,o,r)}n(o)}var ee=J;function te(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t,"string")&&!e.required)return n();O.required(e,t,i,o,r),h(t,"string")||O.pattern(e,t,i,o,r)}n(o)}var ne=te;function ie(e,t,n,i,r){var o=[],a=e.required||!e.required&&i.hasOwnProperty(e.field);if(a){if(h(t)&&!e.required)return n();if(O.required(e,t,i,o,r),!h(t)){var s=void 0;s="number"===typeof t?new Date(t):t,O.type(e,s,i,o,r),s&&O.range(e,s.getTime(),i,o,r)}}n(o)}var re=ie;function oe(e,t,n,i,r){var o=[],s=Array.isArray(t)?"array":"undefined"===typeof t?"undefined":a()(t);O.required(e,t,i,o,r,s),n(o)}var ae=oe;function se(e,t,n,i,r){var o=e.type,a=[],s=e.required||!e.required&&i.hasOwnProperty(e.field);if(s){if(h(t,o)&&!e.required)return n();O.required(e,t,i,a,r,o),h(t,o)||O.type(e,t,i,a,r)}n(a)}var le=se,ue={string:L,method:j,number:R,boolean:V,regexp:$,integer:W,float:Z,array:Q,object:K,enum:ee,pattern:ne,date:re,url:le,hex:le,email:le,required:ae};function ce(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var he=ce();function de(e){this.rules=null,this._messages=he,this.define(e)}de.prototype={messages:function(e){return e&&(this._messages=v(ce(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==("undefined"===typeof e?"undefined":a()(e))||Array.isArray(e))throw new Error("Rules must be an object");this.rules={};var t=void 0,n=void 0;for(t in e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments[2],o=e,s=n,c=i;if("function"===typeof s&&(c=s,s={}),this.rules&&0!==Object.keys(this.rules).length){if(s.messages){var h=this.messages();h===he&&(h=ce()),v(h,s.messages),s.messages=h}else s.messages=this.messages();var d=void 0,f=void 0,p={},y=s.keys||Object.keys(this.rules);y.forEach((function(n){d=t.rules[n],f=o[n],d.forEach((function(i){var a=i;"function"===typeof a.transform&&(o===e&&(o=r()({},o)),f=o[n]=a.transform(f)),a="function"===typeof a?{validator:a}:r()({},a),a.validator=t.getValidationMethod(a),a.field=n,a.fullField=a.fullField||n,a.type=t.getType(a),a.validator&&(p[n]=p[n]||[],p[n].push({rule:a,value:f,source:o,field:n}))}))}));var b={};g(p,s,(function(e,t){var n=e.rule,i=("object"===n.type||"array"===n.type)&&("object"===a()(n.fields)||"object"===a()(n.defaultField));function o(e,t){return r()({},t,{fullField:n.fullField+"."+e})}function c(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],c=a;if(Array.isArray(c)||(c=[c]),c.length&&l("async-validator:",c),c.length&&n.message&&(c=[].concat(n.message)),c=c.map(m(n)),s.first&&c.length)return b[n.field]=1,t(c);if(i){if(n.required&&!e.value)return c=n.message?[].concat(n.message).map(m(n)):s.error?[s.error(n,u(s.messages.required,n.field))]:[],t(c);var h={};if(n.defaultField)for(var d in e.value)e.value.hasOwnProperty(d)&&(h[d]=n.defaultField);for(var f in h=r()({},h,e.rule.fields),h)if(h.hasOwnProperty(f)){var p=Array.isArray(h[f])?h[f]:[h[f]];h[f]=p.map(o.bind(null,f))}var g=new de(h);g.messages(s.messages),e.rule.options&&(e.rule.options.messages=s.messages,e.rule.options.error=s.error),g.validate(e.value,e.rule.options||s,(function(e){t(e&&e.length?c.concat(e):e)}))}else t(c)}i=i&&(n.required||!n.required&&e.value),n.field=e.field;var h=n.validator(n,e.value,c,e.source,s);h&&h.then&&h.then((function(){return c()}),(function(e){return c(e)}))}),(function(e){w(e)}))}else c&&c();function w(e){var t=void 0,n=void 0,i=[],r={};function o(e){Array.isArray(e)?i=i.concat.apply(i,e):i.push(e)}for(t=0;t=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,n,i)}e.exports=a,a.prototype._init=function(e,t,n){var i=e.concat(t).concat(n);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var r=0;r=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(n||[])),this._reseed=1},a.prototype.generate=function(e,t,n,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!==typeof t&&(i=n,n=t,t=null),n&&(n=r.toArray(n,i||"hex"),this._update(n));var o=[];while(o.length1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;u||(u=document.createElement("textarea"),document.body.appendChild(u));var i=d(e),r=i.paddingSize,o=i.borderSize,a=i.boxSizing,s=i.contextStyle;u.setAttribute("style",s+";"+c),u.value=e.value||e.placeholder||"";var l=u.scrollHeight,h={};"border-box"===a?l+=o:"content-box"===a&&(l-=r),u.value="";var f=u.scrollHeight-r;if(null!==t){var p=f*t;"border-box"===a&&(p=p+r+o),l=Math.max(p,l),h.minHeight=p+"px"}if(null!==n){var g=f*n;"border-box"===a&&(g=g+r+o),l=Math.min(g,l)}return h.height=l+"px",u.parentNode&&u.parentNode.removeChild(u),u=null,h}var p=n(9),g=n.n(p),m=n(21),v={name:"ElInput",componentName:"ElInput",mixins:[a.a,l.a],inheritAttrs:!1,inject:{elForm:{default:""},elFormItem:{default:""}},data:function(){return{textareaCalcStyle:{},hovering:!1,focused:!1,isComposing:!1,passwordVisible:!1}},props:{value:[String,Number],size:String,resize:String,form:String,disabled:Boolean,readonly:Boolean,type:{type:String,default:"text"},autosize:{type:[Boolean,Object],default:!1},autocomplete:{type:String,default:"off"},autoComplete:{type:String,validator:function(e){return!0}},validateEvent:{type:Boolean,default:!0},suffixIcon:String,prefixIcon:String,label:String,clearable:{type:Boolean,default:!1},showPassword:{type:Boolean,default:!1},showWordLimit:{type:Boolean,default:!1},tabindex:String},computed:{_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},validateState:function(){return this.elFormItem?this.elFormItem.validateState:""},needStatusIcon:function(){return!!this.elForm&&this.elForm.statusIcon},validateIcon:function(){return{validating:"el-icon-loading",success:"el-icon-circle-check",error:"el-icon-circle-close"}[this.validateState]},textareaStyle:function(){return g()({},this.textareaCalcStyle,{resize:this.resize})},inputSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputDisabled:function(){return this.disabled||(this.elForm||{}).disabled},nativeInputValue:function(){return null===this.value||void 0===this.value?"":String(this.value)},showClear:function(){return this.clearable&&!this.inputDisabled&&!this.readonly&&this.nativeInputValue&&(this.focused||this.hovering)},showPwdVisible:function(){return this.showPassword&&!this.inputDisabled&&!this.readonly&&(!!this.nativeInputValue||this.focused)},isWordLimitVisible:function(){return this.showWordLimit&&this.$attrs.maxlength&&("text"===this.type||"textarea"===this.type)&&!this.inputDisabled&&!this.readonly&&!this.showPassword},upperLimit:function(){return this.$attrs.maxlength},textLength:function(){return"number"===typeof this.value?String(this.value).length:(this.value||"").length},inputExceed:function(){return this.isWordLimitVisible&&this.textLength>this.upperLimit}},watch:{value:function(e){this.$nextTick(this.resizeTextarea),this.validateEvent&&this.dispatch("ElFormItem","el.form.change",[e])},nativeInputValue:function(){this.setNativeInputValue()},type:function(){var e=this;this.$nextTick((function(){e.setNativeInputValue(),e.resizeTextarea(),e.updateIconOffset()}))}},methods:{focus:function(){this.getInput().focus()},blur:function(){this.getInput().blur()},getMigratingConfig:function(){return{props:{icon:"icon is removed, use suffix-icon / prefix-icon instead.","on-icon-click":"on-icon-click is removed."},events:{click:"click is removed."}}},handleBlur:function(e){this.focused=!1,this.$emit("blur",e),this.validateEvent&&this.dispatch("ElFormItem","el.form.blur",[this.value])},select:function(){this.getInput().select()},resizeTextarea:function(){if(!this.$isServer){var e=this.autosize,t=this.type;if("textarea"===t)if(e){var n=e.minRows,i=e.maxRows;this.textareaCalcStyle=f(this.$refs.textarea,n,i)}else this.textareaCalcStyle={minHeight:f(this.$refs.textarea).minHeight}}},setNativeInputValue:function(){var e=this.getInput();e&&e.value!==this.nativeInputValue&&(e.value=this.nativeInputValue)},handleFocus:function(e){this.focused=!0,this.$emit("focus",e)},handleCompositionStart:function(e){this.$emit("compositionstart",e),this.isComposing=!0},handleCompositionUpdate:function(e){this.$emit("compositionupdate",e);var t=e.target.value,n=t[t.length-1]||"";this.isComposing=!Object(m["isKorean"])(n)},handleCompositionEnd:function(e){this.$emit("compositionend",e),this.isComposing&&(this.isComposing=!1,this.handleInput(e))},handleInput:function(e){this.isComposing||e.target.value!==this.nativeInputValue&&(this.$emit("input",e.target.value),this.$nextTick(this.setNativeInputValue))},handleChange:function(e){this.$emit("change",e.target.value)},calcIconOffset:function(e){var t=[].slice.call(this.$el.querySelectorAll(".el-input__"+e)||[]);if(t.length){for(var n=null,i=0;i=0)return!0}var v=new RegExp("["+c+"]+","g");function y(e){for(var t=e.split(/\n+/g),n=g(t.shift()).split(v),i=[],o=r.map(n,(function(e){return{name:e,data:[]}})),a=0;a=0}function l(e,t){e=e.slice();var n=i.map(e,r.capitalFirst);t=(t||[]).slice();var o=i.map(t,r.capitalFirst);return function(r,a){i.each(e,(function(e,i){for(var s={name:e,capital:n[i]},l=0;l=0}function o(e,r){var o=!1;return t((function(t){i.each(n(e,t)||[],(function(e){r.records[t.name][e]&&(o=!0)}))})),o}function a(e,r){r.nodes.push(e),t((function(t){i.each(n(e,t)||[],(function(e){r.records[t.name][e]=!0}))}))}}t.isCoordSupported=s,t.createNameEach=l,t.eachAxisDim=u,t.createLinkedNodesFinder=c},"4e54":function(e,t,n){"use strict";function i(e){return void 0!==e&&null!==e}function r(e){var t=/([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;return t.test(e)}t.__esModule=!0,t.isDef=i,t.isKorean=r},"4ec2":function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},"4f46":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=(r.isTypedArray,r.extend),a=(r.assert,r.each),s=r.isObject,l=n("faa9"),u=l.getDataItemValue,c=l.isDataItemOption,h=n("cb77"),d=h.parseDate,f=n("d60c"),p=n("cc5e"),g=p.SOURCE_FORMAT_TYPED_ARRAY,m=p.SOURCE_FORMAT_ARRAY_ROWS,v=p.SOURCE_FORMAT_ORIGINAL,y=p.SOURCE_FORMAT_OBJECT_ROWS;function b(e,t){f.isInstance(e)||(e=f.seriesDataToSource(e)),this._source=e;var n=this._data=e.data,i=e.sourceFormat;i===g&&(this._offset=0,this._dimSize=t,this._data=n);var r=x[i===m?i+"_"+e.seriesLayoutBy:i];o(this,r)}var w=b.prototype;w.pure=!1,w.persistent=!0,w.getSource=function(){return this._source};var x={arrayRows_column:{pure:!0,count:function(){return Math.max(0,this._data.length-this._source.startIndex)},getItem:function(e){return this._data[e+this._source.startIndex]},appendData:I},arrayRows_row:{pure:!0,count:function(){var e=this._data[0];return e?Math.max(0,e.length-this._source.startIndex):0},getItem:function(e){e+=this._source.startIndex;for(var t=[],n=this._data,i=0;i=t.length)break;r=t[i++]}else{if(i=t.next(),i.done)break;r=i.value}var o=r,a=o.target.__resizeListeners__||[];a.length&&a.forEach((function(e){e()}))}};t.addResizeListener=function(e,t){s||(e.__resizeListeners__||(e.__resizeListeners__=[],e.__ro__=new r.default((0,o.debounce)(16,l)),e.__ro__.observe(e)),e.__resizeListeners__.push(t))},t.removeResizeListener=function(e,t){e&&e.__resizeListeners__&&(e.__resizeListeners__.splice(e.__resizeListeners__.indexOf(t),1),e.__resizeListeners__.length||e.__ro__.disconnect())}},"51b5":function(e,t,n){"use strict";t.__esModule=!0;var i=n("c6c9");t.default={methods:{t:function(){for(var e=arguments.length,t=Array(e),n=0;n0&&s.length>r&&!s.warned){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=s.length,a(l)}return e}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=f.bind(i);return r.listener=n,i.wrapFn=r,r}function g(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"===typeof r?n?[r.listener||r]:[r]:n?b(r):v(r,r.length)}function m(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"===typeof n)return 1;if(void 0!==n)return n.length}return 0}function v(e,t){for(var n=new Array(t),i=0;i0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=r[e];if(void 0===l)return!1;if("function"===typeof l)o(l,this,t);else{var u=l.length,c=v(l,u);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():y(n,r),1===n.length&&(i[e]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",e,a||t)}return this},l.prototype.off=l.prototype.removeListener,l.prototype.removeAllListeners=function(e){var t,n,i;if(n=this._events,void 0===n)return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0===--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var r,o=Object.keys(n);for(i=0;i=0;i--)this.removeListener(e,t[i]);return this},l.prototype.listeners=function(e){return g(this,e,!0)},l.prototype.rawListeners=function(e){return g(this,e,!1)},l.listenerCount=function(e,t){return"function"===typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},l.prototype.listenerCount=m,l.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},"529f":function(e,t,n){var i=n("2fcc");n("a509"),n("dc71");var r=n("4ca9"),o=n("4807");i.registerLayout(r),i.registerVisual(o)},"52c4":function(e,t,n){var i=n("78ec"),r=n("4a78"),o=n("8245"),a=n("12f9"),s=n("d996"),l="prototype",u=function(e,t,n){var c,h,d,f=e&u.F,p=e&u.G,g=e&u.S,m=e&u.P,v=e&u.B,y=e&u.W,b=p?r:r[t]||(r[t]={}),w=b[l],x=p?i:g?i[t]:(i[t]||{})[l];for(c in p&&(n=t),n)h=!f&&x&&void 0!==x[c],h&&s(b,c)||(d=h?x[c]:n[c],b[c]=p&&"function"!=typeof x[c]?n[c]:v&&h?o(d,i):y&&x[c]==d?function(e){var t=function(t,n,i){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,i)}return e.apply(this,arguments)};return t[l]=e[l],t}(d):m&&"function"==typeof d?o(Function.call,d):d,m&&((b.virtual||(b.virtual={}))[c]=d,e&u.R&&w&&!w[c]&&a(w,c,d)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},"52d6":function(e,t,n){var i=n("3617"),r=n("be16").Buffer,o=n("83d1");function a(e){var t=e._cipher.encryptBlockRaw(e._prev);return o(e._prev),t}var s=16;t.encrypt=function(e,t){var n=Math.ceil(t.length/s),o=e._cache.length;e._cache=r.concat([e._cache,r.allocUnsafe(n*s)]);for(var l=0;l=0?this._tryShow(n,i):"leave"===e&&this._hide(i))}),this))},_keepShow:function(){var e=this._tooltipModel,t=this._ecModel,n=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==e.get("triggerOn")){var i=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&i.manuallyShowTip(e,t,n,{x:i._lastX,y:i._lastY})}))}},manuallyShowTip:function(e,t,n,i){if(i.from!==this.uid&&!o.node){var r=C(i,n);this._ticket="";var a=i.dataByCoordSys;if(i.tooltip&&null!=i.x&&null!=i.y){var s=_;s.position=[i.x,i.y],s.update(),s.tooltip=i.tooltip,this._tryShow({offsetX:i.x,offsetY:i.y,target:s},r)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:i.dataByCoordSys,tooltipOption:i.tooltipOption},r);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(e,t,n,i))return;var l=h(i,t),u=l.point[0],c=l.point[1];null!=u&&null!=c&&this._tryShow({offsetX:u,offsetY:c,position:i.position,target:l.el},r)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},r))}},manuallyHideTip:function(e,t,n,i){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=null,i.from!==this.uid&&this._hide(C(i,n))},_manuallyAxisShowTip:function(e,t,n,i){var r=i.seriesIndex,o=i.dataIndex,a=t.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=t.getSeriesByIndex(r);if(s){var l=s.getData();e=I([l.getItemModel(o),s,(s.coordinateSystem||{}).model,e]);if("axis"===e.get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}}},_tryShow:function(e,t){var n=e.target,i=this._tooltipModel;if(i){this._lastX=e.offsetX,this._lastY=e.offsetY;var r=e.dataByCoordSys;r&&r.length?this._showAxisTooltip(r,e):n&&null!=n.dataIndex?(this._lastDataByCoordSys=null,this._showSeriesItemTooltip(e,n,t)):n&&n.tooltip?(this._lastDataByCoordSys=null,this._showComponentItemTooltip(e,n,t)):(this._lastDataByCoordSys=null,this._hide(t))}},_showOrMove:function(e,t){var n=e.get("showDelay");t=r.bind(t,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(t,n):t()},_showAxisTooltip:function(e,t){var n=this._ecModel,i=this._tooltipModel,o=[t.offsetX,t.offsetY],a=[],s=[],u=I([t.tooltipOption,i]),c=this._renderMode,h=this._newLine,d={};w(e,(function(e){w(e.dataByAxis,(function(e){var t=n.getComponent(e.axisDim+"Axis",e.axisIndex),i=e.value,o=[];if(t&&null!=i){var u=m.getValueLabel(i,t.axis,n,e.seriesDataIndices,e.valueLabelOpt);r.each(e.seriesDataIndices,(function(a){var l=n.getSeriesByIndex(a.seriesIndex),h=a.dataIndexInside,f=l&&l.getDataParams(h);if(f.axisDim=e.axisDim,f.axisIndex=e.axisIndex,f.axisType=e.axisType,f.axisId=e.axisId,f.axisValue=g.getAxisRawValue(t.axis,i),f.axisValueLabel=u,f){s.push(f);var p,m=l.formatTooltip(h,!0,null,c);if(r.isObject(m)){p=m.html;var v=m.markers;r.merge(d,v)}else p=m;o.push(p)}}));var f=u;"html"!==c?a.push(o.join(h)):a.push((f?l.encodeHTML(f)+h:"")+o.join(h))}}))}),this),a.reverse(),a=a.join(this._newLine+this._newLine);var f=t.position;this._showOrMove(u,(function(){this._updateContentNotChangedOnAxis(e)?this._updatePosition(u,f,o[0],o[1],this._tooltipContent,s):this._showTooltipContent(u,a,s,Math.random(),o[0],o[1],f,void 0,d)}))},_showSeriesItemTooltip:function(e,t,n){var i=this._ecModel,o=t.seriesIndex,a=i.getSeriesByIndex(o),s=t.dataModel||a,l=t.dataIndex,u=t.dataType,c=s.getData(u),h=I([c.getItemModel(l),s,a&&(a.coordinateSystem||{}).model,this._tooltipModel]),d=h.get("trigger");if(null==d||"item"===d){var f,p,g=s.getDataParams(l,u),m=s.formatTooltip(l,!1,u,this._renderMode);r.isObject(m)?(f=m.html,p=m.markers):(f=m,p=null);var v="item_"+s.name+"_"+l;this._showOrMove(h,(function(){this._showTooltipContent(h,f,g,v,e.offsetX,e.offsetY,e.position,e.target,p)})),n({type:"showTip",dataIndexInside:l,dataIndex:c.getRawIndex(l),seriesIndex:o,from:this.uid})}},_showComponentItemTooltip:function(e,t,n){var i=t.tooltip;if("string"===typeof i){var r=i;i={content:r,formatter:r}}var o=new f(i,this._tooltipModel,this._ecModel),a=o.get("content"),s=Math.random();this._showOrMove(o,(function(){this._showTooltipContent(o,a,o.get("formatterParams")||{},s,e.offsetX,e.offsetY,e.position,t)})),n({type:"showTip",from:this.uid})},_showTooltipContent:function(e,t,n,i,r,o,a,s,u){if(this._ticket="",e.get("showContent")&&e.get("show")){var c=this._tooltipContent,h=e.get("formatter");a=a||e.get("position");var d=t;if(h&&"string"===typeof h)d=l.formatTpl(h,n,!0);else if("function"===typeof h){var f=b((function(t,i){t===this._ticket&&(c.setContent(i,u,e),this._updatePosition(e,a,r,o,c,n,s))}),this);this._ticket=i,d=h(n,i,f)}c.setContent(d,u,e),c.show(e),this._updatePosition(e,a,r,o,c,n,s)}},_updatePosition:function(e,t,n,i,o,a,s){var l=this._api.getWidth(),u=this._api.getHeight();t=t||e.get("position");var c=o.getSize(),h=e.get("align"),f=e.get("verticalAlign"),p=s&&s.getBoundingRect().clone();if(s&&p.applyTransform(s.transform),"function"===typeof t&&(t=t([n,i],a,o.el,p,{viewSize:[l,u],contentSize:c.slice()})),r.isArray(t))n=x(t[0],l),i=x(t[1],u);else if(r.isObject(t)){t.width=c[0],t.height=c[1];var g=d.getLayoutRect(t,{width:l,height:u});n=g.x,i=g.y,h=null,f=null}else if("string"===typeof t&&s){var m=T(t,p,c);n=m[0],i=m[1]}else{m=S(n,i,o,l,u,h?null:20,f?null:20);n=m[0],i=m[1]}if(h&&(n-=A(h)?c[0]/2:"right"===h?c[0]:0),f&&(i-=A(f)?c[1]/2:"bottom"===f?c[1]:0),e.get("confine")){m=D(n,i,o,l,u);n=m[0],i=m[1]}o.moveTo(n,i)},_updateContentNotChangedOnAxis:function(e){var t=this._lastDataByCoordSys,n=!!t&&t.length===e.length;return n&&w(t,(function(t,i){var r=t.dataByAxis||{},o=e[i]||{},a=o.dataByAxis||[];n&=r.length===a.length,n&&w(r,(function(e,t){var i=a[t]||{},r=e.seriesDataIndices||[],o=i.seriesDataIndices||[];n&=e.value===i.value&&e.axisType===i.axisType&&e.axisId===i.axisId&&r.length===o.length,n&&w(r,(function(e,t){var i=o[t];n&=e.seriesIndex===i.seriesIndex&&e.dataIndex===i.dataIndex}))}))})),this._lastDataByCoordSys=e,!!n},_hide:function(e){this._lastDataByCoordSys=null,e({type:"hideTip",from:this.uid})},dispose:function(e,t){o.node||(this._tooltipContent.dispose(),p.unregister("itemTooltip",t))}});function I(e){var t=e.pop();while(e.length){var n=e.pop();n&&(f.isInstance(n)&&(n=n.get("tooltip",!0)),"string"===typeof n&&(n={formatter:n}),t=new f(n,t,t.ecModel))}return t}function C(e,t){return e.dispatchAction||r.bind(t.dispatchAction,t)}function S(e,t,n,i,r,o,a){var s=n.getOuterSize(),l=s.width,u=s.height;return null!=o&&(e+l+o>i?e-=l+o:e+=o),null!=a&&(t+u+a>r?t-=u+a:t+=a),[e,t]}function D(e,t,n,i,r){var o=n.getOuterSize(),a=o.width,s=o.height;return e=Math.min(e+a,i)-a,t=Math.min(t+s,r)-s,e=Math.max(e,0),t=Math.max(t,0),[e,t]}function T(e,t,n){var i=n[0],r=n[1],o=5,a=0,s=0,l=t.width,u=t.height;switch(e){case"inside":a=t.x+l/2-i/2,s=t.y+u/2-r/2;break;case"top":a=t.x+l/2-i/2,s=t.y-r-o;break;case"bottom":a=t.x+l/2-i/2,s=t.y+u+o;break;case"left":a=t.x-i-o,s=t.y+u/2-r/2;break;case"right":a=t.x+l+o,s=t.y+u/2-r/2}return[a,s]}function A(e){return"center"===e||"middle"===e}e.exports=M},"52db":function(e,t,n){"use strict";(function(t){function n(e,n,i,r){if("function"!==typeof e)throw new TypeError('"callback" argument must be a function');var o,a,s=arguments.length;switch(s){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick((function(){e.call(null,n)}));case 3:return t.nextTick((function(){e.call(null,n,i)}));case 4:return t.nextTick((function(){e.call(null,n,i,r)}));default:o=new Array(s-1),a=0;while(a-l&&el||e<-l}function v(e,t,n,i,r){var o=1-r;return o*o*(o*e+3*r*t)+r*r*(r*i+3*o*n)}function y(e,t,n,i,r){var o=1-r;return 3*(((t-e)*o+2*(n-t)*r)*o+(i-n)*r*r)}function b(e,t,n,i,r,o){var l=i+3*(t-n)-e,u=3*(n-2*t+e),d=3*(t-e),f=e-r,p=u*u-3*l*d,m=u*d-9*l*f,v=d*d-3*u*f,y=0;if(g(p)&&g(m))if(g(u))o[0]=0;else{var b=-d/u;b>=0&&b<=1&&(o[y++]=b)}else{var w=m*m-4*p*v;if(g(w)){var x=m/p,_=(b=-u/l+x,-x/2);b>=0&&b<=1&&(o[y++]=b),_>=0&&_<=1&&(o[y++]=_)}else if(w>0){var M=s(w),I=p*u+1.5*l*(-m+M),C=p*u+1.5*l*(-m-M);I=I<0?-a(-I,h):a(I,h),C=C<0?-a(-C,h):a(C,h);b=(-u-(I+C))/(3*l);b>=0&&b<=1&&(o[y++]=b)}else{var S=(2*p*u-3*l*m)/(2*s(p*p*p)),D=Math.acos(S)/3,T=s(p),A=Math.cos(D),k=(b=(-u-2*T*A)/(3*l),_=(-u+T*(A+c*Math.sin(D)))/(3*l),(-u+T*(A-c*Math.sin(D)))/(3*l));b>=0&&b<=1&&(o[y++]=b),_>=0&&_<=1&&(o[y++]=_),k>=0&&k<=1&&(o[y++]=k)}}return y}function w(e,t,n,i,r){var o=6*n-12*t+6*e,a=9*t+3*i-3*e-9*n,l=3*t-3*e,u=0;if(g(a)){if(m(o)){var c=-l/o;c>=0&&c<=1&&(r[u++]=c)}}else{var h=o*o-4*a*l;if(g(h))r[0]=-o/(2*a);else if(h>0){var d=s(h),f=(c=(-o+d)/(2*a),(-o-d)/(2*a));c>=0&&c<=1&&(r[u++]=c),f>=0&&f<=1&&(r[u++]=f)}}return u}function x(e,t,n,i,r,o){var a=(t-e)*r+e,s=(n-t)*r+t,l=(i-n)*r+n,u=(s-a)*r+a,c=(l-s)*r+s,h=(c-u)*r+u;o[0]=e,o[1]=a,o[2]=u,o[3]=h,o[4]=h,o[5]=c,o[6]=l,o[7]=i}function _(e,t,n,i,r,a,l,c,h,g,m){var y,b,w,x,_,M=.005,I=1/0;d[0]=h,d[1]=g;for(var C=0;C<1;C+=.05)f[0]=v(e,n,r,l,C),f[1]=v(t,i,a,c,C),x=o(d,f),x=0&&x=0&&c<=1&&(r[u++]=c)}}else{var h=a*a-4*o*l;if(g(h)){c=-a/(2*o);c>=0&&c<=1&&(r[u++]=c)}else if(h>0){var d=s(h),f=(c=(-a+d)/(2*o),(-a-d)/(2*o));c>=0&&c<=1&&(r[u++]=c),f>=0&&f<=1&&(r[u++]=f)}}return u}function S(e,t,n){var i=e+n-2*t;return 0===i?.5:(e-t)/i}function D(e,t,n,i,r){var o=(t-e)*i+e,a=(n-t)*i+t,s=(a-o)*i+o;r[0]=e,r[1]=o,r[2]=s,r[3]=s,r[4]=a,r[5]=n}function T(e,t,n,i,r,a,l,c,h){var g,m=.005,v=1/0;d[0]=l,d[1]=c;for(var y=0;y<1;y+=.05){f[0]=M(e,n,r,y),f[1]=M(t,i,a,y);var b=o(d,f);b=0&&b=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height},clone:function(){return new l(this.x,this.y,this.width,this.height)},copy:function(e){this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},l.create=function(e){return new l(e.x,e.y,e.width,e.height)};var u=l;e.exports=u},"53f2":function(e,t,n){var i=n("357b"),r=i.each,o=i.isString;function a(e,t,n){n=n||{};var i,a,s,l,u=n.byIndex,c=n.stackedCoordDimension,h=!(!e||!e.get("stack"));if(r(t,(function(e,n){o(e)&&(t[n]=e={name:e}),h&&!e.isExtraCoord&&(u||i||!e.ordinalMeta||(i=e),a||"ordinal"===e.type||"time"===e.type||c&&c!==e.coordDim||(a=e))})),!a||u||i||(u=!0),a){s="__\0ecstackresult",l="__\0ecstackedover",i&&(i.createInvertedIndices=!0);var d=a.coordDim,f=a.type,p=0;r(t,(function(e){e.coordDim===d&&p++})),t.push({name:s,coordDim:d,coordDimIndex:p,type:f,isExtraCoord:!0,isCalculationCoord:!0}),p++,t.push({name:l,coordDim:l,coordDimIndex:p,type:f,isExtraCoord:!0,isCalculationCoord:!0})}return{stackedDimension:a&&a.name,stackedByDimension:i&&i.name,isStackedByIndex:u,stackedOverDimension:l,stackResultDimension:s}}function s(e,t){return!!t&&t===e.getCalculationInfo("stackedDimension")}function l(e,t){return s(e,t)?e.getCalculationInfo("stackResultDimension"):t}t.enableDataStack=a,t.isDimensionStacked=s,t.getStackedDimension=l},5412:function(e,t,n){var i=n("bf4b"),r=i.extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}});e.exports=r},5443:function(e,t,n){var i=n("357b"),r=n("53de"),o=n("eae8"),a=n("a7ef");function s(e,t,n,i){o.call(this,e),this.map=t;var r=a.load(t,n);this._nameCoordMap=r.nameCoordMap,this._regionsMap=r.regionsMap,this._invertLongitute=null==i||i,this.regions=r.regions,this._rect=r.boundingRect}function l(e,t,n,i){var r=n.geoModel,o=n.seriesModel,a=r?r.coordinateSystem:o?o.coordinateSystem||(o.getReferringComponents("geo")[0]||{}).coordinateSystem:null;return a===this?a[e](i):null}s.prototype={constructor:s,type:"geo",dimensions:["lng","lat"],containCoord:function(e){for(var t=this.regions,n=0;no[1]&&o.reverse(),{coordSys:{type:"polar",cx:e.cx,cy:e.cy,r:o[1],r0:o[0]},api:{coord:i.bind((function(i){var r=t.dataToRadius(i[0]),o=n.dataToAngle(i[1]),a=e.coordToPoint([r,o]);return a.push(r,o*Math.PI/180),a})),size:i.bind(r,e)}}}e.exports=o},"54ac":function(e,t,n){(function(t){function n(e,t){if(i("noDeprecation"))return e;var n=!1;function r(){if(!n){if(i("throwDeprecation"))throw new Error(t);i("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}return r}function i(e){try{if(!t.localStorage)return!1}catch(i){return!1}var n=t.localStorage[e];return null!=n&&"true"===String(n).toLowerCase()}e.exports=n}).call(this,n("a032"))},"54e2":function(e,t,n){var i=n("2fcc"),r=n("1acb"),o=i.extendComponentView({type:"axisPointer",render:function(e,t,n){var i=t.getComponent("tooltip"),o=e.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";r.register("axisPointer",n,(function(e,t,n){"none"!==o&&("leave"===e||o.indexOf(e)>=0)&&n({type:"updateAxisPointer",currTrigger:e,x:t&&t.offsetX,y:t&&t.offsetY})}))},remove:function(e,t){r.unregister(t.getZr(),"axisPointer"),o.superApply(this._model,"remove",arguments)},dispose:function(e,t){r.unregister("axisPointer",t),o.superApply(this._model,"dispose",arguments)}}),a=o;e.exports=a},"54f9":function(e,t,n){var i=n("7fdc"),r=n("8eea"),o=n("be16").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function l(){this.init(),this._w=s,r.call(this,64,56)}function u(e){return e<<5|e>>>27}function c(e){return e<<30|e>>>2}function h(e,t,n,i){return 0===e?t&n|~t&i:2===e?t&n|t&i|n&i:t^n^i}i(l,r),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._a,i=0|this._b,r=0|this._c,o=0|this._d,s=0|this._e,l=0;l<16;++l)t[l]=e.readInt32BE(4*l);for(;l<80;++l)t[l]=t[l-3]^t[l-8]^t[l-14]^t[l-16];for(var d=0;d<80;++d){var f=~~(d/20),p=u(n)+h(f,i,r,o)+s+t[d]+a[f]|0;s=o,o=r,r=c(i),i=n,n=p}this._a=n+this._a|0,this._b=i+this._b|0,this._c=r+this._c|0,this._d=o+this._d|0,this._e=s+this._e|0},l.prototype._hash=function(){var e=o.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},5552:function(e,t){var n=/^(attrs|props|on|nativeOn|class|style|hook)$/;function i(e,t){return function(){e&&e.apply(this,arguments),t&&t.apply(this,arguments)}}e.exports=function(e){return e.reduce((function(e,t){var r,o,a,s,l;for(a in t)if(r=e[a],o=t[a],r&&n.test(a))if("class"===a&&("string"===typeof r&&(l=r,e[a]=r={},r[l]=!0),"string"===typeof o&&(l=o,t[a]=o={},o[l]=!0)),"on"===a||"nativeOn"===a||"hook"===a)for(s in o)r[s]=i(r[s],o[s]);else if(Array.isArray(r))e[a]=r.concat(o);else if(Array.isArray(o))e[a]=[r].concat(o);else for(s in o)r[s]=o[s];else e[a]=t[a];return e}),{})}},5571:function(e,t,n){var i=n("357b"),r=n("d3e5"),o=n("faa9"),a=o.makeInner,s=n("f59f"),l=s.enableClassExtend,u=s.enableClassCheck,c=n("fba8"),h=n("0c21"),d=n("cc3e"),f=n("d5e3"),p=i.mixin,g=a();function m(e,t,n){this.parentModel=t,this.ecModel=n,this.option=e}function v(e,t,n){for(var i=0;i=0)&&(P=e);var B=new l.Text({position:A(t.center.slice()),scale:[1/m.scale[0],1/m.scale[1]],z2:10,silent:!0});if(l.setLabelStyle(B.style,B.hoverStyle={},b,w,{labelFetcher:P,labelDataIndex:L,defaultText:t.name,useInsideStyle:!1},{textAlign:"center",textVerticalAlign:"middle"}),!y){var j=[1/c[0],1/c[1]];l.updateProps(B,{scale:j},e)}n.add(B)}if(s)s.setItemGraphicEl(o,n);else{u=e.getRegionModel(t.name);r.eventData={componentType:"geo",componentIndex:e.componentIndex,geoIndex:e.componentIndex,name:t.name,region:u&&u.option||{}}}var z=n.__regions||(n.__regions=[]);z.push(t),n.highDownSilentOnTouch=!!e.get("selectedMode"),l.setHoverStyle(n,v),h.add(n)})),this._updateController(e,t,n),p(this,e,h,n,r),g(e,h)},remove:function(){this._regionsGroup.removeAll(),this._backgroundGroup.removeAll(),this._controller.dispose(),this._mapName&&u.removeGraphic(this._mapName,this.uid),this._mapName=null,this._controllerHost={}},_updateBackground:function(e){var t=e.map;this._mapName!==t&&i.each(u.makeGraphic(t,this.uid),(function(e){this._backgroundGroup.add(e)}),this),this._mapName=t},_updateController:function(e,t,n){var r=e.coordinateSystem,a=this._controller,l=this._controllerHost;l.zoomLimit=e.get("scaleLimit"),l.zoom=r.getZoom(),a.enable(e.get("roam")||!1);var u=e.mainType;function c(){var t={type:"geoRoam",componentType:u};return t[u+"Id"]=e.id,t}a.off("pan").on("pan",(function(e){this._mouseDownFlag=!1,o.updateViewOnPan(l,e.dx,e.dy),n.dispatchAction(i.extend(c(),{dx:e.dx,dy:e.dy}))}),this),a.off("zoom").on("zoom",(function(e){if(this._mouseDownFlag=!1,o.updateViewOnZoom(l,e.scale,e.originX,e.originY),n.dispatchAction(i.extend(c(),{zoom:e.scale,originX:e.originX,originY:e.originY})),this._updateGroup){var t=this.group.scale;this._regionsGroup.traverse((function(e){"text"===e.type&&e.attr("scale",[1/t[0],1/t[1]])}))}}),this),a.setPointerChecker((function(t,i,o){return r.getViewRectAfterRoam().contain(i,o)&&!s(t,n,e)}))}};var v=m;e.exports=v},"55a3":function(e,t,n){var i=n("4f46"),r=i.retrieveRawValue,o=n("405f"),a=o.getTooltipMarker,s=o.formatTpl,l=n("faa9"),u=l.getTooltipRenderMode,c=/\{@(.+?)\}/g,h={getDataParams:function(e,t){var n=this.getData(t),i=this.getRawValue(e,t),r=n.getRawIndex(e),o=n.getName(e),s=n.getRawDataItem(e),l=n.getItemVisual(e,"color"),c=n.getItemVisual(e,"borderColor"),h=this.ecModel.getComponent("tooltip"),d=h&&h.get("renderMode"),f=u(d),p=this.mainType,g="series"===p,m=n.userOutput;return{componentType:p,componentSubType:this.subType,componentIndex:this.componentIndex,seriesType:g?this.subType:null,seriesIndex:this.seriesIndex,seriesId:g?this.id:null,seriesName:g?this.name:null,name:o,dataIndex:r,data:s,dataType:t,value:i,color:l,borderColor:c,dimensionNames:m?m.dimensionNames:null,encode:m?m.encode:null,marker:a({color:l,renderMode:f}),$vars:["seriesName","name","value"]}},getFormattedLabel:function(e,t,n,i,o){t=t||"normal";var a=this.getData(n),l=a.getItemModel(e),u=this.getDataParams(e,n);null!=i&&u.value instanceof Array&&(u.value=u.value[i]);var h=l.get("normal"===t?[o||"label","formatter"]:[t,o||"label","formatter"]);if("function"===typeof h)return u.status=t,u.dimensionIndex=i,h(u);if("string"===typeof h){var d=s(h,u);return d.replace(c,(function(t,n){var i=n.length;return"["===n.charAt(0)&&"]"===n.charAt(i-1)&&(n=+n.slice(1,i-1)),r(a,e,n)}))}},getRawValue:function(e,t){return r(this.getData(t),e)},formatTooltip:function(){}};e.exports=h},"55a3f":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("3061")),o=n("92dd"),a=o.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(e,t){return r(this.getSource(),this,{useEncodeDefaulter:!0})},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clip:!0,label:{position:"top"},lineStyle:{width:2,type:"solid"},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}});e.exports=a},"55c8":function(e,t,n){var i=n("2fcc"),r=i.extendComponentModel({type:"axisPointer",coordSysAxesInfo:null,defaultOption:{show:"auto",triggerOn:null,zlevel:0,z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#aaa",width:1,type:"solid"},shadowStyle:{color:"rgba(150,150,150,0.3)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,shadowBlur:3,shadowColor:"#aaa"},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}}}),o=r;e.exports=o},5609:function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i1&&console.warn("WARNING: the given `parent` query("+t.parent+") matched more than one element, the first one will be used"),0===a.length)throw"ERROR: the given `parent` doesn't exists!";a=a[0]}return a.length>1&&a instanceof Element===!1&&(console.warn("WARNING: you have passed as parent a list of elements, the first one will be used"),a=a[0]),a.appendChild(r),r;function s(e,t){t.forEach((function(t){e.classList.add(t)}))}function l(e,t){t.forEach((function(t){e.setAttribute(t.split(":")[0],t.split(":")[1]||"")}))}},n.prototype._getPosition=function(e,t){var n=l(t);if(this._options.forceAbsolute)return"absolute";var i=c(t,n);return i?"fixed":"absolute"},n.prototype._getOffsets=function(e,t,n){n=n.split("-")[0];var r={};r.position=this.state.position;var o="fixed"===r.position,a=g(t,l(e),o),s=i(e);return-1!==["right","left"].indexOf(n)?(r.top=a.top+a.height/2-s.height/2,r.left="left"===n?a.left-s.width:a.right):(r.left=a.left+a.width/2-s.width/2,r.top="top"===n?a.top-s.height:a.bottom),r.width=s.width,r.height=s.height,{popper:r,reference:a}},n.prototype._setupEventListeners=function(){if(this.state.updateBound=this.update.bind(this),e.addEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement){var t=u(this._reference);t!==e.document.body&&t!==e.document.documentElement||(t=e),t.addEventListener("scroll",this.state.updateBound),this.state.scrollTarget=t}},n.prototype._removeEventListeners=function(){e.removeEventListener("resize",this.state.updateBound),"window"!==this._options.boundariesElement&&this.state.scrollTarget&&(this.state.scrollTarget.removeEventListener("scroll",this.state.updateBound),this.state.scrollTarget=null),this.state.updateBound=null},n.prototype._getBoundaries=function(t,n,i){var r,o,a={};if("window"===i){var s=e.document.body,c=e.document.documentElement;o=Math.max(s.scrollHeight,s.offsetHeight,c.clientHeight,c.scrollHeight,c.offsetHeight),r=Math.max(s.scrollWidth,s.offsetWidth,c.clientWidth,c.scrollWidth,c.offsetWidth),a={top:0,right:r,bottom:o,left:0}}else if("viewport"===i){var h=l(this._popper),d=u(this._popper),p=f(h),g=function(e){return e==document.body?Math.max(document.documentElement.scrollTop,document.body.scrollTop):e.scrollTop},m=function(e){return e==document.body?Math.max(document.documentElement.scrollLeft,document.body.scrollLeft):e.scrollLeft},v="fixed"===t.offsets.popper.position?0:g(d),y="fixed"===t.offsets.popper.position?0:m(d);a={top:0-(p.top-v),right:e.document.documentElement.clientWidth-(p.left-y),bottom:e.document.documentElement.clientHeight-(p.top-v),left:0-(p.left-y)}}else a=l(this._popper)===i?{top:0,left:0,right:i.clientWidth,bottom:i.clientHeight}:f(i);return a.left+=n,a.right-=n,a.top=a.top+n,a.bottom=a.bottom-n,a},n.prototype.runModifiers=function(e,t,n){var i=t.slice();return void 0!==n&&(i=this._options.modifiers.slice(0,a(this._options.modifiers,n))),i.forEach(function(t){d(t)&&(e=t.call(this,e))}.bind(this)),e},n.prototype.isModifierRequired=function(e,t){var n=a(this._options.modifiers,e);return!!this._options.modifiers.slice(0,n).filter((function(e){return e===t})).length},n.prototype.modifiers={},n.prototype.modifiers.applyStyle=function(e){var t,n={position:e.offsets.popper.position},i=Math.round(e.offsets.popper.left),r=Math.round(e.offsets.popper.top);return this._options.gpuAcceleration&&(t=m("transform"))?(n[t]="translate3d("+i+"px, "+r+"px, 0)",n.top=0,n.left=0):(n.left=i,n.top=r),Object.assign(n,e.styles),h(this._popper,n),this._popper.setAttribute("x-placement",e.placement),this.isModifierRequired(this.modifiers.applyStyle,this.modifiers.arrow)&&e.offsets.arrow&&h(e.arrowElement,e.offsets.arrow),e},n.prototype.modifiers.shift=function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets.reference,a=o(e.offsets.popper),s={y:{start:{top:r.top},end:{top:r.top+r.height-a.height}},x:{start:{left:r.left},end:{left:r.left+r.width-a.width}}},l=-1!==["bottom","top"].indexOf(n)?"x":"y";e.offsets.popper=Object.assign(a,s[l][i])}return e},n.prototype.modifiers.preventOverflow=function(e){var t=this._options.preventOverflowOrder,n=o(e.offsets.popper),i={left:function(){var t=n.left;return n.lefte.boundaries.right&&(t=Math.min(n.left,e.boundaries.right-n.width)),{left:t}},top:function(){var t=n.top;return n.tope.boundaries.bottom&&(t=Math.min(n.top,e.boundaries.bottom-n.height)),{top:t}}};return t.forEach((function(t){e.offsets.popper=Object.assign(n,i[t]())})),e},n.prototype.modifiers.keepTogether=function(e){var t=o(e.offsets.popper),n=e.offsets.reference,i=Math.floor;return t.righti(n.right)&&(e.offsets.popper.left=i(n.right)),t.bottomi(n.bottom)&&(e.offsets.popper.top=i(n.bottom)),e},n.prototype.modifiers.flip=function(e){if(!this.isModifierRequired(this.modifiers.flip,this.modifiers.preventOverflow))return console.warn("WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!"),e;if(e.flipped&&e.placement===e._originalPlacement)return e;var t=e.placement.split("-")[0],n=r(t),i=e.placement.split("-")[1]||"",a=[];return a="flip"===this._options.flipBehavior?[t,n]:this._options.flipBehavior,a.forEach(function(s,l){if(t===s&&a.length!==l+1){t=e.placement.split("-")[0],n=r(t);var u=o(e.offsets.popper),c=-1!==["right","bottom"].indexOf(t);(c&&Math.floor(e.offsets.reference[t])>Math.floor(u[n])||!c&&Math.floor(e.offsets.reference[t])s[f]&&(e.offsets.popper[h]+=l[h]+p-s[f]);var g=l[h]+(n||l[c]/2-p/2),m=g-s[h];return m=Math.max(Math.min(s[c]-p-8,m),8),r[h]=m,r[d]="",e.offsets.arrow=r,e.arrowElement=t,e},Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(e){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var t=Object(e),n=1;n0?a:s)}function c(e,t){return t.get(e>0?r:o)}}};e.exports=l},"56d9":function(e,t,n){var i=n("eae8"),r=n("0b9d"),o=r.getLayoutRect,a=n("2c12");function s(e,t,n){var i=e.getBoxLayoutParams();return i.aspect=n,o(i,{width:t.getWidth(),height:t.getHeight()})}function l(e,t){var n=[];return e.eachSeriesByType("graph",(function(e){var r=e.get("coordinateSystem");if(!r||"view"===r){var o=e.getData(),l=o.mapArray((function(e){var t=o.getItemModel(e);return[+t.get("x"),+t.get("y")]})),u=[],c=[];a.fromPoints(l,u,c),c[0]-u[0]===0&&(c[0]+=1,u[0]-=1),c[1]-u[1]===0&&(c[1]+=1,u[1]-=1);var h=(c[0]-u[0])/(c[1]-u[1]),d=s(e,t,h);isNaN(h)&&(u=[d.x,d.y],c=[d.x+d.width,d.y+d.height]);var f=c[0]-u[0],p=c[1]-u[1],g=d.width,m=d.height,v=e.coordinateSystem=new i;v.zoomLimit=e.get("scaleLimit"),v.setBoundingRect(u[0],u[1],f,p),v.setViewRect(d.x,d.y,g,m),v.setCenter(e.get("center")),v.setZoom(e.get("zoom")),n.push(v)}})),n}e.exports=l},"56ef":function(e,t,n){var i=n("357b"),r=n("c20f"),o=n("8e0a"),a=n("c573");function s(e){this.pointerChecker,this._zr=e,this._opt={};var t=i.bind,n=t(l,this),o=t(u,this),a=t(c,this),s=t(h,this),f=t(d,this);r.call(this),this.setPointerChecker=function(e){this.pointerChecker=e},this.enable=function(t,r){this.disable(),this._opt=i.defaults(i.clone(r)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(e.on("mousedown",n),e.on("mousemove",o),e.on("mouseup",a)),!0!==t&&"scale"!==t&&"zoom"!==t||(e.on("mousewheel",s),e.on("pinch",f))},this.disable=function(){e.off("mousedown",n),e.off("mousemove",o),e.off("mouseup",a),e.off("mousewheel",s),e.off("pinch",f)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}function l(e){if(!(o.isMiddleOrRightButtonOnMouseUpDown(e)||e.target&&e.target.draggable)){var t=e.offsetX,n=e.offsetY;this.pointerChecker&&this.pointerChecker(e,t,n)&&(this._x=t,this._y=n,this._dragging=!0)}}function u(e){if(this._dragging&&g("moveOnMouseMove",e,this._opt)&&"pinch"!==e.gestureEvent&&!a.isTaken(this._zr,"globalPan")){var t=e.offsetX,n=e.offsetY,i=this._x,r=this._y,s=t-i,l=n-r;this._x=t,this._y=n,this._opt.preventDefaultMouseMove&&o.stop(e.event),p(this,"pan","moveOnMouseMove",e,{dx:s,dy:l,oldX:i,oldY:r,newX:t,newY:n})}}function c(e){o.isMiddleOrRightButtonOnMouseUpDown(e)||(this._dragging=!1)}function h(e){var t=g("zoomOnMouseWheel",e,this._opt),n=g("moveOnMouseWheel",e,this._opt),i=e.wheelDelta,r=Math.abs(i),o=e.offsetX,a=e.offsetY;if(0!==i&&(t||n)){if(t){var s=r>3?1.4:r>1?1.2:1.1,l=i>0?s:1/s;f(this,"zoom","zoomOnMouseWheel",e,{scale:l,originX:o,originY:a})}if(n){var u=Math.abs(i),c=(i>0?1:-1)*(u>3?.4:u>1?.15:.05);f(this,"scrollMove","moveOnMouseWheel",e,{scrollDelta:c,originX:o,originY:a})}}}function d(e){if(!a.isTaken(this._zr,"globalPan")){var t=e.pinchScale>1?1.1:1/1.1;f(this,"zoom",null,e,{scale:t,originX:e.pinchX,originY:e.pinchY})}}function f(e,t,n,i,r){e.pointerChecker&&e.pointerChecker(i,r.originX,r.originY)&&(o.stop(i.event),p(e,t,n,i,r))}function p(e,t,n,r,o){o.isAvailableBehavior=i.bind(g,null,n,r),e.trigger(t,o)}function g(e,t,n){var r=n[e];return!e||r&&(!i.isString(r)||t.event[r+"Key"])}i.mixin(s,r);var m=s;e.exports=m},"574c":function(e,t){function n(e){var t=e.findComponents({mainType:"legend"});t&&t.length&&e.filterSeries((function(e){for(var n=0;n40&&(u=Math.max(1,Math.floor(s/40)));for(var c=a[0],d=e.dataToCoord(c+1)-e.dataToCoord(c),f=Math.abs(d*Math.cos(i)),p=Math.abs(d*Math.sin(i)),g=0,m=0;c<=a[1];c+=u){var v=0,y=0,b=r.getBoundingRect(n(c),t.font,"center","top");v=1.3*b.width,y=1.3*b.height,g=Math.max(g,v,7),m=Math.max(m,y,7)}var w=g/f,x=m/p;isNaN(w)&&(w=1/0),isNaN(x)&&(x=1/0);var _=Math.max(0,Math.floor(Math.min(w,x))),I=h(e.model),C=e.getExtent(),S=I.lastAutoInterval,D=I.lastTickCount;return null!=S&&null!=D&&Math.abs(S-_)<=1&&Math.abs(D-s)<=1&&S>_&&I.axisExtend0===C[0]&&I.axisExtend1===C[1]?_=S:(I.lastTickCount=s,I.lastAutoInterval=_,I.axisExtend0=C[0],I.axisExtend1=C[1]),_}function M(e){var t=e.getLabelModel();return{axisRotate:e.getRotate?e.getRotate():e.isHorizontal&&!e.isHorizontal()?90:0,labelRotate:t.get("rotate")||0,font:t.getFont()}}function I(e,t,n){var i=l(e),r=e.scale,o=r.getExtent(),a=e.getLabelModel(),s=[],u=Math.max((t||0)+1,1),h=o[0],d=r.count();0!==h&&u>1&&d/u>2&&(h=Math.round(Math.ceil(h/u)*u));var f=c(e),p=a.get("showMinLabel")||f,g=a.get("showMaxLabel")||f;p&&h!==o[0]&&v(o[0]);for(var m=h;m<=o[1];m+=u)v(m);function v(e){s.push(n?e:{formattedLabel:i(e),rawLabel:r.getLabel(e),tickValue:e})}return g&&m-u!==o[1]&&v(o[1]),s}function C(e,t,n){var r=e.scale,o=l(e),a=[];return i.each(r.getTicks(),(function(e){var i=r.getLabel(e);t(e,i)&&a.push(n?e:{formattedLabel:o(e),rawLabel:i,tickValue:e})})),a}t.createAxisLabels=d,t.createAxisTicks=f,t.calculateCategoryInterval=_},"58e7":function(e,t,n){"use strict";var i=n("c477"),r=n("5a56"),o=n("c639"),a=n("2dc2"),s=n("ceb4"),l=n("ac7e"),u=Object.assign;e.exports=!u||n("3d08")((function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=u({},e)[n]||Object.keys(u({},t)).join("")!=i}))?function(e,t){var n=s(e),u=arguments.length,c=1,h=o.f,d=a.f;while(u>c){var f,p=l(arguments[c++]),g=h?r(p).concat(h(p)):r(p),m=g.length,v=0;while(m>v)f=g[v++],i&&!d.call(p,f)||(n[f]=p[f])}return n}:u},"58e8":function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e){return{methods:{focus:function(){this.$refs[e].focus()}}}}},"59e0":function(e,t,n){var i=n("9b58"),r=n("be16").Buffer;function o(e){var t=r.allocUnsafe(4);return t.writeUInt32BE(e,0),t}e.exports=function(e,t){var n,a=r.alloc(0),s=0;while(a.length=0;o--)i.push(r[o])}}t.eachAfter=n,t.eachBefore=i},"5b7d":function(e,t,n){var i=n("ae03"),r=n("357b"),o=n("954d"),a=n("2636");function s(e,t){i.call(this,e,t,["linearGradient","radialGradient"],"__gradient_in_use__")}r.inherits(s,i),s.prototype.addWithoutUpdate=function(e,t){if(t&&t.style){var n=this;r.each(["fill","stroke"],(function(i){if(t.style[i]&&("linear"===t.style[i].type||"radial"===t.style[i].type)){var r,o=t.style[i],a=n.getDefs(!0);o._dom?(r=o._dom,a.contains(o._dom)||n.addDom(r)):r=n.add(o),n.markUsed(t);var s=r.getAttribute("id");e.setAttribute(i,"url(#"+s+")")}}))}},s.prototype.add=function(e){var t;if("linear"===e.type)t=this.createElement("linearGradient");else{if("radial"!==e.type)return o("Illegal gradient type."),null;t=this.createElement("radialGradient")}return e.id=e.id||this.nextId++,t.setAttribute("id","zr"+this._zrId+"-gradient-"+e.id),this.updateDom(e,t),this.addDom(t),t},s.prototype.update=function(e){var t=this;i.prototype.update.call(this,e,(function(){var n=e.type,i=e._dom.tagName;"linear"===n&&"linearGradient"===i||"radial"===n&&"radialGradient"===i?t.updateDom(e,e._dom):(t.removeDom(e),t.add(e))}))},s.prototype.updateDom=function(e,t){if("linear"===e.type)t.setAttribute("x1",e.x),t.setAttribute("y1",e.y),t.setAttribute("x2",e.x2),t.setAttribute("y2",e.y2);else{if("radial"!==e.type)return void o("Illegal gradient type.");t.setAttribute("cx",e.x),t.setAttribute("cy",e.y),t.setAttribute("r",e.r)}e.global?t.setAttribute("gradientUnits","userSpaceOnUse"):t.setAttribute("gradientUnits","objectBoundingBox"),t.innerHTML="";for(var n=e.colorStops,i=0,r=n.length;i-1){var u=a.parse(l)[3],c=a.toHex(l);s.setAttribute("stop-color","#"+c),s.setAttribute("stop-opacity",u)}else s.setAttribute("stop-color",n[i].color);t.appendChild(s)}e._dom=t},s.prototype.markUsed=function(e){if(e.style){var t=e.style.fill;t&&t._dom&&i.prototype.markUsed.call(this,t._dom),t=e.style.stroke,t&&t._dom&&i.prototype.markUsed.call(this,t._dom)}};var l=s;e.exports=l},"5bde":function(e,t,n){var i=n("2fcc"),r=n("076f"),o=n("714d"),a=n("5ed9"),s=n("2944"),l=i.extendChartView({type:"effectScatter",init:function(){this._symbolDraw=new r(o)},render:function(e,t,n){var i=e.getData(),r=this._symbolDraw;r.updateData(i),this.group.add(r.group)},updateTransform:function(e,t,n){var i=e.getData();this.group.dirty();var r=s().reset(e);r.progress&&r.progress({start:0,end:i.count()},i),this._symbolDraw.updateLayout(i)},_updateGroupTransform:function(e){var t=e.coordinateSystem;t&&t.getRoamTransform&&(this.group.transform=a.clone(t.getRoamTransform()),this.group.decomposeTransform())},remove:function(e,t){this._symbolDraw&&this._symbolDraw.remove(t)},dispose:function(){}});e.exports=l},"5c06":function(e,t,n){"use strict";const i=n("7fdc"),r=n("23c4");function o(e){r.call(this,e),this.enc="pem"}i(o,r),e.exports=o,o.prototype.encode=function(e,t){const n=r.prototype.encode.call(this,e),i=n.toString("base64"),o=["-----BEGIN "+t.label+"-----"];for(let r=0;r=0&&(this.delFromStorage(e),this._roots.splice(a,1),e instanceof o&&e.delChildrenFromStorage(this))}},addToStorage:function(e){return e&&(e.__storage=this,e.dirty(!1)),this},delFromStorage:function(e){return e&&(e.__storage=null),this},dispose:function(){this._renderList=this._roots=null},displayableSortFunc:s};var u=l;e.exports=u},"5c4c":function(e,t,n){var i=n("357b"),r=n("cb77"),o=n("4e50"),a=n("b91a"),s=i.each,l=r.asc,u=function(e,t,n,i){this._dimName=e,this._axisIndex=t,this._valueWindow,this._percentWindow,this._dataExtent,this._minMaxSpan,this.ecModel=i,this._dataZoomModel=n};function c(e,t,n){var i=[1/0,-1/0];return s(n,(function(e){var n=e.getData();n&&s(n.mapDimension(t,!0),(function(e){var t=n.getApproximateExtent(e);t[0]i[1]&&(i[1]=t[1])}))})),i[1]0?0:NaN);var a=n.getMax(!0);return null!=a&&"dataMax"!==a&&"function"!==typeof a?t[1]=a:r&&(t[1]=o>0?o-1:NaN),n.get("scale",!0)||(t[0]>0&&(t[0]=0),t[1]<0&&(t[1]=0)),t}function d(e,t){var n=e.getAxisModel(),i=e._percentWindow,o=e._valueWindow;if(i){var a=r.getPixelPrecision(o,[0,500]);a=Math.min(a,20);var s=t||0===i[0]&&100===i[1];n.setRange(s?null:+o[0].toFixed(a),s?null:+o[1].toFixed(a))}}function f(e){var t=e._minMaxSpan={},n=e._dataZoomModel,i=e._dataExtent;s(["min","max"],(function(o){var a=n.get(o+"Span"),s=n.get(o+"ValueSpan");null!=s&&(s=e.getAxisModel().axis.scale.parse(s)),null!=s?a=r.linearMap(i[0]+s,i,[0,100],!0):null!=a&&(s=r.linearMap(a,[0,100],i,!0)-i[0]),t[o+"Span"]=a,t[o+"ValueSpan"]=s}))}u.prototype={constructor:u,hostedBy:function(e){return this._dataZoomModel===e},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var e=[],t=this.ecModel;return t.eachSeries((function(n){if(o.isCoordSupported(n.get("coordinateSystem"))){var i=this._dimName,r=t.queryComponents({mainType:i+"Axis",index:n.get(i+"AxisIndex"),id:n.get(i+"AxisId")})[0];this._axisIndex===(r&&r.componentIndex)&&e.push(n)}}),this),e},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},getOtherAxisModel:function(){var e,t,n,i=this._dimName,r=this.ecModel,o=this.getAxisModel(),a="x"===i||"y"===i;return a?(t="gridIndex",e="x"===i?"y":"x"):(t="polarIndex",e="angle"===i?"radius":"angle"),r.eachComponent(e+"Axis",(function(e){(e.get(t)||0)===(o.get(t)||0)&&(n=e)})),n},getMinMaxSpan:function(){return i.clone(this._minMaxSpan)},calculateDataWindow:function(e){var t,n=this._dataExtent,i=this.getAxisModel(),o=i.axis.scale,u=this._dataZoomModel.getRangePropMode(),c=[0,100],h=[],d=[];s(["start","end"],(function(i,a){var s=e[i],l=e[i+"Value"];"percent"===u[a]?(null==s&&(s=c[a]),l=o.parse(r.linearMap(s,c,n))):(t=!0,l=null==l?n[a]:o.parse(l),s=r.linearMap(l,n,c)),d[a]=l,h[a]=s})),l(d),l(h);var f=this._minMaxSpan;function p(e,t,n,i,s){var l=s?"Span":"ValueSpan";a(0,e,n,"all",f["min"+l],f["max"+l]);for(var u=0;u<2;u++)t[u]=r.linearMap(e[u],n,i,!0),s&&(t[u]=o.parse(t[u]))}return t?p(d,h,n,c,!1):p(h,d,c,n,!0),{valueWindow:d,percentWindow:h}},reset:function(e){if(e===this._dataZoomModel){var t=this.getTargetSeriesModels();this._dataExtent=c(this,this._dimName,t),f(this);var n=this.calculateDataWindow(e.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,d(this)}},restore:function(e){e===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,d(this,!0))},filterData:function(e,t){if(e===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=e.get("filterMode"),o=this._valueWindow;"none"!==r&&s(i,(function(e){var t=e.getData(),i=t.mapDimension(n,!0);i.length&&("weakFilter"===r?t.filterSelf((function(e){for(var n,r,a,s=0;so[1];if(u&&!c&&!h)return!0;u&&(a=!0),c&&(n=!0),h&&(r=!0)}return a&&n&&r})):s(i,(function(n){if("empty"===r)e.setData(t=t.map(n,(function(e){return a(e)?e:NaN})));else{var i={};i[n]=o,t.selectRange(i)}})),s(i,(function(e){t.setApproximateExtent(o,e)})))}))}function a(e){return e>=o[0]&&e<=o[1]}}};var p=u;e.exports=p},"5d26":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("97cc"),a=n("44e1"),s=i.PRIORITY.VISUAL.COMPONENT;function l(e,t,n,i){for(var r=t.targetVisuals[i],o=a.prepareVisualTypes(r),s={color:e.getData().getVisual("color")},l=0,u=o.length;l=0;a--){var s=n[a].dimension,l=e.dimensions[s],u=e.getDimensionInfo(l);if(i=u&&u.coordDim,"x"===i||"y"===i){o=n[a];break}}if(o){var h=t.getAxis(i),d=r.map(o.stops,(function(e){return{coord:h.toGlobalCoord(h.dataToCoord(e.value)),color:e.color}})),f=d.length,p=o.outerColors.slice();f&&d[0].coord>d[f-1].coord&&(d.reverse(),p.reverse());var g=10,m=d[0].coord-g,v=d[f-1].coord+g,y=v-m;if(y<.001)return"transparent";r.each(d,(function(e){e.offset=(e.coord-m)/y})),d.push({offset:f?d[f-1].offset:.5,color:p[1]||"transparent"}),d.unshift({offset:f?d[0].offset:.5,color:p[0]||"transparent"});var b=new c.LinearGradient(0,0,0,0,d,!0);return b[i]=m,b[i+"2"]=v,b}}}function T(e,t,n){var i=e.get("showAllSymbol"),o="auto"===i;if(!i||o){var a=n.getAxesByScale("ordinal")[0];if(a&&(!o||!A(a,t))){var s=t.mapDimension(a.dim),l={};return r.each(a.getViewLabels(),(function(e){l[e.tickValue]=1})),function(e){return!l.hasOwnProperty(t.get(s,e))}}}}function A(e,t){var n=e.getExtent(),i=Math.abs(n[1]-n[0])/e.scale.count();isNaN(i)&&(i=0);for(var r=t.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}function k(e,t,n){if("cartesian2d"===e.type){var i=e.getBaseAxis().isHorizontal(),r=w(e,t,n);if(!n.get("clip",!0)){var o=r.shape,a=Math.max(o.width,o.height);i?(o.y-=a,o.height+=2*a):(o.x-=a,o.width+=2*a)}return r}return x(e,t,n)}var E=g.extend({type:"line",init:function(){var e=new c.Group,t=new s;this.group.add(t.group),this._symbolDraw=t,this._lineGroup=e},render:function(e,t,n){var i=e.coordinateSystem,o=this.group,a=e.getData(),s=e.getModel("lineStyle"),l=e.getModel("areaStyle"),u=a.mapArray(a.getItemLayout),c="polar"===i.type,h=this._coordSys,d=this._symbolDraw,f=this._polyline,p=this._polygon,g=this._lineGroup,m=e.get("animation"),y=!l.isEmpty(),b=l.get("origin"),w=v(i,a,b),x=C(i,a,w),M=e.get("showSymbol"),A=M&&!c&&T(e,a,i),E=this._data;E&&E.eachItemGraphicEl((function(e,t){e.__temp&&(o.remove(e),E.setItemGraphicEl(t,null))})),M||d.remove(),o.add(g);var N,O=!c&&e.get("step");i&&i.getArea&&e.get("clip",!0)&&(N=i.getArea(),null!=N.width?(N.x-=.1,N.y-=.1,N.width+=.2,N.height+=.2):N.r0&&(N.r0-=.5,N.r1+=.5)),this._clipShapeForSymbol=N,f&&h.type===i.type&&O===this._step?(y&&!p?p=this._newPolygon(u,x,i,m):p&&!y&&(g.remove(p),p=this._polygon=null),g.setClipPath(k(i,!1,e)),M&&d.updateData(a,{isIgnore:A,clipShape:N}),a.eachItemGraphicEl((function(e){e.stopAnimation(!0)})),_(this._stackedOnPoints,x)&&_(this._points,u)||(m?this._updateAnimation(a,x,i,n,O,b):(O&&(u=S(u,i,O),x=S(x,i,O)),f.setShape({points:u}),p&&p.setShape({points:u,stackedOnPoints:x})))):(M&&d.updateData(a,{isIgnore:A,clipShape:N}),O&&(u=S(u,i,O),x=S(x,i,O)),f=this._newPolyline(u,i,m),y&&(p=this._newPolygon(u,x,i,m)),g.setClipPath(k(i,!0,e)));var P=D(a,i)||a.getVisual("color");f.useStyle(r.defaults(s.getLineStyle(),{fill:"none",stroke:P,lineJoin:"bevel"}));var L=e.get("smooth");if(L=I(e.get("smooth")),f.setShape({smooth:L,smoothMonotone:e.get("smoothMonotone"),connectNulls:e.get("connectNulls")}),p){var B=a.getCalculationInfo("stackedOnSeries"),j=0;p.useStyle(r.defaults(l.getAreaStyle(),{fill:P,opacity:.7,lineJoin:"bevel"})),B&&(j=I(B.get("smooth"))),p.setShape({smooth:L,stackedOnSmooth:j,smoothMonotone:e.get("smoothMonotone"),connectNulls:e.get("connectNulls")})}this._data=a,this._coordSys=i,this._stackedOnPoints=x,this._points=u,this._step=O,this._valueOrigin=b},dispose:function(){},highlight:function(e,t,n,i){var r=e.getData(),o=h.queryDataIndex(r,i);if(!(o instanceof Array)&&null!=o&&o>=0){var a=r.getItemGraphicEl(o);if(!a){var s=r.getItemLayout(o);if(!s)return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(s[0],s[1]))return;a=new l(r,o),a.position=s,a.setZ(e.get("zlevel"),e.get("z")),a.ignore=isNaN(s[0])||isNaN(s[1]),a.__temp=!0,r.setItemGraphicEl(o,a),a.stopSymbolAnimation(!0),this.group.add(a)}a.highlight()}else g.prototype.highlight.call(this,e,t,n,i)},downplay:function(e,t,n,i){var r=e.getData(),o=h.queryDataIndex(r,i);if(null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else g.prototype.downplay.call(this,e,t,n,i)},_newPolyline:function(e){var t=this._polyline;return t&&this._lineGroup.remove(t),t=new f({shape:{points:e},silent:!0,z2:10}),this._lineGroup.add(t),this._polyline=t,t},_newPolygon:function(e,t){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new p({shape:{points:e,stackedOnPoints:t},silent:!0}),this._lineGroup.add(n),this._polygon=n,n},_updateAnimation:function(e,t,n,i,r,o){var a=this._polyline,s=this._polygon,l=e.hostModel,h=u(this._data,e,this._stackedOnPoints,t,this._coordSys,n,this._valueOrigin,o),d=h.current,f=h.stackedOnCurrent,p=h.next,g=h.stackedOnNext;if(r&&(d=S(h.current,n,r),f=S(h.stackedOnCurrent,n,r),p=S(h.next,n,r),g=S(h.stackedOnNext,n,r)),M(d,p)>3e3||s&&M(f,g)>3e3)return a.setShape({points:p}),void(s&&s.setShape({points:p,stackedOnPoints:g}));a.shape.__points=h.current,a.shape.points=d,c.updateProps(a,{shape:{points:p}},l),s&&(s.setShape({points:d,stackedOnPoints:f}),c.updateProps(s,{shape:{points:p,stackedOnPoints:g}},l));for(var m=[],v=h.status,y=0;y=0;n--)s.asc(t[n])},getActiveState:function(e){var t=this.activeIntervals;if(!t.length)return"normal";if(null==e||isNaN(e))return"inactive";if(1===t.length){var n=t[0];if(n[0]<=e&&e<=n[1])return"active"}else for(var i=0,r=t.length;i1e4||!this._symbolDraw.isPersistent())return{update:!0};var r=a().reset(e);r.progress&&r.progress({start:0,end:i.count()},i),this._symbolDraw.updateLayout(i)},_getClipShape:function(e){var t=e.coordinateSystem,n=t&&t.getArea&&t.getArea();return e.get("clip",!0)?n:null},_updateSymbolDraw:function(e,t){var n=this._symbolDraw,i=t.pipelineContext,a=i.large;return n&&a===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=a?new o:new r,this._isLargeDraw=a,this.group.removeAll()),this.group.add(n.group),n},remove:function(e,t){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},dispose:function(){}})},6251:function(e,t,n){(function(t,n){var i;if(t.process&&t.process.browser)i="utf-8";else if(t.process&&t.process.version){var r=parseInt(n.version.split(".")[0].slice(1),10);i=r>=6?"utf-8":"binary"}else i="utf-8";e.exports=i}).call(this,n("a032"),n("c32c"))},"625f":function(e,t){var n={};function i(e,t){n[e]=t}function r(e){return n[e]}t.register=i,t.get=r},"626c":function(e,t){function n(e,t){var n,i,r,o,a,s=t.x,l=t.y,u=t.width,c=t.height,h=t.r;u<0&&(s+=u,u=-u),c<0&&(l+=c,c=-c),"number"===typeof h?n=i=r=o=h:h instanceof Array?1===h.length?n=i=r=o=h[0]:2===h.length?(n=r=h[0],i=o=h[1]):3===h.length?(n=h[0],i=o=h[1],r=h[2]):(n=h[0],i=h[1],r=h[2],o=h[3]):n=i=r=o=0,n+i>u&&(a=n+i,n*=u/a,i*=u/a),r+o>u&&(a=r+o,r*=u/a,o*=u/a),i+r>c&&(a=i+r,i*=c/a,r*=c/a),n+o>c&&(a=n+o,n*=c/a,o*=c/a),e.moveTo(s+n,l),e.lineTo(s+u-i,l),0!==i&&e.arc(s+u-i,l+i,i,-Math.PI/2,0),e.lineTo(s+u,l+c-r),0!==r&&e.arc(s+u-r,l+c-r,r,0,Math.PI/2),e.lineTo(s+o,l+c),0!==o&&e.arc(s+o,l+c-o,o,Math.PI/2,Math.PI),e.lineTo(s,l+n),0!==n&&e.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}t.buildPath=n},"627a":function(e,t,n){var i=n("f298"),r=n("357b"),o=n("0634");function a(e,t){i.Group.call(this);var n=new i.Polygon,r=new i.Polyline,o=new i.Text;this.add(n),this.add(r),this.add(o),this.highDownOnUpdate=function(e,t){"emphasis"===t?(r.ignore=r.hoverIgnore,o.ignore=o.hoverIgnore):(r.ignore=r.normalIgnore,o.ignore=o.normalIgnore)},this.updateData(e,t,!0)}var s=a.prototype,l=["itemStyle","opacity"];s.updateData=function(e,t,n){var o=this.childAt(0),a=e.hostModel,s=e.getItemModel(t),u=e.getItemLayout(t),c=e.getItemModel(t).get(l);c=null==c?1:c,o.useStyle({}),n?(o.setShape({points:u.points}),o.setStyle({opacity:0}),i.initProps(o,{style:{opacity:c}},a,t)):i.updateProps(o,{style:{opacity:c},shape:{points:u.points}},a,t);var h=s.getModel("itemStyle"),d=e.getItemVisual(t,"color");o.setStyle(r.defaults({lineJoin:"round",fill:d},h.getItemStyle(["opacity"]))),o.hoverStyle=h.getModel("emphasis").getItemStyle(),this._updateLabel(e,t),i.setHoverStyle(this)},s._updateLabel=function(e,t){var n=this.childAt(1),r=this.childAt(2),o=e.hostModel,a=e.getItemModel(t),s=e.getItemLayout(t),l=s.label,u=e.getItemVisual(t,"color");i.updateProps(n,{shape:{points:l.linePoints||l.linePoints}},o,t),i.updateProps(r,{style:{x:l.x,y:l.y}},o,t),r.attr({rotation:l.rotation,origin:[l.x,l.y],z2:10});var c=a.getModel("label"),h=a.getModel("emphasis.label"),d=a.getModel("labelLine"),f=a.getModel("emphasis.labelLine");u=e.getItemVisual(t,"color");i.setLabelStyle(r.style,r.hoverStyle={},c,h,{labelFetcher:e.hostModel,labelDataIndex:t,defaultText:e.getName(t),autoColor:u,useInsideStyle:!!l.inside},{textAlign:l.textAlign,textVerticalAlign:l.verticalAlign}),r.ignore=r.normalIgnore=!c.get("show"),r.hoverIgnore=!h.get("show"),n.ignore=n.normalIgnore=!d.get("show"),n.hoverIgnore=!f.get("show"),n.setStyle({stroke:u}),n.setStyle(d.getModel("lineStyle").getLineStyle()),n.hoverStyle=f.getModel("lineStyle").getLineStyle()},r.inherits(a,i.Group);var u=o.extend({type:"funnel",render:function(e,t,n){var i=e.getData(),r=this._data,o=this.group;i.diff(r).add((function(e){var t=new a(i,e);i.setItemGraphicEl(e,t),o.add(t)})).update((function(e,t){var n=r.getItemGraphicEl(t);n.updateData(i,e),o.add(n),i.setItemGraphicEl(e,n)})).remove((function(e){var t=r.getItemGraphicEl(e);o.remove(t)})).execute(),this._data=i},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}}),c=u;e.exports=c},"630a":function(e,t,n){var i=n("f59f");function r(e){this._setting=e||{},this._extent=[1/0,-1/0],this._interval=0,this.init&&this.init.apply(this,arguments)}r.prototype.parse=function(e){return e},r.prototype.getSetting=function(e){return this._setting[e]},r.prototype.contain=function(e){var t=this._extent;return e>=t[0]&&e<=t[1]},r.prototype.normalize=function(e){var t=this._extent;return t[1]===t[0]?.5:(e-t[0])/(t[1]-t[0])},r.prototype.scale=function(e){var t=this._extent;return e*(t[1]-t[0])+t[0]},r.prototype.unionExtent=function(e){var t=this._extent;e[0]t[1]&&(t[1]=e[1])},r.prototype.unionExtentFromData=function(e,t){this.unionExtent(e.getApproximateExtent(t))},r.prototype.getExtent=function(){return this._extent.slice()},r.prototype.setExtent=function(e,t){var n=this._extent;isNaN(e)||(n[0]=e),isNaN(t)||(n[1]=t)},r.prototype.isBlank=function(){return this._isBlank},r.prototype.setBlank=function(e){this._isBlank=e},r.prototype.getLabel=null,i.enableClassExtend(r),i.enableClassManagement(r,{registerWhenExtend:!0});var o=r;e.exports=o},6320:function(e,t,n){var i=n("2fcc");n("5fb2"),n("b91a3"),n("c68b");var r=n("3951"),o=n("d396"),a=n("e559"),s=n("f2b9"),l=n("3e97");i.registerVisual(r("radar")),i.registerVisual(o("radar","circle")),i.registerLayout(a),i.registerProcessor(s("radar")),i.registerPreprocessor(l)},6396:function(e,t){e.exports=function(){}},"63af":function(e,t,n){"use strict";t.sha1=n("ce0b"),t.sha224=n("830e"),t.sha256=n("d115"),t.sha384=n("012f"),t.sha512=n("70c5")},"63b3":function(e,t,n){"use strict";var i=t;i.base=n("e6a3"),i.short=n("d4f1"),i.mont=n("a158"),i.edwards=n("df7c")},"63dc":function(e,t,n){"use strict";var i=n("a817");e.exports=i.isStandardBrowserEnv()?function(){return{write:function(e,t,n,r,o,a){var s=[];s.push(e+"="+encodeURIComponent(t)),i.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),i.isString(r)&&s.push("path="+r),i.isString(o)&&s.push("domain="+o),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},"63de":function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},"63e3":function(e,t,n){var i=n("44e1"),r=n("2636"),o=n("357b"),a=o.isArray,s="itemStyle",l={seriesType:"treemap",reset:function(e,t,n,i){var r=e.getData().tree,o=r.root;o.isRemoved()||u(o,{},e.getViewRoot().getAncestors(),e)}};function u(e,t,n,i){var r=e.getModel(),a=e.getLayout();if(a&&!a.invisible&&a.isInView){var l,f=e.getModel(s),g=c(f,t,i),v=f.get("borderColor"),y=f.get("borderColorSaturation");null!=y&&(l=h(g,e),v=d(y,l)),e.setVisual("borderColor",v);var b=e.viewChildren;if(b&&b.length){var w=p(e,r,a,f,g,b);o.each(b,(function(e,t){if(e.depth>=n.length||e===n[e.depth]){var o=m(r,g,e,t,w,i);u(e,o,n,i)}}))}else l=h(g,e),e.setVisual("color",l)}}function c(e,t,n){var i=o.extend({},t),r=n.designatedVisualItemStyle;return o.each(["color","colorAlpha","colorSaturation"],(function(n){r[n]=t[n];var o=e.get(n);r[n]=null,null!=o&&(i[n]=o)})),i}function h(e){var t=f(e,"color");if(t){var n=f(e,"colorAlpha"),i=f(e,"colorSaturation");return i&&(t=r.modifyHSL(t,null,null,i)),n&&(t=r.modifyAlpha(t,n)),t}}function d(e,t){return null!=t?r.modifyHSL(t,null,null,e):null}function f(e,t){var n=e[t];if(null!=n&&"none"!==n)return n}function p(e,t,n,r,o,a){if(a&&a.length){var s=g(t,"color")||null!=o.color&&"none"!==o.color&&(g(t,"colorAlpha")||g(t,"colorSaturation"));if(s){var l=t.get("visualMin"),u=t.get("visualMax"),c=n.dataExtent.slice();null!=l&&lc[1]&&(c[1]=u);var h=t.get("colorMappingBy"),d={type:s.name,dataExtent:c,visual:s.range};"color"!==d.type||"index"!==h&&"id"!==h?d.mappingMethod="linear":(d.mappingMethod="category",d.loop=!0);var f=new i(d);return f.__drColorMappingBy=h,f}}}function g(e,t){var n=e.get(t);return a(n)&&n.length?{name:t,range:n}:null}function m(e,t,n,i,r,a){var s=o.extend({},t);if(r){var l=r.type,u="color"===l&&r.__drColorMappingBy,c="index"===u?i:"id"===u?a.mapIdToIndex(n.getId()):n.getValue(e.get("visualDimension"));s[l]=r.mapValueToVisual(c)}return s}e.exports=l},6458:function(e,t,n){"use strict";var i,r=n("7a11"); +/** + * Checks if an event is supported in the current execution environment. + * + * NOTE: This will not work correctly for non-generic events such as `change`, + * `reset`, `load`, `error`, and `select`. + * + * Borrows from Modernizr. + * + * @param {string} eventNameSuffix Event name, e.g. "click". + * @param {?boolean} capture Check if the capture phase is supported. + * @return {boolean} True if the event is supported. + * @internal + * @license Modernizr 3.0.0pre (Custom Build) | MIT + */ +function o(e,t){if(!r.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,o=n in document;if(!o){var a=document.createElement("div");a.setAttribute(n,"return;"),o="function"===typeof a[n]}return!o&&i&&"wheel"===e&&(o=document.implementation.hasFeature("Events.wheel","3.0")),o}r.canUseDOM&&(i=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),e.exports=o},"64b2":function(e,t,n){"use strict";(function(t,i){function r(e){var t=this;this.next=null,this.entry=null,this.finish=function(){W(t,e)}}var o;e.exports=T,T.WritableState=D;var a={deprecate:n("54ac")},s=n("4337"),l=n("e6c7").Buffer,u=t.Uint8Array||function(){};function c(e){return l.from(e)}function h(e){return l.isBuffer(e)||e instanceof u}var d,f=n("b3df"),p=n("d0f7"),g=p.getHighWaterMark,m=n("b8fc").codes,v=m.ERR_INVALID_ARG_TYPE,y=m.ERR_METHOD_NOT_IMPLEMENTED,b=m.ERR_MULTIPLE_CALLBACK,w=m.ERR_STREAM_CANNOT_PIPE,x=m.ERR_STREAM_DESTROYED,_=m.ERR_STREAM_NULL_VALUES,M=m.ERR_STREAM_WRITE_AFTER_END,I=m.ERR_UNKNOWN_ENCODING,C=f.errorOrDestroy;function S(){}function D(e,t,i){o=o||n("8ce7"),e=e||{},"boolean"!==typeof i&&(i=t instanceof o),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=g(this,e,"writableHighWaterMark",i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===e.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){B(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new r(this)}function T(e){o=o||n("8ce7");var t=this instanceof o;if(!t&&!d.call(T,this))return new T(e);this._writableState=new D(e,this,t),this.writable=!0,e&&("function"===typeof e.write&&(this._write=e.write),"function"===typeof e.writev&&(this._writev=e.writev),"function"===typeof e.destroy&&(this._destroy=e.destroy),"function"===typeof e.final&&(this._final=e.final)),s.call(this)}function A(e,t){var n=new M;C(e,n),i.nextTick(t,n)}function k(e,t,n,r){var o;return null===n?o=new _:"string"===typeof n||t.objectMode||(o=new v("chunk",["string","Buffer"],n)),!o||(C(e,o),i.nextTick(r,o),!1)}function E(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!==typeof t||(t=l.from(t,n)),t}function N(e,t,n,i,r,o){if(!n){var a=E(t,i,r);i!==a&&(n=!0,r="buffer",i=a)}var s=t.objectMode?1:i.length;t.length+=s;var l=t.length-1))throw new I(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(T.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(T.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),T.prototype._write=function(e,t,n){n(new y("_write()"))},T.prototype._writev=null,T.prototype.end=function(e,t,n){var i=this._writableState;return"function"===typeof e?(n=e,e=null,t=null):"function"===typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||U(this,i,n),this},Object.defineProperty(T.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(T.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),T.prototype.destroy=f.destroy,T.prototype._undestroy=f.undestroy,T.prototype._destroy=function(e,t){t(e)}}).call(this,n("a032"),n("c32c"))},"64f5":function(e,t){var n=32,i=7;function r(e){var t=0;while(e>=n)t|=1&e,e>>=1;return e+t}function o(e,t,n,i){var r=t+1;if(r===n)return 1;if(i(e[r++],e[t])<0){while(r=0)r++;return r-t}function a(e,t,n){n--;while(t>>1,r(a,e[o])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:e[s+3]=e[s+2];case 2:e[s+2]=e[s+1];case 1:e[s+1]=e[s];break;default:while(u>0)e[s+u]=e[s+u-1],u--}e[s]=a}}function l(e,t,n,i,r,o){var a=0,s=0,l=1;if(o(e,t[n+r])>0){s=i-r;while(l0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{s=r+1;while(ls&&(l=s);var u=a;a=r-l,l=r-u}a++;while(a>>1);o(e,t[n+c])>0?a=c+1:l=c}return l}function u(e,t,n,i,r,o){var a=0,s=0,l=1;if(o(e,t[n+r])<0){s=r+1;while(ls&&(l=s);var u=a;a=r-l,l=r-u}else{s=i-r;while(l=0)a=l,l=1+(l<<1),l<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}a++;while(a>>1);o(e,t[n+c])<0?l=c:a=c+1}return l}function c(e,t){var n,r,o=i,a=0,s=0;a=e.length;var c=[];function h(e,t){n[s]=e,r[s]=t,s+=1}function d(){while(s>1){var e=s-2;if(e>=1&&r[e-1]<=r[e]+r[e+1]||e>=2&&r[e-2]<=r[e]+r[e-1])r[e-1]r[e+1])break;p(e)}}function f(){while(s>1){var e=s-2;e>0&&r[e-1]=i||m>=i);if(v)break;y<0&&(y=0),y+=2}if(o=y,o<1&&(o=1),1===r){for(h=0;h=0;h--)e[m+h]=e[g+h];if(0===r){w=!0;break}}if(e[p--]=c[f--],1===--s){w=!0;break}if(b=s-l(e[d],c,0,s,s-1,t),0!==b){for(p-=b,f-=b,s-=b,m=p+1,g=f+1,h=0;h=i||b>=i);if(w)break;v<0&&(v=0),v+=2}if(o=v,o<1&&(o=1),1===s){for(p-=r,d-=r,m=p+1,g=d+1,h=r-1;h>=0;h--)e[m+h]=e[g+h];e[p]=c[f]}else{if(0===s)throw new Error;for(g=p-(s-1),h=0;h=0;h--)e[m+h]=e[g+h];e[p]=c[f]}else for(g=p-(s-1),h=0;hd&&(f=d),s(e,i,i+f,i+u,t),u=f}h.pushRun(i,u),h.mergeRuns(),l-=u,i+=u}while(0!==l);h.forceMergeRuns()}}e.exports=h},"657d":function(e,t,n){e.exports=o;var i=n("5272").EventEmitter,r=n("7fdc");function o(){i.call(this)}r(o,i),o.Readable=n("d673"),o.Writable=n("f18a"),o.Duplex=n("1f7f"),o.Transform=n("3443"),o.PassThrough=n("fc9b"),o.Stream=o,o.prototype.pipe=function(e,t){var n=this;function r(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function o(){n.readable&&n.resume&&n.resume()}n.on("data",r),e.on("drain",o),e._isStdio||t&&!1===t.end||(n.on("end",s),n.on("close",l));var a=!1;function s(){a||(a=!0,e.end())}function l(){a||(a=!0,"function"===typeof e.destroy&&e.destroy())}function u(e){if(c(),0===i.listenerCount(this,"error"))throw e}function c(){n.removeListener("data",r),e.removeListener("drain",o),n.removeListener("end",s),n.removeListener("close",l),n.removeListener("error",u),e.removeListener("error",u),n.removeListener("end",c),n.removeListener("close",c),e.removeListener("close",c)}return n.on("error",u),e.on("error",u),n.on("end",c),n.on("close",c),e.on("close",c),e.emit("pipe",n),e}},6585:function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("5571"),a=n("faa9"),s=a.isNameSpecified,l=n("a51f"),u=l.legend.selector,c={all:{type:"all",title:r.clone(u.all)},inverse:{type:"inverse",title:r.clone(u.inverse)}},h=i.extendComponentModel({type:"legend.plain",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(e,t,n){this.mergeDefaultAndTheme(e,n),e.selected=e.selected||{},this._updateSelector(e)},mergeOption:function(e){h.superCall(this,"mergeOption",e),this._updateSelector(e)},_updateSelector:function(e){var t=e.selector;!0===t&&(t=e.selector=["all","inverse"]),r.isArray(t)&&r.each(t,(function(e,n){r.isString(e)&&(e={type:e}),t[n]=r.merge(e,c[e.type])}))},optionUpdated:function(){this._updateData(this.ecModel);var e=this._data;if(e[0]&&"single"===this.get("selectedMode")){for(var t=!1,n=0;n=0},getOrient:function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",itemStyle:{borderWidth:0},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:" sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}}}),d=h;e.exports=d},"65a0":function(e,t,n){var i=n("2fcc");n("738c"),n("8730"),i.registerPreprocessor((function(e){e.markLine=e.markLine||{}}))},"660a":function(e,t,n){"use strict";e.exports=o;var i=n("f203"),r=Object.create(n("44f3"));function o(e){if(!(this instanceof o))return new o(e);i.call(this,e)}r.inherits=n("7fdc"),r.inherits(o,i),o.prototype._transform=function(e,t,n){n(null,e)}},6688:function(e,t,n){(function(t){var i=n("9e89"),r=n("3bae");function o(e){var t=a(e),n=t.toRed(i.mont(e.modulus)).redPow(new i(e.publicExponent)).fromRed();return{blinder:n,unblinder:t.invm(e.modulus)}}function a(e){var t,n=e.modulus.byteLength();do{t=new i(r(n))}while(t.cmp(e.modulus)>=0||!t.umod(e.prime1)||!t.umod(e.prime2));return t}function s(e,n){var r=o(n),a=n.modulus.byteLength(),s=new i(e).mul(r.blinder).umod(n.modulus),l=s.toRed(i.mont(n.prime1)),u=s.toRed(i.mont(n.prime2)),c=n.coefficient,h=n.prime1,d=n.prime2,f=l.redPow(n.exponent1).fromRed(),p=u.redPow(n.exponent2).fromRed(),g=f.isub(p).imul(c).umod(h).imul(d);return p.iadd(g).imul(r.unblinder).umod(n.modulus).toArrayLike(t,"be",a)}s.getr=a,e.exports=s}).call(this,n("e6c7").Buffer)},"66ca":function(e,t,n){"use strict";var i=n("a817");e.exports=function(e,t,n){return i.forEach(n,(function(n){e=n(e,t)})),e}},6720:function(e,t,n){var i=n("2fcc"),r=n("88e2");n("a06b"),n("cd22"),n("22f8"),n("7597"),n("c37c"),i.registerPreprocessor(r)},6739:function(e,t,n){var i=n("a48a");e.exports=function(e,t,n){return void 0===n?i(e,t,!1):i(e,n,!1!==t)}},"67a3":function(e,t,n){var i=n("0b9d"),r=i.getLayoutRect,o=i.box,a=i.positionElement,s=n("405f"),l=n("f298");function u(e,t,n){var i=t.getBoxLayoutParams(),s=t.get("padding"),l={width:n.getWidth(),height:n.getHeight()},u=r(i,l,s);o(t.get("orient"),e,t.get("itemGap"),u.width,u.height),a(e,i,l,s)}function c(e,t){var n=s.normalizeCssArray(t.get("padding")),i=t.getItemStyle(["color","opacity"]);i.fill=t.get("backgroundColor");e=new l.Rect({shape:{x:e.x-n[3],y:e.y-n[0],width:e.width+n[1]+n[3],height:e.height+n[0]+n[2],r:t.get("borderRadius")},style:i,silent:!0,z2:-1});return e}t.layout=u,t.makeBackground=c},"68d9":function(e,t,n){var i=n("405f"),r=n("ff7e"),o=n("f298"),a=n("9736"),s=n("5ed9"),l=n("9188"),u=n("4547"),c=r.extend({makeElOption:function(e,t,n,r,o){var s=n.axis;"angle"===s.dim&&(this.animationThreshold=Math.PI/18);var l,u=s.polar,c=u.getOtherAxis(s),f=c.getExtent();l=s["dataTo"+i.capitalFirst(s.dim)](t);var p=r.get("type");if(p&&"none"!==p){var g=a.buildElStyle(r),m=d[p](s,u,l,f,g);m.style=g,e.graphicKey=m.type,e.pointer=m}var v=r.get("label.margin"),y=h(t,n,r,u,v);a.buildLabelElOption(e,n,r,o,y)}});function h(e,t,n,i,r){var a=t.axis,u=a.dataToCoord(e),c=i.getAngleAxis().getExtent()[0];c=c/180*Math.PI;var h,d,f,p=i.getRadiusAxis().getExtent();if("radius"===a.dim){var g=s.create();s.rotate(g,g,c),s.translate(g,g,[i.cx,i.cy]),h=o.applyTransform([u,-r],g);var m=t.getModel("axisLabel").get("rotate")||0,v=l.innerTextLayout(c,m*Math.PI/180,-1);d=v.textAlign,f=v.textVerticalAlign}else{var y=p[1];h=i.coordToPoint([y+r,u]);var b=i.cx,w=i.cy;d=Math.abs(h[0]-b)/y<.3?"center":h[0]>b?"left":"right",f=Math.abs(h[1]-w)/y<.3?"middle":h[1]>w?"top":"bottom"}return{position:h,align:d,verticalAlign:f}}var d={line:function(e,t,n,i,r){return"angle"===e.dim?{type:"Line",shape:a.makeLineShape(t.coordToPoint([i[0],n]),t.coordToPoint([i[1],n]))}:{type:"Circle",shape:{cx:t.cx,cy:t.cy,r:n}}},shadow:function(e,t,n,i,r){var o=Math.max(1,e.getBandWidth()),s=Math.PI/180;return"angle"===e.dim?{type:"Sector",shape:a.makeSectorShape(t.cx,t.cy,i[0],i[1],(-n-o/2)*s,(o/2-n)*s)}:{type:"Sector",shape:a.makeSectorShape(t.cx,t.cy,n-o/2,n+o/2,0,2*Math.PI)}}};u.registerAxisPointerClass("PolarAxisPointer",c);var f=c;e.exports=f},6934:function(e,t,n){(function(e){var i=n("3617");function r(e){return e._prev=e._cipher.encryptBlock(e._prev),e._prev}t.encrypt=function(t,n){while(t._cache.lengthn.getHeight()&&(i.textPosition="top",l=!0);var u=l?-5-r.height:f+8;a+r.width/2>n.getWidth()?(i.textPosition=["100%",u],i.textAlign="right"):a-r.width/2<0&&(i.textPosition=[0,u],i.textAlign="left")}}))}function v(r,o){var s,u=m[r],c=m[o],h=p[u],f=new l(h,e,e.ecModel);if(i&&null!=i.newTitle&&i.featureName===u&&(h.title=i.newTitle),u&&!c){if(d(u))s={model:f,onclick:f.option.onclick,featureName:u};else{var v=a.get(u);if(!v)return;s=new v(f,t,n)}g[u]=s}else{if(s=g[c],!s)return;s.model=f,s.ecModel=t,s.api=n}u||!c?f.get("show")&&!s.unusable?(y(f,s,u),f.setIconStatus=function(e,t){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[e]=t,i[e]&&i[e].trigger(t)},s.render&&s.render(f,t,n,i)):s.remove&&s.remove(t,n):s.dispose&&s.dispose(t,n)}function y(i,o,a){var l=i.getModel("iconStyle"),u=i.getModel("emphasis.iconStyle"),c=o.getIcons?o.getIcons():i.get("icon"),d=i.get("title")||{};if("string"===typeof c){var p=c,g=d;c={},d={},c[a]=p,d[a]=g}var m=i.iconPaths={};r.each(c,(function(a,c){var p=s.createIcon(a,{},{x:-f/2,y:-f/2,width:f,height:f});p.setStyle(l.getItemStyle()),p.hoverStyle=u.getItemStyle(),p.setStyle({text:d[c],textAlign:u.get("textAlign"),textBorderRadius:u.get("textBorderRadius"),textPadding:u.get("textPadding"),textFill:null});var g=e.getModel("tooltip");g&&g.get("show")&&p.attr("tooltip",r.extend({content:d[c],formatter:g.get("formatter",!0)||function(){return d[c]},formatterParams:{componentType:"toolbox",name:c,title:d[c],$vars:["name","title"]},position:g.get("position",!0)||"bottom"},g.option)),s.setHoverStyle(p),e.get("showTitle")&&(p.__title=d[c],p.on("mouseover",(function(){var t=u.getItemStyle(),n="vertical"===e.get("orient")?null==e.get("right")?"right":"left":null==e.get("bottom")?"bottom":"top";p.setStyle({textFill:u.get("textFill")||t.fill||t.stroke||"#000",textBackgroundColor:u.get("textBackgroundColor"),textPosition:u.get("textPosition")||n})})).on("mouseout",(function(){p.setStyle({textFill:null,textBackgroundColor:null})}))),p.trigger(i.get("iconStatus."+c)||"normal"),h.add(p),p.on("click",r.bind(o.onclick,o,t,n,c)),m[c]=p}))}},updateView:function(e,t,n,i){r.each(this._features,(function(e){e.updateView&&e.updateView(e.model,t,n,i)}))},remove:function(e,t){r.each(this._features,(function(n){n.remove&&n.remove(e,t)})),this.group.removeAll()},dispose:function(e,t){r.each(this._features,(function(n){n.dispose&&n.dispose(e,t)}))}});function d(e){return 0===e.indexOf("my")}e.exports=h},"6a7d":function(e){e.exports=JSON.parse('{"sha224WithRSAEncryption":{"sign":"rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"RSA-SHA224":{"sign":"ecdsa/rsa","hash":"sha224","id":"302d300d06096086480165030402040500041c"},"sha256WithRSAEncryption":{"sign":"rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"RSA-SHA256":{"sign":"ecdsa/rsa","hash":"sha256","id":"3031300d060960864801650304020105000420"},"sha384WithRSAEncryption":{"sign":"rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"RSA-SHA384":{"sign":"ecdsa/rsa","hash":"sha384","id":"3041300d060960864801650304020205000430"},"sha512WithRSAEncryption":{"sign":"rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA512":{"sign":"ecdsa/rsa","hash":"sha512","id":"3051300d060960864801650304020305000440"},"RSA-SHA1":{"sign":"rsa","hash":"sha1","id":"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{"sign":"ecdsa","hash":"sha1","id":""},"sha256":{"sign":"ecdsa","hash":"sha256","id":""},"sha224":{"sign":"ecdsa","hash":"sha224","id":""},"sha384":{"sign":"ecdsa","hash":"sha384","id":""},"sha512":{"sign":"ecdsa","hash":"sha512","id":""},"DSA-SHA":{"sign":"dsa","hash":"sha1","id":""},"DSA-SHA1":{"sign":"dsa","hash":"sha1","id":""},"DSA":{"sign":"dsa","hash":"sha1","id":""},"DSA-WITH-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-SHA224":{"sign":"dsa","hash":"sha224","id":""},"DSA-WITH-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-SHA256":{"sign":"dsa","hash":"sha256","id":""},"DSA-WITH-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-SHA384":{"sign":"dsa","hash":"sha384","id":""},"DSA-WITH-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-SHA512":{"sign":"dsa","hash":"sha512","id":""},"DSA-RIPEMD160":{"sign":"dsa","hash":"rmd160","id":""},"ripemd160WithRSA":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"RSA-RIPEMD160":{"sign":"rsa","hash":"rmd160","id":"3021300906052b2403020105000414"},"md5WithRSAEncryption":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"},"RSA-MD5":{"sign":"rsa","hash":"md5","id":"3020300c06082a864886f70d020505000410"}}')},"6a81":function(e,t,n){var i=n("f298"),r=n("357b");function o(e,t,n){i.Group.call(this),this._createPolyline(e,t,n)}var a=o.prototype;a._createPolyline=function(e,t,n){var r=e.getItemLayout(t),o=new i.Polyline({shape:{points:r}});this.add(o),this._updateCommonStl(e,t,n)},a.updateData=function(e,t,n){var r=e.hostModel,o=this.childAt(0),a={shape:{points:e.getItemLayout(t)}};i.updateProps(o,a,r,t),this._updateCommonStl(e,t,n)},a._updateCommonStl=function(e,t,n){var o=this.childAt(0),a=e.getItemModel(t),s=e.getItemVisual(t,"color"),l=n&&n.lineStyle,u=n&&n.hoverLineStyle;n&&!e.hasItemOption||(l=a.getModel("lineStyle").getLineStyle(),u=a.getModel("emphasis.lineStyle").getLineStyle()),o.useStyle(r.defaults({strokeNoScale:!0,fill:"none",stroke:s},l)),o.hoverStyle=u,i.setHoverStyle(this)},a.updateLayout=function(e,t){var n=this.childAt(0);n.setShape("points",e.getItemLayout(t))},r.inherits(o,i.Group);var s=o;e.exports=s},"6a9f":function(e,t,n){var i=n("357b"),r=i.createHashMap,o=i.isObject,a=i.map;function s(e){this.categories=e.categories||[],this._needCollect=e.needCollect,this._deduplication=e.deduplication,this._map}s.createByAxisModel=function(e){var t=e.option,n=t.data,i=n&&a(n,c);return new s({categories:i,needCollect:!i,deduplication:!1!==t.dedplication})};var l=s.prototype;function u(e){return e._map||(e._map=r(e.categories))}function c(e){return o(e)&&null!=e.value?e.value:e+""}l.getOrdinal=function(e){return u(this).get(e)},l.parseAndCollect=function(e){var t,n=this._needCollect;if("string"!==typeof e&&!n)return e;if(n&&!this._deduplication)return t=this.categories.length,this.categories[t]=e,t;var i=u(this);return t=i.get(e),null==t&&(n?(t=this.categories.length,this.categories[t]=e,i.set(e,t)):t=NaN),t};var h=s;e.exports=h},"6ab8":function(e,t,n){"use strict";const i=n("7fdc");function r(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function o(e,t){this.path=e,this.rethrow(t)}t.Reporter=r,r.prototype.isError=function(e){return e instanceof o},r.prototype.save=function(){const e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},r.prototype.restore=function(e){const t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},r.prototype.enterKey=function(e){return this._reporterState.path.push(e)},r.prototype.exitKey=function(e){const t=this._reporterState;t.path=t.path.slice(0,e-1)},r.prototype.leaveKey=function(e,t,n){const i=this._reporterState;this.exitKey(e),null!==i.obj&&(i.obj[t]=n)},r.prototype.path=function(){return this._reporterState.path.join("/")},r.prototype.enterObject=function(){const e=this._reporterState,t=e.obj;return e.obj={},t},r.prototype.leaveObject=function(e){const t=this._reporterState,n=t.obj;return t.obj=e,n},r.prototype.error=function(e){let t;const n=this._reporterState,i=e instanceof o;if(t=i?e:new o(n.path.map((function(e){return"["+JSON.stringify(e)+"]"})).join(""),e.message||e,e.stack),!n.options.partial)throw t;return i||n.errors.push(t),t},r.prototype.wrapResult=function(e){const t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},i(o,Error),o.prototype.rethrow=function(e){if(this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,o),!this.stack)try{throw new Error(this.message)}catch(t){this.stack=t.stack}return this}},"6bf0":function(e,t,n){var i=n("d3e5"),r=n("a51f"),o=n("625f"),a=r.toolbox.saveAsImage;function s(e){this.model=e}s.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:a.title,type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:a.lang.slice()},s.prototype.unusable=!i.canvasSupported;var l=s.prototype;l.onclick=function(e,t){var n=this.model,r=n.get("name")||e.get("title.0.text")||"echarts",o="svg"===t.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=t.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||e.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")});if("function"!==typeof MouseEvent||i.browser.ie||i.browser.edge)if(window.navigator.msSaveOrOpenBlob){var l=atob(s.split(",")[1]),u=l.length,c=new Uint8Array(u);while(u--)c[u]=l.charCodeAt(u);var h=new Blob([c]);window.navigator.msSaveOrOpenBlob(h,r+"."+a)}else{var d=n.get("lang"),f='',p=window.open();p.document.write(f)}else{var g=document.createElement("a");g.download=r+"."+a,g.target="_blank",g.href=s;var m=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});g.dispatchEvent(m)}},o.register("saveAsImage",s);var u=s;e.exports=u},"6c47":function(e,t){function n(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}e.exports=n},"6c6b":function(e,t,n){var i=n("be16").Buffer;function r(e,t,n){var i,r,a,s=-1,l=8,u=0;while(++s>s%8,e._prev=o(e._prev,n?r:a);return u}function o(e,t){var n=e.length,r=-1,o=i.allocUnsafe(e.length);e=i.concat([e,i.from([t])]);while(++r>7;return o}t.encrypt=function(e,t,n){var o=t.length,a=i.allocUnsafe(o),s=-1;while(++s0?i:n)(e)}},"6d80":function(e,t,n){var i=n("357b"),r=n("076f"),o=n("cb77"),a=n("d6e9"),s=n("43ed"),l=n("42c4");function u(e,t,n){var i=t.coordinateSystem;e.each((function(r){var a,s=e.getItemModel(r),l=o.parsePercent(s.get("x"),n.getWidth()),u=o.parsePercent(s.get("y"),n.getHeight());if(isNaN(l)||isNaN(u)){if(t.getMarkerPosition)a=t.getMarkerPosition(e.getValues(e.dimensions,r));else if(i){var c=e.get(i.dimensions[0],r),h=e.get(i.dimensions[1],r);a=i.dataToPoint([c,h])}}else a=[l,u];isNaN(l)||(a[0]=l),isNaN(u)||(a[1]=u),e.setItemLayout(r,a)}))}var c=l.extend({type:"markPoint",updateTransform:function(e,t,n){t.eachSeries((function(e){var t=e.markPointModel;t&&(u(t.getData(),e,n),this.markerGroupMap.get(e.id).updateLayout(t))}),this)},renderSeries:function(e,t,n,o){var a=e.coordinateSystem,s=e.id,l=e.getData(),c=this.markerGroupMap,d=c.get(s)||c.set(s,new r),f=h(a,e,t);t.setData(f),u(t.getData(),e,o),f.each((function(e){var n=f.getItemModel(e),r=n.getShallow("symbol"),o=n.getShallow("symbolSize"),a=n.getShallow("symbolRotate"),s=i.isFunction(r),u=i.isFunction(o),c=i.isFunction(a);if(s||u||c){var h=t.getRawValue(e),d=t.getDataParams(e);s&&(r=r(h,d)),u&&(o=o(h,d)),c&&(a=a(h,d))}f.setItemVisual(e,{symbol:r,symbolSize:o,symbolRotate:a,color:n.get("itemStyle.color")||l.getVisual("color")})})),d.updateData(f),this.group.add(d.group),f.eachItemGraphicEl((function(e){e.traverse((function(e){e.dataModel=t}))})),d.__keep=!0,d.group.silent=t.get("silent")||e.get("silent")}});function h(e,t,n){var r;r=e?i.map(e&&e.dimensions,(function(e){var n=t.getData().getDimensionInfo(t.getData().mapDimension(e))||{};return i.defaults({name:e},n)})):[{name:"value",type:"float"}];var o=new a(r,n),l=i.map(n.get("data"),i.curry(s.dataTransform,t));return e&&(l=i.filter(l,i.curry(s.dataFilter,e))),o.initData(l,null,e?s.dimValueGetter:function(e){return e.value}),o}e.exports=c},"6da7":function(e,t,n){"use strict";t.__esModule=!0;var i=n("e6bb"),r=l(i),o=n("4862"),a=l(o),s="function"===typeof a.default&&"symbol"===typeof r.default?function(e){return typeof e}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":typeof e};function l(e){return e&&e.__esModule?e:{default:e}}t.default="function"===typeof a.default&&"symbol"===s(r.default)?function(e){return"undefined"===typeof e?"undefined":s(e)}:function(e){return e&&"function"===typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":"undefined"===typeof e?"undefined":s(e)}},"6df0":function(e,t,n){var i=n("84be"),r=i.normalizeRadian,o=2*Math.PI;function a(e,t,n,i,a,s,l,u,c){if(0===l)return!1;var h=l;u-=e,c-=t;var d=Math.sqrt(u*u+c*c);if(d-h>n||d+ha&&(a+=o);var p=Math.atan2(c,u);return p<0&&(p+=o),p>=i&&p<=a||p+o>=i&&p+o<=a}t.containStroke=a},"6e25":function(e,t,n){var i=n("610c"),r=n("e52f"),o=n("7fdc"),a=n("be16").Buffer,s={"des-ede3-cbc":r.CBC.instantiate(r.EDE),"des-ede3":r.EDE,"des-ede-cbc":r.CBC.instantiate(r.EDE),"des-ede":r.EDE,"des-cbc":r.CBC.instantiate(r.DES),"des-ecb":r.DES};function l(e){i.call(this);var t,n=e.mode.toLowerCase(),r=s[n];t=e.decrypt?"decrypt":"encrypt";var o=e.key;a.isBuffer(o)||(o=a.from(o)),"des-ede"!==n&&"des-ede-cbc"!==n||(o=a.concat([o,o.slice(0,8)]));var l=e.iv;a.isBuffer(l)||(l=a.from(l)),this._des=r.create({key:o,iv:l,type:t})}s.des=s["des-cbc"],s.des3=s["des-ede3-cbc"],e.exports=l,o(l,i),l.prototype._update=function(e){return a.from(this._des.update(e))},l.prototype._final=function(){return a.from(this._des.final())}},"6e29":function(e,t,n){"use strict";var i=n("2518"),r=n("52c4"),o=n("28a4"),a=n("12f9"),s=n("3dbc"),l=n("bcd3"),u=n("3bf2"),c=n("0a39"),h=n("6f0e")("iterator"),d=!([].keys&&"next"in[].keys()),f="@@iterator",p="keys",g="values",m=function(){return this};e.exports=function(e,t,n,v,y,b,w){l(n,t,v);var x,_,M,I=function(e){if(!d&&e in T)return T[e];switch(e){case p:return function(){return new n(this,e)};case g:return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",S=y==g,D=!1,T=e.prototype,A=T[h]||T[f]||y&&T[y],k=A||I(y),E=y?S?I("entries"):k:void 0,N="Array"==t&&T.entries||A;if(N&&(M=c(N.call(new e)),M!==Object.prototype&&M.next&&(u(M,C,!0),i||"function"==typeof M[h]||a(M,h,m))),S&&A&&A.name!==g&&(D=!0,k=function(){return A.call(this)}),i&&!w||!d&&!D&&T[h]||a(T,h,k),s[t]=k,s[C]=m,y)if(x={values:S?k:I(g),keys:b?k:I(p),entries:E},w)for(_ in x)_ in T||o(T,_,x[_]);else r(r.P+r.F*(d||D),t,x);return x}},"6e4c":function(e,t){t["des-ecb"]={key:8,iv:0},t["des-cbc"]=t.des={key:8,iv:8},t["des-ede3-cbc"]=t.des3={key:24,iv:8},t["des-ede3"]={key:24,iv:0},t["des-ede-cbc"]={key:16,iv:8},t["des-ede"]={key:16,iv:0}},"6e8d":function(e,t,n){var i=n("357b"),r=n("630a"),o=n("cb77"),a=n("b8ab"),s=r.prototype,l=a.prototype,u=o.getPrecisionSafe,c=o.round,h=Math.floor,d=Math.ceil,f=Math.pow,p=Math.log,g=r.extend({type:"log",base:10,$constructor:function(){r.apply(this,arguments),this._originalScale=new a},getTicks:function(e){var t=this._originalScale,n=this._extent,r=t.getExtent();return i.map(l.getTicks.call(this,e),(function(e){var i=o.round(f(this.base,e));return i=e===n[0]&&t.__fixMin?m(i,r[0]):i,i=e===n[1]&&t.__fixMax?m(i,r[1]):i,i}),this)},getMinorTicks:l.getMinorTicks,getLabel:l.getLabel,scale:function(e){return e=s.scale.call(this,e),f(this.base,e)},setExtent:function(e,t){var n=this.base;e=p(e)/p(n),t=p(t)/p(n),l.setExtent.call(this,e,t)},getExtent:function(){var e=this.base,t=s.getExtent.call(this);t[0]=f(e,t[0]),t[1]=f(e,t[1]);var n=this._originalScale,i=n.getExtent();return n.__fixMin&&(t[0]=m(t[0],i[0])),n.__fixMax&&(t[1]=m(t[1],i[1])),t},unionExtent:function(e){this._originalScale.unionExtent(e);var t=this.base;e[0]=p(e[0])/p(t),e[1]=p(e[1])/p(t),s.unionExtent.call(this,e)},unionExtentFromData:function(e,t){this.unionExtent(e.getApproximateExtent(t))},niceTicks:function(e){e=e||10;var t=this._extent,n=t[1]-t[0];if(!(n===1/0||n<=0)){var i=o.quantity(n),r=e/n*i;r<=.5&&(i*=10);while(!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0)i*=10;var a=[o.round(d(t[0]/i)*i),o.round(h(t[1]/i)*i)];this._interval=i,this._niceExtent=a}},niceExtent:function(e){l.niceExtent.call(this,e);var t=this._originalScale;t.__fixMin=e.fixMin,t.__fixMax=e.fixMax}});function m(e,t){return c(e,u(t))}i.each(["contain","normalize"],(function(e){g.prototype[e]=function(t){return t=p(t)/p(this.base),s[e].call(this,t)}})),g.create=function(){return new g};var v=g;e.exports=v},"6e99":function(e,t,n){var i=n("cb2b");e.exports={Ber:i,BerReader:i.Reader,BerWriter:i.Writer}},"6f0e":function(e,t,n){var i=n("1e89")("wks"),r=n("36d5"),o=n("78ec").Symbol,a="function"==typeof o,s=e.exports=function(e){return i[e]||(i[e]=a&&o[e]||(a?o:r)("Symbol."+e))};s.store=i},7007:function(e,t,n){var i=n("a48a"),r=n("6739");e.exports={throttle:i,debounce:r}},7023:function(e,t,n){var i=n("be16").Buffer,r=n("9e89"),o=n("606b").ec,a=n("a436"),s=n("aedd");function l(e,t,n,o,s){var l=a(n);if("ec"===l.type){if("ecdsa"!==o&&"ecdsa/rsa"!==o)throw new Error("wrong public key type");return u(e,t,l)}if("dsa"===l.type){if("dsa"!==o)throw new Error("wrong public key type");return c(e,t,l)}if("rsa"!==o&&"ecdsa/rsa"!==o)throw new Error("wrong public key type");t=i.concat([s,t]);var h=l.modulus.byteLength(),d=[1],f=0;while(t.length+d.length+2=t)throw new Error("invalid sig")}e.exports=l},"705d":function(e,t,n){"use strict";e.exports=function(e,t,n,i,r){return e.config=t,n&&(e.code=n),e.request=i,e.response=r,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},"70bf":function(e,t,n){var i=n("364b"),r=n("626c"),o=n("204d"),a=o.subPixelOptimizeRect,s={},l=i.extend({type:"rect",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(e,t){var n,i,o,l;this.subPixelOptimize?(a(s,t,this.style),n=s.x,i=s.y,o=s.width,l=s.height,s.r=t.r,t=s):(n=t.x,i=t.y,o=t.width,l=t.height),t.r?r.buildPath(e,t):e.rect(n,i,o,l),e.closePath()}});e.exports=l},"70c5":function(e,t,n){"use strict";var i=n("21e1"),r=n("8a16"),o=n("a1e1"),a=i.rotr64_hi,s=i.rotr64_lo,l=i.shr64_hi,u=i.shr64_lo,c=i.sum64,h=i.sum64_hi,d=i.sum64_lo,f=i.sum64_4_hi,p=i.sum64_4_lo,g=i.sum64_5_hi,m=i.sum64_5_lo,v=r.BlockHash,y=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];function b(){if(!(this instanceof b))return new b;v.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=y,this.W=new Array(160)}function w(e,t,n,i,r){var o=e&n^~e&r;return o<0&&(o+=4294967296),o}function x(e,t,n,i,r,o){var a=t&i^~t&o;return a<0&&(a+=4294967296),a}function _(e,t,n,i,r){var o=e&n^e&r^n&r;return o<0&&(o+=4294967296),o}function M(e,t,n,i,r,o){var a=t&i^t&o^i&o;return a<0&&(a+=4294967296),a}function I(e,t){var n=a(e,t,28),i=a(t,e,2),r=a(t,e,7),o=n^i^r;return o<0&&(o+=4294967296),o}function C(e,t){var n=s(e,t,28),i=s(t,e,2),r=s(t,e,7),o=n^i^r;return o<0&&(o+=4294967296),o}function S(e,t){var n=a(e,t,14),i=a(e,t,18),r=a(t,e,9),o=n^i^r;return o<0&&(o+=4294967296),o}function D(e,t){var n=s(e,t,14),i=s(e,t,18),r=s(t,e,9),o=n^i^r;return o<0&&(o+=4294967296),o}function T(e,t){var n=a(e,t,1),i=a(e,t,8),r=l(e,t,7),o=n^i^r;return o<0&&(o+=4294967296),o}function A(e,t){var n=s(e,t,1),i=s(e,t,8),r=u(e,t,7),o=n^i^r;return o<0&&(o+=4294967296),o}function k(e,t){var n=a(e,t,19),i=a(t,e,29),r=l(e,t,6),o=n^i^r;return o<0&&(o+=4294967296),o}function E(e,t){var n=s(e,t,19),i=s(t,e,29),r=u(e,t,6),o=n^i^r;return o<0&&(o+=4294967296),o}i.inherits(b,v),e.exports=b,b.blockSize=1024,b.outSize=512,b.hmacStrength=192,b.padLength=128,b.prototype._prepareBlock=function(e,t){for(var n=this.W,i=0;i<32;i++)n[i]=e[t+i];for(;i0){var i,r,a=this.getDefs(!0),s=t[0],l=n?"_textDom":"_dom";s[l]?(r=s[l].getAttribute("id"),i=s[l],a.contains(i)||a.appendChild(i)):(r="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,i=this.createElement("clipPath"),i.setAttribute("id",r),a.appendChild(i),s[l]=i);var u=this.getSvgProxy(s);if(s.transform&&s.parent.invTransform&&!n){var c=Array.prototype.slice.call(s.transform);o.mul(s.transform,s.parent.invTransform,s.transform),u.brush(s),s.transform=c}else u.brush(s);var h=this.getSvgElement(s);i.innerHTML="",i.appendChild(h.cloneNode()),e.setAttribute("clip-path","url(#"+r+")"),t.length>1&&this.updateDom(i,t.slice(1),n)}else e&&e.setAttribute("clip-path","none")},a.prototype.markUsed=function(e){var t=this;e.__clipPaths&&r.each(e.__clipPaths,(function(e){e._dom&&i.prototype.markUsed.call(t,e._dom),e._textDom&&i.prototype.markUsed.call(t,e._textDom)}))};var s=a;e.exports=s},"71cd":function(e,t,n){"use strict";t.__esModule=!0;var i=n("8bbf"),r=a(i),o=n("ca1c");function a(e){return e&&e.__esModule?e:{default:e}}var s=!1,l=!1,u=void 0,c=function(){if(!r.default.prototype.$isServer){var e=d.modalDom;return e?s=!0:(s=!1,e=document.createElement("div"),d.modalDom=e,e.addEventListener("touchmove",(function(e){e.preventDefault(),e.stopPropagation()})),e.addEventListener("click",(function(){d.doOnModalClick&&d.doOnModalClick()}))),e}},h={},d={modalFade:!0,getInstance:function(e){return h[e]},register:function(e,t){e&&t&&(h[e]=t)},deregister:function(e){e&&(h[e]=null,delete h[e])},nextZIndex:function(){return d.zIndex++},modalStack:[],doOnModalClick:function(){var e=d.modalStack[d.modalStack.length-1];if(e){var t=d.getInstance(e.id);t&&t.closeOnClickModal&&t.close()}},openModal:function(e,t,n,i,a){if(!r.default.prototype.$isServer&&e&&void 0!==t){this.modalFade=a;for(var l=this.modalStack,u=0,h=l.length;u0){var i=t[t.length-1];if(i.id===e){if(i.modalClass){var r=i.modalClass.trim().split(/\s+/);r.forEach((function(e){return(0,o.removeClass)(n,e)}))}t.pop(),t.length>0&&(n.style.zIndex=t[t.length-1].zIndex)}else for(var a=t.length-1;a>=0;a--)if(t[a].id===e){t.splice(a,1);break}}0===t.length&&(this.modalFade&&(0,o.addClass)(n,"v-modal-leave"),setTimeout((function(){0===t.length&&(n.parentNode&&n.parentNode.removeChild(n),n.style.display="none",d.modalDom=void 0),(0,o.removeClass)(n,"v-modal-leave")}),200))}};Object.defineProperty(d,"zIndex",{configurable:!0,get:function(){return l||(u=u||(r.default.prototype.$ELEMENT||{}).zIndex||2e3,l=!0),u},set:function(e){u=e}});var f=function(){if(!r.default.prototype.$isServer&&d.modalStack.length>0){var e=d.modalStack[d.modalStack.length-1];if(!e)return;var t=d.getInstance(e.id);return t}};r.default.prototype.$isServer||window.addEventListener("keydown",(function(e){if(27===e.keyCode){var t=f();t&&t.closeOnPressEscape&&(t.handleClose?t.handleClose():t.handleAction?t.handleAction("cancel"):t.close())}})),t.default=d},"724b":function(e,t,n){"use strict";var i=n("fddc")(!0);n("6e29")(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=i(t,n),this._i+=e.length,{value:e,done:!1})}))},"72ae":function(e,t,n){"use strict";t.__esModule=!0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=n("e636"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}var s,l=l||{};l.Dialog=function(e,t,n){var r=this;if(this.dialogNode=e,null===this.dialogNode||"dialog"!==this.dialogNode.getAttribute("role"))throw new Error("Dialog() requires a DOM element with ARIA role of dialog.");"string"===typeof t?this.focusAfterClosed=document.getElementById(t):"object"===("undefined"===typeof t?"undefined":i(t))?this.focusAfterClosed=t:this.focusAfterClosed=null,"string"===typeof n?this.focusFirst=document.getElementById(n):"object"===("undefined"===typeof n?"undefined":i(n))?this.focusFirst=n:this.focusFirst=null,this.focusFirst?this.focusFirst.focus():o.default.focusFirstDescendant(this.dialogNode),this.lastFocus=document.activeElement,s=function(e){r.trapFocus(e)},this.addListeners()},l.Dialog.prototype.addListeners=function(){document.addEventListener("focus",s,!0)},l.Dialog.prototype.removeListeners=function(){document.removeEventListener("focus",s,!0)},l.Dialog.prototype.closeDialog=function(){var e=this;this.removeListeners(),this.focusAfterClosed&&setTimeout((function(){e.focusAfterClosed.focus()}))},l.Dialog.prototype.trapFocus=function(e){o.default.IgnoreUtilFocusChanges||(this.dialogNode.contains(e.target)?this.lastFocus=e.target:(o.default.focusFirstDescendant(this.dialogNode),this.lastFocus===document.activeElement&&o.default.focusLastDescendant(this.dialogNode),this.lastFocus=document.activeElement))},t.default=l.Dialog},7380:function(e,t,n){var i=n("be16").Buffer,r=n("a9ab"),o=n("6688"),a=n("606b").ec,s=n("9e89"),l=n("a436"),u=n("aedd");function c(e,t,n,r,a){var s=l(t);if(s.curve){if("ecdsa"!==r&&"ecdsa/rsa"!==r)throw new Error("wrong private key type");return h(e,s)}if("dsa"===s.type){if("dsa"!==r)throw new Error("wrong private key type");return d(e,s,n)}if("rsa"!==r&&"ecdsa/rsa"!==r)throw new Error("wrong private key type");e=i.concat([a,e]);var u=s.modulus.byteLength(),c=[0,1];while(e.length+c.length+10&&n.ishrn(i),n}function m(e,t){e=g(e,t),e=e.mod(t);var n=i.from(e.toArray());if(n.length>6],r=0===(32&n);if(31===(31&n)){let i=n;n=0;while(128===(128&i)){if(i=e.readUInt8(t),e.isError(i))return i;n<<=7,n|=127&i}}else n&=31;const o=s.tag[n];return{cls:i,primitive:r,tag:n,tagStr:o}}function h(e,t,n){let i=e.readUInt8(n);if(e.isError(i))return i;if(!t&&128===i)return null;if(0===(128&i))return i;const r=127&i;if(r>4)return e.error("length octect is too long");i=0;for(let o=0;o-1?setImmediate:r.nextTick;b.WritableState=y;var l=Object.create(n("44f3"));l.inherits=n("7fdc");var u={deprecate:n("54ac")},c=n("b3ae"),h=n("087e").Buffer,d=i.Uint8Array||function(){};function f(e){return h.from(e)}function p(e){return h.isBuffer(e)||e instanceof d}var g,m=n("e9fd");function v(){}function y(e,t){a=a||n("e6aa"),e=e||{};var i=t instanceof a;this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var r=e.highWaterMark,s=e.writableHighWaterMark,l=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i&&(s||0===s)?s:l,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var u=!1===e.decodeStrings;this.decodeStrings=!u,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){D(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new o(this)}function b(e){if(a=a||n("e6aa"),!g.call(b,this)&&!(this instanceof a))return new b(e);this._writableState=new y(e,this),this.writable=!0,e&&("function"===typeof e.write&&(this._write=e.write),"function"===typeof e.writev&&(this._writev=e.writev),"function"===typeof e.destroy&&(this._destroy=e.destroy),"function"===typeof e.final&&(this._final=e.final)),c.call(this)}function w(e,t){var n=new Error("write after end");e.emit("error",n),r.nextTick(t,n)}function x(e,t,n,i){var o=!0,a=!1;return null===n?a=new TypeError("May not write null values to stream"):"string"===typeof n||void 0===n||t.objectMode||(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),r.nextTick(i,a),o=!1),o}function _(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!==typeof t||(t=h.from(t,n)),t}function M(e,t,n,i,r,o){if(!n){var a=_(t,i,r);i!==a&&(n=!0,r="buffer",i=a)}var s=t.objectMode?1:i.length;t.length+=s;var l=t.length-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(b.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),b.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},b.prototype._writev=null,b.prototype.end=function(e,t,n){var i=this._writableState;"function"===typeof e?(n=e,e=null,t=null):"function"===typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||L(this,i,n)},Object.defineProperty(b.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),b.prototype.destroy=m.destroy,b.prototype._undestroy=m.undestroy,b.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,n("c32c"),n("a032"))},"76aa":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("ac45"),a=o.layout,s=o.largeLayout;n("371e"),n("98f7"),n("7fef"),n("a381"),i.registerLayout(i.PRIORITY.VISUAL.LAYOUT,r.curry(a,"bar")),i.registerLayout(i.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,s),i.registerVisual({seriesType:"bar",reset:function(e){e.getData().setVisual("legendSymbol","roundRect")}})},"776e":function(e,t,n){"use strict";var i=n("a817"),r=n("b0ff"),o=n("d94c"),a=n("ced1"),s=n("229e"),l=n("0ab4"),u=n("e78a");e.exports=function(e){return new Promise((function(t,c){var h=e.data,d=e.headers;i.isFormData(h)&&delete d["Content-Type"];var f=new XMLHttpRequest;if(e.auth){var p=e.auth.username||"",g=e.auth.password||"";d.Authorization="Basic "+btoa(p+":"+g)}var m=a(e.baseURL,e.url);if(f.open(e.method.toUpperCase(),o(m,e.params,e.paramsSerializer),!0),f.timeout=e.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in f?s(f.getAllResponseHeaders()):null,i=e.responseType&&"text"!==e.responseType?f.response:f.responseText,o={data:i,status:f.status,statusText:f.statusText,headers:n,config:e,request:f};r(t,c,o),f=null}},f.onabort=function(){f&&(c(u("Request aborted",e,"ECONNABORTED",f)),f=null)},f.onerror=function(){c(u("Network Error",e,null,f)),f=null},f.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),c(u(t,e,"ECONNABORTED",f)),f=null},i.isStandardBrowserEnv()){var v=n("63dc"),y=(e.withCredentials||l(m))&&e.xsrfCookieName?v.read(e.xsrfCookieName):void 0;y&&(d[e.xsrfHeaderName]=y)}if("setRequestHeader"in f&&i.forEach(d,(function(e,t){"undefined"===typeof h&&"content-type"===t.toLowerCase()?delete d[t]:f.setRequestHeader(t,e)})),i.isUndefined(e.withCredentials)||(f.withCredentials=!!e.withCredentials),e.responseType)try{f.responseType=e.responseType}catch(b){if("json"!==e.responseType)throw b}"function"===typeof e.onDownloadProgress&&f.addEventListener("progress",e.onDownloadProgress),"function"===typeof e.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){f&&(f.abort(),c(e),f=null)})),void 0===h&&(h=null),f.send(h)}))}},"776e1":function(e,t,n){var i=n("d82e"),r=i.distance;function o(e,t,n,i,r,o,a){var s=.5*(n-e),l=.5*(i-t);return(2*(t-n)+s+l)*a+(-3*(t-n)-2*s-l)*o+s*r+t}function a(e,t){for(var n=e.length,i=[],a=0,s=1;sn-2?n-1:f+1],h=e[f>n-3?n-1:f+2]);var m=p*p,v=p*m;i.push([o(u[0],g[0],c[0],h[0],p,m,v),o(u[1],g[1],c[1],h[1],p,m,v)])}return i}e.exports=a},7791:function(e,t,n){var i=n("25e5"),r=i.prepareDataCoordInfo,o=i.getStackedOnPoint;function a(e,t){var n=[];return t.diff(e).add((function(e){n.push({cmd:"+",idx:e})})).update((function(e,t){n.push({cmd:"=",idx:t,idx1:e})})).remove((function(e){n.push({cmd:"-",idx:e})})).execute(),n}function s(e,t,n,i,s,l,u,c){for(var h=a(e,t),d=[],f=[],p=[],g=[],m=[],v=[],y=[],b=r(s,t,u),w=r(l,e,c),x=0;xt&&(t=e[n]);return isFinite(t)?t:NaN},min:function(e){for(var t=1/0,n=0;n1)"string"===typeof a?l=n[a]:"function"===typeof a&&(l=a),l&&e.setData(o.downSample(o.mapDimension(c.dim),1/f,l,i))}}}}e.exports=r},"77c6":function(e,t,n){var i=n("7fdc"),r=n("008b"),o=n("8eea"),a=n("be16").Buffer,s=new Array(160);function l(){this.init(),this._w=s,o.call(this,128,112)}i(l,r),l.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},l.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,n,i){e.writeInt32BE(t,i),e.writeInt32BE(n,i+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=l},"77cd":function(e,t,n){var i=n("2fcc"),r=n("d076");n("1efe"),n("aa4e"),n("933f"),n("32c0"),i.registerPreprocessor(r)},7876:function(e,t,n){var i=n("357b"),r=n("2fcc"),o=n("f298"),a=n("0b9d"),s=a.getLayoutRect,l=n("405f"),u=l.windowOpen;r.extendComponentModel({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),r.extendComponentView({type:"title",render:function(e,t,n){if(this.group.removeAll(),e.get("show")){var r=this.group,a=e.getModel("textStyle"),l=e.getModel("subtextStyle"),c=e.get("textAlign"),h=i.retrieve2(e.get("textBaseline"),e.get("textVerticalAlign")),d=new o.Text({style:o.setTextStyle({},a,{text:e.get("text"),textFill:a.getTextColor()},{disableBox:!0}),z2:10}),f=d.getBoundingRect(),p=e.get("subtext"),g=new o.Text({style:o.setTextStyle({},l,{text:p,textFill:l.getTextColor(),y:f.height+e.get("itemGap"),textVerticalAlign:"top"},{disableBox:!0}),z2:10}),m=e.get("link"),v=e.get("sublink"),y=e.get("triggerEvent",!0);d.silent=!m&&!y,g.silent=!v&&!y,m&&d.on("click",(function(){u(m,"_"+e.get("target"))})),v&&g.on("click",(function(){u(v,"_"+e.get("subtarget"))})),d.eventData=g.eventData=y?{componentType:"title",componentIndex:e.componentIndex}:null,r.add(d),p&&r.add(g);var b=r.getBoundingRect(),w=e.getBoxLayoutParams();w.width=b.width,w.height=b.height;var x=s(w,{width:n.getWidth(),height:n.getHeight()},e.get("padding"));c||(c=e.get("left")||e.get("right"),"middle"===c&&(c="center"),"right"===c?x.x+=x.width:"center"===c&&(x.x+=x.width/2)),h||(h=e.get("top")||e.get("bottom"),"center"===h&&(h="middle"),"bottom"===h?x.y+=x.height:"middle"===h&&(x.y+=x.height/2),h=h||"top"),r.attr("position",[x.x,x.y]);var _={textAlign:c,textVerticalAlign:h};d.setStyle(_),g.setStyle(_),b=r.getBoundingRect();var M=x.margin,I=e.getItemStyle(["color","opacity"]);I.fill=e.get("backgroundColor");var C=new o.Rect({shape:{x:b.x-M[3],y:b.y-M[0],width:b.width+M[1]+M[3],height:b.height+M[0]+M[2],r:e.get("borderRadius")},style:I,subPixelOptimize:!0,silent:!0});r.add(C)}}})},"78ec":function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"78f8":function(e,t,n){var i=n("9054"),r=n("224d");function o(e){this.rand=e||new r.Rand}e.exports=o,o.create=function(e){return new o(e)},o.prototype._randbelow=function(e){var t=e.bitLength(),n=Math.ceil(t/8);do{var r=new i(this.rand.generate(n))}while(r.cmp(e)>=0);return r},o.prototype._randrange=function(e,t){var n=t.sub(e);return e.add(this._randbelow(n))},o.prototype.test=function(e,t,n){var r=e.bitLength(),o=i.mont(e),a=new i(1).toRed(o);t||(t=Math.max(1,r/48|0));for(var s=e.subn(1),l=0;!s.testn(l);l++);for(var u=e.shrn(l),c=s.toRed(o),h=!0;t>0;t--){var d=this._randrange(new i(2),s);n&&n(d);var f=d.toRed(o).redPow(u);if(0!==f.cmp(a)&&0!==f.cmp(c)){for(var p=1;p0;t--){var c=this._randrange(new i(2),a),h=e.gcd(c);if(0!==h.cmpn(1))return h;var d=c.toRed(r).redPow(l);if(0!==d.cmp(o)&&0!==d.cmp(u)){for(var f=1;f-1}},percentage:{type:Number,default:0,required:!0,validator:function(e){return e>=0&&e<=100}},status:{type:String,validator:function(e){return["success","exception","warning"].indexOf(e)>-1}},strokeWidth:{type:Number,default:6},strokeLinecap:{type:String,default:"round"},textInside:{type:Boolean,default:!1},width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:[String,Array,Function],default:""},format:Function},computed:{barStyle:function(){var e={};return e.width=this.percentage+"%",e.backgroundColor=this.getCurrentColor(this.percentage),e},relativeStrokeWidth:function(){return(this.strokeWidth/this.width*100).toFixed(1)},radius:function(){return"circle"===this.type||"dashboard"===this.type?parseInt(50-parseFloat(this.relativeStrokeWidth)/2,10):0},trackPath:function(){var e=this.radius,t="dashboard"===this.type;return"\n M 50 50\n m 0 "+(t?"":"-")+e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"-":"")+2*e+"\n a "+e+" "+e+" 0 1 1 0 "+(t?"":"-")+2*e+"\n "},perimeter:function(){return 2*Math.PI*this.radius},rate:function(){return"dashboard"===this.type?.75:1},strokeDashoffset:function(){var e=-1*this.perimeter*(1-this.rate)/2;return e+"px"},trailPathStyle:function(){return{strokeDasharray:this.perimeter*this.rate+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset}},circlePathStyle:function(){return{strokeDasharray:this.perimeter*this.rate*(this.percentage/100)+"px, "+this.perimeter+"px",strokeDashoffset:this.strokeDashoffset,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease"}},stroke:function(){var e=void 0;if(this.color)e=this.getCurrentColor(this.percentage);else switch(this.status){case"success":e="#13ce66";break;case"exception":e="#ff4949";break;case"warning":e="#e6a23c";break;default:e="#20a0ff"}return e},iconClass:function(){return"warning"===this.status?"el-icon-warning":"line"===this.type?"success"===this.status?"el-icon-circle-check":"el-icon-circle-close":"success"===this.status?"el-icon-check":"el-icon-close"},progressTextSize:function(){return"line"===this.type?12+.4*this.strokeWidth:.111111*this.width+2},content:function(){return"function"===typeof this.format?this.format(this.percentage)||"":this.percentage+"%"}},methods:{getCurrentColor:function(e){return"function"===typeof this.color?this.color(e):"string"===typeof this.color?this.color:this.getLevelColor(e)},getLevelColor:function(e){for(var t=this.getColorArray().sort((function(e,t){return e.percentage-t.percentage})),n=0;ne)return t[n].color;return t[t.length-1].color},getColorArray:function(){var e=this.color,t=100/e.length;return e.map((function(e,n){return"string"===typeof e?{color:e,percentage:(n+1)*t}:e}))}}},a=o,s=n(0),l=Object(s["a"])(a,i,r,!1,null,null,null);l.options.__file="packages/progress/src/progress.vue";var u=l.exports;u.install=function(e){e.component(u.name,u)};t["default"]=u}})},7907:function(e,t,n){var i=n("78ec").document;e.exports=i&&i.documentElement},"791c":function(e,t,n){"use strict";var i=t,r=n("9054"),o=n("a1e1"),a=n("a166");function s(e,t,n){var i=new Array(Math.max(e.bitLength(),n)+1);i.fill(0);for(var r=1<(r>>1)-1?(r>>1)-l:l,o.isubn(s)):s=0,i[a]=s,o.iushrn(1)}return i}function l(e,t){var n=[[],[]];e=e.clone(),t=t.clone();var i,r=0,o=0;while(e.cmpn(-r)>0||t.cmpn(-o)>0){var a,s,l=e.andln(3)+r&3,u=t.andln(3)+o&3;3===l&&(l=-1),3===u&&(u=-1),0===(1&l)?a=0:(i=e.andln(7)+r&7,a=3!==i&&5!==i||2!==u?l:-l),n[0].push(a),0===(1&u)?s=0:(i=t.andln(7)+o&7,s=3!==i&&5!==i||2!==l?u:-u),n[1].push(s),2*r===a+1&&(r=1-r),2*o===s+1&&(o=1-o),e.iushrn(1),t.iushrn(1)}return n}function u(e,t,n){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=n.call(this)}}function c(e){return"string"===typeof e?i.toArray(e,"hex"):e}function h(e){return new r(e,"hex","le")}i.assert=o,i.toArray=a.toArray,i.zero2=a.zero2,i.toHex=a.toHex,i.encode=a.encode,i.getNAF=s,i.getJSF=l,i.cachedProperty=u,i.parseBytes=c,i.intFromLE=h},"79c2":function(e,t,n){var i=n("357b"),r=n("92dd"),o=n("4477"),a=n("5571"),s=n("405f"),l=s.encodeHTML,u=s.addCommas,c=n("85ff"),h=c.wrapTreePathInfo,d=r.extend({type:"series.treemap",layoutMode:"box",dependencies:["grid","polar"],preventUsingHoverLayer:!0,_viewRoot:null,defaultOption:{progressive:0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",ellipsis:!0},upperLabel:{show:!1,position:[0,"50%"],height:20,color:"#fff",ellipsis:!0,verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],color:"#fff",ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(e,t){var n={name:e.name,children:e.data};f(n);var r=e.levels||[],s=this.designatedVisualItemStyle={},l=new a({itemStyle:s},this,t);r=e.levels=p(r,t);var u=i.map(r||[],(function(e){return new a(e,l,t)}),this),c=o.createTree(n,this,h);function h(e){e.wrapMethod("getItemModel",(function(e,t){var n=c.getNodeByDataIndex(t),i=u[n.depth];return e.parentModel=i||l,e}))}return c.data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(e){var t=this.getData(),n=this.getRawValue(e),r=i.isArray(n)?u(n[0]):u(n),o=t.getName(e);return l(o+": "+r)},getDataParams:function(e){var t=r.prototype.getDataParams.apply(this,arguments),n=this.getData().tree.getNodeByDataIndex(e);return t.treePathInfo=h(n,this),t},setLayoutInfo:function(e){this.layoutInfo=this.layoutInfo||{},i.extend(this.layoutInfo,e)},mapIdToIndex:function(e){var t=this._idIndexMap;t||(t=this._idIndexMap=i.createHashMap(),this._idIndexMapCount=0);var n=t.get(e);return null==n&&t.set(e,n=this._idIndexMapCount++),n},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(e){e?this._viewRoot=e:e=this._viewRoot;var t=this.getRawData().tree.root;e&&(e===t||t.contains(e))||(this._viewRoot=t)}});function f(e){var t=0;i.each(e.children,(function(e){f(e);var n=e.value;i.isArray(n)&&(n=n[0]),t+=n}));var n=e.value;i.isArray(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=t),n<0&&(n=0),i.isArray(e.value)?e.value[0]=n:e.value=n}function p(e,t){var n=t.get("color");if(n){var r;if(e=e||[],i.each(e,(function(e){var t=new a(e),n=t.get("color");(t.get("itemStyle.color")||n&&"none"!==n)&&(r=!0)})),!r){var o=e[0]||(e[0]={});o.color=n.slice()}return e}}e.exports=d},"7a11":function(e,t,n){"use strict";var i=!("undefined"===typeof window||!window.document||!window.document.createElement),r={canUseDOM:i,canUseWorkers:"undefined"!==typeof Worker,canUseEventListeners:i&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:i&&!!window.screen,isInWorker:!i};e.exports=r},"7a16":function(e,t,n){var i=n("a153"),r=n("53de"),o=n("e031"),a=o.WILL_BE_RESTORED,s=new r,l=function(){};l.prototype={constructor:l,drawRectText:function(e,t){var n=this.style;t=n.textRect||t,this.__dirty&&i.normalizeTextStyle(n,!0);var r=n.text;if(null!=r&&(r+=""),i.needDrawText(r,n)){e.save();var o=this.transform;n.transformText?this.setTransform(e):o&&(s.copy(t),s.applyTransform(o),t=s),i.renderText(this,e,r,n,t,a),e.restore()}}};var u=l;e.exports=u},"7a45":function(e,t,n){"use strict";e.exports=r;var i=n("2e8e");function r(e){if(!(this instanceof r))return new r(e);i.call(this,e)}n("7fdc")(r,i),r.prototype._transform=function(e,t,n){n(null,e)}},"7a64":function(e,t,n){n("4399"),n("3bb6")},"7b30":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("2fcc")),o=n("357b"),a=n("d3e5"),s=n("faa9"),l=n("405f"),u=n("55a3"),c=l.addCommas,h=l.encodeHTML;function d(e){s.defaultEmphasis(e,"label",["show"])}var f=r.extendComponentModel({type:"marker",dependencies:["series","grid","polar","geo"],init:function(e,t,n){this.mergeDefaultAndTheme(e,n),this._mergeOption(e,n,!1,!0)},isAnimationEnabled:function(){if(a.node)return!1;var e=this.__hostSeries;return this.getShallow("animation")&&e&&e.isAnimationEnabled()},mergeOption:function(e,t){this._mergeOption(e,t,!1,!1)},_mergeOption:function(e,t,n,i){var r=this.constructor,a=this.mainType+"Model";n||t.eachSeries((function(e){var n=e.get(this.mainType,!0),s=e[a];n&&n.data?(s?s._mergeOption(n,t,!0):(i&&d(n),o.each(n.data,(function(e){e instanceof Array?(d(e[0]),d(e[1])):d(e)})),s=new r(n,this,t),o.extend(s,{mainType:this.mainType,seriesIndex:e.seriesIndex,name:e.name,createdBySelf:!0}),s.__hostSeries=e),e[a]=s):e[a]=null}),this)},formatTooltip:function(e,t,n,i){var r=this.getData(),a=this.getRawValue(e),s=o.isArray(a)?o.map(a,c).join(", "):c(a),l=r.getName(e),u=h(this.name),d="html"===i?"
":"\n";return(null!=a||l)&&(u+=d),l&&(u+=h(l),null!=a&&(u+=" : ")),null!=a&&(u+=h(s)),u},getData:function(){return this._data},setData:function(e){this._data=e}});o.mixin(f,u);var p=f;e.exports=p},"7b4b":function(e,t,n){var i=n("f298"),r=n("0634"),o=.3,a=r.extend({type:"parallel",init:function(){this._dataGroup=new i.Group,this.group.add(this._dataGroup),this._data,this._initialized},render:function(e,t,n,r){var o=this._dataGroup,a=e.getData(),d=this._data,f=e.coordinateSystem,p=f.dimensions,g=c(e);function m(e){var t=u(a,o,e,p,f);h(t,a,e,g)}function v(t,n){var o=d.getItemGraphicEl(n),s=l(a,t,p,f);a.setItemGraphicEl(t,o);var u=r&&!1===r.animation?null:e;i.updateProps(o,{shape:{points:s}},u,t),h(o,a,t,g)}function y(e){var t=d.getItemGraphicEl(e);o.remove(t)}if(a.diff(d).add(m).update(v).remove(y).execute(),!this._initialized){this._initialized=!0;var b=s(f,e,(function(){setTimeout((function(){o.removeClipPath()}))}));o.setClipPath(b)}this._data=a},incrementalPrepareRender:function(e,t,n){this._initialized=!0,this._data=null,this._dataGroup.removeAll()},incrementalRender:function(e,t,n){for(var i=t.getData(),r=t.coordinateSystem,o=r.dimensions,a=c(t),s=e.start;s>>32-t}function u(e,t,n,i,r,o,a){return l(e+(t&n|~t&i)+r+o|0,a)+t|0}function c(e,t,n,i,r,o,a){return l(e+(t&i|n&~i)+r+o|0,a)+t|0}function h(e,t,n,i,r,o,a){return l(e+(t^n^i)+r+o|0,a)+t|0}function d(e,t,n,i,r,o,a){return l(e+(n^(t|~i))+r+o|0,a)+t|0}i(s,r),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var n=this._a,i=this._b,r=this._c,o=this._d;n=u(n,i,r,o,e[0],3614090360,7),o=u(o,n,i,r,e[1],3905402710,12),r=u(r,o,n,i,e[2],606105819,17),i=u(i,r,o,n,e[3],3250441966,22),n=u(n,i,r,o,e[4],4118548399,7),o=u(o,n,i,r,e[5],1200080426,12),r=u(r,o,n,i,e[6],2821735955,17),i=u(i,r,o,n,e[7],4249261313,22),n=u(n,i,r,o,e[8],1770035416,7),o=u(o,n,i,r,e[9],2336552879,12),r=u(r,o,n,i,e[10],4294925233,17),i=u(i,r,o,n,e[11],2304563134,22),n=u(n,i,r,o,e[12],1804603682,7),o=u(o,n,i,r,e[13],4254626195,12),r=u(r,o,n,i,e[14],2792965006,17),i=u(i,r,o,n,e[15],1236535329,22),n=c(n,i,r,o,e[1],4129170786,5),o=c(o,n,i,r,e[6],3225465664,9),r=c(r,o,n,i,e[11],643717713,14),i=c(i,r,o,n,e[0],3921069994,20),n=c(n,i,r,o,e[5],3593408605,5),o=c(o,n,i,r,e[10],38016083,9),r=c(r,o,n,i,e[15],3634488961,14),i=c(i,r,o,n,e[4],3889429448,20),n=c(n,i,r,o,e[9],568446438,5),o=c(o,n,i,r,e[14],3275163606,9),r=c(r,o,n,i,e[3],4107603335,14),i=c(i,r,o,n,e[8],1163531501,20),n=c(n,i,r,o,e[13],2850285829,5),o=c(o,n,i,r,e[2],4243563512,9),r=c(r,o,n,i,e[7],1735328473,14),i=c(i,r,o,n,e[12],2368359562,20),n=h(n,i,r,o,e[5],4294588738,4),o=h(o,n,i,r,e[8],2272392833,11),r=h(r,o,n,i,e[11],1839030562,16),i=h(i,r,o,n,e[14],4259657740,23),n=h(n,i,r,o,e[1],2763975236,4),o=h(o,n,i,r,e[4],1272893353,11),r=h(r,o,n,i,e[7],4139469664,16),i=h(i,r,o,n,e[10],3200236656,23),n=h(n,i,r,o,e[13],681279174,4),o=h(o,n,i,r,e[0],3936430074,11),r=h(r,o,n,i,e[3],3572445317,16),i=h(i,r,o,n,e[6],76029189,23),n=h(n,i,r,o,e[9],3654602809,4),o=h(o,n,i,r,e[12],3873151461,11),r=h(r,o,n,i,e[15],530742520,16),i=h(i,r,o,n,e[2],3299628645,23),n=d(n,i,r,o,e[0],4096336452,6),o=d(o,n,i,r,e[7],1126891415,10),r=d(r,o,n,i,e[14],2878612391,15),i=d(i,r,o,n,e[5],4237533241,21),n=d(n,i,r,o,e[12],1700485571,6),o=d(o,n,i,r,e[3],2399980690,10),r=d(r,o,n,i,e[10],4293915773,15),i=d(i,r,o,n,e[1],2240044497,21),n=d(n,i,r,o,e[8],1873313359,6),o=d(o,n,i,r,e[15],4264355552,10),r=d(r,o,n,i,e[6],2734768916,15),i=d(i,r,o,n,e[13],1309151649,21),n=d(n,i,r,o,e[4],4149444226,6),o=d(o,n,i,r,e[11],3174756917,10),r=d(r,o,n,i,e[2],718787259,15),i=d(i,r,o,n,e[9],3951481745,21),this._a=this._a+n|0,this._b=this._b+i|0,this._c=this._c+r|0,this._d=this._d+o|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=o.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},e.exports=s},"7ce5":function(e,t,n){var i=n("2fcc"),r=n("84ad"),o=r.updateCenterAndZoom;n("afb6");var a={type:"graphRoam",event:"graphRoam",update:"none"};i.registerAction(a,(function(e,t){t.eachComponent({mainType:"series",query:e},(function(t){var n=t.coordinateSystem,i=o(n,e);t.setCenter&&t.setCenter(i.center),t.setZoom&&t.setZoom(i.zoom)}))}))},"7d04":function(e,t,n){var i=n("2fcc"),r=n("1ac0"),o=r.Polygon,a=n("f298"),s=n("357b"),l=s.bind,u=s.extend,c=n("bedf"),h=i.extendChartView({type:"themeRiver",init:function(){this._layers=[]},render:function(e,t,n){var i=e.getData(),r=this.group,s=e.getLayerSeries(),h=i.getLayout("layoutInfo"),f=h.rect,p=h.boundaryGap;function g(e){return e.name}r.attr("position",[0,f.y+p[0]]);var m=new c(this._layersSeries||[],s,g,g),v={};function y(t,n,l){var c=this._layers;if("remove"!==t){for(var h,f,p,g=[],m=[],y=s[n].indices,b=0;b16)throw new Error("unable to decrypt data");var n=-1;while(++n16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},d.prototype.flush=function(){if(this.cache.length)return this.cache},t.createDecipher=g,t.createDecipheriv=p},"7d89":function(e,t,n){var i=n("be16").Buffer,r=n("9b58"),o=n("2ff3"),a=n("7fdc"),s=n("7380"),l=n("7023"),u=n("6a7d");function c(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=r(t.hash),this._tag=t.id,this._signType=t.sign}function h(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error("Unknown message digest");this._hash=r(t.hash),this._tag=t.id,this._signType=t.sign}function d(e){return new c(e)}function f(e){return new h(e)}Object.keys(u).forEach((function(e){u[e].id=i.from(u[e].id,"hex"),u[e.toLowerCase()]=u[e]})),a(c,o.Writable),c.prototype._write=function(e,t,n){this._hash.update(e),n()},c.prototype.update=function(e,t){return"string"===typeof e&&(e=i.from(e,t)),this._hash.update(e),this},c.prototype.sign=function(e,t){this.end();var n=this._hash.digest(),i=s(n,e,this._hashType,this._signType,this._tag);return t?i.toString(t):i},a(h,o.Writable),h.prototype._write=function(e,t,n){this._hash.update(e),n()},h.prototype.update=function(e,t){return"string"===typeof e&&(e=i.from(e,t)),this._hash.update(e),this},h.prototype.verify=function(e,t,n){"string"===typeof t&&(t=i.from(t,n)),this.end();var r=this._hash.digest();return l(t,r,e,this._signType,this._tag)},e.exports={Sign:d,Verify:f,createSign:d,createVerify:f}},"7d97":function(e,t,n){var i=n("6a81"),r=n("357b"),o=n("0706"),a=n("d82e");function s(e,t,n){o.call(this,e,t,n),this._lastFrame=0,this._lastFramePercent=0}var l=s.prototype;l.createLine=function(e,t,n){return new i(e,t,n)},l.updateAnimationPoints=function(e,t){this._points=t;for(var n=[0],i=0,r=1;r=0;l--)if(i[l]<=t)break;l=Math.min(l,r-2)}else{for(var l=o;lt)break;l=Math.min(l-1,r-2)}a.lerp(e.position,n[l],n[l+1],(t-i[l])/(i[l+1]-i[l]));var u=n[l+1][0]-n[l][0],c=n[l+1][1]-n[l][1];e.rotation=-Math.atan2(c,u)-Math.PI/2,this._lastFrame=l,this._lastFramePercent=t,e.ignore=!1}},r.inherits(s,o);var u=s;e.exports=u},"7dc6":function(e,t,n){var i=n("357b"),r=n("96c5"),o=function(e,t,n,i,o){r.call(this,e,t,n),this.type=i||"value",this.position=o||"bottom",this.orient=null};o.prototype={constructor:o,model:null,isHorizontal:function(){var e=this.position;return"top"===e||"bottom"===e},pointToData:function(e,t){return this.coordinateSystem.pointToData(e,t)[0]},toGlobalCoord:null,toLocalCoord:null},i.inherits(o,r);var a=o;e.exports=a},"7e0a":function(e,t,n){var i=n("81ba"),r=n("9354");function o(e,t){var n=[];return e.eachComponent("singleAxis",(function(r,o){var a=new i(r,e,t);a.name="single_"+o,a.resize(r,t),r.coordinateSystem=a,n.push(a)})),e.eachSeries((function(t){if("singleAxis"===t.get("coordinateSystem")){var n=e.queryComponents({mainType:"singleAxis",index:t.get("singleAxisIndex"),id:t.get("singleAxisId")})[0];t.coordinateSystem=n&&n.coordinateSystem}})),n}r.register("single",{create:o,dimensions:i.prototype.dimensions})},"7ec6":function(e,t,n){var i=n("2fcc");n("79c2"),n("16c8"),n("46b3");var r=n("63e3"),o=n("c098");i.registerVisual(r),i.registerLayout(o)},"7eff":function(e,t,n){var i=n("3bae");e.exports=b,b.simpleSieve=v,b.fermatTest=y;var r=n("9054"),o=new r(24),a=n("78f8"),s=new a,l=new r(1),u=new r(2),c=new r(5),h=(new r(16),new r(8),new r(10)),d=new r(3),f=(new r(7),new r(11)),p=new r(4),g=(new r(12),null);function m(){if(null!==g)return g;var e=1048576,t=[];t[0]=2;for(var n=1,i=3;ie)n.ishrn(1);if(n.isEven()&&n.iadd(l),n.testn(1)||n.iadd(u),t.cmp(u)){if(!t.cmp(c))while(n.mod(h).cmp(d))n.iadd(p)}else while(n.mod(o).cmp(f))n.iadd(p);if(a=n.shrn(1),v(a)&&v(n)&&y(a)&&y(n)&&s.test(a)&&s.test(n))return n}}},"7f1d":function(e,t,n){var i=n("357b"),r=i.createHashMap,o=i.each;function a(e){var t=r();e.eachSeries((function(e){var n=e.get("stack");if(n){var i=t.get(n)||t.set(n,[]),r=e.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:e};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),t.each(s)}function s(e){o(e,(function(t,n){var i=[],r=[NaN,NaN],o=[t.stackResultDimension,t.stackedOverDimension],a=t.data,s=t.isStackedByIndex,l=a.map(o,(function(o,l,u){var c,h,d=a.get(t.stackedDimension,u);if(isNaN(d))return r;s?h=a.getRawIndex(u):c=a.get(t.stackedByDimension,u);for(var f=NaN,p=n-1;p>=0;p--){var g=e[p];if(s||(h=g.data.rawIndexOf(g.stackedByDimension,c)),h>=0){var m=g.data.getByRawIndex(g.stackResultDimension,h);if(d>=0&&m>0||d<=0&&m<0){d+=m,f=m;break}}}return i[0]=d,i[1]=f,i}));a.hostModel.setData(l),t.data=l}))}e.exports=a},"7f33":function(e,t,n){"use strict";(function(t){var i=n("e72c"); +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */function r(e,t){if(e===t)return 0;for(var n=e.length,i=t.length,r=0,o=Math.min(n,i);r=0;u--)if(c[u]!==h[u])return!1;for(u=c.length-1;u>=0;u--)if(s=c[u],!w(e[s],t[s],n,i))return!1;return!0}function M(e,t,n){w(e,t,!0)&&y(e,t,n,"notDeepStrictEqual",M)}function I(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(n){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function C(e){var t;try{e()}catch(n){t=n}return t}function S(e,t,n,i){var r;if("function"!==typeof t)throw new TypeError('"block" argument must be a function');"string"===typeof n&&(i=n,n=null),r=C(t),i=(n&&n.name?" ("+n.name+").":".")+(i?" "+i:"."),e&&!r&&y(r,n,"Missing expected exception"+i);var o="string"===typeof i,s=!e&&a.isError(r),l=!e&&r&&!n;if((s&&o&&I(r,n)||l)&&y(r,n,"Got unwanted exception"+i),e&&r&&n&&!I(r,n)||!e&&r)throw r}function D(e,t){e||y(e,!0,t,"==",D)}d.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=v(this),this.generatedMessage=!0);var t=e.stackStartFunction||y;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var n=new Error;if(n.stack){var i=n.stack,r=p(t),o=i.indexOf("\n"+r);if(o>=0){var a=i.indexOf("\n",o+1);i=i.substring(a+1)}this.stack=i}}},a.inherits(d.AssertionError,Error),d.fail=y,d.ok=b,d.equal=function(e,t,n){e!=t&&y(e,t,n,"==",d.equal)},d.notEqual=function(e,t,n){e==t&&y(e,t,n,"!=",d.notEqual)},d.deepEqual=function(e,t,n){w(e,t,!1)||y(e,t,n,"deepEqual",d.deepEqual)},d.deepStrictEqual=function(e,t,n){w(e,t,!0)||y(e,t,n,"deepStrictEqual",d.deepStrictEqual)},d.notDeepEqual=function(e,t,n){w(e,t,!1)&&y(e,t,n,"notDeepEqual",d.notDeepEqual)},d.notDeepStrictEqual=M,d.strictEqual=function(e,t,n){e!==t&&y(e,t,n,"===",d.strictEqual)},d.notStrictEqual=function(e,t,n){e===t&&y(e,t,n,"!==",d.notStrictEqual)},d.throws=function(e,t,n){S(!0,e,t,n)},d.doesNotThrow=function(e,t,n){S(!1,e,t,n)},d.ifError=function(e){if(e)throw e},d.strict=i(D,d,{equal:d.strictEqual,deepEqual:d.deepStrictEqual,notEqual:d.notStrictEqual,notDeepEqual:d.notDeepStrictEqual}),d.strict.strict=d.strict;var T=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}}).call(this,n("a032"))},"7fb2":function(e,t,n){var i=n("7f33"),r=n("1bbc").Buffer,o=n("ad93"),a=n("1af0"),s=a.newInvalidAsn1Error,l={size:1024,growthFactor:8};function u(e,t){i.ok(e),i.equal(typeof e,"object"),i.ok(t),i.equal(typeof t,"object");var n=Object.getOwnPropertyNames(e);return n.forEach((function(n){if(!t[n]){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i)}})),t}function c(e){e=u(l,e||{}),this._buf=r.alloc(e.size||1024),this._size=this._buf.length,this._offset=0,this._options=e,this._seq=[]}Object.defineProperty(c.prototype,"buffer",{get:function(){if(this._seq.length)throw s(this._seq.length+" unended sequence(s)");return this._buf.slice(0,this._offset)}}),c.prototype.writeByte=function(e){if("number"!==typeof e)throw new TypeError("argument must be a Number");this._ensure(1),this._buf[this._offset++]=e},c.prototype.writeInt=function(e,t){if("number"!==typeof e)throw new TypeError("argument must be a Number");"number"!==typeof t&&(t=o.Integer);var n=4;while((0===(4286578688&e)||-8388608===(4286578688&e))&&n>1)n--,e<<=8;if(n>4)throw s("BER ints cannot be > 0xffffffff");this._ensure(2+n),this._buf[this._offset++]=t,this._buf[this._offset++]=n;while(n-- >0)this._buf[this._offset++]=(4278190080&e)>>>24,e<<=8},c.prototype.writeNull=function(){this.writeByte(o.Null),this.writeByte(0)},c.prototype.writeEnumeration=function(e,t){if("number"!==typeof e)throw new TypeError("argument must be a Number");return"number"!==typeof t&&(t=o.Enumeration),this.writeInt(e,t)},c.prototype.writeBoolean=function(e,t){if("boolean"!==typeof e)throw new TypeError("argument must be a Boolean");"number"!==typeof t&&(t=o.Boolean),this._ensure(3),this._buf[this._offset++]=t,this._buf[this._offset++]=1,this._buf[this._offset++]=e?255:0},c.prototype.writeString=function(e,t){if("string"!==typeof e)throw new TypeError("argument must be a string (was: "+typeof e+")");"number"!==typeof t&&(t=o.OctetString);var n=r.byteLength(e);this.writeByte(t),this.writeLength(n),n&&(this._ensure(n),this._buf.write(e,this._offset),this._offset+=n)},c.prototype.writeBuffer=function(e,t){if("number"!==typeof t)throw new TypeError("tag must be a number");if(!r.isBuffer(e))throw new TypeError("argument must be a buffer");this.writeByte(t),this.writeLength(e.length),this._ensure(e.length),e.copy(this._buf,this._offset,0,e.length),this._offset+=e.length},c.prototype.writeStringArray=function(e){if(!e instanceof Array)throw new TypeError("argument must be an Array[String]");var t=this;e.forEach((function(e){t.writeString(e)}))},c.prototype.writeOID=function(e,t){if("string"!==typeof e)throw new TypeError("argument must be a string");if("number"!==typeof t&&(t=o.OID),!/^([0-9]+\.){3,}[0-9]+$/.test(e))throw new Error("argument is not a valid OID string");function n(e,t){t<128?e.push(t):t<16384?(e.push(t>>>7|128),e.push(127&t)):t<2097152?(e.push(t>>>14|128),e.push(255&(t>>>7|128)),e.push(127&t)):t<268435456?(e.push(t>>>21|128),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t)):(e.push(255&(t>>>28|128)),e.push(255&(t>>>21|128)),e.push(255&(t>>>14|128)),e.push(255&(t>>>7|128)),e.push(127&t))}var i=e.split("."),r=[];r.push(40*parseInt(i[0],10)+parseInt(i[1],10)),i.slice(2).forEach((function(e){n(r,parseInt(e,10))}));var a=this;this._ensure(2+r.length),this.writeByte(t),this.writeLength(r.length),r.forEach((function(e){a.writeByte(e)}))},c.prototype.writeLength=function(e){if("number"!==typeof e)throw new TypeError("argument must be a Number");if(this._ensure(4),e<=127)this._buf[this._offset++]=e;else if(e<=255)this._buf[this._offset++]=129,this._buf[this._offset++]=e;else if(e<=65535)this._buf[this._offset++]=130,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e;else{if(!(e<=16777215))throw s("Length too long (> 4 bytes)");this._buf[this._offset++]=131,this._buf[this._offset++]=e>>16,this._buf[this._offset++]=e>>8,this._buf[this._offset++]=e}},c.prototype.startSequence=function(e){"number"!==typeof e&&(e=o.Sequence|o.Constructor),this.writeByte(e),this._seq.push(this._offset),this._ensure(3),this._offset+=3},c.prototype.endSequence=function(){var e=this._seq.pop(),t=e+3,n=this._offset-t;if(n<=127)this._shift(t,n,-2),this._buf[e]=n;else if(n<=255)this._shift(t,n,-1),this._buf[e]=129,this._buf[e+1]=n;else if(n<=65535)this._buf[e]=130,this._buf[e+1]=n>>8,this._buf[e+2]=n;else{if(!(n<=16777215))throw s("Sequence too long");this._shift(t,n,1),this._buf[e]=131,this._buf[e+1]=n>>16,this._buf[e+2]=n>>8,this._buf[e+3]=n}},c.prototype._shift=function(e,t,n){i.ok(void 0!==e),i.ok(void 0!==t),i.ok(n),this._buf.copy(this._buf,e+n,e,e+t),this._offset+=n},c.prototype._ensure=function(e){if(i.ok(e),this._size-this._offset0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(e,t,n){var i=e.getItemLayout(t);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle}}};function A(e){return null!=e.startAngle&&null!=e.endAngle&&e.startAngle===e.endAngle}function k(e,t,n,i,r,s,u,c){var h=t.getItemVisual(n,"color"),d=t.getItemVisual(n,"opacity"),f=t.getVisual("borderColor"),p=i.getModel("itemStyle"),g=i.getModel("emphasis.itemStyle").getBarItemStyle();c||e.setShape("r",p.get("barBorderRadius")||0),e.useStyle(o.defaults({stroke:A(r)?"none":f,fill:A(r)?"none":h,opacity:d},p.getBarItemStyle()));var m=i.getShallow("cursor");m&&e.attr("cursor",m);var v=u?r.height>0?"bottom":"top":r.width>0?"left":"right";c||l(e.style,g,i,h,s,n,v),A(r)&&(g.fill=g.stroke="none"),a.setHoverStyle(e,g)}function E(e,t){var n=e.get(y)||0,i=isNaN(t.width)?Number.MAX_VALUE:Math.abs(t.width),r=isNaN(t.height)?Number.MAX_VALUE:Math.abs(t.height);return Math.min(n,i,r)}var N=h.extend({type:"largeBar",shape:{points:[]},buildPath:function(e,t){for(var n=t.points,i=this.__startPoint,r=this.__baseDimIdx,o=0;o=0?n:null}),30,!1);function L(e,t,n){var i=e.__baseDimIdx,r=1-i,o=e.shape.points,a=e.__largeDataIndices,s=Math.abs(e.__barWidth/2),l=e.__startPoint[r];b[0]=t,b[1]=n;for(var u=b[i],c=b[1-i],h=u-s,d=u+s,f=0,p=o.length/2;f=h&&m<=d&&(l<=v?c>=l&&c<=v:c>=v&&c<=l))return a[f]}return-1}function B(e,t,n){var i=n.getVisual("borderColor")||n.getVisual("color"),r=t.getModel("itemStyle").getItemStyle(["color","borderColor"]);e.useStyle(r),e.style.fill=null,e.style.stroke=i,e.style.lineWidth=n.getLayout("barWidth")}function j(e,t,n){var i=t.get("borderColor")||t.get("color"),r=t.getItemStyle(["color","borderColor"]);e.useStyle(r),e.style.fill=null,e.style.stroke=i,e.style.lineWidth=n.getLayout("barWidth")}function z(e,t,n){var i,r="polar"===n.type;return i=r?n.getArea():n.grid.getRect(),r?{cx:i.cx,cy:i.cy,r0:e?i.r0:t.r0,r:e?i.r:t.r,startAngle:e?t.startAngle:0,endAngle:e?t.endAngle:2*Math.PI}:{x:e?t.x:i.x,y:e?i.y:t.y,width:e?t.width:i.width,height:e?i.height:t.height}}function R(e,t,n){var i="polar"===e.type?a.Sector:a.Rect;return new i({shape:z(t,n,e),silent:!0,z2:0})}e.exports=x},"800c":function(e,t,n){var i=n("f298"),r=i.subPixelOptimize,o=n("de5c"),a=n("cb77"),s=a.parsePercent,l=n("357b"),u=l.retrieve2,c="undefined"!==typeof Float32Array?Float32Array:Array,h={seriesType:"candlestick",plan:o(),reset:function(e){var t=e.coordinateSystem,n=e.getData(),i=f(e,n),o=0,a=1,s=["x","y"],l=n.mapDimension(s[o]),u=n.mapDimension(s[a],!0),h=u[0],p=u[1],g=u[2],m=u[3];if(n.setLayout({candleWidth:i,isSimpleBox:i<=1.3}),!(null==l||u.length<4))return{progress:e.pipelineContext.large?y:v};function v(e,n){var s;while(null!=(s=e.next())){var u=n.get(l,s),c=n.get(h,s),f=n.get(p,s),v=n.get(g,s),y=n.get(m,s),b=Math.min(c,f),w=Math.max(c,f),x=S(b,u),_=S(w,u),M=S(v,u),I=S(y,u),C=[];D(C,_,0),D(C,x,1),C.push(A(I),A(_),A(M),A(x)),n.setItemLayout(s,{sign:d(n,s,c,f,p),initBaseline:c>f?_[a]:x[a],ends:C,brushRect:T(v,y,u)})}function S(e,n){var i=[];return i[o]=n,i[a]=e,isNaN(n)||isNaN(e)?[NaN,NaN]:t.dataToPoint(i)}function D(e,t,n){var a=t.slice(),s=t.slice();a[o]=r(a[o]+i/2,1,!1),s[o]=r(s[o]-i/2,1,!0),n?e.push(a,s):e.push(s,a)}function T(e,t,n){var r=S(e,n),s=S(t,n);return r[o]-=i/2,s[o]-=i/2,{x:r[0],y:r[1],width:a?i:s[0]-r[0],height:a?s[1]-r[1]:i}}function A(e){return e[o]=r(e[o],1),e}}function y(e,n){var i,r,s=new c(4*e.count),u=0,f=[],v=[];while(null!=(r=e.next())){var y=n.get(l,r),b=n.get(h,r),w=n.get(p,r),x=n.get(g,r),_=n.get(m,r);isNaN(y)||isNaN(x)||isNaN(_)?(s[u++]=NaN,u+=3):(s[u++]=d(n,r,b,w,p),f[o]=y,f[a]=x,i=t.dataToPoint(f,null,v),s[u++]=i?i[0]:NaN,s[u++]=i?i[1]:NaN,f[a]=_,i=t.dataToPoint(f,null,v),s[u++]=i?i[1]:NaN)}n.setLayout("largePoints",s)}}};function d(e,t,n,i,r){var o;return o=n>i?-1:n0?e.get(r,t-1)<=i?1:-1:1,o}function f(e,t){var n,i=e.getBaseAxis(),r="category"===i.type?i.getBandWidth():(n=i.getExtent(),Math.abs(n[1]-n[0])/t.count()),o=s(u(e.get("barMaxWidth"),r),r),a=s(u(e.get("barMinWidth"),1),r),l=e.get("barWidth");return null!=l?s(l,r):Math.max(Math.min(r/2,o),a)}e.exports=h},"80ec":function(e,t,n){var i=n("357b"),r=i.each;function o(e){var t=e&&e.visualMap;i.isArray(t)||(t=t?[t]:[]),r(t,(function(e){if(e){a(e,"splitList")&&!a(e,"pieces")&&(e.pieces=e.splitList,delete e.splitList);var t=e.pieces;t&&i.isArray(t)&&r(t,(function(e){i.isObject(e)&&(a(e,"start")&&!a(e,"min")&&(e.min=e.start),a(e,"end")&&!a(e,"max")&&(e.max=e.end))}))}}))}function a(e,t){return e&&e.hasOwnProperty&&e.hasOwnProperty(t)}e.exports=o},"80f1":function(e,t,n){var i=n("bb75"),r=n("2523"),o=n("e6fe");e.exports=function(e){return function(t,n,a){var s,l=i(t),u=r(l.length),c=o(a,u);if(e&&n!=n){while(u>c)if(s=l[c++],s!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}}},"813b":function(e,t,n){var i=n("2dc2"),r=n("e044"),o=n("bb75"),a=n("9168"),s=n("d996"),l=n("c2ac"),u=Object.getOwnPropertyDescriptor;t.f=n("c477")?u:function(e,t){if(e=o(e),t=a(t,!0),l)try{return u(e,t)}catch(n){}if(s(e,t))return r(!i.f.call(e,t),e[t])}},"81ba":function(e,t,n){var i=n("7dc6"),r=n("3ede"),o=n("0b9d"),a=o.getLayoutRect,s=n("357b"),l=s.each;function u(e,t,n){this.dimension="single",this.dimensions=["single"],this._axis=null,this._rect,this._init(e,t,n),this.model=e}u.prototype={type:"singleAxis",axisPointerEnabled:!0,constructor:u,_init:function(e,t,n){var o=this.dimension,a=new i(o,r.createScaleByModel(e),[0,0],e.get("type"),e.get("position")),s="category"===a.type;a.onBand=s&&e.get("boundaryGap"),a.inverse=e.get("inverse"),a.orient=e.get("orient"),e.axis=a,a.model=e,a.coordinateSystem=this,this._axis=a},update:function(e,t){e.eachSeries((function(e){if(e.coordinateSystem===this){var t=e.getData();l(t.mapDimension(this.dimension,!0),(function(e){this._axis.scale.unionExtentFromData(t,e)}),this),r.niceScaleExtent(this._axis.scale,this._axis.model)}}),this)},resize:function(e,t){this._rect=a({left:e.get("left"),top:e.get("top"),right:e.get("right"),bottom:e.get("bottom"),width:e.get("width"),height:e.get("height")},{width:t.getWidth(),height:t.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var e=this._rect,t=this._axis,n=t.isHorizontal(),i=n?[0,e.width]:[0,e.height],r=t.reverse?1:0;t.setExtent(i[r],i[1-r]),this._updateAxisTransform(t,n?e.x:e.y)},_updateAxisTransform:function(e,t){var n=e.getExtent(),i=n[0]+n[1],r=e.isHorizontal();e.toGlobalCoord=r?function(e){return e+t}:function(e){return i-e+t},e.toLocalCoord=r?function(e){return e-t}:function(e){return i-e+t}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},getAxes:function(){return[this._axis]},getTooltipAxes:function(){return{baseAxes:[this.getAxis()]}},containPoint:function(e){var t=this.getRect(),n=this.getAxis(),i=n.orient;return"horizontal"===i?n.contain(n.toLocalCoord(e[0]))&&e[1]>=t.y&&e[1]<=t.y+t.height:n.contain(n.toLocalCoord(e[1]))&&e[0]>=t.y&&e[0]<=t.y+t.height},pointToData:function(e){var t=this.getAxis();return[t.coordToData(t.toLocalCoord(e["horizontal"===t.orient?0:1]))]},dataToPoint:function(e){var t=this.getAxis(),n=this.getRect(),i=[],r="horizontal"===t.orient?0:1;return e instanceof Array&&(e=e[0]),i[r]=t.toGlobalCoord(t.dataToCoord(+e)),i[1-r]=0===r?n.y+n.height/2:n.x+n.width/2,i}};var c=u;e.exports=c},8245:function(e,t,n){var i=n("4c8a");e.exports=function(e,t,n){if(i(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}}},8291:function(e,t,n){var i=n("f298"),r=n("d82e"),o=i.Line.prototype,a=i.BezierCurve.prototype;function s(e){return isNaN(+e.cpx1)||isNaN(+e.cpy1)}var l=i.extendShape({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(e,t){this[s(t)?"_buildPathLine":"_buildPathCurve"](e,t)},_buildPathLine:o.buildPath,_buildPathCurve:a.buildPath,pointAt:function(e){return this[s(this.shape)?"_pointAtLine":"_pointAtCurve"](e)},_pointAtLine:o.pointAt,_pointAtCurve:a.pointAt,tangentAt:function(e){var t=this.shape,n=s(t)?[t.x2-t.x1,t.y2-t.y1]:this._tangentAtCurve(e);return r.normalize(n,n)},_tangentAtCurve:a.tangentAt});e.exports=l},8302:function(e,t,n){var i=n("138d"),r=i.extend({type:"timeline"});e.exports=r},8303:function(e,t,n){var i=n("d3e5"),r=n("2b10"),o=r.buildTransformer,a="___zrEVENTSAVED",s=[];function l(e,t,n,i,r){return u(s,t,i,r,!0)&&u(e,n,s[0],s[1])}function u(e,t,n,r,o){if(t.getBoundingClientRect&&i.domSupported&&!d(t)){var s=t[a]||(t[a]={}),l=c(t,s),u=h(l,s,o);if(u)return u(e,n,r),!0}return!1}function c(e,t){var n=t.markers;if(n)return n;n=t.markers=[];for(var i=["left","right"],r=["top","bottom"],o=0;o<4;o++){var a=document.createElement("div"),s=a.style,l=o%2,u=(o>>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[l]+":0",r[u]+":0",i[1-l]+":auto",r[1-u]+":auto",""].join("!important;"),e.appendChild(a),n.push(a)}return n}function h(e,t,n){for(var i=n?"invTrans":"trans",r=t[i],a=t.srcCoords,s=!0,l=[],u=[],c=0;c<4;c++){var h=e[c].getBoundingClientRect(),d=2*c,f=h.left,p=h.top;l.push(f,p),s=s&&a&&f===a[d]&&p===a[d+1],u.push(e[c].offsetLeft,e[c].offsetTop)}return s&&r?r:(t.srcCoords=l,t[i]=n?o(u,l):o(l,u))}function d(e){return"CANVAS"===e.nodeName.toUpperCase()}t.transformLocalCoord=l,t.transformCoordWithViewport=u,t.isCanvasEl=d},"830e":function(e,t,n){"use strict";var i=n("21e1"),r=n("d115");function o(){if(!(this instanceof o))return new o;r.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}i.inherits(o,r),e.exports=o,o.blockSize=512,o.outSize=224,o.hmacStrength=192,o.padLength=64,o.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h.slice(0,7),"big"):i.split32(this.h.slice(0,7),"big")}},"835f":function(e,t,n){"use strict";var i=n("21e1"),r=n("8a16"),o=i.rotl32,a=i.sum32,s=i.sum32_3,l=i.sum32_4,u=r.BlockHash;function c(){if(!(this instanceof c))return new c;u.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function h(e,t,n,i){return e<=15?t^n^i:e<=31?t&n|~t&i:e<=47?(t|~n)^i:e<=63?t&i|n&~i:t^(n|~i)}function d(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function f(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}i.inherits(c,u),t.ripemd160=c,c.blockSize=512,c.outSize=160,c.hmacStrength=192,c.padLength=64,c.prototype._update=function(e,t){for(var n=this.h[0],i=this.h[1],r=this.h[2],u=this.h[3],c=this.h[4],y=n,b=i,w=r,x=u,_=c,M=0;M<80;M++){var I=a(o(l(n,h(M,i,r,u),e[p[M]+t],d(M)),m[M]),c);n=c,c=u,u=o(r,10),r=i,i=I,I=a(o(l(y,h(79-M,b,w,x),e[g[M]+t],f(M)),v[M]),_),y=_,_=x,x=o(w,10),w=b,b=I}I=s(this.h[1],r,x),this.h[1]=s(this.h[2],u,_),this.h[2]=s(this.h[3],c,y),this.h[3]=s(this.h[4],n,b),this.h[4]=s(this.h[0],i,w),this.h[0]=I},c.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"little"):i.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],g=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],m=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],v=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},"838a":function(e,t,n){"use strict";var i,r=t,o=n("8855"),a=n("63b3"),s=n("791c"),l=s.assert;function u(e){"short"===e.type?this.curve=new a.short(e):"edwards"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,l(this.g.validate(),"Invalid curve"),l(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function c(e,t){Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:function(){var n=new u(t);return Object.defineProperty(r,e,{configurable:!0,enumerable:!0,value:n}),n}})}r.PresetCurve=u,c("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:o.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),c("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:o.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),c("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:o.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),c("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:o.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),c("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:o.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),c("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["9"]}),c("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:o.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{i=n("186d")}catch(h){i=void 0}c("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:o.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},"83d1":function(e,t){function n(e){var t,n=e.length;while(n--){if(t=e.readUInt8(n),255!==t){t++,e.writeUInt8(t,n);break}e.writeUInt8(0,n)}}e.exports=n},"841d":function(e){e.exports=JSON.parse('{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":512,"O_EXCL":2048,"O_NOCTTY":131072,"O_TRUNC":1024,"O_APPEND":8,"O_DIRECTORY":1048576,"O_NOFOLLOW":256,"O_SYNC":128,"O_SYMLINK":2097152,"O_NONBLOCK":4,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"E2BIG":7,"EACCES":13,"EADDRINUSE":48,"EADDRNOTAVAIL":49,"EAFNOSUPPORT":47,"EAGAIN":35,"EALREADY":37,"EBADF":9,"EBADMSG":94,"EBUSY":16,"ECANCELED":89,"ECHILD":10,"ECONNABORTED":53,"ECONNREFUSED":61,"ECONNRESET":54,"EDEADLK":11,"EDESTADDRREQ":39,"EDOM":33,"EDQUOT":69,"EEXIST":17,"EFAULT":14,"EFBIG":27,"EHOSTUNREACH":65,"EIDRM":90,"EILSEQ":92,"EINPROGRESS":36,"EINTR":4,"EINVAL":22,"EIO":5,"EISCONN":56,"EISDIR":21,"ELOOP":62,"EMFILE":24,"EMLINK":31,"EMSGSIZE":40,"EMULTIHOP":95,"ENAMETOOLONG":63,"ENETDOWN":50,"ENETRESET":52,"ENETUNREACH":51,"ENFILE":23,"ENOBUFS":55,"ENODATA":96,"ENODEV":19,"ENOENT":2,"ENOEXEC":8,"ENOLCK":77,"ENOLINK":97,"ENOMEM":12,"ENOMSG":91,"ENOPROTOOPT":42,"ENOSPC":28,"ENOSR":98,"ENOSTR":99,"ENOSYS":78,"ENOTCONN":57,"ENOTDIR":20,"ENOTEMPTY":66,"ENOTSOCK":38,"ENOTSUP":45,"ENOTTY":25,"ENXIO":6,"EOPNOTSUPP":102,"EOVERFLOW":84,"EPERM":1,"EPIPE":32,"EPROTO":100,"EPROTONOSUPPORT":43,"EPROTOTYPE":41,"ERANGE":34,"EROFS":30,"ESPIPE":29,"ESRCH":3,"ESTALE":70,"ETIME":101,"ETIMEDOUT":60,"ETXTBSY":26,"EWOULDBLOCK":35,"EXDEV":18,"SIGHUP":1,"SIGINT":2,"SIGQUIT":3,"SIGILL":4,"SIGTRAP":5,"SIGABRT":6,"SIGIOT":6,"SIGBUS":10,"SIGFPE":8,"SIGKILL":9,"SIGUSR1":30,"SIGSEGV":11,"SIGUSR2":31,"SIGPIPE":13,"SIGALRM":14,"SIGTERM":15,"SIGCHLD":20,"SIGCONT":19,"SIGSTOP":17,"SIGTSTP":18,"SIGTTIN":21,"SIGTTOU":22,"SIGURG":16,"SIGXCPU":24,"SIGXFSZ":25,"SIGVTALRM":26,"SIGPROF":27,"SIGWINCH":28,"SIGIO":23,"SIGSYS":12,"SSL_OP_ALL":2147486719,"SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION":262144,"SSL_OP_CIPHER_SERVER_PREFERENCE":4194304,"SSL_OP_CISCO_ANYCONNECT":32768,"SSL_OP_COOKIE_EXCHANGE":8192,"SSL_OP_CRYPTOPRO_TLSEXT_BUG":2147483648,"SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS":2048,"SSL_OP_EPHEMERAL_RSA":0,"SSL_OP_LEGACY_SERVER_CONNECT":4,"SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER":32,"SSL_OP_MICROSOFT_SESS_ID_BUG":1,"SSL_OP_MSIE_SSLV2_RSA_PADDING":0,"SSL_OP_NETSCAPE_CA_DN_BUG":536870912,"SSL_OP_NETSCAPE_CHALLENGE_BUG":2,"SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG":1073741824,"SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG":8,"SSL_OP_NO_COMPRESSION":131072,"SSL_OP_NO_QUERY_MTU":4096,"SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION":65536,"SSL_OP_NO_SSLv2":16777216,"SSL_OP_NO_SSLv3":33554432,"SSL_OP_NO_TICKET":16384,"SSL_OP_NO_TLSv1":67108864,"SSL_OP_NO_TLSv1_1":268435456,"SSL_OP_NO_TLSv1_2":134217728,"SSL_OP_PKCS1_CHECK_1":0,"SSL_OP_PKCS1_CHECK_2":0,"SSL_OP_SINGLE_DH_USE":1048576,"SSL_OP_SINGLE_ECDH_USE":524288,"SSL_OP_SSLEAY_080_CLIENT_DH_BUG":128,"SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG":0,"SSL_OP_TLS_BLOCK_PADDING_BUG":512,"SSL_OP_TLS_D5_BUG":256,"SSL_OP_TLS_ROLLBACK_BUG":8388608,"ENGINE_METHOD_DSA":2,"ENGINE_METHOD_DH":4,"ENGINE_METHOD_RAND":8,"ENGINE_METHOD_ECDH":16,"ENGINE_METHOD_ECDSA":32,"ENGINE_METHOD_CIPHERS":64,"ENGINE_METHOD_DIGESTS":128,"ENGINE_METHOD_STORE":256,"ENGINE_METHOD_PKEY_METHS":512,"ENGINE_METHOD_PKEY_ASN1_METHS":1024,"ENGINE_METHOD_ALL":65535,"ENGINE_METHOD_NONE":0,"DH_CHECK_P_NOT_SAFE_PRIME":2,"DH_CHECK_P_NOT_PRIME":1,"DH_UNABLE_TO_CHECK_GENERATOR":4,"DH_NOT_SUITABLE_GENERATOR":8,"NPN_ENABLED":1,"RSA_PKCS1_PADDING":1,"RSA_SSLV23_PADDING":2,"RSA_NO_PADDING":3,"RSA_PKCS1_OAEP_PADDING":4,"RSA_X931_PADDING":5,"RSA_PKCS1_PSS_PADDING":6,"POINT_CONVERSION_COMPRESSED":2,"POINT_CONVERSION_UNCOMPRESSED":4,"POINT_CONVERSION_HYBRID":6,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1,"UV_UDP_REUSEADDR":4}')},"84ad":function(e,t){function n(e,t,n){var i=e.getZoom(),r=e.getCenter(),o=t.zoom,a=e.dataToPoint(r);if(null!=t.dx&&null!=t.dy){a[0]-=t.dx,a[1]-=t.dy;r=e.pointToData(a);e.setCenter(r)}if(null!=o){if(n){var s=n.min||0,l=n.max||1/0;o=Math.max(Math.min(i*o,l),s)/i}e.scale[0]*=o,e.scale[1]*=o;var u=e.position,c=(t.originX-u[0])*(o-1),h=(t.originY-u[1])*(o-1);u[0]-=c,u[1]-=h,e.updateTransform();r=e.pointToData(a);e.setCenter(r),e.setZoom(o*i)}return{center:e.getCenter(),zoom:e.getZoom()}}t.updateCenterAndZoom=n},"84be":function(e,t){var n=2*Math.PI;function i(e){return e%=n,e<0&&(e+=n),e}t.normalizeRadian=i},"84d8":function(e,t,n){(function(e){var i=Object.getOwnPropertyDescriptors||function(e){for(var t=Object.keys(e),n={},i=0;i=o)return e;switch(e){case"%s":return String(i[n++]);case"%d":return Number(i[n++]);case"%j":try{return JSON.stringify(i[n++])}catch(t){return"[Circular]"}default:return e}})),l=i[n];n=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),y(n)?i.showHidden=n:n&&t._extend(i,n),I(i.showHidden)&&(i.showHidden=!1),I(i.depth)&&(i.depth=2),I(i.colors)&&(i.colors=!1),I(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=l),h(i,e,i.depth)}function l(e,t){var n=s.styles[t];return n?"["+s.colors[n][0]+"m"+e+"["+s.colors[n][1]+"m":e}function u(e,t){return e}function c(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}function h(e,n,i){if(e.customInspect&&n&&A(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var r=n.inspect(i,e);return _(r)||(r=h(e,r,i)),r}var o=d(e,n);if(o)return o;var a=Object.keys(n),s=c(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),T(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return f(n);if(0===a.length){if(A(n)){var l=n.name?": "+n.name:"";return e.stylize("[Function"+l+"]","special")}if(C(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(D(n))return e.stylize(Date.prototype.toString.call(n),"date");if(T(n))return f(n)}var u,y="",b=!1,w=["{","}"];if(v(n)&&(b=!0,w=["[","]"]),A(n)){var x=n.name?": "+n.name:"";y=" [Function"+x+"]"}return C(n)&&(y=" "+RegExp.prototype.toString.call(n)),D(n)&&(y=" "+Date.prototype.toUTCString.call(n)),T(n)&&(y=" "+f(n)),0!==a.length||b&&0!=n.length?i<0?C(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special"):(e.seen.push(n),u=b?p(e,n,i,s,a):a.map((function(t){return g(e,n,i,s,t,b)})),e.seen.pop(),m(u,y,w)):w[0]+y+w[1]}function d(e,t){if(I(t))return e.stylize("undefined","undefined");if(_(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}return x(t)?e.stylize(""+t,"number"):y(t)?e.stylize(""+t,"boolean"):b(t)?e.stylize("null","null"):void 0}function f(e){return"["+Error.prototype.toString.call(e)+"]"}function p(e,t,n,i,r){for(var o=[],a=0,s=t.length;a-1&&(s=o?s.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+s.split("\n").map((function(e){return" "+e})).join("\n"))):s=e.stylize("[Circular]","special")),I(a)){if(o&&r.match(/^\d+$/))return s;a=JSON.stringify(""+r),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function m(e,t,n){var i=e.reduce((function(e,t){return t.indexOf("\n")>=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0);return i>60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}function v(e){return Array.isArray(e)}function y(e){return"boolean"===typeof e}function b(e){return null===e}function w(e){return null==e}function x(e){return"number"===typeof e}function _(e){return"string"===typeof e}function M(e){return"symbol"===typeof e}function I(e){return void 0===e}function C(e){return S(e)&&"[object RegExp]"===E(e)}function S(e){return"object"===typeof e&&null!==e}function D(e){return S(e)&&"[object Date]"===E(e)}function T(e){return S(e)&&("[object Error]"===E(e)||e instanceof Error)}function A(e){return"function"===typeof e}function k(e){return null===e||"boolean"===typeof e||"number"===typeof e||"string"===typeof e||"symbol"===typeof e||"undefined"===typeof e}function E(e){return Object.prototype.toString.call(e)}function N(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(n){if(I(o)&&(o=Object({NODE_ENV:"production",VUE_APP_VERSION:"v1.0.0",BASE_URL:""}).NODE_DEBUG||""),n=n.toUpperCase(),!a[n])if(new RegExp("\\b"+n+"\\b","i").test(o)){var i=e.pid;a[n]=function(){var e=t.format.apply(t,arguments);console.error("%s %d: %s",n,i,e)}}else a[n]=function(){};return a[n]},t.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=v,t.isBoolean=y,t.isNull=b,t.isNullOrUndefined=w,t.isNumber=x,t.isString=_,t.isSymbol=M,t.isUndefined=I,t.isRegExp=C,t.isObject=S,t.isDate=D,t.isError=T,t.isFunction=A,t.isPrimitive=k,t.isBuffer=n("8e7f");var O=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function P(){var e=new Date,t=[N(e.getHours()),N(e.getMinutes()),N(e.getSeconds())].join(":");return[e.getDate(),O[e.getMonth()],t].join(" ")}function L(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",P(),t.format.apply(t,arguments))},t.inherits=n("bf77"),t._extend=function(e,t){if(!t||!S(t))return e;var n=Object.keys(t),i=n.length;while(i--)e[n[i]]=t[n[i]];return e};var B="undefined"!==typeof Symbol?Symbol("util.promisify.custom"):void 0;function j(e,t){if(!e){var n=new Error("Promise was rejected with a falsy value");n.reason=e,e=n}return t(e)}function z(t){if("function"!==typeof t)throw new TypeError('The "original" argument must be of type Function');function n(){for(var n=[],i=0;it&&o>i||or?a:0}e.exports=n},8567:function(e,t,n){var i=n("92dd"),r=n("490b"),o=n("f968"),a=o.getDimensionTypeByAxis,s=n("d6e9"),l=n("357b"),u=n("faa9"),c=u.groupData,h=n("405f"),d=h.encodeHTML,f=n("8ef8"),p=2,g=i.extend({type:"series.themeRiver",dependencies:["singleAxis"],nameMap:null,init:function(e){g.superApply(this,"init",arguments),this.legendVisualProvider=new f(l.bind(this.getData,this),l.bind(this.getRawData,this))},fixData:function(e){var t=e.length,n={},i=c(e,(function(e){return n.hasOwnProperty(e[0])||(n[e[0]]=-1),e[2]})),r=[];i.buckets.each((function(e,t){r.push({name:t,dataList:e})}));for(var o=r.length,a=0;a=0&&r.each(e,(function(e){i.setIconStatus(e,"normal")}))})),i.setIconStatus(n,"emphasis"),e.eachComponent({mainType:"series",query:null==o?null:{seriesIndex:o}},c),"stack"===n){var f=u.series&&u.series[0]&&u.series[0].stack===l;a=f?r.merge({stack:s.title.tiled},s.title):r.clone(s.title)}t.dispatchAction({type:"changeMagicType",currentType:n,newOption:u,newTitle:a,featureName:"magicType"})}},i.registerAction({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(e,t){t.mergeOption(e.newOption)})),a.register("magicType",u);var f=u;e.exports=f},"85ff":function(e,t,n){var i=n("357b");function r(e,t,n){if(e&&i.indexOf(t,e.type)>=0){var r=n.getData().tree.root,o=e.targetNode;if("string"===typeof o&&(o=r.getNodeById(o)),o&&r.contains(o))return{node:o};var a=e.targetNodeId;if(null!=a&&(o=r.getNodeById(a)))return{node:o}}}function o(e){var t=[];while(e)e=e.parentNode,e&&t.push(e);return t.reverse()}function a(e,t){var n=o(e);return i.indexOf(n,t)>=0}function s(e,t){var n=[];while(e){var i=e.dataIndex;n.push({name:e.name,dataIndex:i,value:t.getRawValue(i)}),e=e.parentNode}return n.reverse(),n}t.retrieveTargetInfo=r,t.getPathToRoot=o,t.aboveViewRoot=a,t.wrapTreePathInfo=s},8730:function(e,t,n){var i=n("357b"),r=n("d6e9"),o=n("cb77"),a=n("43ed"),s=n("d78f"),l=n("42c4"),u=n("53f2"),c=u.getStackedDimension,h=function(e,t,n,r){var o=e.getData(),s=r.type;if(!i.isArray(r)&&("min"===s||"max"===s||"average"===s||"median"===s||null!=r.xAxis||null!=r.yAxis)){var l,u;if(null!=r.yAxis||null!=r.xAxis)l=t.getAxis(null!=r.yAxis?"y":"x"),u=i.retrieve(r.yAxis,r.xAxis);else{var h=a.getAxisInfo(r,o,t,e);l=h.valueAxis;var d=c(o,h.valueDataDim);u=a.numCalculate(o,d,s)}var f="x"===l.dim?0:1,p=1-f,g=i.clone(r),m={};g.type=null,g.coord=[],m.coord=[],g.coord[p]=-1/0,m.coord[p]=1/0;var v=n.get("precision");v>=0&&"number"===typeof u&&(u=+u.toFixed(Math.min(v,20))),g.coord[f]=m.coord[f]=u,r=[g,m,{type:s,valueIndex:r.valueIndex,value:u}]}return r=[a.dataTransform(e,r[0]),a.dataTransform(e,r[1]),i.extend({},r[2])],r[2].type=r[2].type||"",i.merge(r[2],r[0]),i.merge(r[2],r[1]),r};function d(e){return!isNaN(e)&&!isFinite(e)}function f(e,t,n,i){var r=1-e,o=i.dimensions[e];return d(t[r])&&d(n[r])&&t[e]===n[e]&&i.getAxis(o).containData(t[e])}function p(e,t){if("cartesian2d"===e.type){var n=t[0].coord,i=t[1].coord;if(n&&i&&(f(1,n,i,e)||f(0,n,i,e)))return!0}return a.dataFilter(e,t[0])&&a.dataFilter(e,t[1])}function g(e,t,n,i,r){var a,s=i.coordinateSystem,l=e.getItemModel(t),u=o.parsePercent(l.get("x"),r.getWidth()),c=o.parsePercent(l.get("y"),r.getHeight());if(isNaN(u)||isNaN(c)){if(i.getMarkerPosition)a=i.getMarkerPosition(e.getValues(e.dimensions,t));else{var h=s.dimensions,f=e.get(h[0],t),p=e.get(h[1],t);a=s.dataToPoint([f,p])}if("cartesian2d"===s.type){var g=s.getAxis("x"),m=s.getAxis("y");h=s.dimensions;d(e.get(h[0],t))?a[0]=g.toGlobalCoord(g.getExtent()[n?0:1]):d(e.get(h[1],t))&&(a[1]=m.toGlobalCoord(m.getExtent()[n?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];e.setItemLayout(t,a)}var m=l.extend({type:"markLine",updateTransform:function(e,t,n){t.eachSeries((function(e){var t=e.markLineModel;if(t){var i=t.getData(),r=t.__from,o=t.__to;r.each((function(t){g(r,t,!0,e,n),g(o,t,!1,e,n)})),i.each((function(e){i.setItemLayout(e,[r.getItemLayout(e),o.getItemLayout(e)])})),this.markerGroupMap.get(e.id).updateLayout()}}),this)},renderSeries:function(e,t,n,r){var o=e.coordinateSystem,a=e.id,l=e.getData(),u=this.markerGroupMap,c=u.get(a)||u.set(a,new s);this.group.add(c.group);var h=v(o,e,t),d=h.from,f=h.to,p=h.line;t.__from=d,t.__to=f,t.setData(p);var m=t.get("symbol"),y=t.get("symbolSize");function b(t,n,i){var o=t.getItemModel(n);g(t,n,i,e,r),t.setItemVisual(n,{symbolRotate:o.get("symbolRotate"),symbolSize:o.get("symbolSize")||y[i?0:1],symbol:o.get("symbol",!0)||m[i?0:1],color:o.get("itemStyle.color")||l.getVisual("color")})}i.isArray(m)||(m=[m,m]),"number"===typeof y&&(y=[y,y]),h.from.each((function(e){b(d,e,!0),b(f,e,!1)})),p.each((function(e){var t=p.getItemModel(e).get("lineStyle.color");p.setItemVisual(e,{color:t||d.getItemVisual(e,"color")}),p.setItemLayout(e,[d.getItemLayout(e),f.getItemLayout(e)]),p.setItemVisual(e,{fromSymbolRotate:d.getItemVisual(e,"symbolRotate"),fromSymbolSize:d.getItemVisual(e,"symbolSize"),fromSymbol:d.getItemVisual(e,"symbol"),toSymbolRotate:f.getItemVisual(e,"symbolRotate"),toSymbolSize:f.getItemVisual(e,"symbolSize"),toSymbol:f.getItemVisual(e,"symbol")})})),c.updateData(p),h.line.eachItemGraphicEl((function(e,n){e.traverse((function(e){e.dataModel=t}))})),c.__keep=!0,c.group.silent=t.get("silent")||e.get("silent")}});function v(e,t,n){var o;o=e?i.map(e&&e.dimensions,(function(e){var n=t.getData().getDimensionInfo(t.getData().mapDimension(e))||{};return i.defaults({name:e},n)})):[{name:"value",type:"float"}];var s=new r(o,n),l=new r(o,n),u=new r([],n),c=i.map(n.get("data"),i.curry(h,t,e,n));e&&(c=i.filter(c,i.curry(p,e)));var d=e?a.dimValueGetter:function(e){return e.value};return s.initData(i.map(c,(function(e){return e[0]})),null,d),l.initData(i.map(c,(function(e){return e[1]})),null,d),u.initData(i.map(c,(function(e){return e[2]}))),u.hasItemOption=!0,{from:s,to:l,line:u}}e.exports=m},"879f":function(e,t,n){var i=n("357b"),r=n("f012"),o=n("92dd"),a=n("405f"),s=a.encodeHTML,l=a.addCommas,u=n("f211"),c=n("4f46"),h=c.retrieveRawAttr,d=n("a7ef"),f=n("887c"),p=f.makeSeriesEncodeForNameBased,g=o.extend({type:"series.map",dependencies:["geo"],layoutMode:"box",needsDrawMap:!1,seriesGroup:[],getInitialData:function(e){for(var t=r(this,{coordDimensions:["value"],encodeDefaulter:i.curry(p,this)}),n=t.mapDimension("value"),o=i.createHashMap(),a=[],s=[],l=0,u=t.count();l":"\n";return c.join(", ")+p+s(a+" : "+o)},getTooltipPosition:function(e){if(null!=e){var t=this.getData().getName(e),n=this.coordinateSystem,i=n.getRegion(t);return i&&n.dataToPoint(i.center)}},setZoom:function(e){this.option.zoom=e},setCenter:function(e){this.option.center=e},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}},nameProperty:"name"}});i.mixin(g,u);var m=g;e.exports=m},8836:function(e,t,n){var i=n("f298"),r=n("cb77"),o=r.round;function a(e,t,n){var r=e.getArea(),o=e.getBaseAxis().isHorizontal(),a=r.x,s=r.y,l=r.width,u=r.height,c=n.get("lineStyle.width")||2;a-=c/2,s-=c/2,l+=c,u+=c,a=Math.floor(a),l=Math.round(l);var h=new i.Rect({shape:{x:a,y:s,width:l,height:u}});return t&&(h.shape[o?"width":"height"]=0,i.initProps(h,{shape:{width:l,height:u}},n)),h}function s(e,t,n){var r=e.getArea(),a=new i.Sector({shape:{cx:o(e.cx,1),cy:o(e.cy,1),r0:o(r.r0,1),r:o(r.r,1),startAngle:r.startAngle,endAngle:r.endAngle,clockwise:r.clockwise}});return t&&(a.shape.endAngle=r.startAngle,i.initProps(a,{shape:{endAngle:r.endAngle}},n)),a}function l(e,t,n){return e?"polar"===e.type?s(e,t,n):"cartesian2d"===e.type?a(e,t,n):null:null}t.createGridClipPath=a,t.createPolarClipPath=s,t.createClipPath=l},8855:function(e,t,n){var i=t;i.utils=n("21e1"),i.common=n("8a16"),i.sha=n("63af"),i.ripemd=n("835f"),i.hmac=n("44a3"),i.sha1=i.sha.sha1,i.sha256=i.sha.sha256,i.sha224=i.sha.sha224,i.sha384=i.sha.sha384,i.sha512=i.sha.sha512,i.ripemd160=i.ripemd.ripemd160},"887c":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("faa9")),o=r.makeInner,a=r.getDataItemValue,s=n("357b"),l=s.createHashMap,u=s.each,c=s.map,h=s.isArray,d=s.isString,f=s.isObject,p=s.isTypedArray,g=s.isArrayLike,m=s.extend,v=(s.assert,n("d60c")),y=n("cc5e"),b=y.SOURCE_FORMAT_ORIGINAL,w=y.SOURCE_FORMAT_ARRAY_ROWS,x=y.SOURCE_FORMAT_OBJECT_ROWS,_=y.SOURCE_FORMAT_KEYED_COLUMNS,M=y.SOURCE_FORMAT_UNKNOWN,I=y.SOURCE_FORMAT_TYPED_ARRAY,C=y.SERIES_LAYOUT_BY_ROW,S={Must:1,Might:2,Not:3},D=o();function T(e){var t=e.option.source,n=M;if(p(t))n=I;else if(h(t)){0===t.length&&(n=w);for(var i=0,r=t.length;i=this._delta8){e=this.pending;var n=e.length%this._delta8;this.pending=e.slice(e.length-n,e.length),0===this.pending.length&&(this.pending=null),e=i.join32(e,0,e.length-n,this.endian);for(var r=0;r>>24&255,i[r++]=e>>>16&255,i[r++]=e>>>8&255,i[r++]=255&e}else for(i[r++]=255&e,i[r++]=e>>>8&255,i[r++]=e>>>16&255,i[r++]=e>>>24&255,i[r++]=0,i[r++]=0,i[r++]=0,i[r++]=0,o=8;o-1:e._q(e.model,e.trueLabel)},on:{change:[function(t){var n=e.model,i=t.target,r=i.checked?e.trueLabel:e.falseLabel;if(Array.isArray(n)){var o=null,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],staticClass:"el-checkbox__original",attrs:{type:"checkbox","aria-hidden":e.indeterminate?"true":"false",disabled:e.isDisabled,name:e.name},domProps:{value:e.label,checked:Array.isArray(e.model)?e._i(e.model,e.label)>-1:e.model},on:{change:[function(t){var n=e.model,i=t.target,r=!!i.checked;if(Array.isArray(n)){var o=e.label,a=e._i(n,o);i.checked?a<0&&(e.model=n.concat([o])):a>-1&&(e.model=n.slice(0,a).concat(n.slice(a+1)))}else e.model=r},e.handleChange],focus:function(t){e.focus=!0},blur:function(t){e.focus=!1}}})]),e.$slots.default||e.label?n("span",{staticClass:"el-checkbox__label"},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2):e._e()])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElCheckbox",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElCheckbox",data:function(){return{selfModel:!1,focus:!1,isLimitExceeded:!1}},computed:{model:{get:function(){return this.isGroup?this.store:void 0!==this.value?this.value:this.selfModel},set:function(e){this.isGroup?(this.isLimitExceeded=!1,void 0!==this._checkboxGroup.min&&e.lengththis._checkboxGroup.max&&(this.isLimitExceeded=!0),!1===this.isLimitExceeded&&this.dispatch("ElCheckboxGroup","input",[e])):(this.$emit("input",e),this.selfModel=e)}},isChecked:function(){return"[object Boolean]"==={}.toString.call(this.model)?this.model:Array.isArray(this.model)?this.model.indexOf(this.label)>-1:null!==this.model&&void 0!==this.model?this.model===this.trueLabel:void 0},isGroup:function(){var e=this.$parent;while(e){if("ElCheckboxGroup"===e.$options.componentName)return this._checkboxGroup=e,!0;e=e.$parent}return!1},store:function(){return this._checkboxGroup?this._checkboxGroup.value:this.value},isLimitDisabled:function(){var e=this._checkboxGroup,t=e.max,n=e.min;return!(!t&&!n)&&this.model.length>=t&&!this.isChecked||this.model.length<=n&&this.isChecked},isDisabled:function(){return this.isGroup?this._checkboxGroup.disabled||this.disabled||(this.elForm||{}).disabled||this.isLimitDisabled:this.disabled||(this.elForm||{}).disabled},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},checkboxSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._checkboxGroup.checkboxGroupSize||e}},props:{value:{},label:{},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:String,trueLabel:[String,Number],falseLabel:[String,Number],id:String,controls:String,border:Boolean,size:String},methods:{addToStore:function(){Array.isArray(this.model)&&-1===this.model.indexOf(this.label)?this.model.push(this.label):this.model=this.trueLabel||!0},handleChange:function(e){var t=this;if(!this.isLimitExceeded){var n=void 0;n=e.target.checked?void 0===this.trueLabel||this.trueLabel:void 0!==this.falseLabel&&this.falseLabel,this.$emit("change",n,e),this.$nextTick((function(){t.isGroup&&t.dispatch("ElCheckboxGroup","change",[t._checkboxGroup.value])}))}}},created:function(){this.checked&&this.addToStore()},mounted:function(){this.indeterminate&&this.$el.setAttribute("aria-controls",this.controls)},watch:{value:function(e){this.dispatch("ElFormItem","el.form.change",e)}}},l=s,u=n(0),c=Object(u["a"])(l,i,r,!1,null,null,null);c.options.__file="packages/checkbox/src/checkbox.vue";var h=c.exports;h.install=function(e){e.component(h.name,h)};t["default"]=h}})},"8c66":function(e,t,n){var i=n("357b"),r=n("0e58");n("6154");var o=r.extend({type:"parallel",dependencies:["parallelAxis"],coordinateSystem:null,dimensions:null,parallelAxisIndex:null,layoutMode:"box",defaultOption:{zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},init:function(){r.prototype.init.apply(this,arguments),this.mergeOption({})},mergeOption:function(e){var t=this.option;e&&i.merge(t,e,!0),this._initDimensions()},contains:function(e,t){var n=e.get("parallelIndex");return null!=n&&t.getComponent("parallel",n)===this},setAxisExpand:function(e){i.each(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],(function(t){e.hasOwnProperty(t)&&(this.option[t]=e[t])}),this)},_initDimensions:function(){var e=this.dimensions=[],t=this.parallelAxisIndex=[],n=i.filter(this.dependentModels.parallelAxis,(function(e){return(e.get("parallelIndex")||0)===this.componentIndex}),this);i.each(n,(function(n){e.push("dim"+n.get("dim")),t.push(n.componentIndex)}))}});e.exports=o},"8c91":function(e,t,n){"use strict";var i=n("462d"),r=n("6458"),o=10,a=40,s=800;function l(e){var t=0,n=0,i=0,r=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),i=t*o,r=n*o,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||r)&&e.deltaMode&&(1==e.deltaMode?(i*=a,r*=a):(i*=s,r*=s)),i&&!t&&(t=i<1?-1:1),r&&!n&&(n=r<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:r}}l.getEventType=function(){return i.firefox()?"DOMMouseScroll":r("wheel")?"wheel":"mousewheel"},e.exports=l},"8ce7":function(e,t,n){"use strict";(function(t){var i=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=u;var r=n("0f06"),o=n("64b2");n("7fdc")(u,r);for(var a=i(o.prototype),s=0;s0){s.virtualPiece?s.virtualPiece.updateData(!1,n,"normal",e,t):(s.virtualPiece=new o(n,e,t),h.add(s.virtualPiece)),i.piece._onclickEvent&&i.piece.off("click",i.piece._onclickEvent);var r=function(e){s._rootToNode(i.parentNode)};i.piece._onclickEvent=r,s.virtualPiece.on("click",r)}else s.virtualPiece&&(h.remove(s.virtualPiece),s.virtualPiece=null)}this._initEvents(),this._oldChildren=f},dispose:function(){},_initEvents:function(){var e=this,t=function(t){var n=!1,i=e.seriesModel.getViewRoot();i.eachNode((function(i){if(!n&&i.piece&&i.piece.childAt(0)===t.target){var r=i.getModel().get("nodeClick");if("rootToNode"===r)e._rootToNode(i);else if("link"===r){var o=i.getModel(),a=o.get("link");if(a){var s=o.get("target",!0)||"_blank";l(a,s)}}n=!0}}))};this.group._onclickEvent&&this.group.off("click",this.group._onclickEvent),this.group.on("click",t),this.group._onclickEvent=t},_rootToNode:function(e){e!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:u,from:this.uid,seriesId:this.seriesModel.id,targetNode:e})},containPoint:function(e,t){var n=t.getData(),i=n.getItemLayout(0);if(i){var r=e[0]-i.cx,o=e[1]-i.cy,a=Math.sqrt(r*r+o*o);return a<=i.r&&a>=i.r0}}}),h=c;e.exports=h},"8d3b":function(e,t,n){var i=n("357b"),r=n("96c5");function o(e,t,n){r.call(this,e,t,n),this.type="value",this.angle=0,this.name="",this.model}i.inherits(o,r);var a=o;e.exports=a},"8d57":function(e,t,n){var i=n("357b"),r=n("2636"),o=n("d6e9"),a=n("cb77"),s=n("f298"),l=n("43ed"),u=n("42c4"),c=function(e,t,n,r){var o=l.dataTransform(e,r[0]),a=l.dataTransform(e,r[1]),s=i.retrieve,u=o.coord,c=a.coord;u[0]=s(u[0],-1/0),u[1]=s(u[1],-1/0),c[0]=s(c[0],1/0),c[1]=s(c[1],1/0);var h=i.mergeAll([{},o,a]);return h.coord=[o.coord,a.coord],h.x0=o.x,h.y0=o.y,h.x1=a.x,h.y1=a.y,h};function h(e){return!isNaN(e)&&!isFinite(e)}function d(e,t,n,i){var r=1-e;return h(t[r])&&h(n[r])}function f(e,t){var n=t.coord[0],i=t.coord[1];return!("cartesian2d"!==e.type||!n||!i||!d(1,n,i,e)&&!d(0,n,i,e))||(l.dataFilter(e,{coord:n,x:t.x0,y:t.y0})||l.dataFilter(e,{coord:i,x:t.x1,y:t.y1}))}function p(e,t,n,i,r){var o,s=i.coordinateSystem,l=e.getItemModel(t),u=a.parsePercent(l.get(n[0]),r.getWidth()),c=a.parsePercent(l.get(n[1]),r.getHeight());if(isNaN(u)||isNaN(c)){if(i.getMarkerPosition)o=i.getMarkerPosition(e.getValues(n,t));else{var d=e.get(n[0],t),f=e.get(n[1],t),p=[d,f];s.clampData&&s.clampData(p,p),o=s.dataToPoint(p,!0)}if("cartesian2d"===s.type){var g=s.getAxis("x"),m=s.getAxis("y");d=e.get(n[0],t),f=e.get(n[1],t);h(d)?o[0]=g.toGlobalCoord(g.getExtent()["x0"===n[0]?0:1]):h(f)&&(o[1]=m.toGlobalCoord(m.getExtent()["y0"===n[1]?0:1]))}isNaN(u)||(o[0]=u),isNaN(c)||(o[1]=c)}else o=[u,c];return o}var g=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];function m(e,t,n){var r,a,s=["x0","y0","x1","y1"];e?(r=i.map(e&&e.dimensions,(function(e){var n=t.getData(),r=n.getDimensionInfo(n.mapDimension(e))||{};return i.defaults({name:e},r)})),a=new o(i.map(s,(function(e,t){return{name:e,type:r[t%2].type}})),n)):(r=[{name:"value",type:"float"}],a=new o(r,n));var l=i.map(n.get("data"),i.curry(c,t,e,n));e&&(l=i.filter(l,i.curry(f,e)));var u=e?function(e,t,n,i){return e.coord[Math.floor(i/2)][i%2]}:function(e){return e.value};return a.initData(l,null,u),a.hasItemOption=!0,a}u.extend({type:"markArea",updateTransform:function(e,t,n){t.eachSeries((function(e){var t=e.markAreaModel;if(t){var r=t.getData();r.each((function(t){var o=i.map(g,(function(i){return p(r,t,i,e,n)}));r.setItemLayout(t,o);var a=r.getItemGraphicEl(t);a.setShape("points",o)}))}}),this)},renderSeries:function(e,t,n,o){var a=e.coordinateSystem,l=e.id,u=e.getData(),c=this.markerGroupMap,d=c.get(l)||c.set(l,{group:new s.Group});this.group.add(d.group),d.__keep=!0;var f=m(a,e,t);t.setData(f),f.each((function(t){var n=i.map(g,(function(n){return p(f,t,n,e,o)})),r=!0;i.each(g,(function(e){if(r){var n=f.get(e[0],t),i=f.get(e[1],t);(h(n)||a.getAxis("x").containData(n))&&(h(i)||a.getAxis("y").containData(i))&&(r=!1)}})),f.setItemLayout(t,{points:n,allClipped:r}),f.setItemVisual(t,{color:u.getVisual("color")})})),f.diff(d.__data).add((function(e){var t=f.getItemLayout(e);if(!t.allClipped){var n=new s.Polygon({shape:{points:t.points}});f.setItemGraphicEl(e,n),d.group.add(n)}})).update((function(e,n){var i=d.__data.getItemGraphicEl(n),r=f.getItemLayout(e);r.allClipped?i&&d.group.remove(i):(i?s.updateProps(i,{shape:{points:r.points}},t,e):i=new s.Polygon({shape:{points:r.points}}),f.setItemGraphicEl(e,i),d.group.add(i))})).remove((function(e){var t=d.__data.getItemGraphicEl(e);d.group.remove(t)})).execute(),f.eachItemGraphicEl((function(e,n){var o=f.getItemModel(n),a=o.getModel("label"),l=o.getModel("emphasis.label"),u=f.getItemVisual(n,"color");e.useStyle(i.defaults(o.getModel("itemStyle").getItemStyle(),{fill:r.modifyAlpha(u,.4),stroke:u})),e.hoverStyle=o.getModel("emphasis.itemStyle").getItemStyle(),s.setLabelStyle(e.style,e.hoverStyle,a,l,{labelFetcher:t,labelDataIndex:n,defaultText:f.getName(n)||"",isRectText:!0,autoColor:u}),s.setHoverStyle(e,{}),e.dataModel=t})),d.__data=f,d.group.silent=t.get("silent")||e.get("silent")}})},"8dca":function(e,t,n){var i=n("ae03"),r=n("357b");function o(e,t){i.call(this,e,t,["filter"],"__filter_in_use__","_shadowDom")}function a(e){return e&&(e.shadowBlur||e.shadowOffsetX||e.shadowOffsetY||e.textShadowBlur||e.textShadowOffsetX||e.textShadowOffsetY)}r.inherits(o,i),o.prototype.addWithoutUpdate=function(e,t){if(t&&a(t.style)){var n;if(t._shadowDom){n=t._shadowDom;var i=this.getDefs(!0);i.contains(t._shadowDom)||this.addDom(n)}else n=this.add(t);this.markUsed(t);var r=n.getAttribute("id");e.style.filter="url(#"+r+")"}},o.prototype.add=function(e){var t=this.createElement("filter");return e._shadowDomId=e._shadowDomId||this.nextId++,t.setAttribute("id","zr"+this._zrId+"-shadow-"+e._shadowDomId),this.updateDom(e,t),this.addDom(t),t},o.prototype.update=function(e,t){var n=t.style;if(a(n)){var r=this;i.prototype.update.call(this,t,(function(){r.updateDom(t,t._shadowDom)}))}else this.remove(e,t)},o.prototype.remove=function(e,t){null!=t._shadowDomId&&(this.removeDom(e),e.style.filter="")},o.prototype.updateDom=function(e,t){var n=t.getElementsByTagName("feDropShadow");n=0===n.length?this.createElement("feDropShadow"):n[0];var i,r,o,a,s=e.style,l=e.scale&&e.scale[0]||1,u=e.scale&&e.scale[1]||1;if(s.shadowBlur||s.shadowOffsetX||s.shadowOffsetY)i=s.shadowOffsetX||0,r=s.shadowOffsetY||0,o=s.shadowBlur,a=s.shadowColor;else{if(!s.textShadowBlur)return void this.removeDom(t,s);i=s.textShadowOffsetX||0,r=s.textShadowOffsetY||0,o=s.textShadowBlur,a=s.textShadowColor}n.setAttribute("dx",i/l),n.setAttribute("dy",r/u),n.setAttribute("flood-color",a);var c=o/2/l,h=o/2/u,d=c+" "+h;n.setAttribute("stdDeviation",d),t.setAttribute("x","-100%"),t.setAttribute("y","-100%"),t.setAttribute("width",Math.ceil(o/2*200)+"%"),t.setAttribute("height",Math.ceil(o/2*200)+"%"),t.appendChild(n),e._shadowDom=t},o.prototype.markUsed=function(e){e._shadowDom&&i.prototype.markUsed.call(this,e._shadowDom)};var s=o;e.exports=s},"8dd4":function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=86)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},10:function(e,t){e.exports=n("49d9")},2:function(e,t){e.exports=n("ca1c")},22:function(e,t){e.exports=n("58e8")},30:function(e,t,n){"use strict";var i=n(2);t["a"]={bind:function(e,t,n){var r=null,o=void 0,a=function(){return n.context[t.expression].apply()},s=function(){Date.now()-o<100&&a(),clearInterval(r),r=null};Object(i["on"])(e,"mousedown",(function(e){0===e.button&&(o=Date.now(),Object(i["once"])(document,"mouseup",s),clearInterval(r),r=setInterval(a,100))}))}}},86:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:["el-input-number",e.inputNumberSize?"el-input-number--"+e.inputNumberSize:"",{"is-disabled":e.inputNumberDisabled},{"is-without-controls":!e.controls},{"is-controls-right":e.controlsAtRight}],on:{dragstart:function(e){e.preventDefault()}}},[e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.decrease,expression:"decrease"}],staticClass:"el-input-number__decrease",class:{"is-disabled":e.minDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.decrease(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-down":"minus")})]):e._e(),e.controls?n("span",{directives:[{name:"repeat-click",rawName:"v-repeat-click",value:e.increase,expression:"increase"}],staticClass:"el-input-number__increase",class:{"is-disabled":e.maxDisabled},attrs:{role:"button"},on:{keydown:function(t){return!("button"in t)&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.increase(t)}}},[n("i",{class:"el-icon-"+(e.controlsAtRight?"arrow-up":"plus")})]):e._e(),n("el-input",{ref:"input",attrs:{value:e.displayValue,placeholder:e.placeholder,disabled:e.inputNumberDisabled,size:e.inputNumberSize,max:e.max,min:e.min,name:e.name,label:e.label},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput,change:e.handleInputChange},nativeOn:{keydown:[function(t){return!("button"in t)&&e._k(t.keyCode,"up",38,t.key,["Up","ArrowUp"])?null:(t.preventDefault(),e.increase(t))},function(t){return!("button"in t)&&e._k(t.keyCode,"down",40,t.key,["Down","ArrowDown"])?null:(t.preventDefault(),e.decrease(t))}]}})],1)},r=[];i._withStripped=!0;var o=n(10),a=n.n(o),s=n(22),l=n.n(s),u=n(30),c={name:"ElInputNumber",mixins:[l()("input")],inject:{elForm:{default:""},elFormItem:{default:""}},directives:{repeatClick:u["a"]},components:{ElInput:a.a},props:{step:{type:Number,default:1},stepStrictly:{type:Boolean,default:!1},max:{type:Number,default:1/0},min:{type:Number,default:-1/0},value:{},disabled:Boolean,size:String,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:""},name:String,label:String,placeholder:String,precision:{type:Number,validator:function(e){return e>=0&&e===parseInt(e,10)}}},data:function(){return{currentValue:0,userInput:null}},watch:{value:{immediate:!0,handler:function(e){var t=void 0===e?e:Number(e);if(void 0!==t){if(isNaN(t))return;if(this.stepStrictly){var n=this.getPrecision(this.step),i=Math.pow(10,n);t=Math.round(t/this.step)*i*this.step/i}void 0!==this.precision&&(t=this.toPrecision(t,this.precision))}t>=this.max&&(t=this.max),t<=this.min&&(t=this.min),this.currentValue=t,this.userInput=null,this.$emit("input",t)}}},computed:{minDisabled:function(){return this._decrease(this.value,this.step)this.max},numPrecision:function(){var e=this.value,t=this.step,n=this.getPrecision,i=this.precision,r=n(t);return void 0!==i?(r>i&&console.warn("[Element Warn][InputNumber]precision should not be less than the decimal places of step"),i):Math.max(n(e),r)},controlsAtRight:function(){return this.controls&&"right"===this.controlsPosition},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},inputNumberSize:function(){return this.size||this._elFormItemSize||(this.$ELEMENT||{}).size},inputNumberDisabled:function(){return this.disabled||!!(this.elForm||{}).disabled},displayValue:function(){if(null!==this.userInput)return this.userInput;var e=this.currentValue;if("number"===typeof e){if(this.stepStrictly){var t=this.getPrecision(this.step),n=Math.pow(10,t);e=Math.round(e/this.step)*n*this.step/n}void 0!==this.precision&&(e=e.toFixed(this.precision))}return e}},methods:{toPrecision:function(e,t){return void 0===t&&(t=this.numPrecision),parseFloat(Math.round(e*Math.pow(10,t))/Math.pow(10,t))},getPrecision:function(e){if(void 0===e)return 0;var t=e.toString(),n=t.indexOf("."),i=0;return-1!==n&&(i=t.length-n-1),i},_increase:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e+n*t)/n)},_decrease:function(e,t){if("number"!==typeof e&&void 0!==e)return this.currentValue;var n=Math.pow(10,this.numPrecision);return this.toPrecision((n*e-n*t)/n)},increase:function(){if(!this.inputNumberDisabled&&!this.maxDisabled){var e=this.value||0,t=this._increase(e,this.step);this.setCurrentValue(t)}},decrease:function(){if(!this.inputNumberDisabled&&!this.minDisabled){var e=this.value||0,t=this._decrease(e,this.step);this.setCurrentValue(t)}},handleBlur:function(e){this.$emit("blur",e)},handleFocus:function(e){this.$emit("focus",e)},setCurrentValue:function(e){var t=this.currentValue;"number"===typeof e&&void 0!==this.precision&&(e=this.toPrecision(e,this.precision)),e>=this.max&&(e=this.max),e<=this.min&&(e=this.min),t!==e&&(this.userInput=null,this.$emit("input",e),this.$emit("change",e,t),this.currentValue=e)},handleInput:function(e){this.userInput=e},handleInputChange:function(e){var t=""===e?void 0:Number(e);isNaN(t)&&""!==e||this.setCurrentValue(t),this.userInput=null},select:function(){this.$refs.input.select()}},mounted:function(){var e=this.$refs.input.$refs.input;e.setAttribute("role","spinbutton"),e.setAttribute("aria-valuemax",this.max),e.setAttribute("aria-valuemin",this.min),e.setAttribute("aria-valuenow",this.currentValue),e.setAttribute("aria-disabled",this.inputNumberDisabled)},updated:function(){if(this.$refs&&this.$refs.input){var e=this.$refs.input.$refs.input;e.setAttribute("aria-valuenow",this.currentValue)}}},h=c,d=n(0),f=Object(d["a"])(h,i,r,!1,null,null,null);f.options.__file="packages/input-number/src/input-number.vue";var p=f.exports;p.install=function(e){e.component(p.name,p)};t["default"]=p}})},"8ddd":function(e,t,n){"use strict";n.r(t),function(e){var n=function(){if("undefined"!==typeof Map)return Map;function e(e,t){var n=-1;return e.some((function(e,i){return e[0]===t&&(n=i,!0)})),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(t,n){var i=e(this.__entries__,t);~i?this.__entries__[i][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,i=e(n,t);~i&&n.splice(i,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,i=this.__entries__;n0},e.prototype.connect_=function(){i&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),c?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){i&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t,i=u.some((function(e){return!!~n.indexOf(e)}));i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),d=function(e,t){for(var n=0,i=Object.keys(t);n0},e}(),T="undefined"!==typeof WeakMap?new WeakMap:new n,A=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=h.getInstance(),i=new D(t,n,this);T.set(this,i)}return e}();["observe","unobserve","disconnect"].forEach((function(e){A.prototype[e]=function(){var t;return(t=T.get(this))[e].apply(t,arguments)}}));var k=function(){return"undefined"!==typeof r.ResizeObserver?r.ResizeObserver:A}();t["default"]=k}.call(this,n("a032"))},"8e0a":function(e,t,n){var i=n("c20f");t.Dispatcher=i;var r=n("d3e5"),o=n("8303"),a=o.isCanvasEl,s=o.transformCoordWithViewport,l="undefined"!==typeof window&&!!window.addEventListener,u=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,c=[];function h(e,t,n,i){return n=n||{},i||!r.canvasSupported?d(e,t,n):r.browser.firefox&&null!=t.layerX&&t.layerX!==t.offsetX?(n.zrX=t.layerX,n.zrY=t.layerY):null!=t.offsetX?(n.zrX=t.offsetX,n.zrY=t.offsetY):d(e,t,n),n}function d(e,t,n){if(r.domSupported&&e.getBoundingClientRect){var i=t.clientX,o=t.clientY;if(a(e)){var l=e.getBoundingClientRect();return n.zrX=i-l.left,void(n.zrY=o-l.top)}if(s(c,e,i,o))return n.zrX=c[0],void(n.zrY=c[1])}n.zrX=n.zrY=0}function f(e){return e||window.event}function p(e,t,n){if(t=f(t),null!=t.zrX)return t;var i=t.type,r=i&&i.indexOf("touch")>=0;if(r){var o="touchend"!==i?t.targetTouches[0]:t.changedTouches[0];o&&h(e,o,t,n)}else h(e,t,t,n),t.zrDelta=t.wheelDelta?t.wheelDelta/120:-(t.detail||0)/3;var a=t.button;return null==t.which&&void 0!==a&&u.test(t.type)&&(t.which=1&a?1:2&a?3:4&a?2:0),t}function g(e,t,n,i){l?e.addEventListener(t,n,i):e.attachEvent("on"+t,n)}function m(e,t,n,i){l?e.removeEventListener(t,n,i):e.detachEvent("on"+t,n)}var v=l?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};function y(e){return 2===e.which||3===e.which}function b(e){return e.which>1}t.clientToLocal=h,t.getNativeEvent=f,t.normalizeEvent=p,t.addEventListener=g,t.removeEventListener=m,t.stop=v,t.isMiddleOrRightButtonOnMouseUpDown=y,t.notLeftMouse=b},"8e32":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=n("f298"),a=n("c28a"),s=a.getDefaultLabel,l=n("3061"),u=n("ac45"),c=u.getLayoutOnAxis,h=n("bedf"),d=n("92dd"),f=n("5571"),p=n("0634"),g=n("8836"),m=g.createClipPath,v=n("1692"),y=n("003e"),b=n("bf50"),w=n("546e"),x=n("a35f"),_=o.CACHED_LABEL_STYLE_PROPERTIES,M=["itemStyle"],I=["emphasis","itemStyle"],C=["label"],S=["emphasis","label"],D="e\0\0",T={cartesian2d:v,geo:y,singleAxis:b,polar:w,calendar:x};function A(e){var t,n=e.type;if("path"===n){var i=e.shape,r=null!=i.width&&null!=i.height?{x:i.x||0,y:i.y||0,width:i.width,height:i.height}:null,a=$(i);t=o.makePath(a,null,r,i.layout||"center"),t.__customPathData=a}else if("image"===n)t=new o.Image({}),t.__customImagePath=e.style.image;else if("text"===n)t=new o.Text({}),t.__customText=e.style.text;else if("group"===n)t=new o.Group;else{if("compoundPath"===n)throw new Error('"compoundPath" is not supported yet.');var s=o.getShapeClass(n);t=new s}return t.__customGraphicType=n,t.name=e.name,t}function k(e,t,n,i,a,s,l){var u={},c=n.style||{};if(n.shape&&(u.shape=r.clone(n.shape)),n.position&&(u.position=n.position.slice()),n.scale&&(u.scale=n.scale.slice()),n.origin&&(u.origin=n.origin.slice()),n.rotation&&(u.rotation=n.rotation),"image"===e.type&&n.style){var h=u.style={};r.each(["x","y","width","height"],(function(t){E(t,h,c,e.style,s)}))}if("text"===e.type&&n.style){h=u.style={};r.each(["x","y"],(function(t){E(t,h,c,e.style,s)})),!c.hasOwnProperty("textFill")&&c.fill&&(c.textFill=c.fill),!c.hasOwnProperty("textStroke")&&c.stroke&&(c.textStroke=c.stroke)}if("group"!==e.type&&(e.useStyle(c),s)){e.style.opacity=0;var d=c.opacity;null==d&&(d=1),o.initProps(e,{style:{opacity:d}},i,t)}s?e.attr(u):o.updateProps(e,u,i,t),n.hasOwnProperty("z2")&&e.attr("z2",n.z2||0),n.hasOwnProperty("silent")&&e.attr("silent",n.silent),n.hasOwnProperty("invisible")&&e.attr("invisible",n.invisible),n.hasOwnProperty("ignore")&&e.attr("ignore",n.ignore),n.hasOwnProperty("info")&&e.attr("info",n.info);var f=n.styleEmphasis;o.setElementHoverStyle(e,f),l&&o.setAsHighDownDispatcher(e,!1!==f)}function E(e,t,n,i,r){null==n[e]||r||(t[e]=n[e],n[e]=i[e])}function N(e,t,n,i){var a=e.get("renderItem"),l=e.coordinateSystem,u={};l&&(u=l.prepareCustoms?l.prepareCustoms():T[l.type](l));var h,d,f,p,g,m=r.defaults({getWidth:i.getWidth,getHeight:i.getHeight,getZr:i.getZr,getDevicePixelRatio:i.getDevicePixelRatio,value:w,style:x,styleEmphasis:_,visual:D,barLayout:A,currentSeriesIndices:k,font:E},u.api||{}),v={context:{},seriesId:e.id,seriesName:e.name,seriesIndex:e.seriesIndex,coordSys:u.coordSys,dataInsideLength:t.count(),encode:O(e.getData())},y=!0;return function(e,n){return h=e,y=!0,a&&a(r.defaults({dataIndexInside:e,dataIndex:t.getRawIndex(e),actionType:n?n.type:null},v),m)};function b(e){null==e&&(e=h),y&&(d=t.getItemModel(e),f=d.getModel(C),p=d.getModel(S),g=t.getItemVisual(e,"color"),y=!1)}function w(e,n){return null==n&&(n=h),t.get(t.getDimension(e||0),n)}function x(n,i){null==i&&(i=h),b(i);var a=d.getModel(M).getItemStyle();null!=g&&(a.fill=g);var l=t.getItemVisual(i,"opacity");null!=l&&(a.opacity=l);var u=n?F(n,f):f;return o.setTextStyle(a,u,null,{autoColor:g,isRectText:!0}),a.text=u.getShallow("show")?r.retrieve2(e.getFormattedLabel(i,"normal"),s(t,i)):null,n&&V(a,n),a}function _(n,i){null==i&&(i=h),b(i);var a=d.getModel(I).getItemStyle(),l=n?F(n,p):p;return o.setTextStyle(a,l,null,{isRectText:!0},!0),a.text=l.getShallow("show")?r.retrieve3(e.getFormattedLabel(i,"emphasis"),e.getFormattedLabel(i,"normal"),s(t,i)):null,n&&V(a,n),a}function D(e,n){return null==n&&(n=h),t.getItemVisual(n,e)}function A(e){if(l.getBaseAxis){var t=l.getBaseAxis();return c(r.defaults({axis:t},e),i)}}function k(){return n.getCurrentSeriesIndices()}function E(e){return o.getFont(e,n)}}function O(e){var t={};return r.each(e.dimensions,(function(n,i){var r=e.getDimensionInfo(n);if(!r.isExtraCoord){var o=r.coordDim,a=t[o]=t[o]||[];a[r.coordDimIndex]=i}})),t}function P(e,t,n,i,r,o){return e=L(e,t,n,i,r,o,!0),e&&o.setItemGraphicEl(t,e),e}function L(e,t,n,i,r,o,a){var s=!n;n=n||{};var l=n.type,u=n.shape,c=n.style;if(e&&(s||null!=l&&l!==e.__customGraphicType||"path"===l&&U(u)&&$(u)!==e.__customPathData||"image"===l&&W(c,"image")&&c.image!==e.__customImagePath||"text"===l&&W(u,"text")&&c.text!==e.__customText)&&(r.remove(e),e=null),!s){var h=!e;return!e&&(e=A(n)),k(e,t,n,i,o,h,a),"group"===l&&B(e,t,n,i,o),r.add(e),e}}function B(e,t,n,i,r){var o=n.children,a=o?o.length:0,s=n.$mergeChildren,l="byName"===s||n.diffChildrenByName,u=!1===s;if(a||l||u)if(l)j({oldChildren:e.children()||[],newChildren:o||[],dataIndex:t,animatableModel:i,group:e,data:r});else{u&&e.removeAll();for(var c=0;c=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var i=(4294967295&n)>>>0,r=(n-i)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(i,this._blockSize-4)}this._update(this._block);var o=this._hash();return e?o.toString(e):o},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},e.exports=r},"8ef8":function(e,t){function n(e,t){this.getAllNames=function(){var e=t();return e.mapArray(e.getName)},this.containName=function(e){var n=t();return n.indexOfName(e)>=0},this.indexOfName=function(t){var n=e();return n.indexOfName(t)},this.getItemVisual=function(t,n){var i=e();return i.getItemVisual(t,n)}}var i=n;e.exports=i},"8ff8":function(e,t,n){var i=n("364b"),r=n("e66d"),o=n("ac92"),a=Math.sqrt,s=Math.sin,l=Math.cos,u=Math.PI,c=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},h=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(c(e)*c(t))},d=function(e,t){return(e[0]*t[1]1&&(c*=a(w),f*=a(w));var x=(r===o?-1:1)*a((c*c*(f*f)-c*c*(b*b)-f*f*(y*y))/(c*c*(b*b)+f*f*(y*y)))||0,_=x*c*b/f,M=x*-f*y/c,I=(e+n)/2+l(v)*_-s(v)*M,C=(t+i)/2+s(v)*_+l(v)*M,S=d([1,0],[(y-_)/c,(b-M)/f]),D=[(y-_)/c,(b-M)/f],T=[(-1*y-_)/c,(-1*b-M)/f],A=d(D,T);h(D,T)<=-1&&(A=u),h(D,T)>=1&&(A=0),0===o&&A>0&&(A-=2*u),1===o&&A<0&&(A+=2*u),m.addData(g,I,C,c,f,S,A,v,o)}var p=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,g=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function m(e){if(!e)return new r;for(var t,n=0,i=0,o=n,a=i,s=new r,l=r.CMD,u=e.match(p),c=0;c=65&&n<=70?n-55:n>=97&&n<=102?n-87:n-48&15}function l(e,t,n){var i=s(e,n);return n-1>=t&&(i|=s(e,n-1)<<4),i}function u(e,t,n,i){for(var r=0,o=Math.min(e.length,n),a=t;a=49?s-49+10:s>=17?s-17+10:s}return r}o.isBN=function(e){return e instanceof o||null!==e&&"object"===typeof e&&e.constructor.wordSize===o.wordSize&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,n){if("number"===typeof e)return this._initNumber(e,t,n);if("object"===typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36),e=e.toString().replace(/\s+/g,"");var r=0;"-"===e[0]&&(r++,this.negative=1),r=0;r-=3)a=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[o]|=a<>>26-s&67108863,s+=24,s>=26&&(s-=26,o++);else if("le"===n)for(r=0,o=0;r>>26-s&67108863,s+=24,s>=26&&(s-=26,o++);return this.strip()},o.prototype._parseHex=function(e,t,n){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var i=0;i=t;i-=2)r=l(e,t,i)<=18?(o-=18,a+=1,this.words[a]|=r>>>26):o+=8;else{var s=e.length-t;for(i=s%2===0?t+1:t;i=18?(o-=18,a+=1,this.words[a]|=r>>>26):o+=8}this.strip()},o.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var i=0,r=1;r<=67108863;r*=t)i++;i--,r=r/t|0;for(var o=e.length-n,a=o%i,s=Math.min(o,o-a)+n,l=0,c=n;c1&&0===this.words[this.length-1])this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],h=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],d=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(e){for(var t=new Array(e.bitLength()),n=0;n>>r}return t}function p(e,t,n){n.negative=t.negative^e.negative;var i=e.length+t.length|0;n.length=i,i=i-1|0;var r=0|e.words[0],o=0|t.words[0],a=r*o,s=67108863&a,l=a/67108864|0;n.words[0]=s;for(var u=1;u>>26,h=67108863&l,d=Math.min(u,t.length-1),f=Math.max(0,u-e.length+1);f<=d;f++){var p=u-f|0;r=0|e.words[p],o=0|t.words[f],a=r*o+h,c+=a/67108864|0,h=67108863&a}n.words[u]=0|h,l=0|c}return 0!==l?n.words[u]=0|l:n.length--,n.strip()}o.prototype.toString=function(e,t){var n;if(e=e||10,t=0|t||1,16===e||"hex"===e){n="";for(var r=0,o=0,a=0;a>>24-r&16777215,n=0!==o||a!==this.length-1?c[6-l.length]+l+n:l+n,r+=2,r>=26&&(r-=26,a--)}0!==o&&(n=o.toString(16)+n);while(n.length%t!==0)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var u=h[e],f=d[e];n="";var p=this.clone();p.negative=0;while(!p.isZero()){var g=p.modn(f).toString(e);p=p.idivn(f),n=p.isZero()?g+n:c[u-g.length]+g+n}this.isZero()&&(n="0"+n);while(n.length%t!==0)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return i("undefined"!==typeof a),this.toArrayLike(a,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,n){var r=this.byteLength(),o=n||Math.max(1,r);i(r<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0"),this.strip();var a,s,l="le"===t,u=new e(o),c=this.clone();if(l){for(s=0;!c.isZero();s++)a=c.andln(255),c.iushrn(8),u[s]=a;for(;s=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0===(8191&t)&&(n+=13,t>>>=13),0===(127&t)&&(n+=7,t>>>=7),0===(15&t)&&(n+=4,t>>>=4),0===(3&t)&&(n+=2,t>>>=2),0===(1&t)&&n++,n},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;ne.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var i=0;ie.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){i("number"===typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var r=0;r0&&(this.words[r]=~this.words[r]&67108863>>26-n),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){i("number"===typeof e&&e>=0);var n=e/26|0,r=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<e.length?(n=this,i=e):(n=e,i=this);for(var r=0,o=0;o>>26;for(;0!==r&&o>>26;if(this.length=n.length,0!==r)this.words[this.length]=r,this.length++;else if(n!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,i,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,f=0|a[1],p=8191&f,g=f>>>13,m=0|a[2],v=8191&m,y=m>>>13,b=0|a[3],w=8191&b,x=b>>>13,_=0|a[4],M=8191&_,I=_>>>13,C=0|a[5],S=8191&C,D=C>>>13,T=0|a[6],A=8191&T,k=T>>>13,E=0|a[7],N=8191&E,O=E>>>13,P=0|a[8],L=8191&P,B=P>>>13,j=0|a[9],z=8191&j,R=j>>>13,F=0|s[0],V=8191&F,H=F>>>13,$=0|s[1],U=8191&$,W=$>>>13,G=0|s[2],Z=8191&G,Y=G>>>13,Q=0|s[3],q=8191&Q,K=Q>>>13,X=0|s[4],J=8191&X,ee=X>>>13,te=0|s[5],ne=8191&te,ie=te>>>13,re=0|s[6],oe=8191&re,ae=re>>>13,se=0|s[7],le=8191&se,ue=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,fe=0|s[9],pe=8191&fe,ge=fe>>>13;n.negative=e.negative^t.negative,n.length=19,i=Math.imul(h,V),r=Math.imul(h,H),r=r+Math.imul(d,V)|0,o=Math.imul(d,H);var me=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(p,V),r=Math.imul(p,H),r=r+Math.imul(g,V)|0,o=Math.imul(g,H),i=i+Math.imul(h,U)|0,r=r+Math.imul(h,W)|0,r=r+Math.imul(d,U)|0,o=o+Math.imul(d,W)|0;var ve=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(v,V),r=Math.imul(v,H),r=r+Math.imul(y,V)|0,o=Math.imul(y,H),i=i+Math.imul(p,U)|0,r=r+Math.imul(p,W)|0,r=r+Math.imul(g,U)|0,o=o+Math.imul(g,W)|0,i=i+Math.imul(h,Z)|0,r=r+Math.imul(h,Y)|0,r=r+Math.imul(d,Z)|0,o=o+Math.imul(d,Y)|0;var ye=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(w,V),r=Math.imul(w,H),r=r+Math.imul(x,V)|0,o=Math.imul(x,H),i=i+Math.imul(v,U)|0,r=r+Math.imul(v,W)|0,r=r+Math.imul(y,U)|0,o=o+Math.imul(y,W)|0,i=i+Math.imul(p,Z)|0,r=r+Math.imul(p,Y)|0,r=r+Math.imul(g,Z)|0,o=o+Math.imul(g,Y)|0,i=i+Math.imul(h,q)|0,r=r+Math.imul(h,K)|0,r=r+Math.imul(d,q)|0,o=o+Math.imul(d,K)|0;var be=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(M,V),r=Math.imul(M,H),r=r+Math.imul(I,V)|0,o=Math.imul(I,H),i=i+Math.imul(w,U)|0,r=r+Math.imul(w,W)|0,r=r+Math.imul(x,U)|0,o=o+Math.imul(x,W)|0,i=i+Math.imul(v,Z)|0,r=r+Math.imul(v,Y)|0,r=r+Math.imul(y,Z)|0,o=o+Math.imul(y,Y)|0,i=i+Math.imul(p,q)|0,r=r+Math.imul(p,K)|0,r=r+Math.imul(g,q)|0,o=o+Math.imul(g,K)|0,i=i+Math.imul(h,J)|0,r=r+Math.imul(h,ee)|0,r=r+Math.imul(d,J)|0,o=o+Math.imul(d,ee)|0;var we=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(S,V),r=Math.imul(S,H),r=r+Math.imul(D,V)|0,o=Math.imul(D,H),i=i+Math.imul(M,U)|0,r=r+Math.imul(M,W)|0,r=r+Math.imul(I,U)|0,o=o+Math.imul(I,W)|0,i=i+Math.imul(w,Z)|0,r=r+Math.imul(w,Y)|0,r=r+Math.imul(x,Z)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(v,q)|0,r=r+Math.imul(v,K)|0,r=r+Math.imul(y,q)|0,o=o+Math.imul(y,K)|0,i=i+Math.imul(p,J)|0,r=r+Math.imul(p,ee)|0,r=r+Math.imul(g,J)|0,o=o+Math.imul(g,ee)|0,i=i+Math.imul(h,ne)|0,r=r+Math.imul(h,ie)|0,r=r+Math.imul(d,ne)|0,o=o+Math.imul(d,ie)|0;var xe=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(A,V),r=Math.imul(A,H),r=r+Math.imul(k,V)|0,o=Math.imul(k,H),i=i+Math.imul(S,U)|0,r=r+Math.imul(S,W)|0,r=r+Math.imul(D,U)|0,o=o+Math.imul(D,W)|0,i=i+Math.imul(M,Z)|0,r=r+Math.imul(M,Y)|0,r=r+Math.imul(I,Z)|0,o=o+Math.imul(I,Y)|0,i=i+Math.imul(w,q)|0,r=r+Math.imul(w,K)|0,r=r+Math.imul(x,q)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(v,J)|0,r=r+Math.imul(v,ee)|0,r=r+Math.imul(y,J)|0,o=o+Math.imul(y,ee)|0,i=i+Math.imul(p,ne)|0,r=r+Math.imul(p,ie)|0,r=r+Math.imul(g,ne)|0,o=o+Math.imul(g,ie)|0,i=i+Math.imul(h,oe)|0,r=r+Math.imul(h,ae)|0,r=r+Math.imul(d,oe)|0,o=o+Math.imul(d,ae)|0;var _e=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(N,V),r=Math.imul(N,H),r=r+Math.imul(O,V)|0,o=Math.imul(O,H),i=i+Math.imul(A,U)|0,r=r+Math.imul(A,W)|0,r=r+Math.imul(k,U)|0,o=o+Math.imul(k,W)|0,i=i+Math.imul(S,Z)|0,r=r+Math.imul(S,Y)|0,r=r+Math.imul(D,Z)|0,o=o+Math.imul(D,Y)|0,i=i+Math.imul(M,q)|0,r=r+Math.imul(M,K)|0,r=r+Math.imul(I,q)|0,o=o+Math.imul(I,K)|0,i=i+Math.imul(w,J)|0,r=r+Math.imul(w,ee)|0,r=r+Math.imul(x,J)|0,o=o+Math.imul(x,ee)|0,i=i+Math.imul(v,ne)|0,r=r+Math.imul(v,ie)|0,r=r+Math.imul(y,ne)|0,o=o+Math.imul(y,ie)|0,i=i+Math.imul(p,oe)|0,r=r+Math.imul(p,ae)|0,r=r+Math.imul(g,oe)|0,o=o+Math.imul(g,ae)|0,i=i+Math.imul(h,le)|0,r=r+Math.imul(h,ue)|0,r=r+Math.imul(d,le)|0,o=o+Math.imul(d,ue)|0;var Me=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(L,V),r=Math.imul(L,H),r=r+Math.imul(B,V)|0,o=Math.imul(B,H),i=i+Math.imul(N,U)|0,r=r+Math.imul(N,W)|0,r=r+Math.imul(O,U)|0,o=o+Math.imul(O,W)|0,i=i+Math.imul(A,Z)|0,r=r+Math.imul(A,Y)|0,r=r+Math.imul(k,Z)|0,o=o+Math.imul(k,Y)|0,i=i+Math.imul(S,q)|0,r=r+Math.imul(S,K)|0,r=r+Math.imul(D,q)|0,o=o+Math.imul(D,K)|0,i=i+Math.imul(M,J)|0,r=r+Math.imul(M,ee)|0,r=r+Math.imul(I,J)|0,o=o+Math.imul(I,ee)|0,i=i+Math.imul(w,ne)|0,r=r+Math.imul(w,ie)|0,r=r+Math.imul(x,ne)|0,o=o+Math.imul(x,ie)|0,i=i+Math.imul(v,oe)|0,r=r+Math.imul(v,ae)|0,r=r+Math.imul(y,oe)|0,o=o+Math.imul(y,ae)|0,i=i+Math.imul(p,le)|0,r=r+Math.imul(p,ue)|0,r=r+Math.imul(g,le)|0,o=o+Math.imul(g,ue)|0,i=i+Math.imul(h,he)|0,r=r+Math.imul(h,de)|0,r=r+Math.imul(d,he)|0,o=o+Math.imul(d,de)|0;var Ie=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(z,V),r=Math.imul(z,H),r=r+Math.imul(R,V)|0,o=Math.imul(R,H),i=i+Math.imul(L,U)|0,r=r+Math.imul(L,W)|0,r=r+Math.imul(B,U)|0,o=o+Math.imul(B,W)|0,i=i+Math.imul(N,Z)|0,r=r+Math.imul(N,Y)|0,r=r+Math.imul(O,Z)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(A,q)|0,r=r+Math.imul(A,K)|0,r=r+Math.imul(k,q)|0,o=o+Math.imul(k,K)|0,i=i+Math.imul(S,J)|0,r=r+Math.imul(S,ee)|0,r=r+Math.imul(D,J)|0,o=o+Math.imul(D,ee)|0,i=i+Math.imul(M,ne)|0,r=r+Math.imul(M,ie)|0,r=r+Math.imul(I,ne)|0,o=o+Math.imul(I,ie)|0,i=i+Math.imul(w,oe)|0,r=r+Math.imul(w,ae)|0,r=r+Math.imul(x,oe)|0,o=o+Math.imul(x,ae)|0,i=i+Math.imul(v,le)|0,r=r+Math.imul(v,ue)|0,r=r+Math.imul(y,le)|0,o=o+Math.imul(y,ue)|0,i=i+Math.imul(p,he)|0,r=r+Math.imul(p,de)|0,r=r+Math.imul(g,he)|0,o=o+Math.imul(g,de)|0,i=i+Math.imul(h,pe)|0,r=r+Math.imul(h,ge)|0,r=r+Math.imul(d,pe)|0,o=o+Math.imul(d,ge)|0;var Ce=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(z,U),r=Math.imul(z,W),r=r+Math.imul(R,U)|0,o=Math.imul(R,W),i=i+Math.imul(L,Z)|0,r=r+Math.imul(L,Y)|0,r=r+Math.imul(B,Z)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(N,q)|0,r=r+Math.imul(N,K)|0,r=r+Math.imul(O,q)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(A,J)|0,r=r+Math.imul(A,ee)|0,r=r+Math.imul(k,J)|0,o=o+Math.imul(k,ee)|0,i=i+Math.imul(S,ne)|0,r=r+Math.imul(S,ie)|0,r=r+Math.imul(D,ne)|0,o=o+Math.imul(D,ie)|0,i=i+Math.imul(M,oe)|0,r=r+Math.imul(M,ae)|0,r=r+Math.imul(I,oe)|0,o=o+Math.imul(I,ae)|0,i=i+Math.imul(w,le)|0,r=r+Math.imul(w,ue)|0,r=r+Math.imul(x,le)|0,o=o+Math.imul(x,ue)|0,i=i+Math.imul(v,he)|0,r=r+Math.imul(v,de)|0,r=r+Math.imul(y,he)|0,o=o+Math.imul(y,de)|0,i=i+Math.imul(p,pe)|0,r=r+Math.imul(p,ge)|0,r=r+Math.imul(g,pe)|0,o=o+Math.imul(g,ge)|0;var Se=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(z,Z),r=Math.imul(z,Y),r=r+Math.imul(R,Z)|0,o=Math.imul(R,Y),i=i+Math.imul(L,q)|0,r=r+Math.imul(L,K)|0,r=r+Math.imul(B,q)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(N,J)|0,r=r+Math.imul(N,ee)|0,r=r+Math.imul(O,J)|0,o=o+Math.imul(O,ee)|0,i=i+Math.imul(A,ne)|0,r=r+Math.imul(A,ie)|0,r=r+Math.imul(k,ne)|0,o=o+Math.imul(k,ie)|0,i=i+Math.imul(S,oe)|0,r=r+Math.imul(S,ae)|0,r=r+Math.imul(D,oe)|0,o=o+Math.imul(D,ae)|0,i=i+Math.imul(M,le)|0,r=r+Math.imul(M,ue)|0,r=r+Math.imul(I,le)|0,o=o+Math.imul(I,ue)|0,i=i+Math.imul(w,he)|0,r=r+Math.imul(w,de)|0,r=r+Math.imul(x,he)|0,o=o+Math.imul(x,de)|0,i=i+Math.imul(v,pe)|0,r=r+Math.imul(v,ge)|0,r=r+Math.imul(y,pe)|0,o=o+Math.imul(y,ge)|0;var De=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(De>>>26)|0,De&=67108863,i=Math.imul(z,q),r=Math.imul(z,K),r=r+Math.imul(R,q)|0,o=Math.imul(R,K),i=i+Math.imul(L,J)|0,r=r+Math.imul(L,ee)|0,r=r+Math.imul(B,J)|0,o=o+Math.imul(B,ee)|0,i=i+Math.imul(N,ne)|0,r=r+Math.imul(N,ie)|0,r=r+Math.imul(O,ne)|0,o=o+Math.imul(O,ie)|0,i=i+Math.imul(A,oe)|0,r=r+Math.imul(A,ae)|0,r=r+Math.imul(k,oe)|0,o=o+Math.imul(k,ae)|0,i=i+Math.imul(S,le)|0,r=r+Math.imul(S,ue)|0,r=r+Math.imul(D,le)|0,o=o+Math.imul(D,ue)|0,i=i+Math.imul(M,he)|0,r=r+Math.imul(M,de)|0,r=r+Math.imul(I,he)|0,o=o+Math.imul(I,de)|0,i=i+Math.imul(w,pe)|0,r=r+Math.imul(w,ge)|0,r=r+Math.imul(x,pe)|0,o=o+Math.imul(x,ge)|0;var Te=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,i=Math.imul(z,J),r=Math.imul(z,ee),r=r+Math.imul(R,J)|0,o=Math.imul(R,ee),i=i+Math.imul(L,ne)|0,r=r+Math.imul(L,ie)|0,r=r+Math.imul(B,ne)|0,o=o+Math.imul(B,ie)|0,i=i+Math.imul(N,oe)|0,r=r+Math.imul(N,ae)|0,r=r+Math.imul(O,oe)|0,o=o+Math.imul(O,ae)|0,i=i+Math.imul(A,le)|0,r=r+Math.imul(A,ue)|0,r=r+Math.imul(k,le)|0,o=o+Math.imul(k,ue)|0,i=i+Math.imul(S,he)|0,r=r+Math.imul(S,de)|0,r=r+Math.imul(D,he)|0,o=o+Math.imul(D,de)|0,i=i+Math.imul(M,pe)|0,r=r+Math.imul(M,ge)|0,r=r+Math.imul(I,pe)|0,o=o+Math.imul(I,ge)|0;var Ae=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(z,ne),r=Math.imul(z,ie),r=r+Math.imul(R,ne)|0,o=Math.imul(R,ie),i=i+Math.imul(L,oe)|0,r=r+Math.imul(L,ae)|0,r=r+Math.imul(B,oe)|0,o=o+Math.imul(B,ae)|0,i=i+Math.imul(N,le)|0,r=r+Math.imul(N,ue)|0,r=r+Math.imul(O,le)|0,o=o+Math.imul(O,ue)|0,i=i+Math.imul(A,he)|0,r=r+Math.imul(A,de)|0,r=r+Math.imul(k,he)|0,o=o+Math.imul(k,de)|0,i=i+Math.imul(S,pe)|0,r=r+Math.imul(S,ge)|0,r=r+Math.imul(D,pe)|0,o=o+Math.imul(D,ge)|0;var ke=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(z,oe),r=Math.imul(z,ae),r=r+Math.imul(R,oe)|0,o=Math.imul(R,ae),i=i+Math.imul(L,le)|0,r=r+Math.imul(L,ue)|0,r=r+Math.imul(B,le)|0,o=o+Math.imul(B,ue)|0,i=i+Math.imul(N,he)|0,r=r+Math.imul(N,de)|0,r=r+Math.imul(O,he)|0,o=o+Math.imul(O,de)|0,i=i+Math.imul(A,pe)|0,r=r+Math.imul(A,ge)|0,r=r+Math.imul(k,pe)|0,o=o+Math.imul(k,ge)|0;var Ee=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(z,le),r=Math.imul(z,ue),r=r+Math.imul(R,le)|0,o=Math.imul(R,ue),i=i+Math.imul(L,he)|0,r=r+Math.imul(L,de)|0,r=r+Math.imul(B,he)|0,o=o+Math.imul(B,de)|0,i=i+Math.imul(N,pe)|0,r=r+Math.imul(N,ge)|0,r=r+Math.imul(O,pe)|0,o=o+Math.imul(O,ge)|0;var Ne=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,i=Math.imul(z,he),r=Math.imul(z,de),r=r+Math.imul(R,he)|0,o=Math.imul(R,de),i=i+Math.imul(L,pe)|0,r=r+Math.imul(L,ge)|0,r=r+Math.imul(B,pe)|0,o=o+Math.imul(B,ge)|0;var Oe=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,i=Math.imul(z,pe),r=Math.imul(z,ge),r=r+Math.imul(R,pe)|0,o=Math.imul(R,ge);var Pe=(u+i|0)+((8191&r)<<13)|0;return u=(o+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,l[0]=me,l[1]=ve,l[2]=ye,l[3]=be,l[4]=we,l[5]=xe,l[6]=_e,l[7]=Me,l[8]=Ie,l[9]=Ce,l[10]=Se,l[11]=De,l[12]=Te,l[13]=Ae,l[14]=ke,l[15]=Ee,l[16]=Ne,l[17]=Oe,l[18]=Pe,0!==u&&(l[19]=u,n.length++),n};function m(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var i=0,r=0,o=0;o>>26)|0,r+=a>>>26,a&=67108863}n.words[o]=s,i=a,a=r}return 0!==i?n.words[o]=i:n.length--,n.strip()}function v(e,t,n){var i=new y;return i.mulp(e,t,n)}function y(e,t){this.x=e,this.y=t}Math.imul||(g=p),o.prototype.mulTo=function(e,t){var n,i=this.length+e.length;return n=10===this.length&&10===e.length?g(this,e,t):i<63?p(this,e,t):i<1024?m(this,e,t):v(this,e,t),n},y.prototype.makeRBT=function(e){for(var t=new Array(e),n=o.prototype._countBits(e)-1,i=0;i>=1;return i},y.prototype.permute=function(e,t,n,i,r,o){for(var a=0;a>>=1)r++;return 1<>>=13,n[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,t+=r/67108864|0,t+=o>>>26,this.words[n]=67108863&o}return 0!==t&&(this.words[n]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=f(e);if(0===t.length)return new o(1);for(var n=this,i=0;i=0);var t,n=e%26,r=(e-n)/26,o=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(t=0;t>>26-n}a&&(this.words[t]=a,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t=0),r=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,u=0;u=0&&(0!==c||u>=r);u--){var h=0|this.words[u];this.words[u]=c<<26-o|h>>>o,c=h&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,n){return i(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){i("number"===typeof e&&e>=0);var t=e%26,n=(e-t)/26,r=1<=0);var t=e%26,n=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var r=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(i("number"===typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(l/67108864|0),this.words[r+n]=67108863&o}for(;r>26,this.words[r+n]=67108863&o;if(0===s)return this.strip();for(i(-1===s),s=0,r=0;r>26,this.words[r]=67108863&o;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var n=this.length-e.length,i=this.clone(),r=e,a=0|r.words[r.length-1],s=this._countBits(a);n=26-s,0!==n&&(r=r.ushln(n),i.iushln(n),a=0|r.words[r.length-1]);var l,u=i.length-r.length;if("mod"!==t){l=new o(null),l.length=u+1,l.words=new Array(l.length);for(var c=0;c=0;d--){var f=67108864*(0|i.words[r.length+d])+(0|i.words[r.length+d-1]);f=Math.min(f/a|0,67108863),i._ishlnsubmul(r,f,d);while(0!==i.negative)f--,i.negative=0,i._ishlnsubmul(r,1,d),i.isZero()||(i.negative^=1);l&&(l.words[d]=f)}return l&&l.strip(),i.strip(),"div"!==t&&0!==n&&i.iushrn(n),{div:l||null,mod:i}},o.prototype.divmod=function(e,t,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(r=s.div.neg()),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:r,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(r=s.div.neg()),{div:r,mod:s.mod}):0!==(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t);var r,a,s},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),r=e.andln(1),o=n.cmp(i);return o<0||1===r&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,n=0,r=this.length-1;r>=0;r--)n=(t*n+(0|this.words[r]))%e;return n},o.prototype.idivn=function(e){i(e<=67108863);for(var t=0,n=this.length-1;n>=0;n--){var r=(0|this.words[n])+67108864*t;this.words[n]=r/e|0,t=r%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();var r=new o(1),a=new o(0),s=new o(0),l=new o(1),u=0;while(t.isEven()&&n.isEven())t.iushrn(1),n.iushrn(1),++u;var c=n.clone(),h=t.clone();while(!t.isZero()){for(var d=0,f=1;0===(t.words[0]&f)&&d<26;++d,f<<=1);if(d>0){t.iushrn(d);while(d-- >0)(r.isOdd()||a.isOdd())&&(r.iadd(c),a.isub(h)),r.iushrn(1),a.iushrn(1)}for(var p=0,g=1;0===(n.words[0]&g)&&p<26;++p,g<<=1);if(p>0){n.iushrn(p);while(p-- >0)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(h)),s.iushrn(1),l.iushrn(1)}t.cmp(n)>=0?(t.isub(n),r.isub(s),a.isub(l)):(n.isub(t),s.isub(r),l.isub(a))}return{a:s,b:l,gcd:n.iushln(u)}},o.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();var r,a=new o(1),s=new o(0),l=n.clone();while(t.cmpn(1)>0&&n.cmpn(1)>0){for(var u=0,c=1;0===(t.words[0]&c)&&u<26;++u,c<<=1);if(u>0){t.iushrn(u);while(u-- >0)a.isOdd()&&a.iadd(l),a.iushrn(1)}for(var h=0,d=1;0===(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0){n.iushrn(h);while(h-- >0)s.isOdd()&&s.iadd(l),s.iushrn(1)}t.cmp(n)>=0?(t.isub(n),a.isub(s)):(n.isub(t),s.isub(a))}return r=0===t.cmpn(1)?a:s,r.cmpn(0)<0&&r.iadd(e),r},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var i=0;t.isEven()&&n.isEven();i++)t.iushrn(1),n.iushrn(1);do{while(t.isEven())t.iushrn(1);while(n.isEven())n.iushrn(1);var r=t.cmp(n);if(r<0){var o=t;t=n,n=o}else if(0===r||0===n.cmpn(1))break;t.isub(n)}while(1);return n.iushln(i)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){i("number"===typeof e);var t=e%26,n=(e-t)/26,r=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this.strip(),this.length>1)t=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:re.length)return 1;if(this.length=0;n--){var i=0|this.words[n],r=0|e.words[n];if(i!==r){ir&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new C(e)},o.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var b={k256:null,p224:null,p192:null,p25519:null};function w(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function x(){w.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function _(){w.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function M(){w.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function I(){w.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function C(e){if("string"===typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function S(e){C.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}w.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},w.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),n=this.imulK(n),n=n.iadd(this.tmp),t=n.bitLength()}while(t>this.n);var i=t0?n.isub(this.p):void 0!==n.strip?n.strip():n._strip(),n},w.prototype.split=function(e,t){e.iushrn(this.n,0,t)},w.prototype.imulK=function(e){return e.imul(this.k)},r(x,w),x.prototype.split=function(e,t){for(var n=4194303,i=Math.min(e.length,9),r=0;r>>22,o=a}o>>>=22,e.words[r-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},x.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n>>=26,e.words[n]=r,t=i}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(b[e])return b[e];var t;if("k256"===e)t=new x;else if("p224"===e)t=new _;else if("p192"===e)t=new M;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new I}return b[e]=t,t},C.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},C.prototype._verify2=function(e,t){i(0===(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},C.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},C.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},C.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},C.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},C.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},C.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},C.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},C.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},C.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},C.prototype.isqr=function(e){return this.imul(e,e.clone())},C.prototype.sqr=function(e){return this.mul(e,e)},C.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2===1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}var r=this.m.subn(1),a=0;while(!r.isZero()&&0===r.andln(1))a++,r.iushrn(1);i(!r.isZero());var s=new o(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();c=new o(2*c*c).toRed(this);while(0!==this.pow(c,u).cmp(l))c.redIAdd(l);var h=this.pow(c,r),d=this.pow(e,r.addn(1).iushrn(1)),f=this.pow(e,r),p=a;while(0!==f.cmp(s)){for(var g=f,m=0;0!==g.cmp(s);m++)g=g.redSqr();i(m=0;r--){for(var c=t.words[r],h=u-1;h>=0;h--){var d=c>>h&1;a!==i[0]&&(a=this.sqr(a)),0!==d||0!==s?(s<<=1,s|=d,l++,(l===n||0===r&&0===h)&&(a=this.mul(a,i[s]),l=0,s=0)):l=0}u=26}return a},C.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},C.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new S(e)},r(S,C),S.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},S.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},S.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),o=r;return r.cmp(this.m)>=0?o=r.isub(this.m):r.cmpn(0)<0&&(o=r.iadd(this.m)),o._forceRed(this)},S.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var n=e.mul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),a=r;return r.cmp(this.m)>=0?a=r.isub(this.m):r.cmpn(0)<0&&(a=r.iadd(this.m)),a._forceRed(this)},S.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}})(e,this)}).call(this,n("f5c6")(e))},9079:function(e,t,n){"use strict";t.__esModule=!0,t.isDefined=t.isUndefined=t.isFunction=void 0;var i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.isString=s,t.isObject=l,t.isHtmlElement=u;var r=n("8bbf"),o=a(r);function a(e){return e&&e.__esModule?e:{default:e}}function s(e){return"[object String]"===Object.prototype.toString.call(e)}function l(e){return"[object Object]"===Object.prototype.toString.call(e)}function u(e){return e&&e.nodeType===Node.ELEMENT_NODE}var c=function(e){var t={};return e&&"[object Function]"===t.toString.call(e)};"object"===("undefined"===typeof Int8Array?"undefined":i(Int8Array))||!o.default.prototype.$isServer&&"function"===typeof document.childNodes||(t.isFunction=c=function(e){return"function"===typeof e||!1}),t.isFunction=c;t.isUndefined=function(e){return void 0===e},t.isDefined=function(e){return void 0!==e&&null!==e}},"90fd":function(e,t,n){var i=n("3173"),r=n("f298"),o=n("0634"),a=n("cb77"),s=a.parsePercent,l=a.round,u=a.linearMap;function c(e,t){var n=e.get("center"),i=t.getWidth(),r=t.getHeight(),o=Math.min(i,r),a=s(n[0],t.getWidth()),l=s(n[1],t.getHeight()),u=s(e.get("radius"),o/2);return{cx:a,cy:l,r:u}}function h(e,t){return t&&("string"===typeof t?e=t.replace("{value}",null!=e?e:""):"function"===typeof t&&(e=t(e))),e}var d=2*Math.PI,f=o.extend({type:"gauge",render:function(e,t,n){this.group.removeAll();var i=e.get("axisLine.lineStyle.color"),r=c(e,n);this._renderMain(e,t,n,i,r)},dispose:function(){},_renderMain:function(e,t,n,i,o){for(var a=this.group,s=e.getModel("axisLine"),l=s.getModel("lineStyle"),u=e.get("clockwise"),c=-e.get("startAngle")/180*Math.PI,h=-e.get("endAngle")/180*Math.PI,f=(h-c)%d,p=c,g=l.get("width"),m=s.get("show"),v=0;m&&v=e&&(0===t?0:i[t-1][0]).4?"bottom":"middle",textAlign:E<-.4?"left":E>.4?"right":"center"},{autoColor:B}),silent:!0}))}if(b.get("show")&&k!==x){for(var j=0;j<=_;j++){E=Math.cos(C),N=Math.sin(C);var z=new r.Line({shape:{x1:E*g+f,y1:N*g+p,x2:E*(g-I)+f,y2:N*(g-I)+p},silent:!0,style:A});"auto"===A.stroke&&z.setStyle({stroke:i((k+j/_)/x)}),d.add(z),C+=D}C-=D}else C+=S}},_renderPointer:function(e,t,n,o,a,l,c,h){var d=this.group,f=this._data;if(e.get("pointer.show")){var p=[+e.get("min"),+e.get("max")],g=[l,c],m=e.getData(),v=m.mapDimension("value");m.diff(f).add((function(t){var n=new i({shape:{angle:l}});r.initProps(n,{shape:{angle:u(m.get(v,t),p,g,!0)}},e),d.add(n),m.setItemGraphicEl(t,n)})).update((function(t,n){var i=f.getItemGraphicEl(n);r.updateProps(i,{shape:{angle:u(m.get(v,t),p,g,!0)}},e),d.add(i),m.setItemGraphicEl(t,i)})).remove((function(e){var t=f.getItemGraphicEl(e);d.remove(t)})).execute(),m.eachItemGraphicEl((function(e,t){var n=m.getItemModel(t),i=n.getModel("pointer");e.setShape({x:a.cx,y:a.cy,width:s(i.get("width"),a.r),r:s(i.get("length"),a.r)}),e.useStyle(n.getModel("itemStyle").getItemStyle()),"auto"===e.style.fill&&e.setStyle("fill",o(u(m.get(v,t),p,[0,1],!0))),r.setHoverStyle(e,n.getModel("emphasis.itemStyle").getItemStyle())})),this._data=m}else f&&f.eachItemGraphicEl((function(e){d.remove(e)}))},_renderTitle:function(e,t,n,i,o){var a=e.getData(),l=a.mapDimension("value"),c=e.getModel("title");if(c.get("show")){var h=c.get("offsetCenter"),d=o.cx+s(h[0],o.r),f=o.cy+s(h[1],o.r),p=+e.get("min"),g=+e.get("max"),m=e.getData().get(l,0),v=i(u(m,[p,g],[0,1],!0));this.group.add(new r.Text({silent:!0,style:r.setTextStyle({},c,{x:d,y:f,text:a.getName(0),textAlign:"center",textVerticalAlign:"middle"},{autoColor:v,forceRich:!0})}))}},_renderDetail:function(e,t,n,i,o){var a=e.getModel("detail"),l=+e.get("min"),c=+e.get("max");if(a.get("show")){var d=a.get("offsetCenter"),f=o.cx+s(d[0],o.r),p=o.cy+s(d[1],o.r),g=s(a.get("width"),o.r),m=s(a.get("height"),o.r),v=e.getData(),y=v.get(v.mapDimension("value"),0),b=i(u(y,[l,c],[0,1],!0));this.group.add(new r.Text({silent:!0,style:r.setTextStyle({},a,{x:f,y:p,text:h(y,a.get("formatter")),textWidth:isNaN(g)?null:g,textHeight:isNaN(m)?null:m,textAlign:"center",textVerticalAlign:"middle"},{autoColor:b,forceRich:!0})}))}}}),p=f;e.exports=p},9144:function(e,t,n){var i=n("357b");function r(e){var t={};e.eachSeriesByType("map",(function(n){var r=n.getMapType();if(!n.getHostGeoModel()&&!t[r]){var o={};i.each(n.seriesGroup,(function(t){var n=t.coordinateSystem,i=t.originalData;t.get("showLegendSymbol")&&e.getComponent("legend")&&i.each(i.mapDimension("value"),(function(e,t){var r=i.getName(t),a=n.getRegion(r);if(a&&!isNaN(e)){var s=o[r]||0,l=n.dataToPoint(a.center);o[r]=s+1,i.setItemLayout(t,{point:l,offset:s})}}))}));var a=n.getData();a.each((function(e){var t=a.getName(e),n=a.getItemLayout(e)||{};n.showLabel=!o[t],a.setItemLayout(e,n)})),t[r]=!0}}))}e.exports=r},9168:function(e,t,n){var i=n("99f8");e.exports=function(e,t){if(!i(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!i(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!i(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},9173:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},9188:function(e,t,n){var i=n("357b"),r=i.retrieve,o=i.defaults,a=i.extend,s=i.each,l=n("405f"),u=n("f298"),c=n("5571"),h=n("cb77"),d=h.isRadianAroundZero,f=h.remRadian,p=n("f6d4"),g=p.createSymbol,m=n("5ed9"),v=n("d82e"),y=v.applyTransform,b=n("3ede"),w=b.shouldShowAllLabels,x=Math.PI,_=function(e,t){this.opt=t,this.axisModel=e,o(t,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0}),this.group=new u.Group;var n=new u.Group({position:t.position.slice(),rotation:t.rotation});n.updateTransform(),this._transform=n.transform,this._dumbGroup=n};_.prototype={constructor:_,hasBuilder:function(e){return!!M[e]},add:function(e){M[e].call(this)},getGroup:function(){return this.group}};var M={axisLine:function(){var e=this.opt,t=this.axisModel;if(t.get("axisLine.show")){var n=this.axisModel.axis.getExtent(),i=this._transform,r=[n[0],0],o=[n[1],0];i&&(y(r,r,i),y(o,o,i));var l=a({lineCap:"round"},t.getModel("axisLine.lineStyle").getLineStyle());this.group.add(new u.Line({anid:"line",subPixelOptimize:!0,shape:{x1:r[0],y1:r[1],x2:o[0],y2:o[1]},style:l,strokeContainThreshold:e.strokeContainThreshold||5,silent:!0,z2:1}));var c=t.get("axisLine.symbol"),h=t.get("axisLine.symbolSize"),d=t.get("axisLine.symbolOffset")||0;if("number"===typeof d&&(d=[d,d]),null!=c){"string"===typeof c&&(c=[c,c]),"string"!==typeof h&&"number"!==typeof h||(h=[h,h]);var f=h[0],p=h[1];s([{rotate:e.rotation+Math.PI/2,offset:d[0],r:0},{rotate:e.rotation-Math.PI/2,offset:d[1],r:Math.sqrt((r[0]-o[0])*(r[0]-o[0])+(r[1]-o[1])*(r[1]-o[1]))}],(function(t,n){if("none"!==c[n]&&null!=c[n]){var i=g(c[n],-f/2,-p/2,f,p,l.stroke,!0),o=t.r+t.offset,a=[r[0]+o*Math.cos(e.rotation),r[1]-o*Math.sin(e.rotation)];i.attr({rotation:t.rotate,position:a,silent:!0,z2:11}),this.group.add(i)}}),this)}}},axisTickLabel:function(){var e=this.axisModel,t=this.opt,n=O(this,e,t),i=L(this,e,t);T(e,i,n),P(this,e,t)},axisName:function(){var e=this.opt,t=this.axisModel,n=r(e.axisName,t.get("name"));if(n){var i,o,s=t.get("nameLocation"),c=e.nameDirection,h=t.getModel("nameTextStyle"),d=t.get("nameGap")||0,f=this.axisModel.axis.getExtent(),p=f[0]>f[1]?-1:1,g=["start"===s?f[0]-p*d:"end"===s?f[1]+p*d:(f[0]+f[1])/2,E(s)?e.labelOffset+c*d:0],m=t.get("nameRotate");null!=m&&(m=m*x/180),E(s)?i=C(e.rotation,null!=m?m:e.rotation,c):(i=S(e,s,m||0,f),o=e.axisNameAvailableWidth,null!=o&&(o=Math.abs(o/Math.sin(i.rotation)),!isFinite(o)&&(o=null)));var v=h.getFont(),y=t.get("nameTruncate",!0)||{},b=y.ellipsis,w=r(e.nameTruncateMaxWidth,y.maxWidth,o),_=null!=b&&null!=w?l.truncateText(n,w,v,b,{minChar:2,placeholder:y.placeholder}):n,M=t.get("tooltip",!0),T=t.mainType,A={componentType:T,name:n,$vars:["name"]};A[T+"Index"]=t.componentIndex;var k=new u.Text({anid:"name",__fullText:n,__truncatedText:_,position:g,rotation:i.rotation,silent:D(t),z2:1,tooltip:M&&M.show?a({content:n,formatter:function(){return n},formatterParams:A},M):null});u.setTextStyle(k.style,h,{text:_,textFont:v,textFill:h.getTextColor()||t.get("axisLine.lineStyle.color"),textAlign:h.get("align")||i.textAlign,textVerticalAlign:h.get("verticalAlign")||i.textVerticalAlign}),t.get("triggerEvent")&&(k.eventData=I(t),k.eventData.targetType="axisName",k.eventData.name=n),this._dumbGroup.add(k),k.updateTransform(),this.group.add(k),k.decomposeTransform()}}},I=_.makeAxisEventDataBase=function(e){var t={componentType:e.mainType,componentIndex:e.componentIndex};return t[e.mainType+"Index"]=e.componentIndex,t},C=_.innerTextLayout=function(e,t,n){var i,r,o=f(t-e);return d(o)?(r=n>0?"top":"bottom",i="center"):d(o-x)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}};function S(e,t,n,i){var r,o,a=f(n-e.rotation),s=i[0]>i[1],l="start"===t&&!s||"start"!==t&&s;return d(a-x/2)?(o=l?"bottom":"top",r="center"):d(a-1.5*x)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*x&&a>x/2?l?"left":"right":l?"right":"left"),{rotation:a,textAlign:r,textVerticalAlign:o}}var D=_.isLabelSilent=function(e){var t=e.get("tooltip");return e.get("silent")||!(e.get("triggerEvent")||t&&t.show)};function T(e,t,n){if(!w(e.axis)){var i=e.get("axisLabel.showMinLabel"),r=e.get("axisLabel.showMaxLabel");t=t||[],n=n||[];var o=t[0],a=t[1],s=t[t.length-1],l=t[t.length-2],u=n[0],c=n[1],h=n[n.length-1],d=n[n.length-2];!1===i?(A(o),A(u)):k(o,a)&&(i?(A(a),A(c)):(A(o),A(u))),!1===r?(A(s),A(h)):k(l,s)&&(r?(A(l),A(d)):(A(s),A(h)))}}function A(e){e&&(e.ignore=!0)}function k(e,t,n){var i=e&&e.getBoundingRect().clone(),r=t&&t.getBoundingRect().clone();if(i&&r){var o=m.identity([]);return m.rotate(o,o,-e.rotation),i.applyTransform(m.mul([],o,e.getLocalTransform())),r.applyTransform(m.mul([],o,t.getLocalTransform())),i.intersect(r)}}function E(e){return"middle"===e||"center"===e}function N(e,t,n,i,r){for(var o=[],a=[],s=[],l=0;l":"\n",d="richText"===i,f={},p=0;function g(n){var a=r.reduce(n,(function(e,t,n){var i=v.getDimensionInfo(n);return e|(i&&!1!==i.tooltip&&null!=i.displayName)}),0),h=[];function g(e,n){var r=v.getDimensionInfo(n);if(r&&!1!==r.otherDims.tooltip){var g=r.type,m="sub"+o.seriesIndex+"at"+p,y=c({color:_,type:"subItem",renderMode:i,markerId:m}),b="string"===typeof y?y:y.content,w=(a?b+l(r.displayName||"-")+": ":"")+l("ordinal"===g?e+"":"time"===g?t?"":s("yyyy/MM/dd hh:mm:ss",e):u(e));w&&h.push(w),d&&(f[m]=_,++p)}}y.length?r.each(y,(function(t){g(I(v,e,t),t)})):r.each(n,g);var m=a?d?"\n":"
":"",b=m+h.join(m||", ");return{renderMode:i,content:b,style:f}}function m(e){return{renderMode:i,content:l(u(e)),style:f}}var v=this.getData(),y=v.mapDimension("defaultedTooltip",!0),b=y.length,w=this.getRawValue(e),x=r.isArray(w),_=v.getItemVisual(e,"color");r.isObject(_)&&_.colorStops&&(_=(_.colorStops[0]||{}).color),_=_||"transparent";var M=b>1||x&&!b?g(w):m(b?I(v,e,y[0]):x?w[0]:w),C=M.content,S=o.seriesIndex+"at"+p,D=c({color:_,type:"item",renderMode:i,markerId:S});f[S]=_,++p;var T=v.getName(e),A=this.name;h.isNameSpecified(this)||(A=""),A=A?l(A)+(t?": ":a):"";var k="string"===typeof D?D:D.content,E=t?k+A+C:A+k+(T?l(T)+": "+C:C);return{html:E,markers:f}},isAnimationEnabled:function(){if(o.node)return!1;var e=this.getShallow("animation");return e&&this.getData().count()>this.getShallow("animationThreshold")&&(e=!1),e},restoreData:function(){this.dataTask.dirty()},getColorFromPalette:function(e,t,n){var i=this.ecModel,r=f.getColorFromPalette.call(this,e,t,n);return r||(r=i.getColorFromPalette(e,t,n)),r},coordDimToDataDim:function(e){return this.getRawData().mapDimension(e,!0)},getProgressive:function(){return this.get("progressive")},getProgressiveThreshold:function(){return this.get("progressiveThreshold")},getAxisTooltipData:null,getTooltipPosition:null,pipeTask:null,preventIncremental:null,pipelineContext:null});function D(e){var t=e.name;h.isNameSpecified(e)||(e.name=T(e)||t)}function T(e){var t=e.getRawData(),n=t.mapDimension("seriesName",!0),i=[];return r.each(n,(function(e){var n=t.getDimensionInfo(e);n.displayName&&i.push(n.displayName)})),i.join(" ")}function A(e){return e.model.getRawData().count()}function k(e){var t=e.model;return t.setData(t.getRawData().cloneShallow()),E}function E(e,t){t.outputData&&e.end>t.outputData.count()&&t.model.getRawData().cloneShallow(t.outputData)}function N(e,t){r.each(e.CHANGABLE_METHODS,(function(n){e.wrapMethod(n,r.curry(O,t))}))}function O(e){var t=P(e);t&&t.setOutputEnd(this.count())}function P(e){var t=(e.ecModel||{}).scheduler,n=t&&t.getPipeline(e.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(e.uid))}return i}}r.mixin(S,p),r.mixin(S,f);var L=S;e.exports=L},"933f":function(e,t,n){var i=n("357b"),r=n("cc4e"),o=n("55a3"),a=r.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#304654"},itemStyle:{color:"#304654",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{label:{show:!0,color:"#c23531"},itemStyle:{color:"#c23531"},controlStyle:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}});i.mixin(a,o);var s=a;e.exports=s},"934f":function(e,t,n){var i=n("357b"),r=n("8e0a"),o=n("f298"),a=n("fb2f"),s=n("3fcc"),l=n("cb77"),u=n("0b9d"),c=n("b91a"),h=o.Rect,d=l.linearMap,f=l.asc,p=i.bind,g=i.each,m=7,v=1,y=30,b="horizontal",w="vertical",x=5,_=["line","bar","candlestick","scatter"],M=s.extend({type:"dataZoom.slider",init:function(e,t){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=t},render:function(e,t,n,i){M.superApply(this,"render",arguments),a.createOrUpdate(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=e.get("orient"),!1!==this.dataZoomModel.get("show")?(i&&"dataZoom"===i.type&&i.from===this.uid||this._buildView(),this._updateView()):this.group.removeAll()},remove:function(){M.superApply(this,"remove",arguments),a.clear(this,"_dispatchZoomAction")},dispose:function(){M.superApply(this,"dispose",arguments),a.clear(this,"_dispatchZoomAction")},_buildView:function(){var e=this.group;e.removeAll(),this._resetLocation(),this._resetInterval();var t=this._displayables.barGroup=new o.Group;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),e.add(t),this._positionGroup()},_resetLocation:function(){var e=this.dataZoomModel,t=this.api,n=this._findCoordRect(),r={width:t.getWidth(),height:t.getHeight()},o=this._orient===b?{right:r.width-n.x-n.width,top:r.height-y-m,width:n.width,height:y}:{right:m,top:n.y,width:y,height:n.height},a=u.getLayoutParams(e.option);i.each(["right","top","width","height"],(function(e){"ph"===a[e]&&(a[e]=o[e])}));var s=u.getLayoutRect(a,r,e.padding);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===w&&this._size.reverse()},_positionGroup:function(){var e=this.group,t=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.barGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==b||r?n===b&&r?{scale:a?[-1,1]:[-1,-1]}:n!==w||r?{scale:a?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:a?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:a?[1,1]:[1,-1]});var s=e.getBoundingRect([o]);e.attr("position",[t.x-s.x,t.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var e=this.dataZoomModel,t=this._size,n=this._displayables.barGroup;n.add(new h({silent:!0,shape:{x:0,y:0,width:t[0],height:t[1]},style:{fill:e.get("backgroundColor")},z2:-40})),n.add(new h({shape:{x:0,y:0,width:t[0],height:t[1]},style:{fill:"transparent"},z2:0,onclick:i.bind(this._onClickPanelClick,this)}))},_renderDataShadow:function(){var e=this._dataShadowInfo=this._prepareDataShadowInfo();if(e){var t=this._size,n=e.series,r=n.getRawData(),a=n.getShadowDim?n.getShadowDim():e.otherDim;if(null!=a){var s=r.getDataExtent(a),l=.3*(s[1]-s[0]);s=[s[0]-l,s[1]+l];var u,c=[0,t[1]],h=[0,t[0]],f=[[t[0],0],[0,0]],p=[],g=h[1]/(r.count()-1),m=0,v=Math.round(r.count()/t[0]);r.each([a],(function(e,t){if(v>0&&t%v)m+=g;else{var n=null==e||isNaN(e)||""===e,i=n?0:d(e,s,c,!0);n&&!u&&t?(f.push([f[f.length-1][0],0]),p.push([p[p.length-1][0],0])):!n&&u&&(f.push([m,0]),p.push([m,0])),f.push([m,i]),p.push([m,i]),m+=g,u=n}}));var y=this.dataZoomModel;this._displayables.barGroup.add(new o.Polygon({shape:{points:f},style:i.defaults({fill:y.get("dataBackgroundColor")},y.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new o.Polyline({shape:{points:p},style:y.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}}},_prepareDataShadowInfo:function(){var e=this.dataZoomModel,t=e.get("showDataShadow");if(!1!==t){var n,r=this.ecModel;return e.eachTargetAxis((function(o,a){var s=e.getAxisProxy(o.name,a).getTargetSeriesModels();i.each(s,(function(e){if(!n&&!(!0!==t&&i.indexOf(_,e.get("type"))<0)){var s,l=r.getComponent(o.axis,a).axis,u=I(o.name),c=e.coordinateSystem;null!=u&&c.getOtherAxis&&(s=c.getOtherAxis(l).inverse),u=e.getData().mapDimension(u),n={thisAxis:l,series:e,thisDim:o.name,otherDim:u,otherAxisInverse:s}}}),this)}),this),n}},_renderHandle:function(){var e=this._displayables,t=e.handles=[],n=e.handleLabels=[],i=this._displayables.barGroup,r=this._size,a=this.dataZoomModel;i.add(e.filler=new h({draggable:!0,cursor:C(this._orient),drift:p(this._onDragMove,this,"all"),ondragstart:p(this._showDataInfo,this,!0),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),i.add(new h({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:r[0],height:r[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:v,fill:"rgba(0,0,0,0)"}})),g([0,1],(function(e){var r=o.createIcon(a.get("handleIcon"),{cursor:C(this._orient),draggable:!0,drift:p(this._onDragMove,this,e),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1)},{x:-1,y:0,width:2,height:2}),s=r.getBoundingRect();this._handleHeight=l.parsePercent(a.get("handleSize"),this._size[1]),this._handleWidth=s.width/s.height*this._handleHeight,r.setStyle(a.getModel("handleStyle").getItemStyle());var u=a.get("handleColor");null!=u&&(r.style.fill=u),i.add(t[e]=r);var c=a.textStyleModel;this.group.add(n[e]=new o.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",textFill:c.getTextColor(),textFont:c.getFont()},z2:10}))}),this)},_resetInterval:function(){var e=this._range=this.dataZoomModel.getPercentRange(),t=this._getViewExtent();this._handleEnds=[d(e[0],[0,100],t,!0),d(e[1],[0,100],t,!0)]},_updateInterval:function(e,t){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];c(t,i,r,n.get("zoomLock")?"all":e,null!=o.minSpan?d(o.minSpan,a,r,!0):null,null!=o.maxSpan?d(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=f([d(i[0],r,a,!0),d(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},_updateView:function(e){var t=this._displayables,n=this._handleEnds,i=f(n.slice()),r=this._size;g([0,1],(function(e){var i=t.handles[e],o=this._handleHeight;i.attr({scale:[o/2,o/2],position:[n[e],r[1]/2-o/2]})}),this),t.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]}),this._updateDataInfo(e)},_updateDataInfo:function(e){var t=this.dataZoomModel,n=this._displayables,i=n.handleLabels,r=this._orient,a=["",""];if(t.get("showDetail")){var s=t.findRepresentativeAxisProxy();if(s){var l=s.getAxisModel().axis,u=this._range,c=e?s.calculateDataWindow({start:u[0],end:u[1]}).valueWindow:s.getDataValueWindow();a=[this._formatLabel(c[0],l),this._formatLabel(c[1],l)]}}var h=f(this._handleEnds.slice());function d(e){var t=o.getTransform(n.handles[e].parent,this.group),s=o.transformDirection(0===e?"right":"left",t),l=this._handleWidth/2+x,u=o.applyTransform([h[e]+(0===e?-l:l),this._size[1]/2],t);i[e].setStyle({x:u[0],y:u[1],textVerticalAlign:r===b?"middle":s,textAlign:r===b?s:"center",text:a[e]})}d.call(this,0),d.call(this,1)},_formatLabel:function(e,t){var n=this.dataZoomModel,r=n.get("labelFormatter"),o=n.get("labelPrecision");null!=o&&"auto"!==o||(o=t.getPixelPrecision());var a=null==e||isNaN(e)?"":"category"===t.type||"time"===t.type?t.scale.getLabel(Math.round(e)):e.toFixed(Math.min(o,20));return i.isFunction(r)?r(e,a):i.isString(r)?r.replace("{value}",a):a},_showDataInfo:function(e){e=this._dragging||e;var t=this._displayables.handleLabels;t[0].attr("invisible",!e),t[1].attr("invisible",!e)},_onDragMove:function(e,t,n,i){this._dragging=!0,r.stop(i.event);var a=this._displayables.barGroup.getLocalTransform(),s=o.applyTransform([t,n],a,!0),l=this._updateInterval(e,s[0]),u=this.dataZoomModel.get("realtime");this._updateView(!u),l&&u&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1);var e=this.dataZoomModel.get("realtime");!e&&this._dispatchZoomAction()},_onClickPanelClick:function(e){var t=this._size,n=this._displayables.barGroup.transformCoordToLocal(e.offsetX,e.offsetY);if(!(n[0]<0||n[0]>t[0]||n[1]<0||n[1]>t[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction()}},_dispatchZoomAction:function(){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:e[0],end:e[1]})},_findCoordRect:function(){var e;if(g(this.getTargetCoordInfo(),(function(t){if(!e&&t.length){var n=t[0].model.coordinateSystem;e=n.getRect&&n.getRect()}})),!e){var t=this.api.getWidth(),n=this.api.getHeight();e={x:.2*t,y:.2*n,width:.6*t,height:.6*n}}return e}});function I(e){var t={x:"y",y:"x",radius:"angle",angle:"radius"};return t[e]}function C(e){return"vertical"===e?"ns-resize":"ew-resize"}var S=M;e.exports=S},9354:function(e,t,n){var i=n("357b"),r={};function o(){this._coordinateSystems=[]}o.prototype={constructor:o,create:function(e,t){var n=[];i.each(r,(function(i,r){var o=i.create(e,t);n=n.concat(o||[])})),this._coordinateSystems=n},update:function(e,t){i.each(this._coordinateSystems,(function(n){n.update&&n.update(e,t)}))},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},o.register=function(e,t){r[e]=t},o.get=function(e){return r[e]};var a=o;e.exports=a},"93dc":function(e,t,n){var i=n("f298"),r=n("f6d4"),o=r.createSymbol,a=n("9ad6"),s=4,l=i.extendShape({shape:{points:null},symbolProxy:null,softClipShape:null,buildPath:function(e,t){var n=t.points,i=t.size,r=this.symbolProxy,o=r.shape,a=e.getContext?e.getContext():e,l=a&&i[0]=0;s--){var l=2*s,u=i[l]-o/2,c=i[l+1]-a/2;if(e>=u&&t>=c&&e<=u+o&&t<=c+a)return s}return-1}});function u(){this.group=new i.Group}var c=u.prototype;c.isPersistent=function(){return!this._incremental},c.updateData=function(e,t){this.group.removeAll();var n=new l({rectHover:!0,cursor:"default"});n.setShape({points:e.getLayout("symbolPoints")}),this._setCommon(n,e,!1,t),this.group.add(n),this._incremental=null},c.updateLayout=function(e){if(!this._incremental){var t=e.getLayout("symbolPoints");this.group.eachChild((function(e){if(null!=e.startIndex){var n=2*(e.endIndex-e.startIndex),i=4*e.startIndex*2;t=new Float32Array(t.buffer,i,n)}e.setShape("points",t)}))}},c.incrementalPrepareUpdate=function(e){this.group.removeAll(),this._clearIncremental(),e.count()>2e6?(this._incremental||(this._incremental=new a({silent:!0})),this.group.add(this._incremental)):this._incremental=null},c.incrementalUpdate=function(e,t,n){var i;this._incremental?(i=new l,this._incremental.addDisplayable(i,!0)):(i=new l({rectHover:!0,cursor:"default",startIndex:e.start,endIndex:e.end}),i.incremental=!0,this.group.add(i)),i.setShape({points:t.getLayout("symbolPoints")}),this._setCommon(i,t,!!this._incremental,n)},c._setCommon=function(e,t,n,i){var r=t.hostModel;i=i||{};var a=t.getVisual("symbolSize");e.setShape("size",a instanceof Array?a:[a,a]),e.softClipShape=i.clipShape||null,e.symbolProxy=o(t.getVisual("symbol"),0,0,0,0),e.setColor=e.symbolProxy.setColor;var l=e.shape.size[0]=0&&(e.dataIndex=n+(e.startIndex||0))})))},c.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},c._clearIncremental=function(){var e=this._incremental;e&&e.clearDisplaybles()};var h=u;e.exports=h},"94cf":function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("2fcc")),o=n("357b"),a=n("faa9"),s=n("f298"),l=n("0b9d"),u=n("cb77"),c=u.parsePercent,h={path:null,compoundPath:null,group:s.Group,image:s.Image,text:s.Text};r.registerPreprocessor((function(e){var t=e.graphic;o.isArray(t)?t[0]&&t[0].elements?e.graphic=[e.graphic[0]]:e.graphic=[{elements:t}]:t&&!t.elements&&(e.graphic=[{elements:[t]}])}));var d=r.extendComponentModel({type:"graphic",defaultOption:{elements:[],parentId:null},_elOptionsToUpdate:null,mergeOption:function(e){var t=this.option.elements;this.option.elements=null,d.superApply(this,"mergeOption",arguments),this.option.elements=t},optionUpdated:function(e,t){var n=this.option,i=(t?n:e).elements,r=n.elements=t?[]:n.elements,s=[];this._flatten(i,s);var l=a.mappingToExists(r,s);a.makeIdAndName(l);var u=this._elOptionsToUpdate=[];o.each(l,(function(e,t){var n=e.option;n&&(u.push(n),v(e,n),y(r,t,n),b(r[t],n))}),this);for(var c=r.length-1;c>=0;c--)null==r[c]?r.splice(c,1):delete r[c].$action},_flatten:function(e,t,n){o.each(e,(function(e){if(e){n&&(e.parentOption=n),t.push(e);var i=e.children;"group"===e.type&&i&&this._flatten(i,t,e),delete e.children}}),this)},useElOptionsToUpdate:function(){var e=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,e}});function f(e,t,n,i){var r=n.type,o=h.hasOwnProperty(r)?h[r]:s.getShapeClass(r),a=new o(n);t.add(a),i.set(e,a),a.__ecGraphicId=e}function p(e,t){var n=e&&e.parent;n&&("group"===e.type&&e.traverse((function(e){p(e,t)})),t.removeKey(e.__ecGraphicId),n.remove(e))}function g(e){return e=o.extend({},e),o.each(["id","parentId","$action","hv","bounding"].concat(l.LOCATION_PARAMS),(function(t){delete e[t]})),e}function m(e,t){var n;return o.each(t,(function(t){null!=e[t]&&"auto"!==e[t]&&(n=!0)})),n}function v(e,t){var n=e.exist;if(t.id=e.keyInfo.id,!t.type&&n&&(t.type=n.type),null==t.parentId){var i=t.parentOption;i?t.parentId=i.id:n&&(t.parentId=n.parentId)}t.parentOption=null}function y(e,t,n){var i=o.extend({},n),r=e[t],a=n.$action||"merge";"merge"===a?r?(o.merge(r,i,!0),l.mergeLayoutParam(r,i,{ignoreSize:!0}),l.copyLayoutParams(n,r)):e[t]=i:"replace"===a?e[t]=i:"remove"===a&&r&&(e[t]=null)}function b(e,t){e&&(e.hv=t.hv=[m(t,["left","right"]),m(t,["top","bottom"])],"group"===e.type&&(null==e.width&&(e.width=t.width=0),null==e.height&&(e.height=t.height=0)))}function w(e,t,n){var i=e.eventData;e.silent||e.ignore||i||(i=e.eventData={componentType:"graphic",componentIndex:t.componentIndex,name:e.name}),i&&(i.info=e.info)}r.extendComponentView({type:"graphic",init:function(e,t){this._elMap=o.createHashMap(),this._lastGraphicModel},render:function(e,t,n){e!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=e,this._updateElements(e),this._relocate(e,n)},_updateElements:function(e){var t=e.useElOptionsToUpdate();if(t){var n=this._elMap,i=this.group;o.each(t,(function(t){var r=t.$action,o=t.id,a=n.get(o),s=t.parentId,l=null!=s?n.get(s):i,u=t.style;"text"===t.type&&u&&(t.hv&&t.hv[1]&&(u.textVerticalAlign=u.textBaseline=null),!u.hasOwnProperty("textFill")&&u.fill&&(u.textFill=u.fill),!u.hasOwnProperty("textStroke")&&u.stroke&&(u.textStroke=u.stroke));var c=g(t);r&&"merge"!==r?"replace"===r?(p(a,n),f(o,l,c,n)):"remove"===r&&p(a,n):a?a.attr(c):f(o,l,c,n);var h=n.get(o);h&&(h.__ecGraphicWidthOption=t.width,h.__ecGraphicHeightOption=t.height,w(h,e,t))}))}},_relocate:function(e,t){for(var n=e.option.elements,i=this.group,r=this._elMap,o=t.getWidth(),a=t.getHeight(),s=0;s=0;s--){u=n[s],h=r.get(u.id);if(h){d=h.parent;var p=d===i?{width:o,height:a}:{width:d.__ecGraphicWidth,height:d.__ecGraphicHeight};l.positionElement(h,u,p,null,{hv:u.hv,boundingMode:u.bounding})}}},_clear:function(){var e=this._elMap;e.each((function(t){p(t,e)})),this._elMap=o.createHashMap()},dispose:function(){this._clear()}})},"954d":function(e,t,n){var i=n("5d42"),r=i.debugMode,o=function(){};1===r&&(o=console.error);var a=o;e.exports=a},"956f":function(e,t){var n="#eee",i=function(){return{axisLine:{lineStyle:{color:n}},axisTick:{lineStyle:{color:n}},axisLabel:{textStyle:{color:n}},splitLine:{lineStyle:{type:"dashed",color:"#aaa"}},splitArea:{areaStyle:{color:n}}}},r=["#dd6b66","#759aa0","#e69d87","#8dc1a9","#ea7e53","#eedd78","#73a373","#73b9bc","#7289ab","#91ca8c","#f49f42"],o={color:r,backgroundColor:"#333",tooltip:{axisPointer:{lineStyle:{color:n},crossStyle:{color:n},label:{color:"#000"}}},legend:{textStyle:{color:n}},textStyle:{color:n},title:{textStyle:{color:n}},toolbox:{iconStyle:{normal:{borderColor:n}}},dataZoom:{textStyle:{color:n}},visualMap:{textStyle:{color:n}},timeline:{lineStyle:{color:n},itemStyle:{normal:{color:r[1]}},label:{normal:{textStyle:{color:n}}},controlStyle:{normal:{color:n,borderColor:n}}},timeAxis:i(),logAxis:i(),valueAxis:i(),categoryAxis:i(),line:{symbol:"circle"},graph:{color:r},gauge:{title:{textStyle:{color:n}}},candlestick:{itemStyle:{normal:{color:"#FD1050",color0:"#0CF49B",borderColor:"#FD1050",borderColor0:"#0CF49B"}}}};o.categoryAxis.splitLine.show=!1;var a=o;e.exports=a},"963c":function(e,t,n){"use strict"; +/*! + * vue-i18n v5.0.3 + * (c) 2017 kazuya kawaguchi + * Released under the MIT License. + */function i(e,t){window.console&&(console.warn("[vue-i18n] "+e),t&&console.warn(t.stack))}var r=function(e,t){e.locale=function(e,n,r){if(void 0===n)return t.locales[e];null===n?(t.locales[e]=void 0,delete t.locales[e]):o(e,n,(function(n){n?t.$set(t.locales,e,n):i("failed set `"+e+"` locale"),r&&r()}))}};function o(e,t,n){if("object"===typeof t)n(t);else{var i=t.call(this);if("function"===typeof i)if(i.resolved)n(i.resolved);else if(i.requested)i.pendingCallbacks.push(n);else{i.requested=!0;var r=i.pendingCallbacks=[n];i((function(e){i.resolved=e;for(var t=0,n=r.length;t1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function p(e){return null!==e&&"object"===typeof e}var g=Object.prototype.toString,m="[object Object]";function v(e){return g.call(e)===m}var y,b=Object.prototype.hasOwnProperty;function w(e,t){return b.call(e,t)}var x=null,_=null,M=function(e,t,n){var i=c(t),r=h(t);function o(e,t){var n=new i(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),r&&r.target&&n.depend(),n.value}}Object.defineProperty(e.config,"lang",{enumerable:!0,configurable:!0,get:o((function(){return t.lang}),t),set:f((function(e){t.lang=e}),t)}),y=n,Object.defineProperty(e.config,"fallbackLang",{enumerable:!0,configurable:!0,get:function(){return y},set:function(e){y=e}}),Object.defineProperty(e.config,"missingHandler",{enumerable:!0,configurable:!0,get:function(){return x},set:function(e){x=e}}),Object.defineProperty(e.config,"i18nFormatter",{enumerable:!0,configurable:!0,get:function(){return _},set:function(e){_=e}})},I=/(%|)\{([0-9a-zA-Z_]+)\}/g,C=function(e){function t(e){var t=[],n=arguments.length-1;while(n-- >0)t[n]=arguments[n+1];return t=1===t.length&&"object"===typeof t[0]?t[0]:{},t&&t.hasOwnProperty||(t={}),e.replace(I,(function(n,i,r,o){var a;return"{"===e[o-1]&&"}"===e[o+n.length]?r:(a=w(t,r)?t[r]:n,d(a)?"":a)}))}return t},S=Object.create(null),D=0,T=1,A=2,k=3,E=0,N=1,O=2,P=3,L=4,B=5,j=6,z=7,R=8,F=[];F[E]={ws:[E],ident:[P,D],"[":[L],eof:[z]},F[N]={ws:[N],".":[O],"[":[L],eof:[z]},F[O]={ws:[O],ident:[P,D],0:[P,D],number:[P,D]},F[P]={ident:[P,D],0:[P,D],number:[P,D],ws:[N,T],".":[O,T],"[":[L,T],eof:[z,T]},F[L]={"'":[B,D],'"':[j,D],"[":[L,A],"]":[N,k],eof:R,else:[L,D]},F[B]={"'":[L,D],eof:R,else:[B,D]},F[j]={'"':[L,D],eof:R,else:[j,D]};var V=/^\s?(true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;function H(e){return V.test(e)}function $(e){var t=e.charCodeAt(0),n=e.charCodeAt(e.length-1);return t!==n||34!==t&&39!==t?e:e.slice(1,-1)}function U(e){if(void 0===e)return"eof";var t=e.charCodeAt(0);switch(t){case 91:case 93:case 46:case 34:case 39:case 48:return e;case 95:case 36:case 45:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return t>=97&&t<=122||t>=65&&t<=90?"ident":t>=49&&t<=57?"number":"else"}function W(e){var t=e.trim();return("0"!==e.charAt(0)||!isNaN(e))&&(H(t)?$(t):"*"+t)}function G(e){var t,n,i,r,o,a,s,l=[],u=-1,c=E,h=0,d=[];function f(){var t=e[u+1];if(c===B&&"'"===t||c===j&&'"'===t)return u++,n="\\"+t,d[D](),!0}d[T]=function(){void 0!==i&&(l.push(i),i=void 0)},d[D]=function(){void 0===i?i=n:i+=n},d[A]=function(){d[D](),h++},d[k]=function(){if(h>0)h--,c=L,d[D]();else{if(h=0,i=W(i),!1===i)return!1;d[T]()}};while(null!=c)if(u++,t=e[u],"\\"!==t||!f()){if(r=U(t),s=F[c],o=s[r]||s["else"]||R,o===R)return;if(c=o[0],a=d[o[1]],a&&(n=o[2],n=void 0===n?t:n,!1===a()))return;if(c===z)return l.raw=e,l}}function Z(e){var t=S[e];return t||(t=G(e),t&&(S[e]=t)),t}var Y,Q=function(e){function t(e){if(null===e||void 0===e)return!0;if(Array.isArray(e)){if(e.length>0)return!1;if(0===e.length)return!0}else if(v(e))for(var t in e)if(w(e,t))return!1;return!0}function n(e,n){if(!p(e))return null;var i=Z(n);if(t(i))return null;var r=i.length,o=null,a=e,s=0;while(s=0){var u=l.match(/(@:[\w|.]+)/g);for(var c in u){var h=u[c],f=h.substr(2),p=a(r,f,s);l=l.replace(h,p)}}return s?e.config.i18nFormatter?e.config.i18nFormatter.apply(null,[l].concat(s)):t(l,s):l}function s(e,t,n,i,r){var o=null;return o=a(e(t),i,r),d(o)?(o=a(e(n),i,r),d(o)?null:o):o}function l(t,n,i,r){return d(r)?(e.config.missingHandler&&e.config.missingHandler.apply(null,[t,n,i]),n):r}function u(t){return e.locale(t)}function c(e){return this.$options.locales[e]}function h(e){return e?e>1?1:0:1}function g(e,t){return e=Math.abs(e),2===t?h(e):e?Math.min(e,2):0}function m(e,t){if(!e&&"string"!==typeof e)return null;var n=e.split("|");return t=g(t,n.length),n[t]?n[t].trim():e}return e.t=function(e){var t=[],n=arguments.length-1;while(n-- >0)t[n]=arguments[n+1];if(!e)return"";var i=r.apply(void 0,t),o=i.lang,a=i.fallback,c=i.params;return l(o,e,null,s(u,o,a,e,c))},e.tc=function(t,n){var i=[],r=arguments.length-2;while(r-- >0)i[r]=arguments[r+2];return m(e.t.apply(e,[t].concat(i)),n)},e.te=function(e){var t=[],n=arguments.length-1;while(n-- >0)t[n]=arguments[n+1];var i=r.apply(void 0,t),a=i.lang;return o(u(a),e)},e.prototype.$t=function(e){var t=[],n=arguments.length-1;while(n-- >0)t[n]=arguments[n+1];if(!e)return"";var i=r.apply(void 0,t),o=i.lang,a=i.fallback,h=i.params,d=null;return this.$options.locales&&(d=s(f(c,this),o,a,e,h),d)?d:l(o,e,this,s(u,o,a,e,h))},e.prototype.$tc=function(e,t){var n,i=[],r=arguments.length-2;while(r-- >0)i[r]=arguments[r+2];return"number"!==typeof t&&"undefined"!==typeof t?e:m((n=this).$t.apply(n,[e].concat(i)),t)},e.prototype.$te=function(e){var t=[],n=arguments.length-1;while(n-- >0)t[n]=arguments[n+1];var i=r.apply(void 0,t),a=i.lang,s=!1;return this.$options.locales&&(s=o(f(c)(a),e)),s||(s=o(u(a),e)),s},e.mixin({computed:{$lang:function(){return e.config.lang}}}),e};function K(e,t){void 0===t&&(t={});e.version&&Number(e.version.split(".")[0]);var n="en";X(e,n),r(e,Y),u(e,Y),M(e,Y,n),q(e)}function X(e,t){var n=e.config.silent;e.config.silent=!0,Y||(Y=new e({data:{lang:t,locales:{}}})),e.config.silent=n}K.version="__VERSION__","undefined"!==typeof window&&window.Vue&&window.Vue.use(K),e.exports=K},9671:function(e,t,n){var i=n("357b"),r=n("f298"),o=n("0b9d"),a=n("88f7"),s=r.Group,l=["width","height"],u=["x","y"],c=a.extend({type:"legend.scroll",newlineDisabled:!0,init:function(){c.superCall(this,"init"),this._currentIndex=0,this.group.add(this._containerGroup=new s),this._containerGroup.add(this.getContentGroup()),this.group.add(this._controllerGroup=new s),this._showController},resetInner:function(){c.superCall(this,"resetInner"),this._controllerGroup.removeAll(),this._containerGroup.removeClipPath(),this._containerGroup.__rectSize=null},renderInner:function(e,t,n,o,a,s,l){var u=this;c.superCall(this,"renderInner",e,t,n,o,a,s,l);var h=this._controllerGroup,d=t.get("pageIconSize",!0);i.isArray(d)||(d=[d,d]),p("pagePrev",0);var f=t.getModel("pageTextStyle");function p(e,n){var a=e+"DataIndex",s=r.createIcon(t.get("pageIcons",!0)[t.getOrient().name][n],{onclick:i.bind(u._pageGo,u,a,t,o)},{x:-d[0]/2,y:-d[1]/2,width:d[0],height:d[1]});s.name=e,h.add(s)}h.add(new r.Text({name:"pageText",style:{textFill:f.getTextColor(),font:f.getFont(),textVerticalAlign:"middle",textAlign:"center"},silent:!0})),p("pageNext",1)},layoutInner:function(e,t,n,r,a,s){var c=this.getSelectorGroup(),h=e.getOrient().index,d=l[h],f=u[h],p=l[1-h],g=u[1-h];a&&o.box("horizontal",c,e.get("selectorItemGap",!0));var m=e.get("selectorButtonGap",!0),v=c.getBoundingRect(),y=[-v.x,-v.y],b=i.clone(n);a&&(b[d]=n[d]-v[d]-m);var w=this._layoutContentAndController(e,r,b,h,d,p,g);if(a){if("end"===s)y[h]+=w[d]+m;else{var x=v[d]+m;y[h]-=x,w[f]-=x}w[d]+=v[d]+m,y[1-h]+=w[g]+w[p]/2-v[p]/2,w[p]=Math.max(w[p],v[p]),w[g]=Math.min(w[g],v[g]+y[1-h]),c.attr("position",y)}return w},_layoutContentAndController:function(e,t,n,a,s,l,u){var c=this.getContentGroup(),h=this._containerGroup,d=this._controllerGroup;o.box(e.get("orient"),c,e.get("itemGap"),a?n.width:null,a?null:n.height),o.box("horizontal",d,e.get("pageButtonItemGap",!0));var f=c.getBoundingRect(),p=d.getBoundingRect(),g=this._showController=f[s]>n[s],m=[-f.x,-f.y];t||(m[a]=c.position[a]);var v=[0,0],y=[-p.x,-p.y],b=i.retrieve2(e.get("pageButtonGap",!0),e.get("itemGap",!0));if(g){var w=e.get("pageButtonPosition",!0);"end"===w?y[a]+=n[s]-p[s]:v[a]+=p[s]+b}y[1-a]+=f[l]/2-p[l]/2,c.attr("position",m),h.attr("position",v),d.attr("position",y);var x={x:0,y:0};if(x[s]=g?n[s]:f[s],x[l]=Math.max(f[l],p[l]),x[u]=Math.min(0,p[u]+y[1-a]),h.__rectSize=n[s],g){var _={x:0,y:0};_[s]=Math.max(n[s]-p[s]-b,0),_[l]=x[l],h.setClipPath(new r.Rect({shape:_})),h.__rectSize=_[s]}else d.eachChild((function(e){e.attr({invisible:!0,silent:!0})}));var M=this._getPageInfo(e);return null!=M.pageIndex&&r.updateProps(c,{position:M.contentPosition},!!g&&e),this._updatePageInfoView(e,M),x},_pageGo:function(e,t,n){var i=this._getPageInfo(t)[e];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:t.id})},_updatePageInfoView:function(e,t){var n=this._controllerGroup;i.each(["pagePrev","pageNext"],(function(i){var r=null!=t[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?e.get("pageIconColor",!0):e.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var r=n.childOfName("pageText"),o=e.get("pageFormatter"),a=t.pageIndex,s=null!=a?a+1:0,l=t.pageCount;r&&o&&r.setStyle("text",i.isString(o)?o.replace("{current}",s).replace("{total}",l):o({current:s,total:l}))},_getPageInfo:function(e){var t=e.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=e.getOrient().index,o=l[r],a=u[r],s=this._findTargetItemIndex(t),c=n.children(),h=c[s],d=c.length,f=d?1:0,p={contentPosition:n.position.slice(),pageCount:f,pageIndex:f-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!h)return p;var g=w(h);p.contentPosition[r]=-g.s;for(var m=s+1,v=g,y=g,b=null;m<=d;++m)b=w(c[m]),(!b&&y.e>v.s+i||b&&!x(b,v.s))&&(v=y.i>v.i?y:b,v&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=v.i),++p.pageCount)),y=b;for(m=s-1,v=g,y=g,b=null;m>=-1;--m)b=w(c[m]),b&&x(y,b.s)||!(v.i=t&&e.s<=t+i}},_findTargetItemIndex:function(e){if(!this._showController)return 0;var t,n,i=this.getContentGroup();return i.eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===e&&(t=r)})),null!=t?t:n}}),h=c;e.exports=h},9691:function(e,t,n){var i=n("5d42"),r=i.devicePixelRatio,o=n("357b"),a=n("954d"),s=n("53de"),l=n("64f5"),u=n("0a79"),c=n("baab"),h=n("ecba"),d=n("d3e5"),f=1e5,p=314159,g=.01,m=.001;function v(e){return parseInt(e,10)}function y(e){return!!e&&(!!e.__builtin__||"function"===typeof e.resize&&"function"===typeof e.refresh)}var b=new s(0,0,0,0),w=new s(0,0,0,0);function x(e,t,n){return b.copy(e.getBoundingRect()),e.transform&&b.applyTransform(e.transform),w.width=t,w.height=n,!b.intersect(w)}function _(e,t){if(e===t)return!1;if(!e||!t||e.length!==t.length)return!0;for(var n=0;n=0&&n.splice(i,1),e.__hoverMir=null},clearHover:function(e){for(var t=this._hoverElements,n=0;n15)break}}a.__drawIndex=v,a.__drawIndex0&&e>i[0]){for(s=0;se)break;o=n[i[s]]}if(i.splice(s+1,0,e),n[e]=t,!t.virtual)if(o){var u=o.dom;u.nextSibling?l.insertBefore(t.dom,u.nextSibling):l.appendChild(t.dom)}else l.firstChild?l.insertBefore(t.dom,l.firstChild):l.appendChild(t.dom)}else a("Layer of zlevel "+e+" is not valid")},eachLayer:function(e,t){var n,i,r=this._zlevelList;for(i=0;i0?g:0),this._needsManuallyCompositing),l.__builtin__||a("ZLevel "+u+" has been used by unkown layer "+l.id),l!==o&&(l.__used=!0,l.__startIndex!==n&&(l.__dirty=!0),l.__startIndex=n,l.incremental?l.__drawIndex=-1:l.__drawIndex=n,t(n),o=l),i.__dirty&&(l.__dirty=!0,l.incremental&&l.__drawIndex<0&&(l.__drawIndex=n))}t(n),this.eachBuiltinLayer((function(e,t){!e.__used&&e.getElementCount()>0&&(e.__dirty=!0,e.__startIndex=e.__endIndex=e.__drawIndex=0),e.__dirty&&e.__drawIndex<0&&(e.__drawIndex=e.__startIndex)}))},clear:function(){return this.eachBuiltinLayer(this._clearLayer),this},_clearLayer:function(e){e.clear()},setBackgroundColor:function(e){this._backgroundColor=e},configLayer:function(e,t){if(t){var n=this._layerConfig;n[e]?o.merge(n[e],t,!0):n[e]=t;for(var i=0;i0){var T=a(b)?l:u;b>0&&(b=b*S+I),x[_++]=T[D],x[_++]=T[D+1],x[_++]=T[D+2],x[_++]=T[D+3]*b*256}else _+=4}return d.putImageData(w,0,0),h},_getBrush:function(){var e=this._brushCanvas||(this._brushCanvas=i.createCanvas()),t=this.pointSize+this.blurSize,n=2*t;e.width=n,e.height=n;var r=e.getContext("2d");return r.clearRect(0,0,n,n),r.shadowOffsetX=n,r.shadowBlur=this.blurSize,r.shadowColor="#000",r.beginPath(),r.arc(-t,t,this.pointSize,0,2*Math.PI,!0),r.closePath(),r.fill(),e},_getGradient:function(e,t,n){for(var i=this._gradientPixels,r=i[n]||(i[n]=new Uint8ClampedArray(1024)),o=[0,0,0,0],a=0,s=0;s<256;s++)t[n](s/255,!0,o),r[a++]=o[0],r[a++]=o[1],r[a++]=o[2],r[a++]=o[3];return r}};var a=o;e.exports=a},"96ab":function(e,t,n){var i=n("357b"),r=n("96c5"),o=function(e,t,n,i){r.call(this,e,t,n),this.type=i||"value",this.model=null};o.prototype={constructor:o,getLabelModel:function(){return this.model.getModel("label")},isHorizontal:function(){return"horizontal"===this.model.get("orient")}},i.inherits(o,r);var a=o;e.exports=a},"96c5":function(e,t,n){var i=n("357b"),r=i.each,o=i.map,a=n("cb77"),s=a.linearMap,l=a.getPixelPrecision,u=a.round,c=n("58b3"),h=c.createAxisTicks,d=c.createAxisLabels,f=c.calculateCategoryInterval,p=[0,1],g=function(e,t,n){this.dim=e,this.scale=t,this._extent=n||[0,0],this.inverse=!1,this.onBand=!1};function m(e,t){var n=e[1]-e[0],i=t,r=n/i/2;e[0]+=r,e[1]-=r}function v(e,t,n,i){var o=t.length;if(e.onBand&&!n&&o){var a,s,l=e.getExtent();if(1===o)t[0].coord=l[0],a=t[1]={coord:l[0]};else{var c=t[o-1].tickValue-t[0].tickValue,h=(t[o-1].coord-t[0].coord)/c;r(t,(function(e){e.coord-=h/2}));var d=e.scale.getExtent();s=1+d[1]-t[o-1].tickValue,a={coord:t[o-1].coord+h*s},t.push(a)}var f=l[0]>l[1];p(t[0].coord,l[0])&&(i?t[0].coord=l[0]:t.shift()),i&&p(l[0],t[0].coord)&&t.unshift({coord:l[0]}),p(l[1],a.coord)&&(i?a.coord=l[1]:t.pop()),i&&p(a.coord,l[1])&&t.push({coord:l[1]})}function p(e,t){return e=u(e),t=u(t),f?e>t:e=n&&e<=i},containData:function(e){return this.scale.contain(e)},getExtent:function(){return this._extent.slice()},getPixelPrecision:function(e){return l(e||this.scale.getExtent(),this._extent)},setExtent:function(e,t){var n=this._extent;n[0]=e,n[1]=t},dataToCoord:function(e,t){var n=this._extent,i=this.scale;return e=i.normalize(e),this.onBand&&"ordinal"===i.type&&(n=n.slice(),m(n,i.count())),s(e,p,n,t)},coordToData:function(e,t){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&(n=n.slice(),m(n,i.count()));var r=s(e,n,p,t);return this.scale.scale(r)},pointToData:function(e,t){},getTicksCoords:function(e){e=e||{};var t=e.tickModel||this.getTickModel(),n=h(this,t),i=n.ticks,r=o(i,(function(e){return{coord:this.dataToCoord(e),tickValue:e}}),this),a=t.get("alignWithLabel");return v(this,r,a,e.clamp),r},getMinorTicksCoords:function(){if("ordinal"===this.scale.type)return[];var e=this.model.getModel("minorTick"),t=e.get("splitNumber");t>0&&t<100||(t=5);var n=this.scale.getMinorTicks(t),i=o(n,(function(e){return o(e,(function(e){return{coord:this.dataToCoord(e),tickValue:e}}),this)}),this);return i},getViewLabels:function(){return d(this).labels},getLabelModel:function(){return this.model.getModel("axisLabel")},getTickModel:function(){return this.model.getModel("axisTick")},getBandWidth:function(){var e=this._extent,t=this.scale.getExtent(),n=t[1]-t[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(e[1]-e[0]);return Math.abs(i)/n},isHorizontal:null,getRotate:null,calculateCategoryInterval:function(){return f(this)}};var y=g;e.exports=y},9736:function(e,t,n){var i=n("357b"),r=n("f298"),o=n("0a8d"),a=n("405f"),s=n("5ed9"),l=n("3ede"),u=n("9188");function c(e){var t,n=e.get("type"),i=e.getModel(n+"Style");return"line"===n?(t=i.getLineStyle(),t.fill=null):"shadow"===n&&(t=i.getAreaStyle(),t.stroke=null),t}function h(e,t,n,i,r){var s=n.get("value"),l=f(s,t.axis,t.ecModel,n.get("seriesDataIndices"),{precision:n.get("label.precision"),formatter:n.get("label.formatter")}),u=n.getModel("label"),c=a.normalizeCssArray(u.get("padding")||0),h=u.getFont(),p=o.getBoundingRect(l,h),g=r.position,m=p.width+c[1]+c[3],v=p.height+c[0]+c[2],y=r.align;"right"===y&&(g[0]-=m),"center"===y&&(g[0]-=m/2);var b=r.verticalAlign;"bottom"===b&&(g[1]-=v),"middle"===b&&(g[1]-=v/2),d(g,m,v,i);var w=u.get("backgroundColor");w&&"auto"!==w||(w=t.get("axisLine.lineStyle.color")),e.label={shape:{x:0,y:0,width:m,height:v,r:u.get("borderRadius")},position:g.slice(),style:{text:l,textFont:h,textFill:u.getTextColor(),textPosition:"inside",textPadding:c,fill:w,stroke:u.get("borderColor")||"transparent",lineWidth:u.get("borderWidth")||0,shadowBlur:u.get("shadowBlur"),shadowColor:u.get("shadowColor"),shadowOffsetX:u.get("shadowOffsetX"),shadowOffsetY:u.get("shadowOffsetY")},z2:10}}function d(e,t,n,i){var r=i.getWidth(),o=i.getHeight();e[0]=Math.min(e[0]+t,r)-t,e[1]=Math.min(e[1]+n,o)-n,e[0]=Math.max(e[0],0),e[1]=Math.max(e[1],0)}function f(e,t,n,r,o){e=t.scale.parse(e);var a=t.scale.getLabel(e,{precision:o.precision}),s=o.formatter;if(s){var u={value:l.getAxisRawValue(t,e),axisDimension:t.dim,axisIndex:t.index,seriesData:[]};i.each(r,(function(e){var t=n.getSeriesByIndex(e.seriesIndex),i=e.dataIndexInside,r=t&&t.getDataParams(i);r&&u.seriesData.push(r)})),i.isString(s)?a=s.replace("{value}",a):i.isFunction(s)&&(a=s(u))}return a}function p(e,t,n){var i=s.create();return s.rotate(i,i,n.rotation),s.translate(i,i,n.position),r.applyTransform([e.dataToCoord(t),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function g(e,t,n,i,r,o){var a=u.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get("label.margin"),h(t,i,r,o,{position:p(i.axis,e,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function m(e,t,n){return n=n||0,{x1:e[n],y1:e[1-n],x2:t[n],y2:t[1-n]}}function v(e,t,n){return n=n||0,{x:e[n],y:e[1-n],width:t[n],height:t[1-n]}}function y(e,t,n,i,r,o){return{cx:e,cy:t,r0:n,r:i,startAngle:r,endAngle:o,clockwise:!0}}t.buildElStyle=c,t.buildLabelElOption=h,t.getValueLabel=f,t.getTransformedPosition=p,t.buildCartesianSingleLabelElOption=g,t.makeLineShape=m,t.makeRectShape=v,t.makeSectorShape=y},"97ca":function(e,t,n){var i=n("92dd"),r=n("3061"),o=n("9354"),a=i.extend({type:"series.heatmap",getInitialData:function(e,t){return r(this.getSource(),this,{generateCoord:"value"})},preventIncremental:function(){var e=o.get(this.get("coordinateSystem"));if(e&&e.dimensions)return"lng"===e.dimensions[0]&&"lat"===e.dimensions[1]},defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0}});e.exports=a},"97cc":function(e,t,n){var i=n("357b"),r=n("44e1"),o=i.each;function a(e){if(e)for(var t in e)if(e.hasOwnProperty(t))return!0}function s(e,t,n){var a={};return o(t,(function(t){var l=a[t]=s();o(e[t],(function(e,o){if(r.isValidType(o)){var a={type:o,visual:e};n&&n(a,t),l[o]=new r(a),"opacity"===o&&(a=i.clone(a),a.type="colorAlpha",l.__hidden.__alphaForOpacity=new r(a))}}))})),a;function s(){var e=function(){};e.prototype.__hidden=e.prototype;var t=new e;return t}}function l(e,t,n){var r;i.each(n,(function(e){t.hasOwnProperty(e)&&a(t[e])&&(r=!0)})),r&&i.each(n,(function(n){t.hasOwnProperty(n)&&a(t[n])?e[n]=i.clone(t[n]):delete e[n]}))}function u(e,t,n,o,a,s){var l,u={};function c(e){return n.getItemVisual(l,e)}function h(e,t){n.setItemVisual(l,e,t)}function d(e,i){l=null==s?e:i;var r=n.getRawDataItem(l);if(!r||!1!==r.visualMap)for(var d=o.call(a,e),f=t[d],p=u[d],g=0,m=p.length;ge&&(e=t),e},defaultOption:{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1}}});e.exports=r},"990b":function(e,t,n){var i=n("357b"),r="--\x3e",o=function(e){return e.get("autoCurveness")||null},a=function(e,t){var n=o(e),r=20,a=[];if("number"===typeof n)r=n;else if(i.isArray(n))return void(e.__curvenessList=n);t>r&&(r=t);var s=r%2?r+2:r+3;a=[];for(var l=0;l0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!(n&&n.context&&i.target&&r.target)||e.contains(i.target)||e.contains(r.target)||e===i.target||n.context.popperElm&&(n.context.popperElm.contains(i.target)||n.context.popperElm.contains(r.target))||(t.expression&&e[l].methodName&&n.context[e[l].methodName]?n.context[e[l].methodName]():e[l].bindingFn&&e[l].bindingFn())}}!r.default.prototype.$isServer&&(0,o.on)(document,"mousedown",(function(e){return u=e})),!r.default.prototype.$isServer&&(0,o.on)(document,"mouseup",(function(e){s.forEach((function(t){return t[l].documentHandler(e,u)}))})),t.default={bind:function(e,t,n){s.push(e);var i=c++;e[l]={id:i,documentHandler:h(e,t,n),methodName:t.expression,bindingFn:t.value}},update:function(e,t,n){e[l].documentHandler=h(e,t,n),e[l].methodName=t.expression,e[l].bindingFn=t.value},unbind:function(e){for(var t=s.length,n=0;nt)return e[i];return e[n-1]}var l={clearColorPalette:function(){a(this).colorIdx=0,a(this).colorNameMap={}},getColorFromPalette:function(e,t,n){t=t||this;var i=a(t),r=i.colorIdx||0,l=i.colorNameMap=i.colorNameMap||{};if(l.hasOwnProperty(e))return l[e];var u=o(this.get("color",!0)),c=this.get("colorLayer",!0),h=null!=n&&c?s(c,n):u;if(h=h||u,h&&h.length){var d=h[r];return e&&(l[e]=d),i.colorIdx=(r+1)%h.length,d}}};e.exports=l},"9a88":function(e,t,n){var i=n("bf4b"),r=i.extend({type:"dataZoom.select"});e.exports=r},"9aab":function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("4e50");i.registerAction("dataZoom",(function(e,t){var n=o.createLinkedNodesFinder(r.bind(t.eachComponent,t,"dataZoom"),o.eachAxisDim,(function(e,t){return e.get(t.axisIndex)})),i=[];t.eachComponent({mainType:"dataZoom",query:e},(function(e,t){i.push.apply(i,n(e).nodes)})),r.each(i,(function(t,n){t.setRawRange({start:e.start,end:e.end,startValue:e.startValue,endValue:e.endValue})}))}))},"9ad6":function(e,t,n){var i=n("357b"),r=i.inherits,o=n("3e1f"),a=n("53de");function s(e){o.call(this,e),this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.notClear=!0}s.prototype.incremental=!0,s.prototype.clearDisplaybles=function(){this._displayables=[],this._temporaryDisplayables=[],this._cursor=0,this.dirty(),this.notClear=!1},s.prototype.addDisplayable=function(e,t){t?this._temporaryDisplayables.push(e):this._displayables.push(e),this.dirty()},s.prototype.addDisplayables=function(e,t){t=t||!1;for(var n=0;nr[n+t]&&(t=a),o&=i.get("preventDefaultMouseMove",!0)})),{controlType:t,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!o}}}t.register=s,t.unregister=l,t.generateCoordId=u},"9b30":function(e,t,n){n("1746"),n("23a8"),n("b09c")},"9b58":function(e,t,n){"use strict";var i=n("7fdc"),r=n("7ccf"),o=n("a023"),a=n("22c6"),s=n("610c");function l(e){s.call(this,"digest"),this._hash=e}i(l,s),l.prototype._update=function(e){this._hash.update(e)},l.prototype._final=function(){return this._hash.digest()},e.exports=function(e){return e=e.toLowerCase(),"md5"===e?new r:"rmd160"===e||"ripemd160"===e?new o:new l(a(e))}},"9bd8":function(e,t,n){var i=n("d3e5"),r=[["shadowBlur",0],["shadowColor","#000"],["shadowOffsetX",0],["shadowOffsetY",0]];function o(e){return i.browser.ie&&i.browser.version>=11?function(){var t,n=this.__clipPaths,i=this.style;if(n)for(var o=0;ot+c&&u>i+c&&u>a+c||ue+c&&l>n+c&&l>o+c||ll-2*u-2)throw new Error("Message is too long to encode into an encoded message with a length of "+l+" bytes, increaseemLen to fix this error (minimum value for given parameters and options: "+(l-2*u-2)+")");var c=i.createHash(o);c.update(s),c=c.digest();var h=t.alloc(l-n.length-2*u-1);h.fill(0),h[h.length-1]=1;for(var d=t.concat([c,h,n]),f=i.randomBytes(u),p=a(f,d.length,o),g=0;g=48&&n<=57?n-48:n>=65&&n<=70?n-55:n>=97&&n<=102?n-87:void i(!1,"Invalid character in "+e)}function l(e,t,n){var i=s(e,n);return n-1>=t&&(i|=s(e,n-1)<<4),i}function u(e,t,n,r){for(var o=0,a=0,s=Math.min(e.length,n),l=t;l=49?u-49+10:u>=17?u-17+10:u,i(u>=0&&a0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,n){if("number"===typeof e)return this._initNumber(e,t,n);if("object"===typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36),e=e.toString().replace(/\s+/g,"");var r=0;"-"===e[0]&&(r++,this.negative=1),r=0;r-=3)a=e[r]|e[r-1]<<8|e[r-2]<<16,this.words[o]|=a<>>26-s&67108863,s+=24,s>=26&&(s-=26,o++);else if("le"===n)for(r=0,o=0;r>>26-s&67108863,s+=24,s>=26&&(s-=26,o++);return this._strip()},o.prototype._parseHex=function(e,t,n){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var i=0;i=t;i-=2)r=l(e,t,i)<=18?(o-=18,a+=1,this.words[a]|=r>>>26):o+=8;else{var s=e.length-t;for(i=s%2===0?t+1:t;i=18?(o-=18,a+=1,this.words[a]|=r>>>26):o+=8}this._strip()},o.prototype._parseBase=function(e,t,n){this.words=[0],this.length=1;for(var i=0,r=1;r<=67108863;r*=t)i++;i--,r=r/t|0;for(var o=e.length-n,a=o%i,s=Math.min(o,o-a)+n,l=0,c=n;c1&&0===this.words[this.length-1])this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},"undefined"!==typeof Symbol&&"function"===typeof Symbol.for)try{o.prototype[Symbol.for("nodejs.util.inspect.custom")]=h}catch(k){o.prototype.inspect=h}else o.prototype.inspect=h;function h(){return(this.red?""}var d=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],p=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(e,t){var n;if(e=e||10,t=0|t||1,16===e||"hex"===e){n="";for(var r=0,o=0,a=0;a>>24-r&16777215,n=0!==o||a!==this.length-1?d[6-l.length]+l+n:l+n,r+=2,r>=26&&(r-=26,a--)}0!==o&&(n=o.toString(16)+n);while(n.length%t!==0)n="0"+n;return 0!==this.negative&&(n="-"+n),n}if(e===(0|e)&&e>=2&&e<=36){var u=f[e],c=p[e];n="";var h=this.clone();h.negative=0;while(!h.isZero()){var g=h.modrn(c).toString(e);h=h.idivn(c),n=h.isZero()?g+n:d[u-g.length]+g+n}this.isZero()&&(n="0"+n);while(n.length%t!==0)n="0"+n;return 0!==this.negative&&(n="-"+n),n}i(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16,2)},a&&(o.prototype.toBuffer=function(e,t){return this.toArrayLike(a,e,t)}),o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)};var g=function(e,t){return e.allocUnsafe?e.allocUnsafe(t):new e(t)};function m(e){for(var t=new Array(e.bitLength()),n=0;n>>r&1}return t}function v(e,t,n){n.negative=t.negative^e.negative;var i=e.length+t.length|0;n.length=i,i=i-1|0;var r=0|e.words[0],o=0|t.words[0],a=r*o,s=67108863&a,l=a/67108864|0;n.words[0]=s;for(var u=1;u>>26,h=67108863&l,d=Math.min(u,t.length-1),f=Math.max(0,u-e.length+1);f<=d;f++){var p=u-f|0;r=0|e.words[p],o=0|t.words[f],a=r*o+h,c+=a/67108864|0,h=67108863&a}n.words[u]=0|h,l=0|c}return 0!==l?n.words[u]=0|l:n.length--,n._strip()}o.prototype.toArrayLike=function(e,t,n){this._strip();var r=this.byteLength(),o=n||Math.max(1,r);i(r<=o,"byte array longer than desired length"),i(o>0,"Requested array length <= 0");var a=g(e,o),s="le"===t?"LE":"BE";return this["_toArrayLike"+s](a,r),a},o.prototype._toArrayLikeLE=function(e,t){for(var n=0,i=0,r=0,o=0;r>8&255),n>16&255),6===o?(n>24&255),i=0,o=0):(i=a>>>24,o+=2)}if(n=0&&(e[n--]=a>>8&255),n>=0&&(e[n--]=a>>16&255),6===o?(n>=0&&(e[n--]=a>>24&255),i=0,o=0):(i=a>>>24,o+=2)}if(n>=0){e[n--]=i;while(n>=0)e[n--]=0}},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,n=0;return t>=4096&&(n+=13,t>>>=13),t>=64&&(n+=7,t>>>=7),t>=8&&(n+=4,t>>>=4),t>=2&&(n+=2,t>>>=2),n+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,n=0;return 0===(8191&t)&&(n+=13,t>>>=13),0===(127&t)&&(n+=7,t>>>=7),0===(15&t)&&(n+=4,t>>>=4),0===(3&t)&&(n+=2,t>>>=2),0===(1&t)&&n++,n},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var n=0;ne.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,n;this.length>e.length?(t=this,n=e):(t=e,n=this);for(var i=0;ie.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){i("number"===typeof e&&e>=0);var t=0|Math.ceil(e/26),n=e%26;this._expand(t),n>0&&t--;for(var r=0;r0&&(this.words[r]=~this.words[r]&67108863>>26-n),this._strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){i("number"===typeof e&&e>=0);var n=e/26|0,r=e%26;return this._expand(n+1),this.words[n]=t?this.words[n]|1<e.length?(n=this,i=e):(n=e,i=this);for(var r=0,o=0;o>>26;for(;0!==r&&o>>26;if(this.length=n.length,0!==r)this.words[this.length]=r,this.length++;else if(n!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var n,i,r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==o&&a>26,this.words[a]=67108863&t;if(0===o&&a>>13,f=0|a[1],p=8191&f,g=f>>>13,m=0|a[2],v=8191&m,y=m>>>13,b=0|a[3],w=8191&b,x=b>>>13,_=0|a[4],M=8191&_,I=_>>>13,C=0|a[5],S=8191&C,D=C>>>13,T=0|a[6],A=8191&T,k=T>>>13,E=0|a[7],N=8191&E,O=E>>>13,P=0|a[8],L=8191&P,B=P>>>13,j=0|a[9],z=8191&j,R=j>>>13,F=0|s[0],V=8191&F,H=F>>>13,$=0|s[1],U=8191&$,W=$>>>13,G=0|s[2],Z=8191&G,Y=G>>>13,Q=0|s[3],q=8191&Q,K=Q>>>13,X=0|s[4],J=8191&X,ee=X>>>13,te=0|s[5],ne=8191&te,ie=te>>>13,re=0|s[6],oe=8191&re,ae=re>>>13,se=0|s[7],le=8191&se,ue=se>>>13,ce=0|s[8],he=8191&ce,de=ce>>>13,fe=0|s[9],pe=8191&fe,ge=fe>>>13;n.negative=e.negative^t.negative,n.length=19,i=Math.imul(h,V),r=Math.imul(h,H),r=r+Math.imul(d,V)|0,o=Math.imul(d,H);var me=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(p,V),r=Math.imul(p,H),r=r+Math.imul(g,V)|0,o=Math.imul(g,H),i=i+Math.imul(h,U)|0,r=r+Math.imul(h,W)|0,r=r+Math.imul(d,U)|0,o=o+Math.imul(d,W)|0;var ve=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(v,V),r=Math.imul(v,H),r=r+Math.imul(y,V)|0,o=Math.imul(y,H),i=i+Math.imul(p,U)|0,r=r+Math.imul(p,W)|0,r=r+Math.imul(g,U)|0,o=o+Math.imul(g,W)|0,i=i+Math.imul(h,Z)|0,r=r+Math.imul(h,Y)|0,r=r+Math.imul(d,Z)|0,o=o+Math.imul(d,Y)|0;var ye=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(w,V),r=Math.imul(w,H),r=r+Math.imul(x,V)|0,o=Math.imul(x,H),i=i+Math.imul(v,U)|0,r=r+Math.imul(v,W)|0,r=r+Math.imul(y,U)|0,o=o+Math.imul(y,W)|0,i=i+Math.imul(p,Z)|0,r=r+Math.imul(p,Y)|0,r=r+Math.imul(g,Z)|0,o=o+Math.imul(g,Y)|0,i=i+Math.imul(h,q)|0,r=r+Math.imul(h,K)|0,r=r+Math.imul(d,q)|0,o=o+Math.imul(d,K)|0;var be=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(be>>>26)|0,be&=67108863,i=Math.imul(M,V),r=Math.imul(M,H),r=r+Math.imul(I,V)|0,o=Math.imul(I,H),i=i+Math.imul(w,U)|0,r=r+Math.imul(w,W)|0,r=r+Math.imul(x,U)|0,o=o+Math.imul(x,W)|0,i=i+Math.imul(v,Z)|0,r=r+Math.imul(v,Y)|0,r=r+Math.imul(y,Z)|0,o=o+Math.imul(y,Y)|0,i=i+Math.imul(p,q)|0,r=r+Math.imul(p,K)|0,r=r+Math.imul(g,q)|0,o=o+Math.imul(g,K)|0,i=i+Math.imul(h,J)|0,r=r+Math.imul(h,ee)|0,r=r+Math.imul(d,J)|0,o=o+Math.imul(d,ee)|0;var we=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(S,V),r=Math.imul(S,H),r=r+Math.imul(D,V)|0,o=Math.imul(D,H),i=i+Math.imul(M,U)|0,r=r+Math.imul(M,W)|0,r=r+Math.imul(I,U)|0,o=o+Math.imul(I,W)|0,i=i+Math.imul(w,Z)|0,r=r+Math.imul(w,Y)|0,r=r+Math.imul(x,Z)|0,o=o+Math.imul(x,Y)|0,i=i+Math.imul(v,q)|0,r=r+Math.imul(v,K)|0,r=r+Math.imul(y,q)|0,o=o+Math.imul(y,K)|0,i=i+Math.imul(p,J)|0,r=r+Math.imul(p,ee)|0,r=r+Math.imul(g,J)|0,o=o+Math.imul(g,ee)|0,i=i+Math.imul(h,ne)|0,r=r+Math.imul(h,ie)|0,r=r+Math.imul(d,ne)|0,o=o+Math.imul(d,ie)|0;var xe=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(A,V),r=Math.imul(A,H),r=r+Math.imul(k,V)|0,o=Math.imul(k,H),i=i+Math.imul(S,U)|0,r=r+Math.imul(S,W)|0,r=r+Math.imul(D,U)|0,o=o+Math.imul(D,W)|0,i=i+Math.imul(M,Z)|0,r=r+Math.imul(M,Y)|0,r=r+Math.imul(I,Z)|0,o=o+Math.imul(I,Y)|0,i=i+Math.imul(w,q)|0,r=r+Math.imul(w,K)|0,r=r+Math.imul(x,q)|0,o=o+Math.imul(x,K)|0,i=i+Math.imul(v,J)|0,r=r+Math.imul(v,ee)|0,r=r+Math.imul(y,J)|0,o=o+Math.imul(y,ee)|0,i=i+Math.imul(p,ne)|0,r=r+Math.imul(p,ie)|0,r=r+Math.imul(g,ne)|0,o=o+Math.imul(g,ie)|0,i=i+Math.imul(h,oe)|0,r=r+Math.imul(h,ae)|0,r=r+Math.imul(d,oe)|0,o=o+Math.imul(d,ae)|0;var _e=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(N,V),r=Math.imul(N,H),r=r+Math.imul(O,V)|0,o=Math.imul(O,H),i=i+Math.imul(A,U)|0,r=r+Math.imul(A,W)|0,r=r+Math.imul(k,U)|0,o=o+Math.imul(k,W)|0,i=i+Math.imul(S,Z)|0,r=r+Math.imul(S,Y)|0,r=r+Math.imul(D,Z)|0,o=o+Math.imul(D,Y)|0,i=i+Math.imul(M,q)|0,r=r+Math.imul(M,K)|0,r=r+Math.imul(I,q)|0,o=o+Math.imul(I,K)|0,i=i+Math.imul(w,J)|0,r=r+Math.imul(w,ee)|0,r=r+Math.imul(x,J)|0,o=o+Math.imul(x,ee)|0,i=i+Math.imul(v,ne)|0,r=r+Math.imul(v,ie)|0,r=r+Math.imul(y,ne)|0,o=o+Math.imul(y,ie)|0,i=i+Math.imul(p,oe)|0,r=r+Math.imul(p,ae)|0,r=r+Math.imul(g,oe)|0,o=o+Math.imul(g,ae)|0,i=i+Math.imul(h,le)|0,r=r+Math.imul(h,ue)|0,r=r+Math.imul(d,le)|0,o=o+Math.imul(d,ue)|0;var Me=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(L,V),r=Math.imul(L,H),r=r+Math.imul(B,V)|0,o=Math.imul(B,H),i=i+Math.imul(N,U)|0,r=r+Math.imul(N,W)|0,r=r+Math.imul(O,U)|0,o=o+Math.imul(O,W)|0,i=i+Math.imul(A,Z)|0,r=r+Math.imul(A,Y)|0,r=r+Math.imul(k,Z)|0,o=o+Math.imul(k,Y)|0,i=i+Math.imul(S,q)|0,r=r+Math.imul(S,K)|0,r=r+Math.imul(D,q)|0,o=o+Math.imul(D,K)|0,i=i+Math.imul(M,J)|0,r=r+Math.imul(M,ee)|0,r=r+Math.imul(I,J)|0,o=o+Math.imul(I,ee)|0,i=i+Math.imul(w,ne)|0,r=r+Math.imul(w,ie)|0,r=r+Math.imul(x,ne)|0,o=o+Math.imul(x,ie)|0,i=i+Math.imul(v,oe)|0,r=r+Math.imul(v,ae)|0,r=r+Math.imul(y,oe)|0,o=o+Math.imul(y,ae)|0,i=i+Math.imul(p,le)|0,r=r+Math.imul(p,ue)|0,r=r+Math.imul(g,le)|0,o=o+Math.imul(g,ue)|0,i=i+Math.imul(h,he)|0,r=r+Math.imul(h,de)|0,r=r+Math.imul(d,he)|0,o=o+Math.imul(d,de)|0;var Ie=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(z,V),r=Math.imul(z,H),r=r+Math.imul(R,V)|0,o=Math.imul(R,H),i=i+Math.imul(L,U)|0,r=r+Math.imul(L,W)|0,r=r+Math.imul(B,U)|0,o=o+Math.imul(B,W)|0,i=i+Math.imul(N,Z)|0,r=r+Math.imul(N,Y)|0,r=r+Math.imul(O,Z)|0,o=o+Math.imul(O,Y)|0,i=i+Math.imul(A,q)|0,r=r+Math.imul(A,K)|0,r=r+Math.imul(k,q)|0,o=o+Math.imul(k,K)|0,i=i+Math.imul(S,J)|0,r=r+Math.imul(S,ee)|0,r=r+Math.imul(D,J)|0,o=o+Math.imul(D,ee)|0,i=i+Math.imul(M,ne)|0,r=r+Math.imul(M,ie)|0,r=r+Math.imul(I,ne)|0,o=o+Math.imul(I,ie)|0,i=i+Math.imul(w,oe)|0,r=r+Math.imul(w,ae)|0,r=r+Math.imul(x,oe)|0,o=o+Math.imul(x,ae)|0,i=i+Math.imul(v,le)|0,r=r+Math.imul(v,ue)|0,r=r+Math.imul(y,le)|0,o=o+Math.imul(y,ue)|0,i=i+Math.imul(p,he)|0,r=r+Math.imul(p,de)|0,r=r+Math.imul(g,he)|0,o=o+Math.imul(g,de)|0,i=i+Math.imul(h,pe)|0,r=r+Math.imul(h,ge)|0,r=r+Math.imul(d,pe)|0,o=o+Math.imul(d,ge)|0;var Ce=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,i=Math.imul(z,U),r=Math.imul(z,W),r=r+Math.imul(R,U)|0,o=Math.imul(R,W),i=i+Math.imul(L,Z)|0,r=r+Math.imul(L,Y)|0,r=r+Math.imul(B,Z)|0,o=o+Math.imul(B,Y)|0,i=i+Math.imul(N,q)|0,r=r+Math.imul(N,K)|0,r=r+Math.imul(O,q)|0,o=o+Math.imul(O,K)|0,i=i+Math.imul(A,J)|0,r=r+Math.imul(A,ee)|0,r=r+Math.imul(k,J)|0,o=o+Math.imul(k,ee)|0,i=i+Math.imul(S,ne)|0,r=r+Math.imul(S,ie)|0,r=r+Math.imul(D,ne)|0,o=o+Math.imul(D,ie)|0,i=i+Math.imul(M,oe)|0,r=r+Math.imul(M,ae)|0,r=r+Math.imul(I,oe)|0,o=o+Math.imul(I,ae)|0,i=i+Math.imul(w,le)|0,r=r+Math.imul(w,ue)|0,r=r+Math.imul(x,le)|0,o=o+Math.imul(x,ue)|0,i=i+Math.imul(v,he)|0,r=r+Math.imul(v,de)|0,r=r+Math.imul(y,he)|0,o=o+Math.imul(y,de)|0,i=i+Math.imul(p,pe)|0,r=r+Math.imul(p,ge)|0,r=r+Math.imul(g,pe)|0,o=o+Math.imul(g,ge)|0;var Se=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(z,Z),r=Math.imul(z,Y),r=r+Math.imul(R,Z)|0,o=Math.imul(R,Y),i=i+Math.imul(L,q)|0,r=r+Math.imul(L,K)|0,r=r+Math.imul(B,q)|0,o=o+Math.imul(B,K)|0,i=i+Math.imul(N,J)|0,r=r+Math.imul(N,ee)|0,r=r+Math.imul(O,J)|0,o=o+Math.imul(O,ee)|0,i=i+Math.imul(A,ne)|0,r=r+Math.imul(A,ie)|0,r=r+Math.imul(k,ne)|0,o=o+Math.imul(k,ie)|0,i=i+Math.imul(S,oe)|0,r=r+Math.imul(S,ae)|0,r=r+Math.imul(D,oe)|0,o=o+Math.imul(D,ae)|0,i=i+Math.imul(M,le)|0,r=r+Math.imul(M,ue)|0,r=r+Math.imul(I,le)|0,o=o+Math.imul(I,ue)|0,i=i+Math.imul(w,he)|0,r=r+Math.imul(w,de)|0,r=r+Math.imul(x,he)|0,o=o+Math.imul(x,de)|0,i=i+Math.imul(v,pe)|0,r=r+Math.imul(v,ge)|0,r=r+Math.imul(y,pe)|0,o=o+Math.imul(y,ge)|0;var De=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(De>>>26)|0,De&=67108863,i=Math.imul(z,q),r=Math.imul(z,K),r=r+Math.imul(R,q)|0,o=Math.imul(R,K),i=i+Math.imul(L,J)|0,r=r+Math.imul(L,ee)|0,r=r+Math.imul(B,J)|0,o=o+Math.imul(B,ee)|0,i=i+Math.imul(N,ne)|0,r=r+Math.imul(N,ie)|0,r=r+Math.imul(O,ne)|0,o=o+Math.imul(O,ie)|0,i=i+Math.imul(A,oe)|0,r=r+Math.imul(A,ae)|0,r=r+Math.imul(k,oe)|0,o=o+Math.imul(k,ae)|0,i=i+Math.imul(S,le)|0,r=r+Math.imul(S,ue)|0,r=r+Math.imul(D,le)|0,o=o+Math.imul(D,ue)|0,i=i+Math.imul(M,he)|0,r=r+Math.imul(M,de)|0,r=r+Math.imul(I,he)|0,o=o+Math.imul(I,de)|0,i=i+Math.imul(w,pe)|0,r=r+Math.imul(w,ge)|0,r=r+Math.imul(x,pe)|0,o=o+Math.imul(x,ge)|0;var Te=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Te>>>26)|0,Te&=67108863,i=Math.imul(z,J),r=Math.imul(z,ee),r=r+Math.imul(R,J)|0,o=Math.imul(R,ee),i=i+Math.imul(L,ne)|0,r=r+Math.imul(L,ie)|0,r=r+Math.imul(B,ne)|0,o=o+Math.imul(B,ie)|0,i=i+Math.imul(N,oe)|0,r=r+Math.imul(N,ae)|0,r=r+Math.imul(O,oe)|0,o=o+Math.imul(O,ae)|0,i=i+Math.imul(A,le)|0,r=r+Math.imul(A,ue)|0,r=r+Math.imul(k,le)|0,o=o+Math.imul(k,ue)|0,i=i+Math.imul(S,he)|0,r=r+Math.imul(S,de)|0,r=r+Math.imul(D,he)|0,o=o+Math.imul(D,de)|0,i=i+Math.imul(M,pe)|0,r=r+Math.imul(M,ge)|0,r=r+Math.imul(I,pe)|0,o=o+Math.imul(I,ge)|0;var Ae=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(z,ne),r=Math.imul(z,ie),r=r+Math.imul(R,ne)|0,o=Math.imul(R,ie),i=i+Math.imul(L,oe)|0,r=r+Math.imul(L,ae)|0,r=r+Math.imul(B,oe)|0,o=o+Math.imul(B,ae)|0,i=i+Math.imul(N,le)|0,r=r+Math.imul(N,ue)|0,r=r+Math.imul(O,le)|0,o=o+Math.imul(O,ue)|0,i=i+Math.imul(A,he)|0,r=r+Math.imul(A,de)|0,r=r+Math.imul(k,he)|0,o=o+Math.imul(k,de)|0,i=i+Math.imul(S,pe)|0,r=r+Math.imul(S,ge)|0,r=r+Math.imul(D,pe)|0,o=o+Math.imul(D,ge)|0;var ke=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(z,oe),r=Math.imul(z,ae),r=r+Math.imul(R,oe)|0,o=Math.imul(R,ae),i=i+Math.imul(L,le)|0,r=r+Math.imul(L,ue)|0,r=r+Math.imul(B,le)|0,o=o+Math.imul(B,ue)|0,i=i+Math.imul(N,he)|0,r=r+Math.imul(N,de)|0,r=r+Math.imul(O,he)|0,o=o+Math.imul(O,de)|0,i=i+Math.imul(A,pe)|0,r=r+Math.imul(A,ge)|0,r=r+Math.imul(k,pe)|0,o=o+Math.imul(k,ge)|0;var Ee=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(z,le),r=Math.imul(z,ue),r=r+Math.imul(R,le)|0,o=Math.imul(R,ue),i=i+Math.imul(L,he)|0,r=r+Math.imul(L,de)|0,r=r+Math.imul(B,he)|0,o=o+Math.imul(B,de)|0,i=i+Math.imul(N,pe)|0,r=r+Math.imul(N,ge)|0,r=r+Math.imul(O,pe)|0,o=o+Math.imul(O,ge)|0;var Ne=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,i=Math.imul(z,he),r=Math.imul(z,de),r=r+Math.imul(R,he)|0,o=Math.imul(R,de),i=i+Math.imul(L,pe)|0,r=r+Math.imul(L,ge)|0,r=r+Math.imul(B,pe)|0,o=o+Math.imul(B,ge)|0;var Oe=(u+i|0)+((8191&r)<<13)|0;u=(o+(r>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,i=Math.imul(z,pe),r=Math.imul(z,ge),r=r+Math.imul(R,pe)|0,o=Math.imul(R,ge);var Pe=(u+i|0)+((8191&r)<<13)|0;return u=(o+(r>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,l[0]=me,l[1]=ve,l[2]=ye,l[3]=be,l[4]=we,l[5]=xe,l[6]=_e,l[7]=Me,l[8]=Ie,l[9]=Ce,l[10]=Se,l[11]=De,l[12]=Te,l[13]=Ae,l[14]=ke,l[15]=Ee,l[16]=Ne,l[17]=Oe,l[18]=Pe,0!==u&&(l[19]=u,n.length++),n};function b(e,t,n){n.negative=t.negative^e.negative,n.length=e.length+t.length;for(var i=0,r=0,o=0;o>>26)|0,r+=a>>>26,a&=67108863}n.words[o]=s,i=a,a=r}return 0!==i?n.words[o]=i:n.length--,n._strip()}function w(e,t,n){return b(e,t,n)}function x(e,t){this.x=e,this.y=t}Math.imul||(y=v),o.prototype.mulTo=function(e,t){var n,i=this.length+e.length;return n=10===this.length&&10===e.length?y(this,e,t):i<63?v(this,e,t):i<1024?b(this,e,t):w(this,e,t),n},x.prototype.makeRBT=function(e){for(var t=new Array(e),n=o.prototype._countBits(e)-1,i=0;i>=1;return i},x.prototype.permute=function(e,t,n,i,r,o){for(var a=0;a>>=1)r++;return 1<>>=13,n[2*a+1]=8191&o,o>>>=13;for(a=2*t;a>=26,n+=o/67108864|0,n+=a>>>26,this.words[r]=67108863&a}return 0!==n&&(this.words[r]=n,this.length++),t?this.ineg():this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=m(e);if(0===t.length)return new o(1);for(var n=this,i=0;i=0);var t,n=e%26,r=(e-n)/26,o=67108863>>>26-n<<26-n;if(0!==n){var a=0;for(t=0;t>>26-n}a&&(this.words[t]=a,this.length++)}if(0!==r){for(t=this.length-1;t>=0;t--)this.words[t+r]=this.words[t];for(t=0;t=0),r=t?(t-t%26)/26:0;var o=e%26,a=Math.min((e-o)/26,this.length),s=67108863^67108863>>>o<a)for(this.length-=a,u=0;u=0&&(0!==c||u>=r);u--){var h=0|this.words[u];this.words[u]=c<<26-o|h>>>o,c=h&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},o.prototype.ishrn=function(e,t,n){return i(0===this.negative),this.iushrn(e,t,n)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){i("number"===typeof e&&e>=0);var t=e%26,n=(e-t)/26,r=1<=0);var t=e%26,n=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=n)return this;if(0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var r=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(i("number"===typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(l/67108864|0),this.words[r+n]=67108863&o}for(;r>26,this.words[r+n]=67108863&o;if(0===s)return this._strip();for(i(-1===s),s=0,r=0;r>26,this.words[r]=67108863&o;return this.negative=1,this._strip()},o.prototype._wordDiv=function(e,t){var n=this.length-e.length,i=this.clone(),r=e,a=0|r.words[r.length-1],s=this._countBits(a);n=26-s,0!==n&&(r=r.ushln(n),i.iushln(n),a=0|r.words[r.length-1]);var l,u=i.length-r.length;if("mod"!==t){l=new o(null),l.length=u+1,l.words=new Array(l.length);for(var c=0;c=0;d--){var f=67108864*(0|i.words[r.length+d])+(0|i.words[r.length+d-1]);f=Math.min(f/a|0,67108863),i._ishlnsubmul(r,f,d);while(0!==i.negative)f--,i.negative=0,i._ishlnsubmul(r,1,d),i.isZero()||(i.negative^=1);l&&(l.words[d]=f)}return l&&l._strip(),i._strip(),"div"!==t&&0!==n&&i.iushrn(n),{div:l||null,mod:i}},o.prototype.divmod=function(e,t,n){return i(!e.isZero()),this.isZero()?{div:new o(0),mod:new o(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),"mod"!==t&&(r=s.div.neg()),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.iadd(e)),{div:r,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),"mod"!==t&&(r=s.div.neg()),{div:r,mod:s.mod}):0!==(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),"div"!==t&&(a=s.mod.neg(),n&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modrn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modrn(e.words[0]))}:this._wordDiv(e,t);var r,a,s},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var n=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),r=e.andln(1),o=n.cmp(i);return o<0||1===r&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modrn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var n=(1<<26)%e,r=0,o=this.length-1;o>=0;o--)r=(n*r+(0|this.words[o]))%e;return t?-r:r},o.prototype.modn=function(e){return this.modrn(e)},o.prototype.idivn=function(e){var t=e<0;t&&(e=-e),i(e<=67108863);for(var n=0,r=this.length-1;r>=0;r--){var o=(0|this.words[r])+67108864*n;this.words[r]=o/e|0,n=o%e}return this._strip(),t?this.ineg():this},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();var r=new o(1),a=new o(0),s=new o(0),l=new o(1),u=0;while(t.isEven()&&n.isEven())t.iushrn(1),n.iushrn(1),++u;var c=n.clone(),h=t.clone();while(!t.isZero()){for(var d=0,f=1;0===(t.words[0]&f)&&d<26;++d,f<<=1);if(d>0){t.iushrn(d);while(d-- >0)(r.isOdd()||a.isOdd())&&(r.iadd(c),a.isub(h)),r.iushrn(1),a.iushrn(1)}for(var p=0,g=1;0===(n.words[0]&g)&&p<26;++p,g<<=1);if(p>0){n.iushrn(p);while(p-- >0)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(h)),s.iushrn(1),l.iushrn(1)}t.cmp(n)>=0?(t.isub(n),r.isub(s),a.isub(l)):(n.isub(t),s.isub(r),l.isub(a))}return{a:s,b:l,gcd:n.iushln(u)}},o.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,n=e.clone();t=0!==t.negative?t.umod(e):t.clone();var r,a=new o(1),s=new o(0),l=n.clone();while(t.cmpn(1)>0&&n.cmpn(1)>0){for(var u=0,c=1;0===(t.words[0]&c)&&u<26;++u,c<<=1);if(u>0){t.iushrn(u);while(u-- >0)a.isOdd()&&a.iadd(l),a.iushrn(1)}for(var h=0,d=1;0===(n.words[0]&d)&&h<26;++h,d<<=1);if(h>0){n.iushrn(h);while(h-- >0)s.isOdd()&&s.iadd(l),s.iushrn(1)}t.cmp(n)>=0?(t.isub(n),a.isub(s)):(n.isub(t),s.isub(a))}return r=0===t.cmpn(1)?a:s,r.cmpn(0)<0&&r.iadd(e),r},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),n=e.clone();t.negative=0,n.negative=0;for(var i=0;t.isEven()&&n.isEven();i++)t.iushrn(1),n.iushrn(1);do{while(t.isEven())t.iushrn(1);while(n.isEven())n.iushrn(1);var r=t.cmp(n);if(r<0){var o=t;t=n,n=o}else if(0===r||0===n.cmpn(1))break;t.isub(n)}while(1);return n.iushln(i)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){i("number"===typeof e);var t=e%26,n=(e-t)/26,r=1<>>26,s&=67108863,this.words[a]=s}return 0!==o&&(this.words[a]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t,n=e<0;if(0!==this.negative&&!n)return-1;if(0===this.negative&&n)return 1;if(this._strip(),this.length>1)t=1;else{n&&(e=-e),i(e<=67108863,"Number is too big");var r=0|this.words[0];t=r===e?0:re.length)return 1;if(this.length=0;n--){var i=0|this.words[n],r=0|e.words[n];if(i!==r){ir&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new T(e)},o.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},o.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var _={k256:null,p224:null,p192:null,p25519:null};function M(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function I(){M.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function C(){M.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function S(){M.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function D(){M.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function T(e){if("string"===typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function A(e){T.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}M.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},M.prototype.ireduce=function(e){var t,n=e;do{this.split(n,this.tmp),n=this.imulK(n),n=n.iadd(this.tmp),t=n.bitLength()}while(t>this.n);var i=t0?n.isub(this.p):void 0!==n.strip?n.strip():n._strip(),n},M.prototype.split=function(e,t){e.iushrn(this.n,0,t)},M.prototype.imulK=function(e){return e.imul(this.k)},r(I,M),I.prototype.split=function(e,t){for(var n=4194303,i=Math.min(e.length,9),r=0;r>>22,o=a}o>>>=22,e.words[r-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},I.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,n=0;n>>=26,e.words[n]=r,t=i}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function(e){if(_[e])return _[e];var t;if("k256"===e)t=new I;else if("p224"===e)t=new C;else if("p192"===e)t=new S;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new D}return _[e]=t,t},T.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},T.prototype._verify2=function(e,t){i(0===(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},T.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):(c(e,e.umod(this.m)._forceRed(this)),e)},T.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},T.prototype.add=function(e,t){this._verify2(e,t);var n=e.add(t);return n.cmp(this.m)>=0&&n.isub(this.m),n._forceRed(this)},T.prototype.iadd=function(e,t){this._verify2(e,t);var n=e.iadd(t);return n.cmp(this.m)>=0&&n.isub(this.m),n},T.prototype.sub=function(e,t){this._verify2(e,t);var n=e.sub(t);return n.cmpn(0)<0&&n.iadd(this.m),n._forceRed(this)},T.prototype.isub=function(e,t){this._verify2(e,t);var n=e.isub(t);return n.cmpn(0)<0&&n.iadd(this.m),n},T.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},T.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},T.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},T.prototype.isqr=function(e){return this.imul(e,e.clone())},T.prototype.sqr=function(e){return this.mul(e,e)},T.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2===1),3===t){var n=this.m.add(new o(1)).iushrn(2);return this.pow(e,n)}var r=this.m.subn(1),a=0;while(!r.isZero()&&0===r.andln(1))a++,r.iushrn(1);i(!r.isZero());var s=new o(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();c=new o(2*c*c).toRed(this);while(0!==this.pow(c,u).cmp(l))c.redIAdd(l);var h=this.pow(c,r),d=this.pow(e,r.addn(1).iushrn(1)),f=this.pow(e,r),p=a;while(0!==f.cmp(s)){for(var g=f,m=0;0!==g.cmp(s);m++)g=g.redSqr();i(m=0;r--){for(var c=t.words[r],h=u-1;h>=0;h--){var d=c>>h&1;a!==i[0]&&(a=this.sqr(a)),0!==d||0!==s?(s<<=1,s|=d,l++,(l===n||0===r&&0===h)&&(a=this.mul(a,i[s]),l=0,s=0)):l=0}u=26}return a},T.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},T.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new A(e)},r(A,T),A.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},A.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},A.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var n=e.imul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),o=r;return r.cmp(this.m)>=0?o=r.isub(this.m):r.cmpn(0)<0&&(o=r.iadd(this.m)),o._forceRed(this)},A.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var n=e.mul(t),i=n.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=n.isub(i).iushrn(this.shift),a=r;return r.cmp(this.m)>=0?a=r.isub(this.m):r.cmpn(0)<0&&(a=r.iadd(this.m)),a._forceRed(this)},A.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}})(e,this)}).call(this,n("f5c6")(e))},"9e893":function(e,t,n){var i=n("364b"),r=n("204d"),o=r.subPixelOptimizeLine,a={},s=i.extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(e,t){var n,i,r,s;this.subPixelOptimize?(o(a,t,this.style),n=a.x1,i=a.y1,r=a.x2,s=a.y2):(n=t.x1,i=t.y1,r=t.x2,s=t.y2);var l=t.percent;0!==l&&(e.moveTo(n,i),l<1&&(r=n*(1-l)+r*l,s=i*(1-l)+s*l),e.lineTo(r,s))},pointAt:function(e){var t=this.shape;return[t.x1*(1-e)+t.x2*e,t.y1*(1-e)+t.y2*e]}});e.exports=s},"9ead":function(e,t,n){var i=n("357b"),r=n("8d3b"),o=n("b8ab"),a=n("cb77"),s=n("3ede"),l=s.getScaleExtent,u=s.niceScaleExtent,c=n("9354"),h=n("6e8d");function d(e,t,n){this._model=e,this.dimensions=[],this._indicatorAxes=i.map(e.getIndicatorModels(),(function(e,t){var n="indicator_"+t,i=new r(n,"log"===e.get("axisType")?new h:new o);return i.name=e.get("name"),i.model=e,e.axis=i,this.dimensions.push(n),i}),this),this.resize(e,n),this.cx,this.cy,this.r,this.r0,this.startAngle}d.prototype.getIndicatorAxes=function(){return this._indicatorAxes},d.prototype.dataToPoint=function(e,t){var n=this._indicatorAxes[t];return this.coordToPoint(n.dataToCoord(e),t)},d.prototype.coordToPoint=function(e,t){var n=this._indicatorAxes[t],i=n.angle,r=this.cx+e*Math.cos(i),o=this.cy-e*Math.sin(i);return[r,o]},d.prototype.pointToData=function(e){var t=e[0]-this.cx,n=e[1]-this.cy,i=Math.sqrt(t*t+n*n);t/=i,n/=i;for(var r,o=Math.atan2(-n,t),a=1/0,s=-1,l=0;ln[0]&&isFinite(g)&&isFinite(n[0]))}else{var f=r.getTicks().length-1;f>o&&(d=s(d));var p=Math.ceil(n[1]/d)*d,g=a.round(p-d*o);r.setExtent(g,p),r.setInterval(d)}}))},d.dimensions=[],d.create=function(e,t){var n=[];return e.eachComponent("radar",(function(i){var r=new d(i,e,t);n.push(r),i.coordinateSystem=r})),e.eachSeriesByType("radar",(function(e){"radar"===e.get("coordinateSystem")&&(e.coordinateSystem=n[e.get("radarIndex")||0])})),n},c.register("radar",d);var f=d;e.exports=f},"9f0f":function(e,t,n){var i=n("7ccf");e.exports=function(e){return(new i).update(e).digest()}},"9f3c":function(e,t,n){},"9fa4":function(e,t){var n=Math.pow(2,30)-1;e.exports=function(e,t){if("number"!==typeof e)throw new TypeError("Iterations not a number");if(e<0)throw new TypeError("Bad iterations");if("number"!==typeof t)throw new TypeError("Key length not a number");if(t<0||t>n||t!==t)throw new TypeError("Bad key length")}},"9fb2":function(e,t,n){var i=n("357b"),r=i.each,o="\0__link_datas",a="\0__link_mainData";function s(e){var t=e.mainData,n=e.datas;n||(n={main:t},e.datasAttr={main:"data"}),e.datas=e.mainData=null,f(t,n,e),r(n,(function(n){r(t.TRANSFERABLE_METHODS,(function(t){n.wrapMethod(t,i.curry(l,e))}))})),t.wrapMethod("cloneShallow",i.curry(c,e)),r(t.CHANGABLE_METHODS,(function(n){t.wrapMethod(n,i.curry(u,e))})),i.assert(n[t.dataType]===t)}function l(e,t){if(d(this)){var n=i.extend({},this[o]);n[this.dataType]=t,f(t,n,e)}else p(t,this.dataType,this[a],e);return t}function u(e,t){return e.struct&&e.struct.update(this),t}function c(e,t){return r(t[o],(function(n,i){n!==t&&p(n.cloneShallow(),i,t,e)})),t}function h(e){var t=this[a];return null==e||null==t?t:t[o][e]}function d(e){return e[a]===e}function f(e,t,n){e[o]={},r(t,(function(t,i){p(t,i,e,n)}))}function p(e,t,n,i){n[o][t]=e,e[a]=n,e.dataType=t,i.struct&&(e[i.structAttr]=i.struct,i.struct[i.datasAttr[t]]=e),e.getLinkedData=h}var g=s;e.exports=g},"9fbc":function(e,t,n){"use strict";var i=function(){var e=this,t=e._self._c;return t("div",{staticClass:"echarts"})},r=[],o=n("2fcc"),a=n.n(o),s=n("3a53"),l=n.n(s),u=null;function c(e){return u||(u=(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){return setTimeout(e,16)}).bind(window)),u(e)}var h=null;function d(e){h||(h=(window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(e){clearTimeout(e)}).bind(window)),h(e)}function f(e){var t=document.createElement("style");return t.type="text/css",t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e)),(document.querySelector("head")||document.body).appendChild(t),t}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=document.createElement(e);return Object.keys(t).forEach((function(e){n[e]=t[e]})),n}function g(e,t,n){var i=window.getComputedStyle(e,n||null)||{display:"none"};return i[t]}function m(e){if(!document.documentElement.contains(e))return{detached:!0,rendered:!1};var t=e;while(t!==document){if("none"===g(t,"display"))return{detached:!1,rendered:!1};t=t.parentNode}return{detached:!1,rendered:!0}}var v='.resize-triggers{visibility:hidden;opacity:0}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:"";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}',y=0,b=null;function w(e,t){e.__resize_mutation_handler__||(e.__resize_mutation_handler__=M.bind(e));var n=e.__resize_listeners__;if(!n)if(e.__resize_listeners__=[],window.ResizeObserver){var i=e.offsetWidth,r=e.offsetHeight,o=new ResizeObserver((function(){(e.__resize_observer_triggered__||(e.__resize_observer_triggered__=!0,e.offsetWidth!==i||e.offsetHeight!==r))&&C(e)})),a=m(e),s=a.detached,l=a.rendered;e.__resize_observer_triggered__=!1===s&&!1===l,e.__resize_observer__=o,o.observe(e)}else if(e.attachEvent&&e.addEventListener)e.__resize_legacy_resize_handler__=function(){C(e)},e.attachEvent("onresize",e.__resize_legacy_resize_handler__),document.addEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);else if(y||(b=f(v)),S(e),e.__resize_rendered__=m(e).rendered,window.MutationObserver){var u=new MutationObserver(e.__resize_mutation_handler__);u.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0}),e.__resize_mutation_observer__=u}e.__resize_listeners__.push(t),y++}function x(e,t){if(e.detachEvent&&e.removeEventListener)return e.detachEvent("onresize",e.__resize_legacy_resize_handler__),void document.removeEventListener("DOMSubtreeModified",e.__resize_mutation_handler__);var n=e.__resize_listeners__;n&&(n.splice(n.indexOf(t),1),n.length||(e.__resize_observer__?(e.__resize_observer__.unobserve(e),e.__resize_observer__.disconnect(),e.__resize_observer__=null):(e.__resize_mutation_observer__&&(e.__resize_mutation_observer__.disconnect(),e.__resize_mutation_observer__=null),e.removeEventListener("scroll",I),e.removeChild(e.__resize_triggers__.triggers),e.__resize_triggers__=null),e.__resize_listeners__=null),!--y&&b&&b.parentNode.removeChild(b))}function _(e){var t=e.__resize_last__,n=t.width,i=t.height,r=e.offsetWidth,o=e.offsetHeight;return r!==n||o!==i?{width:r,height:o}:null}function M(){var e=m(this),t=e.rendered,n=e.detached;t!==this.__resize_rendered__&&(!n&&this.__resize_triggers__&&(D(this),this.addEventListener("scroll",I,!0)),this.__resize_rendered__=t,C(this))}function I(){var e=this;D(this),this.__resize_raf__&&d(this.__resize_raf__),this.__resize_raf__=c((function(){var t=_(e);t&&(e.__resize_last__=t,C(e))}))}function C(e){e&&e.__resize_listeners__&&e.__resize_listeners__.forEach((function(t){t.call(e)}))}function S(e){var t=g(e,"position");t&&"static"!==t||(e.style.position="relative"),e.__resize_old_position__=t,e.__resize_last__={};var n=p("div",{className:"resize-triggers"}),i=p("div",{className:"resize-expand-trigger"}),r=p("div"),o=p("div",{className:"resize-contract-trigger"});i.appendChild(r),n.appendChild(i),n.appendChild(o),e.appendChild(n),e.__resize_triggers__={triggers:n,expand:i,expandChild:r,contract:o},D(e),e.addEventListener("scroll",I,!0),e.__resize_last__={width:e.offsetWidth,height:e.offsetHeight}}function D(e){var t=e.__resize_triggers__,n=t.expand,i=t.expandChild,r=t.contract,o=r.scrollWidth,a=r.scrollHeight,s=n.offsetWidth,l=n.offsetHeight,u=n.scrollWidth,c=n.scrollHeight;r.scrollLeft=o,r.scrollTop=a,i.style.width=s+1+"px",i.style.height=l+1+"px",n.scrollLeft=u,n.scrollTop=c}var T=["legendselectchanged","legendselected","legendunselected","legendscroll","datazoom","datarangeselected","timelinechanged","timelineplaychanged","restore","dataviewchanged","magictypechanged","geoselectchanged","geoselected","geounselected","pieselectchanged","pieselected","pieunselected","mapselectchanged","mapselected","mapunselected","axisareaselected","focusnodeadjacency","unfocusnodeadjacency","brush","brushselected","rendered","finished","click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"],A=["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],k=["theme","initOptions","autoresize"],E=["manualUpdate","watchShallow"],N={props:{options:Object,theme:[String,Object],initOptions:Object,group:String,autoresize:Boolean,watchShallow:Boolean,manualUpdate:Boolean},data:function(){return{lastArea:0}},watch:{group:function(e){this.chart.group=e}},methods:{mergeOptions:function(e,t,n){this.manualUpdate&&(this.manualOptions=e),this.chart?this.delegateMethod("setOption",e,t,n):this.init(e)},appendData:function(e){this.delegateMethod("appendData",e)},resize:function(e){this.delegateMethod("resize",e)},dispatchAction:function(e){this.delegateMethod("dispatchAction",e)},convertToPixel:function(e,t){return this.delegateMethod("convertToPixel",e,t)},convertFromPixel:function(e,t){return this.delegateMethod("convertFromPixel",e,t)},containPixel:function(e,t){return this.delegateMethod("containPixel",e,t)},showLoading:function(e,t){this.delegateMethod("showLoading",e,t)},hideLoading:function(){this.delegateMethod("hideLoading")},getDataURL:function(e){return this.delegateMethod("getDataURL",e)},getConnectedDataURL:function(e){return this.delegateMethod("getConnectedDataURL",e)},clear:function(){this.delegateMethod("clear")},dispose:function(){this.delegateMethod("dispose")},delegateMethod:function(e){var t;this.chart||this.init();for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r>>32-t}function g(e,t,n,i,r,o,a,s){return p(e+(t^n^i)+o+a|0,s)+r|0}function m(e,t,n,i,r,o,a,s){return p(e+(t&n|~t&i)+o+a|0,s)+r|0}function v(e,t,n,i,r,o,a,s){return p(e+((t|~n)^i)+o+a|0,s)+r|0}function y(e,t,n,i,r,o,a,s){return p(e+(t&i|n&~i)+o+a|0,s)+r|0}function b(e,t,n,i,r,o,a,s){return p(e+(t^(n|~i))+o+a|0,s)+r|0}r(f,o),f.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var n=0|this._a,i=0|this._b,r=0|this._c,o=0|this._d,f=0|this._e,w=0|this._a,x=0|this._b,_=0|this._c,M=0|this._d,I=0|this._e,C=0;C<80;C+=1){var S,D;C<16?(S=g(n,i,r,o,f,e[s[C]],h[0],u[C]),D=b(w,x,_,M,I,e[l[C]],d[0],c[C])):C<32?(S=m(n,i,r,o,f,e[s[C]],h[1],u[C]),D=y(w,x,_,M,I,e[l[C]],d[1],c[C])):C<48?(S=v(n,i,r,o,f,e[s[C]],h[2],u[C]),D=v(w,x,_,M,I,e[l[C]],d[2],c[C])):C<64?(S=y(n,i,r,o,f,e[s[C]],h[3],u[C]),D=m(w,x,_,M,I,e[l[C]],d[3],c[C])):(S=b(n,i,r,o,f,e[s[C]],h[4],u[C]),D=g(w,x,_,M,I,e[l[C]],d[4],c[C])),n=f,f=o,o=p(r,10),r=i,i=S,w=I,I=M,M=p(_,10),_=x,x=D}var T=this._b+r+M|0;this._b=this._c+o+I|0,this._c=this._d+f+w|0,this._d=this._e+n+x|0,this._e=this._a+i+_|0,this._a=T},f.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.alloc?i.alloc(20):new i(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},e.exports=f},a032:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(i){"object"===typeof window&&(n=window)}e.exports=n},a059:function(e,t,n){var i=n("357b"),r=n("b8dc"),o=n("8e0a"),a=n("1237"),s=n("f298"),l=n("cb77"),u=n("b91a"),c=n("2407"),h=n("faa9"),d=l.linearMap,f=i.each,p=Math.min,g=Math.max,m=12,v=6,y=a.extend({type:"visualMap.continuous",init:function(){y.superApply(this,"init",arguments),this._shapes={},this._dataInterval=[],this._handleEnds=[],this._orient,this._useHandle,this._hoverLinkDataIndices=[],this._dragging,this._hovering},doRender:function(e,t,n,i){i&&"selectDataRange"===i.type&&i.from===this.uid||this._buildView()},_buildView:function(){this.group.removeAll();var e=this.visualMapModel,t=this.group;this._orient=e.get("orient"),this._useHandle=e.get("calculable"),this._resetInterval(),this._renderBar(t);var n=e.get("text");this._renderEndsText(t,n,0),this._renderEndsText(t,n,1),this._updateView(!0),this.renderBackground(t),this._updateView(),this._enableHoverLinkToSeries(),this._enableHoverLinkFromSeries(),this.positionGroup(t)},_renderEndsText:function(e,t,n){if(t){var i=t[1-n];i=null!=i?i+"":"";var r=this.visualMapModel,o=r.get("textGap"),a=r.itemSize,l=this._shapes.barGroup,u=this._applyTransform([a[0]/2,0===n?-o:a[1]+o],l),c=this._applyTransform(0===n?"bottom":"top",l),h=this._orient,d=this.visualMapModel.textStyleModel;this.group.add(new s.Text({style:{x:u[0],y:u[1],textVerticalAlign:"horizontal"===h?"middle":c,textAlign:"horizontal"===h?c:"center",text:i,textFont:d.getFont(),textFill:d.getTextColor()}}))}},_renderBar:function(e){var t=this.visualMapModel,n=this._shapes,r=t.itemSize,o=this._orient,a=this._useHandle,s=c.getItemAlign(t,this.api,r),l=n.barGroup=this._createBarGroup(s);l.add(n.outOfRange=b()),l.add(n.inRange=b(null,a?I(this._orient):null,i.bind(this._dragHandle,this,"all",!1),i.bind(this._dragHandle,this,"all",!0)));var u=t.textStyleModel.getTextRect("国"),h=g(u.width,u.height);a&&(n.handleThumbs=[],n.handleLabels=[],n.handleLabelPoints=[],this._createHandle(l,0,r,h,o,s),this._createHandle(l,1,r,h,o,s)),this._createIndicator(l,r,h,o),e.add(l)},_createHandle:function(e,t,n,r,a){var l=i.bind(this._dragHandle,this,t,!1),u=i.bind(this._dragHandle,this,t,!0),c=b(w(t,r),I(this._orient),l,u);c.position[0]=n[0],e.add(c);var h=this.visualMapModel.textStyleModel,d=new s.Text({draggable:!0,drift:l,onmousemove:function(e){o.stop(e.event)},ondragend:u,style:{x:0,y:0,text:"",textFont:h.getFont(),textFill:h.getTextColor()}});this.group.add(d);var f=["horizontal"===a?r/2:1.5*r,"horizontal"===a?0===t?-1.5*r:1.5*r:0===t?-r/2:r/2],p=this._shapes;p.handleThumbs[t]=c,p.handleLabelPoints[t]=f,p.handleLabels[t]=d},_createIndicator:function(e,t,n,i){var r=b([[0,0]],"move");r.position[0]=t[0],r.attr({invisible:!0,silent:!0}),e.add(r);var o=this.visualMapModel.textStyleModel,a=new s.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textFont:o.getFont(),textFill:o.getTextColor()}});this.group.add(a);var l=["horizontal"===i?n/2:v+3,0],u=this._shapes;u.indicator=r,u.indicatorLabel=a,u.indicatorLabelPoint=l},_dragHandle:function(e,t,n,i){if(this._useHandle){if(this._dragging=!t,!t){var r=this._applyTransform([n,i],this._shapes.barGroup,!0);this._updateInterval(e,r[1]),this._updateView()}t===!this.visualMapModel.get("realtime")&&this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:this._dataInterval.slice()}),t?!this._hovering&&this._clearHoverLinkToSeries():M(this.visualMapModel)&&this._doHoverLinkToSeries(this._handleEnds[e],!1)}},_resetInterval:function(){var e=this.visualMapModel,t=this._dataInterval=e.getSelected(),n=e.getExtent(),i=[0,e.itemSize[1]];this._handleEnds=[d(t[0],n,i,!0),d(t[1],n,i,!0)]},_updateInterval:function(e,t){t=t||0;var n=this.visualMapModel,i=this._handleEnds,r=[0,n.itemSize[1]];u(t,i,r,e,0);var o=n.getExtent();this._dataInterval=[d(i[0],r,o,!0),d(i[1],r,o,!0)]},_updateView:function(e){var t=this.visualMapModel,n=t.getExtent(),i=this._shapes,r=[0,t.itemSize[1]],o=e?r:this._handleEnds,a=this._createBarVisual(this._dataInterval,n,o,"inRange"),s=this._createBarVisual(n,n,r,"outOfRange");i.inRange.setStyle({fill:a.barColor,opacity:a.opacity}).setShape("points",a.barPoints),i.outOfRange.setStyle({fill:s.barColor,opacity:s.opacity}).setShape("points",s.barPoints),this._updateHandle(o,a)},_createBarVisual:function(e,t,n,i){var o={forceState:i,convertOpacityToAlpha:!0},a=this._makeColorGradient(e,o),s=[this.getControllerVisual(e[0],"symbolSize",o),this.getControllerVisual(e[1],"symbolSize",o)],l=this._createBarPoints(n,s);return{barColor:new r(0,0,0,1,a),barPoints:l,handlesColor:[a[0].color,a[a.length-1].color]}},_makeColorGradient:function(e,t){var n=100,i=[],r=(e[1]-e[0])/n;i.push({color:this.getControllerVisual(e[0],"color",t),offset:0});for(var o=1;oe[1])break;i.push({color:this.getControllerVisual(a,"color",t),offset:o/n})}return i.push({color:this.getControllerVisual(e[1],"color",t),offset:1}),i},_createBarPoints:function(e,t){var n=this.visualMapModel.itemSize;return[[n[0]-t[0],e[0]],[n[0],e[0]],[n[0],e[1]],[n[0]-t[1],e[1]]]},_createBarGroup:function(e){var t=this._orient,n=this.visualMapModel.get("inverse");return new s.Group("horizontal"!==t||n?"horizontal"===t&&n?{scale:"bottom"===e?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==t||n?{scale:"left"===e?[1,1]:[-1,1]}:{scale:"left"===e?[1,-1]:[-1,-1]}:{scale:"bottom"===e?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(e,t){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,r=n.handleThumbs,o=n.handleLabels;f([0,1],(function(a){var l=r[a];l.setStyle("fill",t.handlesColor[a]),l.position[1]=e[a];var u=s.applyTransform(n.handleLabelPoints[a],s.getTransform(l,this.group));o[a].setStyle({x:u[0],y:u[1],text:i.formatValueText(this._dataInterval[a]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===a?"bottom":"top":"left",n.barGroup)})}),this)}},_showIndicator:function(e,t,n,i){var r=this.visualMapModel,o=r.getExtent(),a=r.itemSize,l=[0,a[1]],u=d(e,o,l,!0),c=this._shapes,h=c.indicator;if(h){h.position[1]=u,h.attr("invisible",!1),h.setShape("points",x(!!n,i,u,a[1]));var f={convertOpacityToAlpha:!0},p=this.getControllerVisual(e,"color",f);h.setStyle("fill",p);var g=s.applyTransform(c.indicatorLabelPoint,s.getTransform(h,this.group)),m=c.indicatorLabel;m.attr("invisible",!1);var v=this._applyTransform("left",c.barGroup),y=this._orient;m.setStyle({text:(n||"")+r.formatValueText(t),textVerticalAlign:"horizontal"===y?v:"middle",textAlign:"horizontal"===y?"center":v,x:g[0],y:g[1]})}},_enableHoverLinkToSeries:function(){var e=this;this._shapes.barGroup.on("mousemove",(function(t){if(e._hovering=!0,!e._dragging){var n=e.visualMapModel.itemSize,i=e._applyTransform([t.offsetX,t.offsetY],e._shapes.barGroup,!0,!0);i[1]=p(g(0,i[1]),n[1]),e._doHoverLinkToSeries(i[1],0<=i[0]&&i[0]<=n[0])}})).on("mouseout",(function(){e._hovering=!1,!e._dragging&&e._clearHoverLinkToSeries()}))},_enableHoverLinkFromSeries:function(){var e=this.api.getZr();this.visualMapModel.option.hoverLink?(e.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),e.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(e,t){var n=this.visualMapModel,i=n.itemSize;if(n.option.hoverLink){var r=[0,i[1]],o=n.getExtent();e=p(g(r[0],e),r[1]);var a=_(n,o,r),s=[e-a,e+a],l=d(e,r,o,!0),u=[d(s[0],r,o,!0),d(s[1],r,o,!0)];s[0]r[1]&&(u[1]=1/0),t&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var f=this._hoverLinkDataIndices,m=[];(t||M(n))&&(m=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var v=h.compressBatches(f,m);this._dispatchHighDown("downplay",c.makeHighDownBatch(v[0],n)),this._dispatchHighDown("highlight",c.makeHighDownBatch(v[1],n))}},_hoverLinkFromSeriesMouseOver:function(e){var t=e.target,n=this.visualMapModel;if(t&&null!=t.dataIndex){var i=this.ecModel.getSeriesByIndex(t.seriesIndex);if(n.isTargetSeries(i)){var r=i.getData(t.dataType),o=r.get(n.getDataDimension(r),t.dataIndex,!0);isNaN(o)||this._showIndicator(o,o)}}},_hideIndicator:function(){var e=this._shapes;e.indicator&&e.indicator.attr("invisible",!0),e.indicatorLabel&&e.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var e=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",c.makeHighDownBatch(e,this.visualMapModel)),e.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var e=this.api.getZr();e.off("mouseover",this._hoverLinkFromSeriesMouseOver),e.off("mouseout",this._hideIndicator)},_applyTransform:function(e,t,n,r){var o=s.getTransform(t,r?null:this.group);return s[i.isArray(e)?"applyTransform":"transformDirection"](e,o,n)},_dispatchHighDown:function(e,t){t&&t.length&&this.api.dispatchAction({type:e,batch:t})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});function b(e,t,n,i){return new s.Polygon({shape:{points:e},draggable:!!n,cursor:t,drift:n,onmousemove:function(e){o.stop(e.event)},ondragend:i})}function w(e,t){return 0===e?[[0,0],[t,0],[t,-t]]:[[0,0],[t,0],[t,t]]}function x(e,t,n,i){return e?[[0,-p(t,g(n,0))],[v,0],[0,p(t,g(i-n,0))]]:[[0,0],[5,-5],[5,5]]}function _(e,t,n){var i=m/2,r=e.get("hoverLinkDataSize");return r&&(i=d(r,t,n,!0)/2),i}function M(e){var t=e.get("hoverLinkOnHandle");return!!(null==t?e.get("realtime"):t)}function I(e){return"vertical"===e?"ns-resize":"ew-resize"}var C=y;e.exports=C},a06b:function(e,t,n){var i=n("2fcc"),r=n("357b"),o=n("53de"),a=n("97cc"),s=n("ed72"),l=n("fb2f"),u=n("0327"),c=["inBrush","outOfBrush"],h="__ecBrushSelect",d="__ecInBrushSelectEvent",f=i.PRIORITY.VISUAL.BRUSH;function p(e){e.eachComponent({mainType:"brush"},(function(t){var n=t.brushTargetManager=new u(t.option,e);n.setInputRanges(t.areas,e)}))}function g(e,t,n,i,r){if(r){var o=e.getZr();if(!o[d]){o[h]||(o[h]=m);var a=l.createOrUpdate(o,h,n,t);a(e,i)}}}function m(e,t){if(!e.isDisposed()){var n=e.getZr();n[d]=!0,e.dispatchAction({type:"brushSelect",batch:t}),n[d]=!1}}function v(e,t,n,i){for(var r=0,o=t.length;rt[0][1]&&(t[0][1]=o[0]),o[1]t[1][1]&&(t[1][1]=o[1])}return t&&_(t)}};function _(e){return new o(e[0][0],e[1][0],e[0][1]-e[0][0],e[1][1]-e[1][0])}t.layoutCovers=p},a0c8:function(e,t,n){var i=n("2fcc"),r=n("80ec");n("b65b"),n("5d26"),n("ecc0"),n("a059"),n("88b4"),i.registerPreprocessor(r)},a153:function(e,t,n){var i=n("357b"),r=i.retrieve2,o=i.retrieve3,a=i.each,s=i.normalizeCssArray,l=i.isString,u=i.isObject,c=n("0a8d"),h=n("626c"),d=n("4dfc"),f=n("0d37"),p=n("e031"),g=p.ContextCachedBy,m=p.WILL_BE_RESTORED,v=c.DEFAULT_FONT,y={left:1,right:1,center:1},b={top:1,bottom:1,middle:1},w=[["textShadowBlur","shadowBlur",0],["textShadowOffsetX","shadowOffsetX",0],["textShadowOffsetY","shadowOffsetY",0],["textShadowColor","shadowColor","transparent"]],x={},_={};function M(e){return I(e),a(e.rich,I),e}function I(e){if(e){e.font=c.makeFont(e);var t=e.textAlign;"middle"===t&&(t="center"),e.textAlign=null==t||y[t]?t:"left";var n=e.textVerticalAlign||e.textBaseline;"center"===n&&(n="middle"),e.textVerticalAlign=null==n||b[n]?n:"top";var i=e.textPadding;i&&(e.textPadding=s(e.textPadding))}}function C(e,t,n,i,r,o){i.rich?D(e,t,n,i,r,o):S(e,t,n,i,r,o)}function S(e,t,n,i,r,o){"use strict";var a,s=E(i),l=!1,u=t.__attrCachedBy===g.PLAIN_TEXT;o!==m?(o&&(a=o.style,l=!s&&u&&a),t.__attrCachedBy=s?g.NONE:g.PLAIN_TEXT):u&&(t.__attrCachedBy=g.NONE);var h=i.font||v;l&&h===(a.font||v)||(t.font=h);var d=e.__computedFont;e.__styleFont!==h&&(e.__styleFont=h,d=e.__computedFont=t.font);var p=i.textPadding,y=i.textLineHeight,b=e.__textCotentBlock;b&&!e.__dirtyText||(b=e.__textCotentBlock=c.parsePlainText(n,d,p,y,i.truncate));var x=b.outerHeight,M=b.lines,I=b.lineHeight,C=P(_,e,i,r),S=C.baseX,D=C.baseY,T=C.textAlign||"left",k=C.textVerticalAlign;A(t,i,r,S,D);var O=c.adjustTextY(D,x,k),L=S,z=O;if(s||p){var F=c.getWidth(n,d),V=F;p&&(V+=p[1]+p[3]);var H=c.adjustTextX(S,V,T);s&&N(e,t,i,H,O,V,x),p&&(L=R(S,T,p),z+=p[0])}t.textAlign=T,t.textBaseline="middle",t.globalAlpha=i.opacity||1;for(var $=0;$=0&&(x=I[B],"right"===x.textAlign))k(e,t,x,i,S,y,L,"right"),D-=x.width,L-=x.width,B--;O+=(o-(O-v)-(b-L)-D)/2;while(T<=B)x=I[T],k(e,t,x,i,S,y,O+x.width/2,"center"),O+=x.width,T++;y+=S}}function A(e,t,n,i,r){if(n&&t.textRotation){var o=t.textOrigin;"center"===o?(i=n.width/2+n.x,r=n.height/2+n.y):o&&(i=o[0]+n.x,r=o[1]+n.y),e.translate(i,r),e.rotate(-t.textRotation),e.translate(-i,-r)}}function k(e,t,n,i,a,s,l,u){var c=i.rich[n.styleName]||{};c.text=n.text;var h=n.textVerticalAlign,d=s+a/2;"top"===h?d=s+n.height/2:"bottom"===h&&(d=s+a-n.height/2),!n.isLineHolder&&E(c)&&N(e,t,c,"right"===u?l-n.width:"center"===u?l-n.width/2:l,d-n.height/2,n.width,n.height);var f=n.textPadding;f&&(l=R(l,u,f),d-=n.height/2-f[2]-n.textHeight/2),L(t,"shadowBlur",o(c.textShadowBlur,i.textShadowBlur,0)),L(t,"shadowColor",c.textShadowColor||i.textShadowColor||"transparent"),L(t,"shadowOffsetX",o(c.textShadowOffsetX,i.textShadowOffsetX,0)),L(t,"shadowOffsetY",o(c.textShadowOffsetY,i.textShadowOffsetY,0)),L(t,"textAlign",u),L(t,"textBaseline","middle"),L(t,"font",n.font||v);var p=B(c.textStroke||i.textStroke,m),g=j(c.textFill||i.textFill),m=r(c.textStrokeWidth,i.textStrokeWidth);p&&(L(t,"lineWidth",m),L(t,"strokeStyle",p),t.strokeText(n.text,l,d)),g&&(L(t,"fillStyle",g),t.fillText(n.text,l,d))}function E(e){return!!(e.textBackgroundColor||e.textBorderWidth&&e.textBorderColor)}function N(e,t,n,i,r,o,a){var s=n.textBackgroundColor,c=n.textBorderWidth,f=n.textBorderColor,p=l(s);if(L(t,"shadowBlur",n.textBoxShadowBlur||0),L(t,"shadowColor",n.textBoxShadowColor||"transparent"),L(t,"shadowOffsetX",n.textBoxShadowOffsetX||0),L(t,"shadowOffsetY",n.textBoxShadowOffsetY||0),p||c&&f){t.beginPath();var g=n.textBorderRadius;g?h.buildPath(t,{x:i,y:r,width:o,height:a,r:g}):t.rect(i,r,o,a),t.closePath()}if(p)if(L(t,"fillStyle",s),null!=n.fillOpacity){var m=t.globalAlpha;t.globalAlpha=n.fillOpacity*n.opacity,t.fill(),t.globalAlpha=m}else t.fill();else if(u(s)){var v=s.image;v=d.createOrUpdateImage(v,null,e,O,s),v&&d.isImageReady(v)&&t.drawImage(v,i,r,o,a)}if(c&&f)if(L(t,"lineWidth",c),L(t,"strokeStyle",f),null!=n.strokeOpacity){m=t.globalAlpha;t.globalAlpha=n.strokeOpacity*n.opacity,t.stroke(),t.globalAlpha=m}else t.stroke()}function O(e,t){t.image=e}function P(e,t,n,i){var r=n.x||0,o=n.y||0,a=n.textAlign,s=n.textVerticalAlign;if(i){var l=n.textPosition;if(l instanceof Array)r=i.x+z(l[0],i.width),o=i.y+z(l[1],i.height);else{var u=t&&t.calculateTextPosition?t.calculateTextPosition(x,n,i):c.calculateTextPosition(x,n,i);r=u.x,o=u.y,a=a||u.textAlign,s=s||u.textVerticalAlign}var h=n.textOffset;h&&(r+=h[0],o+=h[1])}return e=e||{},e.baseX=r,e.baseY=o,e.textAlign=a,e.textVerticalAlign=s,e}function L(e,t,n){return e[t]=f(e,t,n),e[t]}function B(e,t){return null==e||t<=0||"transparent"===e||"none"===e?null:e.image||e.colorStops?"#000":e}function j(e){return null==e||"none"===e?null:e.image||e.colorStops?"#000":e}function z(e,t){return"string"===typeof e?e.lastIndexOf("%")>=0?parseFloat(e)/100*t:parseFloat(e):e}function R(e,t,n){return"right"===t?e-n[1]:"center"===t?e+n[3]/2-n[1]/2:e+n[3]}function F(e,t){return null!=e&&(e||t.textBackgroundColor||t.textBorderWidth&&t.textBorderColor||t.textPadding)}t.normalizeTextStyle=M,t.renderText=C,t.getBoxPosition=P,t.getStroke=B,t.getFill=j,t.parsePercent=z,t.needDrawText=F},a158:function(e,t,n){"use strict";var i=n("9054"),r=n("7fdc"),o=n("e6a3"),a=n("791c");function s(e){o.call(this,"mont",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function l(e,t,n){o.BasePoint.call(this,e,"projective"),null===t&&null===n?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(t,16),this.z=new i(n,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}r(s,o),e.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,n=t.redSqr(),i=n.redMul(t).redAdd(n.redMul(this.a)).redAdd(t),r=i.redSqrt();return 0===r.redSqr().cmp(i)},r(l,o.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new l(this,e,t)},s.prototype.pointFromJSON=function(e){return l.fromJSON(this,e)},l.prototype.precompute=function(){},l.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},l.fromJSON=function(e,t){return new l(e,t[0],t[1]||e.one)},l.prototype.inspect=function(){return this.isInfinity()?"":""},l.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},l.prototype.dbl=function(){var e=this.x.redAdd(this.z),t=e.redSqr(),n=this.x.redSub(this.z),i=n.redSqr(),r=t.redSub(i),o=t.redMul(i),a=r.redMul(i.redAdd(this.curve.a24.redMul(r)));return this.curve.point(o,a)},l.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},l.prototype.diffAdd=function(e,t){var n=this.x.redAdd(this.z),i=this.x.redSub(this.z),r=e.x.redAdd(e.z),o=e.x.redSub(e.z),a=o.redMul(n),s=r.redMul(i),l=t.z.redMul(a.redAdd(s).redSqr()),u=t.x.redMul(a.redISub(s).redSqr());return this.curve.point(l,u)},l.prototype.mul=function(e){for(var t=e.clone(),n=this,i=this.curve.point(null,null),r=this,o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var a=o.length-1;a>=0;a--)0===o[a]?(n=n.diffAdd(i,r),i=i.dbl()):(i=n.diffAdd(i,r),n=n.dbl());return i},l.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},l.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},l.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},l.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},l.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},a166:function(e,t,n){"use strict";var i=t;function r(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var n=[];if("string"!==typeof e){for(var i=0;i>8,a=255&r;o?n.push(o,a):n.push(a)}return n}function o(e){return 1===e.length?"0"+e:e}function a(e){for(var t="",n=0;n=0&&(n.splice(i,0,e),this._doAdd(e))}return this},_doAdd:function(e){e.parent&&e.parent.remove(e),e.parent=this;var t=this.__storage,n=this.__zr;t&&t!==e.__storage&&(t.addToStorage(e),e instanceof a&&e.addChildrenToStorage(t)),n&&n.refresh()},remove:function(e){var t=this.__zr,n=this.__storage,r=this._children,o=i.indexOf(r,e);return o<0||(r.splice(o,1),e.parent=null,n&&(n.delFromStorage(e),e instanceof a&&e.delChildrenFromStorage(n)),t&&t.refresh()),this},removeAll:function(){var e,t,n=this._children,i=this.__storage;for(t=0;t>>3}function d(e){return r(e,17)^r(e,19)^e>>>10}t.ft_1=o,t.ch32=a,t.maj32=s,t.p32=l,t.s0_256=u,t.s1_256=c,t.g0_256=h,t.g1_256=d},a2d7:function(e,t){var n="http://www.w3.org/2000/svg";function i(e){return document.createElementNS(n,e)}t.createElement=i},a2ea:function(e,t,n){"use strict";var i=n("a817");e.exports=function(e,t){t=t||{};var n={},r=["url","method","params","data"],o=["headers","auth","proxy"],a=["baseURL","url","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"];i.forEach(r,(function(e){"undefined"!==typeof t[e]&&(n[e]=t[e])})),i.forEach(o,(function(r){i.isObject(t[r])?n[r]=i.deepMerge(e[r],t[r]):"undefined"!==typeof t[r]?n[r]=t[r]:i.isObject(e[r])?n[r]=i.deepMerge(e[r]):"undefined"!==typeof e[r]&&(n[r]=e[r])})),i.forEach(a,(function(i){"undefined"!==typeof t[i]?n[i]=t[i]:"undefined"!==typeof e[i]&&(n[i]=e[i])}));var s=r.concat(o).concat(a),l=Object.keys(t).filter((function(e){return-1===s.indexOf(e)}));return i.forEach(l,(function(i){"undefined"!==typeof t[i]?n[i]=t[i]:"undefined"!==typeof e[i]&&(n[i]=e[i])})),n}},a2ee:function(e,t,n){var i=n("357b"),r=n("f298"),o=n("448b"),a=n("fca1"),s=a.radialCoordinate,l=n("2fcc"),u=n("2c12"),c=n("eae8"),h=n("77ba"),d=n("56ef"),f=n("efe3"),p=f.onIrrelevantElement,g=n("d285"),m=(g.__DEV__,n("cb77")),v=m.parsePercent,y=r.extendShape({shape:{parentPoint:[],childPoints:[],orient:"",forkPosition:""},style:{stroke:"#000",fill:null},buildPath:function(e,t){var n=t.childPoints,i=n.length,r=t.parentPoint,o=n[0],a=n[i-1];if(1===i)return e.moveTo(r[0],r[1]),void e.lineTo(o[0],o[1]);var s=t.orient,l="TB"===s||"BT"===s?0:1,u=1-l,c=v(t.forkPosition,1),h=[];h[l]=r[l],h[u]=r[u]+(a[u]-r[u])*c,e.moveTo(r[0],r[1]),e.lineTo(h[0],h[1]),e.moveTo(o[0],o[1]),h[l]=o[l],e.lineTo(h[0],h[1]),h[l]=a[l],e.lineTo(h[0],h[1]),e.lineTo(a[0],a[1]);for(var d=1;d_.x,b||(y-=Math.PI));var S=b?"left":"right",D=s.labelModel.get("rotate"),T=D*(Math.PI/180);v.setStyle({textPosition:s.labelModel.get("position")||S,textRotation:null==D?-y:T,textOrigin:"center",verticalAlign:"middle"})}M(a,u,h,n,g,p,m,i,s)}function M(e,t,n,o,a,s,l,u,c){var h=c.edgeShape,d=o.__edge;if("curve"===h)t.parentNode&&t.parentNode!==n&&(d||(d=o.__edge=new r.BezierCurve({shape:C(c,a,a),style:i.defaults({opacity:0,strokeNoScale:!0},c.lineStyle)})),r.updateProps(d,{shape:C(c,s,l),style:i.defaults({opacity:1},c.lineStyle)},e));else if("polyline"===h&&"orthogonal"===c.layout&&t!==n&&t.children&&0!==t.children.length&&!0===t.isExpand){for(var f=t.children,p=[],g=0;ge?u():!0!==t&&(r=setTimeout(i?c:u,void 0===i?e-s:e))}return"boolean"!==typeof t&&(i=n,n=t,t=void 0),a}},a509:function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("92dd")),o=n("d6e9"),a=n("357b"),s=a.concatArray,l=a.mergeAll,u=a.map,c=n("405f"),h=c.encodeHTML,d=(n("9354"),"undefined"===typeof Uint32Array?Array:Uint32Array),f="undefined"===typeof Float64Array?Array:Float64Array;function p(e){var t=e.data;t&&t[0]&&t[0][0]&&t[0][0].coord&&(e.data=u(t,(function(e){var t=[e[0].coord,e[1].coord],n={coords:t};return e[0].name&&(n.fromName=e[0].name),e[1].name&&(n.toName=e[1].name),l([n,e[0],e[1]])})))}var g=r.extend({type:"series.lines",dependencies:["grid","polar"],visualColorAccessPath:"lineStyle.color",init:function(e){e.data=e.data||[],p(e);var t=this._processFlatCoordsArray(e.data);this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset,t.flatCoords&&(e.data=new Float32Array(t.count)),g.superApply(this,"init",arguments)},mergeOption:function(e){if(p(e),e.data){var t=this._processFlatCoordsArray(e.data);this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset,t.flatCoords&&(e.data=new Float32Array(t.count))}g.superApply(this,"mergeOption",arguments)},appendData:function(e){var t=this._processFlatCoordsArray(e.data);t.flatCoords&&(this._flatCoords?(this._flatCoords=s(this._flatCoords,t.flatCoords),this._flatCoordsOffset=s(this._flatCoordsOffset,t.flatCoordsOffset)):(this._flatCoords=t.flatCoords,this._flatCoordsOffset=t.flatCoordsOffset),e.data=new Float32Array(t.count)),this.getRawData().appendData(e.data)},_getCoordsFromItemModel:function(e){var t=this.getData().getItemModel(e),n=t.option instanceof Array?t.option:t.getShallow("coords");return n},getLineCoordsCount:function(e){return this._flatCoordsOffset?this._flatCoordsOffset[2*e+1]:this._getCoordsFromItemModel(e).length},getLineCoords:function(e,t){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[2*e],i=this._flatCoordsOffset[2*e+1],r=0;r "))},preventIncremental:function(){return!!this.get("effect.show")},getProgressive:function(){var e=this.option.progressive;return null==e?this.option.large?1e4:this.get("progressive"):e},getProgressiveThreshold:function(){var e=this.option.progressiveThreshold;return null==e?this.option.large?2e4:this.get("progressiveThreshold"):e},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}}}),m=g;e.exports=m},a51f:function(e,t){var n={legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};e.exports=n},a56b:function(e,t,n){n("1235");for(var i=n("78ec"),r=n("12f9"),o=n("3dbc"),a=n("6f0e")("toStringTag"),s="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),l=0;l0||o>0){var c=new r;c.update(u),c.update(e),t&&c.update(t),u=c.digest();var h=0;if(a>0){var d=s.length-a;h=Math.min(a,u.length),u.copy(s,d,0,h),a-=h}if(h0){var f=l.length-o,p=Math.min(o,u.length-h);u.copy(l,f,h,h+p),o-=p}}return u.fill(0),{key:s,iv:l}}e.exports=o},a69d:function(e,t,n){var i=n("52c4");i(i.S+i.F,"Object",{assign:n("58e7")})},a6b7:function(e,t){function n(e){var t=e.coordinateSystem;if("view"!==t.type)return 1;var n=e.option.nodeScaleRatio,i=t.scale,r=i&&i[0]||1,o=t.getZoom(),a=(o-1)*n+1;return a/r}function i(e){var t=e.getVisual("symbolSize");return t instanceof Array&&(t=(t[0]+t[1])/2),+t}t.getNodeGlobalScale=n,t.getSymbolSize=i},a7be:function(e,t,n){var i=n("d996"),r=n("bb75"),o=n("80f1")(!1),a=n("f431")("IE_PROTO");e.exports=function(e,t){var n,s=r(e),l=0,u=[];for(n in s)n!=a&&i(s,n)&&u.push(n);while(t.length>l)i(s,n=t[l++])&&(~o(u,n)||u.push(n));return u}},a7e5:function(e,t,n){var i=n("357b"),r=n("f59f"),o=r.parseClassType,a=0;function s(e){return[e||"",a++,Math.random().toFixed(5)].join("_")}function l(e){var t={};return e.registerSubTypeDefaulter=function(e,n){e=o(e),t[e.main]=n},e.determineSubType=function(n,i){var r=i.type;if(!r){var a=o(n).main;e.hasSubTypes(n)&&t[a]&&(r=t[a](i))}return r},e}function u(e,t){function n(e){var n={},a=[];return i.each(e,(function(s){var l=r(n,s),u=l.originalDeps=t(s),c=o(u,e);l.entryCount=c.length,0===l.entryCount&&a.push(s),i.each(c,(function(e){i.indexOf(l.predecessor,e)<0&&l.predecessor.push(e);var t=r(n,e);i.indexOf(t.successor,e)<0&&t.successor.push(s)}))})),{graph:n,noEntryList:a}}function r(e,t){return e[t]||(e[t]={predecessor:[],successor:[]}),e[t]}function o(e,t){var n=[];return i.each(e,(function(e){i.indexOf(t,e)>=0&&n.push(e)})),n}e.topologicalTravel=function(e,t,r,o){if(e.length){var a=n(t),s=a.graph,l=a.noEntryList,u={};i.each(e,(function(e){u[e]=!0}));while(l.length){var c=l.pop(),h=s[c],d=!!u[c];d&&(r.call(o,c,h.originalDeps.slice()),delete u[c]),i.each(h.successor,d?p:f)}i.each(u,(function(){throw new Error("Circle dependency may exists")}))}function f(e){s[e].entryCount--,0===s[e].entryCount&&l.push(e)}function p(e){u[e]=!0,f(e)}}}t.getUID=s,t.enableSubTypeDefaulter=l,t.enableTopologicalTravel=u},a7ef:function(e,t,n){var i=n("d285"),r=(i.__DEV__,n("357b")),o=r.each,a=r.createHashMap,s=n("3478"),l=n("3c3a"),u=n("1551"),c=n("53de"),h={geoJSON:l,svg:u},d={load:function(e,t,n){var i,r=[],s=a(),l=a(),u=p(e);return o(u,(function(a){var u=h[a.type].load(e,a,n);o(u.regions,(function(e){var n=e.name;t&&t.hasOwnProperty(n)&&(e=e.cloneShallow(n=t[n])),r.push(e),s.set(n,e),l.set(n,e.center)}));var c=u.boundingRect;c&&(i?i.union(c):i=c.clone())})),{regions:r,regionsMap:s,nameCoordMap:l,boundingRect:i||new c(0,0,0,0)}},makeGraphic:f("makeGraphic"),removeGraphic:f("removeGraphic")};function f(e){return function(t,n){var i=p(t),r=[];return o(i,(function(i){var o=h[i.type][e];o&&r.push(o(t,i,n))})),r}}function p(e){var t=s.retrieveMap(e)||[];return t}e.exports=d},a817:function(e,t,n){"use strict";var i=n("5609"),r=Object.prototype.toString;function o(e){return"[object Array]"===r.call(e)}function a(e){return"undefined"===typeof e}function s(e){return null!==e&&!a(e)&&null!==e.constructor&&!a(e.constructor)&&"function"===typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function l(e){return"[object ArrayBuffer]"===r.call(e)}function u(e){return"undefined"!==typeof FormData&&e instanceof FormData}function c(e){var t;return t="undefined"!==typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&e.buffer instanceof ArrayBuffer,t}function h(e){return"string"===typeof e}function d(e){return"number"===typeof e}function f(e){return null!==e&&"object"===typeof e}function p(e){return"[object Date]"===r.call(e)}function g(e){return"[object File]"===r.call(e)}function m(e){return"[object Blob]"===r.call(e)}function v(e){return"[object Function]"===r.call(e)}function y(e){return f(e)&&v(e.pipe)}function b(e){return"undefined"!==typeof URLSearchParams&&e instanceof URLSearchParams}function w(e){return e.replace(/^\s*/,"").replace(/\s*$/,"")}function x(){return("undefined"===typeof navigator||"ReactNative"!==navigator.product&&"NativeScript"!==navigator.product&&"NS"!==navigator.product)&&("undefined"!==typeof window&&"undefined"!==typeof document)}function _(e,t){if(null!==e&&"undefined"!==typeof e)if("object"!==typeof e&&(e=[e]),o(e))for(var n=0,i=e.length;nthis.key.maxMessageLength)throw new Error("Message too long for RSA (n="+this.key.encryptedDataLength+", l="+e.length+")");if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==o.RSA_NO_PADDING)return i=t.alloc(this.key.maxMessageLength-e.length),i.fill(0),t.concat([i,e]);if(1===n.type)return i=t.alloc(this.key.encryptedDataLength-e.length-1),i.fill(255,0,i.length-1),i[0]=1,i[i.length-1]=0,t.concat([i,e]);i=t.alloc(this.key.encryptedDataLength-e.length),i[0]=0,i[1]=2;for(var a=r.randomBytes(i.length-3),s=0;s=e.length)return null}else{if(0!==e[0]||2!==e[1])return null;i=3;while(0!==e[i])if(++i>=e.length)return null}return e.slice(i+1,e.length)},u.prototype.sign=function(e){var t=this.options.signingSchemeOptions.hash||l;if("browser"===this.options.environment){t=s[t]||t;var n=r.createHash(t);n.update(e);var o=this.pkcs1pad(n.digest(),t),a=this.key.$doPrivate(new i(o)).toBuffer(this.key.encryptedDataLength);return a}var u=r.createSign("RSA-"+t.toUpperCase());return u.update(e),u.sign(this.options.rsaUtils.exportKey("private"))},u.prototype.verify=function(e,n,a){if(this.options.encryptionSchemeOptions&&this.options.encryptionSchemeOptions.padding==o.RSA_NO_PADDING)return!1;var u=this.options.signingSchemeOptions.hash||l;if("browser"===this.options.environment){u=s[u]||u,a&&(n=t.from(n,a));var c=r.createHash(u);c.update(e);var h=this.pkcs1pad(c.digest(),u),d=this.key.$doPublic(new i(n));return d.toBuffer().toString("hex")==h.toString("hex")}var f=r.createVerify("RSA-"+u.toUpperCase());return f.update(e),f.verify(this.options.rsaUtils.exportKey("public"),n,a)},u.prototype.pkcs0pad=function(e){var n=t.alloc(this.key.maxMessageLength-e.length);return n.fill(0),t.concat([n,e])},u.prototype.pkcs0unpad=function(e){var t;return t="function"==typeof e.lastIndexOf?e.slice(e.lastIndexOf("\0")+1,e.length):e.slice(String.prototype.lastIndexOf.call(e,"\0")+1,e.length),t},u.prototype.pkcs1pad=function(e,n){var i=a[n];if(!i)throw Error("Unsupported hash algorithm");var r=t.concat([i,e]);if(r.length+10>this.key.encryptedDataLength)throw Error("Key is too short for signing algorithm ("+n+")");var o=t.alloc(this.key.encryptedDataLength-r.length-1);o.fill(255,0,o.length-1),o[0]=1,o[o.length-1]=0;var s=t.concat([o,r]);return s},new u(e,n)}}).call(this,n("e6c7").Buffer)},a8db:function(e,t,n){var i=n("a1ff"),r=n("ecba"),o=n("0227"),a=n("43ea"),s=n("70bf"),l=n("a921"),u=n("9e893"),c=n("364b"),h=n("1ad4"),d=n("ef67"),f=n("b8dc"),p=n("13c6"),g=n("5ed9"),m=n("8ff8"),v=m.createFromString,y=n("357b"),b=y.isString,w=y.extend,x=y.defaults,_=y.trim,M=y.each,I=/[\s,]+/;function C(e){if(b(e)){var t=new DOMParser;e=t.parseFromString(e,"text/xml")}9===e.nodeType&&(e=e.firstChild);while("svg"!==e.nodeName.toLowerCase()||1!==e.nodeType)e=e.nextSibling;return e}function S(){this._defs={},this._root=null,this._isDefine=!1,this._isText=!1}S.prototype.parse=function(e,t){t=t||{};var n=C(e);if(!n)throw new Error("Illegal svg");var r=new i;this._root=r;var o=n.getAttribute("viewBox")||"",a=parseFloat(n.getAttribute("width")||t.width),l=parseFloat(n.getAttribute("height")||t.height);isNaN(a)&&(a=null),isNaN(l)&&(l=null),O(n,r,null,!0);var u,c,h=n.firstChild;while(h)this._parseNode(h,r),h=h.nextSibling;if(o){var d=_(o).split(I);d.length>=4&&(u={x:parseFloat(d[0]||0),y:parseFloat(d[1]||0),width:parseFloat(d[2]),height:parseFloat(d[3])})}if(u&&null!=a&&null!=l&&(c=F(u,a,l),!t.ignoreViewBox)){var f=r;r=new i,r.add(f),f.scale=c.scale.slice(),f.position=c.position.slice()}return t.ignoreRootClip||null==a||null==l||r.setClipPath(new s({shape:{x:0,y:0,width:a,height:l}})),{root:r,width:a,height:l,viewBoxRect:u,viewBoxTransform:c}},S.prototype._parseNode=function(e,t){var n,i=e.nodeName.toLowerCase();if("defs"===i?this._isDefine=!0:"text"===i&&(this._isText=!0),this._isDefine){var r=T[i];if(r){var o=r.call(this,e),a=e.getAttribute("id");a&&(this._defs[a]=o)}}else{r=D[i];r&&(n=r.call(this,e,t),t.add(n))}var s=e.firstChild;while(s)1===s.nodeType&&this._parseNode(s,n),3===s.nodeType&&this._isText&&this._parseText(s,n),s=s.nextSibling;"defs"===i?this._isDefine=!1:"text"===i&&(this._isText=!1)},S.prototype._parseText=function(e,t){if(1===e.nodeType){var n=e.getAttribute("dx")||0,i=e.getAttribute("dy")||0;this._textX+=parseFloat(n),this._textY+=parseFloat(i)}var r=new o({style:{text:e.textContent,transformText:!0},position:[this._textX||0,this._textY||0]});k(t,r),O(e,r,this._defs);var a=r.style.fontSize;a&&a<9&&(r.style.fontSize=9,r.scale=r.scale||[1,1],r.scale[0]*=a/9,r.scale[1]*=a/9);var s=r.getBoundingRect();return this._textX+=s.width,t.add(r),r};var D={g:function(e,t){var n=new i;return k(t,n),O(e,n,this._defs),n},rect:function(e,t){var n=new s;return k(t,n),O(e,n,this._defs),n.setShape({x:parseFloat(e.getAttribute("x")||0),y:parseFloat(e.getAttribute("y")||0),width:parseFloat(e.getAttribute("width")||0),height:parseFloat(e.getAttribute("height")||0)}),n},circle:function(e,t){var n=new a;return k(t,n),O(e,n,this._defs),n.setShape({cx:parseFloat(e.getAttribute("cx")||0),cy:parseFloat(e.getAttribute("cy")||0),r:parseFloat(e.getAttribute("r")||0)}),n},line:function(e,t){var n=new u;return k(t,n),O(e,n,this._defs),n.setShape({x1:parseFloat(e.getAttribute("x1")||0),y1:parseFloat(e.getAttribute("y1")||0),x2:parseFloat(e.getAttribute("x2")||0),y2:parseFloat(e.getAttribute("y2")||0)}),n},ellipse:function(e,t){var n=new l;return k(t,n),O(e,n,this._defs),n.setShape({cx:parseFloat(e.getAttribute("cx")||0),cy:parseFloat(e.getAttribute("cy")||0),rx:parseFloat(e.getAttribute("rx")||0),ry:parseFloat(e.getAttribute("ry")||0)}),n},polygon:function(e,t){var n=e.getAttribute("points");n&&(n=E(n));var i=new h({shape:{points:n||[]}});return k(t,i),O(e,i,this._defs),i},polyline:function(e,t){var n=new c;k(t,n),O(e,n,this._defs);var i=e.getAttribute("points");i&&(i=E(i));var r=new d({shape:{points:i||[]}});return r},image:function(e,t){var n=new r;return k(t,n),O(e,n,this._defs),n.setStyle({image:e.getAttribute("xlink:href"),x:e.getAttribute("x"),y:e.getAttribute("y"),width:e.getAttribute("width"),height:e.getAttribute("height")}),n},text:function(e,t){var n=e.getAttribute("x")||0,r=e.getAttribute("y")||0,o=e.getAttribute("dx")||0,a=e.getAttribute("dy")||0;this._textX=parseFloat(n)+parseFloat(o),this._textY=parseFloat(r)+parseFloat(a);var s=new i;return k(t,s),O(e,s,this._defs),s},tspan:function(e,t){var n=e.getAttribute("x"),r=e.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=r&&(this._textY=parseFloat(r));var o=e.getAttribute("dx")||0,a=e.getAttribute("dy")||0,s=new i;return k(t,s),O(e,s,this._defs),this._textX+=o,this._textY+=a,s},path:function(e,t){var n=e.getAttribute("d")||"",i=v(n);return k(t,i),O(e,i,this._defs),i}},T={lineargradient:function(e){var t=parseInt(e.getAttribute("x1")||0,10),n=parseInt(e.getAttribute("y1")||0,10),i=parseInt(e.getAttribute("x2")||10,10),r=parseInt(e.getAttribute("y2")||0,10),o=new f(t,n,i,r);return A(e,o),o},radialgradient:function(e){}};function A(e,t){var n=e.firstChild;while(n){if(1===n.nodeType){var i=n.getAttribute("offset");i=i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var r=n.getAttribute("stop-color")||"#000000";t.addColorStop(i,r)}n=n.nextSibling}}function k(e,t){e&&e.__inheritedStyle&&(t.__inheritedStyle||(t.__inheritedStyle={}),x(t.__inheritedStyle,e.__inheritedStyle))}function E(e){for(var t=_(e).split(I),n=[],i=0;i0;o-=2){var a=r[o],s=r[o-1];switch(i=i||g.create(),s){case"translate":a=_(a).split(I),g.translate(i,i,[parseFloat(a[0]),parseFloat(a[1]||0)]);break;case"scale":a=_(a).split(I),g.scale(i,i,[parseFloat(a[0]),parseFloat(a[1]||a[0])]);break;case"rotate":a=_(a).split(I),g.rotate(i,i,parseFloat(a[0]));break;case"skew":a=_(a).split(I),console.warn("Skew transform is not supported yet");break;case"matrix":a=_(a).split(I);i[0]=parseFloat(a[0]),i[1]=parseFloat(a[1]),i[2]=parseFloat(a[2]),i[3]=parseFloat(a[3]),i[4]=parseFloat(a[4]),i[5]=parseFloat(a[5]);break}}t.setLocalTransform(i)}}var z=/([^\s:;]+)\s*:\s*([^:;]+)/g;function R(e){var t=e.getAttribute("style"),n={};if(!t)return n;var i,r={};z.lastIndex=0;while(null!=(i=z.exec(t)))r[i[1]]=i[2];for(var o in N)N.hasOwnProperty(o)&&null!=r[o]&&(n[N[o]]=r[o]);return n}function F(e,t,n){var i=t/e.width,r=n/e.height,o=Math.min(i,r),a=[o,o],s=[-(e.x+e.width/2)*o+t/2,-(e.y+e.height/2)*o+n/2];return{scale:a,position:s}}function V(e,t){var n=new S;return n.parse(e,t)}t.parseXML=C,t.makeViewBoxTransform=F,t.parseSVG=V},a8ec:function(e,t,n){"use strict";var i=n("9054"),r=n("49d0"),o=n("791c"),a=n("838a"),s=n("224d"),l=o.assert,u=n("0187"),c=n("fd1d");function h(e){if(!(this instanceof h))return new h(e);"string"===typeof e&&(l(Object.prototype.hasOwnProperty.call(a,e),"Unknown curve "+e),e=a[e]),e instanceof a.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=h,h.prototype.keyPair=function(e){return new u(this,e)},h.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},h.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},h.prototype.genKeyPair=function(e){e||(e={});for(var t=new r({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||s(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),n=this.n.byteLength(),o=this.n.sub(new i(2));;){var a=new i(t.generate(n));if(!(a.cmp(o)>0))return a.iaddn(1),this.keyFromPrivate(a)}},h.prototype._truncateToN=function(e,t){var n=8*e.byteLength()-this.n.bitLength();return n>0&&(e=e.ushrn(n)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},h.prototype.sign=function(e,t,n,o){"object"===typeof n&&(o=n,n=null),o||(o={}),t=this.keyFromPrivate(t,n),e=this._truncateToN(new i(e,16));for(var a=this.n.byteLength(),s=t.getPrivate().toArray("be",a),l=e.toArray("be",a),u=new r({hash:this.hash,entropy:s,nonce:l,pers:o.pers,persEnc:o.persEnc||"utf8"}),h=this.n.sub(new i(1)),d=0;;d++){var f=o.k?o.k(d):new i(u.generate(this.n.byteLength()));if(f=this._truncateToN(f,!0),!(f.cmpn(1)<=0||f.cmp(h)>=0)){var p=this.g.mul(f);if(!p.isInfinity()){var g=p.getX(),m=g.umod(this.n);if(0!==m.cmpn(0)){var v=f.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e));if(v=v.umod(this.n),0!==v.cmpn(0)){var y=(p.getY().isOdd()?1:0)|(0!==g.cmp(m)?2:0);return o.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),y^=1),new c({r:m,s:v,recoveryParam:y})}}}}}},h.prototype.verify=function(e,t,n,r){e=this._truncateToN(new i(e,16)),n=this.keyFromPublic(n,r),t=new c(t,"hex");var o=t.r,a=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,l=a.invm(this.n),u=l.mul(e).umod(this.n),h=l.mul(o).umod(this.n);return this.curve._maxwellTrick?(s=this.g.jmulAdd(u,n.getPublic(),h),!s.isInfinity()&&s.eqXToP(o)):(s=this.g.mulAdd(u,n.getPublic(),h),!s.isInfinity()&&0===s.getX().umod(this.n).cmp(o))},h.prototype.recoverPubKey=function(e,t,n,r){l((3&n)===n,"The recovery param is more than two bits"),t=new c(t,r);var o=this.n,a=new i(e),s=t.r,u=t.s,h=1&n,d=n>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");s=d?this.curve.pointFromX(s.add(this.curve.n),h):this.curve.pointFromX(s,h);var f=t.r.invm(o),p=o.sub(a).mul(f).umod(o),g=u.mul(f).umod(o);return this.g.mulAdd(p,s,g)},h.prototype.getKeyRecoveryParam=function(e,t,n,i){if(t=new c(t,i),null!==t.recoveryParam)return t.recoveryParam;for(var r=0;r<4;r++){var o;try{o=this.recoverPubKey(e,t,r)}catch(e){continue}if(o.eq(n))return r}throw new Error("Unable to find valid recovery factor")}},a8fa:function(e,t,n){var i=n("2fcc"),r=n("85ff"),o="sunburstRootToNode";i.registerAction({type:o,update:"updateView"},(function(e,t){function n(t,n){var i=r.retrieveTargetInfo(e,[o],t);if(i){var a=t.getViewRoot();a&&(e.direction=r.aboveViewRoot(a,i.node)?"rollUp":"drillDown"),t.resetViewRoot(i.node)}}t.eachComponent({mainType:"series",subType:"sunburst",query:e},n)}));var a="sunburstHighlight";i.registerAction({type:a,update:"updateView"},(function(e,t){function n(t,n){var i=r.retrieveTargetInfo(e,[a],t);i&&(e.highlight=i.node)}t.eachComponent({mainType:"series",subType:"sunburst",query:e},n)}));var s="sunburstUnhighlight";i.registerAction({type:s,update:"updateView"},(function(e,t){function n(t,n){e.unhighlight=!0}t.eachComponent({mainType:"series",subType:"sunburst",query:e},n)}))},a921:function(e,t,n){var i=n("364b"),r=i.extend({type:"ellipse",shape:{cx:0,cy:0,rx:0,ry:0},buildPath:function(e,t){var n=.5522848,i=t.cx,r=t.cy,o=t.rx,a=t.ry,s=o*n,l=a*n;e.moveTo(i-o,r),e.bezierCurveTo(i-o,r-l,i-s,r-a,i,r-a),e.bezierCurveTo(i+s,r-a,i+o,r-l,i+o,r),e.bezierCurveTo(i+o,r+l,i+s,r+a,i,r+a),e.bezierCurveTo(i-s,r+a,i-o,r+l,i-o,r),e.closePath()}});e.exports=r},a93e:function(e,t,n){var i=n("2fcc");n("b595"),n("69b4"),n("4cbd");var r=n("3bd9"),o=n("1a3a");i.registerLayout(r),i.registerVisual(o)},a94d:function(e,t,n){var i=n("2fcc");n("bf73"),n("1511"),n("7b4b");var r=n("cd9c");i.registerVisual(r)},a9ab:function(e,t,n){"use strict";var i=n("7fdc"),r=n("4784"),o=n("610c"),a=n("be16").Buffer,s=n("9f0f"),l=n("a023"),u=n("22c6"),c=a.alloc(128);function h(e,t){o.call(this,"digest"),"string"===typeof t&&(t=a.from(t));var n="sha512"===e||"sha384"===e?128:64;if(this._alg=e,this._key=t,t.length>n){var i="rmd160"===e?new l:u(e);t=i.update(t).digest()}else t.length=1)&&(e=1),e}s===u&&l===d||(t="reset"),(this._dirty||"reset"===t)&&(this._dirty=!1,a=h(this,i)),this._modBy=u,this._modDataCount=d;var p=e&&e.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var g=this._dueIndex,m=Math.min(null!=p?this._dueIndex+p:1/0,this._dueEnd);if(!i&&(a||g1&&i>0?s:a}};return o;function a(){return t=e?null:o0,C=y.height-(I?-1:1),S=(p-f)/(C||1),D=e.get("clockwise"),T=e.get("stillShowZeroSum"),A=D?1:-1,k=function(e,t){if(e){var n=t;if(e!==v){var i=e.getValue(),a=0===_&&T?M:i*M;a0;i--)t+=this._buffer(e,t),n+=this._flushBuffer(r,n);return t+=this._buffer(e,t),r},r.prototype.final=function(e){var t,n;return e&&(t=this.update(e)),n="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(n):n},r.prototype._pad=function(e,t){if(0===t)return!1;while(t=t:"max"===n?e<=t:e===t}function g(e,t){return e.join(",")===t.join(",")}function m(e,t){t=t||{},a(t,(function(t,n){if(null!=t){var i=e[n];if(o.hasClass(n)){t=r.normalizeToArray(t),i=r.normalizeToArray(i);var a=r.mappingToExists(i,t);e[n]=l(a,(function(e){return e.option&&e.exist?u(e.exist,e.option,!0):e.exist||e.option}))}else e[n]=u(i,t,!0)}}))}h.prototype={constructor:h,setOption:function(e,t){e&&i.each(r.normalizeToArray(e.series),(function(e){e&&e.data&&i.isTypedArray(e.data)&&i.setAsPrimitive(e.data)})),e=s(e);var n=this._optionBackup,o=d.call(this,e,t,!n);this._newBaseOption=o.baseOption,n?(m(n.baseOption,o.baseOption),o.timelineOptions.length&&(n.timelineOptions=o.timelineOptions),o.mediaList.length&&(n.mediaList=o.mediaList),o.mediaDefault&&(n.mediaDefault=o.mediaDefault)):this._optionBackup=o},mountOption:function(e){var t=this._optionBackup;return this._timelineOptions=l(t.timelineOptions,s),this._mediaList=l(t.mediaList,s),this._mediaDefault=s(t.mediaDefault),this._currentMediaIndices=[],s(e?t.baseOption:this._newBaseOption)},getTimelineOption:function(e){var t,n=this._timelineOptions;if(n.length){var i=e.getComponent("timeline");i&&(t=s(n[i.getCurrentIndex()],!0))}return t},getMediaOption:function(e){var t=this._api.getWidth(),n=this._api.getHeight(),i=this._mediaList,r=this._mediaDefault,o=[],a=[];if(!i.length&&!r)return a;for(var u=0,c=i.length;u0&&(a=null===a?l:Math.min(a,l))}n[r]=a}}return n}function v(e){var t=m(e),n=[];return i.each(e,(function(e){var i,r=e.coordinateSystem,a=r.getBaseAxis(),s=a.getExtent();if("category"===a.type)i=a.getBandWidth();else if("value"===a.type||"time"===a.type){var l=a.dim+"_"+a.index,u=t[l],c=Math.abs(s[1]-s[0]),h=a.scale.getExtent(),p=Math.abs(h[1]-h[0]);i=u?c/p*u:c}else{var g=e.getData();i=Math.abs(s[1]-s[0])/g.count()}var m=o(e.get("barWidth"),i),v=o(e.get("barMaxWidth"),i),y=o(e.get("barMinWidth")||1,i),b=e.get("barGap"),w=e.get("barCategoryGap");n.push({bandWidth:i,barWidth:m,barMaxWidth:v,barMinWidth:y,barGap:b,barCategoryGap:w,axisKey:f(a),stackId:d(e)})})),y(n)}function y(e){var t={};i.each(e,(function(e,n){var i=e.axisKey,r=e.bandWidth,o=t[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},a=o.stacks;t[i]=o;var s=e.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=e.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=e.barMaxWidth;u&&(a[s].maxWidth=u);var c=e.barMinWidth;c&&(a[s].minWidth=c);var h=e.barGap;null!=h&&(o.gap=h);var d=e.barCategoryGap;null!=d&&(o.categoryGap=d)}));var n={};return i.each(t,(function(e,t){n[t]={};var r=e.stacks,a=e.bandWidth,s=o(e.categoryGap,a),l=o(e.gap,1),u=e.remainedWidth,c=e.autoWidthCount,h=(u-s)/(c+(c-1)*l);h=Math.max(h,0),i.each(r,(function(e){var t=e.maxWidth,n=e.minWidth;if(e.width){i=e.width;t&&(i=Math.min(i,t)),n&&(i=Math.max(i,n)),e.width=i,u-=i+l*i,c--}else{var i=h;t&&ti&&(i=n),i!==h&&(e.width=i,u-=i+l*i,c--)}})),h=(u-s)/(c+(c-1)*l),h=Math.max(h,0);var d,f=0;i.each(r,(function(e,t){e.width||(e.width=h),d=e,f+=e.width*(1+l)})),d&&(f-=d.width*l);var p=-f/2;i.each(r,(function(e,i){n[t][i]=n[t][i]||{bandWidth:a,offset:p,width:e.width},p+=e.width*(1+l)}))})),n}function b(e,t,n){if(e&&t){var i=e[f(t)];return null!=i&&null!=n&&(i=i[d(n)]),i}}function w(e,t){var n=g(e,t),r=v(n),o={},a={};i.each(n,(function(e){var t=e.getData(),n=e.coordinateSystem,i=n.getBaseAxis(),l=d(e),u=r[f(i)][l],c=u.offset,h=u.width,p=n.getOtherAxis(i),g=e.get("barMinHeight")||0;o[l]=o[l]||[],a[l]=a[l]||[],t.setLayout({bandWidth:u.bandWidth,offset:c,size:h});for(var m=t.mapDimension(p.dim),v=t.mapDimension(i.dim),y=s(t,m),b=p.isHorizontal(),w=I(i,p,y),x=0,_=t.count();x<_;x++){var M,C,S,D,T=t.get(m,x),A=t.get(v,x),k=T>=0?"p":"n",E=w;if(y&&(o[l][A]||(o[l][A]={p:w,n:w}),E=o[l][A][k]),b){var N=n.dataToPoint([T,A]);M=E,C=N[1]+c,S=N[0]-w,D=h,Math.abs(S)c||(d=c),{progress:f}}function f(e,t){var c,f=e.count,p=new h(2*f),g=new h(2*f),m=new h(f),v=[],y=[],b=0,w=0;while(null!=(c=e.next()))y[u]=t.get(a,c),y[1-u]=t.get(s,c),v=n.dataToPoint(y,null,v),g[b]=l?i.x+i.width:v[0],p[b++]=v[0],g[b]=l?v[1]:i.y+i.height,p[b++]=v[1],m[w++]=c;t.setLayout({largePoints:p,largeDataIndices:m,largeBackgroundPoints:g,barWidth:d,valueAxisStart:I(r,o,!1),backgroundStart:l?i.x:i.y,valueAxisHorizontal:l})}}};function _(e){return e.coordinateSystem&&"cartesian2d"===e.coordinateSystem.type}function M(e){return e.pipelineContext&&e.pipelineContext.large}function I(e,t,n){return t.toGlobalCoord(t.dataToCoord("log"===t.type?1:0))}t.getLayoutOnAxis=p,t.prepareLayoutBarSeries=g,t.makeColumnLayout=v,t.retrieveColumnLayout=b,t.layout=w,t.largeLayout=x},ac59:function(e,t){e.exports=function(e,t){var n=e.length,i=-1;while(++ia)l+=360*u;return[s,l]},coordToPoint:function(e){var t=e[0],n=e[1]/180*Math.PI,i=Math.cos(n)*t+this.cx,r=-Math.sin(n)*t+this.cy;return[i,r]},getArea:function(){var e=this.getAngleAxis(),t=this.getRadiusAxis(),n=t.getExtent().slice();n[0]>n[1]&&n.reverse();var i=e.getExtent(),r=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:n[0],r:n[1],startAngle:-i[0]*r,endAngle:-i[1]*r,clockwise:e.inverse,contain:function(e,t){var n=e-this.cx,i=t-this.cy,r=n*n+i*i,o=this.r,a=this.r0;return r<=o*o&&r>=a*a}}}};var a=o;e.exports=a},ac7e:function(e,t,n){var i=n("4ec2");e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==i(e)?e.split(""):Object(e)}},ac92:function(e,t,n){var i=n("e66d"),r=n("d82e"),o=r.applyTransform,a=i.CMD,s=[[],[],[]],l=Math.sqrt,u=Math.atan2;function c(e,t){var n,i,r,c,h,d=e.data,f=a.M,p=a.C,g=a.L,m=a.R,v=a.A,y=a.Q;for(r=0,c=0;r0){if(n>=4)return e.readUIntBE(t,n);for(var i=0,r=t+n,o=0;r>t;r--,o+=2)i+=e[r-1]*Math.pow(16,o);return i}return NaN},e.exports._={isObject:function(e){var t=typeof e;return!!e&&("object"==t||"function"==t)},isString:function(e){return"string"==typeof e||e instanceof String},isNumber:function(e){return"number"==typeof e||!isNaN(parseFloat(e))&&isFinite(e)},omit:function(e,t){var n={};for(var i in e)e.hasOwnProperty(i)&&i!==t&&(n[i]=e[i]);return n}},e.exports.trimSurroundingText=function(e,t,n){var i=0,r=e.length,o=e.indexOf(t);o>=0&&(i=o+t.length);var a=e.indexOf(n,o);return a>=0&&(r=a),e.substring(i,r)}}).call(this,n("c32c"))},ad93:function(e,t){e.exports={EOC:0,Boolean:1,Integer:2,BitString:3,OctetString:4,Null:5,OID:6,ObjectDescriptor:7,External:8,Real:9,Enumeration:10,PDV:11,Utf8String:12,RelativeOID:13,Sequence:16,Set:17,NumericString:18,PrintableString:19,T61String:20,VideotexString:21,IA5String:22,UTCTime:23,GeneralizedTime:24,GraphicString:25,VisibleString:26,GeneralString:28,UniversalString:29,CharacterString:30,BMPString:31,Constructor:32,Context:128}},ad9f:function(e,t,n){var i=n("a2d7"),r=i.createElement,o=n("e66d"),a=n("53de"),s=n("5ed9"),l=n("0a8d"),u=n("a153"),c=n("0227"),h=o.CMD,d=Array.prototype.join,f="none",p=Math.round,g=Math.sin,m=Math.cos,v=Math.PI,y=2*Math.PI,b=180/v,w=1e-4;function x(e){return p(1e4*e)/1e4}function _(e){return e-w}function M(e,t){var n=t?e.textFill:e.fill;return null!=n&&n!==f}function I(e,t){var n=t?e.textStroke:e.stroke;return null!=n&&n!==f}function C(e,t){t&&S(e,"transform","matrix("+d.call(t,",")+")")}function S(e,t,n){(!n||"linear"!==n.type&&"radial"!==n.type)&&e.setAttribute(t,n)}function D(e,t,n){e.setAttributeNS("http://www.w3.org/1999/xlink",t,n)}function T(e,t,n,i){if(M(t,n)){var r=n?t.textFill:t.fill;r="transparent"===r?f:r,S(e,"fill",r),S(e,"fill-opacity",null!=t.fillOpacity?t.fillOpacity*t.opacity:t.opacity)}else S(e,"fill",f);if(I(t,n)){var o=n?t.textStroke:t.stroke;o="transparent"===o?f:o,S(e,"stroke",o);var a=n?t.textStrokeWidth:t.lineWidth,s=!n&&t.strokeNoScale?i.getLineScale():1;S(e,"stroke-width",a/s),S(e,"paint-order",n?"stroke":"fill"),S(e,"stroke-opacity",null!=t.strokeOpacity?t.strokeOpacity:t.opacity);var l=t.lineDash;l?(S(e,"stroke-dasharray",t.lineDash.join(",")),S(e,"stroke-dashoffset",p(t.lineDashOffset||0))):S(e,"stroke-dasharray",""),t.lineCap&&S(e,"stroke-linecap",t.lineCap),t.lineJoin&&S(e,"stroke-linejoin",t.lineJoin),t.miterLimit&&S(e,"stroke-miterlimit",t.miterLimit)}else S(e,"stroke",f)}function A(e){for(var t=[],n=e.data,i=e.len(),r=0;r=y:-w>=y),D=w>0?w%y:w%y+y,T=!1;T=!!S||!_(C)&&D>=v===!!I;var A=x(l+c*m(f)),k=x(u+d*g(f));S&&(w=I?y-1e-4:1e-4-y,T=!0,9===r&&t.push("M",A,k));var E=x(l+c*m(f+w)),N=x(u+d*g(f+w));t.push("A",x(c),x(d),p(M*b),+T,+I,E,N);break;case h.Z:a="Z";break;case h.R:E=x(n[r++]),N=x(n[r++]);var O=x(n[r++]),P=x(n[r++]);t.push("M",E,N,"L",E+O,N,"L",E+O,N+P,"L",E,N+P,"L",E,N);break}a&&t.push(a);for(var L=0;LN){for(;k=0;--i)if(t[i]===e)return!0;return!1}),n):null:n[0]},g.prototype.update=function(e,t){if(e){var n=this.getDefs(!1);if(e[this._domName]&&n.contains(e[this._domName]))"function"===typeof t&&t(e);else{var i=this.add(e);i&&(e[this._domName]=i)}}},g.prototype.addDom=function(e){var t=this.getDefs(!0);t.appendChild(e)},g.prototype.removeDom=function(e){var t=this.getDefs(!1);t&&e[this._domName]&&(t.removeChild(e[this._domName]),e[this._domName]=null)},g.prototype.getDoms=function(){var e=this.getDefs(!1);if(!e)return[];var t=[];return o.each(this._tagNames,(function(n){var i=e.getElementsByTagName(n);t=t.concat([].slice.call(i))})),t},g.prototype.markAllUnused=function(){var e=this.getDoms(),t=this;o.each(e,(function(e){e[t._markLabel]=f}))},g.prototype.markUsed=function(e){e&&(e[this._markLabel]=p)},g.prototype.removeUnused=function(){var e=this.getDefs(!1);if(e){var t=this.getDoms(),n=this;o.each(t,(function(t){t[n._markLabel]!==p&&e.removeChild(t)}))}},g.prototype.getSvgProxy=function(e){return e instanceof a?c:e instanceof s?h:e instanceof l?d:c},g.prototype.getTextSvgElement=function(e){return e.__textSvgEl},g.prototype.getSvgElement=function(e){return e.__svgEl};var m=g;e.exports=m},aedd:function(e){e.exports=JSON.parse('{"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}')},aef1:function(e,t,n){var i=n("0d6d"),r=n("be16").Buffer,o=n("610c"),a=n("7fdc"),s=n("b4bd"),l=n("3617"),u=n("83d1");function c(e,t){var n=0;e.length!==t.length&&n++;for(var i=Math.min(e.length,t.length),r=0;r')}}catch(h){i=function(e){return l.createElement("<"+e+' xmlns="'+o+'" class="zrvml">')}}function c(){if(!s&&l){s=!0;var e=l.styleSheets;e.length<31?l.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):e[0].addRule(".zrvml","behavior:url(#default#VML)")}}t.doc=l,t.createNode=u,t.initVML=c},b0ff:function(e,t,n){"use strict";var i=n("e78a");e.exports=function(e,t,n){var r=n.config.validateStatus;!r||r(n.status)?e(n):t(i("Request failed with status code "+n.status,n.config,null,n.request,n))}},b113:function(e,t,n){var i=n("0e58");i.registerSubTypeDefaulter("dataZoom",(function(){return"slider"}))},b1bd:function(e,t,n){var i=n("e66d"),r=n("d4e0"),o=n("f969"),a=n("9c2c"),s=n("6df0"),l=n("84be"),u=l.normalizeRadian,c=n("5321"),h=n("8506"),d=i.CMD,f=2*Math.PI,p=1e-4;function g(e,t){return Math.abs(e-t)t&&u>i&&u>o&&u>s||u1&&y(),d=c.cubicAt(t,i,o,s,v[0]),g>1&&(f=c.cubicAt(t,i,o,s,v[1]))),2===g?wt&&s>i&&s>o||s=0&&u<=1){for(var h=0,d=c.quadraticAt(t,i,o,u),f=0;fn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);m[0]=-l,m[1]=l;var c=Math.abs(i-r);if(c<1e-4)return 0;if(c%f<1e-4){i=0,r=f;var h=o?1:-1;return a>=m[0]+e&&a<=m[1]+e?h:0}if(o){l=i;i=u(r),r=u(l)}else i=u(i),r=u(r);i>r&&(r+=f);for(var d=0,p=0;p<2;p++){var g=m[p];if(g+e>a){var v=Math.atan2(s,g);h=o?1:-1;v<0&&(v=f+v),(v>=i&&v<=r||v+f>=i&&v+f<=r)&&(v>Math.PI/2&&v<1.5*Math.PI&&(h=-h),d+=h)}}return d}function _(e,t,n,i,l){for(var u=0,c=0,f=0,p=0,m=0,v=0;v1&&(n||(u+=h(c,f,p,m,i,l))),1===v&&(c=e[v],f=e[v+1],p=c,m=f),y){case d.M:p=e[v++],m=e[v++],c=p,f=m;break;case d.L:if(n){if(r.containStroke(c,f,e[v],e[v+1],t,i,l))return!0}else u+=h(c,f,e[v],e[v+1],i,l)||0;c=e[v++],f=e[v++];break;case d.C:if(n){if(o.containStroke(c,f,e[v++],e[v++],e[v++],e[v++],e[v],e[v+1],t,i,l))return!0}else u+=b(c,f,e[v++],e[v++],e[v++],e[v++],e[v],e[v+1],i,l)||0;c=e[v++],f=e[v++];break;case d.Q:if(n){if(a.containStroke(c,f,e[v++],e[v++],e[v],e[v+1],t,i,l))return!0}else u+=w(c,f,e[v++],e[v++],e[v],e[v+1],i,l)||0;c=e[v++],f=e[v++];break;case d.A:var _=e[v++],M=e[v++],I=e[v++],C=e[v++],S=e[v++],D=e[v++];v+=1;var T=1-e[v++],A=Math.cos(S)*I+_,k=Math.sin(S)*C+M;v>1?u+=h(c,f,A,k,i,l):(p=A,m=k);var E=(i-_)*C/I+_;if(n){if(s.containStroke(_,M,C,S,S+D,T,t,E,l))return!0}else u+=x(_,M,C,S,S+D,T,E,l);c=Math.cos(S+D)*I+_,f=Math.sin(S+D)*C+M;break;case d.R:p=c=e[v++],m=f=e[v++];var N=e[v++],O=e[v++];A=p+N,k=m+O;if(n){if(r.containStroke(p,m,A,m,t,i,l)||r.containStroke(A,m,A,k,t,i,l)||r.containStroke(A,k,p,k,t,i,l)||r.containStroke(p,k,p,m,t,i,l))return!0}else u+=h(A,m,A,k,i,l),u+=h(p,k,p,m,i,l);break;case d.Z:if(n){if(r.containStroke(c,f,p,m,t,i,l))return!0}else u+=h(c,f,p,m,i,l);c=p,f=m;break}}return n||g(f,m)||(u+=h(c,f,p,m,i,l)||0),0!==u}function M(e,t,n){return _(e,0,!1,t,n)}function I(e,t,n,i){return _(e,t,!0,n,i)}t.contain=M,t.containStroke=I},b1ca:function(e,t,n){var i=n("7b30"),r=i.extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}}});e.exports=r},b2ca:function(e,t,n){var i=n("357b"),r=n("53de"),o=n("8cef");function a(e){o.call(this,e)}a.prototype={constructor:a,type:"cartesian2d",dimensions:["x","y"],getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},containPoint:function(e){var t=this.getAxis("x"),n=this.getAxis("y");return t.contain(t.toLocalCoord(e[0]))&&n.contain(n.toLocalCoord(e[1]))},containData:function(e){return this.getAxis("x").containData(e[0])&&this.getAxis("y").containData(e[1])},dataToPoint:function(e,t,n){var i=this.getAxis("x"),r=this.getAxis("y");return n=n||[],n[0]=i.toGlobalCoord(i.dataToCoord(e[0])),n[1]=r.toGlobalCoord(r.dataToCoord(e[1])),n},clampData:function(e,t){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(e[0]),s=i.parse(e[1]);return t=t||[],t[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),t[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),t},pointToData:function(e,t){var n=this.getAxis("x"),i=this.getAxis("y");return t=t||[],t[0]=n.coordToData(n.toLocalCoord(e[0])),t[1]=i.coordToData(i.toLocalCoord(e[1])),t},getOtherAxis:function(e){return this.getAxis("x"===e.dim?"y":"x")},getArea:function(){var e=this.getAxis("x").getGlobalExtent(),t=this.getAxis("y").getGlobalExtent(),n=Math.min(e[0],e[1]),i=Math.min(t[0],t[1]),o=Math.max(e[0],e[1])-n,a=Math.max(t[0],t[1])-i,s=new r(n,i,o,a);return s}},i.inherits(a,o);var s=a;e.exports=s},b32f:function(e,t,n){var i=n("2fcc");i.registerAction("legendScroll","legendscroll",(function(e,t){var n=e.scrollDataIndex;null!=n&&t.eachComponent({mainType:"legend",subType:"scroll",query:e},(function(e){e.setScrollDataIndex(n)}))}))},b3ae:function(e,t,n){e.exports=n("5272").EventEmitter},b3df:function(e,t,n){"use strict";(function(t){function n(e,n){var o=this,s=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return s||l?(n?n(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,t.nextTick(a,this,e)):t.nextTick(a,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!n&&e?o._writableState?o._writableState.errorEmitted?t.nextTick(r,o):(o._writableState.errorEmitted=!0,t.nextTick(i,o,e)):t.nextTick(i,o,e):n?(t.nextTick(r,o),n(e)):t.nextTick(r,o)})),this)}function i(e,t){a(e,t),r(e)}function r(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function o(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function a(e,t){e.emit("error",t)}function s(e,t){var n=e._readableState,i=e._writableState;n&&n.autoDestroy||i&&i.autoDestroy?e.destroy(t):e.emit("error",t)}e.exports={destroy:n,undestroy:o,errorOrDestroy:s}}).call(this,n("c32c"))},b3ff:function(e,t,n){e.exports=function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/dist/",n(n.s=87)}({0:function(e,t,n){"use strict";function i(e,t,n,i,r,o,a,s){var l,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):r&&(l=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return i}))},4:function(e,t){e.exports=n("413f")},87:function(e,t,n){"use strict";n.r(t);var i=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("label",{staticClass:"el-radio",class:[e.border&&e.radioSize?"el-radio--"+e.radioSize:"",{"is-disabled":e.isDisabled},{"is-focus":e.focus},{"is-bordered":e.border},{"is-checked":e.model===e.label}],attrs:{role:"radio","aria-checked":e.model===e.label,"aria-disabled":e.isDisabled,tabindex:e.tabIndex},on:{keydown:function(t){if(!("button"in t)&&e._k(t.keyCode,"space",32,t.key,[" ","Spacebar"]))return null;t.stopPropagation(),t.preventDefault(),e.model=e.isDisabled?e.model:e.label}}},[n("span",{staticClass:"el-radio__input",class:{"is-disabled":e.isDisabled,"is-checked":e.model===e.label}},[n("span",{staticClass:"el-radio__inner"}),n("input",{directives:[{name:"model",rawName:"v-model",value:e.model,expression:"model"}],ref:"radio",staticClass:"el-radio__original",attrs:{type:"radio","aria-hidden":"true",name:e.name,disabled:e.isDisabled,tabindex:"-1",autocomplete:"off"},domProps:{value:e.label,checked:e._q(e.model,e.label)},on:{focus:function(t){e.focus=!0},blur:function(t){e.focus=!1},change:[function(t){e.model=e.label},e.handleChange]}})]),n("span",{staticClass:"el-radio__label",on:{keydown:function(e){e.stopPropagation()}}},[e._t("default"),e.$slots.default?e._e():[e._v(e._s(e.label))]],2)])},r=[];i._withStripped=!0;var o=n(4),a=n.n(o),s={name:"ElRadio",mixins:[a.a],inject:{elForm:{default:""},elFormItem:{default:""}},componentName:"ElRadio",props:{value:{},label:{},disabled:Boolean,name:String,border:Boolean,size:String},data:function(){return{focus:!1}},computed:{isGroup:function(){var e=this.$parent;while(e){if("ElRadioGroup"===e.$options.componentName)return this._radioGroup=e,!0;e=e.$parent}return!1},model:{get:function(){return this.isGroup?this._radioGroup.value:this.value},set:function(e){this.isGroup?this.dispatch("ElRadioGroup","input",[e]):this.$emit("input",e),this.$refs.radio&&(this.$refs.radio.checked=this.model===this.label)}},_elFormItemSize:function(){return(this.elFormItem||{}).elFormItemSize},radioSize:function(){var e=this.size||this._elFormItemSize||(this.$ELEMENT||{}).size;return this.isGroup&&this._radioGroup.radioGroupSize||e},isDisabled:function(){return this.isGroup?this._radioGroup.disabled||this.disabled||(this.elForm||{}).disabled:this.disabled||(this.elForm||{}).disabled},tabIndex:function(){return this.isDisabled||this.isGroup&&this.model!==this.label?-1:0}},methods:{handleChange:function(){var e=this;this.$nextTick((function(){e.$emit("change",e.model),e.isGroup&&e.dispatch("ElRadioGroup","handleChange",e.model)}))}}},l=s,u=n(0),c=Object(u["a"])(l,i,r,!1,null,null,null);c.options.__file="packages/radio/src/radio.vue";var h=c.exports;h.install=function(e){e.component(h.name,h)};t["default"]=h}})},b404:function(e,t,n){var i,r; +/*! + * jQuery JavaScript Library v3.6.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2022-08-26T17:52Z + */(function(t,n){"use strict";"object"===typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)})("undefined"!==typeof window?window:this,(function(n,o){"use strict";var a=[],s=Object.getPrototypeOf,l=a.slice,u=a.flat?function(e){return a.flat.call(e)}:function(e){return a.concat.apply([],e)},c=a.push,h=a.indexOf,d={},f=d.toString,p=d.hasOwnProperty,g=p.toString,m=g.call(Object),v={},y=function(e){return"function"===typeof e&&"number"!==typeof e.nodeType&&"function"!==typeof e.item},b=function(e){return null!=e&&e===e.window},w=n.document,x={type:!0,src:!0,nonce:!0,noModule:!0};function _(e,t,n){n=n||w;var i,r,o=n.createElement("script");if(o.text=e,t)for(i in x)r=t[i]||t.getAttribute&&t.getAttribute(i),r&&o.setAttribute(i,r);n.head.appendChild(o).parentNode.removeChild(o)}function M(e){return null==e?e+"":"object"===typeof e||"function"===typeof e?d[f.call(e)]||"object":typeof e}var I="3.6.1",C=function(e,t){return new C.fn.init(e,t)};function S(e){var t=!!e&&"length"in e&&e.length,n=M(e);return!y(e)&&!b(e)&&("array"===n||0===t||"number"===typeof t&&t>0&&t-1 in e)}C.fn=C.prototype={jquery:I,constructor:C,length:0,toArray:function(){return l.call(this)},get:function(e){return null==e?l.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=C.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return C.each(this,e)},map:function(e){return this.pushStack(C.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(l.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(C.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|"+j+")"+j+"*"),W=new RegExp(j+"|>"),G=new RegExp(F),Z=new RegExp("^"+z+"$"),Y={ID:new RegExp("^#("+z+")"),CLASS:new RegExp("^\\.("+z+")"),TAG:new RegExp("^("+z+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+j+"*(even|odd|(([+-]|)(\\d*)n|)"+j+"*(?:([+-]|)"+j+"*(\\d+)|))"+j+"*\\)|)","i"),bool:new RegExp("^(?:"+B+")$","i"),needsContext:new RegExp("^"+j+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+j+"*((?:-\\d)?\\d*)"+j+"*\\)|)(?=[^-]|$)","i")},Q=/HTML$/i,q=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,X=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+j+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,re=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){d()},ae=we((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{O.apply(k=P.call(x.childNodes),x.childNodes),k[x.childNodes.length].nodeType}catch(De){O={apply:k.length?function(e,t){N.apply(e,P.call(t))}:function(e,t){var n=e.length,i=0;while(e[n++]=t[i++]);e.length=n-1}}}function se(e,t,i,r){var o,s,u,c,h,p,v,y=t&&t.ownerDocument,x=t?t.nodeType:9;if(i=i||[],"string"!==typeof e||!e||1!==x&&9!==x&&11!==x)return i;if(!r&&(d(t),t=t||f,g)){if(11!==x&&(h=J.exec(e)))if(o=h[1]){if(9===x){if(!(u=t.getElementById(o)))return i;if(u.id===o)return i.push(u),i}else if(y&&(u=y.getElementById(o))&&b(t,u)&&u.id===o)return i.push(u),i}else{if(h[2])return O.apply(i,t.getElementsByTagName(e)),i;if((o=h[3])&&n.getElementsByClassName&&t.getElementsByClassName)return O.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!D[e+" "]&&(!m||!m.test(e))&&(1!==x||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===x&&(W.test(e)||U.test(e))){y=ee.test(e)&&ve(t.parentNode)||t,y===t&&n.scope||((c=t.getAttribute("id"))?c=c.replace(ie,re):t.setAttribute("id",c=w)),p=a(e),s=p.length;while(s--)p[s]=(c?"#"+c:":scope")+" "+be(p[s]);v=p.join(",")}try{return O.apply(i,y.querySelectorAll(v)),i}catch(_){D(e,!0)}finally{c===w&&t.removeAttribute("id")}}}return l(e.replace(H,"$1"),t,i,r)}function le(){var e=[];function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}return t}function ue(e){return e[w]=!0,e}function ce(e){var t=f.createElement("fieldset");try{return!!e(t)}catch(De){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function he(e,t){var n=e.split("|"),r=n.length;while(r--)i.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function me(e){return ue((function(t){return t=+t,ue((function(n,i){var r,o=e([],n.length,t),a=o.length;while(a--)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))}))}))}function ve(e){return e&&"undefined"!==typeof e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Q.test(t||n&&n.nodeName||"HTML")},d=se.setDocument=function(e){var t,r,a=e?e.ownerDocument||e:x;return a!=f&&9===a.nodeType&&a.documentElement?(f=a,p=f.documentElement,g=!o(f),x!=f&&(r=f.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.scope=ce((function(e){return p.appendChild(e).appendChild(f.createElement("div")),"undefined"!==typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ce((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ce((function(e){return e.appendChild(f.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=X.test(f.getElementsByClassName),n.getById=ce((function(e){return p.appendChild(e).id=w,!f.getElementsByName||!f.getElementsByName(w).length})),n.getById?(i.filter["ID"]=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find["ID"]=function(e,t){if("undefined"!==typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter["ID"]=function(e){var t=e.replace(te,ne);return function(e){var n="undefined"!==typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find["ID"]=function(e,t){if("undefined"!==typeof t.getElementById&&g){var n,i,r,o=t.getElementById(e);if(o){if(n=o.getAttributeNode("id"),n&&n.value===e)return[o];r=t.getElementsByName(e),i=0;while(o=r[i++])if(n=o.getAttributeNode("id"),n&&n.value===e)return[o]}return[]}}),i.find["TAG"]=n.getElementsByTagName?function(e,t){return"undefined"!==typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[r++])1===n.nodeType&&i.push(n);return i}return o},i.find["CLASS"]=n.getElementsByClassName&&function(e,t){if("undefined"!==typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],m=[],(n.qsa=X.test(f.querySelectorAll))&&(ce((function(e){var t;p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+j+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+j+"*(?:value|"+B+")"),e.querySelectorAll("[id~="+w+"-]").length||m.push("~="),t=f.createElement("input"),t.setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||m.push("\\["+j+"*name"+j+"*="+j+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+w+"+*").length||m.push(".#.+[+~]"),e.querySelectorAll("\\\f"),m.push("[\\r\\n\\f]")})),ce((function(e){e.innerHTML="";var t=f.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+j+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")}))),(n.matchesSelector=X.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ce((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",F)})),m=m.length&&new RegExp(m.join("|")),v=v.length&&new RegExp(v.join("|")),t=X.test(p.compareDocumentPosition),b=t||X.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},T=t?function(e,t){if(e===t)return h=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&i||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==f||e.ownerDocument==x&&b(x,e)?-1:t==f||t.ownerDocument==x&&b(x,t)?1:c?L(c,e)-L(c,t):0:4&i?-1:1)}:function(e,t){if(e===t)return h=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!r||!o)return e==f?-1:t==f?1:r?-1:o?1:c?L(c,e)-L(c,t):0;if(r===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[i]===s[i])i++;return i?de(a[i],s[i]):a[i]==x?-1:s[i]==x?1:0},f):f},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(d(e),n.matchesSelector&&g&&!D[t+" "]&&(!v||!v.test(t))&&(!m||!m.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(De){D(t,!0)}return se(t,f,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=f&&d(e),b(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=f&&d(e);var r=i.attrHandle[t.toLowerCase()],o=r&&A.call(i.attrHandle,t.toLowerCase())?r(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},se.escape=function(e){return(e+"").replace(ie,re)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,i=[],r=0,o=0;if(h=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(T),h){while(t=e[o++])t===e[o]&&(r=i.push(o));while(r--)e.splice(i[r],1)}return c=null,e},r=se.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"===typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=r(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[i++])n+=r(t);return n},i=se.selectors={cacheLength:50,createPseudo:ue,match:Y,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Y["CHILD"].test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&G.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=I[e+" "];return t||(t=new RegExp("(^|"+j+")"+e+"("+j+"|$)"))&&I(e,(function(e){return t.test("string"===typeof e.className&&e.className||"undefined"!==typeof e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=se.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&r.indexOf(n)>-1:"$="===t?n&&r.slice(-n.length)===n:"~="===t?(" "+r.replace(V," ")+" ").indexOf(n)>-1:"|="===t&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var u,c,h,d,f,p,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(m){if(o){while(g){d=t;while(d=d[g])if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=g="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?m.firstChild:m.lastChild],a&&y){d=m,h=d[w]||(d[w]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[e]||[],f=u[0]===_&&u[1],b=f&&u[2],d=f&&m.childNodes[f];while(d=++f&&d&&d[g]||(b=f=0)||p.pop())if(1===d.nodeType&&++b&&d===t){c[e]=[_,f,b];break}}else if(y&&(d=t,h=d[w]||(d[w]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),u=c[e]||[],f=u[0]===_&&u[1],b=f),!1===b)while(d=++f&&d&&d[g]||(b=f=0)||p.pop())if((s?d.nodeName.toLowerCase()===v:1===d.nodeType)&&++b&&(y&&(h=d[w]||(d[w]={}),c=h[d.uniqueID]||(h[d.uniqueID]={}),c[e]=[_,b]),d===t))break;return b-=r,b===i||b%i===0&&b/i>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return r[w]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ue((function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=L(e,o[a]),e[i]=!(n[i]=o[a])})):function(e){return r(e,0,n)}):r}},pseudos:{not:ue((function(e){var t=[],n=[],i=s(e.replace(H,"$1"));return i[w]?ue((function(e,t,n,r){var o,a=i(e,null,r,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}})),has:ue((function(e){return function(t){return se(e,t).length>0}})),contains:ue((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||r(t)).indexOf(e)>-1}})),lang:ue((function(e){return Z.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos["empty"](e)},header:function(e){return K.test(e.nodeName)},input:function(e){return q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:me((function(){return[0]})),last:me((function(e,t){return[t-1]})),eq:me((function(e,t,n){return[n<0?n+t:n]})),even:me((function(e,t){for(var n=0;nt?t:n;--i>=0;)e.push(i);return e})),gt:me((function(e,t,n){for(var i=n<0?n+t:n;++i1?function(t,n,i){var r=e.length;while(r--)if(!e[r](t,n,i))return!1;return!0}:e[0]}function _e(e,t,n){for(var i=0,r=t.length;i-1&&(o[u]=!(a[u]=h))}}else v=Me(v===a?v.splice(p,v.length):v),r?r(null,a,v,l):O.apply(a,v)}))}function Ce(e){for(var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],l=a?1:0,c=we((function(e){return e===t}),s,!0),h=we((function(e){return L(t,e)>-1}),s,!0),d=[function(e,n,i){var r=!a&&(i||n!==u)||((t=n).nodeType?c(e,n,i):h(e,n,i));return t=null,r}];l1&&xe(d),l>1&&be(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(H,"$1"),n,l0,r=e.length>0,o=function(o,a,s,l,c){var h,p,m,v=0,y="0",b=o&&[],w=[],x=u,M=o||r&&i.find["TAG"]("*",c),I=_+=null==x?1:Math.random()||.1,C=M.length;for(c&&(u=a==f||a||c);y!==C&&null!=(h=M[y]);y++){if(r&&h){p=0,a||h.ownerDocument==f||(d(h),s=!g);while(m=e[p++])if(m(h,a||f,s)){l.push(h);break}c&&(_=I)}n&&((h=!m&&h)&&v--,o&&b.push(h))}if(v+=y,n&&y!==v){p=0;while(m=t[p++])m(b,w,a,s);if(o){if(v>0)while(y--)b[y]||w[y]||(w[y]=E.call(l));w=Me(w)}O.apply(l,w),c&&!o&&w.length>0&&v+t.length>1&&se.uniqueSort(l)}return c&&(_=I,u=x),b};return n?ue(o):o}return ye.prototype=i.filters=i.pseudos,i.setFilters=new ye,a=se.tokenize=function(e,t){var n,r,o,a,s,l,u,c=C[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=i.preFilter;while(s){for(a in n&&!(r=$.exec(s))||(r&&(s=s.slice(r[0].length)||s),l.push(o=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(H," ")}),s=s.slice(n.length)),i.filter)!(r=Y[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):C(e,l).slice(0)},s=se.compile=function(e,t){var n,i=[],r=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)o=Ce(t[n]),o[w]?i.push(o):r.push(o);o=S(e,Se(r,i)),o.selector=e}return o},l=se.select=function(e,t,n,r){var o,l,u,c,h,d="function"===typeof e&&e,f=!r&&a(e=d.selector||e);if(n=n||[],1===f.length){if(l=f[0]=f[0].slice(0),l.length>2&&"ID"===(u=l[0]).type&&9===t.nodeType&&g&&i.relative[l[1].type]){if(t=(i.find["ID"](u.matches[0].replace(te,ne),t)||[])[0],!t)return n;d&&(t=t.parentNode),e=e.slice(l.shift().value.length)}o=Y["needsContext"].test(e)?0:l.length;while(o--){if(u=l[o],i.relative[c=u.type])break;if((h=i.find[c])&&(r=h(u.matches[0].replace(te,ne),ee.test(l[0].type)&&ve(t.parentNode)||t))){if(l.splice(o,1),e=r.length&&be(l),!e)return O.apply(n,r),n;break}}}return(d||s(e,f))(r,t,!g,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=w.split("").sort(T).join("")===w,n.detectDuplicates=!!h,d(),n.sortDetached=ce((function(e){return 1&e.compareDocumentPosition(f.createElement("fieldset"))})),ce((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||he("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ce((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||he("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ce((function(e){return null==e.getAttribute("disabled")}))||he(B,(function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null})),se}(n);C.find=D,C.expr=D.selectors,C.expr[":"]=C.expr.pseudos,C.uniqueSort=C.unique=D.uniqueSort,C.text=D.getText,C.isXMLDoc=D.isXML,C.contains=D.contains,C.escapeSelector=D.escape;var T=function(e,t,n){var i=[],r=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(r&&C(e).is(n))break;i.push(e)}return i},A=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=C.expr.match.needsContext;function E(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function O(e,t,n){return y(t)?C.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?C.grep(e,(function(e){return e===t!==n})):"string"!==typeof t?C.grep(e,(function(e){return h.call(t,e)>-1!==n})):C.filter(t,e,n)}C.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?C.find.matchesSelector(i,e)?[i]:[]:C.find.matches(e,C.grep(t,(function(e){return 1===e.nodeType})))},C.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!==typeof e)return this.pushStack(C(e).filter((function(){for(t=0;t1?C.uniqueSort(n):n},filter:function(e){return this.pushStack(O(this,e||[],!1))},not:function(e){return this.pushStack(O(this,e||[],!0))},is:function(e){return!!O(this,"string"===typeof e&&k.test(e)?C(e):e||[],!1).length}});var P,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,B=C.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||P,"string"===typeof e){if(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e),!i||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),N.test(i[1])&&C.isPlainObject(t))for(i in t)y(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return r=w.getElementById(i[2]),r&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this)};B.prototype=C.fn,P=C(w);var j=/^(?:parents|prev(?:Until|All))/,z={children:!0,contents:!0,next:!0,prev:!0};function R(e,t){while((e=e[t])&&1!==e.nodeType);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&C.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?C.uniqueSort(o):o)},index:function(e){return e?"string"===typeof e?h.call(C(e),this[0]):h.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),C.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return R(e,"nextSibling")},prev:function(e){return R(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return A((e.parentNode||{}).firstChild,e)},children:function(e){return A(e.firstChild)},contents:function(e){return null!=e.contentDocument&&s(e.contentDocument)?e.contentDocument:(E(e,"template")&&(e=e.content||e),C.merge([],e.childNodes))}},(function(e,t){C.fn[e]=function(n,i){var r=C.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"===typeof i&&(r=C.filter(i,r)),this.length>1&&(z[e]||C.uniqueSort(r),j.test(e)&&r.reverse()),this.pushStack(r)}}));var F=/[^\x20\t\r\n\f]+/g;function V(e){var t={};return C.each(e.match(F)||[],(function(e,n){t[n]=!0})),t}function H(e){return e}function $(e){throw e}function U(e,t,n,i){var r;try{e&&y(r=e.promise)?r.call(e).done(t).fail(n):e&&y(r=e.then)?r.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}C.Callbacks=function(e){e="string"===typeof e?V(e):C.extend({},e);var t,n,i,r,o=[],a=[],s=-1,l=function(){for(r=r||e.once,i=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?C.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=a=[],n||t||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=n||[],n=[e,n.slice?n.slice():n],a.push(n),t||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},C.extend({Deferred:function(e){var t=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return C.Deferred((function(n){C.each(t,(function(t,i){var r=y(e[i[4]])&&e[i[4]];o[i[1]]((function(){var e=r&&r.apply(this,arguments);e&&y(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,r?[e]:arguments)}))})),e=null})).promise()},then:function(e,i,r){var o=0;function a(e,t,i,r){return function(){var s=this,l=arguments,u=function(){var n,u;if(!(e=o&&(i!==$&&(s=void 0,l=[n]),t.rejectWith(s,l))}};e?c():(C.Deferred.getStackHook&&(c.stackTrace=C.Deferred.getStackHook()),n.setTimeout(c))}}return C.Deferred((function(n){t[0][3].add(a(0,n,y(r)?r:H,n.notifyWith)),t[1][3].add(a(0,n,y(e)?e:H)),t[2][3].add(a(0,n,y(i)?i:$))})).promise()},promise:function(e){return null!=e?C.extend(e,r):r}},o={};return C.each(t,(function(e,n){var a=n[2],s=n[5];r[n[1]]=a.add,s&&a.add((function(){i=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+"With"](this===o?void 0:this,arguments),this},o[n[0]+"With"]=a.fireWith})),r.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,i=Array(n),r=l.call(arguments),o=C.Deferred(),a=function(e){return function(n){i[e]=this,r[e]=arguments.length>1?l.call(arguments):n,--t||o.resolveWith(i,r)}};if(t<=1&&(U(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||y(r[n]&&r[n].then)))return o.then();while(n--)U(r[n],a(n),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;C.Deferred.exceptionHook=function(e,t){n.console&&n.console.warn&&e&&W.test(e.name)&&n.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},C.readyException=function(e){n.setTimeout((function(){throw e}))};var G=C.Deferred();function Z(){w.removeEventListener("DOMContentLoaded",Z),n.removeEventListener("load",Z),C.ready()}C.fn.ready=function(e){return G.then(e).catch((function(e){C.readyException(e)})),this},C.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--C.readyWait:C.isReady)||(C.isReady=!0,!0!==e&&--C.readyWait>0||G.resolveWith(w,[C]))}}),C.ready.then=G.then,"complete"===w.readyState||"loading"!==w.readyState&&!w.documentElement.doScroll?n.setTimeout(C.ready):(w.addEventListener("DOMContentLoaded",Z),n.addEventListener("load",Z));var Y=function(e,t,n,i,r,o,a){var s=0,l=e.length,u=null==n;if("object"===M(n))for(s in r=!0,n)Y(e,t,s,n[s],!0,o,a);else if(void 0!==i&&(r=!0,y(i)||(a=!0),u&&(a?(t.call(e,i),t=null):(u=t,t=function(e,t,n){return u.call(C(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each((function(){ne.remove(this,e)}))}}),C.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=te.get(e,t),n&&(!i||Array.isArray(n)?i=te.access(e,t,C.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=C.queue(e,t),i=n.length,r=n.shift(),o=C._queueHooks(e,t),a=function(){C.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,a,o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return te.get(e,n)||te.access(e,n,{empty:C.Callbacks("once memory").add((function(){te.remove(e,[t+"queue",n])}))})}}),C.fn.extend({queue:function(e,t){var n=2;return"string"!==typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,we=/^$|^module$|\/(?:java|ecma)script/i;(function(){var e=w.createDocumentFragment(),t=e.appendChild(w.createElement("div")),n=w.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),v.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",v.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,t.innerHTML="",v.option=!!t.lastChild})();var xe={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function _e(e,t){var n;return n="undefined"!==typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!==typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&E(e,t)?C.merge([e],n):n}function Me(e,t){for(var n=0,i=e.length;n",""]);var Ie=/<|&#?\w+;/;function Ce(e,t,n,i,r){for(var o,a,s,l,u,c,h=t.createDocumentFragment(),d=[],f=0,p=e.length;f-1)r&&r.push(o);else if(u=he(o),a=_e(h.appendChild(o),"script"),u&&Me(a),n){c=0;while(o=a[c++])we.test(o.type||"")&&n.push(o)}return h}var Se=/^([^.]*)(?:\.(.+)|)/;function De(){return!0}function Te(){return!1}function Ae(e,t){return e===ke()===("focus"===t)}function ke(){try{return w.activeElement}catch(e){}}function Ee(e,t,n,i,r,o){var a,s;if("object"===typeof t){for(s in"string"!==typeof n&&(i=i||n,n=void 0),t)Ee(e,s,n,i,t[s],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"===typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=Te;else if(!r)return e;return 1===o&&(a=r,r=function(e){return C().off(e),a.apply(this,arguments)},r.guid=a.guid||(a.guid=C.guid++)),e.each((function(){C.event.add(this,t,r,i,n)}))}function Ne(e,t,n){n?(te.set(e,t,!1),C.event.add(e,t,{namespace:!1,handler:function(e){var i,r,o=te.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(C.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=l.call(arguments),te.set(this,t,o),i=n(this,t),this[t](),r=te.get(this,t),o!==r||i?te.set(this,t,!1):r={},o!==r)return e.stopImmediatePropagation(),e.preventDefault(),r&&r.value}else o.length&&(te.set(this,t,{value:C.event.trigger(C.extend(o[0],C.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===te.get(e,t)&&C.event.add(e,t,De)}C.event={global:{},add:function(e,t,n,i,r){var o,a,s,l,u,c,h,d,f,p,g,m=te.get(e);if(J(e)){n.handler&&(o=n,n=o.handler,r=o.selector),r&&C.find.matchesSelector(ce,r),n.guid||(n.guid=C.guid++),(l=m.events)||(l=m.events=Object.create(null)),(a=m.handle)||(a=m.handle=function(t){return"undefined"!==typeof C&&C.event.triggered!==t.type?C.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(F)||[""],u=t.length;while(u--)s=Se.exec(t[u])||[],f=g=s[1],p=(s[2]||"").split(".").sort(),f&&(h=C.event.special[f]||{},f=(r?h.delegateType:h.bindType)||f,h=C.event.special[f]||{},c=C.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&C.expr.match.needsContext.test(r),namespace:p.join(".")},o),(d=l[f])||(d=l[f]=[],d.delegateCount=0,h.setup&&!1!==h.setup.call(e,i,p,a)||e.addEventListener&&e.addEventListener(f,a)),h.add&&(h.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,c):d.push(c),C.event.global[f]=!0)}},remove:function(e,t,n,i,r){var o,a,s,l,u,c,h,d,f,p,g,m=te.hasData(e)&&te.get(e);if(m&&(l=m.events)){t=(t||"").match(F)||[""],u=t.length;while(u--)if(s=Se.exec(t[u])||[],f=g=s[1],p=(s[2]||"").split(".").sort(),f){h=C.event.special[f]||{},f=(i?h.delegateType:h.bindType)||f,d=l[f]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;while(o--)c=d[o],!r&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||i&&i!==c.selector&&("**"!==i||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,h.remove&&h.remove.call(e,c));a&&!d.length&&(h.teardown&&!1!==h.teardown.call(e,p,m.handle)||C.removeEvent(e,f,m.handle),delete l[f])}else for(f in l)C.event.remove(e,f+t[u],n,i,!0);C.isEmptyObject(l)&&te.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,a,s=new Array(arguments.length),l=C.event.fix(e),u=(te.get(this,"events")||Object.create(null))[l.type]||[],c=C.event.special[l.type]||{};for(s[0]=l,t=1;t=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(o=[],a={},n=0;n-1:C.find(r,this,null,[u]).length),a[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return u=this,l\s*$/g;function Be(e,t){return E(e,"table")&&E(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function je(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function ze(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Re(e,t){var n,i,r,o,a,s,l;if(1===t.nodeType){if(te.hasData(e)&&(o=te.get(e),l=o.events,l))for(r in te.remove(t,"handle events"),l)for(n=0,i=l[r].length;n1&&"string"===typeof p&&!v.checkClone&&Pe.test(p))return e.each((function(r){var o=e.eq(r);g&&(t[0]=p.call(this,r,o.html())),Ve(o,t,n,i)}));if(d&&(r=Ce(t,e[0].ownerDocument,!1,e,i),o=r.firstChild,1===r.childNodes.length&&(r=o),o||i)){for(a=C.map(_e(r,"script"),je),s=a.length;h0&&Me(a,!l&&_e(e,"script")),s},cleanData:function(e){for(var t,n,i,r=C.event.special,o=0;void 0!==(n=e[o]);o++)if(J(n)){if(t=n[te.expando]){if(t.events)for(i in t.events)r[i]?C.event.remove(n,i):C.removeEvent(n,i,t.handle);n[te.expando]=void 0}n[ne.expando]&&(n[ne.expando]=void 0)}}}),C.fn.extend({detach:function(e){return He(this,e,!0)},remove:function(e){return He(this,e)},text:function(e){return Y(this,(function(e){return void 0===e?C.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ve(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Be(this,e);t.appendChild(e)}}))},prepend:function(){return Ve(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Be(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ve(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ve(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(C.cleanData(_e(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return C.clone(this,e,t)}))},html:function(e){return Y(this,(function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"===typeof e&&!Oe.test(e)&&!xe[(be.exec(e)||["",""])[1].toLowerCase()]){e=C.htmlPrefilter(e);try{for(;n=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-l-s-.5))||0),l}function lt(e,t,n){var i=We(e),r=!v.boxSizingReliable()||n,o=r&&"border-box"===C.css(e,"boxSizing",!1,i),a=o,s=qe(e,t,i),l="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(s)){if(!n)return s;s="auto"}return(!v.boxSizingReliable()&&o||!v.reliableTrDimensions()&&E(e,"tr")||"auto"===s||!parseFloat(s)&&"inline"===C.css(e,"display",!1,i))&&e.getClientRects().length&&(o="border-box"===C.css(e,"boxSizing",!1,i),a=l in e,a&&(s=e[l])),s=parseFloat(s)||0,s+st(e,t,n||(o?"border":"content"),a,i,s)+"px"}function ut(e,t,n,i,r){return new ut.prototype.init(e,t,n,i,r)}C.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=qe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,a,s=X(t),l=Ue.test(t),u=e.style;if(l||(t=nt(s)),a=C.cssHooks[t]||C.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(r=a.get(e,!1,i))?r:u[t];o=typeof n,"string"===o&&(r=le.exec(n))&&r[1]&&(n=pe(e,t,r),o="number"),null!=n&&n===n&&("number"!==o||l||(n+=r&&r[3]||(C.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,i))||(l?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,i){var r,o,a,s=X(t),l=Ue.test(t);return l||(t=nt(s)),a=C.cssHooks[t]||C.cssHooks[s],a&&"get"in a&&(r=a.get(e,!0,n)),void 0===r&&(r=qe(e,t,i)),"normal"===r&&t in ot&&(r=ot[t]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),C.each(["height","width"],(function(e,t){C.cssHooks[t]={get:function(e,n,i){if(n)return!it.test(C.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?lt(e,t,i):Ge(e,rt,(function(){return lt(e,t,i)}))},set:function(e,n,i){var r,o=We(e),a=!v.scrollboxSize()&&"absolute"===o.position,s=a||i,l=s&&"border-box"===C.css(e,"boxSizing",!1,o),u=i?st(e,t,i,l,o):0;return l&&a&&(u-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-st(e,t,"border",!1,o)-.5)),u&&(r=le.exec(n))&&"px"!==(r[3]||"px")&&(e.style[t]=n,n=C.css(e,t)),at(e,n,u)}}})),C.cssHooks.marginLeft=Ke(v.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(qe(e,"marginLeft"))||e.getBoundingClientRect().left-Ge(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),C.each({margin:"",padding:"",border:"Width"},(function(e,t){C.cssHooks[e+t]={expand:function(n){for(var i=0,r={},o="string"===typeof n?n.split(" "):[n];i<4;i++)r[e+ue[i]+t]=o[i]||o[i-2]||o[0];return r}},"margin"!==e&&(C.cssHooks[e+t].set=at)})),C.fn.extend({css:function(e,t){return Y(this,(function(e,t,n){var i,r,o={},a=0;if(Array.isArray(t)){for(i=We(e),r=t.length;a1)}}),C.Tween=ut,ut.prototype={constructor:ut,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||C.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(C.cssNumber[n]?"":"px")},cur:function(){var e=ut.propHooks[this.prop];return e&&e.get?e.get(this):ut.propHooks._default.get(this)},run:function(e){var t,n=ut.propHooks[this.prop];return this.options.duration?this.pos=t=C.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):ut.propHooks._default.set(this),this}},ut.prototype.init.prototype=ut.prototype,ut.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=C.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){C.fx.step[e.prop]?C.fx.step[e.prop](e):1!==e.elem.nodeType||!C.cssHooks[e.prop]&&null==e.elem.style[nt(e.prop)]?e.elem[e.prop]=e.now:C.style(e.elem,e.prop,e.now+e.unit)}}},ut.propHooks.scrollTop=ut.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},C.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},C.fx=ut.prototype.init,C.fx.step={};var ct,ht,dt=/^(?:toggle|show|hide)$/,ft=/queueHooks$/;function pt(){ht&&(!1===w.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(pt):n.setTimeout(pt,C.fx.interval),C.fx.tick())}function gt(){return n.setTimeout((function(){ct=void 0})),ct=Date.now()}function mt(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)n=ue[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function vt(e,t,n){for(var i,r=(wt.tweeners[t]||[]).concat(wt.tweeners["*"]),o=0,a=r.length;o1)},removeAttr:function(e){return this.each((function(){C.removeAttr(this,e)}))}}),C.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"===typeof e.getAttribute?C.prop(e,t,n):(1===o&&C.isXMLDoc(e)||(r=C.attrHooks[t.toLowerCase()]||(C.expr.match.bool.test(t)?xt:void 0)),void 0!==n?null===n?void C.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:(i=C.find.attr(e,t),null==i?void 0:i))},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&E(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(F);if(r&&1===e.nodeType)while(n=r[i++])e.removeAttribute(n)}}),xt={set:function(e,t,n){return!1===t?C.removeAttr(e,n):e.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=_t[t]||C.find.attr;_t[t]=function(e,t,i){var r,o,a=t.toLowerCase();return i||(o=_t[a],_t[a]=r,r=null!=n(e,t,i)?a:null,_t[a]=o),r}}));var Mt=/^(?:input|select|textarea|button)$/i,It=/^(?:a|area)$/i;function Ct(e){var t=e.match(F)||[];return t.join(" ")}function St(e){return e.getAttribute&&e.getAttribute("class")||""}function Dt(e){return Array.isArray(e)?e:"string"===typeof e&&e.match(F)||[]}C.fn.extend({prop:function(e,t){return Y(this,C.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[C.propFix[e]||e]}))}}),C.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(e)||(t=C.propFix[t]||t,r=C.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=C.find.attr(e,"tabindex");return t?parseInt(t,10):Mt.test(e.nodeName)||It.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(C.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){C.propFix[this.toLowerCase()]=this})),C.fn.extend({addClass:function(e){var t,n,i,r,o,a;return y(e)?this.each((function(t){C(this).addClass(e.call(this,t,St(this)))})):(t=Dt(e),t.length?this.each((function(){if(i=St(this),n=1===this.nodeType&&" "+Ct(i)+" ",n){for(o=0;o-1)n=n.replace(" "+r+" "," ")}a=Ct(n),i!==a&&this.setAttribute("class",a)}})):this):this.attr("class","")},toggleClass:function(e,t){var n,i,r,o,a=typeof e,s="string"===a||Array.isArray(e);return y(e)?this.each((function(n){C(this).toggleClass(e.call(this,n,St(this),t),t)})):"boolean"===typeof t&&s?t?this.addClass(e):this.removeClass(e):(n=Dt(e),this.each((function(){if(s)for(o=C(this),r=0;r-1)return!0;return!1}});var Tt=/\r/g;C.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=y(e),this.each((function(n){var r;1===this.nodeType&&(r=i?e.call(this,n,C(this).val()):e,null==r?r="":"number"===typeof r?r+="":Array.isArray(r)&&(r=C.map(r,(function(e){return null==e?"":e+""}))),t=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=C.valHooks[r.type]||C.valHooks[r.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:(n=r.value,"string"===typeof n?n.replace(Tt,""):null==n?"":n)):void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:Ct(C.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],l=a?o+1:r.length;for(i=o<0?l:a?o:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),C.each(["radio","checkbox"],(function(){C.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=C.inArray(C(e).val(),t)>-1}},v.checkOn||(C.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),v.focusin="onfocusin"in n;var At=/^(?:focusinfocus|focusoutblur)$/,kt=function(e){e.stopPropagation()};C.extend(C.event,{trigger:function(e,t,i,r){var o,a,s,l,u,c,h,d,f=[i||w],g=p.call(e,"type")?e.type:e,m=p.call(e,"namespace")?e.namespace.split("."):[];if(a=d=s=i=i||w,3!==i.nodeType&&8!==i.nodeType&&!At.test(g+C.event.triggered)&&(g.indexOf(".")>-1&&(m=g.split("."),g=m.shift(),m.sort()),u=g.indexOf(":")<0&&"on"+g,e=e[C.expando]?e:new C.Event(g,"object"===typeof e&&e),e.isTrigger=r?2:3,e.namespace=m.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),t=null==t?[e]:C.makeArray(t,[e]),h=C.event.special[g]||{},r||!h.trigger||!1!==h.trigger.apply(i,t))){if(!r&&!h.noBubble&&!b(i)){for(l=h.delegateType||g,At.test(l+g)||(a=a.parentNode);a;a=a.parentNode)f.push(a),s=a;s===(i.ownerDocument||w)&&f.push(s.defaultView||s.parentWindow||n)}o=0;while((a=f[o++])&&!e.isPropagationStopped())d=a,e.type=o>1?l:h.bindType||g,c=(te.get(a,"events")||Object.create(null))[e.type]&&te.get(a,"handle"),c&&c.apply(a,t),c=u&&a[u],c&&c.apply&&J(a)&&(e.result=c.apply(a,t),!1===e.result&&e.preventDefault());return e.type=g,r||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(f.pop(),t)||!J(i)||u&&y(i[g])&&!b(i)&&(s=i[u],s&&(i[u]=null),C.event.triggered=g,e.isPropagationStopped()&&d.addEventListener(g,kt),i[g](),e.isPropagationStopped()&&d.removeEventListener(g,kt),C.event.triggered=void 0,s&&(i[u]=s)),e.result}},simulate:function(e,t,n){var i=C.extend(new C.Event,n,{type:e,isSimulated:!0});C.event.trigger(i,null,t)}}),C.fn.extend({trigger:function(e,t){return this.each((function(){C.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return C.event.trigger(e,t,n,!0)}}),v.focusin||C.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){C.event.simulate(t,e.target,C.event.fix(e))};C.event.special[t]={setup:function(){var i=this.ownerDocument||this.document||this,r=te.access(i,t);r||i.addEventListener(e,n,!0),te.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this.document||this,r=te.access(i,t)-1;r?te.access(i,t,r):(i.removeEventListener(e,n,!0),te.remove(i,t))}}}));var Et=n.location,Nt={guid:Date.now()},Ot=/\?/;C.parseXML=function(e){var t,i;if(!e||"string"!==typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,"text/xml")}catch(r){}return i=t&&t.getElementsByTagName("parsererror")[0],t&&!i||C.error("Invalid XML: "+(i?C.map(i.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var Pt=/\[\]$/,Lt=/\r?\n/g,Bt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function zt(e,t,n,i){var r;if(Array.isArray(t))C.each(t,(function(t,r){n||Pt.test(e)?i(e,r):zt(e+"["+("object"===typeof r&&null!=r?t:"")+"]",r,n,i)}));else if(n||"object"!==M(t))i(e,t);else for(r in t)zt(e+"["+r+"]",t[r],n,i)}C.param=function(e,t){var n,i=[],r=function(e,t){var n=y(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!C.isPlainObject(e))C.each(e,(function(){r(this.name,this.value)}));else for(n in e)zt(n,e[n],t,r);return i.join("&")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=C.prop(this,"elements");return e?C.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!C(this).is(":disabled")&&jt.test(this.nodeName)&&!Bt.test(e)&&(this.checked||!ye.test(e))})).map((function(e,t){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,(function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}})):{name:t.name,value:n.replace(Lt,"\r\n")}})).get()}});var Rt=/%20/g,Ft=/#.*$/,Vt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,$t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ut=/^(?:GET|HEAD)$/,Wt=/^\/\//,Gt={},Zt={},Yt="*/".concat("*"),Qt=w.createElement("a");function qt(e){return function(t,n){"string"!==typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(F)||[];if(y(n))while(i=o[r++])"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Kt(e,t,n,i){var r={},o=e===Zt;function a(s){var l;return r[s]=!0,C.each(e[s]||[],(function(e,s){var u=s(t,n,i);return"string"!==typeof u||o||r[u]?o?!(l=u):void 0:(t.dataTypes.unshift(u),a(u),!1)})),l}return a(t.dataTypes[0])||!r["*"]&&a("*")}function Xt(e,t){var n,i,r=C.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:i||(i={}))[n]=t[n]);return i&&C.extend(!0,e,i),e}function Jt(e,t,n){var i,r,o,a,s=e.contents,l=e.dataTypes;while("*"===l[0])l.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(r in s)if(s[r]&&s[r].test(i)){l.unshift(r);break}if(l[0]in n)o=l[0];else{for(r in n){if(!l[0]||e.converters[r+" "+l[0]]){o=r;break}a||(a=r)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),n[o]}function en(e,t,n,i){var r,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift(),o)if("*"===o)o=l;else if("*"!==l&&l!==o){if(a=u[l+" "+o]||u["* "+o],!a)for(r in u)if(s=r.split(" "),s[1]===o&&(a=u[l+" "+s[0]]||u["* "+s[0]],a)){!0===a?a=u[r]:!0!==u[r]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(h){return{state:"parsererror",error:a?h:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}Qt.href=Et.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:$t.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Yt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Xt(Xt(e,C.ajaxSettings),t):Xt(C.ajaxSettings,e)},ajaxPrefilter:qt(Gt),ajaxTransport:qt(Zt),ajax:function(e,t){"object"===typeof e&&(t=e,e=void 0),t=t||{};var i,r,o,a,s,l,u,c,h,d,f=C.ajaxSetup({},t),p=f.context||f,g=f.context&&(p.nodeType||p.jquery)?C(p):C.event,m=C.Deferred(),v=C.Callbacks("once memory"),y=f.statusCode||{},b={},x={},_="canceled",M={readyState:0,getResponseHeader:function(e){var t;if(u){if(!a){a={};while(t=Ht.exec(o))a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return u?o:null},setRequestHeader:function(e,t){return null==u&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==u&&(f.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)M.always(e[M.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||_;return i&&i.abort(t),I(0,t),this}};if(m.promise(M),f.url=((e||f.url||Et.href)+"").replace(Wt,Et.protocol+"//"),f.type=t.method||t.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(F)||[""],null==f.crossDomain){l=w.createElement("a");try{l.href=f.url,l.href=l.href,f.crossDomain=Qt.protocol+"//"+Qt.host!==l.protocol+"//"+l.host}catch(S){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!==typeof f.data&&(f.data=C.param(f.data,f.traditional)),Kt(Gt,f,t,M),u)return M;for(h in c=C.event&&f.global,c&&0===C.active++&&C.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Ut.test(f.type),r=f.url.replace(Ft,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(Rt,"+")):(d=f.url.slice(r.length),f.data&&(f.processData||"string"===typeof f.data)&&(r+=(Ot.test(r)?"&":"?")+f.data,delete f.data),!1===f.cache&&(r=r.replace(Vt,"$1"),d=(Ot.test(r)?"&":"?")+"_="+Nt.guid+++d),f.url=r+d),f.ifModified&&(C.lastModified[r]&&M.setRequestHeader("If-Modified-Since",C.lastModified[r]),C.etag[r]&&M.setRequestHeader("If-None-Match",C.etag[r])),(f.data&&f.hasContent&&!1!==f.contentType||t.contentType)&&M.setRequestHeader("Content-Type",f.contentType),M.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+Yt+"; q=0.01":""):f.accepts["*"]),f.headers)M.setRequestHeader(h,f.headers[h]);if(f.beforeSend&&(!1===f.beforeSend.call(p,M,f)||u))return M.abort();if(_="abort",v.add(f.complete),M.done(f.success),M.fail(f.error),i=Kt(Zt,f,t,M),i){if(M.readyState=1,c&&g.trigger("ajaxSend",[M,f]),u)return M;f.async&&f.timeout>0&&(s=n.setTimeout((function(){M.abort("timeout")}),f.timeout));try{u=!1,i.send(b,I)}catch(S){if(u)throw S;I(-1,S)}}else I(-1,"No Transport");function I(e,t,a,l){var h,d,b,w,x,_=t;u||(u=!0,s&&n.clearTimeout(s),i=void 0,o=l||"",M.readyState=e>0?4:0,h=e>=200&&e<300||304===e,a&&(w=Jt(f,M,a)),!h&&C.inArray("script",f.dataTypes)>-1&&C.inArray("json",f.dataTypes)<0&&(f.converters["text script"]=function(){}),w=en(f,w,M,h),h?(f.ifModified&&(x=M.getResponseHeader("Last-Modified"),x&&(C.lastModified[r]=x),x=M.getResponseHeader("etag"),x&&(C.etag[r]=x)),204===e||"HEAD"===f.type?_="nocontent":304===e?_="notmodified":(_=w.state,d=w.data,b=w.error,h=!b)):(b=_,!e&&_||(_="error",e<0&&(e=0))),M.status=e,M.statusText=(t||_)+"",h?m.resolveWith(p,[d,_,M]):m.rejectWith(p,[M,_,b]),M.statusCode(y),y=void 0,c&&g.trigger(h?"ajaxSuccess":"ajaxError",[M,f,h?d:b]),v.fireWith(p,[M,_]),c&&(g.trigger("ajaxComplete",[M,f]),--C.active||C.event.trigger("ajaxStop")))}return M},getJSON:function(e,t,n){return C.get(e,t,n,"json")},getScript:function(e,t){return C.get(e,void 0,t,"script")}}),C.each(["get","post"],(function(e,t){C[t]=function(e,n,i,r){return y(n)&&(r=r||i,i=n,n=void 0),C.ajax(C.extend({url:e,type:t,dataType:r,data:n,success:i},C.isPlainObject(e)&&e))}})),C.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),C._evalUrl=function(e,t,n){return C.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){C.globalEval(e,t,n)}})},C.fn.extend({wrapAll:function(e){var t;return this[0]&&(y(e)&&(e=e.call(this[0])),t=C(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return y(e)?this.each((function(t){C(this).wrapInner(e.call(this,t))})):this.each((function(){var t=C(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=y(e);return this.each((function(n){C(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){C(this).replaceWith(this.childNodes)})),this}}),C.expr.pseudos.hidden=function(e){return!C.expr.pseudos.visible(e)},C.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var tn={0:200,1223:204},nn=C.ajaxSettings.xhr();v.cors=!!nn&&"withCredentials"in nn,v.ajax=nn=!!nn,C.ajaxTransport((function(e){var t,i;if(v.cors||nn&&!e.crossDomain)return{send:function(r,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)s.setRequestHeader(a,r[a]);t=function(e){return function(){t&&(t=i=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!==typeof s.status?o(0,"error"):o(s.status,s.statusText):o(tn[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!==typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),i=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout((function(){t&&i()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(l){if(t)throw l}},abort:function(){t&&t()}}})),C.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return C.globalEval(e),e}}}),C.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),C.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(i,r){t=C("