rapid-spreadjs 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +10628 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.cjs.min.js +1 -1
- package/dist/index.cjs.min.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +10628 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.esm.min.js +1 -1
- package/dist/index.esm.min.js.map +1 -1
- package/dist/utils/formula-other.d.ts +14 -0
- package/dist/utils/formula.d.ts +4 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.min.js","sources":["../node_modules/.pnpm/@rollup+plugin-typescript@1_ccba8aa16c5fc04bbd7ba036697931a3/node_modules/tslib/tslib.es6.js","../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/business.ts","../src/utils/echarts-all.ts","../src/utils/echarts.ts","../src/utils/wookbook.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取文件的字节流对象\r\n * @param fileUrl 在线文件地址\r\n * @returns 文件的字节流对象\r\n */\r\n getFileBlob: async (fileUrl: string): Promise<Blob> | null => {\r\n // 获取文件响应结果\r\n const response = await fetch(fileUrl, { method: 'GET' });\r\n\r\n // 获取成功\r\n if (response.ok) {\r\n // 文件的字节流对象\r\n const blob = await response.blob();\r\n\r\n return blob;\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = '';\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { forEachJson, orderByJson, groupByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\nimport { CommonUtils } from '../utils/common';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某个范围中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了某个单元格范围,在这个范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRange 单元格范围,格式如:{ row: 0, col: 0, rowCount: 2, colCount: 2 }\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRange: (sheet: any, selectRange: CellModel, isMulColOrder: boolean = false): CellModel[] => {\r\n return SheetUtils.getAllCellObjsByRanges(sheet, [selectRange], isMulColOrder);\r\n },\r\n\r\n /**\r\n * 获取某工作表中多个范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中选中的所有单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0, \"rowCount\": 1, \"colCount\": 1 }]\r\n */\r\n getSheetSelectCellObjs: (sheet: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0, \"rowCount\": 1, \"colCount\": 1 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n return SheetUtils.getSheetSelectCellObjs(sheet, isMulColOrder);\r\n },\r\n\r\n /**\r\n * 获取某工作表指定范围单元格的坐标对象集合(二维数组,格式如:[[{row:0……}],[{row:0……}]])\r\n * @param sheet 工作表实例\r\n * @param cellRange 单元格范围\r\n * @param groupType 分组字段属性(row或col),默认为:row\r\n * @returns 返回某工作表指定范围单元格的坐标对象集合(二维数组,格式如:[[{row:0……}],[{row:0……}]])\r\n */\r\n getSheetCellObjsByGroup: (sheet: any, cellRange: CellModel, groupType: 'row' | 'col' = 'row'): Array<Array<CellModel>> => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n const valCells = SheetUtils.getAllCellObjsByRange(sheet, cellRange);\r\n\r\n // 按照JSON数组中某个字段进行分组(groupType为row或col)\r\n const groupByCells = groupByJson(valCells, groupType);\r\n\r\n // 最终返回结果(二维数组)\r\n const retCells: Array<Array<any>> = [];\r\n\r\n // 遍历分组JSON对象(groupByCells的格式为:{key1: [cell1, cell2, ...], key2: [cell1, cell2, ...], ...})\r\n forEachJson(groupByCells, (curGroupCells: CellModel[], key, source) => {\r\n retCells.push(curGroupCells);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retCells;\r\n },\r\n\r\n /**\r\n * 获取某工作表选中单元格的值集合\r\n * @param sheet 工作表实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回选中单元格的值集合\r\n */\r\n getSheetSelectVals: (\r\n sheet: any,\r\n isMulColOrder: boolean = false,\r\n nullUndefinedReplaceVal?: number | string\r\n ): (number | string | null | undefined)[] => {\r\n // 获取活动工作表选中单元格对象集合\r\n const selectCells = SheetUtils.getSheetSelectCellObjs(sheet, isMulColOrder);\r\n\r\n // 获取选中单元格的值集合\r\n let selectCellVals: (number | string | null | undefined)[] = [];\r\n selectCells.forEach((cell) => {\r\n let cellVal = sheet.getValue(cell.row, cell.col);\r\n\r\n // 如果cellVal为null或undefined,并且nullUndefinedReplaceVal不为null或undefined,则将cellVal替换为nullUndefinedReplaceVal\r\n if (nullUndefinedReplaceVal != null && nullUndefinedReplaceVal != undefined && (cellVal === null || cellVal === undefined)) {\r\n cellVal = nullUndefinedReplaceVal;\r\n }\r\n\r\n selectCellVals.push(cellVal);\r\n });\r\n\r\n return selectCellVals;\r\n },\r\n\r\n /**\r\n * 获取活动工作表选中单元格的值集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回选中单元格的值集合\r\n */\r\n getActiveSheetSelectVals: (\r\n spread: any,\r\n isMulColOrder: boolean = false,\r\n nullUndefinedReplaceVal?: number | string\r\n ): (number | string | null | undefined)[] => {\r\n // 获取当前活动工作表\r\n const sheet = spread.getActiveSheet();\r\n\r\n return SheetUtils.getSheetSelectVals(sheet, isMulColOrder, nullUndefinedReplaceVal);\r\n },\r\n\r\n /**\r\n * 获取某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])\r\n * @param sheet 工作表实例\r\n * @param cellRange 单元格范围\r\n * @param groupType 分组字段属性(row或col),默认为:row\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])\r\n */\r\n getSheetRangeValsByGroup: (\r\n sheet: any,\r\n cellRange: CellModel,\r\n groupType: 'row' | 'col' = 'row',\r\n nullUndefinedReplaceVal?: number | string | boolean\r\n ): Array<Array<any>> => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n const valCells = SheetUtils.getAllCellObjsByRange(sheet, cellRange);\r\n\r\n // 按照JSON数组中某个字段进行分组(groupType为row或col)\r\n const groupByCells = groupByJson(valCells, groupType);\r\n\r\n // 最终返回结果(二维数组)\r\n const retVals: Array<Array<any>> = [];\r\n\r\n // 遍历分组JSON对象(groupByCells的格式为:{key1: [cell1, cell2, ...], key2: [cell1, cell2, ...], ...})\r\n forEachJson(groupByCells, (curGroupCells: CellModel[], key, source) => {\r\n // 当前按照row或col分组的单元格的值集合\r\n const curVals: Array<any> = [];\r\n\r\n // 遍历当前分组的所有单元格\r\n forEachJson(curGroupCells, (item, index, source) => {\r\n let cellVal = sheet.getValue(item.row, item.col);\r\n\r\n // 如果cellVal为null或undefined,并且nullUndefinedReplaceVal不为null或undefined,则将cellVal替换为nullUndefinedReplaceVal\r\n if (nullUndefinedReplaceVal != null && nullUndefinedReplaceVal != undefined && (cellVal === null || cellVal === undefined)) {\r\n cellVal = nullUndefinedReplaceVal;\r\n }\r\n\r\n curVals.push(cellVal);\r\n });\r\n\r\n retVals.push(curVals);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retVals;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetSelectBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置某工作表中指定单元格背景颜色\r\n * @param sheet 工作表实例\r\n * @param cells 单元格集合\r\n * @param color 背景颜色\r\n */\r\n setSheetBgColor: (sheet: any, cells: CellModel[], color: string) => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 循环每个选中的单元格范围\r\n cells.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n\r\n /**\r\n * 根据单元格范围获取范围字符串\r\n * @param cellRange 单元格范围\r\n * @returns 返回范围字符串,如:A1:B2\r\n */\r\n getRangeStr: (cellRange: CellModel): string => {\r\n // 计算起始位置\r\n const startCol = CommonUtils.getColLetterName(cellRange.col);\r\n // 行索引转Excel行号(从1开始)\r\n const startRow = cellRange.row + 1;\r\n\r\n // 计算结束位置\r\n const endCol = CommonUtils.getColLetterName(cellRange.col + cellRange.colCount - 1);\r\n // 结束行号 = 起始行 + 行数\r\n const endRow = cellRange.row + cellRange.rowCount;\r\n\r\n return `${startCol}${startRow}:${endCol}${endRow}`;\r\n\r\n // // 或者使用SpreadJS提供的方法rangeToFormula\r\n // return GC.Spread.Sheets.CalcEngine.rangeToFormula(cellRange);\r\n },\r\n};\r\n","import { chunkJson } from 'rapid-utils';\r\nimport { TestObjectAttrModel } from '../types/business';\r\nimport { SheetUtils } from '../utils/sheet';\r\n\r\n/**\r\n * SpreadJS业务相关工具函数属性\r\n */\r\nexport const BusinessUtils = {\r\n /**\r\n * 创建检测对象属性单元格\r\n * @param gc GC对象\r\n * @param sheet 工作表实例\r\n * @param testObjectAttrs 检测对象属性配置集合\r\n * @param isVertical 是否为纵表,默认为:true\r\n * @param contentColStartIndex 表格内容列起始索引,默认为:1\r\n * @param contentTotalColCount 表格内容列总数,默认为:77\r\n * @param addRowHeight 添加的表格行高,默认为:24\r\n */\r\n createTestObjectAttrsCells: (\r\n gc: any,\r\n sheet: any,\r\n testObjectAttrs: TestObjectAttrModel[],\r\n isVertical: boolean = true,\r\n contentColStartIndex: number = 1,\r\n contentTotalColCount: number = 77,\r\n addRowHeight: number = 24\r\n ) => {\r\n if (!testObjectAttrs || testObjectAttrs.length === 0) {\r\n return;\r\n }\r\n\r\n // 标题单元格列数量(纵表为12列,横表待定)\r\n const titleCellColumnCount = isVertical ? 12 : 10;\r\n // 标题对应的值单元格列数量(纵表:第一个值单元格为26、第二个值单元格为27,纵表待定)\r\n const titleCellValColumnCount = isVertical ? 26 : 15;\r\n\r\n // 一行中检测对象属性的个数(纵表为2个,横表为3个)\r\n const rowTestObjectCount = isVertical ? 2 : 3;\r\n\r\n // 将测试对象属性数据进行分块\r\n const testObjectAttrsChunk = chunkJson(testObjectAttrs, rowTestObjectCount);\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 设置工作表行数为0\r\n sheet.setRowCount(0);\r\n\r\n for (let i = 0; i < testObjectAttrsChunk.length; i++) {\r\n const rowAttrArr = testObjectAttrsChunk[i] as TestObjectAttrModel[];\r\n\r\n // 获取总行数\r\n const totalRowCount: number = sheet.getRowCount();\r\n\r\n // 添加一行\r\n sheet.addRows(totalRowCount, 1);\r\n\r\n // 设置添加这一行的行高\r\n sheet.setRowHeight(totalRowCount, addRowHeight, gc.Spread.Sheets.SheetArea.viewport);\r\n\r\n // 获取添加这一行的区域范围\r\n const addRowRange = sheet.getRange(totalRowCount, 1, contentColStartIndex, contentTotalColCount, gc.Spread.Sheets.SheetArea.viewport);\r\n // 设置添加这一行区域中的边框样式(最左边和最后边边框样式为粗线、中间的为细边框样式)\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.thin), { all: true });\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.medium), { left: true });\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.medium), { right: true });\r\n // 设置单元格水平和垂直居中\r\n addRowRange.hAlign(gc.Spread.Sheets.HorizontalAlign.center);\r\n addRowRange.vAlign(gc.Spread.Sheets.HorizontalAlign.center);\r\n\r\n // 合并第一个属性的标题列和值列,同时设置对应单元格的内容\r\n sheet.addSpan(totalRowCount, contentColStartIndex, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(\r\n totalRowCount,\r\n contentColStartIndex + titleCellColumnCount,\r\n 1,\r\n rowAttrArr.length > 1 ? titleCellValColumnCount : contentTotalColCount - titleCellColumnCount,\r\n gc.Spread.Sheets.SheetArea.viewport\r\n );\r\n sheet.setValue(totalRowCount, contentColStartIndex, rowAttrArr[0].title);\r\n sheet.setValue(totalRowCount, contentColStartIndex + titleCellColumnCount, rowAttrArr[0].value);\r\n\r\n // 合并第二个属性的标题列和值列,同时设置对应单元格的内容\r\n if (rowAttrArr.length > 1) {\r\n const colIndexTitle = contentColStartIndex + titleCellColumnCount + titleCellValColumnCount;\r\n const colIndexValue = colIndexTitle + titleCellColumnCount;\r\n\r\n sheet.addSpan(totalRowCount, colIndexTitle, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(\r\n totalRowCount,\r\n colIndexValue,\r\n 1,\r\n titleCellValColumnCount + 1 + (!isVertical && rowAttrArr.length == 2 ? titleCellColumnCount + titleCellValColumnCount + 1 : 0),\r\n gc.Spread.Sheets.SheetArea.viewport\r\n );\r\n sheet.setValue(totalRowCount, colIndexTitle, rowAttrArr[1].title);\r\n sheet.setValue(totalRowCount, colIndexValue, rowAttrArr[1].value);\r\n }\r\n // 合并第三个属性的标题列和值列,同时设置对应单元格的内容\r\n if (rowAttrArr.length > 2) {\r\n const colIndexTitle =\r\n contentColStartIndex + titleCellColumnCount + titleCellValColumnCount + titleCellColumnCount + titleCellValColumnCount + 1;\r\n const colIndexValue = colIndexTitle + titleCellColumnCount;\r\n\r\n sheet.addSpan(totalRowCount, colIndexTitle, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(totalRowCount, colIndexValue, 1, titleCellValColumnCount + 1, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.setValue(totalRowCount, colIndexTitle, rowAttrArr[2].title);\r\n sheet.setValue(totalRowCount, colIndexValue, rowAttrArr[2].value);\r\n }\r\n }\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n /**\r\n * 获取检测对象属性值集合\r\n * @param sheet 工作表实例\r\n * @param testObjectAttrs 检测对象属性配置集合\r\n * @param isVertical 是否为纵表,默认为:true\r\n * @param contentColStartIndex 表格内容列起始索引,默认为:1\r\n * @param contentTotalColCount 表格内容列总数,默认为:77\r\n */\r\n getTestObjectAttrsVals: (\r\n sheet: any,\r\n testObjectAttrs: TestObjectAttrModel[],\r\n isVertical: boolean = true,\r\n contentColStartIndex: number = 1,\r\n contentTotalColCount: number = 77\r\n ): TestObjectAttrModel[] => {\r\n // 一行中检测对象属性的个数(纵表为2个,横表为3个)\r\n const rowTestObjectCount = isVertical ? 2 : 3;\r\n\r\n // 将测试对象属性数据进行分块\r\n const testObjectAttrsChunk = chunkJson(testObjectAttrs, rowTestObjectCount);\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 所有单元格对象\r\n const allCells = SheetUtils.getAllCellObjsByRange(sheet, {\r\n row: 0,\r\n col: contentColStartIndex,\r\n rowCount: sheet.getRowCount(),\r\n colCount: contentTotalColCount,\r\n });\r\n // 将所有单元格对象进行分块\r\n const allCellsChunk = chunkJson(allCells, rowTestObjectCount * 2);\r\n\r\n // 将所有单元格对象按照testObjectAttrsChunk的结构进行组合\r\n const newAllCellsChunk = [];\r\n for (let i = 0; i < allCellsChunk.length; i++) {\r\n newAllCellsChunk.push(chunkJson(allCellsChunk[i], 2));\r\n }\r\n\r\n let retData: TestObjectAttrModel[] = [];\r\n\r\n for (let i = 0; i < testObjectAttrsChunk.length; i++) {\r\n const attrObjs = testObjectAttrsChunk[i] as TestObjectAttrModel[];\r\n\r\n for (let j = 0; j < attrObjs.length; j++) {\r\n const attrObj = attrObjs[j];\r\n\r\n retData.push({\r\n title: sheet.getValue(newAllCellsChunk[i][j][0].row, newAllCellsChunk[i][j][0].col), //attrObj.title,\r\n fieldName: attrObj.fieldName,\r\n value: sheet.getValue(newAllCellsChunk[i][j][1].row, newAllCellsChunk[i][j][1].col),\r\n });\r\n }\r\n }\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retData;\r\n },\r\n};\r\n","import * as math from 'mathjs';\r\nimport { type EChartsUtilsConfigModel } from '../types/echarts';\r\n\r\n/**\r\n * 公用方法,如:修约计算等\r\n */\r\nconst EChartsUtilsComm = {\r\n /**\r\n * 计算常规修约\r\n * @param roundingVal 修约值\r\n * @param accuracy 修约精度\r\n * @return 返回修约结果\r\n */\r\n getRound: (roundingVal, accuracy) => {\r\n // 验证修约的值是否为负数,为负数的话,取绝对值进行修约\r\n const valIsNegative = roundingVal < 0;\r\n if (valIsNegative) {\r\n roundingVal = Math.abs(roundingVal);\r\n }\r\n\r\n // 修约精度为0的时候\r\n if (accuracy == 0) {\r\n // 得到字符串形式\r\n let inputValStr = roundingVal.toString();\r\n\r\n // 判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return valIsNegative ? -roundingVal : roundingVal;\r\n }\r\n\r\n // 获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n // 小数部分大于或等于0.5的话,就给整数部分加1后返回,否则返回整数部分\r\n if (parseFloat(`0.${decimalStr}`) >= 0.5) {\r\n return valIsNegative ? -(intVal + 1) : intVal + 1;\r\n } else {\r\n return valIsNegative ? -intVal : intVal;\r\n }\r\n }\r\n\r\n // 系数\r\n let coefficient = 1 / accuracy;\r\n\r\n // 换算后的修约值(=修约值*系数)\r\n // 注意:此处使用到了toFixed,目的是可能会存在精度的问题\r\n let roundingValCal = Number((roundingVal * coefficient).toFixed(8));\r\n\r\n /**\r\n * 计算修约结果函数\r\n * @param inputVal 换算后的修约值\r\n * @returns 返回修约结果\r\n */\r\n const calcRoundingRet = (inputVal: number): number => {\r\n // 得到字符串形式\r\n let inputValStr = inputVal.toString();\r\n\r\n // 判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return inputVal;\r\n }\r\n\r\n // 获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n // 获取小数部分的第一位数字\r\n let decimalStrFirst = parseInt(decimalStr.substring(0, 1));\r\n\r\n // 大于等于6的时候,入\r\n if (decimalStrFirst >= 6) {\r\n return intVal + 1;\r\n }\r\n // 小于等于4的时候,舍\r\n else if (decimalStrFirst <= 4) {\r\n return intVal;\r\n }\r\n\r\n // 小数部分为5,并且只有一位小数的时候,前面的整数部分如果是奇数则入,反之则舍\r\n else if (decimalStrFirst == 5 && decimalStr.length == 1) {\r\n return intVal % 2 != 0 ? intVal + 1 : intVal;\r\n }\r\n\r\n // 小数部分为5,并且小数位数大于一位的时候,则入\r\n else if (decimalStrFirst == 5 && decimalStr.length > 1) {\r\n return intVal + 1;\r\n }\r\n\r\n return inputVal;\r\n };\r\n\r\n // 返回最终修约结果(=修约结果/系数)\r\n const retNum = calcRoundingRet(roundingValCal) / coefficient;\r\n\r\n //获取修约精度中的小数位数\r\n let accuracyStr = accuracy + '';\r\n\r\n // 如果修约精度中没有小数,则直接返回\r\n if (accuracyStr.indexOf('.') == -1) {\r\n return valIsNegative ? -retNum : retNum;\r\n } else {\r\n const retNumStr = retNum + '';\r\n\r\n // 补位的0的字符串\r\n let zeroStr = '';\r\n\r\n // 结果为整数的时候,需要补充小数点后面的小数位数为0,如:34→34.0\r\n if (retNumStr.indexOf('.') == -1) {\r\n let zeroStr = '';\r\n for (let index = 0; index < accuracyStr.split('.')[1].length; index++) {\r\n zeroStr += '0';\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}.${zeroStr}`;\r\n }\r\n // 结果为小数的时候,需要补充修约精度的位数,如:0.3修约精度为0.01,则最终应该返回0.30\r\n else {\r\n const xsPart = retNumStr.split('.')[1];\r\n\r\n if (accuracyStr.split('.')[1].length > xsPart.length) {\r\n for (let index = 0; index < accuracyStr.split('.')[1].length - xsPart.length; index++) {\r\n zeroStr += '0';\r\n }\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}${zeroStr}`;\r\n }\r\n }\r\n },\r\n /**\r\n * 实现Excel中TREND(返回线性回归拟合线的一组纵坐标值[y值])公式的计算\r\n * @param x x轴数据集合\r\n * @param y y轴数据集合\r\n * @param xVal x轴的值\r\n * @returns\r\n */\r\n calcTrend: (x: Array<number>, y: Array<number>, xVal: number) => {\r\n let n = x.length;\r\n let sumX = 0,\r\n sumY = 0,\r\n sumXY = 0,\r\n sumXX = 0;\r\n for (let i = 0; i < n; i++) {\r\n sumX += x[i];\r\n sumY += y[i];\r\n sumXY += x[i] * y[i];\r\n sumXX += x[i] * x[i];\r\n }\r\n let slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);\r\n let intercept = (sumY - slope * sumX) / n;\r\n\r\n let predictedY = slope * xVal + intercept;\r\n\r\n if (slope + '' == 'NaN') {\r\n return { y: '', gs: '', xl: '', jj: '' };\r\n }\r\n\r\n //返回y轴趋势数据,以及公式\r\n return { y: predictedY, gs: `${slope}*x+${intercept}`, xl: slope, jj: intercept };\r\n },\r\n /**\r\n * 过滤掉数组中的null、空字符串或/符号等,并返回新的数组\r\n * @param dataSource 原始数组\r\n */\r\n filterNullEmptyErrArray: (dataSource: Array<any>) => {\r\n let retArr = dataSource.filter((item) => item != null && item != undefined && (item._error == null || item._error == undefined) && item != '/');\r\n\r\n return retArr;\r\n },\r\n};\r\n\r\n/**\r\n * 所有统计图表的ECharts配置\r\n */\r\nexport const EChartsUtilsAll = {\r\n /**\r\n * 沥青混合料-目标配合比设计-毛体积密度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart10: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0],\r\n yDataSource = yDataArr[0];\r\n\r\n // 原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData: any[] = [],\r\n yData: any[] = [];\r\n\r\n // 处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n // y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n // 检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 2.35,\r\n yAxisMin = 2.25,\r\n */\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.05, 0.01)),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.05, 0.01)),\r\n seriesData = [],\r\n upperLimit = null, // 上限\r\n lowerLimit = null,\r\n showLine = true; // 是否显示辅助线\r\n\r\n let points: any = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n // 计算峰值\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, 0.001))],\r\n coordX = [peakvalue[0], yAxisMin];\r\n\r\n // console.log('x范围:', xMin, xMax);\r\n // 输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, xMin);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, xMax);\r\n }\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, arrX[maxIndex]);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333', // X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ];\r\n pointData = [\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: peakvalue[1],\r\n symbolOffset: [0, 15],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n //return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a1';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n // 判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,// 是否显示外边框线\r\n // borderColor: '#f00',// 外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n // 提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n // 顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n // 图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, // 显示\r\n },\r\n selectedMode: 'multiple', // 用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, // 使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 40 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', // '#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n // splitNumber: 10, // 设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n // 设置y轴箭头效果\r\n show: true, // y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, // 平滑的线条\r\n // 设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', // 符号类型\r\n symbolSize: 6, // 符号大小 lineJson.lineColor\r\n // 线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n // 线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n // 线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], // 去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-稳定度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart11: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0],\r\n yDataSource = yDataArr[0];\r\n\r\n // 原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n // 处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n // y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n // 检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 2),\r\n yAxisMin = Math.floor(yMin - 2),\r\n seriesData = [],\r\n upperLimit = null, // 上限\r\n lowerLimit = 7.5, // 下限\r\n showLine = true; // 是否显示辅助线\r\n\r\n // 获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 2;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 2;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n // arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n // 计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // 获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; // 上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; // 下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n // 上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n // 向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n // 下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n // 向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n // 上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n // 下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n // 下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n // 只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n // 上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n // 上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n // 只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n // 上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n // 上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n // 上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n // 上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n // 输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, arrX[maxIndex]);\r\n }\r\n }\r\n\r\n // 峰值\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, 0.001))];\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [\r\n [\r\n {\r\n coord: [peakvalue[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', // X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ];\r\n pointData = [\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: peakvalue[1],\r\n symbolOffset: [0, 15],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n //return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a2';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-空隙率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart12: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [8.8, 5.9, 4.1, 3.3, 2.6];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 10,\r\n yAxisMin = 0,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 2),\r\n yAxisMin = Math.floor(yMin - 2),\r\n seriesData = [],\r\n upperLimit = 5, //上限\r\n lowerLimit = 3, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 2;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 2;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n if (upperIntersectionPoint.length > 0) {\r\n upperIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], upperLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n if (lowerIntersectionPoint.length > 0) {\r\n lowerIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], lowerLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n\r\n //上下线交点分别只有一个才求平均值\r\n if (upperIntersectionPoint.length == 1 && lowerIntersectionPoint.length == 1) {\r\n const avg = ((upperIntersectionPoint[0][0] + lowerIntersectionPoint[0][0]) / 2).toFixed(2);\r\n const avgXIndex = arrX.findIndex((n) => n == avg);\r\n // console.log('输出:', avg, avgXIndex);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, avg);\r\n }\r\n }\r\n lineData.push([\r\n {\r\n coord: [avg, yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [avg, arrY[avgXIndex]],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a3';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-流值\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart13: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [2.2, 2.5, 2.9, 3.4, 4.2];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 5,\r\n yAxisMin = 1,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 1),\r\n yAxisMin = Math.floor(yMin - 1),\r\n seriesData = [],\r\n upperLimit = null, //上限\r\n lowerLimit = 2, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 1;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 1;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [];\r\n pointData = [];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 25 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-矿料间隙率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart14: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [16.1, 15.2, 14.6, 14.8, 16];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 19.0,\r\n yAxisMin = 13.0,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 1),\r\n yAxisMin = Math.floor(yMin - 1),\r\n seriesData = [],\r\n upperLimit = null, //上限\r\n lowerLimit = 13.5, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 1;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 1;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [];\r\n pointData = [];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-有效沥青饱和度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart15: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [40.1, 59.8, 66.8, 74.5, 78.2];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 80,\r\n yAxisMin = 30,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 10),\r\n yAxisMin = Math.floor(yMin - 10),\r\n seriesData = [],\r\n upperLimit = 75, //上限\r\n lowerLimit = 60, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 10;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 10;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n if (upperIntersectionPoint.length > 0) {\r\n upperIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], upperLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n if (lowerIntersectionPoint.length > 0) {\r\n lowerIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], lowerLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n //上下线交点分别只有一个才求平均值\r\n if (upperIntersectionPoint.length == 1 && lowerIntersectionPoint.length == 1) {\r\n const avg = ((upperIntersectionPoint[0][0] + lowerIntersectionPoint[0][0]) / 2).toFixed(2);\r\n const avgXIndex = arrX.findIndex((n) => n == avg);\r\n // console.log('输出:', avg, avgXIndex);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, avg);\r\n }\r\n }\r\n lineData.push([\r\n {\r\n coord: [avg, yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [avg, arrY[avgXIndex]],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a4';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-汇总\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart16: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n // let lines = [\r\n // \t[3.5, 5.5],\r\n // \t[3.5, 5.5],\r\n // \t[4.21, 5.27],\r\n // \t[3.5, 5.5],\r\n // \t[3.5, 5.5],\r\n // \t[4.01, 5.03],\r\n // ],\r\n\r\n //原始数据\r\n let lines = [\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[0].row, chartExtJson.lqhhlHz[0].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[1].row, chartExtJson.lqhhlHz[1].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[2].row, chartExtJson.lqhhlHz[2].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[3].row, chartExtJson.lqhhlHz[3].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[4].row, chartExtJson.lqhhlHz[4].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[5].row, chartExtJson.lqhhlHz[5].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[6].row, chartExtJson.lqhhlHz[6].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[7].row, chartExtJson.lqhhlHz[7].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[8].row, chartExtJson.lqhhlHz[8].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[9].row, chartExtJson.lqhhlHz[9].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[10].row, chartExtJson.lqhhlHz[10].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[11].row, chartExtJson.lqhhlHz[11].col),\r\n ],\r\n ],\r\n xData = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMin = 0,\r\n yAxisMax = 6,\r\n yData = [0, 1, 2, 3, 4, 5, 6],\r\n yAxisData = ['VFA', 'VMA', '流值', '稳定度', '空隙率', '密度'],\r\n seriesData = [],\r\n showLine = true; //是否显示辅助线\r\n\r\n const title = 'OAC',\r\n xName = '油石比(%)',\r\n yName = 'VFA(%)',\r\n legendName = '图例1';\r\n let lineData = [];\r\n let pointData = [];\r\n let xMin = Math.max(...lines.map((item) => item[0]));\r\n let xMax = Math.min(...lines.map((item) => item[1]));\r\n\r\n lines.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], lines.length - index],\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n type: 'solid',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [item[1], lines.length - index],\r\n },\r\n ]);\r\n });\r\n if (showLine && xMin <= xMax) {\r\n //最小\r\n lineData.push([\r\n {\r\n coord: [xMin, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [xMin, 6],\r\n },\r\n ]);\r\n //最大\r\n lineData.push([\r\n {\r\n coord: [xMax, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [xMax, 6],\r\n },\r\n ]);\r\n pointData = [\r\n {\r\n xAxis: xMin,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OACmin';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: xMax,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OACmax';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n if (xMin <= xMax) {\r\n //平均值\r\n const avg = (xMin + xMax) / 2;\r\n lineData.push([\r\n {\r\n coord: [avg, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [avg, 6],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OAC2';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n\r\n if (isNaN(xMin)) {\r\n xMin = 0;\r\n }\r\n if (isNaN(xMax)) {\r\n xMax = 0;\r\n }\r\n // console.log('输出:', xMin, xMax);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, xMin);\r\n }\r\n if (chartExtJson.lqhhlSc2 != null && chartExtJson.lqhhlSc2 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc2.row, chartExtJson.lqhhlSc2.col, xMax);\r\n }\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n lines.forEach((item) => {\r\n yValIsAllNull = item.every((ele) => {\r\n return ele == '/';\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 10,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n axisLabel: {\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (data == 0) {\r\n return '';\r\n } else {\r\n return yAxisData[data - 1];\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n // data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 击实\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart30: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //设置是否选择校正jsIsJz的默认值\r\n if (chartExtJson != null && (chartExtJson.jsIsJz == null || chartExtJson.jsIsJz == undefined)) {\r\n chartExtJson.jsIsJz = true;\r\n }\r\n // console.log(config);\r\n\r\n let isTwoLine = xDataArr.length == 2;\r\n\r\n let xDataSource1 = xDataArr[0], // [1.6, 2.4, 3.5, 4.6, 5.3],\r\n xDataSource2 = isTwoLine ? xDataArr[1] : [], // [1.5, 2.4, 3.6, 4.3, 5.4],\r\n yDataSource1 = yDataArr[0], // [2.25, 2.29, 2.34, 2.29, 2.23],\r\n yDataSource2 = isTwoLine ? yDataArr[1] : []; // [2.27, 2.32, 2.36, 2.33, 2.26];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [],\r\n seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (\r\n /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item) &&\r\n item != 0 &&\r\n /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(yDataSource[index]) &&\r\n yDataSource[index] != 0\r\n ) {\r\n xData.push(item);\r\n yData.push(yDataSource[index]);\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n xAxisMax = Math.ceil(xMax + 0.1),\r\n xAxisMin = Math.trunc(xMin - 0.1),\r\n yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));\r\n\r\n //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)\r\n let cellValJzZjhsl, cellValJzZdgmd;\r\n if (chartExtJson != null && chartExtJson.jsIsJz) {\r\n if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {\r\n cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);\r\n }\r\n if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {\r\n cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);\r\n }\r\n\r\n //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {\r\n yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));\r\n }\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n // console.log('无法解决该线性系统');\r\n }\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]\r\n\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //重新设置i,防止i丢失精度\r\n i = Number(temp);\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n // console.log(chartExtJson);\r\n\r\n //默认输出精度\r\n let outJdZjhsl = 0.01,\r\n outJdZdgmd = 0.001;\r\n\r\n //顶点数据\r\n let outValZjhsl = 0,\r\n outValZdgmd = 0;\r\n\r\n //设置Sheet单元格的值(最佳含水率和最大干密度)\r\n if (chartExtJson != null) {\r\n // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);\r\n\r\n if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {\r\n outJdZjhsl = chartExtJson.jsZjhslJd;\r\n }\r\n if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {\r\n outJdZdgmd = chartExtJson.jsZdgmdJd;\r\n }\r\n\r\n if (arrX[maxIndex] == 0 && max == 0) {\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');\r\n } else {\r\n outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);\r\n outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);\r\n\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);\r\n }\r\n }\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //xData.forEach((item, index) => {\r\n //seriesData.push([item, yData[index]]);\r\n //});\r\n\r\n //计算峰值----目前没有公式 值写死的\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))],\r\n coordX = [peakvalue[0], yAxisMin],\r\n coordY = [xAxisMin, peakvalue[1]];\r\n\r\n let markPointObj = {\r\n data: [\r\n {\r\n xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),\r\n yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),\r\n symbolOffset: [0, 15],\r\n symbol: 'circle',\r\n symbolSize: 6,\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ],\r\n },\r\n markLineObj = {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: [\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333', //X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n [\r\n {\r\n coord: coordY,\r\n lineStyle: {\r\n color: '#333', //y轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ],\r\n };\r\n\r\n //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)\r\n if (chartExtJson.jsIsJz && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZjhsl) && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZdgmd)) {\r\n markLineObj = null;\r\n markPointObj.data[0].label = null;\r\n markPointObj.data[0].symbolOffset = null;\r\n markPointObj.data[0].itemStyle.color = '#F56C6C';\r\n markPointObj.data[0].xAxis = cellValJzZjhsl;\r\n markPointObj.data[0].yAxis = cellValJzZdgmd;\r\n markLineObj = null;\r\n }\r\n\r\n let seriesDataObj = {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[isTwoLineData ? 1 : 0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: isTwoLineData ? 'dotted' : 'solid',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[isTwoLineData ? 1 : 0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: isShowMarkPoint ? markPointObj : null,\r\n markLine: isShowMarkLine ? markLineObj : null,\r\n };\r\n\r\n return {\r\n xAxisMin: xAxisMin,\r\n xAxisMax: xAxisMax,\r\n yAxisMin: yAxisMin,\r\n yAxisMax: yAxisMax,\r\n xData: xData,\r\n seriesDataObj: seriesDataObj,\r\n maxPointData: [arrX[maxIndex], max],\r\n };\r\n };\r\n\r\n let xAxisMin = 0,\r\n xAxisMax = 0,\r\n yAxisMin = 0,\r\n yAxisMax = 0,\r\n xData = [],\r\n seriesData = [],\r\n maxPointDataX = 0,\r\n maxPointDataY = 0;\r\n\r\n let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false),\r\n lineObj2;\r\n if (isTwoLine) {\r\n lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);\r\n }\r\n\r\n //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错\r\n if (lineObj1 == undefined || lineObj1 == null) {\r\n return;\r\n }\r\n\r\n //一条线的时候\r\n if (!isTwoLine) {\r\n xAxisMin = lineObj1.xAxisMin;\r\n xAxisMax = lineObj1.xAxisMax;\r\n yAxisMin = lineObj1.yAxisMin;\r\n yAxisMax = lineObj1.yAxisMax;\r\n xData = lineObj1.xData;\r\n seriesData.push(lineObj1.seriesDataObj);\r\n }\r\n //2条线的时候\r\n else {\r\n if (lineObj2 == undefined || lineObj2 == null) {\r\n return;\r\n }\r\n\r\n xAxisMax = lineObj1.xAxisMax;\r\n if (lineObj2.xAxisMax > xAxisMax) {\r\n xAxisMax = lineObj2.xAxisMax;\r\n }\r\n xAxisMin = lineObj1.xAxisMin;\r\n if (lineObj2.xAxisMin < xAxisMin) {\r\n xAxisMin = lineObj2.xAxisMin;\r\n }\r\n yAxisMax = lineObj1.yAxisMax;\r\n if (lineObj2.yAxisMax > yAxisMax) {\r\n yAxisMax = lineObj2.yAxisMax;\r\n }\r\n yAxisMin = lineObj1.yAxisMin;\r\n if (lineObj2.yAxisMin < yAxisMin) {\r\n yAxisMin = lineObj2.yAxisMin;\r\n }\r\n\r\n lineObj1.xData.forEach((item) => {\r\n xData.push(item);\r\n });\r\n lineObj2.xData.forEach((item) => {\r\n xData.push(item);\r\n });\r\n\r\n seriesData.push(lineObj1.seriesDataObj);\r\n seriesData.push(lineObj2.seriesDataObj);\r\n\r\n maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;\r\n maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;\r\n\r\n // console.log(\r\n // \t\"两条线最大点的平均值:\",\r\n // \tmaxPointDataX,\r\n // \tmaxPointDataY\r\n // );\r\n\r\n //默认输出精度\r\n let outJdZjhsl = 0.01,\r\n outJdZdgmd = 0.001;\r\n\r\n //顶点数据\r\n let outValZjhsl = 0,\r\n outValZdgmd = 0;\r\n\r\n //设置Sheet单元格的值(最佳含水率和最大干密度)\r\n if (chartExtJson != null) {\r\n // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);\r\n\r\n if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {\r\n outJdZjhsl = chartExtJson.jsZjhslJd;\r\n }\r\n if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {\r\n outJdZdgmd = chartExtJson.jsZdgmdJd;\r\n }\r\n\r\n if (maxPointDataX == 0 && maxPointDataY == 0) {\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');\r\n } else {\r\n outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);\r\n outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);\r\n\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);\r\n }\r\n }\r\n }\r\n\r\n //判断数据是否为/,‘’,null,undefined\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.data[0].value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 40 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: seriesData,\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 筛分\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart50: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = '', //config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName;\r\n\r\n // x轴原始数据、y轴原始数据、y轴原始数据(上限)、y轴原始数据(下限)\r\n const xDataSourceOld = xDataArr[0],\r\n yDataSourceOld = yDataArr[0],\r\n yDataSourceSxOld = yDataArr[1],\r\n yDataSourceXxOld = yDataArr[2];\r\n const allData: any[] = [];\r\n xDataSourceOld.forEach((item, index) => {\r\n allData.push({\r\n x: item,\r\n y: yDataSourceOld[index],\r\n ySx: yDataSourceSxOld[index],\r\n yXx: yDataSourceXxOld[index],\r\n });\r\n });\r\n allData.sort(function (a, b) {\r\n return a.x - b.x;\r\n });\r\n\r\n const xDataSource: any[] = [],\r\n yDataSource: any[] = [],\r\n yDataSourceSx: any[] = [],\r\n yDataSourceXx: any[] = [];\r\n\r\n // 记录上限或下限中值为null的个数\r\n let sxValNullCount = 0;\r\n yDataSourceSxOld.forEach((item, index) => {\r\n if (item == null || item == '/') {\r\n sxValNullCount++;\r\n }\r\n });\r\n\r\n // 如果上限或下限值中的所有值都为null,则只展示筛分曲线的折线\r\n if (sxValNullCount == yDataSourceSxOld.length) {\r\n allData.forEach((item, index) => {\r\n xDataSource.push(item.x);\r\n yDataSource.push(item.y);\r\n yDataSourceSx.push(item.ySx);\r\n yDataSourceXx.push(item.yXx);\r\n });\r\n } else {\r\n // 只获取上限或下限中值不为null的点\r\n allData.forEach((item, index) => {\r\n if (item.ySx != null && item.ySx != '/' && item.yXx != null && item.yXx != '/') {\r\n xDataSource.push(item.x);\r\n yDataSource.push(item.y);\r\n yDataSourceSx.push(item.ySx);\r\n yDataSourceXx.push(item.yXx);\r\n }\r\n });\r\n }\r\n\r\n // x轴需要的数据(x轴原始数据的0.45次方,并修约0.01)、x轴需要的上限数据(x轴原始数据的0.45次方,并修约0.01)、x轴需要的下限数据(x轴原始数据的0.45次方,并修约0.01)、标记线需要的数据\r\n let xData: any[] = [],\r\n xDataSx: any[] = [],\r\n xDataXx: any[] = [],\r\n markLineData: any[] = [];\r\n\r\n // x和y轴的字体大小\r\n const xyFontSize = 10;\r\n\r\n // 组装数据\r\n xDataSource.forEach((item, index) => {\r\n // 得到x轴原始数据的0.45次方值,并修约0.001\r\n const val045 = Number(EChartsUtilsComm.getRound(item ** 0.45, 0.001));\r\n\r\n xData.push([val045, yDataSource[index]]);\r\n markLineData.push({\r\n name: item + '',\r\n xAxis: val045,\r\n label: {\r\n show: xDataSource.length >= 6 && index % 2 != 0 && index < 6 ? false : true, // 控制x轴的名称某些点是否显示,避免重叠的情况\r\n fontSize: xyFontSize,\r\n },\r\n });\r\n\r\n xDataSx.push([val045, yDataSourceSx[index]]);\r\n xDataXx.push([val045, yDataSourceXx[index]]);\r\n });\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, data) => {\r\n const name = type == 1 ? '筛分曲线' : type == 2 ? '上限' : '下限';\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //type == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n let obj = {\r\n name: name,\r\n type: 'line',\r\n smooth: true, // 平滑的线条\r\n // 设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol,\r\n symbolSize: 5,\r\n z: 10, // 控制曲线的浮动层级,避免在markLine下方被遮住\r\n // 线条的颜色\r\n lineStyle: {\r\n color: color,\r\n // 线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n // 线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n connectNulls: true, // 是否连接空数据\r\n markLine: {\r\n symbol: '', // 取消箭头\r\n silent: true, // 取消鼠标hover事件\r\n label: {\r\n // 标线的文本,模拟x轴显示的内容\r\n position: 'start', // 改变label位置\r\n //rotate: 45, // 设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)\r\n // backgroundColor:'#fff'\r\n // color:'#f00',// 文字颜色\r\n formatter: (data) => {\r\n return data.name;\r\n },\r\n },\r\n lineStyle: { color: '#e0e6f1', type: 'solid' },\r\n data: markLineData,\r\n },\r\n };\r\n\r\n return obj;\r\n };\r\n\r\n // 验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (\r\n yDataSourceSxOld.some((item) => item != null && item != undefined && item != '/') ||\r\n yDataSourceXxOld.some((item) => item != null && item != undefined && item != '/')\r\n ) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,// 是否显示外边框线\r\n // borderColor: '#f00',// 外边框线颜色\r\n top: 20,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n // 提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n if (datas && datas[0].data.length > 1) {\r\n let xObj = markLineData.filter((item) => item.xAxis == datas[0].data[0]);\r\n\r\n return datas[0].seriesName + '(' + xObj[0].name + ')' + ':' + datas[0].data[1];\r\n } else {\r\n return datas[0].data;\r\n }\r\n },\r\n },\r\n // 顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 5,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n // 图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n left: 'center',\r\n data: ['筛分曲线', '上限', '下限'],\r\n selected: {\r\n 筛分曲线: true, // 显示\r\n 上限: true, // 显示\r\n 下限: true, // 显示\r\n },\r\n selectedMode: 'multiple', // 用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n axisTick: { show: false }, // 隐藏刻度线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n // 网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine\r\n splitLine: {\r\n show: false, // 隐藏分割线\r\n },\r\n min: xData.length > 0 ? (xData[0][0] > 0.2 ? xData[0][0] - 0.2 : 0) : null, //控制x轴的最小值\r\n max: xData.length > 0 ? xData[xData.length - 1][0] + 0.1 : null,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', // '#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n splitNumber: 10, // 设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLabel: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, xData), getLineObj(2, xDataSx), getLineObj(3, xDataXx)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 界限含水率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart70: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //此图形排除了图形数据不正确的情况,如果数据不对,则直接返回{}\r\n if (\r\n xDataArr[0].some((item) => item == null || item == '' || item == undefined) ||\r\n yDataArr[0].some((item) => item == null || item == '' || item == undefined)\r\n ) {\r\n return {};\r\n }\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [22.9, 32.4, 36.9],\r\n yData = yDataArr[0], // [2.2, 11.6, 19.8],\r\n ztzl = 100, //锥体质量(g),100或76\r\n cllx = '砂类土', //材料类型,砂类土或细粒土\r\n logx = [], // c,b,a\r\n logy = [];\r\n\r\n //获取锥体质量和材料类型\r\n if (chartExtJson != null) {\r\n let curZtzl = sheet.getValue(chartExtJson.jxhslZtzl.row, chartExtJson.jxhslZtzl.col),\r\n curCllx = sheet.getValue(chartExtJson.jxhslCllx.row, chartExtJson.jxhslCllx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curZtzl)) {\r\n curZtzl = Number(curZtzl);\r\n if (curZtzl == 100 || curZtzl == 76) {\r\n ztzl = curZtzl;\r\n }\r\n }\r\n if (curCllx == '砂类土' || curCllx == '细粒土') {\r\n cllx = curCllx;\r\n }\r\n }\r\n\r\n // console.log(ztzl, cllx);\r\n\r\n //先求对数\r\n for (const item1 of xData) {\r\n logx.push(Math.log(item1));\r\n }\r\n for (const item2 of yData) {\r\n logy.push(Math.log(item2));\r\n }\r\n //求ab / ac 斜率 公式k=y2-y1 / x2-x1\r\n let abk = (logy[2] - logy[1]) / (logx[2] - logx[1]);\r\n let ack = (logy[2] - logy[0]) / (logx[2] - logx[0]);\r\n\r\n const xMax = Math.max.apply(Math, xData),\r\n xMin = Math.min.apply(Math, xData),\r\n xAxisMax = xMax + 1,\r\n xAxisMin = xMin - 0.3,\r\n yMax = Math.max.apply(Math, yData),\r\n yMin = Math.min.apply(Math, yData),\r\n yAxisMax = yMax + 1,\r\n yAxisMin = yMin - 2,\r\n dropName = ['C', 'B', 'A'],\r\n seriesData = [];\r\n\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index], dropName[index]]);\r\n });\r\n\r\n //求ab / ac 延长线方法\r\n function getYOnLine(point1, point2, point3X) {\r\n const logX1 = Math.log(point1[0]);\r\n const logY1 = Math.log(point1[1]);\r\n const logX2 = Math.log(point2[0]);\r\n const logY2 = Math.log(point2[1]);\r\n const slope = (logY2 - logY1) / (logX2 - logX1);\r\n const logPoint3X = Math.log(point3X);\r\n const logY = logY1 + slope * (logPoint3X - logX1);\r\n return Math.exp(logY);\r\n }\r\n\r\n let point3X = 20;\r\n let abd3 = getYOnLine([xData[2], yData[2]], [xData[1], yData[1]], point3X);\r\n let zero_ab = [20, abd3];\r\n let acd3 = getYOnLine([xData[2], yData[2]], [xData[0], yData[0]], point3X);\r\n let zero_ac = [20, acd3];\r\n\r\n // console.log(zero_ab, 'zero_ab');\r\n // console.log(zero_ac, 'zero_ac');\r\n\r\n //第一次计算D-y值,代入A点的X坐标\r\n function HpCoordinates(wl) {\r\n let hp;\r\n if (cllx == '砂类土') {\r\n //砂类土\r\n hp = 29.6 - 1.22 * wl + 0.017 * wl * wl - 0.0000744 * wl * wl * wl;\r\n } else {\r\n //细粒土\r\n hp = wl / (0.524 * wl - 7.606);\r\n }\r\n return hp;\r\n }\r\n\r\n let coordX = [];\r\n let coordY = [];\r\n let point_hp = [];\r\n\r\n let Dy = HpCoordinates(xData[2]);\r\n let Dylog = Math.log(Dy);\r\n let hp0_xab = (abk * logx[2] - (logy[2] - Dylog)) / abk;\r\n let hp0_xac = (ack * logx[2] - (logy[2] - Dylog)) / ack;\r\n if (hp0_xab - hp0_xac >= 2) {\r\n //return '超差!';\r\n }\r\n let hp0_xcenter = Math.exp((hp0_xab + hp0_xac) / 2);\r\n let Dxlog = Math.log(hp0_xcenter);\r\n let adk = (logy[2] - Dylog) / (logx[2] - Dxlog); //AD 斜率\r\n\r\n //输出的hp、wl和wp\r\n let scHp, scWl, scWp;\r\n\r\n //判断锥数\r\n if (ztzl == 76) {\r\n //计算wl ad直线上y=17时,对应的x值\r\n let wly = Math.log(17);\r\n let wlx = (adk * logx[2] - (logy[2] - wly)) / adk;\r\n let wl = Math.exp(wlx);\r\n\r\n //计算WP:ad直线上y=2时,对应的x值\r\n let wpy = Math.log(2);\r\n let wpx = (adk * logx[2] - (logy[2] - wpy)) / adk;\r\n let wp = Math.exp(wpx);\r\n\r\n point_hp = [hp0_xcenter, Dy];\r\n coordX = [hp0_xcenter, yAxisMin];\r\n coordY = [xAxisMin, Dy];\r\n seriesData.push([hp0_xcenter, Dy, 'Hp']);\r\n\r\n scHp = Dy;\r\n scWl = wl;\r\n scWp = wp;\r\n // console.log('输出:', wp, wl, Dy);\r\n } else if (ztzl == 100) {\r\n //计算wl的值----先求AD斜率再代入y=20,求X (X即Wl的值)\r\n let wly = Math.log(20);\r\n let wlx = (adk * logx[2] - (logy[2] - wly)) / adk;\r\n let wl = Math.exp(wlx);\r\n\r\n //第二次计算hp值\r\n let hpy2 = HpCoordinates(wl);\r\n let hpylog2 = Math.log(hpy2);\r\n let hp0_xab2 = (abk * logx[2] - (logy[2] - hpylog2)) / abk;\r\n let hp0_xac2 = (ack * logx[2] - (logy[2] - hpylog2)) / ack;\r\n\r\n let hp0_xcenter2 = Math.exp((hp0_xab2 + hp0_xac2) / 2);\r\n let wp = hp0_xcenter2;\r\n\r\n point_hp = [hp0_xcenter2, hpy2];\r\n\r\n coordX = [hp0_xcenter2, yAxisMin];\r\n coordY = [xAxisMin, hpy2];\r\n seriesData.push([hp0_xcenter2, hpy2, 'Hp']);\r\n\r\n scHp = hpy2;\r\n scWl = wl;\r\n scWp = wp;\r\n // console.log('输出:', wp, wl, hpy2);\r\n }\r\n\r\n //判断是否是一个数字\r\n if (isNaN(scHp) || isNaN(scWl) || isNaN(scWp)) {\r\n scHp = 0;\r\n scWl = 0;\r\n scWp = 0;\r\n }\r\n\r\n //设置Sheet单元格的值(输出hp、wl和wp)\r\n if (chartExtJson != null) {\r\n //默认输出精度\r\n let outJdHp = 0.01,\r\n outJdWl = 0.01,\r\n outJdWp = 0.01;\r\n if (chartExtJson.jxhslScHpJd != null && chartExtJson.jxhslScHpJd != undefined) {\r\n outJdHp = chartExtJson.jxhslScHpJd;\r\n }\r\n if (chartExtJson.jxhslScWlJd != null && chartExtJson.jxhslScWlJd != undefined) {\r\n outJdWl = chartExtJson.jxhslScWlJd;\r\n }\r\n if (chartExtJson.jxhslScWpJd != null && chartExtJson.jxhslScWpJd != undefined) {\r\n outJdWp = chartExtJson.jxhslScWpJd;\r\n }\r\n\r\n if (chartExtJson.jxhslScHp != null && chartExtJson.jxhslScHp != undefined) {\r\n if (scHp == 0) {\r\n sheet.setValue(chartExtJson.jxhslScHp.row, chartExtJson.jxhslScHp.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScHp.row, chartExtJson.jxhslScHp.col, EChartsUtilsComm.getRound(scHp, outJdHp));\r\n }\r\n }\r\n if (chartExtJson.jxhslScWl != null && chartExtJson.jxhslScWl != undefined) {\r\n if (scWl == 0) {\r\n sheet.setValue(chartExtJson.jxhslScWl.row, chartExtJson.jxhslScWl.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScWl.row, chartExtJson.jxhslScWl.col, EChartsUtilsComm.getRound(scWl, outJdWl));\r\n }\r\n }\r\n if (chartExtJson.jxhslScWp != null && chartExtJson.jxhslScWp != undefined) {\r\n if (scWp == 0) {\r\n sheet.setValue(chartExtJson.jxhslScWp.row, chartExtJson.jxhslScWp.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScWp.row, chartExtJson.jxhslScWp.col, EChartsUtilsComm.getRound(scWp, outJdWp));\r\n }\r\n }\r\n }\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (\r\n yData.some((item) => item != null && item != undefined && item != '/') ||\r\n yData.some((item) => item != null && item != undefined && item != '/')\r\n ) {\r\n yValIsAllNull = false;\r\n }\r\n let option = {\r\n grid: {\r\n top: 20,\r\n left: !yValIsAllNull ? 50 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log',\r\n min: xAxisMin,\r\n max: xAxisMax,\r\n interval: 0,\r\n axisTick: {\r\n show: false,\r\n alignWithLabel: true,\r\n },\r\n splitLine: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n show: false,\r\n },\r\n },\r\n yAxis: {\r\n type: 'log',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n min: yAxisMin,\r\n max: yAxisMax,\r\n interval: 0,\r\n axisTick: {\r\n show: false,\r\n alignWithLabel: true,\r\n },\r\n splitLine: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n show: false,\r\n },\r\n },\r\n series: [\r\n {\r\n name: legendName,\r\n data: seriesData,\r\n type: 'scatter',\r\n symbol: 'circle',\r\n smooth: false,\r\n symbolSize: 6,\r\n label: {\r\n show: true,\r\n formatter: function (param) {\r\n return param.data[2];\r\n },\r\n position: 'right',\r\n minMargin: 2,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'],\r\n silent: true,\r\n label: {\r\n show: true,\r\n position: 'start',\r\n color: '#000000',\r\n },\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n },\r\n data: [\r\n { xAxis: seriesData[0][0] },\r\n { xAxis: seriesData[1][0] },\r\n { xAxis: seriesData[2][0] },\r\n { yAxis: seriesData[0][1] },\r\n { yAxis: seriesData[1][1] },\r\n { yAxis: seriesData[2][1] },\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n },\r\n },\r\n { coord: point_hp }, //Hp---x\r\n ],\r\n [\r\n {\r\n coord: coordY,\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed', //dashed dotted\r\n },\r\n },\r\n { coord: point_hp }, //Hp----y\r\n ],\r\n ],\r\n },\r\n },\r\n {\r\n //a-b连线\r\n type: 'line',\r\n data: [\r\n [xData[2], yData[2]],\r\n [xData[1], yData[1]],\r\n ],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-b 延长线\r\n type: 'line',\r\n data: [\r\n [xData[1], yData[1]],\r\n [zero_ab[0], zero_ab[1]],\r\n ],\r\n lineStyle: {\r\n color: '#000000',\r\n type: 'dashed',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-c连线\r\n type: 'line',\r\n data: [\r\n [xData[2], yData[2]],\r\n [xData[0], yData[0]],\r\n ],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-c 延长线\r\n type: 'line',\r\n data: [\r\n [xData[0], yData[0]],\r\n [zero_ac[0], zero_ac[1]],\r\n ],\r\n lineStyle: {\r\n color: '#000000',\r\n type: 'dashed',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-Hp连线\r\n type: 'line',\r\n data: [[xData[2], yData[2]], point_hp],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 水泥、石灰标准曲线\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart90: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //y轴原始数据\r\n let yDataSource = yDataArr[0]; // [1.2, 5.6, 10.8, 16, 20.8];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x轴的数据\r\n let xData = xDataArr[0]; // [0, 2, 4, 6, 8];\r\n\r\n //重新处理x轴和y轴的数据,排除x轴后面为0的数据(因为有可能在单元格中,最后一个单元格的值可能没有填,这时候默认传的是0)\r\n let xDataCl = [],\r\n yDataSourceCl = [];\r\n for (let i = 0; i < xData.length; i++) {\r\n if (xData[i] != '/' && (i == 0 || (i > 0 && xData[i] != 0))) {\r\n xDataCl.push(xData[i]);\r\n yDataSourceCl.push(yDataSource[i]);\r\n } else if (i > 0 && xData[i] == 0) {\r\n break;\r\n }\r\n }\r\n xData = xDataCl;\r\n yDataSource = yDataSourceCl;\r\n\r\n //series的data数据、series的markPoint的data数据、series的markLine的data数据\r\n let seriesData = [],\r\n markPointData = [],\r\n markLineData = [...xData];\r\n\r\n //此目的是显示更多的x轴数据\r\n //假设x轴原始数据为[0, 2, 4, 6, 8],在这个数组中没有1、3、5等数据,此时就可以通过下面的方式进行增加\r\n /*\r\n\t\tfor (let i = 0; i < 20; i++) {\r\n\t\t\tif (!markLineData.some((item) => item == i)) {\r\n\t\t\t\tmarkLineData.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\t\t*/\r\n\r\n //获取y轴趋势公式对象\r\n const gsS = EChartsUtilsComm.calcTrend(xData, yDataSource, xData[0]);\r\n\r\n //输出方程表达式\r\n if (chartExtJson != null) {\r\n if (chartExtJson.jxhslSnShScfc != null && chartExtJson.jxhslSnShScfc != undefined) {\r\n // console.log('输出公式:',`Y=${getRound(gsS.xl,0.0001)}X+${getRound(gsS.jj,0.0001)}`)\r\n if (gsS.xl == '' || gsS.jj == '') {\r\n sheet.setValue(chartExtJson.jxhslSnShScfc.row, chartExtJson.jxhslSnShScfc.col, '/');\r\n } else {\r\n sheet.setValue(\r\n chartExtJson.jxhslSnShScfc.row,\r\n chartExtJson.jxhslSnShScfc.col,\r\n `Y=${EChartsUtilsComm.getRound(gsS.xl, 0.0001)}X+${EChartsUtilsComm.getRound(gsS.jj, 0.0001)}`\r\n );\r\n }\r\n }\r\n }\r\n\r\n let yDataCopy = [];\r\n //获取y轴原始数据对应的趋势数据\r\n xData.forEach((item, index) => {\r\n let curYData = Number(EChartsUtilsComm.getRound(eval(gsS.gs.replace('x', item + '')), 0.01));\r\n if (isNaN(curYData)) {\r\n curYData = 0;\r\n }\r\n\r\n seriesData.push([item, curYData]);\r\n yDataCopy.push(curYData);\r\n markPointData.push({\r\n xAxis: item,\r\n yAxis: yDataSource[index],\r\n symbol: 'circle',\r\n symbolSize: 6,\r\n });\r\n\r\n //console.log(curYData, \"curYData\")\r\n });\r\n\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == 0 || item[1] == null || item[1] == undefined) {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yDataCopy.some((item) => item != 0 || item[1] == null || item[1] == undefined)) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 22,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].value[0] + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n opacity: 0,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: markPointData,\r\n },\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: markLineData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 延迟时间-强度曲线\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart110: (\r\n config: EChartsUtilsConfigModel,\r\n xDataArr: Array<Array<any>>,\r\n yDataArr: Array<Array<any>>,\r\n xDataArrSource: Array<Array<any>>,\r\n yDataArrSource: Array<Array<any>>\r\n ) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n const xDataSource = xDataArrSource[0]; // ['0.0','1.0','2.0','3.0','4.0','5.0'];\r\n\r\n let xData = [];\r\n xDataSource.forEach((item, index) => {\r\n if (item == '/') {\r\n xData.push(item);\r\n } else {\r\n xData.push(Number(item));\r\n }\r\n });\r\n\r\n //y轴的数据\r\n let yData = yDataArr[0]; // [4.4,4.3,4.3,4.2,4.1,3.7];\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n if (item != '/' && item != undefined && item != null) {\r\n seriesData.push([item, yData[index]]);\r\n }\r\n });\r\n\r\n let yValIsAllNull = false;\r\n if (seriesData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 25,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category', //设置x轴为对数坐标轴\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n let curXName = '';\r\n for (let i = 0; i < xData.length; i++) {\r\n if (xData[i] == value) {\r\n curXName = xDataSource[i];\r\n if (curXName == '/') {\r\n curXName = '';\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return curXName;\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n return option;\r\n },\r\n /**\r\n * 颗粒组成(筛分法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart130: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n // console.log(config);\r\n // console.log(xDataArr);\r\n // console.log(yDataArr);\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [60, 40, 20, 10, 5, 2, 1, 0.5, 0.25, 0.075],\r\n yData = yDataArr[0]; // [100.0, 100.0, 88.3, 69.3, 46.7, 27.0, 19.7, 5.6, 0.5, 0.3];\r\n let xMin = 0.01,\r\n xMax = 200;\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item == '筛底' ? 0 : item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n if (yValIsAllNull) {\r\n xMin = null;\r\n xMax = null;\r\n }\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log', //设置x轴为对数坐标轴\r\n logBase: 10, //可以设置对数轴的底数,默认为10\r\n inverse: true,\r\n min: xMin,\r\n max: xMax,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 回弹模量 (承载板法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart150: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [25, 50, 100, 150, 200],\r\n yData = yDataArr[0]; // [0.72, 1.07, 1.87, 2.63, 3.48];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 55,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 10,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 18,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n position: 'top', //设置x轴在顶部显示\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: xData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 土的回弹模量 (强度仪法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart170: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [25, 50, 100, 150, 200],\r\n yData = yDataArr[0]; // [0.72, 1.07, 1.87, 2.63, 3.48];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 55,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 10,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 18,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n position: 'top', //设置x轴在顶部显示\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: xData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 28d抗压强度与胶水比关系\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart190: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [2.32, 2.5, 2.7],\r\n yData = yDataArr[0]; // [42.5, 47.1, 49.1];\r\n\r\n //处理数据\r\n xData = xData.filter((item) => item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined));\r\n yData = yData.filter((item) => item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined));\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item == null || item == undefined || item == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 混凝土拌合物含气量\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart210: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n //x和y轴的原始数据\r\n let xDataSource = xDataArr[0], // [0.093, 0.081, 0.068, 0.063, 0.057, 0.052, 0.049, 0.044, 0.041, 0.038, 0.036],\r\n yDataSource = yDataArr[0]; // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //series需要的数据\r\n const seriesData = [];\r\n\r\n for (let i = xDataSource.length - 1; i >= 0; i--) {\r\n const item = xDataSource[i];\r\n\r\n if (item != null && item != undefined && item != '/' && (item._error == null || item._error == undefined)) {\r\n seriesData.push([item, yDataSource[i]]);\r\n }\r\n }\r\n\r\n //x和y轴的字体大小\r\n const xyFontSize = 10;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xDataSource.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xDataSource.forEach((item) => {\r\n if (item == null || item == undefined || item == '/' || (item._error != null && item._error != undefined)) {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xDataSource.length) {\r\n yValIsAllNull = true;\r\n //xDataSource = [];\r\n }\r\n if (yDataSource.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n const getXline = () => {\r\n let arr = [];\r\n [0, 0.02, 0.04, 0.06, 0.08, 0.1].forEach((val) => {\r\n xDataSource.forEach((item) => {\r\n let obj: any = { xAxis: '' };\r\n\r\n if (item == '/') {\r\n obj.xAxis = '';\r\n arr.push(obj);\r\n } else {\r\n obj.xAxis = val;\r\n arr.push(obj);\r\n }\r\n });\r\n });\r\n\r\n //去重\r\n let uniqueData = arr.filter((item, index, self) => index === self.findIndex((t) => t.xAxis == item.xAxis));\r\n return nullCount == xDataSource.length ? [] : uniqueData;\r\n };\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: !yValIsAllNull && seriesData.length > 0 ? 30 : 25,\r\n right: 10,\r\n bottom: 40,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].value[0] + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull && seriesData.length > 0 ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n axisLabel: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n fontSize: xyFontSize,\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: getXline(),\r\n // data: [0, 0.02, 0.04, 0.06, 0.08, 0.1].map((val) => {\r\n // return {\r\n // xAxis: val,\r\n // }\r\n // }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 混凝土拌合物凝结时间\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart230: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n /*\r\n\t\t\t此处需要注意的是,如果单元格A3=A1-A2,就需要将A3=TEXT(A1-A2, \"h\"\":\"\"m\")\r\n\r\n\t\t\tExcel中默认时间相减得到的是天为单位,因此此处使用了TEXT函数来格式化相减的时间差格式\r\n\r\n\t\t\t=TEXT(A1-A2, \"h\"\":\"\"m\")\r\n\t\t\t=INT(A1-A2) & \"天\" & TEXT(A1-A2, \"h\"\"小时\"\"m\"\"分\"\"\")\r\n\r\n\t\t*/\r\n\r\n //折线的数量\r\n let lineCount = xDataArr.length;\r\n\r\n //原始数据\r\n let xDataSource1 = [], // ['6:20', '6:50', '7:20', '7:50', '7:56', '8:26', '8:56', '9:26', '9:56', '10:11'],\r\n xDataSource2 = [], // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n xDataSource3 = [], // ['6:10', '6:40', '7:10', '7:40', '8:03', '8:13', '8:42', '9:12', '9:40', '10:12'],\r\n yDataSource1 = [], // [0.8, 1.2, 2.2, 3.4, 3.6, 7.8, 11.8, 16.6, 24.6, 28.2],\r\n yDataSource2 = [], // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n yDataSource3 = []; // [0.7, 1, 1.9, 3, 3.3, 3.5, 8.2, 13.8, 20.2, 28.2];\r\n\r\n //折线1\r\n xDataSource1 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[0]); // ['6:20', '6:50', '7:20', '7:50', '7:56', '8:26', '8:56', '9:26', '9:56', '10:11'],\r\n yDataSource1 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[0]); // [0.8, 1.2, 2.2, 3.4, 3.6, 7.8, 11.8, 16.6, 24.6, 28.2],\r\n\r\n //折线2\r\n if (lineCount == 2) {\r\n xDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[1]); // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n yDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[1]); // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n }\r\n //折线3\r\n if (lineCount == 3) {\r\n xDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[1]); // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n yDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[1]); // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n xDataSource3 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[2]); // ['6:10', '6:40', '7:10', '7:40', '8:03', '8:13', '8:42', '9:12', '9:40', '10:12'],\r\n yDataSource3 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[2]); // [0.7, 1, 1.9, 3, 3.3, 3.5, 8.2, 13.8, 20.2, 28.2];\r\n }\r\n\r\n //3条线的x轴数据\r\n let xData1 = [],\r\n xData2 = [],\r\n xData3 = [];\r\n\r\n //组装数据\r\n\r\n xDataSource1.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData1.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData1.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData1.push(curItemMins);\r\n }\r\n });\r\n\r\n xDataSource2.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData2.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData2.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData2.push(curItemMins);\r\n }\r\n });\r\n\r\n xDataSource3.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData3.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData3.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData3.push(curItemMins);\r\n }\r\n });\r\n\r\n //x轴数据前后增加一个点,y轴数据前后也增加一个点\r\n if (xDataSource1.length > 0) {\r\n xData1.push(xData1[xData1.length - 1] + 20);\r\n xData1.unshift(xData1[0] - 20);\r\n yDataSource1.push(null);\r\n yDataSource1.unshift(null);\r\n }\r\n\r\n if (lineCount == 2) {\r\n if (xDataSource2.length > 0) {\r\n xData2.push(xData2[xData2.length - 1] + 20);\r\n xData2.unshift(xData2[0] - 20);\r\n yDataSource2.push(null);\r\n yDataSource2.unshift(null);\r\n }\r\n }\r\n if (lineCount == 3) {\r\n if (xDataSource3.length == 0) {\r\n xData2.push(xData2[xData2.length - 1] + 20);\r\n xData2.unshift(xData2[0] - 20);\r\n yDataSource2.push(null);\r\n yDataSource2.unshift(null);\r\n xData3.push(xData3[xData3.length - 1] + 20);\r\n xData3.unshift(xData3[0] - 20);\r\n yDataSource3.push(null);\r\n yDataSource3.unshift(null);\r\n }\r\n }\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName;\r\n\r\n //获取xAxis需要的数据\r\n const getxAxisObj = (type, data) => {\r\n return {\r\n type: 'category',\r\n data: data,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n show: type == 1,\r\n splitLine: {\r\n show: true,\r\n },\r\n };\r\n };\r\n\r\n let xAxisData = [getxAxisObj(1, xData1)];\r\n if (lineCount == 2) {\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n }\r\n if (lineCount == 3) {\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n }\r\n\r\n //获取series需要的数据\r\n const getLineObj = (type, data) => {\r\n const name = type == 1 ? '第一组' : type == 2 ? '第二组' : '第三组';\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color =\r\n type == 1 && lineData.length >= 1\r\n ? lineData[0].lineColor\r\n : type == 2 && lineData.length >= 2\r\n ? lineData[1].lineColor\r\n : type == 3 && lineData.length >= 3\r\n ? lineData[2].lineColor\r\n : '#000';\r\n\r\n let obj = {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n };\r\n\r\n return obj;\r\n };\r\n\r\n //series: [getLineObj(1, yDataSource1), getLineObj(2, yDataSource2), getLineObj(3, yDataSource3)],\r\n let seriesData = [getLineObj(1, yDataSource1)];\r\n if (lineCount == 2) {\r\n if (yDataSource2.length > 0) {\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n }\r\n }\r\n if (lineCount == 3) {\r\n if (yDataSource2.length > 0) {\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n }\r\n if (yDataSource3.length > 0) {\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n }\r\n }\r\n\r\n let legendData = lineCount == 1 ? ['第一组'] : lineCount == 2 ? ['第一组', '第二组'] : ['第一组', '第二组', '第三组'],\r\n legendSelected: any =\r\n lineCount == 1 ? { 第一组: true } : lineCount == 2 ? { 第一组: true, 第二组: true } : { 第一组: true, 第二组: true, 第三组: true };\r\n\r\n //console.log(xData1,xData2,xData3,seriesData)\r\n let yValIsAllNull = false;\r\n let xValIsAllNull = false;\r\n let topmargin = 0;\r\n //为空不展示\r\n if (xDataSource1.length == 0) {\r\n xValIsAllNull = true;\r\n topmargin = 15;\r\n\r\n legendData = ['第二组', '第三组'];\r\n legendSelected = { 第一组: false, 第二组: true, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData2));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource2.length == 0) {\r\n topmargin = 35;\r\n\r\n legendData = ['第三组'];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData3));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource3.length == 0) {\r\n topmargin = 0;\r\n\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(3, []));\r\n }\r\n }\r\n } else if (xDataSource2.length == 0) {\r\n topmargin = 15;\r\n xValIsAllNull = true;\r\n legendData = ['第一组', '第三组'];\r\n legendSelected = { 第一组: true, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n\r\n seriesData.push(getLineObj(1, yDataSource1));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource1.length == 0) {\r\n topmargin = 35;\r\n\r\n legendData = ['第三组'];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n seriesData.push(getLineObj(3, yDataSource1));\r\n\r\n if (xDataSource3.length == 0) {\r\n topmargin = 0;\r\n\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(3, []));\r\n }\r\n }\r\n } else if (xDataSource3.length == 0) {\r\n topmargin = 15;\r\n xValIsAllNull = true;\r\n legendData = ['第一组', '第二组'];\r\n legendSelected = { 第一组: true, 第二组: true, 第三组: false };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n seriesData.push(getLineObj(1, yDataSource1));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n\r\n if (xDataSource1.length == 0) {\r\n topmargin = 35;\r\n legendData = ['第二组'];\r\n legendSelected = { 第一组: false, 第二组: true, 第三组: false };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData2));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n\r\n if (xDataSource2.length == 0) {\r\n topmargin = 0;\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(2, []));\r\n }\r\n }\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: !xValIsAllNull ? -5 : topmargin,\r\n left: 30,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n left: 'center',\r\n top: 16,\r\n data: legendData,\r\n selected: legendSelected,\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: xAxisData,\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: seriesData,\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 颗粒组成(密度计法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart250: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [0.0316, 0.0224, 0.0115, 0.0075, 0.0058, 0.0033, 0.0031, 0.0024, 0.001, 0.0008],\r\n yData = yDataArr[0]; // [83.0, 78.8, 53.8, 42.6, 33.7, 27.8, 23.2, 19.2, 13.0, 7.7];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n let xmin = 0.001,\r\n xmax = 100;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item == null || item == undefined || item == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n xmin = null;\r\n xmax = null;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log', //设置x轴为对数坐标轴\r\n logBase: 10, //可以设置对数轴的底数,默认为10\r\n inverse: true,\r\n min: xmin,\r\n max: xmax,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 承载比(CBR)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart270: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n // const xDataSource1 = xDataArr[0], // [36, 102, 316, 678, 917, 1177, 1396, 1478, 1620, 1651, 1753, 1789, 1855],\r\n // \txDataSource2 = xDataArr[1], // [56, 122, 357, 617, 958, 1223, 1376, 1493, 1631, 1682, 1783, 1824, 1885],\r\n // \txDataSource3 = xDataArr[2], // [66, 168, 443, 729, 994, 1213, 1411, 1529, 1651, 1722, 1783, 1824, 1890],\r\n // \tyDataSource1 = yDataArr[0], // [0.31, 0.51, 0.94, 1.47, 2.0, 2.48, 2.92, 3.41, 3.87, 4.37, 4.86, 5.36, 5.88],\r\n // \tyDataSource2 = yDataArr[1], // [0.26, 0.5, 1.01, 1.52, 2.02, 2.52, 2.98, 3.49, 3.99, 4.49, 4.98, 5.48, 5.98],\r\n // \tyDataSource3 = yDataArr[2]; // [0.32, 0.52, 1.01, 1.5, 1.99, 2.49, 2.98, 3.47, 3.96, 4.46, 4.95, 5.44, 5.93];\r\n\r\n let xDataSource1 = [],\r\n xDataSource2 = [],\r\n xDataSource3 = [],\r\n yDataSource1 = [],\r\n yDataSource2 = [],\r\n yDataSource3 = [];\r\n\r\n //排除原始数据为0的数据\r\n xDataArr[0].forEach((item, index) => {\r\n if (item != 0 && yDataArr[0][index] != 0) {\r\n xDataSource1.push(item);\r\n yDataSource1.push(yDataArr[0][index]);\r\n }\r\n });\r\n xDataArr[1].forEach((item, index) => {\r\n if (item != 0 && yDataArr[1][index] != 0) {\r\n xDataSource2.push(item);\r\n yDataSource2.push(yDataArr[1][index]);\r\n }\r\n });\r\n xDataArr[2].forEach((item, index) => {\r\n if (item != 0 && yDataArr[2][index] != 0) {\r\n xDataSource3.push(item);\r\n yDataSource3.push(yDataArr[2][index]);\r\n }\r\n });\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, xData, yData) => {\r\n const name = `曲线${type}`;\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //ttype == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n const seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n return {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 5, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: seriesData,\r\n };\r\n };\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xDataSource1.every((item) => item == '/') &&\r\n xDataSource2.every((item) => item == '/') &&\r\n xDataSource3.every((item) => item == '/') &&\r\n yDataSource1.every((item) => item == '/') &&\r\n yDataSource2.every((item) => item == '/') &&\r\n yDataSource3.every((item) => item == '/')\r\n ) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 20,\r\n bottom: 5,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value', //category\r\n //data: xDataSource1,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, xDataSource1, yDataSource1), getLineObj(2, xDataSource2, yDataSource2), getLineObj(3, xDataSource3, yDataSource3)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 压实度-吸水量,膨胀率,CBR-279、280和281\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart279_280_281: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle, //压实度-吸水量关系曲线 压实度-膨胀率关系曲线 压实度-CBR关系曲线\r\n xName = config.chartXName, //压实度(%) 压实度(%) 压实度(%)\r\n yName = config.chartYName, //吸水量(g) 膨胀率(%) CBR(%)\r\n legendName = '图例1';\r\n\r\n //y轴最大最小数据加减数字\r\n let jjNum = config.chartType == 279 ? 5 : config.chartType == 280 ? 0.1 : 0.15;\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [90.3, 95.6, 99.5],\r\n yData = yDataArr[0], // [245, 206, 163],\r\n xAxisMin = Math.min(...xData),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(Math.min(...yData) - jjNum, 0.001)),\r\n yAxisMax = Number(EChartsUtilsComm.getRound(Math.max(...yData) + jjNum, 0.001));\r\n //yData1 = [245, 206, 163],\r\n //yData2 = [3.49, 2.69, 2.34];\r\n //yData3 = [4, 4.7, 5.7];\r\n //修约:0.001 0.001 0.001\r\n //y最大最小加减数:5 0.1 0.15\r\n\r\n xAxisMin = Number(EChartsUtilsComm.getRound(xAxisMin - xAxisMin * 0.01, 0.001));\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (yData.every((item) => item == '/')) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value', //设置x轴为对数坐标轴\r\n min: xAxisMin,\r\n max: 100,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n min: yAxisMin,\r\n max: yAxisMax,\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 承载比(CBR)(路强仪)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart290: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xDataSource1 = xDataArr[0], // [36, 102, 316, 678, 917, 1177, 1396, 1478, 1620, 1651, 1753, 1789, 1855],\r\n xDataSource2 = xDataArr[0], // [56, 122, 357, 617, 958, 1223, 1376, 1493, 1631, 1682, 1783, 1824, 1885],\r\n xDataSource3 = xDataArr[0], // [66, 168, 443, 729, 994, 1213, 1411, 1529, 1651, 1722, 1783, 1824, 1890],\r\n yDataSource1 = yDataArr[0], // [0.31, 0.51, 0.94, 1.47, 2.0, 2.48, 2.92, 3.41, 3.87, 4.37, 4.86, 5.36, 5.88],\r\n yDataSource2 = yDataArr[1], // [0.26, 0.5, 1.01, 1.52, 2.02, 2.52, 2.98, 3.49, 3.99, 4.49, 4.98, 5.48, 5.98],\r\n yDataSource3 = yDataArr[2]; // [0.32, 0.52, 1.01, 1.5, 1.99, 2.49, 2.98, 3.47, 3.96, 4.46, 4.95, 5.44, 5.93];\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, data) => {\r\n const name = `曲线${type}`;\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //ttype == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n return {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 5, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n };\r\n };\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xDataSource1.every((item) => item == '/') &&\r\n xDataSource2.every((item) => item == '/') &&\r\n xDataSource3.every((item) => item == '/') &&\r\n yDataSource1.every((item) => item == '/') &&\r\n yDataSource2.every((item) => item == '/') &&\r\n yDataSource3.every((item) => item == '/')\r\n ) {\r\n yValIsAllNull = true;\r\n xDataSource1 = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 5,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xDataSource1,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, yDataSource1), getLineObj(2, yDataSource2), getLineObj(3, yDataSource3)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 土基回弹模量\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart310: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [0.02, 0.04, 0.06, 0.08, 0.14, 0.18, 0.22, 0.26, 0.3, 0.34],\r\n yData = yDataArr[0]; // [6, 10, 12, 16, 20, 28, 36, 44, 54, 68];\r\n\r\n let xDataCl = [],\r\n yDataCl = [];\r\n xData.forEach((item, index) => {\r\n if (item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined)) {\r\n xDataCl.push(item);\r\n yDataCl.push(yData[index]);\r\n }\r\n });\r\n xData = xDataCl;\r\n yData = yDataCl;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xData.every((item) => item == '/' || (item._code != null && item._code != undefined)) &&\r\n yData.every((item) => item == '/' || (item._code != null && item._code != undefined))\r\n ) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 20,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLine: {\r\n //设置x轴箭头效果\r\n symbol: ['none', 'arrow'], //默认是['none', 'none'],可以设置为['arrow', 'none']或['none', 'arrow']等来分别控制起始和结束的箭头\r\n symbolSize: 10, //箭头大小\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n name: 'p', //设置x轴显示的名称\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n symbol: ['arrow', 'none'], //默认是['none', 'none'],可以设置为['arrow', 'none']或['none', 'arrow']等来分别控制起始和结束的箭头\r\n symbolSize: 10, //箭头大小\r\n },\r\n },\r\n {\r\n //配置符号L的显示\r\n name: 'L',\r\n nameRotate: 0,\r\n nameLocation: 'end',\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n position: 'left',\r\n inverse: true, //y轴坐标轴向下\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 布氏粘度计\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart330: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let title = '', //config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0],\r\n yData = yDataArr[0];\r\n\r\n //获取y轴趋势公式对象\r\n const gsS: any = EChartsUtilsComm.calcTrend(xData, yData, xData[0]);\r\n\r\n //黏度为0.15Pa·s、0.19Pa·s、0.25Pa·s、0.31Pa·s时的温度\r\n let wd015 = EChartsUtilsComm.getRound((0.15 - gsS.jj) / gsS.xl, 0),\r\n wd019 = EChartsUtilsComm.getRound((0.19 - gsS.jj) / gsS.xl, 0),\r\n wd025 = EChartsUtilsComm.getRound((0.25 - gsS.jj) / gsS.xl, 0),\r\n wd031 = EChartsUtilsComm.getRound((0.31 - gsS.jj) / gsS.xl, 0);\r\n\r\n if (wd015 == Infinity) {\r\n wd015 = 0;\r\n }\r\n if (wd019 == Infinity) {\r\n wd019 = 0;\r\n }\r\n if (wd025 == Infinity) {\r\n wd025 = 0;\r\n }\r\n if (wd031 == Infinity) {\r\n wd031 = 0;\r\n }\r\n //输出“拌合温度范围 ℃”和“压实成型温度范围 ℃”\r\n let wdBh = `${wd015}~${wd019}`,\r\n wdYs = `${wd025}~${wd031}`;\r\n // console.log('输出温度:', wdBh, wdYs);\r\n\r\n //设置Sheet单元格的值(拌合温度和压实成型温度范围)\r\n if (chartExtJson != null) {\r\n if (wd015 == 0 && wd019 == 0) {\r\n sheet.setValue(chartExtJson.bszdjBh.row, chartExtJson.bszdjBh.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.bszdjBh.row, chartExtJson.bszdjBh.col, wdBh);\r\n }\r\n if (wd025 == 0 && wd031 == 0) {\r\n sheet.setValue(chartExtJson.bszdjYs.row, chartExtJson.bszdjYs.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.bszdjYs.row, chartExtJson.bszdjYs.col, wdYs);\r\n }\r\n }\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.every((item) => item == '/') && yData.every((item) => item == '/')) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 25 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 液限碟式仪\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart350: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson),\r\n lineColor = lineData[0].lineColor;\r\n\r\n //击数N(次)、含水率w(%)、y轴第一个趋势数据、y轴第二个趋势数据、25的趋势数据、y轴最小值、y轴最大值\r\n const jsN = [xDataArr[0][0], xDataArr[0][1]], // [18, 30],\r\n hsl = [yDataArr[0][0], yDataArr[0][1]], // [22.1, 11.5],\r\n //通过calcTrend获取y轴第一个趋势数据、y轴第二个趋势数据、25的趋势数据\r\n yVal1 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, jsN[0]).y, 0.1)),\r\n yVal2 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, jsN[1]).y, 0.1)),\r\n yVal25 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, 25).y, 0.1)),\r\n //通过calcTrend获取y轴的趋势数据,然后分别-2和+2\r\n yAxisMin = Math.floor(Number(yVal2)) - 2,\r\n yAxisMax = Math.floor(Number(yVal1)) + 2;\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //检测是否所有数据都为空\r\n let isAllNull = true;\r\n isAllNull = xDataArr[0].filter((item) => item != null && item != undefined && item != '/').length == 0;\r\n if (isAllNull) {\r\n isAllNull = yDataArr[0].filter((item) => item != null && item != undefined && item != '/').length == 0;\r\n }\r\n\r\n //x和y轴的字体大小\r\n const xyFontSize = 8;\r\n\r\n let seriesObjs = [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle',\r\n z: 10, //控制曲线的浮动层级,避免在markLine下方被遮住\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineColor,\r\n },\r\n connectNulls: true, //是否连接空数据\r\n data: [\r\n [0, null],\r\n [2, null],\r\n [3.5, null],\r\n [4.9, null],\r\n [5.9, null],\r\n [6.9, null],\r\n {\r\n //延长线1\r\n value: [10.4, yVal25 - (2.7 * (yVal25 - yVal1)) / 2.1],\r\n symbol: 'none', //隐藏线条上的数据点\r\n },\r\n [11, yVal1], //第一个点\r\n [11.8, null],\r\n [13.1, yVal25], //第二个点\r\n [14.6, yVal2], //第三个点\r\n {\r\n //延长线2\r\n value: [15.2, (2.1 / 1.5) * (yVal2 - yVal25) + yVal25],\r\n symbol: 'none', //隐藏线条上的数据点\r\n },\r\n [16.4, null],\r\n [17.4, null],\r\n [18.9, null],\r\n [19.8, null],\r\n [20.7, null],\r\n [21.6, null],\r\n [22.6, null],\r\n ],\r\n markPoint: {\r\n data: [\r\n {\r\n xAxis: 13.1,\r\n yAxis: yVal25,\r\n symbolOffset: [40, 25],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n //显示25这个坐标点数据\r\n return isAllNull ? '' : '( ' + 25 + ' , ' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ],\r\n },\r\n markLine: {\r\n symbol: '', //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n //标线的文本,模拟x轴显示的内容\r\n position: 'start', //改变label位置\r\n // rotate: 45, //设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)\r\n // backgroundColor:'#fff'\r\n // color:'#f00',//文字颜色\r\n formatter: (data) => {\r\n return data.name;\r\n },\r\n },\r\n lineStyle: { color: '#e0e6f1', type: 'solid' },\r\n data: [\r\n {\r\n name: '5',\r\n xAxis: 0,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '6',\r\n xAxis: 2,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '7',\r\n xAxis: 3.5,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '8',\r\n xAxis: 4.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '9',\r\n xAxis: 5.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '10',\r\n xAxis: 6.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //延长线1\r\n name: '',\r\n xAxis: 10.4,\r\n lineStyle: {\r\n opacity: 0,\r\n },\r\n },\r\n {\r\n //第一个点\r\n name: '',\r\n xAxis: 11,\r\n },\r\n {\r\n name: '20',\r\n xAxis: 11.8,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //第二个点\r\n name: '25',\r\n xAxis: 13.1,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //第三个点\r\n name: '30',\r\n xAxis: 14.6,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //延长线2\r\n name: '',\r\n xAxis: 15.2,\r\n lineStyle: {\r\n opacity: 0,\r\n },\r\n },\r\n {\r\n name: '40',\r\n xAxis: 16.4,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '50',\r\n xAxis: 17.4,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '',\r\n xAxis: 18.9,\r\n },\r\n {\r\n name: '',\r\n xAxis: 19.8,\r\n },\r\n {\r\n name: '',\r\n xAxis: 20.7,\r\n },\r\n {\r\n name: '',\r\n xAxis: 21.6,\r\n },\r\n {\r\n name: '100',\r\n xAxis: 22.6,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n\r\n //横线\r\n [\r\n {\r\n coord: [0, yVal25],\r\n lineStyle: {\r\n color: '#529b2e',\r\n type: 'solid',\r\n },\r\n },\r\n { coord: [13.1, yVal25] },\r\n ],\r\n //纵线\r\n [\r\n {\r\n coord: [13.1, yAxisMin],\r\n lineStyle: {\r\n color: '#000',\r\n type: 'silid',\r\n },\r\n },\r\n { coord: [13.1, yVal25] },\r\n ],\r\n ],\r\n },\r\n },\r\n ];\r\n if (isAllNull) {\r\n seriesObjs = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 30,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas[0].data.length > 1\r\n ? datas[0].data[1] == null\r\n ? ''\r\n : datas[0].seriesName + '(' + datas[0].data[0] + ')' + ':' + datas[0].data[1]\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n axisTick: { show: false }, //隐藏刻度线\r\n axisLabel: { show: false }, //隐藏刻度值\r\n //网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine\r\n splitLine: {\r\n show: false, //隐藏分割线\r\n },\r\n min: 0,\r\n max: 23.5,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !isAllNull ? 30 : 10,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n splitNumber: 4, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n min: !isAllNull ? yAxisMin : null,\r\n max: yAxisMax,\r\n axisLabel: {\r\n show: !isAllNull ? true : false,\r\n fontSize: xyFontSize,\r\n },\r\n axisTick: {\r\n show: !isAllNull ? true : false,\r\n },\r\n },\r\n ],\r\n series: seriesObjs,\r\n };\r\n\r\n return option;\r\n },\r\n};\r\n","import * as echarts from 'echarts';\r\nimport { type CellModel } from '../types/sheet';\r\nimport { type EChartsUtilsConfigModel, type EChartsUtilsChartLinesJsonModel } from '../types/echarts';\r\nimport { EChartsUtilsAll } from './echarts-all';\r\n\r\n/**\r\n * ECharts图表工具类\r\n */\r\nexport const EChartsUtils = {\r\n /**\r\n * 创建图表\r\n * @param GC GC对象\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param config 折现配置\r\n * @param isHideChart 是否隐藏图表\r\n */\r\n create: async (\r\n GC: any,\r\n spread: any,\r\n sheet: any,\r\n config: EChartsUtilsConfigModel,\r\n isHideChart: boolean = false\r\n ): Promise<{\r\n fObj: any;\r\n fObjPosition: {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n };\r\n ecObj: echarts.ECharts;\r\n }> => {\r\n // 获取扩展配置\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n // 如果isShowCon配置存在,则验证isShowCon对应单元格的值是否和输入的配置chartExtJson.isShowVal相等,不相等的话,就不创建图表\r\n if (chartExtJson != null && chartExtJson.isShowCon != null && chartExtJson.isShowCon != undefined) {\r\n const conVal = sheet.getValue(chartExtJson.isShowCon.row, chartExtJson.isShowCon.col);\r\n\r\n if (conVal != chartExtJson.isShowVal) {\r\n sheet.floatingObjects.remove(config.chartId);\r\n return;\r\n }\r\n }\r\n\r\n // 获取图表单元格之上的所有行的高度总和、所有列的宽度总和、距离左侧的距离和图表所在单元格的高度\r\n let allRowsTotalHeight = 0,\r\n allRowsTotalWidth = 0,\r\n allRowsTotalLeft = 0,\r\n chartCellHeight = 0;\r\n for (let i = 0; i < config.row; i++) {\r\n allRowsTotalHeight += sheet.getRowHeight(i);\r\n }\r\n allRowsTotalHeight += sheet.getRowHeight(0, GC.Spread.Sheets.SheetArea.colHeader);\r\n for (let i = config.col; i < config.col + config.colCount; i++) {\r\n allRowsTotalWidth += sheet.getColumnWidth(i);\r\n }\r\n for (let i = 0; i < config.col; i++) {\r\n allRowsTotalLeft += sheet.getColumnWidth(i);\r\n }\r\n allRowsTotalLeft += sheet.getColumnWidth(0, GC.Spread.Sheets.SheetArea.rowHeader);\r\n for (let i = config.row; i < config.row + config.rowCount; i++) {\r\n chartCellHeight += sheet.getRowHeight(i);\r\n }\r\n\r\n // 设置浮动对象的呈现位置(实际情况根据需要进行调整)\r\n const fObjPosition = {\r\n x: allRowsTotalLeft - 40 + 2,\r\n y: allRowsTotalHeight - 20 + 2,\r\n w: allRowsTotalWidth - 6,\r\n h: chartCellHeight - 6,\r\n };\r\n\r\n // 获取浮动对象\r\n let fcObj = sheet.floatingObjects.get(config.chartId);\r\n\r\n // 浮动对象不存在时\r\n if (fcObj == null || fcObj == undefined) {\r\n // 创建浮动对象\r\n fcObj = new GC.Spread.Sheets.FloatingObjects.FloatingObject(config.chartId, fObjPosition.x, fObjPosition.y, fObjPosition.w, fObjPosition.h);\r\n\r\n // 不允许改变大小、不允许拖动\r\n fcObj.allowResize(false);\r\n fcObj.allowMove(false);\r\n\r\n // 将浮动对象添加到表单\r\n sheet.floatingObjects.add(fcObj);\r\n }\r\n // 浮动对象存在时\r\n else {\r\n fcObj.x(fObjPosition.x);\r\n fcObj.y(fObjPosition.y);\r\n fcObj.width(fObjPosition.w);\r\n fcObj.height(fObjPosition.h);\r\n }\r\n\r\n // 设置浮动对象的内容为divObj(当document.getElementById(config.chartId + '_ec')为null的时候)\r\n if (document.getElementById(config.chartId + '_ec') == null) {\r\n // 创建用于放置ECharts的div容器\r\n const divObj = document.createElement('div');\r\n divObj.setAttribute('style', `background-color:#fff;width:100%;height:100%;`);\r\n divObj.innerHTML = `<div id=\"${config.chartId}_ec\" style=\"width:100%;height:100%;\"></div>`;\r\n\r\n fcObj.content(divObj);\r\n }\r\n\r\n // 定义ECharts对象\r\n let ecObj: echarts.ECharts | null = null;\r\n\r\n // 获取ECharts对象的函数(这里使用到了Promise和setTimeout,原因是:ECharts所在的div可能还没有及时在浮动元素中渲染完成,导致ECharts展示部出来)\r\n const getEcObj = (): any => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n // 初始化图表并获取ECharts对象\r\n resolve({ ecObj: EChartsUtils.initChart(spread, sheet, config, isHideChart) });\r\n }, 10);\r\n });\r\n };\r\n ecObj = (await getEcObj()).ecObj;\r\n\r\n return {\r\n fObj: fcObj,\r\n fObjPosition: fObjPosition,\r\n ecObj: ecObj,\r\n };\r\n },\r\n\r\n /**\r\n * 初始化图表\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param config 图表配置\r\n * @param isHideChart 是否隐藏图表\r\n */\r\n initChart: (spread: any, sheet: any, config: EChartsUtilsConfigModel, isHideChart: boolean = false): echarts.ECharts => {\r\n // 此时可能ECharts所在的div还没有渲染(如浮动元素还没有在可视区域的时候是不会创建的)\r\n if (document.getElementById(config.chartId + '_ec') == null) {\r\n return null;\r\n }\r\n\r\n // 获取多条x轴的数组(类似[[1,2,3,4],[1,2,3,4]])\r\n let xDataArr: any = [],\r\n yDataArr: any = [];\r\n\r\n // 获取多条x轴的数组(单元格原始数据,类似[['1.0','2.0','3.0'],['1.0','2.0','3.0']],此数据可能在有些情况下需要使用原始数据,如:原始数据为字符串的1.0,可能需要在x轴显示为1.0这个字符文本)\r\n let xDataArrSource: any = [],\r\n yDataArrSource: any = [];\r\n\r\n /**\r\n * 获取x或y轴单元格的值集合\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param sheetName x轴或y轴数据所在的Sheet名称,如果没有值,则说明是当前操作的Sheet\r\n * @param cells 单元格集合\r\n * @returns 返回x或y轴数据的值集合\r\n */\r\n const getCellVals = (\r\n spread: any,\r\n sheet: any,\r\n sheetName?: string,\r\n cells?: CellModel[]\r\n ): {\r\n dataOneArr: any[];\r\n dataOneSourceArr: any[];\r\n } => {\r\n let retArr: {\r\n dataOneArr: any[];\r\n dataOneSourceArr: any[];\r\n } = {\r\n dataOneArr: [],\r\n dataOneSourceArr: [],\r\n };\r\n\r\n // 获取x或y轴数据所在的Sheet对象(如果sheetName有值,则说明是跨Sheet的)\r\n let curSheet: any = null;\r\n if (sheetName != null && sheetName != undefined && sheetName.length > 0) {\r\n curSheet = spread.getSheetFromName(sheetName);\r\n }\r\n\r\n cells?.forEach((itemCell, indexCell) => {\r\n // 如果单元格的值为数字,就转换为数字,否则在后期参与各个ECharts图表计算的时候会出错\r\n const curCellVal = curSheet != null ? curSheet.getValue(itemCell.row, itemCell.col) : sheet.getValue(itemCell.row, itemCell.col);\r\n retArr.dataOneSourceArr.push(curCellVal);\r\n\r\n // 严格的数字验证(包括科学计数法)\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curCellVal)) {\r\n retArr.dataOneArr.push(Number(curCellVal));\r\n } else {\r\n retArr.dataOneArr.push(curCellVal == null ? 0 : curCellVal);\r\n }\r\n });\r\n\r\n return retArr;\r\n };\r\n\r\n let lineData: EChartsUtilsChartLinesJsonModel[] = JSON.parse(config.chartLinesJson);\r\n lineData.forEach((item, index) => {\r\n let xDataOne: any = [],\r\n yDataOne: any = [];\r\n let xDataOneSource: any = [],\r\n yDataOneSource: any = [];\r\n\r\n const curItemValsX = getCellVals(spread, sheet, item.sheetNameX, item.xCells);\r\n xDataOne = curItemValsX.dataOneArr;\r\n xDataOneSource = curItemValsX.dataOneSourceArr;\r\n const curItemValsY = getCellVals(spread, sheet, item.sheetNameY, item.yCells);\r\n yDataOne = curItemValsY.dataOneArr;\r\n yDataOneSource = curItemValsY.dataOneSourceArr;\r\n\r\n xDataArr.push(xDataOne);\r\n yDataArr.push(yDataOne);\r\n xDataArrSource.push(xDataOneSource);\r\n yDataArrSource.push(yDataOneSource);\r\n });\r\n\r\n // 获取ECharts图表所在div容器\r\n const ecDom = document.getElementById(config.chartId + '_ec') as HTMLElement;\r\n\r\n // 获取ECharts对象\r\n let ecObj = echarts.getInstanceByDom(ecDom);\r\n if (ecObj == null || ecObj == undefined) {\r\n ecObj = echarts.init(ecDom, null, {\r\n renderer: 'canvas',\r\n useDirtyRect: false,\r\n });\r\n }\r\n\r\n let option;\r\n\r\n if (config.chartType == 10) {\r\n option = EChartsUtilsAll.chart10(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 11) {\r\n option = EChartsUtilsAll.chart11(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 12) {\r\n option = EChartsUtilsAll.chart12(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 13) {\r\n option = EChartsUtilsAll.chart13(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 14) {\r\n option = EChartsUtilsAll.chart14(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 15) {\r\n option = EChartsUtilsAll.chart15(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 16) {\r\n option = EChartsUtilsAll.chart16(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 30) {\r\n option = EChartsUtilsAll.chart30(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 50) {\r\n option = EChartsUtilsAll.chart50(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 70) {\r\n option = EChartsUtilsAll.chart70(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 90) {\r\n option = EChartsUtilsAll.chart90(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 110) {\r\n option = EChartsUtilsAll.chart110(config, xDataArr, yDataArr, xDataArrSource, yDataArrSource);\r\n } else if (config.chartType == 130) {\r\n option = EChartsUtilsAll.chart130(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 150) {\r\n option = EChartsUtilsAll.chart150(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 170) {\r\n option = EChartsUtilsAll.chart170(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 190) {\r\n option = EChartsUtilsAll.chart190(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 210) {\r\n option = EChartsUtilsAll.chart210(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 230) {\r\n option = EChartsUtilsAll.chart230(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 250) {\r\n option = EChartsUtilsAll.chart250(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 270) {\r\n option = EChartsUtilsAll.chart270(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 279 || config.chartType == 280 || config.chartType == 281) {\r\n option = EChartsUtilsAll.chart279_280_281(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 290) {\r\n option = EChartsUtilsAll.chart290(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 310) {\r\n option = EChartsUtilsAll.chart310(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 330) {\r\n option = EChartsUtilsAll.chart330(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 350) {\r\n option = EChartsUtilsAll.chart350(config, xDataArr, yDataArr);\r\n }\r\n\r\n if (option && typeof option === 'object') {\r\n //如果是隐藏的图表,则需要禁用ECharts的动画效果\r\n //原因是:如果ECharts使用了动画效果,图表渲染完成可能需要0.5秒,但是在导出ECharts统计图为图片的场景下时,可能在图表还没有渲染完成(动画效果还没结束)前就要获取图像了,此时可能就会造成获取到的图像内容丢失的情况\r\n if (isHideChart) {\r\n option.animation = false;\r\n }\r\n\r\n ecObj.setOption(option);\r\n }\r\n\r\n ecObj.setOption(option);\r\n\r\n return ecObj;\r\n },\r\n\r\n /**\r\n * 获取ECharts对象\r\n * @param chartId 图表ID\r\n * @returns 返回ECharts对象,如果不存在则返回null\r\n */\r\n getEChartsObj: (chartId: string): echarts.ECharts | null => {\r\n // 获取ECharts图表所在div容器\r\n const ecDom = document.getElementById(chartId + '_ec') as HTMLElement;\r\n\r\n // 获取ECharts对象\r\n let ecObj = echarts.getInstanceByDom(ecDom);\r\n if (ecObj == null || ecObj == undefined) {\r\n return null;\r\n }\r\n\r\n return ecObj;\r\n },\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from 'file-saver';\r\nimport { RegisterFontModel } from '../types/wookbook';\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 加载在线sjs文件\r\n * @param spread 工作簿对象\r\n * @param fileUrl 在线sjs文件地址\r\n * @param succFunc 文件打开成功后的回调函数,返回的第一个参数为spread工作簿对象\r\n * @param errorFunc 文件打开失败后的回调函数,返回的第一个参数为错误信息\r\n */\r\n loadSjsFile: async (spread: any, fileUrl: string, succFunc?: (spreadObj) => Promise<void>, errorFunc?: (error) => Promise<void>): Promise<void> => {\r\n // 获取文件响应结果\r\n const response = await fetch(fileUrl, { method: 'GET' });\r\n\r\n // 获取成功\r\n if (response.ok) {\r\n // 文件的字节流对象\r\n const blob = await response.blob();\r\n // 将Blob转换为File或Blob对象\r\n // const file = new File([blob], 'template.sjs', { type: 'application/octet-stream' });\r\n const sjsBlob = new Blob([blob], { type: 'application/zip' });\r\n\r\n // SpreadJS打开文件\r\n spread.open(\r\n sjsBlob,\r\n async () => {\r\n if (typeof succFunc === 'function') {\r\n await succFunc(spread);\r\n\r\n // // 或者使用then回调\r\n // succFunc(spread).then((ret) => {\r\n // // return ret;\r\n // });\r\n }\r\n },\r\n async (e: any) => {\r\n if (typeof errorFunc === 'function') {\r\n await errorFunc(e);\r\n }\r\n }\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * 获取工作簿的Blob对象\r\n * @param spread 工作簿实例\r\n * @returns 返回异步的Promise对象(Blob对象)\r\n * @example\r\n * const saveSpread = async (spread: any) => {\r\n * try {\r\n * const blob = await WorkbookUtils.getWookbookBlob(spread);\r\n * console.log('获取成功:', blob);\r\n * } catch (error) {\r\n * console.error('获取失败:', error);\r\n * }\r\n * };\r\n */\r\n getWookbookBlob: async (spread: any): Promise<Blob> => {\r\n return new Promise((resolve, reject) => {\r\n spread.save(\r\n // 成功回调\r\n (blob) => resolve(blob),\r\n // 失败回调\r\n (error) => reject(error)\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a4));\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = '') => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = ['YJMAX', 'YJMIN', 'YJMID', 'YJGETNUM', 'YJGETS', 'YJGETCV', 'YJINTERPOLATIONMETHOD', 'YJINTERPOLATIONMETHOD_Y'];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (cellFormula != null && cellFormula != undefined && removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == '') {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n\r\n /**\r\n * 合并多个工作簿并导出Excel或PDF(同时返回合并后的工作簿实例)\r\n * @param GC Spread的GC对象\r\n * @param spreads 工作簿实例集合\r\n * @param isExcel 是否导出为Excel文件,默认为true(如果为false,则导出为PDF)\r\n * @param exportName 导出的文件名称,不传则为第一个Sheet的名称\r\n * @param regFonts 注册的字体集合,默认注册宋体和Arial字体\r\n * @returns 合并后的工作簿实例\r\n */\r\n mergeWorkbooksToExcelOrPdf: async (\r\n GC: any,\r\n spreads: any[],\r\n isExcel: boolean = true,\r\n exportName?: string,\r\n regFonts: RegisterFontModel[] = [\r\n { name: '宋体', type: 'normal', url: '/spreadJsFonts/simsun.ttf' },\r\n { name: 'Arial', type: 'normal', url: '/spreadJsFonts/arial.ttf' },\r\n ]\r\n ) => {\r\n if (!spreads || spreads.length == 0) {\r\n return;\r\n }\r\n\r\n // 导出PDF的时候,注册字体(必须在初始化Workbook前注册)\r\n if (!isExcel) {\r\n await WorkbookUtils.registerFont(GC, regFonts);\r\n }\r\n\r\n // 主工作簿\r\n const mainWorkbook = new GC.Spread.Sheets.Workbook();\r\n\r\n // 暂停绘制\r\n mainWorkbook.suspendPaint();\r\n\r\n mainWorkbook.fromJSON(spreads[0].toJSON());\r\n\r\n for (let i = 1; i < spreads.length; i++) {\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n tempSpread.fromJSON(spreads[i].toJSON());\r\n\r\n // 重命名样式表\r\n const styleSign = i + '';\r\n tempSpread.getNamedStyles().forEach(function (namedStyle) {\r\n namedStyle.name = `new_${styleSign}_${namedStyle.name}`;\r\n mainWorkbook.addNamedStyle(namedStyle);\r\n });\r\n\r\n // 当前临时工作簿的第一个工作表\r\n let tempSheet = tempSpread.getSheet(0);\r\n // 导出为JSON字符串\r\n let tempSheetJSON = JSON.stringify(tempSheet.toJSON());\r\n // 替换当前JSON字符串的style或parentName配置,目的是重命名样式名称,和上述的tempSpread重命名样式表保持一致\r\n tempSheetJSON = tempSheetJSON.replace(/\"style\":\"/g, '\"style\":\"new_' + styleSign + '_');\r\n tempSheetJSON = tempSheetJSON.replace(/\"parentName\":\"/g, '\"parentName\":\"new_' + styleSign + '_');\r\n\r\n // 创建新的工作表并添加到主工作簿中\r\n let newSheet = new GC.Spread.Sheets.Worksheet(`newSheet${styleSign}_`);\r\n mainWorkbook.addSheet(mainWorkbook.getSheetCount(), newSheet);\r\n newSheet.fromJSON(JSON.parse(tempSheetJSON));\r\n\r\n // 获取新创建的工作表newSheet的行数\r\n const newSheetRowCount = newSheet.getRowCount();\r\n\r\n // 当前操作的主工作簿的Sheet\r\n const curMainSheet = mainWorkbook.getSheet(0);\r\n\r\n // 如果是表尾,则在表单的最后一行开始添加\r\n curMainSheet.addRows(curMainSheet.getRowCount(), newSheetRowCount);\r\n\r\n // 设置复制和粘贴的范围\r\n let pastedRangesStartRow = curMainSheet.getRowCount() - newSheetRowCount;\r\n\r\n const fromRanges = [new GC.Spread.Sheets.Range(-1, -1, -1, -1)],\r\n pastedRanges = [new GC.Spread.Sheets.Range(pastedRangesStartRow, 0, newSheetRowCount, newSheet.getColumnCount())];\r\n mainWorkbook.commandManager().execute({\r\n cmd: 'clipboardPaste',\r\n sheetName: curMainSheet.name(), //此参数的作用是:粘贴到某个名称的Sheet中\r\n fromSheet: newSheet,\r\n fromRanges: fromRanges,\r\n pastedRanges: pastedRanges,\r\n isCutting: false,\r\n clipboardText: '',\r\n pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all,\r\n });\r\n\r\n // 删除最后的Sheet,也就是newSheet对象\r\n mainWorkbook.removeSheet(mainWorkbook.getSheetCount() - 1);\r\n\r\n // 取消选中状态\r\n curMainSheet.clearSelection();\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n }\r\n\r\n // 获取当前活动的工作表\r\n const sheet = mainWorkbook.getActiveSheet();\r\n\r\n // 设置缩放比为1\r\n sheet.zoom(1);\r\n\r\n // 隐藏行和列的头部\r\n sheet.options.rowHeaderVisible = true;\r\n sheet.options.colHeaderVisible = true;\r\n\r\n // 隐藏Tab、水平和垂直的滚动条\r\n mainWorkbook.options.tabStripVisible = true;\r\n mainWorkbook.options.showHorizontalScrollbar = true;\r\n mainWorkbook.options.showVerticalScrollbar = true;\r\n\r\n // 滚动条是否与活动工作表的最后一行和最后一列对齐(避免滚动的时候出现灰色区域)\r\n mainWorkbook.options.scrollbarMaxAlign = false;\r\n\r\n // 导出PDF时\r\n if (!isExcel) {\r\n // 获取最后一个要打印的PDF工作表\r\n const pdfSheet = mainWorkbook.getSheet(mainWorkbook.getSheetCount() - 1);\r\n let printInfo = pdfSheet.printInfo();\r\n printInfo.margin({ top: 0, bottom: 0, left: 0, right: 0, header: 0, footer: 0 });\r\n printInfo.showBorder(false);\r\n printInfo.showGridLine(false);\r\n printInfo.blackAndWhite(false);\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.zoomFactor(1.06); //1.06\r\n }\r\n\r\n // 恢复绘制\r\n mainWorkbook.resumePaint();\r\n\r\n // 导出Excel文件\r\n if (isExcel) {\r\n WorkbookUtils.exportToExcel(GC, mainWorkbook, exportName);\r\n } else {\r\n mainWorkbook.savePDF(function (blob) {\r\n saveAs(blob, `${exportName && exportName.length > 0 ? exportName : '文件'}.pdf`);\r\n }, console.log);\r\n }\r\n\r\n return mainWorkbook;\r\n },\r\n\r\n /**\r\n * 注册字体(主要为导出PDF使用)\r\n * @param GC Spread的GC对象\r\n * @param regFonts 字体配置集合\r\n */\r\n registerFont: async (GC: any, regFonts: RegisterFontModel[]) => {\r\n // 基于fetch\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n if (!regFonts || regFonts.length == 0) {\r\n resolve(null);\r\n }\r\n\r\n for (let i = 0; i < regFonts.length; i++) {\r\n const font = regFonts[i];\r\n\r\n const response = await fetch(font.url, { method: 'GET' });\r\n\r\n if (response.ok) {\r\n const blob = await response.blob();\r\n\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(blob);\r\n reader.onload = function (e) {\r\n var fontArrayBuffer = reader.result;\r\n\r\n var fonts = {};\r\n fonts[font.type] = fontArrayBuffer;\r\n GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);\r\n\r\n resolve(blob);\r\n };\r\n }\r\n }\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n\r\n // 基于XMLHttpRequest\r\n // return new Promise((resolve, reject) => {\r\n // try {\r\n // if (!regFonts || regFonts.length == 0) {\r\n // resolve(null);\r\n // }\r\n\r\n // for (let i = 0; i < regFonts.length; i++) {\r\n // const font = regFonts[i];\r\n\r\n // var xhr = new XMLHttpRequest();\r\n // xhr.open('GET', font.url, true);\r\n // xhr.responseType = 'blob';\r\n\r\n // xhr.onload = function (e) {\r\n // if (this.status == 200) {\r\n // var blob = this.response;\r\n\r\n // var reader = new FileReader();\r\n // reader.onload = function (e) {\r\n // var fontArrayBuffer = reader.result;\r\n\r\n // var fonts = {};\r\n // fonts[font.type] = fontArrayBuffer;\r\n // GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);\r\n\r\n // resolve(blob);\r\n // };\r\n // reader.readAsArrayBuffer(blob);\r\n // }\r\n // };\r\n\r\n // xhr.send();\r\n // }\r\n // } catch (error) {\r\n // reject(error);\r\n // }\r\n // });\r\n },\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","CommonUtils","getFileBlob","fileUrl","response","fetch","method","ok","blob","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRange","sheet","selectRange","isMulColOrder","getAllCellObjsByRanges","selectRanges","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","orderByJson","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getSheetSelectCellObjs","getActiveSheetSelectCellObjs","getSheetCellObjsByGroup","cellRange","groupType","suspendPaint","valCells","groupByCells","groupByJson","retCells","forEachJson","curGroupCells","key","source","resumePaint","getSheetSelectVals","nullUndefinedReplaceVal","selectCells","selectCellVals","cell","cellVal","getValue","getActiveSheetSelectVals","getSheetRangeValsByGroup","retVals","curVals","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","sheetCount","getSheetCount","getSheet","zoom","setActiveSheetSelectBgColor","color","sel","getRange","backColor","setSheetBgColor","cells","setSheetShowPrintPageLine","isShow","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","x","y","w","h","style","options","some","call","this","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","setActiveSheetWatermark","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","getRangeStr","BusinessUtils","createTestObjectAttrsCells","gc","testObjectAttrs","isVertical","contentColStartIndex","contentTotalColCount","addRowHeight","titleCellColumnCount","titleCellValColumnCount","rowTestObjectCount","testObjectAttrsChunk","chunkJson","setRowCount","rowAttrArr","totalRowCount","addRows","setRowHeight","SheetArea","viewport","addRowRange","setBorder","LineBorder","LineStyle","thin","all","medium","left","right","hAlign","HorizontalAlign","center","vAlign","addSpan","setValue","colIndexTitle","colIndexValue","getTestObjectAttrsVals","allCells","allCellsChunk","newAllCellsChunk","retData","attrObjs","attrObj","fieldName","EChartsUtilsComm","getRound","roundingVal","accuracy","valIsNegative","abs","inputValStr","toString","indexOf","intVal","parseInt","split","decimalStr","parseFloat","coefficient","retNum","inputVal","decimalStrFirst","substring","calcRoundingRet","Number","toFixed","accuracyStr","retNumStr","zeroStr","xsPart","calcTrend","xVal","n","sumX","sumY","sumXY","sumXX","slope","intercept","gs","xl","jj","filterNullEmptyErrArray","dataSource","filter","_error","EChartsUtilsAll","chart10","config","xDataArr","yDataArr","lineJson","JSON","parse","chartLinesJson","chartExtJson","xDataSource","yDataSource","dxsJs","xData","yData","test","xMin","min","xMax","max","yMin","yMax","xAxisMax","xAxisMin","yAxisMax","yAxisMin","seriesData","points","A","N","matrix","math","pow","vandermondeMatrix","AT","transpose","ATA","multiply","ATb","coefficients","lusolve","valueOf","err","funequation","arrX","arrY","temp","maxIndex","findIndex","xName","chartXName","yName","chartYName","includes","symbol","peakvalue","coordX","lqhhlKs","lqhhlJs","lqhhlSc1","lineData","pointData","coord","lineStyle","xAxis","yAxis","symbolOffset","label","show","data","itemStyle","yValIsAllNull","every","ele","grid","top","bottom","containLabel","tooltip","trigger","datas","ticket","seriesName","text","textStyle","fontSize","fontWeight","legend","selected","legendName","selectedMode","axisTick","alignWithLabel","splitLine","name","nameGap","nameRotate","nameLocation","axisLine","series","smooth","symbolSize","lineColor","markPoint","markLine","chart11","ceil","upperLimit","lowerLimit","lqhhlSx","curVal","lqhhlXx","ifHaveIntersectionPoint","y1","y2","y3","y4","getIntersectionPoint","upperIntersectionPoint","lowerIntersectionPoint","upperIntersectionPointTrend","lowerIntersectionPointTrend","index1","validX1","validX2","chart12","avg","avgXIndex","chart13","chart14","chart15","chart16","lines","lqhhlHz","yAxisData","map","isNaN","lqhhlSc2","axisLabel","chart30","jsIsJz","isTwoLine","xDataSource1","xDataSource2","yDataSource1","yDataSource2","chartTitle","lineFunc","isShowMarkPoint","isShowMarkLine","isTwoLineData","cellValJzZjhsl","cellValJzZdgmd","trunc","jsZjhslJz","jsZdgmdJz","outJdZjhsl","outJdZdgmd","outValZjhsl","outValZdgmd","jsZjhslJd","jsZdgmdJd","jsZjhsl","jsZdgmd","coordY","markPointObj","markLineObj","seriesDataObj","maxPointData","lineObj2","maxPointDataX","maxPointDataY","lineObj1","chart50","xDataSourceOld","yDataSourceOld","yDataSourceSxOld","yDataSourceXxOld","allData","ySx","yXx","sort","a","b","yDataSourceSx","yDataSourceXx","sxValNullCount","xDataSx","xDataXx","markLineData","val045","getLineObj","lineType","obj","z","connectNulls","silent","position","nullCount","xObj","splitNumber","chart70","ztzl","cllx","logx","logy","curZtzl","jxhslZtzl","curCllx","jxhslCllx","item1","log","item2","abk","ack","dropName","getYOnLine","point1","point2","point3X","logX1","logY1","logX2","logY","exp","zero_ab","zero_ac","HpCoordinates","wl","hp","scHp","scWl","scWp","point_hp","Dy","Dylog","hp0_xab","hp0_xac","hp0_xcenter","Dxlog","adk","wly","wlx","wpy","wpx","wp","hpy2","hpylog2","hp0_xab2","hp0_xac2","hp0_xcenter2","outJdHp","outJdWl","outJdWp","jxhslScHpJd","jxhslScWlJd","jxhslScWpJd","jxhslScHp","jxhslScWl","jxhslScWp","interval","param","minMargin","chart90","xDataCl","yDataSourceCl","markPointData","gsS","jxhslSnShScfc","yDataCopy","curYData","eval","replace","opacity","val","chart110","xDataArrSource","yDataArrSource","curXName","chart130","logBase","inverse","chart150","chart170","chart190","_code","chart210","arr","uniqueData","self","t","getXline","chart230","lineCount","xDataSource3","yDataSource3","xData1","xData2","xData3","getHours","getMinutes","curArr","curItemMins","unshift","getxAxisObj","xAxisData","legendData","legendSelected","xValIsAllNull","topmargin","chart250","xmin","xmax","chart270","chart279_280_281","jjNum","chartType","chart290","chart310","yDataCl","chart330","wd015","wd019","wd025","wd031","Infinity","wdBh","wdYs","bszdjBh","bszdjYs","chart350","jsN","hsl","yVal1","yVal2","yVal25","isAllNull","seriesObjs","EChartsUtils","create","GC_1","spread_1","sheet_1","config_1","args_1","isHideChart","isShowCon","isShowVal","remove","chartId","allRowsTotalHeight","allRowsTotalWidth","allRowsTotalLeft","chartCellHeight","getRowHeight","colHeader","getColumnWidth","rowHeader","fObjPosition","fcObj","get","getElementById","divObj","setAttribute","innerHTML","ecObj","setTimeout","initChart","fObj","getCellVals","sheetName","retArr","dataOneArr","dataOneSourceArr","curSheet","getSheetFromName","itemCell","indexCell","curCellVal","xDataOne","yDataOne","xDataOneSource","yDataOneSource","curItemValsX","sheetNameX","xCells","curItemValsY","sheetNameY","yCells","ecDom","echarts","getInstanceByDom","init","renderer","useDirtyRect","animation","setOption","getEChartsObj","WorkbookUtils","loadSjsFile","succFunc","errorFunc","sjsBlob","Blob","open","getWookbookBlob","save","error","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","header","footer","paperSize","PaperSize","PaperKind","a4","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","formula","resumeCalcService","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","saveAs","destroy","mergeWorkbooksToExcelOrPdf","spreads_1","spreads","isExcel","exportName","regFonts","url","registerFont","mainWorkbook","styleSign","getNamedStyles","namedStyle","addNamedStyle","tempSheet","tempSheetJSON","stringify","newSheet","Worksheet","addSheet","newSheetRowCount","curMainSheet","pastedRangesStartRow","fromRanges","Range","pastedRanges","commandManager","execute","cmd","fromSheet","isCutting","clipboardText","pasteOption","ClipboardPasteOptions","removeSheet","clearSelection","rowHeaderVisible","colHeaderVisible","tabStripVisible","showHorizontalScrollbar","showVerticalScrollbar","scrollbarMaxAlign","showBorder","showGridLine","blackAndWhite","zoomFactor","savePDF","console","font","reader","FileReader","readAsArrayBuffer","onload","fontArrayBuffer","fonts","PDF","PDFFontsManager"],"mappings":"qgBAkHO,SAASA,UAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAK,CACzF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAK,CAC5F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,EAAE,SAAUG,GAAWA,EAAQG,EAAO,IAIhBO,KAAKR,EAAWK,EAAU,CAC5GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OACtE,EACA,CA8MkD,mBAApBO,iBAAiCA,gBCrUxD,MAAMC,YAAc,CAMzBC,YAAoBC,GAAyCrB,eAAA,OAAA,OAAA,EAAA,YAE3D,MAAMsB,QAAiBC,MAAMF,EAAS,CAAEG,OAAQ,QAGhD,GAAIF,EAASG,GAAI,CAIf,aAFmBH,EAASI,OAI5B,OAAO,IAEX,GAOAC,iBAAmBC,IACjBA,GAAY,EAEZ,IAAIC,EAAS,GACb,KAAOD,EAAW,GAAG,CACnB,MAAME,GAAaF,EAAW,GAAK,GACnCC,EAASE,OAAOC,aAAaF,EAAY,IAAMD,EAC/CD,EAAWK,KAAKC,OAAON,EAAW,GAAK,IAGzC,OAAOC,EAAOM,gBC9BLC,WAAa,CAMxBC,0BAA4BC,GACZA,EAAOC,iBAEkBC,gBAUzCC,0BAA2B,CAACH,EAAaI,KACzBJ,EAAOC,iBAEfI,aAAaD,EAAQE,IAAKF,EAAQG,IAAKH,EAAQI,SAAUJ,EAAQK,WAWzEC,sBAAuB,CAACC,EAAYC,EAAwBC,GAAyB,IAC5Ef,WAAWgB,uBAAuBH,EAAO,CAACC,GAAcC,GAWjEC,uBAAwB,CAACH,EAAYI,EAA2BF,GAAyB,KAEvF,IAAIG,EAA2B,GAuC/B,OArCAD,EAAaE,QAAQ,CAACC,EAAMC,KAY1B,GAVsBR,EAAMS,SAASF,GACvBD,QAASI,IACrBL,EAAYM,KAAK,CACfhB,IAAKe,EAAaf,IAClBC,IAAKc,EAAad,IAClBC,SAAUa,EAAab,SACvBC,SAAUY,EAAaZ,kBAIVc,IAAbL,EAAKZ,UAAkCiB,IAAbL,EAAKX,UAAuCgB,IAAlBL,EAAKV,eAA4Ce,IAAlBL,EAAKT,SAC1F,MAAM,IAAIe,MAAM,0CAIlB,IAAK,IAAIC,EAAIP,EAAKZ,IAAKmB,GAAKP,EAAKZ,IAAMY,EAAKV,SAAUiB,IACpD,IAAK,IAAIC,EAAIR,EAAKX,IAAKmB,EAAIR,EAAKX,IAAMW,EAAKT,SAAUiB,IAAK,CAIlC,MAHCf,EAAMgB,QAAQF,EAAGC,IAItCV,EAAYM,KAAK,CACfhB,IAAKmB,EACLlB,IAAKmB,EACLlB,SAAU,EACVC,SAAU,OAQpBO,EAAcY,WAAAA,YAAYZ,EAAcH,EAAiC,CAAC,MAAO,OAAzB,CAAC,MAAO,OAAyB,CAAC,MAAO,QAE1FG,GAQTa,oBAAsBlB,IAEpB,MAAMmB,EAAoB,CACxB,CACExB,IAAK,EACLC,IAAK,EACLC,SAAUG,EAAMoB,cAChBtB,SAAUE,EAAMqB,mBAOpB,OAFoBlC,WAAWgB,uBAAuBH,EAAOmB,IAW/DG,uBAAwB,CAACtB,EAAYE,GAAyB,KAE5D,MAAMiB,EAAoBnB,EAAMT,gBAKhC,OAFoBJ,WAAWgB,uBAAuBH,EAAOmB,EAAmBjB,IAWlFqB,6BAA8B,CAAClC,EAAaa,GAAyB,KAEnE,MAAMF,EAAQX,EAAOC,iBAErB,OAAOH,WAAWmC,uBAAuBtB,EAAOE,IAUlDsB,wBAAyB,CAACxB,EAAYyB,EAAsBC,EAA2B,SAErF1B,EAAM2B,eAEN,MAAMC,EAAWzC,WAAWY,sBAAsBC,EAAOyB,GAGnDI,EAAeC,WAAAA,YAAYF,EAAUF,GAGrCK,EAA8B,GAUpC,OAPAC,WAAAA,YAAYH,EAAc,CAACI,EAA4BC,EAAKC,KAC1DJ,EAASpB,KAAKsB,KAIhBjC,EAAMoC,cAECL,GAUTM,mBAAoB,CAClBrC,EACAE,GAAyB,EACzBoC,KAGA,MAAMC,EAAcpD,WAAWmC,uBAAuBtB,EAAOE,GAG7D,IAAIsC,EAAyD,GAY7D,OAXAD,EAAYjC,QAASmC,IACnB,IAAIC,EAAU1C,EAAM2C,SAASF,EAAK9C,IAAK8C,EAAK7C,KAGb,MAA3B0C,GAA8D1B,MAA3B0B,GAAoC,MAAKI,IAC9EA,EAAUJ,GAGZE,EAAe7B,KAAK+B,KAGfF,GAUTI,yBAA0B,CACxBvD,EACAa,GAAyB,EACzBoC,KAGA,MAAMtC,EAAQX,EAAOC,iBAErB,OAAOH,WAAWkD,mBAAmBrC,EAAOE,EAAeoC,IAW7DO,yBAA0B,CACxB7C,EACAyB,EACAC,EAA2B,MAC3BY,KAGAtC,EAAM2B,eAEN,MAAMC,EAAWzC,WAAWY,sBAAsBC,EAAOyB,GAGnDI,EAAeC,WAAAA,YAAYF,EAAUF,GAGrCoB,EAA6B,GAyBnC,OAtBAd,WAAAA,YAAYH,EAAc,CAACI,EAA4BC,EAAKC,KAE1D,MAAMY,EAAsB,GAG5Bf,WAAAA,YAAYC,EAAe,CAAC1B,EAAMC,EAAO2B,KACvC,IAAIO,EAAU1C,EAAM2C,SAASpC,EAAKZ,IAAKY,EAAKX,KAGb,MAA3B0C,GAA8D1B,MAA3B0B,GAAoC,MAAKI,IAC9EA,EAAUJ,GAGZS,EAAQpC,KAAK+B,KAGfI,EAAQnC,KAAKoC,KAIf/C,EAAMoC,cAECU,GAWTE,YAAa,CAACC,EAASjD,EAAYL,EAAaC,KAC9C,IAAIsD,EAGJ,MAAMC,EAAWnD,EAAMgD,YAAYrD,EAAKC,GAiBxC,GAfIuD,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUC,OACjDL,EAAe,SACNC,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUE,gBACxDN,EAAe,QACNC,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUG,SACxDP,EAAe,WACNC,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUI,aACxDR,EAAe,eACNC,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUK,UACxDT,EAAe,YACNC,aAAoBF,EAAGG,OAAOC,OAAOC,UAAUM,WACxDV,EAAe,YAIGtC,MAAhBsC,GAA6C,MAAhBA,EAAsB,CACrD,MAAMW,EAAY7D,EAAM8D,SAASnE,EAAKC,GAElCiE,GAAaA,EAAUE,aAAeF,EAAUE,YAAYC,OAAS,IAC/B,sBAApCH,EAAUE,YAAY,GAAGE,QACvBJ,EAAUK,WAAaL,EAAUK,UAAUF,OAAS,IAEpDd,EADEW,EAAUK,UAAU,GAAGC,OAAOC,cACjB,YAEA,QAG0B,kBAApCP,EAAUE,YAAY,GAAGE,UAClCf,EAAe,SAKrB,OAAOA,GAQTmB,aAAc,CAAChF,EAAaiF,KAE1BjF,EAAOsC,eAEP,MAAM4C,EAAalF,EAAOmF,gBAC1B,IAAK,IAAI1D,EAAI,EAAGA,EAAIyD,EAAYzD,IAAK,CACrBzB,EAAOoF,SAAS3D,GAExB4D,KAAKJ,GAIbjF,EAAO+C,eAQTuC,4BAA6B,CAACtF,EAAauF,KACzC,MAAM5E,EAAQX,EAAOC,iBAGrBU,EAAM2B,eAKaxC,WAAWC,0BAA0BC,GAG7CiB,QAASuE,IAElB7E,EAAM8E,SAASD,EAAIlF,IAAKkF,EAAIjF,IAAKiF,EAAIhF,SAAUgF,EAAI/E,UAAUiF,UAAUH,KA+BzE5E,EAAMoC,eASR4C,gBAAiB,CAAChF,EAAYiF,EAAoBL,KAEhD5E,EAAM2B,eAGNsD,EAAM3E,QAASuE,IAEb7E,EAAM8E,SAASD,EAAIlF,IAAKkF,EAAIjF,IAAKiF,EAAIhF,SAAUgF,EAAI/E,UAAUiF,UAAUH,KAIzE5E,EAAMoC,eAQR8C,0BAA2B,CAAC7F,EAAa8F,KAEvC9F,EAAOsC,eAEP,MAAM4C,EAAalF,EAAOmF,gBAC1B,IAAK,IAAI1D,EAAI,EAAGA,EAAIyD,EAAYzD,IAAK,CACrBzB,EAAOoF,SAAS3D,GAKxBsE,mBAAmBD,GAI3B9F,EAAO+C,eAOTiD,oBAAsBpC,IAEpB,MAAMqC,EAAuB,CAAC,UAAW,UAAW,SAAU,OAAQ,SAAU,QAAS,SAGnFC,EAActC,EAAGG,OAAOC,OAAOC,UAAUkC,KAAKC,UAAUC,MAG9DzC,EAAGG,OAAOC,OAAOC,UAAUkC,KAAKC,UAAUC,MAAQ,SAAUC,EAAUnI,EAAYoI,EAAQC,EAAQC,EAAQC,EAAQC,EAAYC,GAExHX,EAAWY,KAAM3F,GAASA,GAAQ/C,GACpC+H,EAAYY,KAAKC,KAAMT,EAAK,IAAKC,EAAGC,EAAGC,EAAGC,EAAGC,EAAOC,GAEpDV,EAAYvH,MAAMoI,KAAMC,UAQ5B,GAYFC,sBAAuB,CACrBrD,EACAjD,EACAuG,EACAC,EACAC,EAAoB,EACpBC,EAAmB,UACnBC,GAAgB,KAGhB,IAAIC,EAAc,IAAI3D,EAAGG,OAAOC,OAAOwD,gBAAgBC,eAAe,mBAAkBH,EAAO,KAAO,IAAM,EAAGH,EAAQD,EAAOE,GAC5HM,EAAa,IAAI9D,EAAGG,OAAOC,OAAOwD,gBAAgBC,eAAe,kBAAiBH,EAAO,KAAO,IAAMJ,EAAO,EAAGE,EAAWD,GAGzHQ,EAAYC,SAASC,cAAc,OACrCC,EAAWF,SAASC,cAAc,OAGpCF,EAAUhB,MAAMO,MAAQ,GAAGA,MAC3BS,EAAUhB,MAAMQ,OAAS,MACzBQ,EAAUhB,MAAMoB,aAAe,GAAGX,cAAsBC,IAGxDS,EAASnB,MAAMO,MAAQ,MACvBY,EAASnB,MAAMQ,OAAS,GAAGA,MAC3BW,EAASnB,MAAMqB,WAAa,GAAGZ,cAAsBC,IAMrDE,EAAYU,aAAY,GACxBV,EAAYW,WAAU,GACtBX,EAAYY,QAAQR,GACpBD,EAAWO,aAAY,GACvBP,EAAWQ,WAAU,GACrBR,EAAWS,QAAQL,GAGnBnH,EAAMyH,gBAAgBC,IAAId,GAC1B5G,EAAMyH,gBAAgBC,IAAIX,IAS5BY,wBAAyB,CAACtI,EAAa4F,EAA6BE,KAClE,GAAa,MAATF,GAA0BrE,MAATqE,EACnB,OAGF,MAAMjF,EAAQX,EAAOC,iBAGrBU,EAAM2B,eAENsD,EAAM3E,QAASmC,IAEbzC,EAAM4H,QAAQnF,EAAK9C,IAAK8C,EAAK7C,KAAKiI,UAAU1C,EAAS,IAAI1C,EAAKqF,cAAWlH,GAGzEZ,EAAM+H,eAAetF,EAAK9C,IAAK8C,EAAK7C,IAAKuF,EAAS,GAAG1C,EAAKuF,YAAYvF,EAAKwF,iBAAcrH,KAI3FZ,EAAMoC,eAcR8F,iBAAkB,CAACjF,EAASjD,EAAYiF,EAAwBkD,GAAsB,KACpFlD,EAAM3E,QAAQ,CAACC,EAAMC,KAEnB,IAAIqD,EAAY7D,EAAM8D,SAASvD,EAAKZ,IAAKY,EAAKX,KACzCiE,IACHA,EAAY,IAAIZ,EAAGG,OAAOC,OAAO+E,OAGnCvE,EAAUE,YAAc,CACtB,CACEsE,UAAWpF,EAAGG,OAAOC,OAAOiF,gBAAgBC,SAC5CtE,QAAS,uBAKbJ,EAAUK,UAAY,CACpB,CACEsE,KAAMvF,EAAGG,OAAOC,OAAOoF,aAAaC,eACpCvE,OAAQ,CACNwE,UAAU,EACVvE,eAAe,KAIrBP,EAAU+E,UAAYrI,EAAKsI,WAG3BhF,EAAUiF,YAAcX,EAGxBnI,EAAM+I,SAASxI,EAAKZ,IAAKY,EAAKX,IAAKiE,MASvCmF,YAAcvH,GAWL,GATUvD,YAAYQ,iBAAiB+C,EAAU7B,OAEvC6B,EAAU9B,IAAM,KAGlBzB,YAAYQ,iBAAiB+C,EAAU7B,IAAM6B,EAAU3B,SAAW,KAElE2B,EAAU9B,IAAM8B,EAAU5B,YC9lBhCoJ,cAAgB,CAW3BC,2BAA4B,CAC1BC,EACAnJ,EACAoJ,EACAC,GAAsB,EACtBC,EAA+B,EAC/BC,EAA+B,GAC/BC,EAAuB,MAEvB,IAAKJ,GAA8C,IAA3BA,EAAgBpF,OACtC,OAIF,MAAMyF,EAAuBJ,EAAa,GAAK,GAEzCK,EAA0BL,EAAa,GAAK,GAG5CM,EAAqBN,EAAa,EAAI,EAGtCO,EAAuBC,WAAAA,UAAUT,EAAiBO,GAGxD3J,EAAM2B,eAGN3B,EAAM8J,YAAY,GAElB,IAAK,IAAIhJ,EAAI,EAAGA,EAAI8I,EAAqB5F,OAAQlD,IAAK,CACpD,MAAMiJ,EAAaH,EAAqB9I,GAGlCkJ,EAAwBhK,EAAMoB,cAGpCpB,EAAMiK,QAAQD,EAAe,GAG7BhK,EAAMkK,aAAaF,EAAeR,EAAcL,EAAG/F,OAAOC,OAAO8G,UAAUC,UAG3E,MAAMC,EAAcrK,EAAM8E,SAASkF,EAAe,EAAGV,EAAsBC,EAAsBJ,EAAG/F,OAAOC,OAAO8G,UAAUC,UAsB5H,GApBAC,EAAYC,UAAU,IAAInB,EAAG/F,OAAOC,OAAOkH,WAAW,OAAQpB,EAAG/F,OAAOC,OAAOmH,UAAUC,MAAO,CAAEC,KAAK,IACvGL,EAAYC,UAAU,IAAInB,EAAG/F,OAAOC,OAAOkH,WAAW,OAAQpB,EAAG/F,OAAOC,OAAOmH,UAAUG,QAAS,CAAEC,MAAM,IAC1GP,EAAYC,UAAU,IAAInB,EAAG/F,OAAOC,OAAOkH,WAAW,OAAQpB,EAAG/F,OAAOC,OAAOmH,UAAUG,QAAS,CAAEE,OAAO,IAE3GR,EAAYS,OAAO3B,EAAG/F,OAAOC,OAAO0H,gBAAgBC,QACpDX,EAAYY,OAAO9B,EAAG/F,OAAOC,OAAO0H,gBAAgBC,QAGpDhL,EAAMkL,QAAQlB,EAAeV,EAAsB,EAAGG,EAAsBN,EAAG/F,OAAOC,OAAO8G,UAAUC,UACvGpK,EAAMkL,QACJlB,EACAV,EAAuBG,EACvB,EACAM,EAAW/F,OAAS,EAAI0F,EAA0BH,EAAuBE,EACzEN,EAAG/F,OAAOC,OAAO8G,UAAUC,UAE7BpK,EAAMmL,SAASnB,EAAeV,EAAsBS,EAAW,GAAGjC,OAClE9H,EAAMmL,SAASnB,EAAeV,EAAuBG,EAAsBM,EAAW,GAAGvM,OAGrFuM,EAAW/F,OAAS,EAAG,CACzB,MAAMoH,EAAgB9B,EAAuBG,EAAuBC,EAC9D2B,EAAgBD,EAAgB3B,EAEtCzJ,EAAMkL,QAAQlB,EAAeoB,EAAe,EAAG3B,EAAsBN,EAAG/F,OAAOC,OAAO8G,UAAUC,UAChGpK,EAAMkL,QACJlB,EACAqB,EACA,EACA3B,EAA0B,GAAML,GAAmC,GAArBU,EAAW/F,OAAmE,EAArDyF,EAAuBC,EAA0B,GACxHP,EAAG/F,OAAOC,OAAO8G,UAAUC,UAE7BpK,EAAMmL,SAASnB,EAAeoB,EAAerB,EAAW,GAAGjC,OAC3D9H,EAAMmL,SAASnB,EAAeqB,EAAetB,EAAW,GAAGvM,OAG7D,GAAIuM,EAAW/F,OAAS,EAAG,CACzB,MAAMoH,EACJ9B,EAAuBG,EAAuBC,EAA0BD,EAAuBC,EAA0B,EACrH2B,EAAgBD,EAAgB3B,EAEtCzJ,EAAMkL,QAAQlB,EAAeoB,EAAe,EAAG3B,EAAsBN,EAAG/F,OAAOC,OAAO8G,UAAUC,UAChGpK,EAAMkL,QAAQlB,EAAeqB,EAAe,EAAG3B,EAA0B,EAAGP,EAAG/F,OAAOC,OAAO8G,UAAUC,UACvGpK,EAAMmL,SAASnB,EAAeoB,EAAerB,EAAW,GAAGjC,OAC3D9H,EAAMmL,SAASnB,EAAeqB,EAAetB,EAAW,GAAGvM,QAK/DwC,EAAMoC,eAURkJ,uBAAwB,CACtBtL,EACAoJ,EACAC,GAAsB,EACtBC,EAA+B,EAC/BC,EAA+B,MAG/B,MAAMI,EAAqBN,EAAa,EAAI,EAGtCO,EAAuBC,WAAAA,UAAUT,EAAiBO,GAGxD3J,EAAM2B,eAGN,MAAM4J,EAAWpM,WAAWY,sBAAsBC,EAAO,CACvDL,IAAK,EACLC,IAAK0J,EACLzJ,SAAUG,EAAMoB,cAChBtB,SAAUyJ,IAGNiC,EAAgB3B,WAAAA,UAAU0B,EAA+B,EAArB5B,GAGpC8B,EAAmB,GACzB,IAAK,IAAI3K,EAAI,EAAGA,EAAI0K,EAAcxH,OAAQlD,IACxC2K,EAAiB9K,KAAKkJ,WAAAA,UAAU2B,EAAc1K,GAAI,IAGpD,IAAI4K,EAAiC,GAErC,IAAK,IAAI5K,EAAI,EAAGA,EAAI8I,EAAqB5F,OAAQlD,IAAK,CACpD,MAAM6K,EAAW/B,EAAqB9I,GAEtC,IAAK,IAAIC,EAAI,EAAGA,EAAI4K,EAAS3H,OAAQjD,IAAK,CACxC,MAAM6K,EAAUD,EAAS5K,GAEzB2K,EAAQ/K,KAAK,CACXmH,MAAO9H,EAAM2C,SAAS8I,EAAiB3K,GAAGC,GAAG,GAAGpB,IAAK8L,EAAiB3K,GAAGC,GAAG,GAAGnB,KAC/EiM,UAAWD,EAAQC,UACnBrO,MAAOwC,EAAM2C,SAAS8I,EAAiB3K,GAAGC,GAAG,GAAGpB,IAAK8L,EAAiB3K,GAAGC,GAAG,GAAGnB,QAQrF,OAFAI,EAAMoC,cAECsJ,ICvKLI,iBAAmB,CAOvBC,SAAU,CAACC,EAAaC,KAEtB,MAAMC,EAAgBF,EAAc,EAMpC,GALIE,IACFF,EAAchN,KAAKmN,IAAIH,IAIT,GAAZC,EAAe,CAEjB,IAAIG,EAAcJ,EAAYK,WAG9B,IAAgC,GAA5BD,EAAYE,QAAQ,KACtB,OAAOJ,GAAiBF,EAAcA,EAIxC,IAAIO,EAASC,SAASJ,EAAYK,MAAM,KAAK,IACzCC,EAAaN,EAAYK,MAAM,KAAK,GAGxC,OAAIE,WAAW,KAAKD,MAAiB,GAC5BR,IAAkBK,EAAS,GAAKA,EAAS,EAEzCL,GAAiBK,EAASA,EAKrC,IAAIK,EAAc,EAAIX,EAWtB,MAuCMY,EAvCkB,CAACC,IAEvB,IAAIV,EAAcU,EAAST,WAG3B,IAAgC,GAA5BD,EAAYE,QAAQ,KACtB,OAAOQ,EAIT,IAAIP,EAASC,SAASJ,EAAYK,MAAM,KAAK,IACzCC,EAAaN,EAAYK,MAAM,KAAK,GAGpCM,EAAkBP,SAASE,EAAWM,UAAU,EAAG,IAGvD,OAAID,GAAmB,EACdR,EAAS,EAGTQ,GAAmB,EACnBR,EAImB,GAAnBQ,GAA6C,GAArBL,EAAW1I,OACnCuI,EAAS,GAAK,EAAIA,EAAS,EAAIA,EAIZ,GAAnBQ,GAAwBL,EAAW1I,OAAS,EAC5CuI,EAAS,EAGXO,GAIMG,CA9CMC,QAAQlB,EAAcY,GAAaO,QAAQ,KA8CfP,EAGjD,IAAIQ,EAAcnB,EAAW,GAG7B,IAAgC,GAA5BmB,EAAYd,QAAQ,KACtB,OAAOJ,GAAiBW,EAASA,EAC5B,CACL,MAAMQ,EAAYR,EAAS,GAG3B,IAAIS,EAAU,GAGd,IAA8B,GAA1BD,EAAUf,QAAQ,KAAY,CAChC,IAAIgB,EAAU,GACd,IAAK,IAAI9M,EAAQ,EAAGA,EAAQ4M,EAAYX,MAAM,KAAK,GAAGzI,OAAQxD,IAC5D8M,GAAW,IAGb,OAAQpB,EAAgB,IAAM,IAAM,GAAGW,KAAUS,IAG9C,CACH,MAAMC,EAASF,EAAUZ,MAAM,KAAK,GAEpC,GAAIW,EAAYX,MAAM,KAAK,GAAGzI,OAASuJ,EAAOvJ,OAC5C,IAAK,IAAIxD,EAAQ,EAAGA,EAAQ4M,EAAYX,MAAM,KAAK,GAAGzI,OAASuJ,EAAOvJ,OAAQxD,IAC5E8M,GAAW,IAIf,OAAQpB,EAAgB,IAAM,IAAM,GAAGW,IAASS,OAWtDE,UAAW,CAAC5H,EAAkBC,EAAkB4H,KAC9C,IAAIC,EAAI9H,EAAE5B,OACN2J,EAAO,EACTC,EAAO,EACPC,EAAQ,EACRC,EAAQ,EACV,IAAK,IAAIhN,EAAI,EAAGA,EAAI4M,EAAG5M,IACrB6M,GAAQ/H,EAAE9E,GACV8M,GAAQ/H,EAAE/E,GACV+M,GAASjI,EAAE9E,GAAK+E,EAAE/E,GAClBgN,GAASlI,EAAE9E,GAAK8E,EAAE9E,GAEpB,IAAIiN,GAASL,EAAIG,EAAQF,EAAOC,IAASF,EAAII,EAAQH,EAAOA,GACxDK,GAAaJ,EAAOG,EAAQJ,GAAQD,EAIxC,OAAIK,EAAQ,IAAM,MACT,CAAElI,EAAG,GAAIoI,GAAI,GAAIC,GAAI,GAAIC,GAAI,IAI/B,CAAEtI,EAPQkI,EAAQN,EAAOO,EAORC,GAAI,GAAGF,OAAWC,IAAaE,GAAIH,EAAOI,GAAIH,IAMxEI,wBAA0BC,GACXA,EAAWC,OAAQ/N,GAAiB,MAARA,GAAwBK,MAARL,IAAqC,MAAfA,EAAKgO,QAAiC3N,MAAfL,EAAKgO,SAAgC,KAARhO,IAS1HiO,gBAAkB,CAQ7BC,QAAS,CAACC,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAe,GACfC,EAAe,GAyBjB,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GAMnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAW9C,OAAOpB,iBAAiBC,SAAS8D,EAAO,IAAM,MACzDI,EAAW/C,OAAOpB,iBAAiBC,SAAS6D,EAAO,IAAM,MACzDM,EAAa,GAKXC,EAAc,GAClBd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAM1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAmBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GAEZ,IAAI3B,EAAM3Q,KAAK2Q,OAAO0B,GAGlBE,EAAWF,EAAKG,UAAWhU,GAAUA,IAAUmS,GAKjD8B,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAGjBR,EAAK9Q,QAAQ,CAACC,EAAMC,KACd6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,WAKd,MAAMC,EAAY,CAACX,EAAKG,GAAWrE,OAAOpB,iBAAiBC,SAAS4D,EAAK,QACvEqC,EAAS,CAACD,EAAU,GAAI9B,GAIN,MAAhBhB,IAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAK4P,GACnExP,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAK8P,IAExC,MAAzBT,EAAakD,UAA6CvR,MAAzBqO,EAAakD,UAChDnS,EAAMmL,SAAS8D,EAAakD,SAASxS,IAAKsP,EAAakD,SAASvS,IAAKwR,EAAKG,KAI9E,IAAIa,EAAW,GACXC,EAAY,GAEdD,EAAW,CACT,CACE,CACEE,MAAON,EACPO,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAOP,KAIbM,EAAY,CACV,CACEG,MAAOT,EAAU,GACjBU,MAAOV,EAAU,GACjBW,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,OAA+B,GAA3B3F,OAAO2F,EAAKA,KAAKL,QAA0C,GAA3BtF,OAAO2F,EAAKA,KAAKJ,OAC5C,GAEA,KAAOI,EAAKA,KAAKL,MAAQ,IAAMK,EAAKA,KAAKJ,MAAQ,MAK9DK,UAAW,CAAElO,MAAO,gBAEtB,CACE4N,MAAOT,EAAU,GACjBU,MAAOxC,EACPyC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,OAGXC,UAAW,CAAElO,MAAO,iBAM1B,IAAImO,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KA5HM,GA6HN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAhJK,OAiJXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAzLS,MA0LT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehB6C,QAAS,CAACvG,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GAyBV,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GACnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAWhR,KAAKkW,KAAKrF,EAAO,GAC5BI,EAAWjR,KAAKC,MAAM2Q,EAAO,GAC7BM,EAAa,GACbiF,EAAa,KACbC,EAAa,IAIf,GAAoB,MAAhBnG,EAAsB,CACxB,GAA4B,MAAxBA,EAAaoG,SAA2CzU,MAAxBqO,EAAaoG,QAAsB,CACrE,MAAMC,EAAStV,EAAM2C,SAASsM,EAAaoG,QAAQ1V,IAAKsP,EAAaoG,QAAQzV,KACzE,iCAAiC2P,KAAK+F,KACxCH,EAAaG,GAGjB,GAA4B,MAAxBrG,EAAasG,SAA2C3U,MAAxBqO,EAAasG,QAAsB,CACrE,MAAMD,EAAStV,EAAM2C,SAASsM,EAAasG,QAAQ5V,IAAKsP,EAAasG,QAAQ3V,KACzE,iCAAiC2P,KAAK+F,KACxCF,EAAaE,IAKD,MAAdH,GAAsBA,EAAanF,IACrCA,EAAWmF,EAAa,GAER,MAAdC,GAAsBA,EAAapF,IACrCC,EAAWmF,EAAa,GAG1B,IAAIjF,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAM1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAoBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GAEZ,IAAI3B,EAAM3Q,KAAK2Q,OAAO0B,GAGlBE,EAAWF,EAAKG,UAAWhU,GAAUA,IAAUmS,GAKjD8B,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAejB,SAAS4D,EAAwBC,EAAIC,EAAIC,EAAIC,GAC3C,OAAKH,GAAME,GAAMD,GAAME,GAAQH,GAAME,GAAMD,GAAME,EAMnD,SAASC,EAAqBJ,EAAIC,EAAI7P,GACpC,OAAI7G,KAAKmN,IAAIsJ,EAAK5P,GAAK7G,KAAKmN,IAAIuJ,EAAK7P,GAC5B,GAEF,EAvBTuL,EAAK9Q,QAAQ,CAACC,EAAMC,KACd6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,WAmBd,IAAIgE,EAAyB,GAC3BC,EAAyB,GACvBC,EAA8B,GAC9BC,EAA8B,GAClC7E,EAAK9Q,QAAQ,CAACC,EAAMC,KAClB,GAAIA,EAAQ,EAAG,CAEb,GAAkB,MAAd2U,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,EAAYA,GAAa,CACjF,IAAIe,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,GAEhEW,EAAuBnV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzBwV,EAA4BrV,KAAK,GAEjCqV,EAA4BrV,KAAK,GAKvC,GAAkB,MAAdyU,GACEI,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,EAAYA,GAAa,CACjF,IAAIc,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,GAEhEW,EAAuBpV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzByV,EAA4BtV,KAAK,GAEjCsV,EAA4BtV,KAAK,OAO3C,IAAIwV,EAAU3G,EACZ4G,EAAU1G,EACyB,GAAjCoG,EAAuB9R,QAAe+R,EAAuB/R,OAAS,EAElC,GAAlCiS,EAA4B,IAE9BE,EAAU3G,EACV4G,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GAGlCK,EAFmC,GAAjCL,EAAuB/R,OAEf0L,EAEAqG,EAAuB,GAAG,IAG/BD,EAAuB9R,OAAS,GAAsC,GAAjC+R,EAAuB/R,OAE/B,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GAGlCM,EAFmC,GAAjCN,EAAuB9R,OAEf0L,EAEAoG,EAAuB,GAAG,KAItCK,EAAU3G,EACV4G,EAAUN,EAAuB,GAAG,IAE7BA,EAAuB9R,OAAS,GAAK+R,EAAuB/R,OAAS,IAExC,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GACpCM,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GACpCK,EAAUN,EAAuB,GAAG,KAMpB,MAAhB7G,IAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAKuW,GACnEnW,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAKwW,IAExC,MAAzBnH,EAAakD,UAA6CvR,MAAzBqO,EAAakD,UAChDnS,EAAMmL,SAAS8D,EAAakD,SAASxS,IAAKsP,EAAakD,SAASvS,IAAKwR,EAAKG,KAK9E,MAAMQ,EAAY,CAACX,EAAKG,GAAWrE,OAAOpB,iBAAiBC,SAAS4D,EAAK,QAEzE,IAAIyC,EAAW,GACXC,EAAY,GAEdD,EAAW,CACT,CACE,CACEE,MAAO,CAACP,EAAU,GAAI9B,GACtBsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAOP,KAIbM,EAAY,CACV,CACEG,MAAOT,EAAU,GACjBU,MAAOV,EAAU,GACjBW,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,OAA+B,GAA3B3F,OAAO2F,EAAKA,KAAKL,QAA0C,GAA3BtF,OAAO2F,EAAKA,KAAKJ,OAC5C,GAEA,KAAOI,EAAKA,KAAKL,MAAQ,IAAMK,EAAKA,KAAKJ,MAAQ,MAK9DK,UAAW,CAAElO,MAAO,gBAEtB,CACE4N,MAAOT,EAAU,GACjBU,MAAOxC,EACPyC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,OAGXC,UAAW,CAAElO,MAAO,iBAKR,MAAduQ,GACF/C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUoF,GAClB5C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUqF,MAKN,MAAdC,GACFhD,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUqF,GAClB7C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUsF,MAMxB,IAAIrC,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KA5PM,GA6PN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAhRK,OAiRXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAzTS,MA0TT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehBiE,QAAS,CAAC3H,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GAyBV,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GAOnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAWhR,KAAKkW,KAAKrF,EAAO,GAC5BI,EAAWjR,KAAKC,MAAM2Q,EAAO,GAC7BM,EAAa,GACbiF,EAAa,EACbC,EAAa,EAIf,GAAoB,MAAhBnG,EAAsB,CACxB,GAA4B,MAAxBA,EAAaoG,SAA2CzU,MAAxBqO,EAAaoG,QAAsB,CACrE,MAAMC,EAAStV,EAAM2C,SAASsM,EAAaoG,QAAQ1V,IAAKsP,EAAaoG,QAAQzV,KACzE,iCAAiC2P,KAAK+F,KACxCH,EAAaG,GAGjB,GAA4B,MAAxBrG,EAAasG,SAA2C3U,MAAxBqO,EAAasG,QAAsB,CACrE,MAAMD,EAAStV,EAAM2C,SAASsM,EAAasG,QAAQ5V,IAAKsP,EAAasG,QAAQ3V,KACzE,iCAAiC2P,KAAK+F,KACxCF,EAAaE,IAKD,MAAdH,GAAsBA,EAAanF,IACrCA,EAAWmF,EAAa,GAER,MAAdC,GAAsBA,EAAapF,IACrCC,EAAWmF,EAAa,GAG1B,IAAIjF,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAK1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAoBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GAGZ,IACEG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,SAAS4D,EAAwBC,EAAIC,EAAIC,EAAIC,GAC3C,OAAKH,GAAME,GAAMD,GAAME,GAAQH,GAAME,GAAMD,GAAME,EAMnD,SAASC,EAAqBJ,EAAIC,EAAI7P,GACpC,OAAI7G,KAAKmN,IAAIsJ,EAAK5P,GAAK7G,KAAKmN,IAAIuJ,EAAK7P,GAC5B,GAEF,EAET,IAAIiQ,EAAyB,GAC3BC,EAAyB,GACvBC,EAA8B,GAC9BC,EAA8B,GAClC7E,EAAK9Q,QAAQ,CAACC,EAAMC,KASlB,GARI6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,SAGRtR,EAAQ,EAAG,CAEb,GAAkB,MAAd2U,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,EAAYA,GAAa,CACjF,IAAIe,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,GAEhEW,EAAuBnV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzBwV,EAA4BrV,KAAK,GAEjCqV,EAA4BrV,KAAK,GAKvC,GAAkB,MAAdyU,GACEI,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,EAAYA,GAAa,CACjF,IAAIc,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,GAEhEW,EAAuBpV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzByV,EAA4BtV,KAAK,GAEjCsV,EAA4BtV,KAAK,OAO3C,IAAIwV,EAAU3G,EACZ4G,EAAU1G,EACyB,GAAjCoG,EAAuB9R,QAAe+R,EAAuB/R,OAAS,EAElC,GAAlCiS,EAA4B,IAE9BE,EAAU3G,EACV4G,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GAGlCK,EAFmC,GAAjCL,EAAuB/R,OAEf0L,EAEAqG,EAAuB,GAAG,IAG/BD,EAAuB9R,OAAS,GAAsC,GAAjC+R,EAAuB/R,OAE/B,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GAGlCM,EAFmC,GAAjCN,EAAuB9R,OAEf0L,EAEAoG,EAAuB,GAAG,KAItCK,EAAU3G,EACV4G,EAAUN,EAAuB,GAAG,IAE7BA,EAAuB9R,OAAS,GAAK+R,EAAuB/R,OAAS,IAExC,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GACpCM,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GACpCK,EAAUN,EAAuB,GAAG,KAMpB,MAAhB7G,GAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAKuW,GACnEnW,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAKwW,IAIvE,IAAIhE,EAAW,GACXC,EAAY,GAoCd,GAlCIyD,EAAuB9R,OAAS,GAClC8R,EAAuBxV,QAAQ,CAACC,EAAMC,KACpC4R,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC/R,EAAK,GAAI0P,GACjBsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAAC/R,EAAK,GAAI4U,QAKrBY,EAAuB/R,OAAS,GAClC+R,EAAuBzV,QAAQ,CAACC,EAAMC,KACpC4R,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC/R,EAAK,GAAI0P,GACjBsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAAC/R,EAAK,GAAI6U,QAOY,GAAjCU,EAAuB9R,QAAgD,GAAjC+R,EAAuB/R,OAAa,CAC5E,MAAMsS,IAAQR,EAAuB,GAAG,GAAKC,EAAuB,GAAG,IAAM,GAAG5I,QAAQ,GAClFoJ,EAAYnF,EAAKI,UAAW9D,GAAMA,GAAK4I,GAGzB,MAAhBrH,GAC2B,MAAzBA,EAAakD,UAA6CvR,MAAzBqO,EAAakD,UAChDnS,EAAMmL,SAAS8D,EAAakD,SAASxS,IAAKsP,EAAakD,SAASvS,IAAK0W,GAGzElE,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACgE,EAAKrG,GACbsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACgE,EAAKjF,EAAKkF,OAGtBlE,EAAU1R,KAAK,CACb6R,MAAO8D,EACP7D,MAAOxC,EACPyC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,OAGXC,UAAW,CAAElO,MAAO,iBAKR,MAAduQ,GACF/C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUoF,GAClB5C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUqF,MAKN,MAAdC,GACFhD,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUqF,GAClB7C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUsF,MAMxB,IAAIrC,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAzQM,GA0QN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA7RK,OA8RXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAtUS,MAuUT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehBoE,QAAS,CAAC9H,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GAyBV,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GAOnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAWhR,KAAKkW,KAAKrF,EAAO,GAC5BI,EAAWjR,KAAKC,MAAM2Q,EAAO,GAC7BM,EAAa,GACbiF,EAAa,KACbC,EAAa,EAIf,GAAoB,MAAhBnG,EAAsB,CACxB,GAA4B,MAAxBA,EAAaoG,SAA2CzU,MAAxBqO,EAAaoG,QAAsB,CACrE,MAAMC,EAAStV,EAAM2C,SAASsM,EAAaoG,QAAQ1V,IAAKsP,EAAaoG,QAAQzV,KACzE,iCAAiC2P,KAAK+F,KACxCH,EAAaG,GAGjB,GAA4B,MAAxBrG,EAAasG,SAA2C3U,MAAxBqO,EAAasG,QAAsB,CACrE,MAAMD,EAAStV,EAAM2C,SAASsM,EAAasG,QAAQ5V,IAAKsP,EAAasG,QAAQ3V,KACzE,iCAAiC2P,KAAK+F,KACxCF,EAAaE,IAKD,MAAdH,GAAsBA,EAAanF,IACrCA,EAAWmF,EAAa,GAER,MAAdC,GAAsBA,EAAapF,IACrCC,EAAWmF,EAAa,GAG1B,IAAIjF,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAM1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAoBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GASZ,IACEG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAejB,SAAS4D,EAAwBC,EAAIC,EAAIC,EAAIC,GAC3C,OAAKH,GAAME,GAAMD,GAAME,GAAQH,GAAME,GAAMD,GAAME,EAMnD,SAASC,EAAqBJ,EAAIC,EAAI7P,GACpC,OAAI7G,KAAKmN,IAAIsJ,EAAK5P,GAAK7G,KAAKmN,IAAIuJ,EAAK7P,GAC5B,GAEF,EAvBTuL,EAAK9Q,QAAQ,CAACC,EAAMC,KACd6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,WAmBd,IAAIgE,EAAyB,GAC3BC,EAAyB,GACvBC,EAA8B,GAC9BC,EAA8B,GAClC7E,EAAK9Q,QAAQ,CAACC,EAAMC,KAClB,GAAIA,EAAQ,EAAG,CAEb,GAAkB,MAAd2U,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,EAAYA,GAAa,CACjF,IAAIe,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,GAEhEW,EAAuBnV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzBwV,EAA4BrV,KAAK,GAEjCqV,EAA4BrV,KAAK,GAKvC,GAAkB,MAAdyU,GACEI,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,EAAYA,GAAa,CACjF,IAAIc,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,GAEhEW,EAAuBpV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzByV,EAA4BtV,KAAK,GAEjCsV,EAA4BtV,KAAK,OAO3C,IAAIwV,EAAU3G,EACZ4G,EAAU1G,EACyB,GAAjCoG,EAAuB9R,QAAe+R,EAAuB/R,OAAS,EAElC,GAAlCiS,EAA4B,IAE9BE,EAAU3G,EACV4G,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GAGlCK,EAFmC,GAAjCL,EAAuB/R,OAEf0L,EAEAqG,EAAuB,GAAG,IAG/BD,EAAuB9R,OAAS,GAAsC,GAAjC+R,EAAuB/R,OAE/B,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GAGlCM,EAFmC,GAAjCN,EAAuB9R,OAEf0L,EAEAoG,EAAuB,GAAG,KAItCK,EAAU3G,EACV4G,EAAUN,EAAuB,GAAG,IAE7BA,EAAuB9R,OAAS,GAAK+R,EAAuB/R,OAAS,IAExC,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GACpCM,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GACpCK,EAAUN,EAAuB,GAAG,KAMpB,MAAhB7G,GAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAKuW,GACnEnW,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAKwW,IAIvE,IAAIhE,EAAW,GACXC,EAAY,GAEdD,EAAW,GACXC,EAAY,GAGI,MAAd8C,GACF/C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUoF,GAClB5C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUqF,MAKN,MAAdC,GACFhD,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUqF,GAClB7C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUsF,MAMxB,IAAIrC,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAvMM,GAwMN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA3NK,OA4NXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KApQS,MAqQT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehBqE,QAAS,CAAC/H,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GAyBV,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GAOnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAWhR,KAAKkW,KAAKrF,EAAO,GAC5BI,EAAWjR,KAAKC,MAAM2Q,EAAO,GAC7BM,EAAa,GACbiF,EAAa,KACbC,EAAa,KAIf,GAAoB,MAAhBnG,EAAsB,CACxB,GAA4B,MAAxBA,EAAaoG,SAA2CzU,MAAxBqO,EAAaoG,QAAsB,CACrE,MAAMC,EAAStV,EAAM2C,SAASsM,EAAaoG,QAAQ1V,IAAKsP,EAAaoG,QAAQzV,KACzE,iCAAiC2P,KAAK+F,KACxCH,EAAaG,GAGjB,GAA4B,MAAxBrG,EAAasG,SAA2C3U,MAAxBqO,EAAasG,QAAsB,CACrE,MAAMD,EAAStV,EAAM2C,SAASsM,EAAasG,QAAQ5V,IAAKsP,EAAasG,QAAQ3V,KACzE,iCAAiC2P,KAAK+F,KACxCF,EAAaE,IAKD,MAAdH,GAAsBA,EAAanF,IACrCA,EAAWmF,EAAa,GAER,MAAdC,GAAsBA,EAAapF,IACrCC,EAAWmF,EAAa,GAG1B,IAAIjF,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAM1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAoBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GASZ,IACEG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAejB,SAAS4D,EAAwBC,EAAIC,EAAIC,EAAIC,GAC3C,OAAKH,GAAME,GAAMD,GAAME,GAAQH,GAAME,GAAMD,GAAME,EAMnD,SAASC,EAAqBJ,EAAIC,EAAI7P,GACpC,OAAI7G,KAAKmN,IAAIsJ,EAAK5P,GAAK7G,KAAKmN,IAAIuJ,EAAK7P,GAC5B,GAEF,EAvBTuL,EAAK9Q,QAAQ,CAACC,EAAMC,KACd6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,WAmBd,IAAIgE,EAAyB,GAC3BC,EAAyB,GACvBC,EAA8B,GAC9BC,EAA8B,GAClC7E,EAAK9Q,QAAQ,CAACC,EAAMC,KAClB,GAAIA,EAAQ,EAAG,CAEb,GAAkB,MAAd2U,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,EAAYA,GAAa,CACjF,IAAIe,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,GAEhEW,EAAuBnV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzBwV,EAA4BrV,KAAK,GAEjCqV,EAA4BrV,KAAK,GAKvC,GAAkB,MAAdyU,GACEI,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,EAAYA,GAAa,CACjF,IAAIc,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,GAEhEW,EAAuBpV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzByV,EAA4BtV,KAAK,GAEjCsV,EAA4BtV,KAAK,OAO3C,IAAIwV,EAAU3G,EACZ4G,EAAU1G,EACyB,GAAjCoG,EAAuB9R,QAAe+R,EAAuB/R,OAAS,EAElC,GAAlCiS,EAA4B,IAE9BE,EAAU3G,EACV4G,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GAGlCK,EAFmC,GAAjCL,EAAuB/R,OAEf0L,EAEAqG,EAAuB,GAAG,IAG/BD,EAAuB9R,OAAS,GAAsC,GAAjC+R,EAAuB/R,OAE/B,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GAGlCM,EAFmC,GAAjCN,EAAuB9R,OAEf0L,EAEAoG,EAAuB,GAAG,KAItCK,EAAU3G,EACV4G,EAAUN,EAAuB,GAAG,IAE7BA,EAAuB9R,OAAS,GAAK+R,EAAuB/R,OAAS,IAExC,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GACpCM,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GACpCK,EAAUN,EAAuB,GAAG,KAMpB,MAAhB7G,GAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAKuW,GACnEnW,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAKwW,IAIvE,IAAIhE,EAAW,GACXC,EAAY,GAEdD,EAAW,GACXC,EAAY,GAGI,MAAd8C,GACF/C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUoF,GAClB5C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUqF,MAKN,MAAdC,GACFhD,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUqF,GAClB7C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUsF,MAMxB,IAAIrC,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAvMM,GAwMN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA3NK,OA4NXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KApQS,MAqQT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehBsE,QAAS,CAAChI,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IAAIC,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAGrBQ,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GAyBV,GAtBAJ,EAAY5O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC8O,EAAM1O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP8O,EAAM1O,KAAKJ,MAIjB4O,EAAY7O,QAAQ,CAACC,EAAMC,KACrB,iCAAiC+O,KAAKhP,GACxC+O,EAAM3O,KAAKJ,GAEC,KAARA,GAAuBK,MAARL,GAA6B,MAARA,GAAwB,IAARA,IACtDA,EAAO,EACP+O,EAAM3O,KAAKJ,MAMG,GAAhB+O,EAAMtL,OACR,OAKFqL,EAAM/O,QAASC,OASX6O,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAAIwL,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GAOnBQ,EAAWJ,EACXK,EAAWP,EACXQ,EAAWhR,KAAKkW,KAAKrF,EAAO,IAC5BI,EAAWjR,KAAKC,MAAM2Q,EAAO,IAC7BM,EAAa,GACbiF,EAAa,GACbC,EAAa,GAIf,GAAoB,MAAhBnG,EAAsB,CACxB,GAA4B,MAAxBA,EAAaoG,SAA2CzU,MAAxBqO,EAAaoG,QAAsB,CACrE,MAAMC,EAAStV,EAAM2C,SAASsM,EAAaoG,QAAQ1V,IAAKsP,EAAaoG,QAAQzV,KACzE,iCAAiC2P,KAAK+F,KACxCH,EAAaG,GAGjB,GAA4B,MAAxBrG,EAAasG,SAA2C3U,MAAxBqO,EAAasG,QAAsB,CACrE,MAAMD,EAAStV,EAAM2C,SAASsM,EAAasG,QAAQ5V,IAAKsP,EAAasG,QAAQ3V,KACzE,iCAAiC2P,KAAK+F,KACxCF,EAAaE,IAKD,MAAdH,GAAsBA,EAAanF,IACrCA,EAAWmF,EAAa,IAER,MAAdC,GAAsBA,EAAapF,IACrCC,EAAWmF,EAAa,IAG1B,IAAIjF,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GACxBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAM1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAKvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAoBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CuQ,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GAGZ,IACEG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,SAAS4D,EAAwBC,EAAIC,EAAIC,EAAIC,GAC3C,OAAKH,GAAME,GAAMD,GAAME,GAAQH,GAAME,GAAMD,GAAME,EAMnD,SAASC,EAAqBJ,EAAIC,EAAI7P,GACpC,OAAI7G,KAAKmN,IAAIsJ,EAAK5P,GAAK7G,KAAKmN,IAAIuJ,EAAK7P,GAC5B,GAEF,EAET,IAAIiQ,EAAyB,GAC3BC,EAAyB,GACvBC,EAA8B,GAC9BC,EAA8B,GAClC7E,EAAK9Q,QAAQ,CAACC,EAAMC,KASlB,GARI6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,SAGRtR,EAAQ,EAAG,CAEb,GAAkB,MAAd2U,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,EAAYA,GAAa,CACjF,IAAIe,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ2U,GAEhEW,EAAuBnV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzBwV,EAA4BrV,KAAK,GAEjCqV,EAA4BrV,KAAK,GAKvC,GAAkB,MAAdwU,GACEK,EAAwBnE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,EAAYA,GAAa,CACjF,IAAIc,EAASL,EAAqBxE,EAAK7Q,EAAQ,GAAI6Q,EAAK7Q,GAAQ4U,GAEhEW,EAAuBpV,KAAK,CAACyQ,EAAK5Q,EAAQ0V,GAAS7E,EAAK7Q,EAAQ0V,KAC5D7E,EAAK7Q,EAAQ,GAAK6Q,EAAK7Q,GAEzByV,EAA4BtV,KAAK,GAEjCsV,EAA4BtV,KAAK,OAM3C,IAAIwV,EAAU3G,EACZ4G,EAAU1G,EACyB,GAAjCoG,EAAuB9R,QAAe+R,EAAuB/R,OAAS,EAElC,GAAlCiS,EAA4B,IAE9BE,EAAU3G,EACV4G,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GAGlCK,EAFmC,GAAjCL,EAAuB/R,OAEf0L,EAEAqG,EAAuB,GAAG,IAG/BD,EAAuB9R,OAAS,GAAsC,GAAjC+R,EAAuB/R,OAE/B,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GAGlCM,EAFmC,GAAjCN,EAAuB9R,OAEf0L,EAEAoG,EAAuB,GAAG,KAItCK,EAAU3G,EACV4G,EAAUN,EAAuB,GAAG,IAE7BA,EAAuB9R,OAAS,GAAK+R,EAAuB/R,OAAS,IAExC,GAAlCgS,EAA4B,IAE9BG,EAAUL,EAAuB,GAAG,GACpCM,EAAUL,EAAuB,GAAG,KAGpCI,EAAUJ,EAAuB,GAAG,GACpCK,EAAUN,EAAuB,GAAG,KAMpB,MAAhB7G,GAC0B,MAAxBA,EAAagD,SAA2CrR,MAAxBqO,EAAagD,UAC/CjS,EAAMmL,SAAS8D,EAAagD,QAAQtS,IAAKsP,EAAagD,QAAQrS,IAAKuW,GACnEnW,EAAMmL,SAAS8D,EAAaiD,QAAQvS,IAAKsP,EAAaiD,QAAQtS,IAAKwW,IAIvE,IAAIhE,EAAW,GACXC,EAAY,GAmCd,GAjCIyD,EAAuB9R,OAAS,GAClC8R,EAAuBxV,QAAQ,CAACC,EAAMC,KACpC4R,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC/R,EAAK,GAAI0P,GACjBsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAAC/R,EAAK,GAAI4U,QAKrBY,EAAuB/R,OAAS,GAClC+R,EAAuBzV,QAAQ,CAACC,EAAMC,KACpC4R,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC/R,EAAK,GAAI0P,GACjBsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAAC/R,EAAK,GAAI6U,QAMY,GAAjCU,EAAuB9R,QAAgD,GAAjC+R,EAAuB/R,OAAa,CAC5E,MAAMsS,IAAQR,EAAuB,GAAG,GAAKC,EAAuB,GAAG,IAAM,GAAG5I,QAAQ,GAClFoJ,EAAYnF,EAAKI,UAAW9D,GAAMA,GAAK4I,GAGzB,MAAhBrH,GAC2B,MAAzBA,EAAakD,UAA6CvR,MAAzBqO,EAAakD,UAChDnS,EAAMmL,SAAS8D,EAAakD,SAASxS,IAAKsP,EAAakD,SAASvS,IAAK0W,GAGzElE,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACgE,EAAKrG,GACbsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACgE,EAAKjF,EAAKkF,OAGtBlE,EAAU1R,KAAK,CACb6R,MAAO8D,EACP7D,MAAOxC,EACPyC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,OAGXC,UAAW,CAAElO,MAAO,iBAKR,MAAduQ,GACF/C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUoF,GAClB5C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUqF,MAKN,MAAdC,GACFhD,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACvC,EAAUqF,GAClB7C,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAO,CAACxC,EAAUsF,MAMxB,IAAIrC,GAAgB,EAyIpB,OAxIA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAK/C,MAAMwV,MAAOC,GAClB,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAvQM,GAwQN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA3RK,OA4RXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KApUS,MAqUT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,WAKrBhC,UAAW,CACTlO,MAAOiK,EAAS,GAAGiG,WAErBjC,KAAM3C,EACN6E,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAMT,OAehBuE,QAAS,CAACjI,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAI6O,EAAWC,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAYhH,IAAI2H,EAAQ,CACR,CACE5W,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,KACpEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,MAEtE,CACEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,KACpEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,MAEtE,CACEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,KACpEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,MAEtE,CACEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,KACpEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,MAEtE,CACEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,KACpEI,EAAM2C,SAASsM,EAAa4H,QAAQ,GAAGlX,IAAKsP,EAAa4H,QAAQ,GAAGjX,MAEtE,CACEI,EAAM2C,SAASsM,EAAa4H,QAAQ,IAAIlX,IAAKsP,EAAa4H,QAAQ,IAAIjX,KACtEI,EAAM2C,SAASsM,EAAa4H,QAAQ,IAAIlX,IAAKsP,EAAa4H,QAAQ,IAAIjX,OAG1EyP,EAAQV,EAAS,GACjBmB,EAAW,IACXC,EAAW,IACXE,EAAW,EACXD,EAAW,EAEX8G,EAAY,CAAC,MAAO,MAAO,KAAM,MAAO,MAAO,MAQjD,IAAI1E,EAAW,GACXC,EAAY,GACZ7C,EAAOxQ,KAAK2Q,OAAOiH,EAAMG,IAAKxW,GAASA,EAAK,KAC5CmP,EAAO1Q,KAAKyQ,OAAOmH,EAAMG,IAAKxW,GAASA,EAAK,KA8EhD,GA5EAqW,EAAMtW,QAAQ,CAACC,EAAMC,KACnB4R,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC/R,EAAK,GAAIqW,EAAM5S,OAASxD,GAChC+R,UAAW,CACT3N,MAAOiK,EAAS,GAAGiG,UACnBtM,KAAM,QACNjC,MAAO,IAGX,CACE+L,MAAO,CAAC/R,EAAK,GAAIqW,EAAM5S,OAASxD,QAItBgP,GAAQE,IAEtB0C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC9C,EAAM,GACd+C,UAAW,CACT3N,MAAO,OACP4D,KAAM,SACNjC,MAAO,IAGX,CACE+L,MAAO,CAAC9C,EAAM,MAIlB4C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAAC5C,EAAM,GACd6C,UAAW,CACT3N,MAAO,OACP4D,KAAM,SACNjC,MAAO,IAGX,CACE+L,MAAO,CAAC5C,EAAM,MAGlB2C,EAAY,CACV,CACEG,MAAOhD,EACPiD,MAAO,EACPC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,WAGXC,UAAW,CAAElO,MAAO,gBAEtB,CACE4N,MAAO9C,EACP+C,MAAO,EACPC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,WAGXC,UAAW,CAAElO,MAAO,kBAKtB4K,GAAQE,EAAM,CAEhB,MAAM4G,GAAO9G,EAAOE,GAAQ,EAC5B0C,EAASzR,KAAK,CACZ,CACE2R,MAAO,CAACgE,EAAK,GACb/D,UAAW,CACT3N,MAAO,OACP4D,KAAM,SACNjC,MAAO,IAGX,CACE+L,MAAO,CAACgE,EAAK,MAGjBjE,EAAU1R,KAAK,CACb6R,MAAO8D,EACP7D,MAAO,EACPC,aAAc,CAAC,EAAG,IAClBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,MAAO,SAGXC,UAAW,CAAElO,MAAO,iBAIpBoS,MAAMxH,KACRA,EAAO,GAELwH,MAAMtH,KACRA,EAAO,GAIW,MAAhBT,IAC2B,MAAzBA,EAAakD,UAA6CvR,MAAzBqO,EAAakD,UAChDnS,EAAMmL,SAAS8D,EAAakD,SAASxS,IAAKsP,EAAakD,SAASvS,IAAK4P,GAE1C,MAAzBP,EAAagI,UAA6CrW,MAAzBqO,EAAagI,UAChDjX,EAAMmL,SAAS8D,EAAagI,SAAStX,IAAKsP,EAAagI,SAASrX,IAAK8P,IAKzE,IAAIqD,GAAgB,EAoGpB,OAnGA6D,EAAMtW,QAASC,IACbwS,EAAgBxS,EAAKyS,MAAOC,GACZ,KAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,MAIA,CACXkD,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAASL,EAAqB,GAAL,GACzBM,cAAc,GAGhBvL,MAAO,CACL,CACE8K,MAAM,EACNe,KAnKQ,MAoKR/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KA5KI,SA6KJ/I,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAvLK,OAwLXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLiH,UAAW,CACTtO,UAAW,SAAUiK,GAEnB,OAAY,GAARA,EACK,GAEAiE,EAAUjE,EAAO,OAMlC8B,OAAQ,CACN,CACEL,KA1NS,MA2NT9L,KAAM,OAENuM,UAAW,CACTlC,KAAMR,GAER2C,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjBe,KAAMT,OAehB+E,QAAS,CAACzI,EAAiCC,EAA6BC,EAA6B5O,KACnG,IAAIoS,EAAWtD,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAG5F,MAAhBA,GAAgD,MAAvBA,EAAamI,QAAyCxW,MAAvBqO,EAAamI,SACvEnI,EAAamI,QAAS,GAIxB,IAAIC,EAA+B,GAAnB1I,EAAS3K,OAErBsT,EAAe3I,EAAS,GAC1B4I,EAAeF,EAAY1I,EAAS,GAAK,GACzC6I,EAAe5I,EAAS,GACxB6I,EAAeJ,EAAYzI,EAAS,GAAK,GAEvC9G,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAGjB,MAAM+F,EAAW,CAACzI,EAAaC,EAAayI,EAAiBC,EAAgBC,KAE3E,IAAI1I,EAAwB,MAAhBH,EAAuBA,EAAaG,MAAQ,EACtDC,EAAQ,GACRC,EAAQ,GACRY,EAAa,GAgBf,GAbAhB,EAAY5O,QAAQ,CAACC,EAAMC,KAEvB,iCAAiC+O,KAAKhP,IAC9B,GAARA,GACA,iCAAiCgP,KAAKJ,EAAY3O,KAC5B,GAAtB2O,EAAY3O,KAEZ6O,EAAM1O,KAAKJ,GACX+O,EAAM3O,KAAKwO,EAAY3O,OAKP,GAAhB8O,EAAMtL,OACR,OAGEoL,GAASE,EAAMtL,SACjBoL,EAAQE,EAAMtL,OAAS,GAGzB,IAUI+T,EAAgBC,EAVhBxI,EAAOxQ,KAAKyQ,OAAOJ,GACrBK,EAAO1Q,KAAK2Q,OAAON,GACnBO,EAAO5Q,KAAKyQ,OAAOH,GACnBO,EAAO7Q,KAAK2Q,OAAOL,GACnBQ,EAAW9Q,KAAKkW,KAAKxF,EAAO,IAC5BK,EAAW/Q,KAAKiZ,MAAMzI,EAAO,IAC7BQ,EAAW9C,OAAOpB,iBAAiBC,SAAS8D,EAAO,IAAM,MACzDI,EAAW/C,OAAOpB,iBAAiBC,SAAS6D,EAAO,IAAM,MAIvC,MAAhBX,GAAwBA,EAAamI,SACT,MAA1BnI,EAAaiJ,WAA+CtX,MAA1BqO,EAAaiJ,YACjDH,EAAiB/X,EAAM2C,SAASsM,EAAaiJ,UAAUvY,IAAKsP,EAAaiJ,UAAUtY,MAEvD,MAA1BqP,EAAakJ,WAA+CvX,MAA1BqO,EAAakJ,YACjDH,EAAiBhY,EAAM2C,SAASsM,EAAakJ,UAAUxY,IAAKsP,EAAakJ,UAAUvY,MAIjF,iCAAiC2P,KAAKyI,IAAmBA,EAAiBhI,IAC5EA,EAAW9C,OAAOpB,iBAAiBC,SAASiM,EAAiB,IAAM,QAIvE,IAAI7H,EAAS,GACbd,EAAM/O,QAAQ,CAACC,EAAMC,KACnB2P,EAAOxP,KAAK,CAACJ,EAAM+O,EAAM9O,OAkB3B,MAGM4P,EAjBN,SAA2BxK,EAAGyK,GAC5B,MAAMC,EAAS,GACf,IAAK,IAAIxP,EAAI,EAAGA,EAAI8E,EAAE5B,OAAQlD,IAAK,CACjC,MAAMnB,EAAM,GACZ,IAAK,IAAIoB,EAAI,EAAGA,GAAKsP,EAAGtP,IAEtBpB,EAAIgB,KAAK4P,gBAAKC,IAAI5K,EAAE9E,GAAIC,IAE1BuP,EAAO3P,KAAKhB,GAEd,OAAO4Q,gBAAKD,OAAOA,GAIMG,CAAkBpB,EAAOD,GAI9CsB,EAAKH,gBAAKI,UAAUP,GACpBQ,EAAML,gBAAKM,SAASH,EAAIN,GAExBU,EAAMP,gBAAKM,SAASH,EAAIH,gBAAKD,OAAOhB,IAG1C,IAAIzR,EAAc,KAChBkT,EAAoB,GACtB,IACElT,EAAS0S,gBAAKS,QAAQJ,EAAKE,GAC3BC,EAAelT,EAAOoT,UACtB,MAAOC,GACP,IAAK,IAAI1Q,EAAQ,EAAGA,EAAQ6O,EAAMrL,OAAQxD,IACxCuQ,EAAapQ,KAAK,CAAC,IAOvB,SAASwQ,EAAYvL,GACnB,IAAIC,EAAI,EASR,OARAkL,EAAazQ,QAAQ,CAACC,EAAMC,KAM1BqF,GAAKtF,EAAOvB,KAAAwR,IAAA5K,EAAKpF,KAEZqF,EAsBT,IAAIuL,EAAO,GACPC,EAAO,GACX,IAAK,IAAIvQ,EAAI0O,EAAM1O,GAAK4O,EAAM5O,GAAK,IAAM,CACvC,IAAIwQ,EAAOpE,OAAOpB,iBAAiBC,SAASjL,EAAG,MAE/CA,EAAIoM,OAAOoE,GAEXD,EAAK1Q,KAAKwQ,EAAYG,IACtBF,EAAKzQ,KAAK2Q,GAEZ,IAAI3B,EAAM3Q,KAAK2Q,OAAO0B,GAGlBE,EAAWF,EAAKG,UAAWhU,GAAUA,IAAUmS,GAM/CyI,EAAa,IACfC,EAAa,KAGXC,EAAc,EAChBC,EAAc,EAGI,MAAhBtJ,IAG4B,MAA1BA,EAAauJ,WAA+C5X,MAA1BqO,EAAauJ,YACjDJ,EAAanJ,EAAauJ,WAEE,MAA1BvJ,EAAawJ,WAA+C7X,MAA1BqO,EAAawJ,YACjDJ,EAAapJ,EAAawJ,WAGN,GAAlBrH,EAAKG,IAAyB,GAAP5B,GACzB3P,EAAMmL,SAAS8D,EAAayJ,QAAQ/Y,IAAKsP,EAAayJ,QAAQ9Y,IAAK,KACnEI,EAAMmL,SAAS8D,EAAa0J,QAAQhZ,IAAKsP,EAAa0J,QAAQ/Y,IAAK,OAEnE0Y,EAAcxM,iBAAiBC,SAASqF,EAAKG,GAAW6G,GACxDG,EAAczM,iBAAiBC,SAAS4D,EAAK0I,GAE7CrY,EAAMmL,SAAS8D,EAAayJ,QAAQ/Y,IAAKsP,EAAayJ,QAAQ9Y,IAAK0Y,GACnEtY,EAAMmL,SAAS8D,EAAa0J,QAAQhZ,IAAKsP,EAAa0J,QAAQ/Y,IAAK2Y,KAIvEnH,EAAK9Q,QAAQ,CAACC,EAAMC,KACd6O,EAAMwC,SAAStR,GACjB2P,EAAWvP,KAAK,CAAEnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,MAErC0P,EAAWvP,KAAK,CACdnD,MAAO,CAAC+C,EAAM8Q,EAAK7Q,IACnBsR,OAAQ,WAUd,MAAMC,EAAY,CAACX,EAAKG,GAAWrE,OAAOpB,iBAAiBC,SAAS4D,EAAK0I,KACvErG,EAAS,CAACD,EAAU,GAAI9B,GACxB2I,EAAS,CAAC7I,EAAUgC,EAAU,IAEhC,IAAI8G,EAAe,CACfhG,KAAM,CACJ,CACEL,MAAO1G,iBAAiBC,SAASgG,EAAU,GAAIqG,GAC/C3F,MAAO3G,iBAAiBC,SAASgG,EAAU,GAAIsG,GAC/C3F,aAAc,CAAC,EAAG,IAClBZ,OAAQ,SACR+C,WAAY,EACZlC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,OAA+B,GAA3B3F,OAAO2F,EAAKA,KAAKL,QAA0C,GAA3BtF,OAAO2F,EAAKA,KAAKJ,OAC5C,GAEA,KAAOI,EAAKA,KAAKL,MAAQ,IAAMK,EAAKA,KAAKJ,MAAQ,MAI9DK,UAAW,CAAElO,MAAO,kBAI1BkU,EAAc,CACZhH,OAAQ,CAAC,OAAQ,QACjBgB,UAAW,CACTP,UAAW,CACT/J,KAAM,QACN5D,MAAO,OACP2B,MAAO,IAGXsM,KAAM,CACJ,CACE,CACEP,MAAON,EACPO,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAOP,IAGX,CACE,CACEO,MAAOsG,EACPrG,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CACE8J,MAAOP,MAOb9C,EAAamI,QAAU,iCAAiC7H,KAAKwI,IAAmB,iCAAiCxI,KAAKyI,KACxHc,EAAc,KACdD,EAAahG,KAAK,GAAGF,MAAQ,KAC7BkG,EAAahG,KAAK,GAAGH,aAAe,KACpCmG,EAAahG,KAAK,GAAGC,UAAUlO,MAAQ,UACvCiU,EAAahG,KAAK,GAAGL,MAAQuF,EAC7Bc,EAAahG,KAAK,GAAGJ,MAAQuF,EAC7Bc,EAAc,MAGhB,IAAIC,EAAgB,CAClBzE,KAlRW,MAmRX9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS0F,EAAgB,EAAI,GAAGhD,UAEvCtM,KAAMsP,EAAgB,SAAW,SAGnChF,UAAW,CACTlO,MAAOwN,EAAS0F,EAAgB,EAAI,GAAGhD,WAEzCjC,KAAM3C,EACN6E,UAAW6C,EAAkBiB,EAAe,KAC5C7D,SAAU6C,EAAiBiB,EAAc,MAG3C,MAAO,CACL/I,SAAUA,EACVD,SAAUA,EACVG,SAAUA,EACVD,SAAUA,EACVX,MAAOA,EACP0J,cAAeA,EACfC,aAAc,CAAC5H,EAAKG,GAAW5B,KAInC,IAUEsJ,EAVElJ,EAAW,EACbD,EAAW,EACXG,EAAW,EACXD,EAAW,EACXX,EAAQ,GACRa,EAAa,GACbgJ,EAAgB,EAChBC,EAAgB,EAEdC,EAAWzB,EAASL,EAAcE,GAAeH,GAAYA,GAAW,GAO5E,GALIA,IACF4B,EAAWtB,EAASJ,EAAcE,GAAc,GAAO,GAAO,IAIhD7W,MAAZwY,GAAqC,MAAZA,EAC3B,OAIF,GAAK/B,EASA,CACH,GAAgBzW,MAAZqY,GAAqC,MAAZA,EAC3B,OAGFnJ,EAAWsJ,EAAStJ,SAChBmJ,EAASnJ,SAAWA,IACtBA,EAAWmJ,EAASnJ,UAEtBC,EAAWqJ,EAASrJ,SAChBkJ,EAASlJ,SAAWA,IACtBA,EAAWkJ,EAASlJ,UAEtBC,EAAWoJ,EAASpJ,SAChBiJ,EAASjJ,SAAWA,IACtBA,EAAWiJ,EAASjJ,UAEtBC,EAAWmJ,EAASnJ,SAChBgJ,EAAShJ,SAAWA,IACtBA,EAAWgJ,EAAShJ,UAGtBmJ,EAAS/J,MAAM/O,QAASC,IACtB8O,EAAM1O,KAAKJ,KAEb0Y,EAAS5J,MAAM/O,QAASC,IACtB8O,EAAM1O,KAAKJ,KAGb2P,EAAWvP,KAAKyY,EAASL,eACzB7I,EAAWvP,KAAKsY,EAASF,eAEzBG,GAAiBE,EAASJ,aAAa,GAAKC,EAASD,aAAa,IAAM,EACxEG,GAAiBC,EAASJ,aAAa,GAAKC,EAASD,aAAa,IAAM,EASxE,IAAIZ,EAAa,IACfC,EAAa,KAGXC,EAAc,EAChBC,EAAc,EAGI,MAAhBtJ,IAG4B,MAA1BA,EAAauJ,WAA+C5X,MAA1BqO,EAAauJ,YACjDJ,EAAanJ,EAAauJ,WAEE,MAA1BvJ,EAAawJ,WAA+C7X,MAA1BqO,EAAawJ,YACjDJ,EAAapJ,EAAawJ,WAGP,GAAjBS,GAAuC,GAAjBC,GACxBnZ,EAAMmL,SAAS8D,EAAayJ,QAAQ/Y,IAAKsP,EAAayJ,QAAQ9Y,IAAK,KACnEI,EAAMmL,SAAS8D,EAAa0J,QAAQhZ,IAAKsP,EAAa0J,QAAQ/Y,IAAK,OAEnE0Y,EAAcxM,iBAAiBC,SAASmN,EAAed,GACvDG,EAAczM,iBAAiBC,SAASoN,EAAed,GAEvDrY,EAAMmL,SAAS8D,EAAayJ,QAAQ/Y,IAAKsP,EAAayJ,QAAQ9Y,IAAK0Y,GACnEtY,EAAMmL,SAAS8D,EAAa0J,QAAQhZ,IAAKsP,EAAa0J,QAAQ/Y,IAAK2Y,UA5EvExI,EAAWqJ,EAASrJ,SACpBD,EAAWsJ,EAAStJ,SACpBG,EAAWmJ,EAASnJ,SACpBD,EAAWoJ,EAASpJ,SACpBX,EAAQ+J,EAAS/J,MACjBa,EAAWvP,KAAKyY,EAASL,eA6E3B,IAAIhG,GAAgB,EAuGpB,OAtGA7C,EAAW5P,QAASC,IAClBwS,EAAgBxS,EAAKsS,KAAK,GAAGrV,MAAMwV,MAAOC,GAC1B,GAAPA,KAGPF,IACFhD,EAAW,KACXD,EAAW,KACXG,EAAW,KACXD,EAAW,KACXE,EAAa,IAGF,CACXgD,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAE1B,OAAOD,GAASA,EAAMxP,OAAS,EAC3BwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DtG,OAAOpB,iBAAiBC,SAASyH,EAAM,GAAGhW,MAAM,GAAI,OAChHgW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAvdK,OAwdXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNmH,IAAKG,EACLL,IAAKM,EACL8C,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACNmH,IAAKK,EACLP,IAAKQ,EACLqE,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQzE,IAYZmJ,QAAS,CAAC3K,EAAiCC,EAA6BC,KACtE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAG/ByC,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAGjB,MAAM0H,EAAiB3K,EAAS,GAC9B4K,EAAiB3K,EAAS,GAC1B4K,EAAmB5K,EAAS,GAC5B6K,EAAmB7K,EAAS,GACxB8K,EAAiB,GACvBJ,EAAehZ,QAAQ,CAACC,EAAMC,KAC5BkZ,EAAQ/Y,KAAK,CACXiF,EAAGrF,EACHsF,EAAG0T,EAAe/Y,GAClBmZ,IAAKH,EAAiBhZ,GACtBoZ,IAAKH,EAAiBjZ,OAG1BkZ,EAAQG,KAAK,SAAUC,EAAGC,GACxB,OAAOD,EAAElU,EAAImU,EAAEnU,CACjB,GAEA,MAAMsJ,EAAqB,GACzBC,EAAqB,GACrB6K,EAAuB,GACvBC,EAAuB,GAGzB,IAAIC,EAAiB,EACrBV,EAAiBlZ,QAAQ,CAACC,EAAMC,KAClB,MAARD,GAAwB,KAARA,GAClB2Z,MAKAA,GAAkBV,EAAiBxV,OACrC0V,EAAQpZ,QAAQ,CAACC,EAAMC,KACrB0O,EAAYvO,KAAKJ,EAAKqF,GACtBuJ,EAAYxO,KAAKJ,EAAKsF,GACtBmU,EAAcrZ,KAAKJ,EAAKoZ,KACxBM,EAActZ,KAAKJ,EAAKqZ,OAI1BF,EAAQpZ,QAAQ,CAACC,EAAMC,KACL,MAAZD,EAAKoZ,KAA2B,KAAZpZ,EAAKoZ,KAA0B,MAAZpZ,EAAKqZ,KAA2B,KAAZrZ,EAAKqZ,MAClE1K,EAAYvO,KAAKJ,EAAKqF,GACtBuJ,EAAYxO,KAAKJ,EAAKsF,GACtBmU,EAAcrZ,KAAKJ,EAAKoZ,KACxBM,EAActZ,KAAKJ,EAAKqZ,QAM9B,IAAIvK,EAAe,GACjB8K,EAAiB,GACjBC,EAAiB,GACjBC,EAAsB,GAMxBnL,EAAY5O,QAAQ,CAACC,EAAMC,KAEzB,MAAM8Z,EAASpN,OAAOpB,iBAAiBC,SAAS/M,KAAAwR,IAAAjQ,EAAQ,KAAM,OAE9D8O,EAAM1O,KAAK,CAAC2Z,EAAQnL,EAAY3O,KAChC6Z,EAAa1Z,KAAK,CAChB2T,KAAM/T,EAAO,GACbiS,MAAO8H,EACP3H,MAAO,CACLC,OAAM1D,EAAYlL,QAAU,GAAKxD,EAAQ,GAAK,GAAKA,EAAQ,GAC3DqT,SAba,MAiBjBsG,EAAQxZ,KAAK,CAAC2Z,EAAQN,EAAcxZ,KACpC4Z,EAAQzZ,KAAK,CAAC2Z,EAAQL,EAAczZ,OAQtC,MAAM+Z,EAAa,CAAC/R,EAAMqK,KACxB,MAAMyB,EAAe,GAAR9L,EAAY,OAAiB,GAARA,EAAY,KAAO,KAC/CsJ,EAAiB,GAARtJ,EAAY,OAAiB,GAARA,EAAY,WAAa,SACvDgS,EAAmB,GAARhS,EAAY,QAAkB,GAARA,EAAY,SAAW,CAAC,GAAI,GAC7D5D,EAAgB,GAAR4D,EAAY4J,EAAS,GAAG0C,UAAoB,GAARtM,EAAY4J,EAAS,GAAG0C,UAAY1C,EAAS,GAAG0C,UAElG,IAAI2F,EAAM,CACRnG,KAAMA,EACN9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQA,EACR+C,WAAY,EACZ6F,EAAG,GAEHnI,UAAW,CACT3N,MAAOA,EAEP4D,KAAMgS,GAGR1H,UAAW,CACTlO,MAAOA,GAETiO,KAAMA,EACN8H,cAAc,EACd3F,SAAU,CACRlD,OAAQ,GACR8I,QAAQ,EACRjI,MAAO,CAELkI,SAAU,QAIVjS,UAAYiK,GACHA,EAAKyB,MAGhB/B,UAAW,CAAE3N,MAAO,UAAW4D,KAAM,SACrCqK,KAAMwH,IAIV,OAAOI,GAIT,IAAI1H,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EA2GhB,OA1GAzL,EAAM/O,QAASC,IACE,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAA8B,KAAXA,EAAK,IAClDua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,IAGhByG,EAAiBtT,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,IACrEkZ,EAAiBvT,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,MAErEwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,GAAID,GAASA,EAAM,GAAGX,KAAK7O,OAAS,EAAG,CACrC,IAAI+W,EAAOV,EAAa/L,OAAQ/N,GAASA,EAAKiS,OAASgB,EAAM,GAAGX,KAAK,IAErE,OAAOW,EAAM,GAAGE,WAAa,IAAMqH,EAAK,GAAGzG,KAApCd,KAAuDA,EAAM,GAAGX,KAAK,GAE5E,OAAOW,EAAM,GAAGX,OAKtB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAvLM,GAwLN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnJ,KAAM,SACNiI,KAAM,CAAC,OAAQ,KAAM,MACrBmB,SAAU,CACR,QAAM,EACN,MAAI,EACJ,MAAI,GAENE,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN2L,SAAU,CAAEvB,MAAM,GAClBsE,UAAW,CAAEtE,MAAM,GAEnByB,UAAW,CACTzB,MAAM,GAERnD,IAAKJ,EAAMrL,OAAS,EAAKqL,EAAM,GAAG,GAAK,GAAMA,EAAM,GAAG,GAAK,GAAM,EAAK,KACtEM,IAAKN,EAAMrL,OAAS,EAAIqL,EAAMA,EAAMrL,OAAS,GAAG,GAAK,GAAM,MAE7DyO,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAGVwS,YAAa,GACb9D,UAAW,CACTrD,SAlLW,MAsLjBc,OAAQ,CAAC4F,EAAW,EAAGlL,GAAQkL,EAAW,EAAGJ,GAAUI,EAAW,EAAGH,MAYzEa,QAAS,CAACvM,EAAiCC,EAA6BC,EAA6B5O,KACpF8O,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAGhH,GACEN,EAAS,GAAGzI,KAAM3F,GAAiB,MAARA,GAAwB,IAARA,GAAsBK,MAARL,IACzDqO,EAAS,GAAG1I,KAAM3F,GAAiB,MAARA,GAAwB,IAARA,GAAsBK,MAARL,GAEzD,MAAO,CAAA,EAGT,IAAIuH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIbvC,EAAQV,EAAS,GACnBW,EAAQV,EAAS,GACjBsM,EAAO,IACPC,EAAO,MACPC,EAAO,GACPC,EAAO,GAGT,GAAoB,MAAhBpM,EAAsB,CACxB,IAAIqM,EAAUtb,EAAM2C,SAASsM,EAAasM,UAAU5b,IAAKsP,EAAasM,UAAU3b,KAC9E4b,EAAUxb,EAAM2C,SAASsM,EAAawM,UAAU9b,IAAKsP,EAAawM,UAAU7b,KAC1E,iCAAiC2P,KAAK+L,KACxCA,EAAUpO,OAAOoO,GACF,KAAXA,GAA6B,IAAXA,IACpBJ,EAAOI,IAGI,OAAXE,GAA+B,OAAXA,IACtBL,EAAOK,GAOX,IAAK,MAAME,KAASrM,EAClB+L,EAAKza,KAAK3B,KAAK2c,IAAID,IAErB,IAAK,MAAME,KAAStM,EAClB+L,EAAK1a,KAAK3B,KAAK2c,IAAIC,IAGrB,IAAIC,GAAOR,EAAK,GAAKA,EAAK,KAAOD,EAAK,GAAKA,EAAK,IAC5CU,GAAOT,EAAK,GAAKA,EAAK,KAAOD,EAAK,GAAKA,EAAK,IAEhD,MAEEtL,EAFW9Q,KAAK2Q,IAAI3R,MAAMgB,KAAMqQ,GAEd,EAClBU,EAFO/Q,KAAKyQ,IAAIzR,MAAMgB,KAAMqQ,GAEV,GAGlBW,EAFOhR,KAAK2Q,IAAI3R,MAAMgB,KAAMsQ,GAEV,EAClBW,EAFOjR,KAAKyQ,IAAIzR,MAAMgB,KAAMsQ,GAEV,EAClByM,EAAW,CAAC,IAAK,IAAK,KACtB7L,EAAa,GAOf,SAAS8L,EAAWC,EAAQC,EAAQC,GAClC,MAAMC,EAAQpd,KAAK2c,IAAIM,EAAO,IACxBI,EAAQrd,KAAK2c,IAAIM,EAAO,IACxBK,EAAQtd,KAAK2c,IAAIO,EAAO,IAIxBK,EAAOF,GAHCrd,KAAK2c,IAAIO,EAAO,IACPG,IAAUC,EAAQF,IACtBpd,KAAK2c,IAAIQ,GACeC,GAC3C,OAAOpd,KAAKwd,IAAID,GAblBlN,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,GAAQub,EAASvb,OAehD,IAEIic,EAAU,CAAC,GADJT,EAAW,CAAC3M,EAAM,GAAIC,EAAM,IAAK,CAACD,EAAM,GAAIC,EAAM,IAD/C,KAIVoN,EAAU,CAAC,GADJV,EAAW,CAAC3M,EAAM,GAAIC,EAAM,IAAK,CAACD,EAAM,GAAIC,EAAM,IAH/C,KAUd,SAASqN,EAAcC,GACrB,IAAIC,EAQJ,OALEA,EAFU,OAAR1B,EAEG,KAAO,KAAOyB,EAAK,KAAQA,EAAKA,EAAK,OAAYA,EAAKA,EAAKA,EAG3DA,GAAM,KAAQA,EAAK,OAEnBC,EAGT,IAgBIC,EAAMC,EAAMC,EAhBZhL,EAAS,GACT4G,EAAS,GACTqE,EAAW,GAEXC,EAAKP,EAActN,EAAM,IACzB8N,EAAQne,KAAK2c,IAAIuB,GACjBE,GAAWvB,EAAMT,EAAK,IAAMC,EAAK,GAAK8B,IAAUtB,EAChDwB,GAAWvB,EAAMV,EAAK,IAAMC,EAAK,GAAK8B,IAAUrB,EAIhDwB,EAActe,KAAKwd,KAAKY,EAAUC,GAAW,GAC7CE,EAAQve,KAAK2c,IAAI2B,GACjBE,GAAOnC,EAAK,GAAK8B,IAAU/B,EAAK,GAAKmC,GAMzC,GAAY,IAARrC,EAAY,CAEd,IAAIuC,EAAMze,KAAK2c,IAAI,IACf+B,GAAOF,EAAMpC,EAAK,IAAMC,EAAK,GAAKoC,IAAQD,EAC1CZ,EAAK5d,KAAKwd,IAAIkB,GAGdC,EAAM3e,KAAK2c,IAAI,GACfiC,GAAOJ,EAAMpC,EAAK,IAAMC,EAAK,GAAKsC,IAAQH,EAC1CK,EAAK7e,KAAKwd,IAAIoB,GAElBX,EAAW,CAACK,EAAaJ,GACzBlL,EAAS,CAACsL,EAAarN,GACvB2I,EAAS,CAAC7I,EAAUmN,GACpBhN,EAAWvP,KAAK,CAAC2c,EAAaJ,EAAI,OAElCJ,EAAOI,EACPH,EAAOH,EACPI,EAAOa,OAEF,GAAY,KAAR3C,EAAa,CAEtB,IAAIuC,EAAMze,KAAK2c,IAAI,IACf+B,GAAOF,EAAMpC,EAAK,IAAMC,EAAK,GAAKoC,IAAQD,EAC1CZ,EAAK5d,KAAKwd,IAAIkB,GAGdI,EAAOnB,EAAcC,GACrBmB,EAAU/e,KAAK2c,IAAImC,GACnBE,GAAYnC,EAAMT,EAAK,IAAMC,EAAK,GAAK0C,IAAYlC,EACnDoC,GAAYnC,EAAMV,EAAK,IAAMC,EAAK,GAAK0C,IAAYjC,EAEnDoC,EAAelf,KAAKwd,KAAKwB,EAAWC,GAAY,GAChDJ,EAAKK,EAETjB,EAAW,CAACiB,EAAcJ,GAE1B9L,EAAS,CAACkM,EAAcjO,GACxB2I,EAAS,CAAC7I,EAAU+N,GACpB5N,EAAWvP,KAAK,CAACud,EAAcJ,EAAM,OAErChB,EAAOgB,EACPf,EAAOH,EACPI,EAAOa,EAYT,IAPI7G,MAAM8F,IAAS9F,MAAM+F,IAAS/F,MAAMgG,MACtCF,EAAO,EACPC,EAAO,EACPC,EAAO,GAIW,MAAhB/N,EAAsB,CAExB,IAAIkP,EAAU,IACZC,EAAU,IACVC,EAAU,IACoB,MAA5BpP,EAAaqP,aAAmD1d,MAA5BqO,EAAaqP,cACnDH,EAAUlP,EAAaqP,aAEO,MAA5BrP,EAAasP,aAAmD3d,MAA5BqO,EAAasP,cACnDH,EAAUnP,EAAasP,aAEO,MAA5BtP,EAAauP,aAAmD5d,MAA5BqO,EAAauP,cACnDH,EAAUpP,EAAauP,aAGK,MAA1BvP,EAAawP,WAA+C7d,MAA1BqO,EAAawP,YACrC,GAAR3B,EACF9c,EAAMmL,SAAS8D,EAAawP,UAAU9e,IAAKsP,EAAawP,UAAU7e,IAAK,KAEvEI,EAAMmL,SAAS8D,EAAawP,UAAU9e,IAAKsP,EAAawP,UAAU7e,IAAKkM,iBAAiBC,SAAS+Q,EAAMqB,KAG7E,MAA1BlP,EAAayP,WAA+C9d,MAA1BqO,EAAayP,YACrC,GAAR3B,EACF/c,EAAMmL,SAAS8D,EAAayP,UAAU/e,IAAKsP,EAAayP,UAAU9e,IAAK,KAEvEI,EAAMmL,SAAS8D,EAAayP,UAAU/e,IAAKsP,EAAayP,UAAU9e,IAAKkM,iBAAiBC,SAASgR,EAAMqB,KAG7E,MAA1BnP,EAAa0P,WAA+C/d,MAA1BqO,EAAa0P,YACrC,GAAR3B,EACFhd,EAAMmL,SAAS8D,EAAa0P,UAAUhf,IAAKsP,EAAa0P,UAAU/e,IAAK,KAEvEI,EAAMmL,SAAS8D,EAAa0P,UAAUhf,IAAKsP,EAAa0P,UAAU/e,IAAKkM,iBAAiBC,SAASiR,EAAMqB,KAK7G,IAAItL,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EAmOhB,OAlOAzL,EAAM/O,QAASC,IACE,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAA8B,KAAXA,EAAK,IAClDua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,IAGhBzD,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,IAC1D+O,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,MAE1DwS,GAAgB,GAEL,CACXG,KAAM,CACJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DA,EAAM,GAAGhW,MAAM,GAAKgW,EAAM,GAAGX,OAIhI/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CApQK,OAqQXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,MACNiH,IAAKM,EACLJ,IAAKG,EACL8O,SAAU,EACVzK,SAAU,CACRvB,MAAM,EACNwB,gBAAgB,GAElBC,UAAW,CACTzB,MAAM,GAERsE,UAAW,CACTtE,MAAM,IAGVH,MAAO,CACLjK,KAAM,MACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdhF,IAAKQ,EACLN,IAAKK,EACL4O,SAAU,EACVzK,SAAU,CACRvB,MAAM,EACNwB,gBAAgB,GAElBC,UAAW,CACTzB,MAAM,GAERsE,UAAW,CACTtE,MAAM,IAGV+B,OAAQ,CACN,CACEL,KAhTS,MAiTTzB,KAAM3C,EACN1H,KAAM,UACNsJ,OAAQ,SACR8C,QAAQ,EACRC,WAAY,EACZlC,MAAO,CACLC,MAAM,EACNhK,UAAW,SAAUiW,GACnB,OAAOA,EAAMhM,KAAK,IAEpBgI,SAAU,QACViE,UAAW,GAEb9J,SAAU,CACRlD,OAAQ,CAAC,OAAQ,QACjB8I,QAAQ,EACRjI,MAAO,CACLC,MAAM,EACNiI,SAAU,QACVjW,MAAO,WAET2N,UAAW,CACT/J,KAAM,QACN5D,MAAO,QAETiO,KAAM,CACJ,CAAEL,MAAOtC,EAAW,GAAG,IACvB,CAAEsC,MAAOtC,EAAW,GAAG,IACvB,CAAEsC,MAAOtC,EAAW,GAAG,IACvB,CAAEuC,MAAOvC,EAAW,GAAG,IACvB,CAAEuC,MAAOvC,EAAW,GAAG,IACvB,CAAEuC,MAAOvC,EAAW,GAAG,IACvB,CACE,CACEoC,MAAON,EACPO,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CAAE8J,MAAO2K,IAEX,CACE,CACE3K,MAAOsG,EACPrG,UAAW,CACT3N,MAAO,OACP4D,KAAM,WAGV,CAAE8J,MAAO2K,OAKjB,CAEEzU,KAAM,OACNqK,KAAM,CACJ,CAACxD,EAAM,GAAIC,EAAM,IACjB,CAACD,EAAM,GAAIC,EAAM,KAEnBiD,UAAW,CACT3N,MAAO,UACP4D,KAAM,QACNjC,MAAO,GAETuL,OAAQ,QAEV,CAEEtJ,KAAM,OACNqK,KAAM,CACJ,CAACxD,EAAM,GAAIC,EAAM,IACjB,CAACmN,EAAQ,GAAIA,EAAQ,KAEvBlK,UAAW,CACT3N,MAAO,UACP4D,KAAM,SACNjC,MAAO,GAETuL,OAAQ,QAEV,CAEEtJ,KAAM,OACNqK,KAAM,CACJ,CAACxD,EAAM,GAAIC,EAAM,IACjB,CAACD,EAAM,GAAIC,EAAM,KAEnBiD,UAAW,CACT3N,MAAO,UACP4D,KAAM,QACNjC,MAAO,GAETuL,OAAQ,QAEV,CAEEtJ,KAAM,OACNqK,KAAM,CACJ,CAACxD,EAAM,GAAIC,EAAM,IACjB,CAACoN,EAAQ,GAAIA,EAAQ,KAEvBnK,UAAW,CACT3N,MAAO,UACP4D,KAAM,SACNjC,MAAO,GAETuL,OAAQ,QAEV,CAEEtJ,KAAM,OACNqK,KAAM,CAAC,CAACxD,EAAM,GAAIC,EAAM,IAAK2N,GAC7B1K,UAAW,CACT3N,MAAO,UACP4D,KAAM,QACNjC,MAAO,GAETuL,OAAQ,WAchBiN,QAAS,CAACrQ,OAAiCC,SAA6BC,SAA6B5O,SACnG,IAAIoS,SAAWtD,KAAKC,MAAML,OAAOM,gBACjC,MAAMC,aAAsC,MAAvBP,OAAOO,cAA+CrO,MAAvB8N,OAAOO,aAA4B,KAAOH,KAAKC,MAAML,OAAOO,cAGhH,IAAIE,YAAcP,SAAS,GAEvB9G,MAAQ4G,OAAOgJ,WACjBjG,MAAQ/C,OAAOgD,WACfC,MAAQjD,OAAOkD,WACfqC,WAAa,MAGX5E,MAAQV,SAAS,GAGjBqQ,QAAU,GACZC,cAAgB,GAClB,IAAK,IAAIne,EAAI,EAAGA,EAAIuO,MAAMrL,OAAQlD,IAChC,GAAgB,KAAZuO,MAAMvO,KAAmB,GAALA,GAAWA,EAAI,GAAiB,GAAZuO,MAAMvO,IAChDke,QAAQre,KAAK0O,MAAMvO,IACnBme,cAActe,KAAKwO,YAAYrO,SAC1B,GAAIA,EAAI,GAAiB,GAAZuO,MAAMvO,GACxB,MAGJuO,MAAQ2P,QACR7P,YAAc8P,cAGd,IAAI/O,WAAa,GACfgP,cAAgB,GAChB7E,aAAe,IAAIhL,OAarB,MAAM8P,IAAMrT,iBAAiB0B,UAAU6B,MAAOF,YAAaE,MAAM,IAG7C,MAAhBJ,cACgC,MAA9BA,aAAamQ,eAAuDxe,MAA9BqO,aAAamQ,gBAEvC,IAAVD,IAAIjR,IAAsB,IAAViR,IAAIhR,GACtBnO,MAAMmL,SAAS8D,aAAamQ,cAAczf,IAAKsP,aAAamQ,cAAcxf,IAAK,KAE/EI,MAAMmL,SACJ8D,aAAamQ,cAAczf,IAC3BsP,aAAamQ,cAAcxf,IAC3B,KAAKkM,iBAAiBC,SAASoT,IAAIjR,GAAI,UAAYpC,iBAAiBC,SAASoT,IAAIhR,GAAI,UAM7F,IAAIkR,UAAY,GAEhBhQ,MAAM/O,QAAQ,CAACC,KAAMC,SACnB,IAAI8e,SAAWpS,OAAOpB,iBAAiBC,SAASwT,KAAKJ,IAAIlR,GAAGuR,QAAQ,IAAKjf,KAAO,KAAM,MAClFyW,MAAMsI,YACRA,SAAW,GAGbpP,WAAWvP,KAAK,CAACJ,KAAM+e,WACvBD,UAAU1e,KAAK2e,UACfJ,cAAcve,KAAK,CACjB6R,MAAOjS,KACPkS,MAAOtD,YAAY3O,OACnBsR,OAAQ,SACR+C,WAAY,MAMhB,IAAI9B,eAAgB,EACA,GAAhB1D,MAAMrL,SACR+O,eAAgB,GAElB,IAAI+H,UAAY,EAChBzL,MAAM/O,QAASC,IACE,GAAXA,EAAK,IAAsB,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAC1Cua,cAGAA,WAAazL,MAAMrL,SACrB+O,eAAgB,GAEdsM,UAAUnZ,KAAM3F,GAAiB,GAARA,GAAwB,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,MAChEwS,eAAgB,GAGlB,IAAI5O,OAAS,CACX+O,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,cAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGhW,MAAM,GAAK,IAAMgW,EAAM,GAAGhW,MAAM,GAAKgW,EAAM,GAAGX,OAI9F/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,MACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,MACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAACoB,YACPD,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN6L,UAAW,CAAEzB,MAAM,GACnBsE,UAAW,CAAEtE,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,MACN4C,QAAUxB,cAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,WAGlBE,OAAQ,CACN,CACEL,KAAML,WACNzL,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,SAAS,GAAG0C,UAEnBtM,KAAM,UAGRsK,UAAW,CACTlO,MAAOwN,SAAS,GAAG0C,UACnB2K,QAAS,GAEX5M,KAAM3C,WACN6E,UAAW,CACTlC,KAAMqM,eAERlK,SAAU,CACRlD,QAAQ,EACR8I,QAAQ,EACRjI,MAAO,CACLkI,SAAU,QACVjS,UAAY6R,GAAQA,EAAIjd,OAE1B+U,UAAW,CAAE3N,MAAO,OAAQ4D,KAAM,SAClCqK,KAAMwH,aAAatD,IAAK2I,IACf,CACLlN,MAAOkN,SAQnB,OAAOvb,QASTwb,SAAU,CACRjR,EACAC,EACAC,EACAgR,EACAC,KAEA,IAAIzN,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAGjB,MAAM1C,EAAc0Q,EAAe,GAEnC,IAAIvQ,EAAQ,GACZH,EAAY5O,QAAQ,CAACC,EAAMC,KACb,KAARD,EACF8O,EAAM1O,KAAKJ,GAEX8O,EAAM1O,KAAKuM,OAAO3M,MAKtB,IAAI+O,EAAQV,EAAS,GACjBsB,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACP,KAARD,GAAuBK,MAARL,GAA6B,MAARA,GACtC2P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAIjC,IAAIuS,GAAgB,EAwHpB,OAvHyB,GAArB7C,EAAWlM,SACb+O,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAvEK,OAwEXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,WACN2L,SAAU,CACRC,gBAAgB,GAElB8C,UAAW,CAETtO,UAAW,SAAUpL,GACnB,IAAIsiB,EAAW,GACf,IAAK,IAAIhf,EAAI,EAAGA,EAAIuO,EAAMrL,OAAQlD,IAChC,GAAIuO,EAAMvO,IAAMtD,EAAO,CACrBsiB,EAAW5Q,EAAYpO,GACP,KAAZgf,IACFA,EAAW,IAEb,MAIJ,OAAOA,KAIbrN,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KA1HS,MA2HT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,MAad6P,SAAU,CAACrR,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAQjB,MAAMvC,EAAQV,EAAS,GACrBW,EAAQV,EAAS,GACnB,IAAIY,EAAO,IACTE,EAAO,IAELQ,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAAS,MAARJ,EAAe,EAAIA,EAAM+O,EAAM9O,OAIlD,IAAIuS,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EAqHhB,OApHAzL,EAAM/O,QAASC,IACE,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAA8B,KAAXA,EAAK,IAClDua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,GAEdzD,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAC5DwS,GAAgB,GAGdA,IACFvD,EAAO,KACPE,EAAO,MAEI,CACXwD,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAnFK,OAoFXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,MACNwX,QAAS,GACTC,SAAS,EACTxQ,IAAKD,EACLG,IAAKD,GAEP+C,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAtHS,MAuHT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,MAcdgQ,SAAU,CAACxR,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,MAAMvC,EAAQV,EAAS,GACrBW,EAAQV,EAAS,GAEnB,IAAIsB,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAG/B,IAAIuS,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EAgIhB,OA/HAzL,EAAM/O,QAASC,IACE,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAA8B,KAAXA,EAAK,IAClDua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,GAEdzD,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAC5DwS,GAAgB,GAEL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNuI,IAAK,GACLS,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAvEK,OAwEXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN6L,UAAW,CAAEzB,MAAM,GACnBsE,UAAW,CAAEtE,MAAM,GACnBiI,SAAU,OAEZpI,MAAO,CAEL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdwL,SAAS,EACT5L,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KA5GS,MA6GT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,EACN8E,SAAU,CACRlD,QAAQ,EACR8I,QAAQ,EACRjI,MAAO,CACLkI,SAAU,QACVjS,UAAY6R,GAAQA,EAAIjd,OAE1B+U,UAAW,CAAE3N,MAAO,OAAQ4D,KAAM,SAClCqK,KAAMxD,EAAM0H,IAAK2I,IACR,CACLlN,MAAOkN,UAiBrBS,SAAU,CAACzR,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,MAAMvC,EAAQV,EAAS,GACrBW,EAAQV,EAAS,GAEnB,IAAIsB,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAI/B,IAAIuS,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EAiIhB,OAhIAzL,EAAM/O,QAASC,IACE,MAAXA,EAAK,IAAyBK,MAAXL,EAAK,IAA8B,KAAXA,EAAK,IAClDua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,GAEdzD,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAC5DwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNuI,IAAK,GACLS,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAzEK,OA0EXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN6L,UAAW,CAAEzB,MAAM,GACnBsE,UAAW,CAAEtE,MAAM,GACnBiI,SAAU,OAEZpI,MAAO,CAEL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdwL,SAAS,EACT5L,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KA9GS,MA+GT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,EACN8E,SAAU,CACRlD,QAAQ,EACR8I,QAAQ,EACRjI,MAAO,CACLkI,SAAU,QACVjS,UAAY6R,GAAQA,EAAIjd,OAE1B+U,UAAW,CAAE3N,MAAO,OAAQ4D,KAAM,SAClCqK,KAAMxD,EAAM0H,IAAK2I,IACR,CACLlN,MAAOkN,UAiBrBU,SAAU,CAAC1R,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAG/ByC,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIbvC,EAAQV,EAAS,GACnBW,EAAQV,EAAS,GAGnBS,EAAQA,EAAMf,OAAQ/N,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,IAA8B,MAAdA,EAAK8f,OAA+Bzf,MAAdL,EAAK8f,QAC/G/Q,EAAQA,EAAMhB,OAAQ/N,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,IAA8B,MAAdA,EAAK8f,OAA+Bzf,MAAdL,EAAK8f,QAG/G,IAAItN,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EA4HhB,OA3HAzL,EAAM/O,QAASC,IACD,MAARA,GAAwBK,MAARL,GAA6B,KAARA,GACvCua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,EAChB1D,EAAQ,IAENC,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAC5DwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KArDM,GAsDN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAzEK,OA0EXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,WACNqK,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElB8C,UAAW,CAETtO,UAAW,SAAUpL,GACnB,MAAa,KAATA,EACK,GAEAA,KAKfiV,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAtHS,MAuHT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAMvD,MAcdgR,SAAU,CAAC5R,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAG7BE,EAAcP,EAAS,GACzBQ,EAAcP,EAAS,GAErB9G,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,MAAM1B,EAAa,GAEnB,IAAK,IAAIpP,EAAIoO,EAAYlL,OAAS,EAAGlD,GAAK,EAAGA,IAAK,CAChD,MAAMP,EAAO2O,EAAYpO,GAEb,MAARP,GAAwBK,MAARL,GAA6B,KAARA,GAA+B,MAAfA,EAAKgO,QAAiC3N,MAAfL,EAAKgO,QACnF2B,EAAWvP,KAAK,CAACJ,EAAM4O,EAAYrO,KAQvC,IAAIiS,GAAgB,EACM,GAAtB7D,EAAYlL,SACd+O,GAAgB,GAElB,IAAI+H,EAAY,EAChB5L,EAAY5O,QAASC,KACP,MAARA,GAAwBK,MAARL,GAA6B,KAARA,GAA+B,MAAfA,EAAKgO,QAAiC3N,MAAfL,EAAKgO,SACnFuM,MAGAA,GAAa5L,EAAYlL,SAC3B+O,GAAgB,GAGd5D,EAAYjJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAClEwS,GAAgB,GAkIlB,MA1Ga,CACXG,KAAM,CAGJC,IAAK,GACLvI,MAAOmI,GAAiB7C,EAAWlM,OAAS,EAAI,GAAK,GACrD6G,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGhW,MAAM,GAAK,IAAMgW,EAAM,GAAGhW,MAAM,GAAKgW,EAAM,GAAGX,OAI9F/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CApGK,OAqGXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN6L,UAAW,CAAEzB,MAAM,GACnBsE,UAAW,CAAEtE,MAAM,IAErBH,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,SAAUxB,GAAiB7C,EAAWlM,OAAS,EAAI,GAAK,EACxDwQ,WAAY,GACZC,aAAc,SACdyC,UAAW,CACTrD,SAzGW,MA6GjBc,OAAQ,CACN,CACEL,KA7HS,MA8HT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,EACN8E,SAAU,CACRlD,QAAQ,EACR8I,QAAQ,EACRjI,MAAO,CACLkI,SAAU,QACVjS,UAAY6R,GAAQA,EAAIjd,MACxBqW,SAtIS,IAwIXtB,UAAW,CAAE3N,MAAO,OAAQ4D,KAAM,SAClCqK,KApHS,MACf,IAAI0N,EAAM,GACV,CAAC,EAAG,IAAM,IAAM,IAAM,IAAM,IAAKjgB,QAASof,IACxCxQ,EAAY5O,QAASC,IACnB,IAAIka,EAAW,CAAEjI,MAAO,IAEZ,KAARjS,GACFka,EAAIjI,MAAQ,GACZ+N,EAAI5f,KAAK8Z,KAETA,EAAIjI,MAAQkN,EACZa,EAAI5f,KAAK8Z,QAMf,IAAI+F,EAAaD,EAAIjS,OAAO,CAAC/N,EAAMC,EAAOigB,IAASjgB,IAAUigB,EAAKjP,UAAWkP,GAAMA,EAAElO,OAASjS,EAAKiS,QACnG,OAAOsI,GAAa5L,EAAYlL,OAAS,GAAKwc,GAkGlCG,QAoBhBC,SAAU,CAAClS,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAa7B6R,EAAYlS,EAAS3K,OAGrBsT,EAAe,GACjBC,EAAe,GACfuJ,EAAe,GACftJ,EAAe,GACfC,EAAe,GACfsJ,EAAe,GAGjBzJ,EAAexL,iBAAiBsC,wBAAwBO,EAAS,IACjE6I,EAAe1L,iBAAiBsC,wBAAwBQ,EAAS,IAGhD,GAAbiS,IACFtJ,EAAezL,iBAAiBsC,wBAAwBO,EAAS,IACjE8I,EAAe3L,iBAAiBsC,wBAAwBQ,EAAS,KAGlD,GAAbiS,IACFtJ,EAAezL,iBAAiBsC,wBAAwBO,EAAS,IACjE8I,EAAe3L,iBAAiBsC,wBAAwBQ,EAAS,IACjEkS,EAAehV,iBAAiBsC,wBAAwBO,EAAS,IACjEoS,EAAejV,iBAAiBsC,wBAAwBQ,EAAS,KAInE,IAAIoS,EAAS,GACXC,EAAS,GACTC,EAAS,GAIX5J,EAAahX,QAAQ,CAACC,EAAMC,KAE1B,GAAmB,iBAARD,EACTygB,EAAOrgB,KAAuB,GAAlBJ,EAAK4gB,WAAkB5gB,EAAK6gB,mBAGrC,GAAmB,iBAAR7gB,EACdygB,EAAOrgB,KAAKJ,OAGT,CACH,MAAM8gB,EAAS9gB,EAAKkM,MAAM,KACpB6U,EAAkC,GAApBpU,OAAOmU,EAAO,IAAWnU,OAAOmU,EAAO,IAC3DL,EAAOrgB,KAAK2gB,MAIhB/J,EAAajX,QAAQ,CAACC,EAAMC,KAE1B,GAAmB,iBAARD,EACT0gB,EAAOtgB,KAAuB,GAAlBJ,EAAK4gB,WAAkB5gB,EAAK6gB,mBAGrC,GAAmB,iBAAR7gB,EACd0gB,EAAOtgB,KAAKJ,OAGT,CACH,MAAM8gB,EAAS9gB,EAAKkM,MAAM,KACpB6U,EAAkC,GAApBpU,OAAOmU,EAAO,IAAWnU,OAAOmU,EAAO,IAC3DJ,EAAOtgB,KAAK2gB,MAIhBR,EAAaxgB,QAAQ,CAACC,EAAMC,KAE1B,GAAmB,iBAARD,EACT2gB,EAAOvgB,KAAuB,GAAlBJ,EAAK4gB,WAAkB5gB,EAAK6gB,mBAGrC,GAAmB,iBAAR7gB,EACd2gB,EAAOvgB,KAAKJ,OAGT,CACH,MAAM8gB,EAAS9gB,EAAKkM,MAAM,KACpB6U,EAAkC,GAApBpU,OAAOmU,EAAO,IAAWnU,OAAOmU,EAAO,IAC3DH,EAAOvgB,KAAK2gB,MAKZhK,EAAatT,OAAS,IACxBgd,EAAOrgB,KAAKqgB,EAAOA,EAAOhd,OAAS,GAAK,IACxCgd,EAAOO,QAAQP,EAAO,GAAK,IAC3BxJ,EAAa7W,KAAK,MAClB6W,EAAa+J,QAAQ,OAGN,GAAbV,GACEtJ,EAAavT,OAAS,IACxBid,EAAOtgB,KAAKsgB,EAAOA,EAAOjd,OAAS,GAAK,IACxCid,EAAOM,QAAQN,EAAO,GAAK,IAC3BxJ,EAAa9W,KAAK,MAClB8W,EAAa8J,QAAQ,OAGR,GAAbV,GACyB,GAAvBC,EAAa9c,SACfid,EAAOtgB,KAAKsgB,EAAOA,EAAOjd,OAAS,GAAK,IACxCid,EAAOM,QAAQN,EAAO,GAAK,IAC3BxJ,EAAa9W,KAAK,MAClB8W,EAAa8J,QAAQ,MACrBL,EAAOvgB,KAAKugB,EAAOA,EAAOld,OAAS,GAAK,IACxCkd,EAAOK,QAAQL,EAAO,GAAK,IAC3BH,EAAapgB,KAAK,MAClBogB,EAAaQ,QAAQ,OAIzB,IAAIzZ,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAGjB,MAAM4P,EAAc,CAAChZ,EAAMqK,KAClB,CACLrK,KAAM,WACNqK,KAAMA,EACNsB,SAAU,CACRC,gBAAgB,GAElBxB,KAAc,GAARpK,EACN6L,UAAW,CACTzB,MAAM,KAKZ,IAAI6O,EAAY,CAACD,EAAY,EAAGR,IACf,GAAbH,GACFY,EAAU9gB,KAAK6gB,EAAY,EAAGP,IAEf,GAAbJ,IACFY,EAAU9gB,KAAK6gB,EAAY,EAAGP,IAC9BQ,EAAU9gB,KAAK6gB,EAAY,EAAGN,KAIhC,MAAM3G,EAAa,CAAC/R,EAAMqK,KACxB,MAAMyB,EAAe,GAAR9L,EAAY,MAAgB,GAARA,EAAY,MAAQ,MAC/CsJ,EAAiB,GAARtJ,EAAY,OAAiB,GAARA,EAAY,WAAa,SACvDgS,EAAmB,GAARhS,EAAY,QAAkB,GAARA,EAAY,SAAW,CAAC,GAAI,GAC7D5D,EACI,GAAR4D,GAAa4J,EAASpO,QAAU,EAC5BoO,EAAS,GAAG0C,UACJ,GAARtM,GAAa4J,EAASpO,QAAU,EAChCoO,EAAS,GAAG0C,UACJ,GAARtM,GAAa4J,EAASpO,QAAU,EAChCoO,EAAS,GAAG0C,UACZ,OAsBN,MApBU,CACRR,KAAMA,EACN9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQA,EACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOA,EAEP4D,KAAMgS,GAGR1H,UAAW,CACTlO,MAAOA,GAETiO,KAAMA,IAOV,IAAI3C,EAAa,CAACqK,EAAW,EAAG/C,IACf,GAAbqJ,GACEpJ,EAAazT,OAAS,GACxBkM,EAAWvP,KAAK4Z,EAAW,EAAG9C,IAGjB,GAAboJ,IACEpJ,EAAazT,OAAS,GACxBkM,EAAWvP,KAAK4Z,EAAW,EAAG9C,IAE5BsJ,EAAa/c,OAAS,GACxBkM,EAAWvP,KAAK4Z,EAAW,EAAGwG,KAIlC,IAAIW,EAA0B,GAAbb,EAAiB,CAAC,OAAsB,GAAbA,EAAiB,CAAC,MAAO,OAAS,CAAC,MAAO,MAAO,OAC3Fc,EACe,GAAbd,EAAiB,CAAE,OAAK,GAAsB,GAAbA,EAAiB,CAAE,OAAK,EAAM,OAAK,GAAS,CAAE,OAAK,EAAM,OAAK,EAAM,OAAK,GAG1G9N,GAAgB,EAChB6O,GAAgB,EAChBC,EAAY,EA6LhB,OA3L2B,GAAvBvK,EAAatT,QACf4d,GAAgB,EAChBC,EAAY,GAEZH,EAAa,CAAC,MAAO,OACrBC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAM,OAAK,GAE/CF,EAAY,GACZvR,EAAa,GAEbuR,EAAU9gB,KAAK6gB,EAAY,EAAGP,IAC9BQ,EAAU9gB,KAAK6gB,EAAY,EAAGN,IAC9BhR,EAAWvP,KAAK4Z,EAAW,EAAG9C,IAC9BvH,EAAWvP,KAAK4Z,EAAW,EAAGwG,IAEH,GAAvBxJ,EAAavT,SACf6d,EAAY,GAEZH,EAAa,CAAC,OACdC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAO,OAAK,GAEhDF,EAAY,GACZvR,EAAa,GAEbuR,EAAU9gB,KAAK6gB,EAAY,EAAGN,IAC9BhR,EAAWvP,KAAK4Z,EAAW,EAAGwG,IAEH,GAAvBD,EAAa9c,SACf6d,EAAY,EAEZ9O,GAAgB,EAChB2O,EAAa,GACbC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAO,OAAK,GAChDF,EAAY,GACZvR,EAAa,GACbuR,EAAU9gB,KAAK6gB,EAAY,EAAG,KAC9BtR,EAAWvP,KAAK4Z,EAAW,EAAG,QAGF,GAAvBhD,EAAavT,QACtB6d,EAAY,GACZD,GAAgB,EAChBF,EAAa,CAAC,MAAO,OACrBC,EAAiB,CAAE,OAAK,EAAM,OAAK,EAAO,OAAK,GAE/CF,EAAY,GACZvR,EAAa,GAEbuR,EAAU9gB,KAAK6gB,EAAY,EAAGR,IAC9BS,EAAU9gB,KAAK6gB,EAAY,EAAGN,IAE9BhR,EAAWvP,KAAK4Z,EAAW,EAAG/C,IAC9BtH,EAAWvP,KAAK4Z,EAAW,EAAGwG,IAEH,GAAvBzJ,EAAatT,SACf6d,EAAY,GAEZH,EAAa,CAAC,OACdC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAO,OAAK,GAEhDF,EAAY,GACZvR,EAAa,GAEbuR,EAAU9gB,KAAK6gB,EAAY,EAAGR,IAC9B9Q,EAAWvP,KAAK4Z,EAAW,EAAG/C,IAEH,GAAvBsJ,EAAa9c,SACf6d,EAAY,EAEZ9O,GAAgB,EAChB2O,EAAa,GACbC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAO,OAAK,GAChDF,EAAY,GACZvR,EAAa,GACbuR,EAAU9gB,KAAK6gB,EAAY,EAAG,KAC9BtR,EAAWvP,KAAK4Z,EAAW,EAAG,QAGF,GAAvBuG,EAAa9c,SACtB6d,EAAY,GACZD,GAAgB,EAChBF,EAAa,CAAC,MAAO,OACrBC,EAAiB,CAAE,OAAK,EAAM,OAAK,EAAM,OAAK,GAE9CF,EAAY,GACZvR,EAAa,GACbuR,EAAU9gB,KAAK6gB,EAAY,EAAGR,IAC9BS,EAAU9gB,KAAK6gB,EAAY,EAAGP,IAC9B/Q,EAAWvP,KAAK4Z,EAAW,EAAG/C,IAC9BtH,EAAWvP,KAAK4Z,EAAW,EAAG9C,IAEH,GAAvBH,EAAatT,SACf6d,EAAY,GACZH,EAAa,CAAC,OACdC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAM,OAAK,GAE/CF,EAAY,GACZvR,EAAa,GAEbuR,EAAU9gB,KAAK6gB,EAAY,EAAGP,IAC9B/Q,EAAWvP,KAAK4Z,EAAW,EAAG9C,IAEH,GAAvBF,EAAavT,SACf6d,EAAY,EACZ9O,GAAgB,EAChB2O,EAAa,GACbC,EAAiB,CAAE,OAAK,EAAO,OAAK,EAAO,OAAK,GAChDF,EAAY,GACZvR,EAAa,GACbuR,EAAU9gB,KAAK6gB,EAAY,EAAG,KAC9BtR,EAAWvP,KAAK4Z,EAAW,EAAG,QAKvB,CACXrH,KAAM,CAGJC,IAAMyO,EAAqBC,GAAL,EACtBjX,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnJ,KAAM,SACNuI,IAAK,GACLN,KAAM6O,EACN1N,SAAU2N,EACVzN,aAAc,YAEhB1B,MAAOiP,EACPhP,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQzE,IAYZ4R,SAAU,CAACpT,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIjB,MAAMvC,EAAQV,EAAS,GACrBW,EAAQV,EAAS,GAEnB,IAAIsB,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAG/B,IAAIuhB,EAAO,KACTC,EAAO,IAGLjP,GAAgB,EACA,GAAhB1D,EAAMrL,SACR+O,GAAgB,GAElB,IAAI+H,EAAY,EAmHhB,OAlHAzL,EAAM/O,QAASC,IACD,MAARA,GAAwBK,MAARL,GAA6B,KAARA,GACvCua,MAGAA,GAAazL,EAAMrL,SACrB+O,GAAgB,EAChBgP,EAAO,KACPC,EAAO,MAEL1S,EAAMpJ,KAAM3F,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,KAC5DwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA9EK,OA+EXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,MACNwX,QAAS,GACTC,SAAS,EACTxQ,IAAKsS,EACLpS,IAAKqS,GAEPvP,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KAjHS,MAkHT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,MAcd+R,SAAU,CAACvT,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAWb0F,EAAe,GACjBC,EAAe,GACfuJ,EAAe,GACftJ,EAAe,GACfC,EAAe,GACfsJ,EAAe,GAGjBpS,EAAS,GAAGrO,QAAQ,CAACC,EAAMC,KACb,GAARD,GAAmC,GAAtBqO,EAAS,GAAGpO,KAC3B8W,EAAa3W,KAAKJ,GAClBiX,EAAa7W,KAAKiO,EAAS,GAAGpO,OAGlCmO,EAAS,GAAGrO,QAAQ,CAACC,EAAMC,KACb,GAARD,GAAmC,GAAtBqO,EAAS,GAAGpO,KAC3B+W,EAAa5W,KAAKJ,GAClBkX,EAAa9W,KAAKiO,EAAS,GAAGpO,OAGlCmO,EAAS,GAAGrO,QAAQ,CAACC,EAAMC,KACb,GAARD,GAAmC,GAAtBqO,EAAS,GAAGpO,KAC3BsgB,EAAangB,KAAKJ,GAClBwgB,EAAapgB,KAAKiO,EAAS,GAAGpO,OASlC,MAAM+Z,EAAa,CAAC/R,EAAM6G,EAAOC,KAC/B,MAAMgF,EAAO,KAAK9L,IACZsJ,EAAiB,GAARtJ,EAAY,OAAiB,GAARA,EAAY,WAAa,SACvDgS,EAAmB,GAARhS,EAAY,QAAkB,GAARA,EAAY,SAAW,CAAC,GAAI,GAC7D5D,EAAgB,GAAR4D,EAAY4J,EAAS,GAAG0C,UAAoB,GAARtM,EAAY4J,EAAS,GAAG0C,UAAY1C,EAAS,GAAG0C,UAE5F5E,EAAa,GAKnB,OAJAb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAGxB,CACL8T,KAAMA,EACN9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQA,EACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOA,EAEP4D,KAAMgS,GAGR1H,UAAW,CACTlO,MAAOA,GAETiO,KAAM3C,IAKV,IAAI6C,GAAgB,EAmGpB,OAjGEuE,EAAatE,MAAOzS,GAAiB,KAARA,IAC7BgX,EAAavE,MAAOzS,GAAiB,KAARA,IAC7BugB,EAAa9N,MAAOzS,GAAiB,KAARA,IAC7BiX,EAAaxE,MAAOzS,GAAiB,KAARA,IAC7BkX,EAAazE,MAAOzS,GAAiB,KAARA,IAC7BwgB,EAAa/N,MAAOzS,GAAiB,KAARA,KAE7BwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,EACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGhW,MAAM,GAA3CgW,KAA4DA,EAAM,GAAGhW,MAAM,GAAKgW,EAAM,GAAGX,OAIhI/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNuI,IAAK,GACLS,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAnIK,OAoIXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QAEN2L,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,GACnBiI,SAAU,MACVtG,QAAS,EACTE,aAAc,OAEhBhC,MAAO,CAEL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdwL,SAAS,EACT5L,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CAAC4F,EAAW,EAAGjD,EAAcE,GAAe+C,EAAW,EAAGhD,EAAcE,GAAe8C,EAAW,EAAGuG,EAAcC,MAY/HmB,iBAAkB,CAACxT,EAAiCC,EAA6BC,KAC/E,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIbuQ,EAA4B,KAApBzT,EAAO0T,UAAmB,EAAwB,KAApB1T,EAAO0T,UAAmB,GAAM,IAGtE/S,EAAQV,EAAS,GACnBW,EAAQV,EAAS,GACjBmB,EAAW/Q,KAAKyQ,OAAOJ,GACvBY,EAAW/C,OAAOpB,iBAAiBC,SAAS/M,KAAKyQ,OAAOH,GAAS6S,EAAO,OACxEnS,EAAW9C,OAAOpB,iBAAiBC,SAAS/M,KAAK2Q,OAAOL,GAAS6S,EAAO,OAO1EpS,EAAW7C,OAAOpB,iBAAiBC,SAASgE,EAAsB,IAAXA,EAAiB,OAExE,IAAIG,EAAa,GACjBb,EAAM/O,QAAQ,CAACC,EAAMC,KACnB0P,EAAWvP,KAAK,CAACJ,EAAM+O,EAAM9O,OAI/B,IAAIuS,GAAgB,EAyGpB,OAxGIzD,EAAM0D,MAAOzS,GAAiB,KAARA,KACxBwS,GAAgB,GAGL,CACXG,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CA1EK,OA2EXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACNiH,IAAKM,EACLJ,IAAK,KAEP8C,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,GAERnD,IAAKQ,EACLN,IAAKK,IAGT2E,OAAQ,CACN,CACEL,KA7GS,MA8GT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAM3C,MAcdmS,SAAU,CAAC3T,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIb0F,EAAe3I,EAAS,GAC1B4I,EAAe5I,EAAS,GACxBmS,EAAenS,EAAS,GACxB6I,EAAe5I,EAAS,GACxB6I,EAAe7I,EAAS,GACxBmS,EAAenS,EAAS,GAO1B,MAAM2L,EAAa,CAAC/R,EAAMqK,KACxB,MAAMyB,EAAO,KAAK9L,IACZsJ,EAAiB,GAARtJ,EAAY,OAAiB,GAARA,EAAY,WAAa,SACvDgS,EAAmB,GAARhS,EAAY,QAAkB,GAARA,EAAY,SAAW,CAAC,GAAI,GAC7D5D,EAAgB,GAAR4D,EAAY4J,EAAS,GAAG0C,UAAoB,GAARtM,EAAY4J,EAAS,GAAG0C,UAAY1C,EAAS,GAAG0C,UAElG,MAAO,CACLR,KAAMA,EACN9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQA,EACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOA,EAEP4D,KAAMgS,GAGR1H,UAAW,CACTlO,MAAOA,GAETiO,KAAMA,IAKV,IAAIE,GAAgB,EA8GpB,OA5GEuE,EAAatE,MAAOzS,GAAiB,KAARA,IAC7BgX,EAAavE,MAAOzS,GAAiB,KAARA,IAC7BugB,EAAa9N,MAAOzS,GAAiB,KAARA,IAC7BiX,EAAaxE,MAAOzS,GAAiB,KAARA,IAC7BkX,EAAazE,MAAOzS,GAAiB,KAARA,IAC7BwgB,EAAa/N,MAAOzS,GAAiB,KAARA,KAE7BwS,GAAgB,EAChBuE,EAAe,IAGJ,CACXpE,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,EACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNuI,IAAK,GACLS,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CApGK,OAqGXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,WACNqK,KAAMyE,EACNnD,SAAU,CACRC,gBAAgB,GAElBC,UAAW,CAAEzB,MAAM,GACnBiI,SAAU,MACVtG,QAAS,EACTE,aAAc,MACdyC,UAAW,CAETtO,UAAW,SAAUpL,GACnB,MAAa,KAATA,EACK,GAEAA,KAKfiV,MAAO,CAEL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdwL,SAAS,EACT5L,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,KAIZ+B,OAAQ,CAAC4F,EAAW,EAAG/C,GAAe+C,EAAW,EAAG9C,GAAe8C,EAAW,EAAGwG,MAYrFuB,SAAU,CAAC5T,EAAiCC,EAA6BC,KACvE,IAAIwD,EAAWtD,KAAKC,MAAML,EAAOM,gBAE7BlH,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIbvC,EAAQV,EAAS,GACnBW,EAAQV,EAAS,GAEfoQ,EAAU,GACZuD,EAAU,GACZlT,EAAM/O,QAAQ,CAACC,EAAMC,KACP,MAARD,GAAwBK,MAARL,GAA6B,KAARA,GAA8B,MAAdA,EAAK8f,OAA+Bzf,MAAdL,EAAK8f,QAClFrB,EAAQre,KAAKJ,GACbgiB,EAAQ5hB,KAAK2O,EAAM9O,OAGvB6O,EAAQ2P,EACR1P,EAAQiT,EAGR,IAAIxP,GAAgB,EA+IpB,OA7IE1D,EAAM2D,MAAOzS,GAAiB,KAARA,GAA8B,MAAdA,EAAK8f,OAA+Bzf,MAAdL,EAAK8f,QACjE/Q,EAAM0D,MAAOzS,GAAiB,KAARA,GAA8B,MAAdA,EAAK8f,OAA+Bzf,MAAdL,EAAK8f,SAEjEtN,GAAgB,EAChB1D,EAAQ,IAGG,CACX6D,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNuI,IAAK,GACLS,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAvEK,OAwEXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,WACNqK,KAAMxD,EACN6H,UAAW,CAETtO,UAAW,SAAUpL,GACnB,MAAa,KAATA,EACK,GAEAA,IAIb2W,SAAU,CACRC,gBAAgB,GAElBM,SAAU,CAER5C,OAAQ,CAAC,OAAQ,SACjB+C,WAAY,IAEdR,UAAW,CAAEzB,MAAM,GACnBiI,SAAU,MACVvG,KAAM,IACNC,QAAS,EACTE,aAAc,OAEhBhC,MAAO,CAEL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdwL,SAAS,EACT5L,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CAER9B,MAAM,EACNd,OAAQ,CAAC,QAAS,QAClB+C,WAAY,KAGhB,CAEEP,KAAM,IACNE,WAAY,EACZC,aAAc,MACdF,QAAS,EACTsG,SAAU,OACVoF,SAAS,IAGbtL,OAAQ,CACN,CACEL,KA5IS,MA6IT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAMvD,MAcdkT,SAAU,CAAC9T,EAAiCC,EAA6BC,EAA6B5O,KACpG,IAAIoS,EAAWtD,KAAKC,MAAML,EAAOM,gBACjC,MAAMC,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAEhH,IACEwC,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIbvC,EAAQV,EAAS,GACnBW,EAAQV,EAAS,GAGnB,MAAMuQ,EAAWrT,iBAAiB0B,UAAU6B,EAAOC,EAAOD,EAAM,IAGhE,IAAIoT,EAAQ3W,iBAAiBC,UAAU,IAAOoT,EAAIhR,IAAMgR,EAAIjR,GAAI,GAC9DwU,EAAQ5W,iBAAiBC,UAAU,IAAOoT,EAAIhR,IAAMgR,EAAIjR,GAAI,GAC5DyU,EAAQ7W,iBAAiBC,UAAU,IAAOoT,EAAIhR,IAAMgR,EAAIjR,GAAI,GAC5D0U,EAAQ9W,iBAAiBC,UAAU,IAAOoT,EAAIhR,IAAMgR,EAAIjR,GAAI,GAE1DuU,GAASI,MACXJ,EAAQ,GAENC,GAASG,MACXH,EAAQ,GAENC,GAASE,MACXF,EAAQ,GAENC,GAASC,MACXD,EAAQ,GAGV,IAAIE,EAAO,GAAGL,KAASC,IACrBK,EAAO,GAAGJ,KAASC,IAID,MAAhB3T,IACW,GAATwT,GAAuB,GAATC,EAChB1iB,EAAMmL,SAAS8D,EAAa+T,QAAQrjB,IAAKsP,EAAa+T,QAAQpjB,IAAK,KAEnEI,EAAMmL,SAAS8D,EAAa+T,QAAQrjB,IAAKsP,EAAa+T,QAAQpjB,IAAKkjB,GAExD,GAATH,GAAuB,GAATC,EAChB5iB,EAAMmL,SAAS8D,EAAagU,QAAQtjB,IAAKsP,EAAagU,QAAQrjB,IAAK,KAEnEI,EAAMmL,SAAS8D,EAAagU,QAAQtjB,IAAKsP,EAAagU,QAAQrjB,IAAKmjB,IAKvE,IAAIhQ,GAAgB,EAoHpB,OAnHI1D,EAAM2D,MAAOzS,GAAiB,KAARA,IAAgB+O,EAAM0D,MAAOzS,GAAiB,KAARA,KAC9DwS,GAAgB,EAChB1D,EAAQ,IAGG,CACX6D,KAAM,CAGJC,IAAK,GACLvI,KAAOmI,EAAqB,GAAL,GACvBlI,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAMxP,OAAS,EAAIwP,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGc,KAArCd,KAAwDA,EAAM,GAAGhW,MAAQgW,EAAM,GAAGX,OAIzH/K,MAAO,CACL,CACE8K,MAAM,EACNe,KA7EM,GA8EN/I,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAjGK,OAkGXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,WACNqK,KAAMxD,EACN8E,SAAU,CACRC,gBAAgB,GAElB8C,UAAW,CAETtO,UAAW,SAAUpL,GACnB,MAAa,KAATA,EACK,GAEAA,KAKfiV,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUxB,EAAqB,EAAL,GAC1ByB,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAIVkM,SAAU,CACR9B,MAAM,KAIZ+B,OAAQ,CACN,CACEL,KA9IS,MA+IT9L,KAAM,OACNoM,QAAQ,EAER9C,OAAQ,SACR+C,WAAY,EAEZtC,UAAW,CACT3N,MAAOwN,EAAS,GAAG0C,WAKrBhC,UAAW,CACTlO,MAAOwN,EAAS,GAAG0C,WAErBjC,KAAMvD,MAcd4T,SAAU,CAACxU,EAAiCC,EAA6BC,KACvE,IACEkG,EADahG,KAAKC,MAAML,EAAOM,gBACV,GAAG8F,UAG1B,MAAMqO,EAAM,CAACxU,EAAS,GAAG,GAAIA,EAAS,GAAG,IACvCyU,EAAM,CAACxU,EAAS,GAAG,GAAIA,EAAS,GAAG,IAEnCyU,EAAQnW,OAAOpB,iBAAiBC,SAASD,iBAAiB0B,UAAU2V,EAAKC,EAAKD,EAAI,IAAItd,EAAG,KACzFyd,EAAQpW,OAAOpB,iBAAiBC,SAASD,iBAAiB0B,UAAU2V,EAAKC,EAAKD,EAAI,IAAItd,EAAG,KACzF0d,EAASrW,OAAOpB,iBAAiBC,SAASD,iBAAiB0B,UAAU2V,EAAKC,EAAK,IAAIvd,EAAG,KAEtFoK,EAAWjR,KAAKC,MAAMiO,OAAOoW,IAAU,EACvCtT,EAAWhR,KAAKC,MAAMiO,OAAOmW,IAAU,EAEzC,IAAIvb,EAAQ4G,EAAOgJ,WACjBjG,EAAQ/C,EAAOgD,WACfC,EAAQjD,EAAOkD,WAIb4R,GAAY,EAChBA,EAAqG,GAAzF7U,EAAS,GAAGL,OAAQ/N,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,GAAayD,OACvFwf,IACFA,EAAqG,GAAzF5U,EAAS,GAAGN,OAAQ/N,GAAiB,MAARA,GAAwBK,MAARL,GAA6B,KAARA,GAAayD,QAM7F,IAAIyf,EAAa,CACf,CACEnP,KAdW,MAeX9L,KAAM,OAENsJ,OAAQ,SACR4I,EAAG,GAEHnI,UAAW,CACT3N,MAAOkQ,GAKThC,UAAW,CACTlO,MAAOkQ,GAET6F,cAAc,EACd9H,KAAM,CACJ,CAAC,EAAG,MACJ,CAAC,EAAG,MACJ,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAEErV,MAAO,CAAC,KAAM+lB,EAAU,KAAOA,EAASF,GAAU,KAClDvR,OAAQ,QAEV,CAAC,GAAIuR,GACL,CAAC,KAAM,MACP,CAAC,KAAME,GACP,CAAC,KAAMD,GACP,CAEE9lB,MAAO,CAAC,KAAO,IAAM,KAAQ8lB,EAAQC,GAAUA,GAC/CzR,OAAQ,QAEV,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,OAETiD,UAAW,CACTlC,KAAM,CACJ,CACEL,MAAO,KACPC,MAAO8Q,EACP7Q,aAAc,CAAC,GAAI,IACnBC,MAAO,CACLC,MAAM,EACNhO,MAAO,OACPgE,UAAW,SAAUiK,GAEnB,OAAO2Q,EAAY,GAAK,UAAoB3Q,EAAKA,KAAKJ,MAAQ,MAGlEK,UAAW,CAAElO,MAAO,kBAI1BoQ,SAAU,CACRlD,OAAQ,GACR8I,QAAQ,EACRjI,MAAO,CAELkI,SAAU,QAIVjS,UAAYiK,GACHA,EAAKyB,MAGhB/B,UAAW,CAAE3N,MAAO,UAAW4D,KAAM,SACrCqK,KAAM,CACJ,CACEyB,KAAM,IACN9B,MAAO,EACPG,MAAO,CACLkB,SAtFO,IAyFX,CACES,KAAM,IACN9B,MAAO,EACPG,MAAO,CACLkB,SA7FO,IAgGX,CACES,KAAM,IACN9B,MAAO,IACPG,MAAO,CACLkB,SApGO,IAuGX,CACES,KAAM,IACN9B,MAAO,IACPG,MAAO,CACLkB,SA3GO,IA8GX,CACES,KAAM,IACN9B,MAAO,IACPG,MAAO,CACLkB,SAlHO,IAqHX,CACES,KAAM,KACN9B,MAAO,IACPG,MAAO,CACLkB,SAzHO,IA4HX,CAEES,KAAM,GACN9B,MAAO,KACPD,UAAW,CACTkN,QAAS,IAGb,CAEEnL,KAAM,GACN9B,MAAO,IAET,CACE8B,KAAM,KACN9B,MAAO,KACPG,MAAO,CACLkB,SA7IO,IAgJX,CAEES,KAAM,KACN9B,MAAO,KACPG,MAAO,CACLkB,SArJO,IAwJX,CAEES,KAAM,KACN9B,MAAO,KACPG,MAAO,CACLkB,SA7JO,IAgKX,CAEES,KAAM,GACN9B,MAAO,KACPD,UAAW,CACTkN,QAAS,IAGb,CACEnL,KAAM,KACN9B,MAAO,KACPG,MAAO,CACLkB,SA5KO,IA+KX,CACES,KAAM,KACN9B,MAAO,KACPG,MAAO,CACLkB,SAnLO,IAsLX,CACES,KAAM,GACN9B,MAAO,MAET,CACE8B,KAAM,GACN9B,MAAO,MAET,CACE8B,KAAM,GACN9B,MAAO,MAET,CACE8B,KAAM,GACN9B,MAAO,MAET,CACE8B,KAAM,MACN9B,MAAO,KACPG,MAAO,CACLkB,SA1MO,IA+MX,CACE,CACEvB,MAAO,CAAC,EAAGiR,GACXhR,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAGV,CAAE8J,MAAO,CAAC,KAAMiR,KAGlB,CACE,CACEjR,MAAO,CAAC,KAAMrC,GACdsC,UAAW,CACT3N,MAAO,OACP4D,KAAM,UAGV,CAAE8J,MAAO,CAAC,KAAMiR,SAwG1B,OAlGIC,IACFC,EAAa,IAGF,CACXvQ,KAAM,CAGJC,IAAK,GACLvI,KAAM,GACNC,MAAO,GACPuI,OAAQ,GACRC,cAAc,GAGhBC,QAAS,CACPC,QAAS,OACT3K,UAAW,SAAU4K,EAAOC,GAC1B,OAAOD,GAASA,EAAM,GAAGX,KAAK7O,OAAS,EACf,MAApBwP,EAAM,GAAGX,KAAK,GACZ,GACAW,EAAM,GAAGE,WAAa,IAAMF,EAAM,GAAGX,KAAK,GAA1CW,KAA2DA,EAAM,GAAGX,KAAK,GAC3EW,EAAM,GAAGX,OAIjB/K,MAAO,CACL,CACE8K,MAAM,EACNe,KAAM7L,EACN8C,KAAM,SACNuI,IAAK,EACLS,UAAW,CACTC,SAAU,GACVC,WAAY,WAGhB,CACElB,MAAM,EACNe,KAAMlC,EACN7G,KAAM,SACNwI,OAAQ,EACRQ,UAAW,CACTC,SAAU,GACVC,WAAY,YAKlBC,OAAQ,CACNnB,MAAM,EACNhI,KAAM,QACNiI,KAAM,CAtSK,OAuSXmB,SAAU,CACRC,YAAY,GAEdC,aAAc,YAEhB1B,MAAO,CACLhK,KAAM,QACN2L,SAAU,CAAEvB,MAAM,GAClBsE,UAAW,CAAEtE,MAAM,GAEnByB,UAAW,CACTzB,MAAM,GAERnD,IAAK,EACLE,IAAK,MAEP8C,MAAO,CACL,CACEjK,KAAM,QACN8L,KAAM3C,EACN4C,QAAUiP,EAAiB,GAAL,GACtBhP,WAAY,GACZC,aAAc,SACdJ,UAAW,CACTzB,MAAM,EACNL,UAAW,CACT3N,MAAO,UACP4D,KAAM,UAGVwS,YAAa,EACbvL,IAAM+T,EAAuB,KAAXvT,EAClBN,IAAKK,EACLkH,UAAW,CACTtE,MAAO4Q,EACP3P,SAhUW,GAkUbM,SAAU,CACRvB,MAAO4Q,KAIb7O,OAAQ8O,KCnhPDC,aAAe,CAS1BC,OAAQ,CAAAC,EAAAC,EAAAC,EAAAC,KAAAC,IAeHjnB,eAAA,EAAA,CAAA6mB,EAAAC,EAAAC,EAAAC,KAAAC,QAAA,EAAA,UAdH/gB,EACA5D,EACAW,EACA0O,EACAuV,GAAuB,GAYvB,MAAMhV,EAAsC,MAAvBP,EAAOO,cAA+CrO,MAAvB8N,EAAOO,aAA4B,KAAOH,KAAKC,MAAML,EAAOO,cAGhH,GAAoB,MAAhBA,GAAkD,MAA1BA,EAAaiV,WAA+CtjB,MAA1BqO,EAAaiV,UAAwB,CAGjG,GAFelkB,EAAM2C,SAASsM,EAAaiV,UAAUvkB,IAAKsP,EAAaiV,UAAUtkB,MAEnEqP,EAAakV,UAEzB,YADAnkB,EAAMyH,gBAAgB2c,OAAO1V,EAAO2V,SAMxC,IAAIC,EAAqB,EACvBC,EAAoB,EACpBC,EAAmB,EACnBC,EAAkB,EACpB,IAAK,IAAI3jB,EAAI,EAAGA,EAAI4N,EAAO/O,IAAKmB,IAC9BwjB,GAAsBtkB,EAAM0kB,aAAa5jB,GAE3CwjB,GAAsBtkB,EAAM0kB,aAAa,EAAGzhB,EAAGG,OAAOC,OAAO8G,UAAUwa,WACvE,IAAK,IAAI7jB,EAAI4N,EAAO9O,IAAKkB,EAAI4N,EAAO9O,IAAM8O,EAAO5O,SAAUgB,IACzDyjB,GAAqBvkB,EAAM4kB,eAAe9jB,GAE5C,IAAK,IAAIA,EAAI,EAAGA,EAAI4N,EAAO9O,IAAKkB,IAC9B0jB,GAAoBxkB,EAAM4kB,eAAe9jB,GAE3C0jB,GAAoBxkB,EAAM4kB,eAAe,EAAG3hB,EAAGG,OAAOC,OAAO8G,UAAU0a,WACvE,IAAK,IAAI/jB,EAAI4N,EAAO/O,IAAKmB,EAAI4N,EAAO/O,IAAM+O,EAAO7O,SAAUiB,IACzD2jB,GAAmBzkB,EAAM0kB,aAAa5jB,GAIxC,MAAMgkB,EAAe,CACnBlf,EAAG4e,EAAmB,GAAK,EAC3B3e,EAAGye,EAAqB,GAAK,EAC7Bxe,EAAGye,EAAoB,EACvBxe,EAAG0e,EAAkB,GAIvB,IAAIM,EAAQ/kB,EAAMyH,gBAAgBud,IAAItW,EAAO2V,SAuB7C,GApBa,MAATU,GAA0BnkB,MAATmkB,GAEnBA,EAAQ,IAAI9hB,EAAGG,OAAOC,OAAOwD,gBAAgBC,eAAe4H,EAAO2V,QAASS,EAAalf,EAAGkf,EAAajf,EAAGif,EAAahf,EAAGgf,EAAa/e,GAGzIgf,EAAMzd,aAAY,GAClByd,EAAMxd,WAAU,GAGhBvH,EAAMyH,gBAAgBC,IAAIqd,KAI1BA,EAAMnf,EAAEkf,EAAalf,GACrBmf,EAAMlf,EAAEif,EAAajf,GACrBkf,EAAMxe,MAAMue,EAAahf,GACzBif,EAAMve,OAAOse,EAAa/e,IAI2B,MAAnDkB,SAASge,eAAevW,EAAO2V,QAAU,OAAgB,CAE3D,MAAMa,EAASje,SAASC,cAAc,OACtCge,EAAOC,aAAa,QAAS,iDAC7BD,EAAOE,UAAY,YAAY1W,EAAO2V,qDAEtCU,EAAMvd,QAAQ0d,GAIhB,IAAIG,EAAgC,KAapC,OAFAA,SAPS,IAAIjoB,QAAQ,CAACC,EAASC,KAC3BgoB,WAAW,KAETjoB,EAAQ,CAAEgoB,MAAO3B,aAAa6B,UAAUlmB,EAAQW,EAAO0O,EAAQuV,MAC9D,OAGoBoB,MAEpB,CACLG,KAAMT,EACND,aAAcA,EACdO,MAAOA,EAEX,GASAE,UAAW,CAAClmB,EAAaW,EAAY0O,EAAiCuV,GAAuB,KAE3F,GAAuD,MAAnDhd,SAASge,eAAevW,EAAO2V,QAAU,OAC3C,OAAO,KAIT,IAAI1V,EAAgB,GAClBC,EAAgB,GAGdgR,EAAsB,GACxBC,EAAsB,GAUxB,MAAM4F,EAAc,CAClBpmB,EACAW,EACA0lB,EACAzgB,KAKA,IAAI0gB,EAGA,CACFC,WAAY,GACZC,iBAAkB,IAIhBC,EAAgB,KAkBpB,OAjBiB,MAAbJ,GAAkC9kB,MAAb8kB,GAA0BA,EAAU1hB,OAAS,IACpE8hB,EAAWzmB,EAAO0mB,iBAAiBL,IAGrCzgB,SAAAA,EAAO3E,QAAQ,CAAC0lB,EAAUC,KAExB,MAAMC,EAAyB,MAAZJ,EAAmBA,EAASnjB,SAASqjB,EAASrmB,IAAKqmB,EAASpmB,KAAOI,EAAM2C,SAASqjB,EAASrmB,IAAKqmB,EAASpmB,KAC5H+lB,EAAOE,iBAAiBllB,KAAKulB,GAGzB,iCAAiC3W,KAAK2W,GACxCP,EAAOC,WAAWjlB,KAAKuM,OAAOgZ,IAE9BP,EAAOC,WAAWjlB,KAAmB,MAAdulB,EAAqB,EAAIA,KAI7CP,GAGyC7W,KAAKC,MAAML,EAAOM,gBAC3D1O,QAAQ,CAACC,EAAMC,KACtB,IAAI2lB,EAAgB,GAClBC,EAAgB,GACdC,EAAsB,GACxBC,EAAsB,GAExB,MAAMC,EAAed,EAAYpmB,EAAQW,EAAOO,EAAKimB,WAAYjmB,EAAKkmB,QACtEN,EAAWI,EAAaX,WACxBS,EAAiBE,EAAaV,iBAC9B,MAAMa,EAAejB,EAAYpmB,EAAQW,EAAOO,EAAKomB,WAAYpmB,EAAKqmB,QACtER,EAAWM,EAAad,WACxBU,EAAiBI,EAAab,iBAE9BlX,EAAShO,KAAKwlB,GACdvX,EAASjO,KAAKylB,GACdxG,EAAejf,KAAK0lB,GACpBxG,EAAelf,KAAK2lB,KAItB,MAAMO,EAAQ5f,SAASge,eAAevW,EAAO2V,QAAU,OAGvD,IAQIlgB,EARAkhB,EAAQyB,mBAAQC,iBAAiBF,GA0ErC,OAzEa,MAATxB,GAA0BzkB,MAATykB,IACnBA,EAAQyB,mBAAQE,KAAKH,EAAO,KAAM,CAChCI,SAAU,SACVC,cAAc,KAMM,IAApBxY,EAAO0T,UACTje,EAASqK,gBAAgBC,QAAQC,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgByG,QAAQvG,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgB6H,QAAQ3H,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBgI,QAAQ9H,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBiI,QAAQ/H,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBkI,QAAQhI,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBmI,QAAQjI,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgB2I,QAAQzI,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgB6K,QAAQ3K,EAAQC,EAAUC,GACtB,IAApBF,EAAO0T,UAChBje,EAASqK,gBAAgByM,QAAQvM,EAAQC,EAAUC,EAAU5O,GAChC,IAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBuQ,QAAQrQ,EAAQC,EAAUC,EAAU5O,GAChC,KAApB0O,EAAO0T,UAChBje,EAASqK,gBAAgBmR,SAASjR,EAAQC,EAAUC,EAAUgR,EAAgBC,GACjD,KAApBnR,EAAO0T,UAChBje,EAASqK,gBAAgBuR,SAASrR,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB0R,SAASxR,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB2R,SAASzR,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB4R,SAAS1R,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB8R,SAAS5R,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgBoS,SAASlS,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgBsT,SAASpT,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgByT,SAASvT,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,WAAwC,KAApB1T,EAAO0T,WAAwC,KAApB1T,EAAO0T,UACtEje,EAASqK,gBAAgB0T,iBAAiBxT,EAAQC,EAAUC,GAC/B,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB6T,SAAS3T,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgB8T,SAAS5T,EAAQC,EAAUC,GACvB,KAApBF,EAAO0T,UAChBje,EAASqK,gBAAgBgU,SAAS9T,EAAQC,EAAUC,EAAU5O,GACjC,KAApB0O,EAAO0T,YAChBje,EAASqK,gBAAgB0U,SAASxU,EAAQC,EAAUC,IAGlDzK,GAA4B,iBAAXA,IAGf8f,IACF9f,EAAOgjB,WAAY,GAGrB9B,EAAM+B,UAAUjjB,IAGlBkhB,EAAM+B,UAAUjjB,GAETkhB,GAQTgC,cAAgBhD,IAEd,MAAMwC,EAAQ5f,SAASge,eAAeZ,EAAU,OAGhD,IAAIgB,EAAQyB,mBAAQC,iBAAiBF,GACrC,OAAa,MAATxB,GAA0BzkB,MAATykB,EACZ,KAGFA,ICjTEiC,cAAgB,CAQ3BC,YAAa,CAAOloB,EAAajB,EAAiBopB,EAAyCC,IAAuD1qB,eAAA,OAAA,OAAA,EAAA,YAEhJ,MAAMsB,QAAiBC,MAAMF,EAAS,CAAEG,OAAQ,QAGhD,GAAIF,EAASG,GAAI,CAEf,MAAMC,QAAaJ,EAASI,OAGtBipB,EAAU,IAAIC,KAAK,CAAClpB,GAAO,CAAE+J,KAAM,oBAGzCnJ,EAAOuoB,KACLF,EACA,IAAW3qB,eAAA,OAAA,OAAA,EAAA,YACe,mBAAbyqB,UACHA,EAASnoB,GAOnB,GACO1B,GAAUZ,eAAA,OAAA,OAAA,EAAA,YACU,mBAAd0qB,UACHA,EAAU9pB,OAK1B,GAgBAkqB,gBAAwBxoB,GAA8BtC,eAAA,OAAA,OAAA,EAAA,YACpD,OAAO,IAAIK,QAAQ,CAACC,EAASC,KAC3B+B,EAAOyoB,KAEJrpB,GAASpB,EAAQoB,GAEjBspB,GAAUzqB,EAAOyqB,KAGxB,GAOAC,MAAO,CAAC/kB,EAAS5D,KAEf,MAAMkF,EAAalF,EAAOmF,gBAE1B,IAAK,IAAI1D,EAAI,EAAGA,EAAIyD,EAAYzD,IAAK,CACnC,MAAMd,EAAQX,EAAOoF,SAAS3D,GAG9B,IAAImnB,EAAYjoB,EAAMioB,YAGtBA,EAAUC,cAAcjlB,EAAGG,OAAOC,OAAO8kB,MAAMC,oBAAoBC,MACnEJ,EAAUK,iBAAiBrlB,EAAGG,OAAOC,OAAO8kB,MAAMC,oBAAoBC,MAOtEJ,EAAUM,SAAS,GACnBN,EAAUO,OAAOxoB,EAAMoB,eACvB6mB,EAAUQ,YAAY,GACtBR,EAAUS,UAAU,IAGpBT,EAAUU,OAAO,CAYfxV,IAAK,mBACLC,OAAQ,mBACRxI,KAAM,kBACNC,MAAO,mBAYP+d,OAAQ,EACRC,OAAQ,IAIVZ,EAAUa,UAAU,IAAI7lB,EAAGG,OAAOC,OAAO8kB,MAAMY,UAAU9lB,EAAGG,OAAOC,OAAO8kB,MAAMa,UAAUC,KAE1FjpB,EAAMioB,UAAUA,GAIlB5oB,EAAO2oB,SAUTkB,cAAe,CAACjmB,EAAS5D,EAAa8pB,EAAmB,MAEvD,MAAMC,EAAO/pB,EAAOgqB,OAAO,CAAEC,sBAAsB,IAG7CC,EAAuB,CAAC,QAAS,QAAS,QAAS,WAAY,SAAU,UAAW,wBAAyB,2BAG7GC,EAAa,IAAIvmB,EAAGG,OAAOC,OAAOomB,SACxCD,EAAWE,SAASN,GAGpBI,EAAW7nB,eAGX,MAAM4C,EAAailB,EAAWhlB,gBAE9B,IAAK,IAAImlB,EAAS,EAAGA,EAASplB,EAAYolB,IAAU,CAElD,MAAM3pB,EAAQwpB,EAAW/kB,SAASklB,GAGlC3pB,EAAM4pB,qBAEN,IAAK,IAAI9oB,EAAI,EAAGA,EAAId,EAAMoB,cAAeN,IACvC,IAAK,IAAIC,EAAI,EAAGA,EAAIf,EAAMqB,iBAAkBN,IAAK,CAE/C,MAAM8oB,EAAc7pB,EAAM8pB,WAAWhpB,EAAGC,GAGxC,GAAmB,MAAf8oB,GAAsCjpB,MAAfipB,GAA4BN,EAAqBrjB,KAAM3F,GAASspB,EAAYvd,QAAQ/L,IAAQ,GAAK,CAE1H,MAAMmC,EAAU1C,EAAM2C,SAAS7B,EAAGC,GAGlCf,EAAM4H,QAAQ9G,EAAGC,GAAGgpB,aAAQnpB,GAG5BZ,EAAMmL,SAASrK,EAAGC,EAAG2B,IAM3B1C,EAAMgqB,mBAAkB,GAI1BR,EAAWpnB,cAEK,IAAZ+mB,IACFA,EAAWK,EAAW/kB,SAAS,GAAG6P,QAGpC,IAAIrO,EAAU,CACZgkB,SAAUhnB,EAAGG,OAAOC,OAAO6mB,SAASC,MACpCb,sBAAsB,EACtBc,eAAe,EACfC,iBAAiB,EACjBC,YAAY,EACZC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,uBAAuB,EACvBC,oBAAoB,EACpBC,yBAAyB,GAG3BpB,EAAWqB,OACRpsB,IACCqsB,UAAAA,OAAOrsB,EAAM,GAAG0qB,WAElB,OACAljB,GAIFujB,EAAWuB,WAYbC,2BAA4B,CAAApH,EAAAqH,KAAAjH,IASxBjnB,eAAA,EAAA,CAAA6mB,EAAAqH,KAAAjH,QAAA,EAAA,UARF/gB,EACAioB,EACAC,GAAmB,EACnBC,EACAC,EAAgC,CAC9B,CAAE/W,KAAM,KAAM9L,KAAM,SAAU8iB,IAAK,6BACnC,CAAEhX,KAAM,QAAS9L,KAAM,SAAU8iB,IAAK,8BAGxC,IAAKJ,GAA6B,GAAlBA,EAAQlnB,OACtB,OAIGmnB,UACG7D,cAAciE,aAAatoB,EAAIooB,IAIvC,MAAMG,EAAe,IAAIvoB,EAAGG,OAAOC,OAAOomB,SAG1C+B,EAAa7pB,eAEb6pB,EAAa9B,SAASwB,EAAQ,GAAG7B,UAEjC,IAAK,IAAIvoB,EAAI,EAAGA,EAAIoqB,EAAQlnB,OAAQlD,IAAK,CAEvC,MAAM0oB,EAAa,IAAIvmB,EAAGG,OAAOC,OAAOomB,SAGxCD,EAAW7nB,eAEX6nB,EAAWE,SAASwB,EAAQpqB,GAAGuoB,UAG/B,MAAMoC,EAAY3qB,EAAI,GACtB0oB,EAAWkC,iBAAiBprB,QAAQ,SAAUqrB,GAC5CA,EAAWrX,KAAO,OAAOmX,KAAaE,EAAWrX,OACjDkX,EAAaI,cAAcD,EAC7B,GAGA,IAAIE,EAAYrC,EAAW/kB,SAAS,GAEhCqnB,EAAgBhd,KAAKid,UAAUF,EAAUxC,UAE7CyC,EAAgBA,EAActM,QAAQ,aAAc,gBAAkBiM,EAAY,KAClFK,EAAgBA,EAActM,QAAQ,kBAAmB,qBAAuBiM,EAAY,KAG5F,IAAIO,EAAW,IAAI/oB,EAAGG,OAAOC,OAAO4oB,UAAU,WAAWR,MACzDD,EAAaU,SAASV,EAAahnB,gBAAiBwnB,GACpDA,EAAStC,SAAS5a,KAAKC,MAAM+c,IAG7B,MAAMK,EAAmBH,EAAS5qB,cAG5BgrB,EAAeZ,EAAa/mB,SAAS,GAG3C2nB,EAAaniB,QAAQmiB,EAAahrB,cAAe+qB,GAGjD,IAAIE,EAAuBD,EAAahrB,cAAgB+qB,EAExD,MAAMG,EAAa,CAAC,IAAIrpB,EAAGG,OAAOC,OAAOkpB,UAAU,GAAI,GAAI,IACzDC,EAAe,CAAC,IAAIvpB,EAAGG,OAAOC,OAAOkpB,MAAMF,EAAsB,EAAGF,EAAkBH,EAAS3qB,mBACjGmqB,EAAaiB,iBAAiBC,QAAQ,CACpCC,IAAK,iBACLjH,UAAW0G,EAAa9X,OACxBsY,UAAWZ,EACXM,WAAYA,EACZE,aAAcA,EACdK,WAAW,EACXC,cAAe,GACfC,YAAa9pB,EAAGG,OAAOC,OAAO2pB,sBAAsBtiB,MAItD8gB,EAAayB,YAAYzB,EAAahnB,gBAAkB,GAGxD4nB,EAAac,iBAGb1D,EAAWpnB,cAGXonB,EAAWuB,UAIb,MAAM/qB,EAAQwrB,EAAalsB,iBAkB3B,GAfAU,EAAM0E,KAAK,GAGX1E,EAAMiG,QAAQknB,kBAAmB,EACjCntB,EAAMiG,QAAQmnB,kBAAmB,EAGjC5B,EAAavlB,QAAQonB,iBAAkB,EACvC7B,EAAavlB,QAAQqnB,yBAA0B,EAC/C9B,EAAavlB,QAAQsnB,uBAAwB,EAG7C/B,EAAavlB,QAAQunB,mBAAoB,GAGpCrC,EAAS,CAGZ,IAAIlD,EADauD,EAAa/mB,SAAS+mB,EAAahnB,gBAAkB,GAC7CyjB,YACzBA,EAAUU,OAAO,CAAExV,IAAK,EAAGC,OAAQ,EAAGxI,KAAM,EAAGC,MAAO,EAAG+d,OAAQ,EAAGC,OAAQ,IAC5EZ,EAAUwF,YAAW,GACrBxF,EAAUyF,cAAa,GACvBzF,EAAU0F,eAAc,GACxB1F,EAAUC,cAAcjlB,EAAGG,OAAOC,OAAO8kB,MAAMC,oBAAoBC,MACnEJ,EAAUK,iBAAiBrlB,EAAGG,OAAOC,OAAO8kB,MAAMC,oBAAoBC,MACtEJ,EAAU2F,WAAW,MAevB,OAXApC,EAAappB,cAGT+oB,EACF7D,cAAc4B,cAAcjmB,EAAIuoB,EAAcJ,GAE9CI,EAAaqC,QAAQ,SAAUpvB,GAC7BqsB,UAAAA,OAAOrsB,EAAM,GAAG2sB,GAAcA,EAAWpnB,OAAS,EAAIonB,EAAa,WACrE,EAAG0C,QAAQnS,KAGN6P,CACT,GAOAD,aAAc,CAAOtoB,EAASooB,IAAiCtuB,eAAA,OAAA,OAAA,EAAA,YAE7D,OAAO,IAAIK,QAAQ,CAAOC,EAASC,IAAUP,eAAA,OAAA,OAAA,EAAA,YAC3C,IACOsuB,GAA+B,GAAnBA,EAASrnB,QACxB3G,EAAQ,MAGV,IAAK,IAAIyD,EAAI,EAAGA,EAAIuqB,EAASrnB,OAAQlD,IAAK,CACxC,MAAMitB,EAAO1C,EAASvqB,GAEhBzC,QAAiBC,MAAMyvB,EAAKzC,IAAK,CAAE/sB,OAAQ,QAEjD,GAAIF,EAASG,GAAI,CACf,MAAMC,QAAaJ,EAASI,OAE5B,IAAIuvB,EAAS,IAAIC,WACjBD,EAAOE,kBAAkBzvB,GACzBuvB,EAAOG,OAAS,SAAUxwB,GACxB,IAAIywB,EAAkBJ,EAAOnwB,OAEzBwwB,EAAQ,CAAA,EACZA,EAAMN,EAAKvlB,MAAQ4lB,EACnBnrB,EAAGG,OAAOC,OAAOirB,IAAIC,gBAAgBhD,aAAawC,EAAKzZ,KAAM+Z,GAE7DhxB,EAAQoB,EACV,IAGJ,MAAOspB,GACPzqB,EAAOyqB,MA0Cb","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.cjs.min.js","sources":["../node_modules/.pnpm/@rollup+plugin-typescript@1_ccba8aa16c5fc04bbd7ba036697931a3/node_modules/tslib/tslib.es6.js","../src/utils/common.ts","../src/utils/sheet.ts","../src/utils/business.ts","../src/utils/echarts-all.ts","../src/utils/echarts.ts","../src/utils/formula-other.ts","../src/utils/formula.ts","../src/utils/wookbook.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\r\n * 公用工具函数属性\r\n */\r\nexport const CommonUtils = {\r\n /**\r\n * 获取文件的字节流对象\r\n * @param fileUrl 在线文件地址\r\n * @returns 文件的字节流对象\r\n */\r\n getFileBlob: async (fileUrl: string): Promise<Blob> | null => {\r\n // 获取文件响应结果\r\n const response = await fetch(fileUrl, { method: 'GET' });\r\n\r\n // 获取成功\r\n if (response.ok) {\r\n // 文件的字节流对象\r\n const blob = await response.blob();\r\n\r\n return blob;\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * 获取列的英文字母\r\n * @param colIndex 列的索引\r\n * @returns 返回英文字母\r\n */\r\n getColLetterName: (colIndex: number): string => {\r\n colIndex += 1;\r\n\r\n let letter = '';\r\n while (colIndex > 0) {\r\n const remainder = (colIndex - 1) % 26;\r\n letter = String.fromCharCode(remainder + 65) + letter;\r\n colIndex = Math.floor((colIndex - 1) / 26);\r\n }\r\n\r\n return letter.toUpperCase();\r\n },\r\n};\r\n","// 导入rapid-utils中的函数(注意:需要在tsconfig.json文件中设置moduleResolution为node,否则会提示:找不到模块“rapid-utils”。你的意思是要将 \"moduleResolution\" 选项设置为 \"nodenext\",还是要将别名添加到 \"paths\" 选项中?ts(2792))\r\nimport { forEachJson, orderByJson, groupByJson } from 'rapid-utils';\r\n// 导入单元格实体\r\nimport { CellModel, CellWatermarkModel, CellDateModel } from '../types/sheet';\r\nimport { CommonUtils } from '../utils/common';\r\n\r\n/**\r\n * SpreadJS工作表工具函数属性\r\n */\r\nexport const SheetUtils = {\r\n /**\r\n * 获取当前活动工作表选中的单元格集合\r\n * @param spread 工作簿对象\r\n * @returns 返回选中单元格的集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getActiveSheetSelectCells: (spread: any): CellModel[] => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n const allCellObjs: CellModel[] = sheet.getSelections();\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表某个或某些单元格范围为选中状态\r\n * @param spread 工作簿对象\r\n * @param cellObj 设置选中的单元格,格式如:{row:0,col:0,rowCount:1,colCount:1}\r\n */\r\n setActiveSheetSelectCells: (spread: any, cellObj: CellModel) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n sheet.setSelection(cellObj.row, cellObj.col, cellObj.rowCount, cellObj.colCount);\r\n },\r\n\r\n /**\r\n * 获取某工作表中某个范围中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了某个单元格范围,在这个范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRange 单元格范围,格式如:{ row: 0, col: 0, rowCount: 2, colCount: 2 }\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRange: (sheet: any, selectRange: CellModel, isMulColOrder: boolean = false): CellModel[] => {\r\n return SheetUtils.getAllCellObjsByRanges(sheet, [selectRange], isMulColOrder);\r\n },\r\n\r\n /**\r\n * 获取某工作表中多个范围集合中所有的单元格坐标对象集合\r\n * 该方法适用的场景如:手动选择了很多个单元格范围,在这些范围中可能包含独立的单元格,也可能包含合并的单元格,这时候就需要用到如下方法获取到所有单元格对象\r\n * @param sheet 工作表实例\r\n * @param selectRanges 单元格范围集合,格式如:[{ row: 0, col: 0, rowCount: 2, colCount: 2 }]\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n */\r\n getAllCellObjsByRanges: (sheet: any, selectRanges: CellModel[], isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到所有的单元格坐标对象集合,格式如:[{ row: 0, col: 0, rowCount: 1, colCount: 1 }]\r\n let allCellObjs: CellModel[] = [];\r\n\r\n selectRanges.forEach((item, index) => {\r\n // 得到当前item中所有合并的单元格对象集合\r\n const itemSpanCells = sheet.getSpans(item);\r\n itemSpanCells.forEach((itemSpanCell: CellModel) => {\r\n allCellObjs.push({\r\n row: itemSpanCell.row,\r\n col: itemSpanCell.col,\r\n rowCount: itemSpanCell.rowCount,\r\n colCount: itemSpanCell.colCount,\r\n });\r\n });\r\n\r\n if (item.row === undefined || item.col === undefined || item.rowCount === undefined || item.colCount === undefined) {\r\n throw new Error('row、col、rowCount、colCount is required.');\r\n }\r\n\r\n // 遍历item中涉及到的所有单元格\r\n for (let i = item.row; i < +item.row + item.rowCount; i++) {\r\n for (let j = item.col; j < item.col + item.colCount; j++) {\r\n const curSpanCellObj = sheet.getSpan(i, j);\r\n\r\n // 检查当前单元格是否为合并单元格\r\n if (curSpanCellObj == null) {\r\n allCellObjs.push({\r\n row: i,\r\n col: j,\r\n rowCount: 1,\r\n colCount: 1,\r\n });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // 对所有单元格坐标对象集合进行排序\r\n allCellObjs = orderByJson(allCellObjs, !isMulColOrder ? ['row', 'col'] : ['col', 'row'], ['asc', 'asc']);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中所有的单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @returns 返回数组集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n */\r\n getSheetAllCellObjs: (sheet: any): CellModel[] => {\r\n // 得到当前Sheet单元格范围\r\n const curSheetCellRange = [\r\n {\r\n row: 0,\r\n col: 0,\r\n rowCount: sheet.getRowCount(),\r\n colCount: sheet.getColumnCount(),\r\n },\r\n ];\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取某工作表中选中的所有单元格坐标对象集合\r\n * @param sheet 工作表实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0, \"rowCount\": 1, \"colCount\": 1 }]\r\n */\r\n getSheetSelectCellObjs: (sheet: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 得到当前Sheet中选择的单元格范围集合\r\n const curSheetCellRange = sheet.getSelections();\r\n\r\n // 得到所有的单元格坐标对象集合,格式如:[{ col: 0, colCount: 2, row: 0, rowCount: 1 }]\r\n const allCellObjs = SheetUtils.getAllCellObjsByRanges(sheet, curSheetCellRange, isMulColOrder);\r\n\r\n return allCellObjs;\r\n },\r\n\r\n /**\r\n * 获取活动工作表中选中的所有单元格坐标对象集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @returns 返回数组集合,格式如:[{ col: 0, row: 0, \"rowCount\": 1, \"colCount\": 1 }]\r\n */\r\n getActiveSheetSelectCellObjs: (spread: any, isMulColOrder: boolean = false): CellModel[] => {\r\n // 当前活动的Sheet\r\n const sheet = spread.getActiveSheet();\r\n\r\n return SheetUtils.getSheetSelectCellObjs(sheet, isMulColOrder);\r\n },\r\n\r\n /**\r\n * 获取某工作表指定范围单元格的坐标对象集合(二维数组,格式如:[[{row:0……}],[{row:0……}]])\r\n * @param sheet 工作表实例\r\n * @param cellRange 单元格范围\r\n * @param groupType 分组字段属性(row或col),默认为:row\r\n * @returns 返回某工作表指定范围单元格的坐标对象集合(二维数组,格式如:[[{row:0……}],[{row:0……}]])\r\n */\r\n getSheetCellObjsByGroup: (sheet: any, cellRange: CellModel, groupType: 'row' | 'col' = 'row'): Array<Array<CellModel>> => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n const valCells = SheetUtils.getAllCellObjsByRange(sheet, cellRange);\r\n\r\n // 按照JSON数组中某个字段进行分组(groupType为row或col)\r\n const groupByCells = groupByJson(valCells, groupType);\r\n\r\n // 最终返回结果(二维数组)\r\n const retCells: Array<Array<any>> = [];\r\n\r\n // 遍历分组JSON对象(groupByCells的格式为:{key1: [cell1, cell2, ...], key2: [cell1, cell2, ...], ...})\r\n forEachJson(groupByCells, (curGroupCells: CellModel[], key, source) => {\r\n retCells.push(curGroupCells);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retCells;\r\n },\r\n\r\n /**\r\n * 获取某工作表选中单元格的值集合\r\n * @param sheet 工作表实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回选中单元格的值集合\r\n */\r\n getSheetSelectVals: (\r\n sheet: any,\r\n isMulColOrder: boolean = false,\r\n nullUndefinedReplaceVal?: number | string\r\n ): (number | string | null | undefined)[] => {\r\n // 获取活动工作表选中单元格对象集合\r\n const selectCells = SheetUtils.getSheetSelectCellObjs(sheet, isMulColOrder);\r\n\r\n // 获取选中单元格的值集合\r\n let selectCellVals: (number | string | null | undefined)[] = [];\r\n selectCells.forEach((cell) => {\r\n let cellVal = sheet.getValue(cell.row, cell.col);\r\n\r\n // 如果cellVal为null或undefined,并且nullUndefinedReplaceVal不为null或undefined,则将cellVal替换为nullUndefinedReplaceVal\r\n if (nullUndefinedReplaceVal != null && nullUndefinedReplaceVal != undefined && (cellVal === null || cellVal === undefined)) {\r\n cellVal = nullUndefinedReplaceVal;\r\n }\r\n\r\n selectCellVals.push(cellVal);\r\n });\r\n\r\n return selectCellVals;\r\n },\r\n\r\n /**\r\n * 获取活动工作表选中单元格的值集合\r\n * @param spread 工作簿实例\r\n * @param isMulColOrder 是否按照多列的顺序排序单元格(true:按照第一列从上到下、第二列从上到下……的顺序获取单元格数据、false:按照第一行从左到右、第二行从左到右……的顺序获取单元格数据)\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回选中单元格的值集合\r\n */\r\n getActiveSheetSelectVals: (\r\n spread: any,\r\n isMulColOrder: boolean = false,\r\n nullUndefinedReplaceVal?: number | string\r\n ): (number | string | null | undefined)[] => {\r\n // 获取当前活动工作表\r\n const sheet = spread.getActiveSheet();\r\n\r\n return SheetUtils.getSheetSelectVals(sheet, isMulColOrder, nullUndefinedReplaceVal);\r\n },\r\n\r\n /**\r\n * 获取某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])\r\n * @param sheet 工作表实例\r\n * @param cellRange 单元格范围\r\n * @param groupType 分组字段属性(row或col),默认为:row\r\n * @param nullUndefinedReplaceVal 如果单元格的值为null或undefined,则将其替换为该值(如果不传入该参数,则不替换)\r\n * @returns 返回某工作表指定范围单元格的值集合(二维数组,格式如:[[1,2,3],[4,5,6]])\r\n */\r\n getSheetRangeValsByGroup: (\r\n sheet: any,\r\n cellRange: CellModel,\r\n groupType: 'row' | 'col' = 'row',\r\n nullUndefinedReplaceVal?: number | string | boolean\r\n ): Array<Array<any>> => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n const valCells = SheetUtils.getAllCellObjsByRange(sheet, cellRange);\r\n\r\n // 按照JSON数组中某个字段进行分组(groupType为row或col)\r\n const groupByCells = groupByJson(valCells, groupType);\r\n\r\n // 最终返回结果(二维数组)\r\n const retVals: Array<Array<any>> = [];\r\n\r\n // 遍历分组JSON对象(groupByCells的格式为:{key1: [cell1, cell2, ...], key2: [cell1, cell2, ...], ...})\r\n forEachJson(groupByCells, (curGroupCells: CellModel[], key, source) => {\r\n // 当前按照row或col分组的单元格的值集合\r\n const curVals: Array<any> = [];\r\n\r\n // 遍历当前分组的所有单元格\r\n forEachJson(curGroupCells, (item, index, source) => {\r\n let cellVal = sheet.getValue(item.row, item.col);\r\n\r\n // 如果cellVal为null或undefined,并且nullUndefinedReplaceVal不为null或undefined,则将cellVal替换为nullUndefinedReplaceVal\r\n if (nullUndefinedReplaceVal != null && nullUndefinedReplaceVal != undefined && (cellVal === null || cellVal === undefined)) {\r\n cellVal = nullUndefinedReplaceVal;\r\n }\r\n\r\n curVals.push(cellVal);\r\n });\r\n\r\n retVals.push(curVals);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retVals;\r\n },\r\n\r\n /**\r\n * 获取单元格类型名称\r\n * @param GC GC对象\r\n * @param sheet 工作表实例\r\n * @param row 单元格行索引\r\n * @param col 单元格列索引\r\n * @returns 返回单元格类型名称,如:button、radio、checkbox、checkboxList、hyperLink、comboBox、date、dateRange、calc\r\n */\r\n getCellType: (GC: any, sheet: any, row: number, col: number): string | undefined => {\r\n let cellTypeName;\r\n\r\n // 先根据getCellType来获取\r\n const cellType = sheet.getCellType(row, col);\r\n\r\n if (cellType instanceof GC.Spread.Sheets.CellTypes.Button) {\r\n cellTypeName = 'button';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.RadioButtonList) {\r\n cellTypeName = 'radio';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBox) {\r\n cellTypeName = 'checkbox';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.CheckBoxList) {\r\n cellTypeName = 'checkboxList';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.HyperLink) {\r\n cellTypeName = 'hyperLink';\r\n } else if (cellType instanceof GC.Spread.Sheets.CellTypes.ComboBox) {\r\n cellTypeName = 'comboBox';\r\n }\r\n\r\n // 根据getStyle来获取\r\n if (cellTypeName == undefined || cellTypeName == null) {\r\n const cellStyle = sheet.getStyle(row, col);\r\n\r\n if (cellStyle && cellStyle.cellButtons && cellStyle.cellButtons.length > 0) {\r\n if (cellStyle.cellButtons[0].command == 'openDateTimePicker') {\r\n if (cellStyle.dropDowns && cellStyle.dropDowns.length > 0) {\r\n if (cellStyle.dropDowns[0].option.showDateRange) {\r\n cellTypeName = 'dateRange';\r\n } else {\r\n cellTypeName = 'date';\r\n }\r\n }\r\n } else if (cellStyle.cellButtons[0].command == 'openCalculator') {\r\n cellTypeName = 'calc';\r\n }\r\n }\r\n }\r\n\r\n return cellTypeName;\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表的缩放比例\r\n * @param spread 工作簿实例\r\n * @param scale 缩放比例,默认为:1(100%)\r\n */\r\n setSheetZoom: (spread: any, scale: number) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n sheet.zoom(scale);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表中选中的单元格背景颜色\r\n * @param spread 工作簿实例\r\n * @param color 背景颜色\r\n */\r\n setActiveSheetSelectBgColor: (spread: any, color: string) => {\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n //#region 方式1:通过getRange进行批量设置,推荐使用该方法来实现\r\n\r\n // 获取选择的多个单元格范围集合\r\n const selections = SheetUtils.getActiveSheetSelectCells(spread);\r\n\r\n // 循环每个选中的单元格范围\r\n selections.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n //#endregion\r\n\r\n //#region 方式2:通过getCell获取单元格样式对每个单元格进行设置,此方式效率相对较低,不推荐\r\n\r\n // // 当前活动的工作表中所有选择的单元格\r\n // const selectCells = SheetUtils.getActiveSheetSelectCellObjs(spread);\r\n\r\n // selectCells.forEach(item => {\r\n // // 获取单元格对象\r\n // const cellObj = sheet.getCell(item.row, item.col);\r\n\r\n // // 获取单元格样式\r\n // let cellStyle = sheet.getStyle(item.row, item.col);\r\n // if (!cellStyle) {\r\n // // 不存在样式则new一个\r\n // cellStyle = new GC.Spread.Sheets.Style();\r\n // }\r\n\r\n // // 设置单元格背景颜色\r\n // cellStyle.backColor = color;\r\n\r\n // // 重新设置单元格样式\r\n // cellObj.setStyle(cellStyle);\r\n // });\r\n\r\n //#endregion\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置某工作表中指定单元格背景颜色\r\n * @param sheet 工作表实例\r\n * @param cells 单元格集合\r\n * @param color 背景颜色\r\n */\r\n setSheetBgColor: (sheet: any, cells: CellModel[], color: string) => {\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 循环每个选中的单元格范围\r\n cells.forEach((sel: CellModel) => {\r\n // 批量设置每个选中的单元格范围的背景颜色\r\n sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).backColor(color);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n * 设置工作簿中所有工作表是否显示分页线\r\n * @param spread 工作簿实例\r\n * @param isShow 是否显示分页线(true:显示、false:不显示)\r\n */\r\n setSheetShowPrintPageLine: (spread: any, isShow: boolean) => {\r\n // 暂停绘制\r\n spread.suspendPaint();\r\n\r\n const sheetCount = spread.getSheetCount();\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取当前工作表是否显示分页线\r\n // var isVisible = sheet.isPrintLineVisible();\r\n\r\n sheet.isPrintLineVisible(isShow);\r\n }\r\n\r\n // 恢复绘制\r\n spread.resumePaint();\r\n },\r\n\r\n /**\r\n * 忽略工作工作表元格中指定字符串不显示,如:#DIV/0!、#VALUE!等\r\n * @param GC GC对象\r\n */\r\n ignoreSheetShowStrs: (GC: any) => {\r\n // 忽略的字符串集合\r\n const ignoreStrs: string[] = ['#DIV/0!', '#VALUE!', '#NAME?', '#N/A', '#NULL!', '#NUM!', '#REF!'];\r\n\r\n // paint对象\r\n const ignorePaint = GC.Spread.Sheets.CellTypes.Text.prototype.paint;\r\n\r\n // 重写paint函数\r\n GC.Spread.Sheets.CellTypes.Text.prototype.paint = function (ctx: any, value: any, x: any, y: any, w: any, h: any, style: any, options: any) {\r\n // 如果在忽略的字符串集合中有匹配的结果,则将其显示为空字符串\r\n if (ignoreStrs.some((item) => item == value)) {\r\n ignorePaint.call(this, ctx, '/', x, y, w, h, style, options);\r\n } else {\r\n ignorePaint.apply(this, arguments);\r\n }\r\n\r\n // // 或使用如下代码\r\n // if (ignoreStrs.some((item) => item == value)) {\r\n // \tvalue = '';\r\n // }\r\n // ignorePaint.apply(this, [ctx, value, x, y, w, h, style, options]);\r\n };\r\n },\r\n\r\n /**\r\n * 设置工作表显示辅助线(底部和右侧的辅助线)\r\n * @param sheet 工作表实例\r\n * @param width 宽度(像素)\r\n * @param height 高度(像素)\r\n * @param lineWidth 辅助线宽度(默认为:1像素)\r\n * @param colorStr 辅助线颜色(默认为:#409eff)\r\n * @param isHb 是否为横表(默认为:false)\r\n */\r\n setSheetAuxiliaryLine: (\r\n GC: any,\r\n sheet: any,\r\n width: number,\r\n height: number,\r\n lineWidth: number = 1,\r\n colorStr: string = '#409eff',\r\n isHb: boolean = false\r\n ) => {\r\n // 创建底部和右侧的浮动对象\r\n let floatBottom = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineBottom${isHb ? 'Hb' : ''}`, 0, height, width, lineWidth),\r\n floatRight = new GC.Spread.Sheets.FloatingObjects.FloatingObject(`floatLineRight${isHb ? 'Hb' : ''}`, width, 0, lineWidth, height);\r\n\r\n // 创建底部和右侧的div对象\r\n let divBottom = document.createElement('div'),\r\n divRight = document.createElement('div');\r\n\r\n // 设置底部div对象样式\r\n divBottom.style.width = `${width}px`;\r\n divBottom.style.height = '1px';\r\n divBottom.style.borderBottom = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // 设置右侧div对象样式\r\n divRight.style.width = '1px';\r\n divRight.style.height = `${height}px`;\r\n divRight.style.borderLeft = `${lineWidth}px dashed ${colorStr}`;\r\n\r\n // floatBottom.fixedPosition(true);\r\n // floatRight.fixedPosition(true);\r\n\r\n // 设置底部和右侧浮动对象不允许改变大小、不允许拖动和设置浮动对象的内容\r\n floatBottom.allowResize(false);\r\n floatBottom.allowMove(false);\r\n floatBottom.content(divBottom);\r\n floatRight.allowResize(false);\r\n floatRight.allowMove(false);\r\n floatRight.content(divRight);\r\n\r\n // 将浮动元素添加到工作表中\r\n sheet.floatingObjects.add(floatBottom);\r\n sheet.floatingObjects.add(floatRight);\r\n },\r\n\r\n /**\r\n * 设置当前活动工作表的水印和数据绑定是否显示\r\n * @param spread 工作簿实例\r\n * @param cells 数据绑定单元格配置集合([{ row: number; col: number; title: string; pathPrev: string; pathField: string }])\r\n * @param isShow 是否显示\r\n */\r\n setActiveSheetWatermark: (spread: any, cells: CellWatermarkModel[], isShow: boolean) => {\r\n if (cells == null || cells == undefined) {\r\n return;\r\n }\r\n\r\n const sheet = spread.getActiveSheet();\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n cells.forEach((cell: CellWatermarkModel) => {\r\n // 设置或移除水印标签\r\n sheet.getCell(cell.row, cell.col).watermark(isShow ? `{${cell.title}}` : undefined);\r\n\r\n // 设置或移除绑定路径\r\n sheet.setBindingPath(cell.row, cell.col, isShow ? `${cell.pathPrev}.${cell.pathField}` : undefined);\r\n });\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n\r\n /**\r\n\t * 设置某工作表中单元格为日期选择控件\r\n\t * @param GC GC对象\r\n\t * @param sheet 工作表实例\r\n\t * @param cells 单元格集合,格式如:[{\r\n\t\t\tdateFormat: 'yyyy-MM-dd',\r\n\t\t\trow: 0,\r\n\t\t\tcol: 0\r\n\t\t}]\r\n\t * @param isAutoSize 是否自适应单元格大小(默认为:true)\r\n\t */\r\n setSheetCellDate: (GC: any, sheet: any, cells: CellDateModel[], isAutoSize: boolean = true) => {\r\n cells.forEach((item, index) => {\r\n // 先获取单元格样式,否则设置控件后样式会丢失\r\n let cellStyle = sheet.getStyle(item.row, item.col);\r\n if (!cellStyle) {\r\n cellStyle = new GC.Spread.Sheets.Style();\r\n }\r\n\r\n cellStyle.cellButtons = [\r\n {\r\n imageType: GC.Spread.Sheets.ButtonImageType.dropdown,\r\n command: 'openDateTimePicker',\r\n // 按钮宽度\r\n // width: 10,\r\n },\r\n ];\r\n cellStyle.dropDowns = [\r\n {\r\n type: GC.Spread.Sheets.DropDownType.dateTimePicker,\r\n option: {\r\n showTime: false,\r\n showDateRange: false,\r\n },\r\n },\r\n ];\r\n cellStyle.formatter = item.dateFormat;\r\n\r\n // 是否缩小以适应\r\n cellStyle.shrinkToFit = isAutoSize;\r\n\r\n // 设置单元格样式\r\n sheet.setStyle(item.row, item.col, cellStyle);\r\n });\r\n },\r\n\r\n /**\r\n * 根据单元格范围获取范围字符串\r\n * @param cellRange 单元格范围\r\n * @returns 返回范围字符串,如:A1:B2\r\n */\r\n getRangeStr: (cellRange: CellModel): string => {\r\n // 计算起始位置\r\n const startCol = CommonUtils.getColLetterName(cellRange.col);\r\n // 行索引转Excel行号(从1开始)\r\n const startRow = cellRange.row + 1;\r\n\r\n // 计算结束位置\r\n const endCol = CommonUtils.getColLetterName(cellRange.col + cellRange.colCount - 1);\r\n // 结束行号 = 起始行 + 行数\r\n const endRow = cellRange.row + cellRange.rowCount;\r\n\r\n return `${startCol}${startRow}:${endCol}${endRow}`;\r\n\r\n // // 或者使用SpreadJS提供的方法rangeToFormula\r\n // return GC.Spread.Sheets.CalcEngine.rangeToFormula(cellRange);\r\n },\r\n};\r\n","import { chunkJson } from 'rapid-utils';\r\nimport { TestObjectAttrModel } from '../types/business';\r\nimport { SheetUtils } from '../utils/sheet';\r\n\r\n/**\r\n * SpreadJS业务相关工具函数属性\r\n */\r\nexport const BusinessUtils = {\r\n /**\r\n * 创建检测对象属性单元格\r\n * @param gc GC对象\r\n * @param sheet 工作表实例\r\n * @param testObjectAttrs 检测对象属性配置集合\r\n * @param isVertical 是否为纵表,默认为:true\r\n * @param contentColStartIndex 表格内容列起始索引,默认为:1\r\n * @param contentTotalColCount 表格内容列总数,默认为:77\r\n * @param addRowHeight 添加的表格行高,默认为:24\r\n */\r\n createTestObjectAttrsCells: (\r\n gc: any,\r\n sheet: any,\r\n testObjectAttrs: TestObjectAttrModel[],\r\n isVertical: boolean = true,\r\n contentColStartIndex: number = 1,\r\n contentTotalColCount: number = 77,\r\n addRowHeight: number = 24\r\n ) => {\r\n if (!testObjectAttrs || testObjectAttrs.length === 0) {\r\n return;\r\n }\r\n\r\n // 标题单元格列数量(纵表为12列,横表待定)\r\n const titleCellColumnCount = isVertical ? 12 : 10;\r\n // 标题对应的值单元格列数量(纵表:第一个值单元格为26、第二个值单元格为27,纵表待定)\r\n const titleCellValColumnCount = isVertical ? 26 : 15;\r\n\r\n // 一行中检测对象属性的个数(纵表为2个,横表为3个)\r\n const rowTestObjectCount = isVertical ? 2 : 3;\r\n\r\n // 将测试对象属性数据进行分块\r\n const testObjectAttrsChunk = chunkJson(testObjectAttrs, rowTestObjectCount);\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 设置工作表行数为0\r\n sheet.setRowCount(0);\r\n\r\n for (let i = 0; i < testObjectAttrsChunk.length; i++) {\r\n const rowAttrArr = testObjectAttrsChunk[i] as TestObjectAttrModel[];\r\n\r\n // 获取总行数\r\n const totalRowCount: number = sheet.getRowCount();\r\n\r\n // 添加一行\r\n sheet.addRows(totalRowCount, 1);\r\n\r\n // 设置添加这一行的行高\r\n sheet.setRowHeight(totalRowCount, addRowHeight, gc.Spread.Sheets.SheetArea.viewport);\r\n\r\n // 获取添加这一行的区域范围\r\n const addRowRange = sheet.getRange(totalRowCount, 1, contentColStartIndex, contentTotalColCount, gc.Spread.Sheets.SheetArea.viewport);\r\n // 设置添加这一行区域中的边框样式(最左边和最后边边框样式为粗线、中间的为细边框样式)\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.thin), { all: true });\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.medium), { left: true });\r\n addRowRange.setBorder(new gc.Spread.Sheets.LineBorder('#000', gc.Spread.Sheets.LineStyle.medium), { right: true });\r\n // 设置单元格水平和垂直居中\r\n addRowRange.hAlign(gc.Spread.Sheets.HorizontalAlign.center);\r\n addRowRange.vAlign(gc.Spread.Sheets.HorizontalAlign.center);\r\n\r\n // 合并第一个属性的标题列和值列,同时设置对应单元格的内容\r\n sheet.addSpan(totalRowCount, contentColStartIndex, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(\r\n totalRowCount,\r\n contentColStartIndex + titleCellColumnCount,\r\n 1,\r\n rowAttrArr.length > 1 ? titleCellValColumnCount : contentTotalColCount - titleCellColumnCount,\r\n gc.Spread.Sheets.SheetArea.viewport\r\n );\r\n sheet.setValue(totalRowCount, contentColStartIndex, rowAttrArr[0].title);\r\n sheet.setValue(totalRowCount, contentColStartIndex + titleCellColumnCount, rowAttrArr[0].value);\r\n\r\n // 合并第二个属性的标题列和值列,同时设置对应单元格的内容\r\n if (rowAttrArr.length > 1) {\r\n const colIndexTitle = contentColStartIndex + titleCellColumnCount + titleCellValColumnCount;\r\n const colIndexValue = colIndexTitle + titleCellColumnCount;\r\n\r\n sheet.addSpan(totalRowCount, colIndexTitle, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(\r\n totalRowCount,\r\n colIndexValue,\r\n 1,\r\n titleCellValColumnCount + 1 + (!isVertical && rowAttrArr.length == 2 ? titleCellColumnCount + titleCellValColumnCount + 1 : 0),\r\n gc.Spread.Sheets.SheetArea.viewport\r\n );\r\n sheet.setValue(totalRowCount, colIndexTitle, rowAttrArr[1].title);\r\n sheet.setValue(totalRowCount, colIndexValue, rowAttrArr[1].value);\r\n }\r\n // 合并第三个属性的标题列和值列,同时设置对应单元格的内容\r\n if (rowAttrArr.length > 2) {\r\n const colIndexTitle =\r\n contentColStartIndex + titleCellColumnCount + titleCellValColumnCount + titleCellColumnCount + titleCellValColumnCount + 1;\r\n const colIndexValue = colIndexTitle + titleCellColumnCount;\r\n\r\n sheet.addSpan(totalRowCount, colIndexTitle, 1, titleCellColumnCount, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.addSpan(totalRowCount, colIndexValue, 1, titleCellValColumnCount + 1, gc.Spread.Sheets.SheetArea.viewport);\r\n sheet.setValue(totalRowCount, colIndexTitle, rowAttrArr[2].title);\r\n sheet.setValue(totalRowCount, colIndexValue, rowAttrArr[2].value);\r\n }\r\n }\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n },\r\n /**\r\n * 获取检测对象属性值集合\r\n * @param sheet 工作表实例\r\n * @param testObjectAttrs 检测对象属性配置集合\r\n * @param isVertical 是否为纵表,默认为:true\r\n * @param contentColStartIndex 表格内容列起始索引,默认为:1\r\n * @param contentTotalColCount 表格内容列总数,默认为:77\r\n */\r\n getTestObjectAttrsVals: (\r\n sheet: any,\r\n testObjectAttrs: TestObjectAttrModel[],\r\n isVertical: boolean = true,\r\n contentColStartIndex: number = 1,\r\n contentTotalColCount: number = 77\r\n ): TestObjectAttrModel[] => {\r\n // 一行中检测对象属性的个数(纵表为2个,横表为3个)\r\n const rowTestObjectCount = isVertical ? 2 : 3;\r\n\r\n // 将测试对象属性数据进行分块\r\n const testObjectAttrsChunk = chunkJson(testObjectAttrs, rowTestObjectCount);\r\n\r\n // 暂停绘制\r\n sheet.suspendPaint();\r\n\r\n // 所有单元格对象\r\n const allCells = SheetUtils.getAllCellObjsByRange(sheet, {\r\n row: 0,\r\n col: contentColStartIndex,\r\n rowCount: sheet.getRowCount(),\r\n colCount: contentTotalColCount,\r\n });\r\n // 将所有单元格对象进行分块\r\n const allCellsChunk = chunkJson(allCells, rowTestObjectCount * 2);\r\n\r\n // 将所有单元格对象按照testObjectAttrsChunk的结构进行组合\r\n const newAllCellsChunk = [];\r\n for (let i = 0; i < allCellsChunk.length; i++) {\r\n newAllCellsChunk.push(chunkJson(allCellsChunk[i], 2));\r\n }\r\n\r\n let retData: TestObjectAttrModel[] = [];\r\n\r\n for (let i = 0; i < testObjectAttrsChunk.length; i++) {\r\n const attrObjs = testObjectAttrsChunk[i] as TestObjectAttrModel[];\r\n\r\n for (let j = 0; j < attrObjs.length; j++) {\r\n const attrObj = attrObjs[j];\r\n\r\n retData.push({\r\n title: sheet.getValue(newAllCellsChunk[i][j][0].row, newAllCellsChunk[i][j][0].col), //attrObj.title,\r\n fieldName: attrObj.fieldName,\r\n value: sheet.getValue(newAllCellsChunk[i][j][1].row, newAllCellsChunk[i][j][1].col),\r\n });\r\n }\r\n }\r\n\r\n // 恢复绘制\r\n sheet.resumePaint();\r\n\r\n return retData;\r\n },\r\n};\r\n","import * as math from 'mathjs';\r\nimport { type EChartsUtilsConfigModel } from '../types/echarts';\r\n\r\n/**\r\n * 公用方法,如:修约计算等\r\n */\r\nconst EChartsUtilsComm = {\r\n /**\r\n * 计算常规修约\r\n * @param roundingVal 修约值\r\n * @param accuracy 修约精度\r\n * @return 返回修约结果\r\n */\r\n getRound: (roundingVal, accuracy) => {\r\n // 验证修约的值是否为负数,为负数的话,取绝对值进行修约\r\n const valIsNegative = roundingVal < 0;\r\n if (valIsNegative) {\r\n roundingVal = Math.abs(roundingVal);\r\n }\r\n\r\n // 修约精度为0的时候\r\n if (accuracy == 0) {\r\n // 得到字符串形式\r\n let inputValStr = roundingVal.toString();\r\n\r\n // 判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return valIsNegative ? -roundingVal : roundingVal;\r\n }\r\n\r\n // 获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n // 小数部分大于或等于0.5的话,就给整数部分加1后返回,否则返回整数部分\r\n if (parseFloat(`0.${decimalStr}`) >= 0.5) {\r\n return valIsNegative ? -(intVal + 1) : intVal + 1;\r\n } else {\r\n return valIsNegative ? -intVal : intVal;\r\n }\r\n }\r\n\r\n // 系数\r\n let coefficient = 1 / accuracy;\r\n\r\n // 换算后的修约值(=修约值*系数)\r\n // 注意:此处使用到了toFixed,目的是可能会存在精度的问题\r\n let roundingValCal = Number((roundingVal * coefficient).toFixed(8));\r\n\r\n /**\r\n * 计算修约结果函数\r\n * @param inputVal 换算后的修约值\r\n * @returns 返回修约结果\r\n */\r\n const calcRoundingRet = (inputVal: number): number => {\r\n // 得到字符串形式\r\n let inputValStr = inputVal.toString();\r\n\r\n // 判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return inputVal;\r\n }\r\n\r\n // 获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n // 获取小数部分的第一位数字\r\n let decimalStrFirst = parseInt(decimalStr.substring(0, 1));\r\n\r\n // 大于等于6的时候,入\r\n if (decimalStrFirst >= 6) {\r\n return intVal + 1;\r\n }\r\n // 小于等于4的时候,舍\r\n else if (decimalStrFirst <= 4) {\r\n return intVal;\r\n }\r\n\r\n // 小数部分为5,并且只有一位小数的时候,前面的整数部分如果是奇数则入,反之则舍\r\n else if (decimalStrFirst == 5 && decimalStr.length == 1) {\r\n return intVal % 2 != 0 ? intVal + 1 : intVal;\r\n }\r\n\r\n // 小数部分为5,并且小数位数大于一位的时候,则入\r\n else if (decimalStrFirst == 5 && decimalStr.length > 1) {\r\n return intVal + 1;\r\n }\r\n\r\n return inputVal;\r\n };\r\n\r\n // 返回最终修约结果(=修约结果/系数)\r\n const retNum = calcRoundingRet(roundingValCal) / coefficient;\r\n\r\n //获取修约精度中的小数位数\r\n let accuracyStr = accuracy + '';\r\n\r\n // 如果修约精度中没有小数,则直接返回\r\n if (accuracyStr.indexOf('.') == -1) {\r\n return valIsNegative ? -retNum : retNum;\r\n } else {\r\n const retNumStr = retNum + '';\r\n\r\n // 补位的0的字符串\r\n let zeroStr = '';\r\n\r\n // 结果为整数的时候,需要补充小数点后面的小数位数为0,如:34→34.0\r\n if (retNumStr.indexOf('.') == -1) {\r\n let zeroStr = '';\r\n for (let index = 0; index < accuracyStr.split('.')[1].length; index++) {\r\n zeroStr += '0';\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}.${zeroStr}`;\r\n }\r\n // 结果为小数的时候,需要补充修约精度的位数,如:0.3修约精度为0.01,则最终应该返回0.30\r\n else {\r\n const xsPart = retNumStr.split('.')[1];\r\n\r\n if (accuracyStr.split('.')[1].length > xsPart.length) {\r\n for (let index = 0; index < accuracyStr.split('.')[1].length - xsPart.length; index++) {\r\n zeroStr += '0';\r\n }\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}${zeroStr}`;\r\n }\r\n }\r\n },\r\n /**\r\n * 实现Excel中TREND(返回线性回归拟合线的一组纵坐标值[y值])公式的计算\r\n * @param x x轴数据集合\r\n * @param y y轴数据集合\r\n * @param xVal x轴的值\r\n * @returns\r\n */\r\n calcTrend: (x: Array<number>, y: Array<number>, xVal: number) => {\r\n let n = x.length;\r\n let sumX = 0,\r\n sumY = 0,\r\n sumXY = 0,\r\n sumXX = 0;\r\n for (let i = 0; i < n; i++) {\r\n sumX += x[i];\r\n sumY += y[i];\r\n sumXY += x[i] * y[i];\r\n sumXX += x[i] * x[i];\r\n }\r\n let slope = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX);\r\n let intercept = (sumY - slope * sumX) / n;\r\n\r\n let predictedY = slope * xVal + intercept;\r\n\r\n if (slope + '' == 'NaN') {\r\n return { y: '', gs: '', xl: '', jj: '' };\r\n }\r\n\r\n //返回y轴趋势数据,以及公式\r\n return { y: predictedY, gs: `${slope}*x+${intercept}`, xl: slope, jj: intercept };\r\n },\r\n /**\r\n * 过滤掉数组中的null、空字符串或/符号等,并返回新的数组\r\n * @param dataSource 原始数组\r\n */\r\n filterNullEmptyErrArray: (dataSource: Array<any>) => {\r\n let retArr = dataSource.filter((item) => item != null && item != undefined && (item._error == null || item._error == undefined) && item != '/');\r\n\r\n return retArr;\r\n },\r\n};\r\n\r\n/**\r\n * 所有统计图表的ECharts配置\r\n */\r\nexport const EChartsUtilsAll = {\r\n /**\r\n * 沥青混合料-目标配合比设计-毛体积密度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart10: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0],\r\n yDataSource = yDataArr[0];\r\n\r\n // 原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData: any[] = [],\r\n yData: any[] = [];\r\n\r\n // 处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n // y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n // 检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 2.35,\r\n yAxisMin = 2.25,\r\n */\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.05, 0.01)),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.05, 0.01)),\r\n seriesData = [],\r\n upperLimit = null, // 上限\r\n lowerLimit = null,\r\n showLine = true; // 是否显示辅助线\r\n\r\n let points: any = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n // 计算峰值\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, 0.001))],\r\n coordX = [peakvalue[0], yAxisMin];\r\n\r\n // console.log('x范围:', xMin, xMax);\r\n // 输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, xMin);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, xMax);\r\n }\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, arrX[maxIndex]);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333', // X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ];\r\n pointData = [\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: peakvalue[1],\r\n symbolOffset: [0, 15],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n //return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a1';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n // 判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,// 是否显示外边框线\r\n // borderColor: '#f00',// 外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n // 提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n // 顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n // 图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, // 显示\r\n },\r\n selectedMode: 'multiple', // 用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, // 使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 40 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', // '#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n // splitNumber: 10, // 设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n // 设置y轴箭头效果\r\n show: true, // y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, // 平滑的线条\r\n // 设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', // 符号类型\r\n symbolSize: 6, // 符号大小 lineJson.lineColor\r\n // 线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n // 线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n // 线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], // 去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-稳定度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart11: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0],\r\n yDataSource = yDataArr[0];\r\n\r\n // 原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n // 处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n // y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n // 检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 2),\r\n yAxisMin = Math.floor(yMin - 2),\r\n seriesData = [],\r\n upperLimit = null, // 上限\r\n lowerLimit = 7.5, // 下限\r\n showLine = true; // 是否显示辅助线\r\n\r\n // 获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 2;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 2;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n // arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n // 计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n // 获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; // 上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; // 下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n // 上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n // 向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n // 下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n // 向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n // 上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n // 下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n // 下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n // 只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n // 上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n // 上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n // 只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n // 上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n // 上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n // 上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n // 上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n // 输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, arrX[maxIndex]);\r\n }\r\n }\r\n\r\n // 峰值\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, 0.001))];\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [\r\n [\r\n {\r\n coord: [peakvalue[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', // X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ];\r\n pointData = [\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: peakvalue[1],\r\n symbolOffset: [0, 15],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n //return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: peakvalue[0],\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a2';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-空隙率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart12: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [8.8, 5.9, 4.1, 3.3, 2.6];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 10,\r\n yAxisMin = 0,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 2),\r\n yAxisMin = Math.floor(yMin - 2),\r\n seriesData = [],\r\n upperLimit = 5, //上限\r\n lowerLimit = 3, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 2;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 2;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n if (upperIntersectionPoint.length > 0) {\r\n upperIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], upperLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n if (lowerIntersectionPoint.length > 0) {\r\n lowerIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], lowerLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n\r\n //上下线交点分别只有一个才求平均值\r\n if (upperIntersectionPoint.length == 1 && lowerIntersectionPoint.length == 1) {\r\n const avg = ((upperIntersectionPoint[0][0] + lowerIntersectionPoint[0][0]) / 2).toFixed(2);\r\n const avgXIndex = arrX.findIndex((n) => n == avg);\r\n // console.log('输出:', avg, avgXIndex);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, avg);\r\n }\r\n }\r\n lineData.push([\r\n {\r\n coord: [avg, yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [avg, arrY[avgXIndex]],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a3';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-流值\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart13: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [2.2, 2.5, 2.9, 3.4, 4.2];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 5,\r\n yAxisMin = 1,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 1),\r\n yAxisMin = Math.floor(yMin - 1),\r\n seriesData = [],\r\n upperLimit = null, //上限\r\n lowerLimit = 2, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 1;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 1;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [];\r\n pointData = [];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 25 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-矿料间隙率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart14: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [16.1, 15.2, 14.6, 14.8, 16];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 19.0,\r\n yAxisMin = 13.0,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 1),\r\n yAxisMin = Math.floor(yMin - 1),\r\n seriesData = [],\r\n upperLimit = null, //上限\r\n lowerLimit = 13.5, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 1;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 1;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (lowerLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n lineData = [];\r\n pointData = [];\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-有效沥青饱和度\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart15: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let xDataSource = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n yDataSource = yDataArr[0]; // [40.1, 59.8, 66.8, 74.5, 78.2];\r\n\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [];\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n xData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n xData.push(item);\r\n }\r\n }\r\n });\r\n yDataSource.forEach((item, index) => {\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item)) {\r\n yData.push(item);\r\n } else {\r\n if (item == '/' || item == undefined || item == null || item == '') {\r\n item = 0;\r\n yData.push(item);\r\n }\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n //检查x轴的数据有多少个0,大于1个的时候,就不绘制图形\r\n let zeroCount = 0;\r\n xData.forEach((item) => {\r\n if (item == 0) {\r\n zeroCount++;\r\n }\r\n });\r\n // if (zeroCount > 1) {\r\n // \treturn;\r\n // }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n /*\r\n\t\t\txAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMax = 80,\r\n yAxisMin = 30,\r\n\t\t\t*/\r\n xAxisMax = xMax,\r\n xAxisMin = xMin,\r\n yAxisMax = Math.ceil(yMax + 10),\r\n yAxisMin = Math.floor(yMin - 10),\r\n seriesData = [],\r\n upperLimit = 75, //上限\r\n lowerLimit = 60, //下限\r\n showLine = true; //是否显示辅助线\r\n\r\n //获取单元格中的上限和下限\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSx != null && chartExtJson.lqhhlSx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlSx.row, chartExtJson.lqhhlSx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n upperLimit = curVal;\r\n }\r\n }\r\n if (chartExtJson.lqhhlXx != null && chartExtJson.lqhhlXx != undefined) {\r\n const curVal = sheet.getValue(chartExtJson.lqhhlXx.row, chartExtJson.lqhhlXx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curVal)) {\r\n lowerLimit = curVal;\r\n }\r\n }\r\n }\r\n\r\n if (upperLimit != null && upperLimit > yAxisMax) {\r\n yAxisMax = upperLimit + 10;\r\n }\r\n if (lowerLimit != null && lowerLimit > yAxisMax) {\r\n yAxisMin = lowerLimit - 10;\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n console.log('无法解决该线性系统');\r\n }\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //计算两条线段是否有交点\r\n function ifHaveIntersectionPoint(y1, y2, y3, y4) {\r\n if ((y1 >= y3 && y2 <= y4) || (y1 <= y3 && y2 >= y4)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //获取两点和香交线最接近的点\r\n function getIntersectionPoint(y1, y2, y) {\r\n if (Math.abs(y1 - y) > Math.abs(y2 - y)) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n let upperIntersectionPoint = [],\r\n lowerIntersectionPoint = [];\r\n let upperIntersectionPointTrend = []; //上限交点趋势(向上相交(1) 还是向下相交(0))\r\n let lowerIntersectionPointTrend = []; //下限交点趋势\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n if (index > 0) {\r\n //上限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], upperLimit, upperLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], upperLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n upperIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n upperIntersectionPointTrend.push(0);\r\n } else {\r\n upperIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n //下限交点\r\n if (upperLimit != null) {\r\n if (ifHaveIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit, lowerLimit)) {\r\n let index1 = getIntersectionPoint(arrY[index - 1], arrY[index], lowerLimit);\r\n // console.log(arrX[index + index1], arrY[index + index1]);\r\n lowerIntersectionPoint.push([arrX[index + index1], arrY[index + index1]]);\r\n if (arrY[index - 1] > arrY[index]) {\r\n //向下趋势\r\n lowerIntersectionPointTrend.push(0);\r\n } else {\r\n lowerIntersectionPointTrend.push(1);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n let validX1 = xMin,\r\n validX2 = xMax;\r\n if (upperIntersectionPoint.length == 0 && lowerIntersectionPoint.length > 0) {\r\n //上限无交点,下限有交点\r\n if (lowerIntersectionPointTrend[0] == 0) {\r\n //下限向下相交\r\n validX1 = xMin;\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //下限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n if (lowerIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = lowerIntersectionPoint[1][0];\r\n }\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length == 0) {\r\n //上限有交点,下限无交点\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n if (upperIntersectionPoint.length == 1) {\r\n //只有一个交点\r\n validX2 = xMax;\r\n } else {\r\n validX2 = upperIntersectionPoint[1][0];\r\n }\r\n } else {\r\n //上限向上相交\r\n validX1 = xMin;\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n } else if (upperIntersectionPoint.length > 0 && lowerIntersectionPoint.length > 0) {\r\n //上下限都有交点,情况太多,我们只取中间\r\n if (upperIntersectionPointTrend[0] == 0) {\r\n //上限向下相交\r\n validX1 = upperIntersectionPoint[0][0];\r\n validX2 = lowerIntersectionPoint[0][0];\r\n } else {\r\n //上限向上相交\r\n validX1 = lowerIntersectionPoint[0][0];\r\n validX2 = upperIntersectionPoint[0][0];\r\n }\r\n }\r\n\r\n // console.log('x范围:', validX1, validX2);\r\n //输出开始和结束范围\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlKs != null && chartExtJson.lqhhlKs != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlKs.row, chartExtJson.lqhhlKs.col, validX1);\r\n sheet.setValue(chartExtJson.lqhhlJs.row, chartExtJson.lqhhlJs.col, validX2);\r\n }\r\n }\r\n\r\n let lineData = [];\r\n let pointData = [];\r\n if (showLine) {\r\n if (upperIntersectionPoint.length > 0) {\r\n upperIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], upperLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n if (lowerIntersectionPoint.length > 0) {\r\n lowerIntersectionPoint.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [item[0], lowerLimit],\r\n },\r\n ]);\r\n });\r\n }\r\n //上下线交点分别只有一个才求平均值\r\n if (upperIntersectionPoint.length == 1 && lowerIntersectionPoint.length == 1) {\r\n const avg = ((upperIntersectionPoint[0][0] + lowerIntersectionPoint[0][0]) / 2).toFixed(2);\r\n const avgXIndex = arrX.findIndex((n) => n == avg);\r\n // console.log('输出:', avg, avgXIndex);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, avg);\r\n }\r\n }\r\n lineData.push([\r\n {\r\n coord: [avg, yAxisMin],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [avg, arrY[avgXIndex]],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: yAxisMin,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'a4';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n }\r\n\r\n if (upperLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, upperLimit],\r\n lineStyle: {\r\n color: '#333', //上限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, upperLimit],\r\n },\r\n ]);\r\n }\r\n\r\n if (lowerLimit != null) {\r\n lineData.push([\r\n {\r\n coord: [xAxisMin, lowerLimit],\r\n lineStyle: {\r\n color: '#333', //下限\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: [xAxisMax, lowerLimit],\r\n },\r\n ]);\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineJson[0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 沥青混合料-目标配合比设计-汇总\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart16: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineJson = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n // let lines = [\r\n // \t[3.5, 5.5],\r\n // \t[3.5, 5.5],\r\n // \t[4.21, 5.27],\r\n // \t[3.5, 5.5],\r\n // \t[3.5, 5.5],\r\n // \t[4.01, 5.03],\r\n // ],\r\n\r\n //原始数据\r\n let lines = [\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[0].row, chartExtJson.lqhhlHz[0].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[1].row, chartExtJson.lqhhlHz[1].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[2].row, chartExtJson.lqhhlHz[2].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[3].row, chartExtJson.lqhhlHz[3].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[4].row, chartExtJson.lqhhlHz[4].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[5].row, chartExtJson.lqhhlHz[5].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[6].row, chartExtJson.lqhhlHz[6].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[7].row, chartExtJson.lqhhlHz[7].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[8].row, chartExtJson.lqhhlHz[8].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[9].row, chartExtJson.lqhhlHz[9].col),\r\n ],\r\n [\r\n sheet.getValue(chartExtJson.lqhhlHz[10].row, chartExtJson.lqhhlHz[10].col),\r\n sheet.getValue(chartExtJson.lqhhlHz[11].row, chartExtJson.lqhhlHz[11].col),\r\n ],\r\n ],\r\n xData = xDataArr[0], // [3.5, 4, 4.5, 5, 5.5],\r\n xAxisMax = 5.5,\r\n xAxisMin = 3.5,\r\n yAxisMin = 0,\r\n yAxisMax = 6,\r\n yData = [0, 1, 2, 3, 4, 5, 6],\r\n yAxisData = ['VFA', 'VMA', '流值', '稳定度', '空隙率', '密度'],\r\n seriesData = [],\r\n showLine = true; //是否显示辅助线\r\n\r\n const title = 'OAC',\r\n xName = '油石比(%)',\r\n yName = 'VFA(%)',\r\n legendName = '图例1';\r\n let lineData = [];\r\n let pointData = [];\r\n let xMin = Math.max(...lines.map((item) => item[0]));\r\n let xMax = Math.min(...lines.map((item) => item[1]));\r\n\r\n lines.forEach((item, index) => {\r\n lineData.push([\r\n {\r\n coord: [item[0], lines.length - index],\r\n lineStyle: {\r\n color: lineJson[0].lineColor,\r\n type: 'solid',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [item[1], lines.length - index],\r\n },\r\n ]);\r\n });\r\n if (showLine && xMin <= xMax) {\r\n //最小\r\n lineData.push([\r\n {\r\n coord: [xMin, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [xMin, 6],\r\n },\r\n ]);\r\n //最大\r\n lineData.push([\r\n {\r\n coord: [xMax, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [xMax, 6],\r\n },\r\n ]);\r\n pointData = [\r\n {\r\n xAxis: xMin,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OACmin';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n {\r\n xAxis: xMax,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OACmax';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ];\r\n }\r\n\r\n if (xMin <= xMax) {\r\n //平均值\r\n const avg = (xMin + xMax) / 2;\r\n lineData.push([\r\n {\r\n coord: [avg, 0],\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n width: 2,\r\n },\r\n },\r\n {\r\n coord: [avg, 6],\r\n },\r\n ]);\r\n pointData.push({\r\n xAxis: avg,\r\n yAxis: 0,\r\n symbolOffset: [0, 40],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n return 'OAC2';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n });\r\n }\r\n\r\n if (isNaN(xMin)) {\r\n xMin = 0;\r\n }\r\n if (isNaN(xMax)) {\r\n xMax = 0;\r\n }\r\n // console.log('输出:', xMin, xMax);\r\n //输出\r\n if (chartExtJson != null) {\r\n if (chartExtJson.lqhhlSc1 != null && chartExtJson.lqhhlSc1 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc1.row, chartExtJson.lqhhlSc1.col, xMin);\r\n }\r\n if (chartExtJson.lqhhlSc2 != null && chartExtJson.lqhhlSc2 != undefined) {\r\n sheet.setValue(chartExtJson.lqhhlSc2.row, chartExtJson.lqhhlSc2.col, xMax);\r\n }\r\n }\r\n\r\n //判断数据是否为/\r\n let yValIsAllNull = false;\r\n lines.forEach((item) => {\r\n yValIsAllNull = item.every((ele) => {\r\n return ele == '/';\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 10,\r\n right: 10,\r\n bottom: !yValIsAllNull ? 16 : 20,\r\n containLabel: true,\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n axisLabel: {\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (data == 0) {\r\n return '';\r\n } else {\r\n return yAxisData[data - 1];\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n // data: seriesData,\r\n markPoint: {\r\n data: pointData,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'], //去掉箭头\r\n data: lineData,\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 击实\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart30: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //设置是否选择校正jsIsJz的默认值\r\n if (chartExtJson != null && (chartExtJson.jsIsJz == null || chartExtJson.jsIsJz == undefined)) {\r\n chartExtJson.jsIsJz = true;\r\n }\r\n // console.log(config);\r\n\r\n let isTwoLine = xDataArr.length == 2;\r\n\r\n let xDataSource1 = xDataArr[0], // [1.6, 2.4, 3.5, 4.6, 5.3],\r\n xDataSource2 = isTwoLine ? xDataArr[1] : [], // [1.5, 2.4, 3.6, 4.3, 5.4],\r\n yDataSource1 = yDataArr[0], // [2.25, 2.29, 2.34, 2.29, 2.23],\r\n yDataSource2 = isTwoLine ? yDataArr[1] : []; // [2.27, 2.32, 2.36, 2.33, 2.26];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n const lineFunc = (xDataSource, yDataSource, isShowMarkPoint, isShowMarkLine, isTwoLineData) => {\r\n //原始数据\r\n let dxsJs = chartExtJson != null ? chartExtJson.dxsJs : 5,\r\n xData = [],\r\n yData = [],\r\n seriesData = []; //处理原始数据为空的值,不然参与mathjs计算会报错\r\n\r\n //处理原始数据为空的值,不然参与mathjs计算会报错\r\n xDataSource.forEach((item, index) => {\r\n if (\r\n /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(item) &&\r\n item != 0 &&\r\n /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(yDataSource[index]) &&\r\n yDataSource[index] != 0\r\n ) {\r\n xData.push(item);\r\n yData.push(yDataSource[index]);\r\n }\r\n });\r\n\r\n //y轴没有任何数据的时候,不参与绘制图表\r\n if (yData.length == 0) {\r\n return;\r\n }\r\n\r\n if (dxsJs >= yData.length) {\r\n dxsJs = yData.length - 1;\r\n }\r\n\r\n let xMin = Math.min(...xData),\r\n xMax = Math.max(...xData),\r\n yMin = Math.min(...yData),\r\n yMax = Math.max(...yData),\r\n xAxisMax = Math.ceil(xMax + 0.1),\r\n xAxisMin = Math.trunc(xMin - 0.1),\r\n yAxisMax = Number(EChartsUtilsComm.getRound(yMax + 0.02, 0.01)),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(yMin - 0.02, 0.01));\r\n\r\n //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)\r\n let cellValJzZjhsl, cellValJzZdgmd;\r\n if (chartExtJson != null && chartExtJson.jsIsJz) {\r\n if (chartExtJson.jsZjhslJz != null && chartExtJson.jsZjhslJz != undefined) {\r\n cellValJzZjhsl = sheet.getValue(chartExtJson.jsZjhslJz.row, chartExtJson.jsZjhslJz.col);\r\n }\r\n if (chartExtJson.jsZdgmdJz != null && chartExtJson.jsZdgmdJz != undefined) {\r\n cellValJzZdgmd = sheet.getValue(chartExtJson.jsZdgmdJz.row, chartExtJson.jsZdgmdJz.col);\r\n }\r\n\r\n //如果界面输入的最大干密度大于了y轴最大值,则需要重新设置y轴的最大值\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZdgmd) && cellValJzZdgmd > yAxisMax) {\r\n yAxisMax = Number(EChartsUtilsComm.getRound(cellValJzZdgmd + 0.02, 0.01));\r\n }\r\n }\r\n\r\n let points = [];\r\n xData.forEach((item, index) => {\r\n points.push([item, yData[index]]);\r\n });\r\n\r\n // 构造范德蒙德矩阵的函数\r\n function vandermondeMatrix(x, N) {\r\n const matrix = [];\r\n for (let i = 0; i < x.length; i++) {\r\n const row = [];\r\n for (let j = 0; j <= N; j++) {\r\n // 注意这里从0到N,包含N\r\n row.push(math.pow(x[i], j));\r\n }\r\n matrix.push(row);\r\n }\r\n return math.matrix(matrix);\r\n }\r\n\r\n // 构造原始的范德蒙德矩阵\r\n const vandermonde_matrix = vandermondeMatrix(xData, dxsJs); // 注意这里N=4,因为我们从0开始计数\r\n\r\n // 使用最小二乘法求解\r\n const A = vandermonde_matrix;\r\n const AT = math.transpose(A);\r\n const ATA = math.multiply(AT, A);\r\n\r\n const ATb = math.multiply(AT, math.matrix(yData));\r\n\r\n // 解线性方程组\r\n let result: any = null,\r\n coefficients: any = [];\r\n try {\r\n result = math.lusolve(ATA, ATb);\r\n coefficients = result.valueOf();\r\n } catch (err) {\r\n for (let index = 0; index < xData.length; index++) {\r\n coefficients.push([0]);\r\n }\r\n // console.log('无法解决该线性系统');\r\n }\r\n // const result = math.lusolve(ATA, ATb);\r\n // const coefficients = result.valueOf();\r\n\r\n function funequation(x) {\r\n let y = 0;\r\n coefficients.forEach((item, index) => {\r\n //fx^0\r\n //fx^0+ax^1\r\n //fx^0+ax^1+bx^2\r\n //fx^0+ax^1+bx^2+cx^3\r\n //fx^0+x^1+x^2+x^3+x^4\r\n y += item * x ** index;\r\n });\r\n return y;\r\n }\r\n\r\n // console.log('计算公式:', coefficients);\r\n\r\n function lagrangeInterpolation(points, x) {\r\n let result = 0;\r\n for (let i = 0; i < points.length; i++) {\r\n let term = points[i][1];\r\n let xi = points[i][0];\r\n for (let j = 0; j < points.length; j++) {\r\n if (j !== i) {\r\n let xj = points[j][0];\r\n term *= (x - xj) / (xi - xj);\r\n }\r\n }\r\n result += term;\r\n }\r\n return result;\r\n }\r\n // x=[3.5, 4, 4.5, 5, 5.5,6 ],y= [2.262, 2.321, 2.319, 2.292, 2.285, 2.28]\r\n\r\n let arrX = [];\r\n let arrY = [];\r\n for (let i = xMin; i <= xMax; i += 0.01) {\r\n let temp = Number(EChartsUtilsComm.getRound(i, 0.01));\r\n //重新设置i,防止i丢失精度\r\n i = Number(temp);\r\n //arrY.push(lagrangeInterpolation(points, temp));\r\n arrY.push(funequation(temp));\r\n arrX.push(temp);\r\n }\r\n let max = Math.max(...arrY);\r\n\r\n // 找到最大值的索引\r\n let maxIndex = arrY.findIndex((value) => value === max);\r\n\r\n // console.log('最大点数据:', arrX[maxIndex], max);\r\n // console.log(chartExtJson);\r\n\r\n //默认输出精度\r\n let outJdZjhsl = 0.01,\r\n outJdZdgmd = 0.001;\r\n\r\n //顶点数据\r\n let outValZjhsl = 0,\r\n outValZdgmd = 0;\r\n\r\n //设置Sheet单元格的值(最佳含水率和最大干密度)\r\n if (chartExtJson != null) {\r\n // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);\r\n\r\n if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {\r\n outJdZjhsl = chartExtJson.jsZjhslJd;\r\n }\r\n if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {\r\n outJdZdgmd = chartExtJson.jsZdgmdJd;\r\n }\r\n\r\n if (arrX[maxIndex] == 0 && max == 0) {\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');\r\n } else {\r\n outValZjhsl = EChartsUtilsComm.getRound(arrX[maxIndex], outJdZjhsl);\r\n outValZdgmd = EChartsUtilsComm.getRound(max, outJdZdgmd);\r\n\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);\r\n }\r\n }\r\n\r\n arrX.forEach((item, index) => {\r\n if (xData.includes(item)) {\r\n seriesData.push({ value: [item, arrY[index]] });\r\n } else {\r\n seriesData.push({\r\n value: [item, arrY[index]],\r\n symbol: 'none',\r\n });\r\n }\r\n });\r\n\r\n //xData.forEach((item, index) => {\r\n //seriesData.push([item, yData[index]]);\r\n //});\r\n\r\n //计算峰值----目前没有公式 值写死的\r\n const peakvalue = [arrX[maxIndex], Number(EChartsUtilsComm.getRound(max, outJdZdgmd))],\r\n coordX = [peakvalue[0], yAxisMin],\r\n coordY = [xAxisMin, peakvalue[1]];\r\n\r\n let markPointObj = {\r\n data: [\r\n {\r\n xAxis: EChartsUtilsComm.getRound(peakvalue[0], outJdZjhsl),\r\n yAxis: EChartsUtilsComm.getRound(peakvalue[1], outJdZdgmd),\r\n symbolOffset: [0, 15],\r\n symbol: 'circle',\r\n symbolSize: 6,\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n // 自定义标签内容\r\n if (Number(data.data.xAxis) == 0 && Number(data.data.yAxis) == 0) {\r\n return '';\r\n } else {\r\n return '( ' + data.data.xAxis + ',' + data.data.yAxis + ')';\r\n }\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ],\r\n },\r\n markLineObj = {\r\n symbol: ['none', 'none'], //去掉箭头\r\n itemStyle: {\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n width: 2,\r\n },\r\n },\r\n data: [\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333', //X轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n [\r\n {\r\n coord: coordY,\r\n lineStyle: {\r\n color: '#333', //y轴\r\n type: 'dashed',\r\n },\r\n },\r\n {\r\n coord: peakvalue,\r\n },\r\n ],\r\n ],\r\n };\r\n\r\n //如果界面设置了校正最佳含水率和最大干密度,则显示界面中的顶点坐标(此时就不显示辅助线了)\r\n if (chartExtJson.jsIsJz && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZjhsl) && /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(cellValJzZdgmd)) {\r\n markLineObj = null;\r\n markPointObj.data[0].label = null;\r\n markPointObj.data[0].symbolOffset = null;\r\n markPointObj.data[0].itemStyle.color = '#F56C6C';\r\n markPointObj.data[0].xAxis = cellValJzZjhsl;\r\n markPointObj.data[0].yAxis = cellValJzZdgmd;\r\n markLineObj = null;\r\n }\r\n\r\n let seriesDataObj = {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[isTwoLineData ? 1 : 0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: isTwoLineData ? 'dotted' : 'solid',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[isTwoLineData ? 1 : 0].lineColor,\r\n },\r\n data: seriesData,\r\n markPoint: isShowMarkPoint ? markPointObj : null,\r\n markLine: isShowMarkLine ? markLineObj : null,\r\n };\r\n\r\n return {\r\n xAxisMin: xAxisMin,\r\n xAxisMax: xAxisMax,\r\n yAxisMin: yAxisMin,\r\n yAxisMax: yAxisMax,\r\n xData: xData,\r\n seriesDataObj: seriesDataObj,\r\n maxPointData: [arrX[maxIndex], max],\r\n };\r\n };\r\n\r\n let xAxisMin = 0,\r\n xAxisMax = 0,\r\n yAxisMin = 0,\r\n yAxisMax = 0,\r\n xData = [],\r\n seriesData = [],\r\n maxPointDataX = 0,\r\n maxPointDataY = 0;\r\n\r\n let lineObj1 = lineFunc(xDataSource1, yDataSource1, !isTwoLine, !isTwoLine, false),\r\n lineObj2;\r\n if (isTwoLine) {\r\n lineObj2 = lineFunc(xDataSource2, yDataSource2, false, false, true);\r\n }\r\n\r\n //此处的作用是,有可能x和y轴的数据都为空,造成lineObj1为undefined,避免报错\r\n if (lineObj1 == undefined || lineObj1 == null) {\r\n return;\r\n }\r\n\r\n //一条线的时候\r\n if (!isTwoLine) {\r\n xAxisMin = lineObj1.xAxisMin;\r\n xAxisMax = lineObj1.xAxisMax;\r\n yAxisMin = lineObj1.yAxisMin;\r\n yAxisMax = lineObj1.yAxisMax;\r\n xData = lineObj1.xData;\r\n seriesData.push(lineObj1.seriesDataObj);\r\n }\r\n //2条线的时候\r\n else {\r\n if (lineObj2 == undefined || lineObj2 == null) {\r\n return;\r\n }\r\n\r\n xAxisMax = lineObj1.xAxisMax;\r\n if (lineObj2.xAxisMax > xAxisMax) {\r\n xAxisMax = lineObj2.xAxisMax;\r\n }\r\n xAxisMin = lineObj1.xAxisMin;\r\n if (lineObj2.xAxisMin < xAxisMin) {\r\n xAxisMin = lineObj2.xAxisMin;\r\n }\r\n yAxisMax = lineObj1.yAxisMax;\r\n if (lineObj2.yAxisMax > yAxisMax) {\r\n yAxisMax = lineObj2.yAxisMax;\r\n }\r\n yAxisMin = lineObj1.yAxisMin;\r\n if (lineObj2.yAxisMin < yAxisMin) {\r\n yAxisMin = lineObj2.yAxisMin;\r\n }\r\n\r\n lineObj1.xData.forEach((item) => {\r\n xData.push(item);\r\n });\r\n lineObj2.xData.forEach((item) => {\r\n xData.push(item);\r\n });\r\n\r\n seriesData.push(lineObj1.seriesDataObj);\r\n seriesData.push(lineObj2.seriesDataObj);\r\n\r\n maxPointDataX = (lineObj1.maxPointData[0] + lineObj2.maxPointData[0]) / 2;\r\n maxPointDataY = (lineObj1.maxPointData[1] + lineObj2.maxPointData[1]) / 2;\r\n\r\n // console.log(\r\n // \t\"两条线最大点的平均值:\",\r\n // \tmaxPointDataX,\r\n // \tmaxPointDataY\r\n // );\r\n\r\n //默认输出精度\r\n let outJdZjhsl = 0.01,\r\n outJdZdgmd = 0.001;\r\n\r\n //顶点数据\r\n let outValZjhsl = 0,\r\n outValZdgmd = 0;\r\n\r\n //设置Sheet单元格的值(最佳含水率和最大干密度)\r\n if (chartExtJson != null) {\r\n // console.log(4444, chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, arrX[maxIndex]);\r\n\r\n if (chartExtJson.jsZjhslJd != null && chartExtJson.jsZjhslJd != undefined) {\r\n outJdZjhsl = chartExtJson.jsZjhslJd;\r\n }\r\n if (chartExtJson.jsZdgmdJd != null && chartExtJson.jsZdgmdJd != undefined) {\r\n outJdZdgmd = chartExtJson.jsZdgmdJd;\r\n }\r\n\r\n if (maxPointDataX == 0 && maxPointDataY == 0) {\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, '/');\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, '/');\r\n } else {\r\n outValZjhsl = EChartsUtilsComm.getRound(maxPointDataX, outJdZjhsl);\r\n outValZdgmd = EChartsUtilsComm.getRound(maxPointDataY, outJdZdgmd);\r\n\r\n sheet.setValue(chartExtJson.jsZjhsl.row, chartExtJson.jsZjhsl.col, outValZjhsl);\r\n sheet.setValue(chartExtJson.jsZdgmd.row, chartExtJson.jsZdgmd.col, outValZdgmd);\r\n }\r\n }\r\n }\r\n\r\n //判断数据是否为/,‘’,null,undefined\r\n let yValIsAllNull = false;\r\n seriesData.forEach((item) => {\r\n yValIsAllNull = item.data[0].value.every((ele) => {\r\n return ele == 0;\r\n });\r\n });\r\n if (yValIsAllNull) {\r\n xAxisMin = null;\r\n xAxisMax = null;\r\n yAxisMin = null;\r\n yAxisMax = null;\r\n seriesData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n //console.log(datas,\" datas\")\r\n return datas && datas.length > 0\r\n ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + Number(EChartsUtilsComm.getRound(datas[0].value[1], 0.001))\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n max: xAxisMax,\r\n min: xAxisMin,\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n max: yAxisMax,\r\n min: yAxisMin,\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 40 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: seriesData,\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 筛分\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart50: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = '', //config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName;\r\n\r\n // x轴原始数据、y轴原始数据、y轴原始数据(上限)、y轴原始数据(下限)\r\n const xDataSourceOld = xDataArr[0],\r\n yDataSourceOld = yDataArr[0],\r\n yDataSourceSxOld = yDataArr[1],\r\n yDataSourceXxOld = yDataArr[2];\r\n const allData: any[] = [];\r\n xDataSourceOld.forEach((item, index) => {\r\n allData.push({\r\n x: item,\r\n y: yDataSourceOld[index],\r\n ySx: yDataSourceSxOld[index],\r\n yXx: yDataSourceXxOld[index],\r\n });\r\n });\r\n allData.sort(function (a, b) {\r\n return a.x - b.x;\r\n });\r\n\r\n const xDataSource: any[] = [],\r\n yDataSource: any[] = [],\r\n yDataSourceSx: any[] = [],\r\n yDataSourceXx: any[] = [];\r\n\r\n // 记录上限或下限中值为null的个数\r\n let sxValNullCount = 0;\r\n yDataSourceSxOld.forEach((item, index) => {\r\n if (item == null || item == '/') {\r\n sxValNullCount++;\r\n }\r\n });\r\n\r\n // 如果上限或下限值中的所有值都为null,则只展示筛分曲线的折线\r\n if (sxValNullCount == yDataSourceSxOld.length) {\r\n allData.forEach((item, index) => {\r\n xDataSource.push(item.x);\r\n yDataSource.push(item.y);\r\n yDataSourceSx.push(item.ySx);\r\n yDataSourceXx.push(item.yXx);\r\n });\r\n } else {\r\n // 只获取上限或下限中值不为null的点\r\n allData.forEach((item, index) => {\r\n if (item.ySx != null && item.ySx != '/' && item.yXx != null && item.yXx != '/') {\r\n xDataSource.push(item.x);\r\n yDataSource.push(item.y);\r\n yDataSourceSx.push(item.ySx);\r\n yDataSourceXx.push(item.yXx);\r\n }\r\n });\r\n }\r\n\r\n // x轴需要的数据(x轴原始数据的0.45次方,并修约0.01)、x轴需要的上限数据(x轴原始数据的0.45次方,并修约0.01)、x轴需要的下限数据(x轴原始数据的0.45次方,并修约0.01)、标记线需要的数据\r\n let xData: any[] = [],\r\n xDataSx: any[] = [],\r\n xDataXx: any[] = [],\r\n markLineData: any[] = [];\r\n\r\n // x和y轴的字体大小\r\n const xyFontSize = 10;\r\n\r\n // 组装数据\r\n xDataSource.forEach((item, index) => {\r\n // 得到x轴原始数据的0.45次方值,并修约0.001\r\n const val045 = Number(EChartsUtilsComm.getRound(item ** 0.45, 0.001));\r\n\r\n xData.push([val045, yDataSource[index]]);\r\n markLineData.push({\r\n name: item + '',\r\n xAxis: val045,\r\n label: {\r\n show: xDataSource.length >= 6 && index % 2 != 0 && index < 6 ? false : true, // 控制x轴的名称某些点是否显示,避免重叠的情况\r\n fontSize: xyFontSize,\r\n },\r\n });\r\n\r\n xDataSx.push([val045, yDataSourceSx[index]]);\r\n xDataXx.push([val045, yDataSourceXx[index]]);\r\n });\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, data) => {\r\n const name = type == 1 ? '筛分曲线' : type == 2 ? '上限' : '下限';\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //type == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n let obj = {\r\n name: name,\r\n type: 'line',\r\n smooth: true, // 平滑的线条\r\n // 设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol,\r\n symbolSize: 5,\r\n z: 10, // 控制曲线的浮动层级,避免在markLine下方被遮住\r\n // 线条的颜色\r\n lineStyle: {\r\n color: color,\r\n // 线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n // 线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n connectNulls: true, // 是否连接空数据\r\n markLine: {\r\n symbol: '', // 取消箭头\r\n silent: true, // 取消鼠标hover事件\r\n label: {\r\n // 标线的文本,模拟x轴显示的内容\r\n position: 'start', // 改变label位置\r\n //rotate: 45, // 设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)\r\n // backgroundColor:'#fff'\r\n // color:'#f00',// 文字颜色\r\n formatter: (data) => {\r\n return data.name;\r\n },\r\n },\r\n lineStyle: { color: '#e0e6f1', type: 'solid' },\r\n data: markLineData,\r\n },\r\n };\r\n\r\n return obj;\r\n };\r\n\r\n // 验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (\r\n yDataSourceSxOld.some((item) => item != null && item != undefined && item != '/') ||\r\n yDataSourceXxOld.some((item) => item != null && item != undefined && item != '/')\r\n ) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,// 是否显示外边框线\r\n // borderColor: '#f00',// 外边框线颜色\r\n top: 20,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n // 提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n if (datas && datas[0].data.length > 1) {\r\n let xObj = markLineData.filter((item) => item.xAxis == datas[0].data[0]);\r\n\r\n return datas[0].seriesName + '(' + xObj[0].name + ')' + ':' + datas[0].data[1];\r\n } else {\r\n return datas[0].data;\r\n }\r\n },\r\n },\r\n // 顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 5,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n // 图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n left: 'center',\r\n data: ['筛分曲线', '上限', '下限'],\r\n selected: {\r\n 筛分曲线: true, // 显示\r\n 上限: true, // 显示\r\n 下限: true, // 显示\r\n },\r\n selectedMode: 'multiple', // 用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n axisTick: { show: false }, // 隐藏刻度线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n // 网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine\r\n splitLine: {\r\n show: false, // 隐藏分割线\r\n },\r\n min: xData.length > 0 ? (xData[0][0] > 0.2 ? xData[0][0] - 0.2 : 0) : null, //控制x轴的最小值\r\n max: xData.length > 0 ? xData[xData.length - 1][0] + 0.1 : null,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', // '#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n splitNumber: 10, // 设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLabel: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, xData), getLineObj(2, xDataSx), getLineObj(3, xDataXx)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 界限含水率\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart70: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //此图形排除了图形数据不正确的情况,如果数据不对,则直接返回{}\r\n if (\r\n xDataArr[0].some((item) => item == null || item == '' || item == undefined) ||\r\n yDataArr[0].some((item) => item == null || item == '' || item == undefined)\r\n ) {\r\n return {};\r\n }\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [22.9, 32.4, 36.9],\r\n yData = yDataArr[0], // [2.2, 11.6, 19.8],\r\n ztzl = 100, //锥体质量(g),100或76\r\n cllx = '砂类土', //材料类型,砂类土或细粒土\r\n logx = [], // c,b,a\r\n logy = [];\r\n\r\n //获取锥体质量和材料类型\r\n if (chartExtJson != null) {\r\n let curZtzl = sheet.getValue(chartExtJson.jxhslZtzl.row, chartExtJson.jxhslZtzl.col),\r\n curCllx = sheet.getValue(chartExtJson.jxhslCllx.row, chartExtJson.jxhslCllx.col);\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curZtzl)) {\r\n curZtzl = Number(curZtzl);\r\n if (curZtzl == 100 || curZtzl == 76) {\r\n ztzl = curZtzl;\r\n }\r\n }\r\n if (curCllx == '砂类土' || curCllx == '细粒土') {\r\n cllx = curCllx;\r\n }\r\n }\r\n\r\n // console.log(ztzl, cllx);\r\n\r\n //先求对数\r\n for (const item1 of xData) {\r\n logx.push(Math.log(item1));\r\n }\r\n for (const item2 of yData) {\r\n logy.push(Math.log(item2));\r\n }\r\n //求ab / ac 斜率 公式k=y2-y1 / x2-x1\r\n let abk = (logy[2] - logy[1]) / (logx[2] - logx[1]);\r\n let ack = (logy[2] - logy[0]) / (logx[2] - logx[0]);\r\n\r\n const xMax = Math.max.apply(Math, xData),\r\n xMin = Math.min.apply(Math, xData),\r\n xAxisMax = xMax + 1,\r\n xAxisMin = xMin - 0.3,\r\n yMax = Math.max.apply(Math, yData),\r\n yMin = Math.min.apply(Math, yData),\r\n yAxisMax = yMax + 1,\r\n yAxisMin = yMin - 2,\r\n dropName = ['C', 'B', 'A'],\r\n seriesData = [];\r\n\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index], dropName[index]]);\r\n });\r\n\r\n //求ab / ac 延长线方法\r\n function getYOnLine(point1, point2, point3X) {\r\n const logX1 = Math.log(point1[0]);\r\n const logY1 = Math.log(point1[1]);\r\n const logX2 = Math.log(point2[0]);\r\n const logY2 = Math.log(point2[1]);\r\n const slope = (logY2 - logY1) / (logX2 - logX1);\r\n const logPoint3X = Math.log(point3X);\r\n const logY = logY1 + slope * (logPoint3X - logX1);\r\n return Math.exp(logY);\r\n }\r\n\r\n let point3X = 20;\r\n let abd3 = getYOnLine([xData[2], yData[2]], [xData[1], yData[1]], point3X);\r\n let zero_ab = [20, abd3];\r\n let acd3 = getYOnLine([xData[2], yData[2]], [xData[0], yData[0]], point3X);\r\n let zero_ac = [20, acd3];\r\n\r\n // console.log(zero_ab, 'zero_ab');\r\n // console.log(zero_ac, 'zero_ac');\r\n\r\n //第一次计算D-y值,代入A点的X坐标\r\n function HpCoordinates(wl) {\r\n let hp;\r\n if (cllx == '砂类土') {\r\n //砂类土\r\n hp = 29.6 - 1.22 * wl + 0.017 * wl * wl - 0.0000744 * wl * wl * wl;\r\n } else {\r\n //细粒土\r\n hp = wl / (0.524 * wl - 7.606);\r\n }\r\n return hp;\r\n }\r\n\r\n let coordX = [];\r\n let coordY = [];\r\n let point_hp = [];\r\n\r\n let Dy = HpCoordinates(xData[2]);\r\n let Dylog = Math.log(Dy);\r\n let hp0_xab = (abk * logx[2] - (logy[2] - Dylog)) / abk;\r\n let hp0_xac = (ack * logx[2] - (logy[2] - Dylog)) / ack;\r\n if (hp0_xab - hp0_xac >= 2) {\r\n //return '超差!';\r\n }\r\n let hp0_xcenter = Math.exp((hp0_xab + hp0_xac) / 2);\r\n let Dxlog = Math.log(hp0_xcenter);\r\n let adk = (logy[2] - Dylog) / (logx[2] - Dxlog); //AD 斜率\r\n\r\n //输出的hp、wl和wp\r\n let scHp, scWl, scWp;\r\n\r\n //判断锥数\r\n if (ztzl == 76) {\r\n //计算wl ad直线上y=17时,对应的x值\r\n let wly = Math.log(17);\r\n let wlx = (adk * logx[2] - (logy[2] - wly)) / adk;\r\n let wl = Math.exp(wlx);\r\n\r\n //计算WP:ad直线上y=2时,对应的x值\r\n let wpy = Math.log(2);\r\n let wpx = (adk * logx[2] - (logy[2] - wpy)) / adk;\r\n let wp = Math.exp(wpx);\r\n\r\n point_hp = [hp0_xcenter, Dy];\r\n coordX = [hp0_xcenter, yAxisMin];\r\n coordY = [xAxisMin, Dy];\r\n seriesData.push([hp0_xcenter, Dy, 'Hp']);\r\n\r\n scHp = Dy;\r\n scWl = wl;\r\n scWp = wp;\r\n // console.log('输出:', wp, wl, Dy);\r\n } else if (ztzl == 100) {\r\n //计算wl的值----先求AD斜率再代入y=20,求X (X即Wl的值)\r\n let wly = Math.log(20);\r\n let wlx = (adk * logx[2] - (logy[2] - wly)) / adk;\r\n let wl = Math.exp(wlx);\r\n\r\n //第二次计算hp值\r\n let hpy2 = HpCoordinates(wl);\r\n let hpylog2 = Math.log(hpy2);\r\n let hp0_xab2 = (abk * logx[2] - (logy[2] - hpylog2)) / abk;\r\n let hp0_xac2 = (ack * logx[2] - (logy[2] - hpylog2)) / ack;\r\n\r\n let hp0_xcenter2 = Math.exp((hp0_xab2 + hp0_xac2) / 2);\r\n let wp = hp0_xcenter2;\r\n\r\n point_hp = [hp0_xcenter2, hpy2];\r\n\r\n coordX = [hp0_xcenter2, yAxisMin];\r\n coordY = [xAxisMin, hpy2];\r\n seriesData.push([hp0_xcenter2, hpy2, 'Hp']);\r\n\r\n scHp = hpy2;\r\n scWl = wl;\r\n scWp = wp;\r\n // console.log('输出:', wp, wl, hpy2);\r\n }\r\n\r\n //判断是否是一个数字\r\n if (isNaN(scHp) || isNaN(scWl) || isNaN(scWp)) {\r\n scHp = 0;\r\n scWl = 0;\r\n scWp = 0;\r\n }\r\n\r\n //设置Sheet单元格的值(输出hp、wl和wp)\r\n if (chartExtJson != null) {\r\n //默认输出精度\r\n let outJdHp = 0.01,\r\n outJdWl = 0.01,\r\n outJdWp = 0.01;\r\n if (chartExtJson.jxhslScHpJd != null && chartExtJson.jxhslScHpJd != undefined) {\r\n outJdHp = chartExtJson.jxhslScHpJd;\r\n }\r\n if (chartExtJson.jxhslScWlJd != null && chartExtJson.jxhslScWlJd != undefined) {\r\n outJdWl = chartExtJson.jxhslScWlJd;\r\n }\r\n if (chartExtJson.jxhslScWpJd != null && chartExtJson.jxhslScWpJd != undefined) {\r\n outJdWp = chartExtJson.jxhslScWpJd;\r\n }\r\n\r\n if (chartExtJson.jxhslScHp != null && chartExtJson.jxhslScHp != undefined) {\r\n if (scHp == 0) {\r\n sheet.setValue(chartExtJson.jxhslScHp.row, chartExtJson.jxhslScHp.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScHp.row, chartExtJson.jxhslScHp.col, EChartsUtilsComm.getRound(scHp, outJdHp));\r\n }\r\n }\r\n if (chartExtJson.jxhslScWl != null && chartExtJson.jxhslScWl != undefined) {\r\n if (scWl == 0) {\r\n sheet.setValue(chartExtJson.jxhslScWl.row, chartExtJson.jxhslScWl.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScWl.row, chartExtJson.jxhslScWl.col, EChartsUtilsComm.getRound(scWl, outJdWl));\r\n }\r\n }\r\n if (chartExtJson.jxhslScWp != null && chartExtJson.jxhslScWp != undefined) {\r\n if (scWp == 0) {\r\n sheet.setValue(chartExtJson.jxhslScWp.row, chartExtJson.jxhslScWp.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.jxhslScWp.row, chartExtJson.jxhslScWp.col, EChartsUtilsComm.getRound(scWp, outJdWp));\r\n }\r\n }\r\n }\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (\r\n yData.some((item) => item != null && item != undefined && item != '/') ||\r\n yData.some((item) => item != null && item != undefined && item != '/')\r\n ) {\r\n yValIsAllNull = false;\r\n }\r\n let option = {\r\n grid: {\r\n top: 20,\r\n left: !yValIsAllNull ? 50 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log',\r\n min: xAxisMin,\r\n max: xAxisMax,\r\n interval: 0,\r\n axisTick: {\r\n show: false,\r\n alignWithLabel: true,\r\n },\r\n splitLine: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n show: false,\r\n },\r\n },\r\n yAxis: {\r\n type: 'log',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n min: yAxisMin,\r\n max: yAxisMax,\r\n interval: 0,\r\n axisTick: {\r\n show: false,\r\n alignWithLabel: true,\r\n },\r\n splitLine: {\r\n show: false,\r\n },\r\n axisLabel: {\r\n show: false,\r\n },\r\n },\r\n series: [\r\n {\r\n name: legendName,\r\n data: seriesData,\r\n type: 'scatter',\r\n symbol: 'circle',\r\n smooth: false,\r\n symbolSize: 6,\r\n label: {\r\n show: true,\r\n formatter: function (param) {\r\n return param.data[2];\r\n },\r\n position: 'right',\r\n minMargin: 2,\r\n },\r\n markLine: {\r\n symbol: ['none', 'none'],\r\n silent: true,\r\n label: {\r\n show: true,\r\n position: 'start',\r\n color: '#000000',\r\n },\r\n lineStyle: {\r\n type: 'solid',\r\n color: '#333',\r\n },\r\n data: [\r\n { xAxis: seriesData[0][0] },\r\n { xAxis: seriesData[1][0] },\r\n { xAxis: seriesData[2][0] },\r\n { yAxis: seriesData[0][1] },\r\n { yAxis: seriesData[1][1] },\r\n { yAxis: seriesData[2][1] },\r\n [\r\n {\r\n coord: coordX,\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed',\r\n },\r\n },\r\n { coord: point_hp }, //Hp---x\r\n ],\r\n [\r\n {\r\n coord: coordY,\r\n lineStyle: {\r\n color: '#333',\r\n type: 'dashed', //dashed dotted\r\n },\r\n },\r\n { coord: point_hp }, //Hp----y\r\n ],\r\n ],\r\n },\r\n },\r\n {\r\n //a-b连线\r\n type: 'line',\r\n data: [\r\n [xData[2], yData[2]],\r\n [xData[1], yData[1]],\r\n ],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-b 延长线\r\n type: 'line',\r\n data: [\r\n [xData[1], yData[1]],\r\n [zero_ab[0], zero_ab[1]],\r\n ],\r\n lineStyle: {\r\n color: '#000000',\r\n type: 'dashed',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-c连线\r\n type: 'line',\r\n data: [\r\n [xData[2], yData[2]],\r\n [xData[0], yData[0]],\r\n ],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-c 延长线\r\n type: 'line',\r\n data: [\r\n [xData[0], yData[0]],\r\n [zero_ac[0], zero_ac[1]],\r\n ],\r\n lineStyle: {\r\n color: '#000000',\r\n type: 'dashed',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n {\r\n //a-Hp连线\r\n type: 'line',\r\n data: [[xData[2], yData[2]], point_hp],\r\n lineStyle: {\r\n color: '#0000FF',\r\n type: 'solid',\r\n width: 1,\r\n },\r\n symbol: 'none',\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 水泥、石灰标准曲线\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart90: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n //y轴原始数据\r\n let yDataSource = yDataArr[0]; // [1.2, 5.6, 10.8, 16, 20.8];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x轴的数据\r\n let xData = xDataArr[0]; // [0, 2, 4, 6, 8];\r\n\r\n //重新处理x轴和y轴的数据,排除x轴后面为0的数据(因为有可能在单元格中,最后一个单元格的值可能没有填,这时候默认传的是0)\r\n let xDataCl = [],\r\n yDataSourceCl = [];\r\n for (let i = 0; i < xData.length; i++) {\r\n if (xData[i] != '/' && (i == 0 || (i > 0 && xData[i] != 0))) {\r\n xDataCl.push(xData[i]);\r\n yDataSourceCl.push(yDataSource[i]);\r\n } else if (i > 0 && xData[i] == 0) {\r\n break;\r\n }\r\n }\r\n xData = xDataCl;\r\n yDataSource = yDataSourceCl;\r\n\r\n //series的data数据、series的markPoint的data数据、series的markLine的data数据\r\n let seriesData = [],\r\n markPointData = [],\r\n markLineData = [...xData];\r\n\r\n //此目的是显示更多的x轴数据\r\n //假设x轴原始数据为[0, 2, 4, 6, 8],在这个数组中没有1、3、5等数据,此时就可以通过下面的方式进行增加\r\n /*\r\n\t\tfor (let i = 0; i < 20; i++) {\r\n\t\t\tif (!markLineData.some((item) => item == i)) {\r\n\t\t\t\tmarkLineData.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\t\t*/\r\n\r\n //获取y轴趋势公式对象\r\n const gsS = EChartsUtilsComm.calcTrend(xData, yDataSource, xData[0]);\r\n\r\n //输出方程表达式\r\n if (chartExtJson != null) {\r\n if (chartExtJson.jxhslSnShScfc != null && chartExtJson.jxhslSnShScfc != undefined) {\r\n // console.log('输出公式:',`Y=${getRound(gsS.xl,0.0001)}X+${getRound(gsS.jj,0.0001)}`)\r\n if (gsS.xl == '' || gsS.jj == '') {\r\n sheet.setValue(chartExtJson.jxhslSnShScfc.row, chartExtJson.jxhslSnShScfc.col, '/');\r\n } else {\r\n sheet.setValue(\r\n chartExtJson.jxhslSnShScfc.row,\r\n chartExtJson.jxhslSnShScfc.col,\r\n `Y=${EChartsUtilsComm.getRound(gsS.xl, 0.0001)}X+${EChartsUtilsComm.getRound(gsS.jj, 0.0001)}`\r\n );\r\n }\r\n }\r\n }\r\n\r\n let yDataCopy = [];\r\n //获取y轴原始数据对应的趋势数据\r\n xData.forEach((item, index) => {\r\n let curYData = Number(EChartsUtilsComm.getRound(eval(gsS.gs.replace('x', item + '')), 0.01));\r\n if (isNaN(curYData)) {\r\n curYData = 0;\r\n }\r\n\r\n seriesData.push([item, curYData]);\r\n yDataCopy.push(curYData);\r\n markPointData.push({\r\n xAxis: item,\r\n yAxis: yDataSource[index],\r\n symbol: 'circle',\r\n symbolSize: 6,\r\n });\r\n\r\n //console.log(curYData, \"curYData\")\r\n });\r\n\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == 0 || item[1] == null || item[1] == undefined) {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yDataCopy.some((item) => item != 0 || item[1] == null || item[1] == undefined)) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 22,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].value[0] + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n opacity: 0,\r\n },\r\n data: seriesData,\r\n markPoint: {\r\n data: markPointData,\r\n },\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: markLineData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 延迟时间-强度曲线\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart110: (\r\n config: EChartsUtilsConfigModel,\r\n xDataArr: Array<Array<any>>,\r\n yDataArr: Array<Array<any>>,\r\n xDataArrSource: Array<Array<any>>,\r\n yDataArrSource: Array<Array<any>>\r\n ) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n const xDataSource = xDataArrSource[0]; // ['0.0','1.0','2.0','3.0','4.0','5.0'];\r\n\r\n let xData = [];\r\n xDataSource.forEach((item, index) => {\r\n if (item == '/') {\r\n xData.push(item);\r\n } else {\r\n xData.push(Number(item));\r\n }\r\n });\r\n\r\n //y轴的数据\r\n let yData = yDataArr[0]; // [4.4,4.3,4.3,4.2,4.1,3.7];\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n if (item != '/' && item != undefined && item != null) {\r\n seriesData.push([item, yData[index]]);\r\n }\r\n });\r\n\r\n let yValIsAllNull = false;\r\n if (seriesData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 25,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category', //设置x轴为对数坐标轴\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n let curXName = '';\r\n for (let i = 0; i < xData.length; i++) {\r\n if (xData[i] == value) {\r\n curXName = xDataSource[i];\r\n if (curXName == '/') {\r\n curXName = '';\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return curXName;\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n return option;\r\n },\r\n /**\r\n * 颗粒组成(筛分法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart130: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n // console.log(config);\r\n // console.log(xDataArr);\r\n // console.log(yDataArr);\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [60, 40, 20, 10, 5, 2, 1, 0.5, 0.25, 0.075],\r\n yData = yDataArr[0]; // [100.0, 100.0, 88.3, 69.3, 46.7, 27.0, 19.7, 5.6, 0.5, 0.3];\r\n let xMin = 0.01,\r\n xMax = 200;\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item == '筛底' ? 0 : item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n if (yValIsAllNull) {\r\n xMin = null;\r\n xMax = null;\r\n }\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log', //设置x轴为对数坐标轴\r\n logBase: 10, //可以设置对数轴的底数,默认为10\r\n inverse: true,\r\n min: xMin,\r\n max: xMax,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 回弹模量 (承载板法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart150: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [25, 50, 100, 150, 200],\r\n yData = yDataArr[0]; // [0.72, 1.07, 1.87, 2.63, 3.48];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 55,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 10,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 18,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n position: 'top', //设置x轴在顶部显示\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: xData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 土的回弹模量 (强度仪法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart170: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [25, 50, 100, 150, 200],\r\n yData = yDataArr[0]; // [0.72, 1.07, 1.87, 2.63, 3.48];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item[1] == null || item[1] == undefined || item[1] == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 55,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 10,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 18,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n position: 'top', //设置x轴在顶部显示\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: xData.map((val) => {\r\n return {\r\n xAxis: val,\r\n };\r\n }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 28d抗压强度与胶水比关系\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart190: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = '', // config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [2.32, 2.5, 2.7],\r\n yData = yDataArr[0]; // [42.5, 47.1, 49.1];\r\n\r\n //处理数据\r\n xData = xData.filter((item) => item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined));\r\n yData = yData.filter((item) => item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined));\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item == null || item == undefined || item == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 混凝土拌合物含气量\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart210: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n //x和y轴的原始数据\r\n let xDataSource = xDataArr[0], // [0.093, 0.081, 0.068, 0.063, 0.057, 0.052, 0.049, 0.044, 0.041, 0.038, 0.036],\r\n yDataSource = yDataArr[0]; // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //series需要的数据\r\n const seriesData = [];\r\n\r\n for (let i = xDataSource.length - 1; i >= 0; i--) {\r\n const item = xDataSource[i];\r\n\r\n if (item != null && item != undefined && item != '/' && (item._error == null || item._error == undefined)) {\r\n seriesData.push([item, yDataSource[i]]);\r\n }\r\n }\r\n\r\n //x和y轴的字体大小\r\n const xyFontSize = 10;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xDataSource.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xDataSource.forEach((item) => {\r\n if (item == null || item == undefined || item == '/' || (item._error != null && item._error != undefined)) {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xDataSource.length) {\r\n yValIsAllNull = true;\r\n //xDataSource = [];\r\n }\r\n if (yDataSource.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n const getXline = () => {\r\n let arr = [];\r\n [0, 0.02, 0.04, 0.06, 0.08, 0.1].forEach((val) => {\r\n xDataSource.forEach((item) => {\r\n let obj: any = { xAxis: '' };\r\n\r\n if (item == '/') {\r\n obj.xAxis = '';\r\n arr.push(obj);\r\n } else {\r\n obj.xAxis = val;\r\n arr.push(obj);\r\n }\r\n });\r\n });\r\n\r\n //去重\r\n let uniqueData = arr.filter((item, index, self) => index === self.findIndex((t) => t.xAxis == item.xAxis));\r\n return nullCount == xDataSource.length ? [] : uniqueData;\r\n };\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: !yValIsAllNull && seriesData.length > 0 ? 30 : 25,\r\n right: 10,\r\n bottom: 40,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].value[0] + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n splitLine: { show: false }, // 隐藏分割线\r\n axisLabel: { show: false }, // 隐藏刻度值\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull && seriesData.length > 0 ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n axisLabel: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n markLine: {\r\n symbol: false, //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n position: 'start', //改变label位置\r\n formatter: (obj) => obj.value, //格式化显示的x轴标签内容\r\n fontSize: xyFontSize,\r\n },\r\n lineStyle: { color: '#ddd', type: 'solid' },\r\n data: getXline(),\r\n // data: [0, 0.02, 0.04, 0.06, 0.08, 0.1].map((val) => {\r\n // return {\r\n // xAxis: val,\r\n // }\r\n // }),\r\n },\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 混凝土拌合物凝结时间\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart230: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n /*\r\n\t\t\t此处需要注意的是,如果单元格A3=A1-A2,就需要将A3=TEXT(A1-A2, \"h\"\":\"\"m\")\r\n\r\n\t\t\tExcel中默认时间相减得到的是天为单位,因此此处使用了TEXT函数来格式化相减的时间差格式\r\n\r\n\t\t\t=TEXT(A1-A2, \"h\"\":\"\"m\")\r\n\t\t\t=INT(A1-A2) & \"天\" & TEXT(A1-A2, \"h\"\"小时\"\"m\"\"分\"\"\")\r\n\r\n\t\t*/\r\n\r\n //折线的数量\r\n let lineCount = xDataArr.length;\r\n\r\n //原始数据\r\n let xDataSource1 = [], // ['6:20', '6:50', '7:20', '7:50', '7:56', '8:26', '8:56', '9:26', '9:56', '10:11'],\r\n xDataSource2 = [], // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n xDataSource3 = [], // ['6:10', '6:40', '7:10', '7:40', '8:03', '8:13', '8:42', '9:12', '9:40', '10:12'],\r\n yDataSource1 = [], // [0.8, 1.2, 2.2, 3.4, 3.6, 7.8, 11.8, 16.6, 24.6, 28.2],\r\n yDataSource2 = [], // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n yDataSource3 = []; // [0.7, 1, 1.9, 3, 3.3, 3.5, 8.2, 13.8, 20.2, 28.2];\r\n\r\n //折线1\r\n xDataSource1 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[0]); // ['6:20', '6:50', '7:20', '7:50', '7:56', '8:26', '8:56', '9:26', '9:56', '10:11'],\r\n yDataSource1 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[0]); // [0.8, 1.2, 2.2, 3.4, 3.6, 7.8, 11.8, 16.6, 24.6, 28.2],\r\n\r\n //折线2\r\n if (lineCount == 2) {\r\n xDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[1]); // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n yDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[1]); // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n }\r\n //折线3\r\n if (lineCount == 3) {\r\n xDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[1]); // ['6:27', '6:57', '7:32', '8:02', '8:05', '8:35', '9:05', '9:35', '10:05', '10:22'],\r\n yDataSource2 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[1]); // [0.8, 1.3, 2.4, 3.4, 3.5, 7.7, 12.2, 16.7, 25, 28.2],\r\n xDataSource3 = EChartsUtilsComm.filterNullEmptyErrArray(xDataArr[2]); // ['6:10', '6:40', '7:10', '7:40', '8:03', '8:13', '8:42', '9:12', '9:40', '10:12'],\r\n yDataSource3 = EChartsUtilsComm.filterNullEmptyErrArray(yDataArr[2]); // [0.7, 1, 1.9, 3, 3.3, 3.5, 8.2, 13.8, 20.2, 28.2];\r\n }\r\n\r\n //3条线的x轴数据\r\n let xData1 = [],\r\n xData2 = [],\r\n xData3 = [];\r\n\r\n //组装数据\r\n\r\n xDataSource1.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData1.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData1.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData1.push(curItemMins);\r\n }\r\n });\r\n\r\n xDataSource2.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData2.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData2.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData2.push(curItemMins);\r\n }\r\n });\r\n\r\n xDataSource3.forEach((item, index) => {\r\n //js的时间格式\r\n if (typeof item == 'object') {\r\n xData3.push(item.getHours() * 60 + item.getMinutes());\r\n }\r\n //数字\r\n else if (typeof item == 'number') {\r\n xData3.push(item);\r\n }\r\n //文本格式\r\n else {\r\n const curArr = item.split(':');\r\n const curItemMins = Number(curArr[0]) * 60 + Number(curArr[1]);\r\n xData3.push(curItemMins);\r\n }\r\n });\r\n\r\n //x轴数据前后增加一个点,y轴数据前后也增加一个点\r\n if (xDataSource1.length > 0) {\r\n xData1.push(xData1[xData1.length - 1] + 20);\r\n xData1.unshift(xData1[0] - 20);\r\n yDataSource1.push(null);\r\n yDataSource1.unshift(null);\r\n }\r\n\r\n if (lineCount == 2) {\r\n if (xDataSource2.length > 0) {\r\n xData2.push(xData2[xData2.length - 1] + 20);\r\n xData2.unshift(xData2[0] - 20);\r\n yDataSource2.push(null);\r\n yDataSource2.unshift(null);\r\n }\r\n }\r\n if (lineCount == 3) {\r\n if (xDataSource3.length == 0) {\r\n xData2.push(xData2[xData2.length - 1] + 20);\r\n xData2.unshift(xData2[0] - 20);\r\n yDataSource2.push(null);\r\n yDataSource2.unshift(null);\r\n xData3.push(xData3[xData3.length - 1] + 20);\r\n xData3.unshift(xData3[0] - 20);\r\n yDataSource3.push(null);\r\n yDataSource3.unshift(null);\r\n }\r\n }\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName;\r\n\r\n //获取xAxis需要的数据\r\n const getxAxisObj = (type, data) => {\r\n return {\r\n type: 'category',\r\n data: data,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n show: type == 1,\r\n splitLine: {\r\n show: true,\r\n },\r\n };\r\n };\r\n\r\n let xAxisData = [getxAxisObj(1, xData1)];\r\n if (lineCount == 2) {\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n }\r\n if (lineCount == 3) {\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n }\r\n\r\n //获取series需要的数据\r\n const getLineObj = (type, data) => {\r\n const name = type == 1 ? '第一组' : type == 2 ? '第二组' : '第三组';\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color =\r\n type == 1 && lineData.length >= 1\r\n ? lineData[0].lineColor\r\n : type == 2 && lineData.length >= 2\r\n ? lineData[1].lineColor\r\n : type == 3 && lineData.length >= 3\r\n ? lineData[2].lineColor\r\n : '#000';\r\n\r\n let obj = {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n };\r\n\r\n return obj;\r\n };\r\n\r\n //series: [getLineObj(1, yDataSource1), getLineObj(2, yDataSource2), getLineObj(3, yDataSource3)],\r\n let seriesData = [getLineObj(1, yDataSource1)];\r\n if (lineCount == 2) {\r\n if (yDataSource2.length > 0) {\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n }\r\n }\r\n if (lineCount == 3) {\r\n if (yDataSource2.length > 0) {\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n }\r\n if (yDataSource3.length > 0) {\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n }\r\n }\r\n\r\n let legendData = lineCount == 1 ? ['第一组'] : lineCount == 2 ? ['第一组', '第二组'] : ['第一组', '第二组', '第三组'],\r\n legendSelected: any =\r\n lineCount == 1 ? { 第一组: true } : lineCount == 2 ? { 第一组: true, 第二组: true } : { 第一组: true, 第二组: true, 第三组: true };\r\n\r\n //console.log(xData1,xData2,xData3,seriesData)\r\n let yValIsAllNull = false;\r\n let xValIsAllNull = false;\r\n let topmargin = 0;\r\n //为空不展示\r\n if (xDataSource1.length == 0) {\r\n xValIsAllNull = true;\r\n topmargin = 15;\r\n\r\n legendData = ['第二组', '第三组'];\r\n legendSelected = { 第一组: false, 第二组: true, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData2));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource2.length == 0) {\r\n topmargin = 35;\r\n\r\n legendData = ['第三组'];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData3));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource3.length == 0) {\r\n topmargin = 0;\r\n\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(3, []));\r\n }\r\n }\r\n } else if (xDataSource2.length == 0) {\r\n topmargin = 15;\r\n xValIsAllNull = true;\r\n legendData = ['第一组', '第三组'];\r\n legendSelected = { 第一组: true, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n xAxisData.push(getxAxisObj(3, xData3));\r\n\r\n seriesData.push(getLineObj(1, yDataSource1));\r\n seriesData.push(getLineObj(3, yDataSource3));\r\n\r\n if (xDataSource1.length == 0) {\r\n topmargin = 35;\r\n\r\n legendData = ['第三组'];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: true };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n seriesData.push(getLineObj(3, yDataSource1));\r\n\r\n if (xDataSource3.length == 0) {\r\n topmargin = 0;\r\n\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(3, []));\r\n }\r\n }\r\n } else if (xDataSource3.length == 0) {\r\n topmargin = 15;\r\n xValIsAllNull = true;\r\n legendData = ['第一组', '第二组'];\r\n legendSelected = { 第一组: true, 第二组: true, 第三组: false };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, xData1));\r\n xAxisData.push(getxAxisObj(2, xData2));\r\n seriesData.push(getLineObj(1, yDataSource1));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n\r\n if (xDataSource1.length == 0) {\r\n topmargin = 35;\r\n legendData = ['第二组'];\r\n legendSelected = { 第一组: false, 第二组: true, 第三组: false };\r\n\r\n xAxisData = [];\r\n seriesData = [];\r\n\r\n xAxisData.push(getxAxisObj(1, xData2));\r\n seriesData.push(getLineObj(2, yDataSource2));\r\n\r\n if (xDataSource2.length == 0) {\r\n topmargin = 0;\r\n yValIsAllNull = true;\r\n legendData = [];\r\n legendSelected = { 第一组: false, 第二组: false, 第三组: false };\r\n xAxisData = [];\r\n seriesData = [];\r\n xAxisData.push(getxAxisObj(1, []));\r\n seriesData.push(getLineObj(2, []));\r\n }\r\n }\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: !xValIsAllNull ? -5 : topmargin,\r\n left: 30,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n left: 'center',\r\n top: 16,\r\n data: legendData,\r\n selected: legendSelected,\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: xAxisData,\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: seriesData,\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 颗粒组成(密度计法)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart250: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n const xData = xDataArr[0], // [0.0316, 0.0224, 0.0115, 0.0075, 0.0058, 0.0033, 0.0031, 0.0024, 0.001, 0.0008],\r\n yData = yDataArr[0]; // [83.0, 78.8, 53.8, 42.6, 33.7, 27.8, 23.2, 19.2, 13.0, 7.7];\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n let xmin = 0.001,\r\n xmax = 100;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.length == 0) {\r\n yValIsAllNull = true;\r\n }\r\n let nullCount = 0;\r\n xData.forEach((item) => {\r\n if (item == null || item == undefined || item == '/') {\r\n nullCount++;\r\n }\r\n });\r\n if (nullCount == xData.length) {\r\n yValIsAllNull = true;\r\n xmin = null;\r\n xmax = null;\r\n }\r\n if (yData.some((item) => item != null && item != undefined && item != '/')) {\r\n yValIsAllNull = false;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'log', //设置x轴为对数坐标轴\r\n logBase: 10, //可以设置对数轴的底数,默认为10\r\n inverse: true,\r\n min: xmin,\r\n max: xmax,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 承载比(CBR)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart270: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n // const xDataSource1 = xDataArr[0], // [36, 102, 316, 678, 917, 1177, 1396, 1478, 1620, 1651, 1753, 1789, 1855],\r\n // \txDataSource2 = xDataArr[1], // [56, 122, 357, 617, 958, 1223, 1376, 1493, 1631, 1682, 1783, 1824, 1885],\r\n // \txDataSource3 = xDataArr[2], // [66, 168, 443, 729, 994, 1213, 1411, 1529, 1651, 1722, 1783, 1824, 1890],\r\n // \tyDataSource1 = yDataArr[0], // [0.31, 0.51, 0.94, 1.47, 2.0, 2.48, 2.92, 3.41, 3.87, 4.37, 4.86, 5.36, 5.88],\r\n // \tyDataSource2 = yDataArr[1], // [0.26, 0.5, 1.01, 1.52, 2.02, 2.52, 2.98, 3.49, 3.99, 4.49, 4.98, 5.48, 5.98],\r\n // \tyDataSource3 = yDataArr[2]; // [0.32, 0.52, 1.01, 1.5, 1.99, 2.49, 2.98, 3.47, 3.96, 4.46, 4.95, 5.44, 5.93];\r\n\r\n let xDataSource1 = [],\r\n xDataSource2 = [],\r\n xDataSource3 = [],\r\n yDataSource1 = [],\r\n yDataSource2 = [],\r\n yDataSource3 = [];\r\n\r\n //排除原始数据为0的数据\r\n xDataArr[0].forEach((item, index) => {\r\n if (item != 0 && yDataArr[0][index] != 0) {\r\n xDataSource1.push(item);\r\n yDataSource1.push(yDataArr[0][index]);\r\n }\r\n });\r\n xDataArr[1].forEach((item, index) => {\r\n if (item != 0 && yDataArr[1][index] != 0) {\r\n xDataSource2.push(item);\r\n yDataSource2.push(yDataArr[1][index]);\r\n }\r\n });\r\n xDataArr[2].forEach((item, index) => {\r\n if (item != 0 && yDataArr[2][index] != 0) {\r\n xDataSource3.push(item);\r\n yDataSource3.push(yDataArr[2][index]);\r\n }\r\n });\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, xData, yData) => {\r\n const name = `曲线${type}`;\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //ttype == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n const seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n return {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 5, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: seriesData,\r\n };\r\n };\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xDataSource1.every((item) => item == '/') &&\r\n xDataSource2.every((item) => item == '/') &&\r\n xDataSource3.every((item) => item == '/') &&\r\n yDataSource1.every((item) => item == '/') &&\r\n yDataSource2.every((item) => item == '/') &&\r\n yDataSource3.every((item) => item == '/')\r\n ) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 20,\r\n bottom: 5,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].value[0] + ')' + ':' + datas[0].value[1] : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value', //category\r\n //data: xDataSource1,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, xDataSource1, yDataSource1), getLineObj(2, xDataSource2, yDataSource2), getLineObj(3, xDataSource3, yDataSource3)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 压实度-吸水量,膨胀率,CBR-279、280和281\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart279_280_281: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle, //压实度-吸水量关系曲线 压实度-膨胀率关系曲线 压实度-CBR关系曲线\r\n xName = config.chartXName, //压实度(%) 压实度(%) 压实度(%)\r\n yName = config.chartYName, //吸水量(g) 膨胀率(%) CBR(%)\r\n legendName = '图例1';\r\n\r\n //y轴最大最小数据加减数字\r\n let jjNum = config.chartType == 279 ? 5 : config.chartType == 280 ? 0.1 : 0.15;\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [90.3, 95.6, 99.5],\r\n yData = yDataArr[0], // [245, 206, 163],\r\n xAxisMin = Math.min(...xData),\r\n yAxisMin = Number(EChartsUtilsComm.getRound(Math.min(...yData) - jjNum, 0.001)),\r\n yAxisMax = Number(EChartsUtilsComm.getRound(Math.max(...yData) + jjNum, 0.001));\r\n //yData1 = [245, 206, 163],\r\n //yData2 = [3.49, 2.69, 2.34];\r\n //yData3 = [4, 4.7, 5.7];\r\n //修约:0.001 0.001 0.001\r\n //y最大最小加减数:5 0.1 0.15\r\n\r\n xAxisMin = Number(EChartsUtilsComm.getRound(xAxisMin - xAxisMin * 0.01, 0.001));\r\n\r\n let seriesData = [];\r\n xData.forEach((item, index) => {\r\n seriesData.push([item, yData[index]]);\r\n });\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (yData.every((item) => item == '/')) {\r\n yValIsAllNull = true;\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 20,\r\n right: 15,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value', //设置x轴为对数坐标轴\r\n min: xAxisMin,\r\n max: 100,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n min: yAxisMin,\r\n max: yAxisMax,\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: seriesData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 承载比(CBR)(路强仪)\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart290: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xDataSource1 = xDataArr[0], // [36, 102, 316, 678, 917, 1177, 1396, 1478, 1620, 1651, 1753, 1789, 1855],\r\n xDataSource2 = xDataArr[0], // [56, 122, 357, 617, 958, 1223, 1376, 1493, 1631, 1682, 1783, 1824, 1885],\r\n xDataSource3 = xDataArr[0], // [66, 168, 443, 729, 994, 1213, 1411, 1529, 1651, 1722, 1783, 1824, 1890],\r\n yDataSource1 = yDataArr[0], // [0.31, 0.51, 0.94, 1.47, 2.0, 2.48, 2.92, 3.41, 3.87, 4.37, 4.86, 5.36, 5.88],\r\n yDataSource2 = yDataArr[1], // [0.26, 0.5, 1.01, 1.52, 2.02, 2.52, 2.98, 3.49, 3.99, 4.49, 4.98, 5.48, 5.98],\r\n yDataSource3 = yDataArr[2]; // [0.32, 0.52, 1.01, 1.5, 1.99, 2.49, 2.98, 3.47, 3.96, 4.46, 4.95, 5.44, 5.93];\r\n\r\n /**\r\n * 获取series需要的3条线配置\r\n * @param type 线类型(1:筛分曲线、2:上限、3:下限)\r\n * @param data 对应的坐标点数据\r\n */\r\n const getLineObj = (type, data) => {\r\n const name = `曲线${type}`;\r\n const symbol = type == 1 ? 'rect' : type == 2 ? 'triangle' : 'circle';\r\n const lineType = type == 1 ? 'solid' : type == 2 ? 'dotted' : [10, 5];\r\n const color = type == 1 ? lineData[0].lineColor : type == 2 ? lineData[1].lineColor : lineData[2].lineColor; //ttype == 1 ? '#F56C6C' : type == 2 ? '#409EFF' : '#000';\r\n\r\n return {\r\n name: name,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: symbol, //符号类型\r\n symbolSize: 5, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: color,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n type: lineType,\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: color,\r\n },\r\n data: data,\r\n };\r\n };\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xDataSource1.every((item) => item == '/') &&\r\n xDataSource2.every((item) => item == '/') &&\r\n xDataSource3.every((item) => item == '/') &&\r\n yDataSource1.every((item) => item == '/') &&\r\n yDataSource2.every((item) => item == '/') &&\r\n yDataSource3.every((item) => item == '/')\r\n ) {\r\n yValIsAllNull = true;\r\n xDataSource1 = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 5,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xDataSource1,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [getLineObj(1, yDataSource1), getLineObj(2, yDataSource2), getLineObj(3, yDataSource3)],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 土基回弹模量\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart310: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0], // [0.02, 0.04, 0.06, 0.08, 0.14, 0.18, 0.22, 0.26, 0.3, 0.34],\r\n yData = yDataArr[0]; // [6, 10, 12, 16, 20, 28, 36, 44, 54, 68];\r\n\r\n let xDataCl = [],\r\n yDataCl = [];\r\n xData.forEach((item, index) => {\r\n if (item != null && item != undefined && item != '/' && (item._code == null || item._code == undefined)) {\r\n xDataCl.push(item);\r\n yDataCl.push(yData[index]);\r\n }\r\n });\r\n xData = xDataCl;\r\n yData = yDataCl;\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (\r\n xData.every((item) => item == '/' || (item._code != null && item._code != undefined)) &&\r\n yData.every((item) => item == '/' || (item._code != null && item._code != undefined))\r\n ) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 35,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 20,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n top: 16,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLine: {\r\n //设置x轴箭头效果\r\n symbol: ['none', 'arrow'], //默认是['none', 'none'],可以设置为['arrow', 'none']或['none', 'arrow']等来分别控制起始和结束的箭头\r\n symbolSize: 10, //箭头大小\r\n },\r\n splitLine: { show: true },\r\n position: 'top', //设置x轴在顶部显示\r\n name: 'p', //设置x轴显示的名称\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n nameLocation: 'end', //设置x轴显示的名称的位置在末端,注意:需要配置grid.right一起使用,不然可能会被遮住\r\n },\r\n yAxis: [\r\n //双y轴,目的是使用第二个y轴来配置字符L显示在y轴下方箭头的位置\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 30 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n inverse: true, //y轴坐标轴向下\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n //设置y轴箭头效果\r\n show: true, //y轴默认是不显示的\r\n symbol: ['arrow', 'none'], //默认是['none', 'none'],可以设置为['arrow', 'none']或['none', 'arrow']等来分别控制起始和结束的箭头\r\n symbolSize: 10, //箭头大小\r\n },\r\n },\r\n {\r\n //配置符号L的显示\r\n name: 'L',\r\n nameRotate: 0,\r\n nameLocation: 'end',\r\n nameGap: 5, //坐标轴名称与轴线之间的距离\r\n position: 'left',\r\n inverse: true, //y轴坐标轴向下\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 布氏粘度计\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart330: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>, sheet: any) => {\r\n let lineData = JSON.parse(config.chartLinesJson);\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n let title = '', //config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //x和y轴的数据\r\n let xData = xDataArr[0],\r\n yData = yDataArr[0];\r\n\r\n //获取y轴趋势公式对象\r\n const gsS: any = EChartsUtilsComm.calcTrend(xData, yData, xData[0]);\r\n\r\n //黏度为0.15Pa·s、0.19Pa·s、0.25Pa·s、0.31Pa·s时的温度\r\n let wd015 = EChartsUtilsComm.getRound((0.15 - gsS.jj) / gsS.xl, 0),\r\n wd019 = EChartsUtilsComm.getRound((0.19 - gsS.jj) / gsS.xl, 0),\r\n wd025 = EChartsUtilsComm.getRound((0.25 - gsS.jj) / gsS.xl, 0),\r\n wd031 = EChartsUtilsComm.getRound((0.31 - gsS.jj) / gsS.xl, 0);\r\n\r\n if (wd015 == Infinity) {\r\n wd015 = 0;\r\n }\r\n if (wd019 == Infinity) {\r\n wd019 = 0;\r\n }\r\n if (wd025 == Infinity) {\r\n wd025 = 0;\r\n }\r\n if (wd031 == Infinity) {\r\n wd031 = 0;\r\n }\r\n //输出“拌合温度范围 ℃”和“压实成型温度范围 ℃”\r\n let wdBh = `${wd015}~${wd019}`,\r\n wdYs = `${wd025}~${wd031}`;\r\n // console.log('输出温度:', wdBh, wdYs);\r\n\r\n //设置Sheet单元格的值(拌合温度和压实成型温度范围)\r\n if (chartExtJson != null) {\r\n if (wd015 == 0 && wd019 == 0) {\r\n sheet.setValue(chartExtJson.bszdjBh.row, chartExtJson.bszdjBh.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.bszdjBh.row, chartExtJson.bszdjBh.col, wdBh);\r\n }\r\n if (wd025 == 0 && wd031 == 0) {\r\n sheet.setValue(chartExtJson.bszdjYs.row, chartExtJson.bszdjYs.col, '/');\r\n } else {\r\n sheet.setValue(chartExtJson.bszdjYs.row, chartExtJson.bszdjYs.col, wdYs);\r\n }\r\n }\r\n\r\n //验证是否没有任何数据,以便控制显示y轴的名称的距离位置\r\n let yValIsAllNull = false;\r\n if (xData.every((item) => item == '/') && yData.every((item) => item == '/')) {\r\n yValIsAllNull = true;\r\n xData = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 10,\r\n left: !yValIsAllNull ? 30 : 25,\r\n right: 10,\r\n bottom: 20,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas.length > 0 ? datas[0].seriesName + '(' + datas[0].name + ')' + ':' + datas[0].value : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 18,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'category',\r\n data: xData,\r\n axisTick: {\r\n alignWithLabel: true, //使得刻度线和标签对齐\r\n },\r\n axisLabel: {\r\n // 使用formatter格式化标签\r\n formatter: function (value) {\r\n if (value == '/') {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n },\r\n },\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !yValIsAllNull ? 25 : 5,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n //splitNumber: 10, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n axisLine: {\r\n show: true, //y轴默认是不显示的\r\n },\r\n },\r\n ],\r\n series: [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n smooth: true, //平滑的线条\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle', //符号类型\r\n symbolSize: 6, //符号大小\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineData[0].lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineData[0].lineColor,\r\n },\r\n data: yData,\r\n },\r\n ],\r\n };\r\n\r\n return option;\r\n },\r\n /**\r\n * 液限碟式仪\r\n * @param config 折线配置\r\n * @param xDataArr x轴原始数据(二维数组)\r\n * @param yDataArr y轴原始数据(二维数组)\r\n * @returns 返回ECharts配置项\r\n */\r\n chart350: (config: EChartsUtilsConfigModel, xDataArr: Array<Array<any>>, yDataArr: Array<Array<any>>) => {\r\n let lineData = JSON.parse(config.chartLinesJson),\r\n lineColor = lineData[0].lineColor;\r\n\r\n //击数N(次)、含水率w(%)、y轴第一个趋势数据、y轴第二个趋势数据、25的趋势数据、y轴最小值、y轴最大值\r\n const jsN = [xDataArr[0][0], xDataArr[0][1]], // [18, 30],\r\n hsl = [yDataArr[0][0], yDataArr[0][1]], // [22.1, 11.5],\r\n //通过calcTrend获取y轴第一个趋势数据、y轴第二个趋势数据、25的趋势数据\r\n yVal1 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, jsN[0]).y, 0.1)),\r\n yVal2 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, jsN[1]).y, 0.1)),\r\n yVal25 = Number(EChartsUtilsComm.getRound(EChartsUtilsComm.calcTrend(jsN, hsl, 25).y, 0.1)),\r\n //通过calcTrend获取y轴的趋势数据,然后分别-2和+2\r\n yAxisMin = Math.floor(Number(yVal2)) - 2,\r\n yAxisMax = Math.floor(Number(yVal1)) + 2;\r\n\r\n let title = config.chartTitle,\r\n xName = config.chartXName,\r\n yName = config.chartYName,\r\n legendName = '图例1';\r\n\r\n //检测是否所有数据都为空\r\n let isAllNull = true;\r\n isAllNull = xDataArr[0].filter((item) => item != null && item != undefined && item != '/').length == 0;\r\n if (isAllNull) {\r\n isAllNull = yDataArr[0].filter((item) => item != null && item != undefined && item != '/').length == 0;\r\n }\r\n\r\n //x和y轴的字体大小\r\n const xyFontSize = 8;\r\n\r\n let seriesObjs = [\r\n {\r\n name: legendName,\r\n type: 'line',\r\n //设置数据点形状(实心),参考文档:https://echarts.apache.org/zh/option.html#series-line.symbol\r\n symbol: 'circle',\r\n z: 10, //控制曲线的浮动层级,避免在markLine下方被遮住\r\n //线条的颜色\r\n lineStyle: {\r\n color: lineColor,\r\n //线条类型(solid:实线、dashed:粗虚线、dotted:细虚线)\r\n // type: 'dotted',\r\n },\r\n //线条上数据点的颜色\r\n itemStyle: {\r\n color: lineColor,\r\n },\r\n connectNulls: true, //是否连接空数据\r\n data: [\r\n [0, null],\r\n [2, null],\r\n [3.5, null],\r\n [4.9, null],\r\n [5.9, null],\r\n [6.9, null],\r\n {\r\n //延长线1\r\n value: [10.4, yVal25 - (2.7 * (yVal25 - yVal1)) / 2.1],\r\n symbol: 'none', //隐藏线条上的数据点\r\n },\r\n [11, yVal1], //第一个点\r\n [11.8, null],\r\n [13.1, yVal25], //第二个点\r\n [14.6, yVal2], //第三个点\r\n {\r\n //延长线2\r\n value: [15.2, (2.1 / 1.5) * (yVal2 - yVal25) + yVal25],\r\n symbol: 'none', //隐藏线条上的数据点\r\n },\r\n [16.4, null],\r\n [17.4, null],\r\n [18.9, null],\r\n [19.8, null],\r\n [20.7, null],\r\n [21.6, null],\r\n [22.6, null],\r\n ],\r\n markPoint: {\r\n data: [\r\n {\r\n xAxis: 13.1,\r\n yAxis: yVal25,\r\n symbolOffset: [40, 25],\r\n label: {\r\n show: true,\r\n color: '#000',\r\n formatter: function (data) {\r\n //显示25这个坐标点数据\r\n return isAllNull ? '' : '( ' + 25 + ' , ' + data.data.yAxis + ')';\r\n },\r\n },\r\n itemStyle: { color: 'transparent' },\r\n },\r\n ],\r\n },\r\n markLine: {\r\n symbol: '', //取消箭头\r\n silent: true, //取消鼠标hover事件\r\n label: {\r\n //标线的文本,模拟x轴显示的内容\r\n position: 'start', //改变label位置\r\n // rotate: 45, //设置文字旋转度数(注意:ECharts官网文档居然没有rotate这个属性的说明)\r\n // backgroundColor:'#fff'\r\n // color:'#f00',//文字颜色\r\n formatter: (data) => {\r\n return data.name;\r\n },\r\n },\r\n lineStyle: { color: '#e0e6f1', type: 'solid' },\r\n data: [\r\n {\r\n name: '5',\r\n xAxis: 0,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '6',\r\n xAxis: 2,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '7',\r\n xAxis: 3.5,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '8',\r\n xAxis: 4.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '9',\r\n xAxis: 5.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '10',\r\n xAxis: 6.9,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //延长线1\r\n name: '',\r\n xAxis: 10.4,\r\n lineStyle: {\r\n opacity: 0,\r\n },\r\n },\r\n {\r\n //第一个点\r\n name: '',\r\n xAxis: 11,\r\n },\r\n {\r\n name: '20',\r\n xAxis: 11.8,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //第二个点\r\n name: '25',\r\n xAxis: 13.1,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //第三个点\r\n name: '30',\r\n xAxis: 14.6,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n //延长线2\r\n name: '',\r\n xAxis: 15.2,\r\n lineStyle: {\r\n opacity: 0,\r\n },\r\n },\r\n {\r\n name: '40',\r\n xAxis: 16.4,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '50',\r\n xAxis: 17.4,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n {\r\n name: '',\r\n xAxis: 18.9,\r\n },\r\n {\r\n name: '',\r\n xAxis: 19.8,\r\n },\r\n {\r\n name: '',\r\n xAxis: 20.7,\r\n },\r\n {\r\n name: '',\r\n xAxis: 21.6,\r\n },\r\n {\r\n name: '100',\r\n xAxis: 22.6,\r\n label: {\r\n fontSize: xyFontSize,\r\n },\r\n },\r\n\r\n //横线\r\n [\r\n {\r\n coord: [0, yVal25],\r\n lineStyle: {\r\n color: '#529b2e',\r\n type: 'solid',\r\n },\r\n },\r\n { coord: [13.1, yVal25] },\r\n ],\r\n //纵线\r\n [\r\n {\r\n coord: [13.1, yAxisMin],\r\n lineStyle: {\r\n color: '#000',\r\n type: 'silid',\r\n },\r\n },\r\n { coord: [13.1, yVal25] },\r\n ],\r\n ],\r\n },\r\n },\r\n ];\r\n if (isAllNull) {\r\n seriesObjs = [];\r\n }\r\n\r\n let option = {\r\n grid: {\r\n // show: true,//是否显示外边框线\r\n // borderColor: '#f00',//外边框线颜色\r\n top: 25,\r\n left: 30,\r\n right: 10,\r\n bottom: 35,\r\n containLabel: true,\r\n },\r\n //提示框组件,参考文档:https://echarts.apache.org/zh/option.html#tooltip\r\n tooltip: {\r\n trigger: 'axis',\r\n formatter: function (datas, ticket) {\r\n return datas && datas[0].data.length > 1\r\n ? datas[0].data[1] == null\r\n ? ''\r\n : datas[0].seriesName + '(' + datas[0].data[0] + ')' + ':' + datas[0].data[1]\r\n : datas[0].data;\r\n },\r\n },\r\n //顶部的标题,参考文档:https://echarts.apache.org/zh/option.html#title\r\n title: [\r\n {\r\n show: true,\r\n text: title,\r\n left: 'center',\r\n top: 0,\r\n textStyle: {\r\n fontSize: 14,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n {\r\n show: true,\r\n text: xName,\r\n left: 'center',\r\n bottom: 0,\r\n textStyle: {\r\n fontSize: 12,\r\n fontWeight: 'normal',\r\n },\r\n },\r\n ],\r\n //图例,参考文档:https://echarts.apache.org/zh/option.html#legend\r\n legend: {\r\n show: false,\r\n left: 'right',\r\n data: [legendName],\r\n selected: {\r\n legendName: true, //显示\r\n },\r\n selectedMode: 'multiple', //用于控制图例的选择模式(single:单选、multiple:多选、false:禁止选择)\r\n },\r\n xAxis: {\r\n type: 'value',\r\n axisTick: { show: false }, //隐藏刻度线\r\n axisLabel: { show: false }, //隐藏刻度值\r\n //网格线,参考文档:https://echarts.apache.org/zh/option.html#xAxis.splitLine\r\n splitLine: {\r\n show: false, //隐藏分割线\r\n },\r\n min: 0,\r\n max: 23.5,\r\n },\r\n yAxis: [\r\n {\r\n type: 'value',\r\n name: yName,\r\n nameGap: !isAllNull ? 30 : 10,\r\n nameRotate: 90,\r\n nameLocation: 'middle',\r\n splitLine: {\r\n show: true,\r\n lineStyle: {\r\n color: '#e0e6f1', //'#e0e6f1',\r\n type: 'solid',\r\n },\r\n },\r\n splitNumber: 4, //设置y轴分隔的段数,如0~100之间默认情况可能会按照0、20、40、60……的间隔显示,设置相应的数字后就会根据实际情况显示的更细,如0、10、20、30……\r\n min: !isAllNull ? yAxisMin : null,\r\n max: yAxisMax,\r\n axisLabel: {\r\n show: !isAllNull ? true : false,\r\n fontSize: xyFontSize,\r\n },\r\n axisTick: {\r\n show: !isAllNull ? true : false,\r\n },\r\n },\r\n ],\r\n series: seriesObjs,\r\n };\r\n\r\n return option;\r\n },\r\n};\r\n","import * as echarts from 'echarts';\r\nimport { type CellModel } from '../types/sheet';\r\nimport { type EChartsUtilsConfigModel, type EChartsUtilsChartLinesJsonModel } from '../types/echarts';\r\nimport { EChartsUtilsAll } from './echarts-all';\r\n\r\n/**\r\n * ECharts图表工具类\r\n */\r\nexport const EChartsUtils = {\r\n /**\r\n * 创建图表\r\n * @param GC GC对象\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param config 折现配置\r\n * @param isHideChart 是否隐藏图表\r\n */\r\n create: async (\r\n GC: any,\r\n spread: any,\r\n sheet: any,\r\n config: EChartsUtilsConfigModel,\r\n isHideChart: boolean = false\r\n ): Promise<{\r\n fObj: any;\r\n fObjPosition: {\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n };\r\n ecObj: echarts.ECharts;\r\n }> => {\r\n // 获取扩展配置\r\n const chartExtJson = config.chartExtJson == null || config.chartExtJson == undefined ? null : JSON.parse(config.chartExtJson);\r\n\r\n // 如果isShowCon配置存在,则验证isShowCon对应单元格的值是否和输入的配置chartExtJson.isShowVal相等,不相等的话,就不创建图表\r\n if (chartExtJson != null && chartExtJson.isShowCon != null && chartExtJson.isShowCon != undefined) {\r\n const conVal = sheet.getValue(chartExtJson.isShowCon.row, chartExtJson.isShowCon.col);\r\n\r\n if (conVal != chartExtJson.isShowVal) {\r\n sheet.floatingObjects.remove(config.chartId);\r\n return;\r\n }\r\n }\r\n\r\n // 获取图表单元格之上的所有行的高度总和、所有列的宽度总和、距离左侧的距离和图表所在单元格的高度\r\n let allRowsTotalHeight = 0,\r\n allRowsTotalWidth = 0,\r\n allRowsTotalLeft = 0,\r\n chartCellHeight = 0;\r\n for (let i = 0; i < config.row; i++) {\r\n allRowsTotalHeight += sheet.getRowHeight(i);\r\n }\r\n allRowsTotalHeight += sheet.getRowHeight(0, GC.Spread.Sheets.SheetArea.colHeader);\r\n for (let i = config.col; i < config.col + config.colCount; i++) {\r\n allRowsTotalWidth += sheet.getColumnWidth(i);\r\n }\r\n for (let i = 0; i < config.col; i++) {\r\n allRowsTotalLeft += sheet.getColumnWidth(i);\r\n }\r\n allRowsTotalLeft += sheet.getColumnWidth(0, GC.Spread.Sheets.SheetArea.rowHeader);\r\n for (let i = config.row; i < config.row + config.rowCount; i++) {\r\n chartCellHeight += sheet.getRowHeight(i);\r\n }\r\n\r\n // 设置浮动对象的呈现位置(实际情况根据需要进行调整)\r\n const fObjPosition = {\r\n x: allRowsTotalLeft - 40 + 2,\r\n y: allRowsTotalHeight - 20 + 2,\r\n w: allRowsTotalWidth - 6,\r\n h: chartCellHeight - 6,\r\n };\r\n\r\n // 获取浮动对象\r\n let fcObj = sheet.floatingObjects.get(config.chartId);\r\n\r\n // 浮动对象不存在时\r\n if (fcObj == null || fcObj == undefined) {\r\n // 创建浮动对象\r\n fcObj = new GC.Spread.Sheets.FloatingObjects.FloatingObject(config.chartId, fObjPosition.x, fObjPosition.y, fObjPosition.w, fObjPosition.h);\r\n\r\n // 不允许改变大小、不允许拖动\r\n fcObj.allowResize(false);\r\n fcObj.allowMove(false);\r\n\r\n // 将浮动对象添加到表单\r\n sheet.floatingObjects.add(fcObj);\r\n }\r\n // 浮动对象存在时\r\n else {\r\n fcObj.x(fObjPosition.x);\r\n fcObj.y(fObjPosition.y);\r\n fcObj.width(fObjPosition.w);\r\n fcObj.height(fObjPosition.h);\r\n }\r\n\r\n // 设置浮动对象的内容为divObj(当document.getElementById(config.chartId + '_ec')为null的时候)\r\n if (document.getElementById(config.chartId + '_ec') == null) {\r\n // 创建用于放置ECharts的div容器\r\n const divObj = document.createElement('div');\r\n divObj.setAttribute('style', `background-color:#fff;width:100%;height:100%;`);\r\n divObj.innerHTML = `<div id=\"${config.chartId}_ec\" style=\"width:100%;height:100%;\"></div>`;\r\n\r\n fcObj.content(divObj);\r\n }\r\n\r\n // 定义ECharts对象\r\n let ecObj: echarts.ECharts | null = null;\r\n\r\n // 获取ECharts对象的函数(这里使用到了Promise和setTimeout,原因是:ECharts所在的div可能还没有及时在浮动元素中渲染完成,导致ECharts展示部出来)\r\n const getEcObj = (): any => {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n // 初始化图表并获取ECharts对象\r\n resolve({ ecObj: EChartsUtils.initChart(spread, sheet, config, isHideChart) });\r\n }, 10);\r\n });\r\n };\r\n ecObj = (await getEcObj()).ecObj;\r\n\r\n return {\r\n fObj: fcObj,\r\n fObjPosition: fObjPosition,\r\n ecObj: ecObj,\r\n };\r\n },\r\n\r\n /**\r\n * 初始化图表\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param config 图表配置\r\n * @param isHideChart 是否隐藏图表\r\n */\r\n initChart: (spread: any, sheet: any, config: EChartsUtilsConfigModel, isHideChart: boolean = false): echarts.ECharts => {\r\n // 此时可能ECharts所在的div还没有渲染(如浮动元素还没有在可视区域的时候是不会创建的)\r\n if (document.getElementById(config.chartId + '_ec') == null) {\r\n return null;\r\n }\r\n\r\n // 获取多条x轴的数组(类似[[1,2,3,4],[1,2,3,4]])\r\n let xDataArr: any = [],\r\n yDataArr: any = [];\r\n\r\n // 获取多条x轴的数组(单元格原始数据,类似[['1.0','2.0','3.0'],['1.0','2.0','3.0']],此数据可能在有些情况下需要使用原始数据,如:原始数据为字符串的1.0,可能需要在x轴显示为1.0这个字符文本)\r\n let xDataArrSource: any = [],\r\n yDataArrSource: any = [];\r\n\r\n /**\r\n * 获取x或y轴单元格的值集合\r\n * @param spread 工作簿对象\r\n * @param sheet 工作表对象\r\n * @param sheetName x轴或y轴数据所在的Sheet名称,如果没有值,则说明是当前操作的Sheet\r\n * @param cells 单元格集合\r\n * @returns 返回x或y轴数据的值集合\r\n */\r\n const getCellVals = (\r\n spread: any,\r\n sheet: any,\r\n sheetName?: string,\r\n cells?: CellModel[]\r\n ): {\r\n dataOneArr: any[];\r\n dataOneSourceArr: any[];\r\n } => {\r\n let retArr: {\r\n dataOneArr: any[];\r\n dataOneSourceArr: any[];\r\n } = {\r\n dataOneArr: [],\r\n dataOneSourceArr: [],\r\n };\r\n\r\n // 获取x或y轴数据所在的Sheet对象(如果sheetName有值,则说明是跨Sheet的)\r\n let curSheet: any = null;\r\n if (sheetName != null && sheetName != undefined && sheetName.length > 0) {\r\n curSheet = spread.getSheetFromName(sheetName);\r\n }\r\n\r\n cells?.forEach((itemCell, indexCell) => {\r\n // 如果单元格的值为数字,就转换为数字,否则在后期参与各个ECharts图表计算的时候会出错\r\n const curCellVal = curSheet != null ? curSheet.getValue(itemCell.row, itemCell.col) : sheet.getValue(itemCell.row, itemCell.col);\r\n retArr.dataOneSourceArr.push(curCellVal);\r\n\r\n // 严格的数字验证(包括科学计数法)\r\n if (/^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/.test(curCellVal)) {\r\n retArr.dataOneArr.push(Number(curCellVal));\r\n } else {\r\n retArr.dataOneArr.push(curCellVal == null ? 0 : curCellVal);\r\n }\r\n });\r\n\r\n return retArr;\r\n };\r\n\r\n let lineData: EChartsUtilsChartLinesJsonModel[] = JSON.parse(config.chartLinesJson);\r\n lineData.forEach((item, index) => {\r\n let xDataOne: any = [],\r\n yDataOne: any = [];\r\n let xDataOneSource: any = [],\r\n yDataOneSource: any = [];\r\n\r\n const curItemValsX = getCellVals(spread, sheet, item.sheetNameX, item.xCells);\r\n xDataOne = curItemValsX.dataOneArr;\r\n xDataOneSource = curItemValsX.dataOneSourceArr;\r\n const curItemValsY = getCellVals(spread, sheet, item.sheetNameY, item.yCells);\r\n yDataOne = curItemValsY.dataOneArr;\r\n yDataOneSource = curItemValsY.dataOneSourceArr;\r\n\r\n xDataArr.push(xDataOne);\r\n yDataArr.push(yDataOne);\r\n xDataArrSource.push(xDataOneSource);\r\n yDataArrSource.push(yDataOneSource);\r\n });\r\n\r\n // 获取ECharts图表所在div容器\r\n const ecDom = document.getElementById(config.chartId + '_ec') as HTMLElement;\r\n\r\n // 获取ECharts对象\r\n let ecObj = echarts.getInstanceByDom(ecDom);\r\n if (ecObj == null || ecObj == undefined) {\r\n ecObj = echarts.init(ecDom, null, {\r\n renderer: 'canvas',\r\n useDirtyRect: false,\r\n });\r\n }\r\n\r\n let option;\r\n\r\n if (config.chartType == 10) {\r\n option = EChartsUtilsAll.chart10(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 11) {\r\n option = EChartsUtilsAll.chart11(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 12) {\r\n option = EChartsUtilsAll.chart12(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 13) {\r\n option = EChartsUtilsAll.chart13(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 14) {\r\n option = EChartsUtilsAll.chart14(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 15) {\r\n option = EChartsUtilsAll.chart15(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 16) {\r\n option = EChartsUtilsAll.chart16(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 30) {\r\n option = EChartsUtilsAll.chart30(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 50) {\r\n option = EChartsUtilsAll.chart50(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 70) {\r\n option = EChartsUtilsAll.chart70(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 90) {\r\n option = EChartsUtilsAll.chart90(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 110) {\r\n option = EChartsUtilsAll.chart110(config, xDataArr, yDataArr, xDataArrSource, yDataArrSource);\r\n } else if (config.chartType == 130) {\r\n option = EChartsUtilsAll.chart130(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 150) {\r\n option = EChartsUtilsAll.chart150(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 170) {\r\n option = EChartsUtilsAll.chart170(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 190) {\r\n option = EChartsUtilsAll.chart190(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 210) {\r\n option = EChartsUtilsAll.chart210(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 230) {\r\n option = EChartsUtilsAll.chart230(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 250) {\r\n option = EChartsUtilsAll.chart250(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 270) {\r\n option = EChartsUtilsAll.chart270(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 279 || config.chartType == 280 || config.chartType == 281) {\r\n option = EChartsUtilsAll.chart279_280_281(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 290) {\r\n option = EChartsUtilsAll.chart290(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 310) {\r\n option = EChartsUtilsAll.chart310(config, xDataArr, yDataArr);\r\n } else if (config.chartType == 330) {\r\n option = EChartsUtilsAll.chart330(config, xDataArr, yDataArr, sheet);\r\n } else if (config.chartType == 350) {\r\n option = EChartsUtilsAll.chart350(config, xDataArr, yDataArr);\r\n }\r\n\r\n if (option && typeof option === 'object') {\r\n //如果是隐藏的图表,则需要禁用ECharts的动画效果\r\n //原因是:如果ECharts使用了动画效果,图表渲染完成可能需要0.5秒,但是在导出ECharts统计图为图片的场景下时,可能在图表还没有渲染完成(动画效果还没结束)前就要获取图像了,此时可能就会造成获取到的图像内容丢失的情况\r\n if (isHideChart) {\r\n option.animation = false;\r\n }\r\n\r\n ecObj.setOption(option);\r\n }\r\n\r\n ecObj.setOption(option);\r\n\r\n return ecObj;\r\n },\r\n\r\n /**\r\n * 获取ECharts对象\r\n * @param chartId 图表ID\r\n * @returns 返回ECharts对象,如果不存在则返回null\r\n */\r\n getEChartsObj: (chartId: string): echarts.ECharts | null => {\r\n // 获取ECharts图表所在div容器\r\n const ecDom = document.getElementById(chartId + '_ec') as HTMLElement;\r\n\r\n // 获取ECharts对象\r\n let ecObj = echarts.getInstanceByDom(ecDom);\r\n if (ecObj == null || ecObj == undefined) {\r\n return null;\r\n }\r\n\r\n return ecObj;\r\n },\r\n};\r\n","/**\r\n * 其他自定义公式\r\n * 此文件用于放置其他自定义公式,如:YJHTQD(此公式代码较多)\r\n */\r\nexport const FormulaUtilsOther = {\r\n /**\r\n * 回弹强度换算查表\r\n * @param forComm commFormula.ts中的CommFormula.commFun对象\r\n * @param jzfs 浇筑方式\r\n * @param xzhhtz 修正后回弹值\r\n * @param thsd 碳化深度\r\n */\r\n YJHTQD: (forComm, jzfs, xzhhtz, thsd) => {\r\n var qdhsz; //最后输出的强度换算值\r\n if (jzfs == '非泵送混凝土') {\r\n var sd_value_po = ''; //角度所在数组位置;\r\n var sd_value = thsd; // 碳化深度\r\n var ht = xzhhtz; // 回弹平均值\r\n //平均碳化深度值arr_sd\r\n var arr_sd = new Array('0.0', '0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', '6.0');\r\n for (var i = 0; i < arr_sd.length; i++) {\r\n if (sd_value == arr_sd[i]) {\r\n //角度 碳化深度的值\r\n sd_value_po = i; //角度所在数组位置;\r\n break;\r\n } else if (sd_value * 1 > '6') {\r\n sd_value_po = arr_sd.length - 1;\r\n break;\r\n }\r\n }\r\n\r\n var t0_0 = [\r\n { x: 20.0, y: 10.3 },\r\n { x: 20.2, y: 10.5 },\r\n { x: 20.4, y: 10.7 },\r\n { x: 20.6, y: 11.0 },\r\n { x: 20.8, y: 11.2 },\r\n { x: 21.0, y: 11.4 },\r\n { x: 21.2, y: 11.6 },\r\n { x: 21.4, y: 11.8 },\r\n { x: 21.6, y: 12.0 },\r\n { x: 21.8, y: 12.3 },\r\n { x: 22.0, y: 12.5 },\r\n { x: 22.2, y: 12.7 },\r\n { x: 22.4, y: 13 },\r\n { x: 22.6, y: 13.2 },\r\n { x: 22.8, y: 13.4 },\r\n { x: 23.0, y: 13.7 },\r\n { x: 23.2, y: 13.9 },\r\n { x: 23.4, y: 14.1 },\r\n { x: 23.6, y: 14.4 },\r\n { x: 23.8, y: 14.6 },\r\n { x: 24.0, y: 14.9 },\r\n { x: 24.2, y: 15.1 },\r\n { x: 24.4, y: 15.4 },\r\n { x: 24.6, y: 15.6 },\r\n { x: 24.8, y: 15.9 },\r\n { x: 25.0, y: 16.2 },\r\n { x: 25.2, y: 16.4 },\r\n { x: 25.4, y: 16.7 },\r\n { x: 25.6, y: 16.9 },\r\n { x: 25.8, y: 17.2 },\r\n { x: 26, y: 17.5 },\r\n { x: 26.2, y: 17.8 },\r\n { x: 26.4, y: 18.0 },\r\n { x: 26.6, y: 18.3 },\r\n { x: 26.8, y: 18.6 },\r\n { x: 27, y: 18.9 },\r\n { x: 27.2, y: 19.1 },\r\n { x: 27.4, y: 19.4 },\r\n { x: 27.6, y: 19.7 },\r\n { x: 27.8, y: 20 },\r\n { x: 28.0, y: 20.3 },\r\n { x: 28.2, y: 20.6 },\r\n { x: 28.4, y: 20.9 },\r\n { x: 28.6, y: 21.2 },\r\n { x: 28.8, y: 21.5 },\r\n { x: 29, y: 21.8 },\r\n { x: 29.2, y: 22.1 },\r\n { x: 29.4, y: 22.4 },\r\n { x: 29.6, y: 22.7 },\r\n { x: 29.8, y: 23 },\r\n { x: 30, y: 23.3 },\r\n { x: 30.2, y: 23.6 },\r\n { x: 30.4, y: 23.9 },\r\n { x: 30.6, y: 24.3 },\r\n { x: 30.8, y: 24.6 },\r\n { x: 31, y: 24.9 },\r\n { x: 31.2, y: 25.2 },\r\n { x: 31.4, y: 25.6 },\r\n { x: 31.6, y: 25.9 },\r\n { x: 31.8, y: 26.2 },\r\n { x: 32, y: 26.5 },\r\n { x: 32.2, y: 26.9 },\r\n { x: 32.4, y: 27.2 },\r\n { x: 32.6, y: 27.6 },\r\n { x: 32.8, y: 27.9 },\r\n { x: 33, y: 28.2 },\r\n { x: 33.2, y: 28.6 },\r\n { x: 33.4, y: 28.9 },\r\n { x: 33.6, y: 29.3 },\r\n { x: 33.8, y: 29.6 },\r\n { x: 34, y: 30 },\r\n { x: 34.2, y: 30.3 },\r\n { x: 34.4, y: 30.7 },\r\n { x: 34.6, y: 31.1 },\r\n { x: 34.8, y: 31.4 },\r\n { x: 35, y: 31.8 },\r\n { x: 35.2, y: 32.1 },\r\n { x: 35.4, y: 32.5 },\r\n { x: 35.6, y: 32.9 },\r\n { x: 35.8, y: 33.3 },\r\n { x: 36, y: 33.6 },\r\n { x: 36.2, y: 34 },\r\n { x: 36.4, y: 34.4 },\r\n { x: 36.6, y: 34.8 },\r\n { x: 36.8, y: 35.2 },\r\n { x: 37, y: 35.5 },\r\n { x: 37.2, y: 35.9 },\r\n { x: 37.4, y: 36.3 },\r\n { x: 37.6, y: 36.7 },\r\n { x: 37.8, y: 37.1 },\r\n { x: 38, y: 37.5 },\r\n { x: 38.2, y: 37.9 },\r\n { x: 38.4, y: 38.3 },\r\n { x: 38.6, y: 38.7 },\r\n { x: 38.8, y: 39.1 },\r\n { x: 39.0, y: 39.5 },\r\n { x: 39.2, y: 39.9 },\r\n { x: 39.4, y: 40.3 },\r\n { x: 39.6, y: 40.7 },\r\n { x: 39.8, y: 41.2 },\r\n { x: 40.0, y: 41.6 },\r\n { x: 40.2, y: 42 },\r\n { x: 40.4, y: 42.4 },\r\n { x: 40.6, y: 42.8 },\r\n { x: 40.8, y: 43.3 },\r\n { x: 41, y: 43.7 },\r\n { x: 41.2, y: 44.1 },\r\n { x: 41.4, y: 44.5 },\r\n { x: 41.6, y: 45 },\r\n { x: 41.8, y: 45.4 },\r\n { x: 42, y: 45.9 },\r\n { x: 42.2, y: 46.3 },\r\n { x: 42.4, y: 46.7 },\r\n { x: 42.6, y: 47.2 },\r\n { x: 42.8, y: 47.6 },\r\n { x: 43, y: 48.1 },\r\n { x: 43.2, y: 48.5 },\r\n { x: 43.4, y: 49.0 },\r\n { x: 43.6, y: 49.4 },\r\n { x: 43.8, y: 49.9 },\r\n { x: 44.0, y: 50.4 },\r\n { x: 44.2, y: 50.8 },\r\n { x: 44.4, y: 51.3 },\r\n { x: 44.6, y: 51.7 },\r\n { x: 44.8, y: 52.2 },\r\n { x: 45.0, y: 52.7 },\r\n { x: 45.2, y: 53.2 },\r\n { x: 45.4, y: 53.6 },\r\n { x: 45.6, y: 54.1 },\r\n { x: 45.8, y: 54.6 },\r\n { x: 46.0, y: 55 },\r\n { x: 46.2, y: 55.5 },\r\n { x: 46.4, y: 56.0 },\r\n { x: 46.6, y: 56.5 },\r\n { x: 46.8, y: 57 },\r\n { x: 47.0, y: 57.5 },\r\n { x: 47.2, y: 58 },\r\n { x: 47.4, y: 58.5 },\r\n { x: 47.6, y: 59 },\r\n { x: 47.8, y: 59.5 },\r\n { x: 48, y: 60 },\r\n ];\r\n var t0_5 = [\r\n { x: 20.0, y: 10.1 },\r\n { x: 20.2, y: 10.3 },\r\n { x: 20.4, y: 10.5 },\r\n { x: 20.6, y: 10.8 },\r\n { x: 20.8, y: 11.0 },\r\n { x: 21.0, y: 11.2 },\r\n { x: 21.2, y: 11.4 },\r\n { x: 21.4, y: 11.6 },\r\n { x: 21.6, y: 11.8 },\r\n { x: 21.8, y: 12.1 },\r\n { x: 22.0, y: 12.2 },\r\n { x: 22.2, y: 12.4 },\r\n { x: 22.4, y: 12.7 },\r\n { x: 22.6, y: 12.9 },\r\n { x: 22.8, y: 13.1 },\r\n { x: 23.0, y: 13.4 },\r\n { x: 23.2, y: 13.6 },\r\n { x: 23.4, y: 13.8 },\r\n { x: 23.6, y: 14.1 },\r\n { x: 23.8, y: 14.3 },\r\n { x: 24.0, y: 14.6 },\r\n { x: 24.2, y: 14.8 },\r\n { x: 24.4, y: 15.1 },\r\n { x: 24.6, y: 15.3 },\r\n { x: 24.8, y: 15.6 },\r\n { x: 25.0, y: 15.9 },\r\n { x: 25.2, y: 16.1 },\r\n { x: 25.4, y: 16.4 },\r\n { x: 25.6, y: 16.6 },\r\n { x: 25.8, y: 16.9 },\r\n { x: 26, y: 17.2 },\r\n { x: 26.2, y: 17.4 },\r\n { x: 26.4, y: 17.6 },\r\n { x: 26.6, y: 17.9 },\r\n { x: 26.8, y: 18.2 },\r\n { x: 27, y: 18.5 },\r\n { x: 27.2, y: 18.7 },\r\n { x: 27.4, y: 19.0 },\r\n { x: 27.6, y: 19.3 },\r\n { x: 27.8, y: 19.6 },\r\n { x: 28.0, y: 19.7 },\r\n { x: 28.2, y: 20 },\r\n { x: 28.4, y: 20.3 },\r\n { x: 28.6, y: 20.6 },\r\n { x: 28.8, y: 20.9 },\r\n { x: 29, y: 21.1 },\r\n { x: 29.2, y: 21.4 },\r\n { x: 29.4, y: 21.7 },\r\n { x: 29.6, y: 22 },\r\n { x: 29.8, y: 22.3 },\r\n { x: 30, y: 22.6 },\r\n { x: 30.2, y: 22.9 },\r\n { x: 30.4, y: 23.2 },\r\n { x: 30.6, y: 23.6 },\r\n { x: 30.8, y: 23.9 },\r\n { x: 31, y: 24.2 },\r\n { x: 31.2, y: 24.4 },\r\n { x: 31.4, y: 24.8 },\r\n { x: 31.6, y: 25.1 },\r\n { x: 31.8, y: 25.4 },\r\n { x: 32, y: 25.7 },\r\n { x: 32.2, y: 26.1 },\r\n { x: 32.4, y: 26.4 },\r\n { x: 32.6, y: 26.8 },\r\n { x: 32.8, y: 27.1 },\r\n { x: 33, y: 27.4 },\r\n { x: 33.2, y: 27.7 },\r\n { x: 33.4, y: 28 },\r\n { x: 33.6, y: 28.4 },\r\n { x: 33.8, y: 28.7 },\r\n { x: 34, y: 29.1 },\r\n { x: 34.2, y: 29.4 },\r\n { x: 34.4, y: 29.8 },\r\n { x: 34.6, y: 30.2 },\r\n { x: 34.8, y: 30.5 },\r\n { x: 35, y: 30.8 },\r\n { x: 35.2, y: 31.1 },\r\n { x: 35.4, y: 31.5 },\r\n { x: 35.6, y: 31.9 },\r\n { x: 35.8, y: 32.3 },\r\n { x: 36, y: 32.6 },\r\n { x: 36.2, y: 33 },\r\n { x: 36.4, y: 33.4 },\r\n { x: 36.6, y: 33.8 },\r\n { x: 36.8, y: 34.1 },\r\n { x: 37, y: 34.4 },\r\n { x: 37.2, y: 34.8 },\r\n { x: 37.4, y: 35.2 },\r\n { x: 37.6, y: 35.6 },\r\n { x: 37.8, y: 36 },\r\n { x: 38, y: 36.4 },\r\n { x: 38.2, y: 36.8 },\r\n { x: 38.4, y: 37.2 },\r\n { x: 38.6, y: 37.5 },\r\n { x: 38.8, y: 37.9 },\r\n { x: 39.0, y: 38.2 },\r\n { x: 39.2, y: 38.5 },\r\n { x: 39.4, y: 38.8 },\r\n { x: 39.6, y: 39.1 },\r\n { x: 39.8, y: 39.6 },\r\n { x: 40.0, y: 39.9 },\r\n { x: 40.2, y: 40.3 },\r\n { x: 40.4, y: 40.7 },\r\n { x: 40.6, y: 41.1 },\r\n { x: 40.8, y: 41.6 },\r\n { x: 41, y: 42 },\r\n { x: 41.2, y: 42.3 },\r\n { x: 41.4, y: 42.7 },\r\n { x: 41.6, y: 43.2 },\r\n { x: 41.8, y: 43.6 },\r\n { x: 42, y: 44.1 },\r\n { x: 42.2, y: 44.4 },\r\n { x: 42.4, y: 44.8 },\r\n { x: 42.6, y: 45.3 },\r\n { x: 42.8, y: 45.7 },\r\n { x: 43, y: 46.2 },\r\n { x: 43.2, y: 46.6 },\r\n { x: 43.4, y: 47 },\r\n { x: 43.6, y: 47.4 },\r\n { x: 43.8, y: 47.9 },\r\n { x: 44.0, y: 48.4 },\r\n { x: 44.2, y: 48.8 },\r\n { x: 44.4, y: 49.2 },\r\n { x: 44.6, y: 49.6 },\r\n { x: 44.8, y: 50.1 },\r\n { x: 45.0, y: 50.6 },\r\n { x: 45.2, y: 51.1 },\r\n { x: 45.4, y: 51.5 },\r\n { x: 45.6, y: 51.9 },\r\n { x: 45.8, y: 52.4 },\r\n { x: 46.0, y: 52.8 },\r\n { x: 46.2, y: 53.3 },\r\n { x: 46.4, y: 53.8 },\r\n { x: 46.6, y: 54.2 },\r\n { x: 46.8, y: 54.7 },\r\n { x: 47.0, y: 55.2 },\r\n { x: 47.2, y: 55.7 },\r\n { x: 47.4, y: 56.2 },\r\n { x: 47.6, y: 56.6 },\r\n { x: 47.8, y: 57.1 },\r\n { x: 48, y: 57.6 },\r\n { x: 48.2, y: 58 },\r\n { x: 48.4, y: 58.6 },\r\n { x: 48.6, y: 59 },\r\n { x: 48.8, y: 59.5 },\r\n { x: 49, y: 60 },\r\n ];\r\n var t1_0 = [\r\n { x: 20.2, y: 10.0 },\r\n { x: 20.4, y: 10.2 },\r\n { x: 20.6, y: 10.4 },\r\n { x: 20.8, y: 10.6 },\r\n { x: 21.0, y: 10.8 },\r\n { x: 21.2, y: 11.0 },\r\n { x: 21.4, y: 11.2 },\r\n { x: 21.6, y: 11.4 },\r\n { x: 21.8, y: 11.7 },\r\n { x: 22.0, y: 11.9 },\r\n { x: 22.2, y: 12.1 },\r\n { x: 22.4, y: 12.4 },\r\n { x: 22.6, y: 12.5 },\r\n { x: 22.8, y: 12.7 },\r\n { x: 23.0, y: 13.0 },\r\n { x: 23.2, y: 13.2 },\r\n { x: 23.4, y: 13.4 },\r\n { x: 23.6, y: 13.7 },\r\n { x: 23.8, y: 13.9 },\r\n { x: 24.0, y: 14.2 },\r\n { x: 24.2, y: 14.3 },\r\n { x: 24.4, y: 14.6 },\r\n { x: 24.6, y: 14.8 },\r\n { x: 24.8, y: 15.1 },\r\n { x: 25.0, y: 15.4 },\r\n { x: 25.2, y: 15.6 },\r\n { x: 25.4, y: 15.9 },\r\n { x: 25.6, y: 16.1 },\r\n { x: 25.8, y: 16.3 },\r\n { x: 26, y: 16.6 },\r\n { x: 26.2, y: 16.9 },\r\n { x: 26.4, y: 17.1 },\r\n { x: 26.6, y: 17.4 },\r\n { x: 26.8, y: 17.7 },\r\n { x: 27, y: 18.0 },\r\n { x: 27.2, y: 18.1 },\r\n { x: 27.4, y: 18.4 },\r\n { x: 27.6, y: 18.7 },\r\n { x: 27.8, y: 19.0 },\r\n { x: 28.0, y: 19.2 },\r\n { x: 28.2, y: 19.5 },\r\n { x: 28.4, y: 19.7 },\r\n { x: 28.6, y: 20 },\r\n { x: 28.8, y: 20.0 },\r\n { x: 29, y: 20.5 },\r\n { x: 29.2, y: 20.8 },\r\n { x: 29.4, y: 21.1 },\r\n { x: 29.6, y: 21.3 },\r\n { x: 29.8, y: 21.6 },\r\n { x: 30, y: 21.9 },\r\n { x: 30.2, y: 22.2 },\r\n { x: 30.4, y: 22.5 },\r\n { x: 30.6, y: 22.8 },\r\n { x: 30.8, y: 23.1 },\r\n { x: 31, y: 23.4 },\r\n { x: 31.2, y: 23.7 },\r\n { x: 31.4, y: 24.1 },\r\n { x: 31.6, y: 24.3 },\r\n { x: 31.8, y: 24.6 },\r\n { x: 32, y: 24.9 },\r\n { x: 32.2, y: 25.3 },\r\n { x: 32.4, y: 25.6 },\r\n { x: 32.6, y: 25.9 },\r\n { x: 32.8, y: 26.2 },\r\n { x: 33, y: 26.5 },\r\n { x: 33.2, y: 26.8 },\r\n { x: 33.4, y: 27.1 },\r\n { x: 33.6, y: 27.4 },\r\n { x: 33.8, y: 27.7 },\r\n { x: 34, y: 28 },\r\n { x: 34.2, y: 28.3 },\r\n { x: 34.4, y: 28.6 },\r\n { x: 34.6, y: 28.9 },\r\n { x: 34.8, y: 29.2 },\r\n { x: 35, y: 29.6 },\r\n { x: 35.2, y: 29.9 },\r\n { x: 35.4, y: 30.2 },\r\n { x: 35.6, y: 30.6 },\r\n { x: 35.8, y: 31 },\r\n { x: 36, y: 31.2 },\r\n { x: 36.2, y: 31.6 },\r\n { x: 36.4, y: 32 },\r\n { x: 36.6, y: 32.4 },\r\n { x: 36.8, y: 32.7 },\r\n { x: 37, y: 33 },\r\n { x: 37.2, y: 33.4 },\r\n { x: 37.4, y: 33.8 },\r\n { x: 37.6, y: 34.1 },\r\n { x: 37.8, y: 34.5 },\r\n { x: 38, y: 34.9 },\r\n { x: 38.2, y: 35.2 },\r\n { x: 38.4, y: 35.6 },\r\n { x: 38.6, y: 36.0 },\r\n { x: 38.8, y: 36.4 },\r\n { x: 39.0, y: 36.7 },\r\n { x: 39.2, y: 37 },\r\n { x: 39.4, y: 37.3 },\r\n { x: 39.6, y: 37.6 },\r\n { x: 39.8, y: 38 },\r\n { x: 40.0, y: 38.3 },\r\n { x: 40.2, y: 38.6 },\r\n { x: 40.4, y: 39 },\r\n { x: 40.6, y: 39.4 },\r\n { x: 40.8, y: 39.8 },\r\n { x: 41, y: 40.2 },\r\n { x: 41.2, y: 40.6 },\r\n { x: 41.4, y: 40.9 },\r\n { x: 41.6, y: 41.4 },\r\n { x: 41.8, y: 41.8 },\r\n { x: 42, y: 42.2 },\r\n { x: 42.2, y: 42.6 },\r\n { x: 42.4, y: 43 },\r\n { x: 42.6, y: 43.4 },\r\n { x: 42.8, y: 43.8 },\r\n { x: 43, y: 44.2 },\r\n { x: 43.2, y: 44.6 },\r\n { x: 43.4, y: 45.1 },\r\n { x: 43.6, y: 45.4 },\r\n { x: 43.8, y: 45.9 },\r\n { x: 44.0, y: 46.4 },\r\n { x: 44.2, y: 46.7 },\r\n { x: 44.4, y: 47.2 },\r\n { x: 44.6, y: 47.6 },\r\n { x: 44.8, y: 48 },\r\n { x: 45.0, y: 48.5 },\r\n { x: 45.2, y: 48.9 },\r\n { x: 45.4, y: 49.4 },\r\n { x: 45.6, y: 49.8 },\r\n { x: 45.8, y: 50.2 },\r\n { x: 46.0, y: 50.6 },\r\n { x: 46.2, y: 51.1 },\r\n { x: 46.4, y: 51.5 },\r\n { x: 46.6, y: 52 },\r\n { x: 46.8, y: 52.4 },\r\n { x: 47.0, y: 52.9 },\r\n { x: 47.2, y: 53.4 },\r\n { x: 47.4, y: 53.8 },\r\n { x: 47.6, y: 54.3 },\r\n { x: 47.8, y: 54.7 },\r\n { x: 48, y: 55.2 },\r\n { x: 48.2, y: 55.7 },\r\n { x: 48.4, y: 56.1 },\r\n { x: 48.6, y: 56.6 },\r\n { x: 48.8, y: 57.1 },\r\n { x: 49, y: 57.5 },\r\n { x: 49.2, y: 58 },\r\n { x: 49.4, y: 58.5 },\r\n { x: 49.6, y: 58.9 },\r\n { x: 49.8, y: 59.4 },\r\n { x: 50, y: 59.9 },\r\n { x: 50.2, y: 60 },\r\n ];\r\n var t1_5 = [\r\n { x: 20.6, y: 10.1 },\r\n { x: 20.8, y: 10.3 },\r\n { x: 21.0, y: 10.5 },\r\n { x: 21.2, y: 10.7 },\r\n { x: 21.4, y: 10.9 },\r\n { x: 21.6, y: 11.0 },\r\n { x: 21.8, y: 11.3 },\r\n { x: 22.0, y: 11.5 },\r\n { x: 22.2, y: 11.7 },\r\n { x: 22.4, y: 12.0 },\r\n { x: 22.6, y: 12.1 },\r\n { x: 22.8, y: 12.3 },\r\n { x: 23.0, y: 12.6 },\r\n { x: 23.2, y: 12.8 },\r\n { x: 23.4, y: 13.0 },\r\n { x: 23.6, y: 13.2 },\r\n { x: 23.8, y: 13.4 },\r\n { x: 24.0, y: 13.7 },\r\n { x: 24.2, y: 13.9 },\r\n { x: 24.4, y: 14.2 },\r\n { x: 24.6, y: 14.4 },\r\n { x: 24.8, y: 14.6 },\r\n { x: 25.0, y: 14.9 },\r\n { x: 25.2, y: 15.1 },\r\n { x: 25.4, y: 15.4 },\r\n { x: 25.6, y: 15.7 },\r\n { x: 25.8, y: 15.8 },\r\n { x: 26, y: 16.1 },\r\n { x: 26.2, y: 16.4 },\r\n { x: 26.4, y: 16.6 },\r\n { x: 26.6, y: 16.8 },\r\n { x: 26.8, y: 17.1 },\r\n { x: 27, y: 17.4 },\r\n { x: 27.2, y: 17.6 },\r\n { x: 27.4, y: 17.8 },\r\n { x: 27.6, y: 18 },\r\n { x: 27.8, y: 18.2 },\r\n { x: 28.0, y: 18.4 },\r\n { x: 28.2, y: 18.6 },\r\n { x: 28.4, y: 18.8 },\r\n { x: 28.6, y: 19.1 },\r\n { x: 28.8, y: 19.4 },\r\n { x: 29, y: 19.6 },\r\n { x: 29.2, y: 19.9 },\r\n { x: 29.4, y: 20.2 },\r\n { x: 29.6, y: 20.4 },\r\n { x: 29.8, y: 20.7 },\r\n { x: 30, y: 21 },\r\n { x: 30.2, y: 21.2 },\r\n { x: 30.4, y: 21.5 },\r\n { x: 30.6, y: 21.9 },\r\n { x: 30.8, y: 22.1 },\r\n { x: 31, y: 22.4 },\r\n { x: 31.2, y: 22.7 },\r\n { x: 31.4, y: 23 },\r\n { x: 31.6, y: 23.3 },\r\n { x: 31.8, y: 23.6 },\r\n { x: 32, y: 23.9 },\r\n { x: 32.2, y: 24.2 },\r\n { x: 32.4, y: 24.5 },\r\n { x: 32.6, y: 24.8 },\r\n { x: 32.8, y: 25.1 },\r\n { x: 33, y: 25.4 },\r\n { x: 33.2, y: 25.7 },\r\n { x: 33.4, y: 26 },\r\n { x: 33.6, y: 26.4 },\r\n { x: 33.8, y: 26.6 },\r\n { x: 34, y: 26.8 },\r\n { x: 34.2, y: 27 },\r\n { x: 34.4, y: 27.2 },\r\n { x: 34.6, y: 27.4 },\r\n { x: 34.8, y: 27.6 },\r\n { x: 35, y: 28 },\r\n { x: 35.2, y: 28.2 },\r\n { x: 35.4, y: 28.6 },\r\n { x: 35.6, y: 29 },\r\n { x: 35.8, y: 29.3 },\r\n { x: 36, y: 29.6 },\r\n { x: 36.2, y: 29.9 },\r\n { x: 36.4, y: 30.3 },\r\n { x: 36.6, y: 30.6 },\r\n { x: 36.8, y: 31 },\r\n { x: 37, y: 31.2 },\r\n { x: 37.2, y: 31.6 },\r\n { x: 37.4, y: 31.9 },\r\n { x: 37.6, y: 32.3 },\r\n { x: 37.8, y: 32.6 },\r\n { x: 38, y: 33 },\r\n { x: 38.2, y: 33.4 },\r\n { x: 38.4, y: 33.7 },\r\n { x: 38.6, y: 34.1 },\r\n { x: 38.8, y: 34.4 },\r\n { x: 39.0, y: 34.7 },\r\n { x: 39.2, y: 35 },\r\n { x: 39.4, y: 35.3 },\r\n { x: 39.6, y: 35.6 },\r\n { x: 39.8, y: 35.9 },\r\n { x: 40.0, y: 36.2 },\r\n { x: 40.2, y: 36.5 },\r\n { x: 40.4, y: 36.9 },\r\n { x: 40.6, y: 37.2 },\r\n { x: 40.8, y: 37.7 },\r\n { x: 41, y: 38.0 },\r\n { x: 41.2, y: 38.4 },\r\n { x: 41.4, y: 38.7 },\r\n { x: 41.6, y: 39.2 },\r\n { x: 41.8, y: 39.5 },\r\n { x: 42, y: 39.9 },\r\n { x: 42.2, y: 40.3 },\r\n { x: 42.4, y: 40.6 },\r\n { x: 42.6, y: 41.1 },\r\n { x: 42.8, y: 41.4 },\r\n { x: 43, y: 41.8 },\r\n { x: 43.2, y: 42.2 },\r\n { x: 43.4, y: 42.6 },\r\n { x: 43.6, y: 43 },\r\n { x: 43.8, y: 43.4 },\r\n { x: 44.0, y: 43.8 },\r\n { x: 44.2, y: 44.2 },\r\n { x: 44.4, y: 44.6 },\r\n { x: 44.6, y: 45 },\r\n { x: 44.8, y: 45.4 },\r\n { x: 45.0, y: 45.8 },\r\n { x: 45.2, y: 46.3 },\r\n { x: 45.4, y: 46.6 },\r\n { x: 45.6, y: 47.1 },\r\n { x: 45.8, y: 47.5 },\r\n { x: 46.0, y: 47.9 },\r\n { x: 46.2, y: 48.3 },\r\n { x: 46.4, y: 48.7 },\r\n { x: 46.6, y: 49.2 },\r\n { x: 46.8, y: 49.6 },\r\n { x: 47.0, y: 50.0 },\r\n { x: 47.2, y: 50.5 },\r\n { x: 47.4, y: 50.9 },\r\n { x: 47.6, y: 51.3 },\r\n { x: 47.8, y: 51.8 },\r\n { x: 48, y: 52.2 },\r\n { x: 48.2, y: 52.6 },\r\n { x: 48.4, y: 53.1 },\r\n { x: 48.6, y: 53.5 },\r\n { x: 48.8, y: 54 },\r\n { x: 49, y: 54.4 },\r\n { x: 49.2, y: 54.8 },\r\n { x: 49.4, y: 55.3 },\r\n { x: 49.6, y: 55.7 },\r\n { x: 49.8, y: 56.2 },\r\n { x: 50, y: 56.7 },\r\n { x: 50.2, y: 57.1 },\r\n { x: 50.4, y: 57.6 },\r\n { x: 50.6, y: 58.0 },\r\n { x: 50.8, y: 58.5 },\r\n { x: 51, y: 59 },\r\n { x: 51.2, y: 59.4 },\r\n { x: 51.4, y: 59.9 },\r\n { x: 51.6, y: 60 },\r\n ];\r\n var t2_0 = [\r\n { x: 21.0, y: 10.0 },\r\n { x: 21.2, y: 10.2 },\r\n { x: 21.4, y: 10.4 },\r\n { x: 21.6, y: 10.6 },\r\n { x: 21.8, y: 10.8 },\r\n { x: 22.0, y: 11.0 },\r\n { x: 22.2, y: 11.2 },\r\n { x: 22.4, y: 11.4 },\r\n { x: 22.6, y: 11.6 },\r\n { x: 22.8, y: 11.8 },\r\n { x: 23.0, y: 12.1 },\r\n { x: 23.2, y: 12.2 },\r\n { x: 23.4, y: 12.4 },\r\n { x: 23.6, y: 12.7 },\r\n { x: 23.8, y: 12.8 },\r\n { x: 24.0, y: 13.1 },\r\n { x: 24.2, y: 13.3 },\r\n { x: 24.4, y: 13.6 },\r\n { x: 24.6, y: 13.7 },\r\n { x: 24.8, y: 14.0 },\r\n { x: 25.0, y: 14.3 },\r\n { x: 25.2, y: 14.4 },\r\n { x: 25.4, y: 14.7 },\r\n { x: 25.6, y: 14.9 },\r\n { x: 25.8, y: 15.1 },\r\n { x: 26, y: 15.4 },\r\n { x: 26.2, y: 15.7 },\r\n { x: 26.4, y: 15.8 },\r\n { x: 26.6, y: 16.1 },\r\n { x: 26.8, y: 16.4 },\r\n { x: 27, y: 16.6 },\r\n { x: 27.2, y: 16.8 },\r\n { x: 27.4, y: 17.0 },\r\n { x: 27.6, y: 17.2 },\r\n { x: 27.8, y: 17.4 },\r\n { x: 28.0, y: 17.6 },\r\n { x: 28.2, y: 17.8 },\r\n { x: 28.4, y: 18.0 },\r\n { x: 28.6, y: 18.2 },\r\n { x: 28.8, y: 18.5 },\r\n { x: 29, y: 18.7 },\r\n { x: 29.2, y: 19 },\r\n { x: 29.4, y: 19.3 },\r\n { x: 29.6, y: 19.5 },\r\n { x: 29.8, y: 19.8 },\r\n { x: 30, y: 20 },\r\n { x: 30.2, y: 20.3 },\r\n { x: 30.4, y: 20.6 },\r\n { x: 30.6, y: 20.9 },\r\n { x: 30.8, y: 21.2 },\r\n { x: 31, y: 21.4 },\r\n { x: 31.2, y: 21.7 },\r\n { x: 31.4, y: 22 },\r\n { x: 31.6, y: 22.3 },\r\n { x: 31.8, y: 22.5 },\r\n { x: 32, y: 22.8 },\r\n { x: 32.2, y: 23.1 },\r\n { x: 32.4, y: 23.4 },\r\n { x: 32.6, y: 23.7 },\r\n { x: 32.8, y: 24 },\r\n { x: 33, y: 24.3 },\r\n { x: 33.2, y: 24.6 },\r\n { x: 33.4, y: 24.9 },\r\n { x: 33.6, y: 25.2 },\r\n { x: 33.8, y: 25.4 },\r\n { x: 34, y: 25.6 },\r\n { x: 34.2, y: 25.8 },\r\n { x: 34.4, y: 26 },\r\n { x: 34.6, y: 26.2 },\r\n { x: 34.8, y: 26.4 },\r\n { x: 35, y: 26.7 },\r\n { x: 35.2, y: 27 },\r\n { x: 35.4, y: 27.3 },\r\n { x: 35.6, y: 27.6 },\r\n { x: 35.8, y: 28 },\r\n { x: 36, y: 28.2 },\r\n { x: 36.2, y: 28.6 },\r\n { x: 36.4, y: 28.9 },\r\n { x: 36.6, y: 29.2 },\r\n { x: 36.8, y: 29.6 },\r\n { x: 37, y: 29.8 },\r\n { x: 37.2, y: 30.2 },\r\n { x: 37.4, y: 30.5 },\r\n { x: 37.6, y: 30.8 },\r\n { x: 37.8, y: 31.2 },\r\n { x: 38, y: 31.5 },\r\n { x: 38.2, y: 31.8 },\r\n { x: 38.4, y: 32.1 },\r\n { x: 38.6, y: 32.4 },\r\n { x: 38.8, y: 32.7 },\r\n { x: 39.0, y: 33 },\r\n { x: 39.2, y: 33.3 },\r\n { x: 39.4, y: 33.6 },\r\n { x: 39.6, y: 33.9 },\r\n { x: 39.8, y: 34.2 },\r\n { x: 40.0, y: 34.5 },\r\n { x: 40.2, y: 34.8 },\r\n { x: 40.4, y: 35.1 },\r\n { x: 40.6, y: 35.4 },\r\n { x: 40.8, y: 35.7 },\r\n { x: 41, y: 36.0 },\r\n { x: 41.2, y: 36.3 },\r\n { x: 41.4, y: 36.6 },\r\n { x: 41.6, y: 36.9 },\r\n { x: 41.8, y: 37.2 },\r\n { x: 42, y: 37.6 },\r\n { x: 42.2, y: 38.0 },\r\n { x: 42.4, y: 38.3 },\r\n { x: 42.6, y: 38.7 },\r\n { x: 42.8, y: 39.0 },\r\n { x: 43, y: 39.4 },\r\n { x: 43.2, y: 39.8 },\r\n { x: 43.4, y: 40.2 },\r\n { x: 43.6, y: 40.5 },\r\n { x: 43.8, y: 40.9 },\r\n { x: 44.0, y: 41.3 },\r\n { x: 44.2, y: 41.7 },\r\n { x: 44.4, y: 42.1 },\r\n { x: 44.6, y: 42.4 },\r\n { x: 44.8, y: 42.8 },\r\n { x: 45.0, y: 43.2 },\r\n { x: 45.2, y: 43.6 },\r\n { x: 45.4, y: 44 },\r\n { x: 45.6, y: 44.4 },\r\n { x: 45.8, y: 44.8 },\r\n { x: 46.0, y: 45.2 },\r\n { x: 46.2, y: 45.5 },\r\n { x: 46.4, y: 45.9 },\r\n { x: 46.6, y: 46.3 },\r\n { x: 46.8, y: 46.7 },\r\n { x: 47.0, y: 47.2 },\r\n { x: 47.2, y: 47.6 },\r\n { x: 47.4, y: 48 },\r\n { x: 47.6, y: 48.4 },\r\n { x: 47.8, y: 48.8 },\r\n { x: 48, y: 49.2 },\r\n { x: 48.2, y: 49.6 },\r\n { x: 48.4, y: 50 },\r\n { x: 48.6, y: 50.4 },\r\n { x: 48.8, y: 50.9 },\r\n { x: 49, y: 51.3 },\r\n { x: 49.2, y: 51.7 },\r\n { x: 49.4, y: 52.1 },\r\n { x: 49.6, y: 52.5 },\r\n { x: 49.8, y: 53.0 },\r\n { x: 50, y: 53.4 },\r\n { x: 50.2, y: 53.8 },\r\n { x: 50.4, y: 54.3 },\r\n { x: 50.6, y: 54.7 },\r\n { x: 50.8, y: 55.1 },\r\n { x: 51, y: 55.6 },\r\n { x: 51.2, y: 56 },\r\n { x: 51.4, y: 56.4 },\r\n { x: 51.6, y: 56.9 },\r\n { x: 51.8, y: 57.3 },\r\n { x: 52, y: 57.8 },\r\n { x: 52.2, y: 58.2 },\r\n { x: 52.4, y: 58.7 },\r\n { x: 52.8, y: 59.6 },\r\n { x: 53.0, y: 60 },\r\n ];\r\n var t2_5 = [\r\n { x: 21.4, y: 10 },\r\n { x: 21.6, y: 10.2 },\r\n { x: 21.8, y: 10.5 },\r\n { x: 22.0, y: 10.6 },\r\n { x: 22.2, y: 10.8 },\r\n { x: 22.4, y: 11.0 },\r\n { x: 22.6, y: 11.2 },\r\n { x: 22.8, y: 11.4 },\r\n { x: 23.0, y: 11.6 },\r\n { x: 23.2, y: 11.8 },\r\n { x: 23.4, y: 12.0 },\r\n { x: 23.6, y: 12.2 },\r\n { x: 23.8, y: 12.4 },\r\n { x: 24.0, y: 12.7 },\r\n { x: 24.2, y: 12.8 },\r\n { x: 24.4, y: 13.1 },\r\n { x: 24.6, y: 13.3 },\r\n { x: 24.8, y: 13.5 },\r\n { x: 25.0, y: 13.8 },\r\n { x: 25.2, y: 13.9 },\r\n { x: 25.4, y: 14.2 },\r\n { x: 25.6, y: 14.4 },\r\n { x: 25.8, y: 14.6 },\r\n { x: 26, y: 14.9 },\r\n { x: 26.2, y: 15.1 },\r\n { x: 26.4, y: 15.3 },\r\n { x: 26.6, y: 15.6 },\r\n { x: 26.8, y: 15.8 },\r\n { x: 27, y: 16.1 },\r\n { x: 27.2, y: 16.2 },\r\n { x: 27.4, y: 16.4 },\r\n { x: 27.6, y: 16.6 },\r\n { x: 27.8, y: 16.8 },\r\n { x: 28.0, y: 17.0 },\r\n { x: 28.2, y: 17.2 },\r\n { x: 28.4, y: 17.4 },\r\n { x: 28.6, y: 17.6 },\r\n { x: 28.8, y: 17.8 },\r\n { x: 29, y: 18.1 },\r\n { x: 29.2, y: 18.3 },\r\n { x: 29.4, y: 18.6 },\r\n { x: 29.6, y: 18.8 },\r\n { x: 29.8, y: 19.1 },\r\n { x: 30, y: 19.3 },\r\n { x: 30.2, y: 19.6 },\r\n { x: 30.4, y: 19.8 },\r\n { x: 30.6, y: 20.2 },\r\n { x: 30.8, y: 20.4 },\r\n { x: 31, y: 20.7 },\r\n { x: 31.2, y: 20.9 },\r\n { x: 31.4, y: 21.2 },\r\n { x: 31.6, y: 21.5 },\r\n { x: 31.8, y: 21.7 },\r\n { x: 32, y: 22 },\r\n { x: 32.2, y: 22.3 },\r\n { x: 32.4, y: 22.6 },\r\n { x: 32.6, y: 22.9 },\r\n { x: 32.8, y: 23.2 },\r\n { x: 33, y: 23.4 },\r\n { x: 33.2, y: 23.7 },\r\n { x: 33.4, y: 24 },\r\n { x: 33.6, y: 24.2 },\r\n { x: 33.8, y: 24.4 },\r\n { x: 34, y: 24.6 },\r\n { x: 34.2, y: 24.8 },\r\n { x: 34.4, y: 25 },\r\n { x: 34.6, y: 25.2 },\r\n { x: 34.8, y: 25.4 },\r\n { x: 35, y: 25.8 },\r\n { x: 35.2, y: 26 },\r\n { x: 35.4, y: 26.3 },\r\n { x: 35.6, y: 26.6 },\r\n { x: 35.8, y: 27 },\r\n { x: 36.0, y: 27.2 },\r\n { x: 36.2, y: 27.5 },\r\n { x: 36.4, y: 27.9 },\r\n { x: 36.6, y: 28.2 },\r\n { x: 36.8, y: 28.5 },\r\n { x: 37, y: 28.8 },\r\n { x: 37.2, y: 29.1 },\r\n { x: 37.4, y: 29.4 },\r\n { x: 37.6, y: 29.7 },\r\n { x: 37.8, y: 30 },\r\n { x: 38, y: 30.3 },\r\n { x: 38.2, y: 30.6 },\r\n { x: 38.4, y: 30.9 },\r\n { x: 38.6, y: 31.2 },\r\n { x: 38.8, y: 31.5 },\r\n { x: 39.0, y: 31.8 },\r\n { x: 39.2, y: 32.1 },\r\n { x: 39.4, y: 32.4 },\r\n { x: 39.6, y: 32.7 },\r\n { x: 39.8, y: 33.0 },\r\n { x: 40.0, y: 33.3 },\r\n { x: 40.2, y: 33.6 },\r\n { x: 40.4, y: 33.9 },\r\n { x: 40.6, y: 34.2 },\r\n { x: 40.8, y: 34.5 },\r\n { x: 41, y: 34.8 },\r\n { x: 41.2, y: 35.1 },\r\n { x: 41.4, y: 35.4 },\r\n { x: 41.6, y: 35.7 },\r\n { x: 41.8, y: 36 },\r\n { x: 42, y: 36.3 },\r\n { x: 42.2, y: 36.6 },\r\n { x: 42.4, y: 36.9 },\r\n { x: 42.6, y: 37.3 },\r\n { x: 42.8, y: 37.6 },\r\n { x: 43, y: 38.0 },\r\n { x: 43.2, y: 38.3 },\r\n { x: 43.4, y: 38.7 },\r\n { x: 43.6, y: 39 },\r\n { x: 43.8, y: 39.4 },\r\n { x: 44.0, y: 39.8 },\r\n { x: 44.2, y: 40.1 },\r\n { x: 44.4, y: 40.5 },\r\n { x: 44.6, y: 40.8 },\r\n { x: 44.8, y: 41.2 },\r\n { x: 45.0, y: 41.6 },\r\n { x: 45.2, y: 42 },\r\n { x: 45.4, y: 42.3 },\r\n { x: 45.6, y: 42.7 },\r\n { x: 45.8, y: 43.1 },\r\n { x: 46.0, y: 43.5 },\r\n { x: 46.2, y: 43.8 },\r\n { x: 46.4, y: 44.2 },\r\n { x: 46.6, y: 44.6 },\r\n { x: 46.8, y: 45.0 },\r\n { x: 47.0, y: 45.2 },\r\n { x: 47.2, y: 45.8 },\r\n { x: 47.4, y: 46.2 },\r\n { x: 47.6, y: 46.6 },\r\n { x: 47.8, y: 47 },\r\n { x: 48, y: 47.4 },\r\n { x: 48.2, y: 47.8 },\r\n { x: 48.4, y: 48.2 },\r\n { x: 48.6, y: 48.6 },\r\n { x: 48.8, y: 49.0 },\r\n { x: 49, y: 49.4 },\r\n { x: 49.2, y: 49.8 },\r\n { x: 49.4, y: 50.2 },\r\n { x: 49.6, y: 50.6 },\r\n { x: 49.8, y: 51 },\r\n { x: 50, y: 51.4 },\r\n { x: 50.2, y: 51.9 },\r\n { x: 50.4, y: 52.3 },\r\n { x: 50.6, y: 52.7 },\r\n { x: 50.8, y: 53.1 },\r\n { x: 51, y: 53.5 },\r\n { x: 51.2, y: 54 },\r\n { x: 51.4, y: 54.4 },\r\n { x: 51.6, y: 54.8 },\r\n { x: 51.8, y: 55.2 },\r\n { x: 52, y: 55.7 },\r\n { x: 52.2, y: 56.1 },\r\n { x: 52.4, y: 56.5 },\r\n { x: 52.8, y: 57.4 },\r\n { x: 53.0, y: 57.8 },\r\n { x: 53.2, y: 58.3 },\r\n { x: 53.4, y: 58.7 },\r\n { x: 53.6, y: 59.2 },\r\n { x: 53.8, y: 59.6 },\r\n { x: 54.0, y: 60 },\r\n ];\r\n var t3_0 = [\r\n { x: 21.8, y: 10.1 },\r\n { x: 22.0, y: 10.2 },\r\n { x: 22.2, y: 10.4 },\r\n { x: 22.4, y: 10.7 },\r\n { x: 22.6, y: 10.8 },\r\n { x: 22.8, y: 11.0 },\r\n { x: 23.0, y: 11.2 },\r\n { x: 23.2, y: 11.4 },\r\n { x: 23.4, y: 11.6 },\r\n { x: 23.6, y: 11.8 },\r\n { x: 23.8, y: 12.0 },\r\n { x: 24.0, y: 12.2 },\r\n { x: 24.2, y: 12.4 },\r\n { x: 24.4, y: 12.6 },\r\n { x: 24.6, y: 12.8 },\r\n { x: 24.8, y: 13.0 },\r\n { x: 25.0, y: 13.3 },\r\n { x: 25.2, y: 13.4 },\r\n { x: 25.4, y: 13.7 },\r\n { x: 25.6, y: 13.9 },\r\n { x: 25.8, y: 14.1 },\r\n { x: 26, y: 14.4 },\r\n { x: 26.2, y: 14.6 },\r\n { x: 26.4, y: 14.8 },\r\n { x: 26.6, y: 15 },\r\n { x: 26.8, y: 15.3 },\r\n { x: 27, y: 15.5 },\r\n { x: 27.2, y: 15.7 },\r\n { x: 27.4, y: 15.9 },\r\n { x: 27.6, y: 16.1 },\r\n { x: 27.8, y: 16.3 },\r\n { x: 28.0, y: 16.5 },\r\n { x: 28.2, y: 16.7 },\r\n { x: 28.4, y: 16.9 },\r\n { x: 28.6, y: 17.1 },\r\n { x: 28.8, y: 17.3 },\r\n { x: 29, y: 17.5 },\r\n { x: 29.2, y: 17.7 },\r\n { x: 29.4, y: 17.9 },\r\n { x: 29.6, y: 18.2 },\r\n { x: 29.8, y: 18.4 },\r\n { x: 30, y: 18.6 },\r\n { x: 30.2, y: 18.9 },\r\n { x: 30.4, y: 19.1 },\r\n { x: 30.6, y: 19.4 },\r\n { x: 30.8, y: 19.7 },\r\n { x: 31, y: 19.9 },\r\n { x: 31.2, y: 20.2 },\r\n { x: 31.4, y: 20.5 },\r\n { x: 31.6, y: 20.7 },\r\n { x: 31.8, y: 21 },\r\n { x: 32, y: 21.2 },\r\n { x: 32.2, y: 21.5 },\r\n { x: 32.4, y: 21.8 },\r\n { x: 32.6, y: 22.1 },\r\n { x: 32.8, y: 22.3 },\r\n { x: 33, y: 22.6 },\r\n { x: 33.2, y: 22.9 },\r\n { x: 33.4, y: 23.1 },\r\n { x: 33.6, y: 23.3 },\r\n { x: 33.8, y: 23.5 },\r\n { x: 34, y: 23.7 },\r\n { x: 34.2, y: 23.9 },\r\n { x: 34.4, y: 24.1 },\r\n { x: 34.6, y: 24.3 },\r\n { x: 34.8, y: 24.5 },\r\n { x: 35, y: 24.8 },\r\n { x: 35.2, y: 25 },\r\n { x: 35.4, y: 25.4 },\r\n { x: 35.6, y: 25.7 },\r\n { x: 35.8, y: 26 },\r\n { x: 36, y: 26.2 },\r\n { x: 36.2, y: 26.5 },\r\n { x: 36.4, y: 26.8 },\r\n { x: 36.6, y: 27.1 },\r\n { x: 36.8, y: 27.5 },\r\n { x: 37, y: 27.7 },\r\n { x: 37.2, y: 28 },\r\n { x: 37.4, y: 28.3 },\r\n { x: 37.6, y: 28.6 },\r\n { x: 37.8, y: 28.9 },\r\n { x: 38, y: 29.2 },\r\n { x: 38.2, y: 29.5 },\r\n { x: 38.4, y: 29.8 },\r\n { x: 38.6, y: 30.1 },\r\n { x: 38.8, y: 30.4 },\r\n { x: 39.0, y: 30.6 },\r\n { x: 39.2, y: 30.8 },\r\n { x: 39.4, y: 31 },\r\n { x: 39.6, y: 31.2 },\r\n { x: 39.8, y: 31.4 },\r\n { x: 40.0, y: 31.7 },\r\n { x: 40.2, y: 32 },\r\n { x: 40.4, y: 32.3 },\r\n { x: 40.6, y: 32.6 },\r\n { x: 40.8, y: 32.9 },\r\n { x: 41, y: 33.2 },\r\n { x: 41.2, y: 33.5 },\r\n { x: 41.4, y: 33.8 },\r\n { x: 41.6, y: 34.2 },\r\n { x: 41.8, y: 34.5 },\r\n { x: 42, y: 34.9 },\r\n { x: 42.2, y: 35.2 },\r\n { x: 42.4, y: 35.5 },\r\n { x: 42.6, y: 35.9 },\r\n { x: 42.8, y: 36.2 },\r\n { x: 43, y: 36.6 },\r\n { x: 43.2, y: 36.9 },\r\n { x: 43.4, y: 37.2 },\r\n { x: 43.6, y: 37.5 },\r\n { x: 43.8, y: 37.9 },\r\n { x: 44.0, y: 38.3 },\r\n { x: 44.2, y: 38.6 },\r\n { x: 44.4, y: 39 },\r\n { x: 44.6, y: 39.3 },\r\n { x: 44.8, y: 39.7 },\r\n { x: 45.0, y: 40.1 },\r\n { x: 45.2, y: 40.4 },\r\n { x: 45.4, y: 40.7 },\r\n { x: 45.6, y: 41.1 },\r\n { x: 45.8, y: 41.5 },\r\n { x: 46.0, y: 41.9 },\r\n { x: 46.2, y: 42.2 },\r\n { x: 46.4, y: 42.6 },\r\n { x: 46.6, y: 42.9 },\r\n { x: 46.8, y: 43.3 },\r\n { x: 47.0, y: 43.7 },\r\n { x: 47.2, y: 44.1 },\r\n { x: 47.4, y: 44.5 },\r\n { x: 47.6, y: 44.8 },\r\n { x: 47.8, y: 45.2 },\r\n { x: 48, y: 45.6 },\r\n { x: 48.2, y: 46.0 },\r\n { x: 48.4, y: 46.4 },\r\n { x: 48.6, y: 46.7 },\r\n { x: 48.8, y: 47.1 },\r\n { x: 49, y: 47.5 },\r\n { x: 49.2, y: 47.9 },\r\n { x: 49.4, y: 48.3 },\r\n { x: 49.6, y: 48.7 },\r\n { x: 49.8, y: 49.1 },\r\n { x: 50, y: 49.5 },\r\n { x: 50.2, y: 49.9 },\r\n { x: 50.4, y: 50.3 },\r\n { x: 50.6, y: 50.7 },\r\n { x: 50.8, y: 51.1 },\r\n { x: 51, y: 51.5 },\r\n { x: 51.2, y: 51.9 },\r\n { x: 51.4, y: 52.3 },\r\n { x: 51.6, y: 52.7 },\r\n { x: 51.8, y: 53.1 },\r\n { x: 52, y: 53.6 },\r\n { x: 52.2, y: 54 },\r\n { x: 52.4, y: 54.4 },\r\n { x: 52.8, y: 55.2 },\r\n { x: 53.0, y: 55.6 },\r\n { x: 53.2, y: 56.1 },\r\n { x: 53.4, y: 56.5 },\r\n { x: 53.6, y: 56.9 },\r\n { x: 53.8, y: 57.3 },\r\n { x: 54.0, y: 57.8 },\r\n { x: 54.2, y: 58.2 },\r\n { x: 54.4, y: 58.6 },\r\n { x: 54.6, y: 59.1 },\r\n { x: 54.8, y: 59.5 },\r\n { x: 55, y: 59.9 },\r\n { x: 55.2, y: 60 },\r\n ];\r\n var t3_5 = [\r\n { x: 22.2, y: 10.0 },\r\n { x: 22.4, y: 10.3 },\r\n { x: 22.6, y: 10.4 },\r\n { x: 22.8, y: 10.6 },\r\n { x: 23.0, y: 10.8 },\r\n { x: 23.2, y: 11.0 },\r\n { x: 23.4, y: 11.2 },\r\n { x: 23.6, y: 11.4 },\r\n { x: 23.8, y: 11.5 },\r\n { x: 24.0, y: 11.8 },\r\n { x: 24.2, y: 11.9 },\r\n { x: 24.4, y: 12.2 },\r\n { x: 24.6, y: 12.3 },\r\n { x: 24.8, y: 12.6 },\r\n { x: 25.0, y: 12.8 },\r\n { x: 25.2, y: 13.0 },\r\n { x: 25.4, y: 13.2 },\r\n { x: 25.6, y: 13.4 },\r\n { x: 25.8, y: 13.6 },\r\n { x: 26, y: 13.8 },\r\n { x: 26.2, y: 14.0 },\r\n { x: 26.4, y: 14.2 },\r\n { x: 26.6, y: 14.4 },\r\n { x: 26.8, y: 14.6 },\r\n { x: 27, y: 14.8 },\r\n { x: 27.2, y: 15.0 },\r\n { x: 27.4, y: 15.2 },\r\n { x: 27.6, y: 15.4 },\r\n { x: 27.8, y: 15.6 },\r\n { x: 28.0, y: 15.8 },\r\n { x: 28.2, y: 16 },\r\n { x: 28.4, y: 16.2 },\r\n { x: 28.6, y: 16.4 },\r\n { x: 28.8, y: 16.6 },\r\n { x: 29, y: 16.8 },\r\n { x: 29.2, y: 17 },\r\n { x: 29.4, y: 17.2 },\r\n { x: 29.6, y: 17.5 },\r\n { x: 29.8, y: 17.7 },\r\n { x: 30, y: 17.9 },\r\n { x: 30.2, y: 18.2 },\r\n { x: 30.4, y: 18.4 },\r\n { x: 30.6, y: 18.7 },\r\n { x: 30.8, y: 18.9 },\r\n { x: 31, y: 19.2 },\r\n { x: 31.2, y: 19.4 },\r\n { x: 31.4, y: 19.7 },\r\n { x: 31.6, y: 19.9 },\r\n { x: 31.8, y: 20.2 },\r\n { x: 32, y: 20.4 },\r\n { x: 32.2, y: 20.7 },\r\n { x: 32.4, y: 20.9 },\r\n { x: 32.6, y: 21.3 },\r\n { x: 32.8, y: 21.5 },\r\n { x: 33, y: 21.7 },\r\n { x: 33.2, y: 22 },\r\n { x: 33.4, y: 22.3 },\r\n { x: 33.6, y: 22.6 },\r\n { x: 33.8, y: 22.8 },\r\n { x: 34, y: 23 },\r\n { x: 34.2, y: 23.2 },\r\n { x: 34.4, y: 23.4 },\r\n { x: 34.6, y: 23.6 },\r\n { x: 34.8, y: 23.8 },\r\n { x: 35, y: 24 },\r\n { x: 35.2, y: 24.2 },\r\n { x: 35.4, y: 24.4 },\r\n { x: 35.6, y: 24.7 },\r\n { x: 35.8, y: 25 },\r\n { x: 36, y: 25.2 },\r\n { x: 36.2, y: 25.5 },\r\n { x: 36.4, y: 25.8 },\r\n { x: 36.6, y: 26.1 },\r\n { x: 36.8, y: 26.4 },\r\n { x: 37, y: 26.6 },\r\n { x: 37.2, y: 26.9 },\r\n { x: 37.4, y: 27.2 },\r\n { x: 37.6, y: 27.5 },\r\n { x: 37.8, y: 27.8 },\r\n { x: 38, y: 28.1 },\r\n { x: 38.2, y: 28.4 },\r\n { x: 38.4, y: 28.7 },\r\n { x: 38.6, y: 29 },\r\n { x: 38.8, y: 29.3 },\r\n { x: 39.0, y: 29.6 },\r\n { x: 39.2, y: 29.8 },\r\n { x: 39.4, y: 30.0 },\r\n { x: 39.6, y: 30.2 },\r\n { x: 39.8, y: 30.5 },\r\n { x: 40.0, y: 30.8 },\r\n { x: 40.2, y: 31.1 },\r\n { x: 40.4, y: 31.4 },\r\n { x: 40.6, y: 31.7 },\r\n { x: 40.8, y: 32 },\r\n { x: 41, y: 32.3 },\r\n { x: 41.2, y: 32.6 },\r\n { x: 41.4, y: 32.9 },\r\n { x: 41.6, y: 33.3 },\r\n { x: 41.8, y: 33.6 },\r\n { x: 42, y: 34 },\r\n { x: 42.2, y: 34.3 },\r\n { x: 42.4, y: 34.6 },\r\n { x: 42.6, y: 34.9 },\r\n { x: 42.8, y: 35.2 },\r\n { x: 43, y: 35.6 },\r\n { x: 43.2, y: 35.9 },\r\n { x: 43.4, y: 36.3 },\r\n { x: 43.6, y: 36.6 },\r\n { x: 43.8, y: 36.9 },\r\n { x: 44.0, y: 37.3 },\r\n { x: 44.2, y: 37.6 },\r\n { x: 44.4, y: 38 },\r\n { x: 44.6, y: 38.3 },\r\n { x: 44.8, y: 38.6 },\r\n { x: 45.0, y: 39.0 },\r\n { x: 45.2, y: 39.4 },\r\n { x: 45.4, y: 39.7 },\r\n { x: 45.6, y: 40.0 },\r\n { x: 45.8, y: 40.4 },\r\n { x: 46.0, y: 40.8 },\r\n { x: 46.2, y: 41.1 },\r\n { x: 46.4, y: 41.4 },\r\n { x: 46.6, y: 41.8 },\r\n { x: 46.8, y: 42.2 },\r\n { x: 47.0, y: 42.6 },\r\n { x: 47.2, y: 42.9 },\r\n { x: 47.4, y: 43.3 },\r\n { x: 47.6, y: 43.7 },\r\n { x: 47.8, y: 44 },\r\n { x: 48, y: 44.4 },\r\n { x: 48.2, y: 44.8 },\r\n { x: 48.4, y: 45.1 },\r\n { x: 48.6, y: 45.5 },\r\n { x: 48.8, y: 45.9 },\r\n { x: 49, y: 46.2 },\r\n { x: 49.2, y: 46.6 },\r\n { x: 49.4, y: 47.0 },\r\n { x: 49.6, y: 47.4 },\r\n { x: 49.8, y: 47.8 },\r\n { x: 50, y: 48.2 },\r\n { x: 50.2, y: 48.5 },\r\n { x: 50.4, y: 49.0 },\r\n { x: 50.6, y: 49.4 },\r\n { x: 50.8, y: 49.8 },\r\n { x: 51, y: 50.1 },\r\n { x: 51.2, y: 50.5 },\r\n { x: 51.4, y: 50.9 },\r\n { x: 51.6, y: 51.3 },\r\n { x: 51.8, y: 51.7 },\r\n { x: 52, y: 52.1 },\r\n { x: 52.2, y: 52.5 },\r\n { x: 52.4, y: 53.0 },\r\n { x: 52.8, y: 53.8 },\r\n { x: 53.0, y: 54.2 },\r\n { x: 53.2, y: 54.6 },\r\n { x: 53.4, y: 55 },\r\n { x: 53.6, y: 55.4 },\r\n { x: 53.8, y: 55.8 },\r\n { x: 54.0, y: 56.3 },\r\n { x: 54.2, y: 56.7 },\r\n { x: 54.4, y: 57.1 },\r\n { x: 54.6, y: 57.5 },\r\n { x: 54.8, y: 57.9 },\r\n { x: 55, y: 58.4 },\r\n { x: 55.2, y: 58.8 },\r\n { x: 55.4, y: 59.2 },\r\n { x: 55.6, y: 59.7 },\r\n { x: 55.8, y: 60 },\r\n ];\r\n var t4_0 = [\r\n { x: 22.4, y: 10 },\r\n { x: 22.6, y: 10.2 },\r\n { x: 22.8, y: 10.3 },\r\n { x: 23.0, y: 10.5 },\r\n { x: 23.2, y: 10.7 },\r\n { x: 23.4, y: 10.9 },\r\n { x: 23.6, y: 11.1 },\r\n { x: 23.8, y: 11.2 },\r\n { x: 24.0, y: 11.5 },\r\n { x: 24.2, y: 11.6 },\r\n { x: 24.4, y: 11.9 },\r\n { x: 24.6, y: 12 },\r\n { x: 24.8, y: 12.2 },\r\n { x: 25.0, y: 12.5 },\r\n { x: 25.2, y: 12.6 },\r\n { x: 25.4, y: 12.9 },\r\n { x: 25.6, y: 13.0 },\r\n { x: 25.8, y: 13.2 },\r\n { x: 26, y: 13.5 },\r\n { x: 26.2, y: 13.7 },\r\n { x: 26.4, y: 13.9 },\r\n { x: 26.6, y: 14.1 },\r\n { x: 26.8, y: 14.3 },\r\n { x: 27, y: 14.6 },\r\n { x: 27.2, y: 14.7 },\r\n { x: 27.4, y: 14.9 },\r\n { x: 27.6, y: 15.1 },\r\n { x: 27.8, y: 15.3 },\r\n { x: 28.0, y: 15.4 },\r\n { x: 28.2, y: 15.6 },\r\n { x: 28.4, y: 15.8 },\r\n { x: 28.6, y: 16 },\r\n { x: 28.8, y: 16.2 },\r\n { x: 29, y: 16.4 },\r\n { x: 29.2, y: 16.6 },\r\n { x: 29.4, y: 16.8 },\r\n { x: 29.6, y: 17 },\r\n { x: 29.8, y: 17.2 },\r\n { x: 30, y: 17.4 },\r\n { x: 30.2, y: 17.6 },\r\n { x: 30.4, y: 17.8 },\r\n { x: 30.6, y: 18 },\r\n { x: 30.8, y: 18.2 },\r\n { x: 31, y: 18.4 },\r\n { x: 31.2, y: 18.6 },\r\n { x: 31.4, y: 18.9 },\r\n { x: 31.6, y: 19.2 },\r\n { x: 31.8, y: 19.4 },\r\n { x: 32, y: 19.6 },\r\n { x: 32.2, y: 19.9 },\r\n { x: 32.4, y: 20.1 },\r\n { x: 32.6, y: 20.4 },\r\n { x: 32.8, y: 20.6 },\r\n { x: 33, y: 20.9 },\r\n { x: 33.2, y: 21.2 },\r\n { x: 33.4, y: 21.4 },\r\n { x: 33.6, y: 21.7 },\r\n { x: 33.8, y: 21.9 },\r\n { x: 34, y: 22.1 },\r\n { x: 34.2, y: 22.3 },\r\n { x: 34.4, y: 22.5 },\r\n { x: 34.6, y: 22.7 },\r\n { x: 34.8, y: 22.9 },\r\n { x: 35, y: 23.2 },\r\n { x: 35.2, y: 23.4 },\r\n { x: 35.4, y: 23.7 },\r\n { x: 35.6, y: 24 },\r\n { x: 35.8, y: 24.3 },\r\n { x: 36, y: 24.5 },\r\n { x: 36.2, y: 24.8 },\r\n { x: 36.4, y: 25.1 },\r\n { x: 36.6, y: 25.4 },\r\n { x: 36.8, y: 25.7 },\r\n { x: 37, y: 25.9 },\r\n { x: 37.2, y: 26.2 },\r\n { x: 37.4, y: 26.6 },\r\n { x: 37.6, y: 26.8 },\r\n { x: 37.8, y: 27.1 },\r\n { x: 38, y: 27.4 },\r\n { x: 38.2, y: 27.7 },\r\n { x: 38.4, y: 28.0 },\r\n { x: 38.6, y: 28.3 },\r\n { x: 38.8, y: 28.5 },\r\n { x: 39.0, y: 28.8 },\r\n { x: 39.2, y: 29 },\r\n { x: 39.4, y: 29.2 },\r\n { x: 39.6, y: 29.4 },\r\n { x: 39.8, y: 29.7 },\r\n { x: 40.0, y: 30.0 },\r\n { x: 40.2, y: 30.2 },\r\n { x: 40.4, y: 30.5 },\r\n { x: 40.6, y: 30.8 },\r\n { x: 40.8, y: 31.2 },\r\n { x: 41, y: 31.5 },\r\n { x: 41.2, y: 31.8 },\r\n { x: 41.4, y: 32 },\r\n { x: 41.6, y: 32.4 },\r\n { x: 41.8, y: 32.7 },\r\n { x: 42, y: 33.0 },\r\n { x: 42.2, y: 33.3 },\r\n { x: 42.4, y: 33.6 },\r\n { x: 42.6, y: 34 },\r\n { x: 42.8, y: 34.3 },\r\n { x: 43, y: 34.6 },\r\n { x: 43.2, y: 34.9 },\r\n { x: 43.4, y: 35.3 },\r\n { x: 43.6, y: 35.6 },\r\n { x: 43.8, y: 35.9 },\r\n { x: 44.0, y: 36.3 },\r\n { x: 44.2, y: 36.6 },\r\n { x: 44.4, y: 36.9 },\r\n { x: 44.6, y: 37.2 },\r\n { x: 44.8, y: 37.6 },\r\n { x: 45.0, y: 37.9 },\r\n { x: 45.2, y: 38.3 },\r\n { x: 45.4, y: 38.6 },\r\n { x: 45.6, y: 39.0 },\r\n { x: 45.8, y: 39.3 },\r\n { x: 46.0, y: 39.7 },\r\n { x: 46.2, y: 40.0 },\r\n { x: 46.4, y: 40.3 },\r\n { x: 46.6, y: 40.7 },\r\n { x: 46.8, y: 41.0 },\r\n { x: 47.0, y: 41.4 },\r\n { x: 47.2, y: 41.8 },\r\n { x: 47.4, y: 42.1 },\r\n { x: 47.6, y: 42.5 },\r\n { x: 47.8, y: 42.8 },\r\n { x: 48, y: 43.2 },\r\n { x: 48.2, y: 43.6 },\r\n { x: 48.4, y: 43.9 },\r\n { x: 48.6, y: 44.3 },\r\n { x: 48.8, y: 44.6 },\r\n { x: 49, y: 45.0 },\r\n { x: 49.2, y: 45.4 },\r\n { x: 49.4, y: 45.8 },\r\n { x: 49.6, y: 46.2 },\r\n { x: 49.8, y: 46.5 },\r\n { x: 50, y: 46.9 },\r\n { x: 50.2, y: 47.2 },\r\n { x: 50.4, y: 47.7 },\r\n { x: 50.6, y: 48.0 },\r\n { x: 50.8, y: 48.4 },\r\n { x: 51, y: 48.8 },\r\n { x: 51.2, y: 49.2 },\r\n { x: 51.4, y: 49.6 },\r\n { x: 51.6, y: 50 },\r\n { x: 51.8, y: 50.3 },\r\n { x: 52, y: 50.7 },\r\n { x: 52.2, y: 51.1 },\r\n { x: 52.4, y: 51.5 },\r\n { x: 52.8, y: 52.3 },\r\n { x: 53.0, y: 52.7 },\r\n { x: 53.2, y: 53.1 },\r\n { x: 53.4, y: 53.5 },\r\n { x: 53.6, y: 53.9 },\r\n { x: 53.8, y: 54.3 },\r\n { x: 54.0, y: 54.7 },\r\n { x: 54.2, y: 55.1 },\r\n { x: 54.4, y: 55.6 },\r\n { x: 54.6, y: 56 },\r\n { x: 54.8, y: 56.4 },\r\n { x: 55, y: 56.8 },\r\n { x: 55.2, y: 57.2 },\r\n { x: 55.4, y: 57.6 },\r\n { x: 55.6, y: 58 },\r\n { x: 55.8, y: 58.5 },\r\n { x: 56.0, y: 58.9 },\r\n { x: 56.2, y: 59.3 },\r\n { x: 56.4, y: 59.7 },\r\n { x: 56.6, y: 60 },\r\n ];\r\n var t4_5 = [\r\n { x: 23.0, y: 10.1 },\r\n { x: 23.2, y: 10.3 },\r\n { x: 23.4, y: 10.4 },\r\n { x: 23.6, y: 10.7 },\r\n { x: 23.8, y: 10.8 },\r\n { x: 24.0, y: 11.0 },\r\n { x: 24.2, y: 11.2 },\r\n { x: 24.4, y: 11.4 },\r\n { x: 24.6, y: 11.5 },\r\n { x: 24.8, y: 11.8 },\r\n { x: 25.0, y: 12.0 },\r\n { x: 25.2, y: 12.1 },\r\n { x: 25.4, y: 12.4 },\r\n { x: 25.6, y: 12.5 },\r\n { x: 25.8, y: 12.7 },\r\n { x: 26, y: 13.0 },\r\n { x: 26.2, y: 13.2 },\r\n { x: 26.4, y: 13.3 },\r\n { x: 26.6, y: 13.5 },\r\n { x: 26.8, y: 13.8 },\r\n { x: 27, y: 14.0 },\r\n { x: 27.2, y: 14.1 },\r\n { x: 27.4, y: 14.3 },\r\n { x: 27.6, y: 14.5 },\r\n { x: 27.8, y: 14.7 },\r\n { x: 28.0, y: 14.8 },\r\n { x: 28.2, y: 15.0 },\r\n { x: 28.4, y: 15.2 },\r\n { x: 28.6, y: 15.4 },\r\n { x: 28.8, y: 15.6 },\r\n { x: 29, y: 15.8 },\r\n { x: 29.2, y: 16 },\r\n { x: 29.4, y: 16.2 },\r\n { x: 29.6, y: 16.4 },\r\n { x: 29.8, y: 16.6 },\r\n { x: 30, y: 16.8 },\r\n { x: 30.2, y: 17 },\r\n { x: 30.4, y: 17.2 },\r\n { x: 30.6, y: 17.5 },\r\n { x: 30.8, y: 17.7 },\r\n { x: 31, y: 17.9 },\r\n { x: 31.2, y: 16.1 },\r\n { x: 31.4, y: 18.4 },\r\n { x: 31.6, y: 18.6 },\r\n { x: 31.8, y: 18.9 },\r\n { x: 32, y: 19.1 },\r\n { x: 32.2, y: 19.4 },\r\n { x: 32.4, y: 19.6 },\r\n { x: 32.6, y: 19.9 },\r\n { x: 32.8, y: 20.1 },\r\n { x: 33, y: 20.3 },\r\n { x: 33.2, y: 20.5 },\r\n { x: 33.4, y: 20.7 },\r\n { x: 33.6, y: 20.9 },\r\n { x: 33.8, y: 21.1 },\r\n { x: 34, y: 21.3 },\r\n { x: 34.2, y: 21.5 },\r\n { x: 34.4, y: 21.7 },\r\n { x: 34.6, y: 21.9 },\r\n { x: 34.8, y: 22.1 },\r\n { x: 35, y: 22.3 },\r\n { x: 35.2, y: 22.5 },\r\n { x: 35.4, y: 22.8 },\r\n { x: 35.6, y: 23 },\r\n { x: 35.8, y: 23.3 },\r\n { x: 36, y: 23.5 },\r\n { x: 36.2, y: 23.8 },\r\n { x: 36.4, y: 24.1 },\r\n { x: 36.6, y: 24.4 },\r\n { x: 36.8, y: 24.6 },\r\n { x: 37, y: 24.8 },\r\n { x: 37.2, y: 25.1 },\r\n { x: 37.4, y: 25.4 },\r\n { x: 37.6, y: 25.7 },\r\n { x: 37.8, y: 26 },\r\n { x: 38, y: 26.2 },\r\n { x: 38.2, y: 26.5 },\r\n { x: 38.4, y: 29.8 },\r\n { x: 38.6, y: 27 },\r\n { x: 38.8, y: 27.2 },\r\n { x: 39.0, y: 27.4 },\r\n { x: 39.2, y: 27.6 },\r\n { x: 39.4, y: 27.8 },\r\n { x: 39.6, y: 28.0 },\r\n { x: 39.8, y: 28.2 },\r\n { x: 40.0, y: 28.4 },\r\n { x: 40.2, y: 28.6 },\r\n { x: 40.4, y: 28.8 },\r\n { x: 40.6, y: 29.1 },\r\n { x: 40.8, y: 29.4 },\r\n { x: 41, y: 29.7 },\r\n { x: 41.2, y: 30 },\r\n { x: 41.4, y: 30.3 },\r\n { x: 41.6, y: 30.6 },\r\n { x: 41.8, y: 30.9 },\r\n { x: 42, y: 31.2 },\r\n { x: 42.2, y: 31.5 },\r\n { x: 42.4, y: 31.8 },\r\n { x: 42.6, y: 32.1 },\r\n { x: 42.8, y: 32.4 },\r\n { x: 43, y: 32.7 },\r\n { x: 43.2, y: 33 },\r\n { x: 43.4, y: 33.3 },\r\n { x: 43.6, y: 33.6 },\r\n { x: 43.8, y: 33.9 },\r\n { x: 44.0, y: 34.3 },\r\n { x: 44.2, y: 34.5 },\r\n { x: 44.4, y: 34.9 },\r\n { x: 44.6, y: 35.2 },\r\n { x: 44.8, y: 35.5 },\r\n { x: 45.0, y: 35.8 },\r\n { x: 45.2, y: 36.2 },\r\n { x: 45.4, y: 36.4 },\r\n { x: 45.6, y: 36.8 },\r\n { x: 45.8, y: 37.1 },\r\n { x: 46.0, y: 37.5 },\r\n { x: 46.2, y: 37.7 },\r\n { x: 46.4, y: 38.1 },\r\n { x: 46.6, y: 38.4 },\r\n { x: 46.8, y: 38.8 },\r\n { x: 47.0, y: 39.1 },\r\n { x: 47.2, y: 39.4 },\r\n { x: 47.4, y: 39.8 },\r\n { x: 47.6, y: 40.1 },\r\n { x: 47.8, y: 40.5 },\r\n { x: 48, y: 40.8 },\r\n { x: 48.2, y: 41.1 },\r\n { x: 48.4, y: 41.5 },\r\n { x: 48.6, y: 41.8 },\r\n { x: 48.8, y: 42.2 },\r\n { x: 49, y: 42.5 },\r\n { x: 49.2, y: 42.8 },\r\n { x: 49.4, y: 43.2 },\r\n { x: 49.6, y: 43.6 },\r\n { x: 49.8, y: 43.9 },\r\n { x: 50, y: 44.3 },\r\n { x: 50.2, y: 44.6 },\r\n { x: 50.4, y: 45 },\r\n { x: 50.6, y: 45.4 },\r\n { x: 50.8, y: 45.7 },\r\n { x: 51, y: 46.1 },\r\n { x: 51.2, y: 46.4 },\r\n { x: 51.4, y: 46.8 },\r\n { x: 51.6, y: 47.2 },\r\n { x: 51.8, y: 47.5 },\r\n { x: 52, y: 47.9 },\r\n { x: 52.2, y: 48.3 },\r\n { x: 52.4, y: 48.7 },\r\n { x: 52.8, y: 49.4 },\r\n { x: 53.0, y: 49.8 },\r\n { x: 53.2, y: 50.2 },\r\n { x: 53.4, y: 50.5 },\r\n { x: 53.6, y: 50.9 },\r\n { x: 53.8, y: 51.3 },\r\n { x: 54.0, y: 51.7 },\r\n { x: 54.2, y: 52.1 },\r\n { x: 54.4, y: 52.5 },\r\n { x: 54.6, y: 52.9 },\r\n { x: 54.8, y: 53.2 },\r\n { x: 55, y: 53.6 },\r\n { x: 55.2, y: 54 },\r\n { x: 55.4, y: 54.4 },\r\n { x: 55.6, y: 54.8 },\r\n { x: 55.8, y: 55.2 },\r\n { x: 56.0, y: 55.6 },\r\n { x: 56.2, y: 56 },\r\n { x: 56.4, y: 56.4 },\r\n { x: 56.6, y: 56.8 },\r\n { x: 56.8, y: 57.2 },\r\n { x: 57, y: 57.6 },\r\n { x: 57.2, y: 58 },\r\n { x: 57.4, y: 58.4 },\r\n { x: 57.6, y: 58.9 },\r\n { x: 57.8, y: 59.3 },\r\n { x: 58, y: 59.7 },\r\n { x: 58.2, y: 60.0 },\r\n ];\r\n var t5_0 = [\r\n { x: 23.2, y: 10.0 },\r\n { x: 23.4, y: 10.2 },\r\n { x: 23.6, y: 10.4 },\r\n { x: 23.8, y: 10.5 },\r\n { x: 24.0, y: 10.7 },\r\n { x: 24.2, y: 10.9 },\r\n { x: 24.4, y: 11.1 },\r\n { x: 24.6, y: 11.2 },\r\n { x: 24.8, y: 11.4 },\r\n { x: 25.0, y: 11.7 },\r\n { x: 25.2, y: 11.8 },\r\n { x: 25.4, y: 12.0 },\r\n { x: 25.6, y: 12.2 },\r\n { x: 25.8, y: 12.4 },\r\n { x: 26, y: 12.6 },\r\n { x: 26.2, y: 12.8 },\r\n { x: 26.4, y: 13.0 },\r\n { x: 26.6, y: 13.2 },\r\n { x: 26.8, y: 13.4 },\r\n { x: 27, y: 13.6 },\r\n { x: 27.2, y: 13.8 },\r\n { x: 27.4, y: 14.0 },\r\n { x: 27.6, y: 14.1 },\r\n { x: 27.8, y: 14.2 },\r\n { x: 28.0, y: 14.4 },\r\n { x: 28.2, y: 14.6 },\r\n { x: 28.4, y: 14.8 },\r\n { x: 28.6, y: 15.0 },\r\n { x: 28.8, y: 15.2 },\r\n { x: 29, y: 15.4 },\r\n { x: 29.2, y: 15.6 },\r\n { x: 29.4, y: 15.8 },\r\n { x: 29.6, y: 16 },\r\n { x: 29.8, y: 16.2 },\r\n { x: 30, y: 16.4 },\r\n { x: 30.2, y: 16.6 },\r\n { x: 30.4, y: 16.8 },\r\n { x: 30.6, y: 17.0 },\r\n { x: 30.8, y: 17.2 },\r\n { x: 31, y: 17.4 },\r\n { x: 31.2, y: 17.6 },\r\n { x: 31.4, y: 17.8 },\r\n { x: 31.6, y: 18 },\r\n { x: 31.8, y: 18.2 },\r\n { x: 32, y: 18.4 },\r\n { x: 32.2, y: 18.6 },\r\n { x: 32.4, y: 18.8 },\r\n { x: 32.6, y: 19 },\r\n { x: 32.8, y: 19.2 },\r\n { x: 33, y: 19.4 },\r\n { x: 33.2, y: 19.6 },\r\n { x: 33.4, y: 19.8 },\r\n { x: 33.6, y: 20 },\r\n { x: 33.8, y: 20.2 },\r\n { x: 34, y: 20.4 },\r\n { x: 34.2, y: 20.6 },\r\n { x: 34.4, y: 20.8 },\r\n { x: 34.6, y: 21 },\r\n { x: 34.8, y: 21.2 },\r\n { x: 35, y: 21.4 },\r\n { x: 35.2, y: 21.6 },\r\n { x: 35.4, y: 21.8 },\r\n { x: 35.6, y: 22 },\r\n { x: 35.8, y: 22.2 },\r\n { x: 36, y: 22.4 },\r\n { x: 36.2, y: 22.6 },\r\n { x: 36.4, y: 22.8 },\r\n { x: 36.6, y: 23 },\r\n { x: 36.8, y: 23.2 },\r\n { x: 37, y: 23.4 },\r\n { x: 37.2, y: 23.7 },\r\n { x: 37.4, y: 24 },\r\n { x: 37.6, y: 24.2 },\r\n { x: 37.8, y: 24.5 },\r\n { x: 38, y: 24.8 },\r\n { x: 38.2, y: 25 },\r\n { x: 38.4, y: 25.2 },\r\n { x: 38.6, y: 25.5 },\r\n { x: 38.8, y: 25.8 },\r\n { x: 39.0, y: 26 },\r\n { x: 39.2, y: 26.2 },\r\n { x: 39.4, y: 26.4 },\r\n { x: 39.6, y: 26.6 },\r\n { x: 39.8, y: 26.8 },\r\n { x: 40.0, y: 27 },\r\n { x: 40.2, y: 27.3 },\r\n { x: 40.4, y: 27.6 },\r\n { x: 40.6, y: 27.8 },\r\n { x: 40.8, y: 28.1 },\r\n { x: 41, y: 28.4 },\r\n { x: 41.2, y: 28.7 },\r\n { x: 41.4, y: 28.9 },\r\n { x: 41.6, y: 29.2 },\r\n { x: 41.8, y: 29.5 },\r\n { x: 42, y: 29.8 },\r\n { x: 42.2, y: 30.1 },\r\n { x: 42.4, y: 30.4 },\r\n { x: 42.6, y: 30.7 },\r\n { x: 42.8, y: 30.9 },\r\n { x: 43, y: 31.3 },\r\n { x: 43.2, y: 31.5 },\r\n { x: 43.4, y: 31.8 },\r\n { x: 43.6, y: 32.1 },\r\n { x: 43.8, y: 32.4 },\r\n { x: 44.0, y: 32.8 },\r\n { x: 44.2, y: 33 },\r\n { x: 44.4, y: 33.3 },\r\n { x: 44.6, y: 33.6 },\r\n { x: 44.8, y: 33.9 },\r\n { x: 45.0, y: 34.3 },\r\n { x: 45.2, y: 34.6 },\r\n { x: 45.4, y: 34.8 },\r\n { x: 45.6, y: 35.2 },\r\n { x: 45.8, y: 35.5 },\r\n { x: 46.0, y: 35.8 },\r\n { x: 46.2, y: 36.1 },\r\n { x: 46.4, y: 36.4 },\r\n { x: 46.6, y: 36.7 },\r\n { x: 46.8, y: 37.0 },\r\n { x: 47.0, y: 37.4 },\r\n { x: 47.2, y: 37.7 },\r\n { x: 47.4, y: 38.0 },\r\n { x: 47.6, y: 40 },\r\n { x: 47.8, y: 38.7 },\r\n { x: 48, y: 39.0 },\r\n { x: 48.2, y: 39.3 },\r\n { x: 48.4, y: 39.6 },\r\n { x: 48.6, y: 40.0 },\r\n { x: 48.8, y: 40.3 },\r\n { x: 49, y: 40.6 },\r\n { x: 49.2, y: 41 },\r\n { x: 49.4, y: 41.3 },\r\n { x: 49.6, y: 41.7 },\r\n { x: 49.8, y: 42 },\r\n { x: 50, y: 42.3 },\r\n { x: 50.2, y: 42.6 },\r\n { x: 50.4, y: 43.0 },\r\n { x: 50.6, y: 43.4 },\r\n { x: 50.8, y: 43.7 },\r\n { x: 51, y: 44.1 },\r\n { x: 51.2, y: 44.4 },\r\n { x: 51.4, y: 44.7 },\r\n { x: 51.6, y: 45.1 },\r\n { x: 51.8, y: 45.4 },\r\n { x: 52, y: 45.8 },\r\n { x: 52.2, y: 46.2 },\r\n { x: 52.4, y: 46.5 },\r\n { x: 52.8, y: 47.3 },\r\n { x: 53.0, y: 47.6 },\r\n { x: 53.2, y: 48 },\r\n { x: 53.4, y: 48.3 },\r\n { x: 53.6, y: 48.7 },\r\n { x: 53.8, y: 49 },\r\n { x: 54.0, y: 49.4 },\r\n { x: 54.2, y: 49.8 },\r\n { x: 54.4, y: 50.2 },\r\n { x: 54.6, y: 50.5 },\r\n { x: 54.8, y: 50.9 },\r\n { x: 55, y: 51.3 },\r\n { x: 55.2, y: 51.6 },\r\n { x: 55.4, y: 52 },\r\n { x: 55.6, y: 52.4 },\r\n { x: 55.8, y: 52.8 },\r\n { x: 56.0, y: 53.2 },\r\n { x: 56.2, y: 53.5 },\r\n { x: 56.4, y: 53.9 },\r\n { x: 56.6, y: 54.3 },\r\n { x: 56.8, y: 54.7 },\r\n { x: 57, y: 55.1 },\r\n { x: 57.2, y: 55.5 },\r\n { x: 57.4, y: 55.9 },\r\n ];\r\n var t5_5 = [\r\n { x: 23.6, y: 10.1 },\r\n { x: 23.8, y: 10.2 },\r\n { x: 24.0, y: 10.4 },\r\n { x: 24.2, y: 10.6 },\r\n { x: 24.4, y: 10.8 },\r\n { x: 24.6, y: 10.9 },\r\n { x: 24.8, y: 11.1 },\r\n { x: 25.0, y: 11.3 },\r\n { x: 25.2, y: 11.5 },\r\n { x: 25.4, y: 11.7 },\r\n { x: 25.6, y: 11.8 },\r\n { x: 25.8, y: 12.0 },\r\n { x: 26, y: 12.2 },\r\n { x: 26.2, y: 12.4 },\r\n { x: 26.4, y: 12.6 },\r\n { x: 26.6, y: 12.8 },\r\n { x: 26.8, y: 12.9 },\r\n { x: 27, y: 13.1 },\r\n { x: 27.2, y: 13.3 },\r\n { x: 27.4, y: 13.4 },\r\n { x: 27.6, y: 13.6 },\r\n { x: 27.8, y: 13.7 },\r\n { x: 28.0, y: 13.9 },\r\n { x: 28.2, y: 14 },\r\n { x: 28.4, y: 14.2 },\r\n { x: 28.6, y: 14.3 },\r\n { x: 28.8, y: 14.5 },\r\n { x: 29, y: 14.6 },\r\n { x: 29.2, y: 14.8 },\r\n { x: 29.4, y: 15 },\r\n { x: 29.6, y: 15.1 },\r\n { x: 29.8, y: 15.3 },\r\n { x: 30, y: 15.4 },\r\n { x: 30.2, y: 15.6 },\r\n { x: 30.4, y: 15.8 },\r\n { x: 30.6, y: 16 },\r\n { x: 30.8, y: 16.2 },\r\n { x: 31, y: 16.4 },\r\n { x: 31.2, y: 16.6 },\r\n { x: 31.4, y: 16.9 },\r\n { x: 31.6, y: 17.1 },\r\n { x: 31.8, y: 17.3 },\r\n { x: 32, y: 17.5 },\r\n { x: 32.2, y: 17.7 },\r\n { x: 32.4, y: 17.9 },\r\n { x: 32.6, y: 18.1 },\r\n { x: 32.8, y: 18.3 },\r\n { x: 33, y: 18.5 },\r\n { x: 33.2, y: 18.7 },\r\n { x: 33.4, y: 18.9 },\r\n { x: 33.6, y: 19.1 },\r\n { x: 33.8, y: 19.3 },\r\n { x: 34, y: 19.5 },\r\n { x: 34.2, y: 19.7 },\r\n { x: 34.4, y: 19.8 },\r\n { x: 34.6, y: 20 },\r\n { x: 34.8, y: 20.2 },\r\n { x: 35, y: 20.4 },\r\n { x: 35.2, y: 20.6 },\r\n { x: 35.4, y: 20.8 },\r\n { x: 35.6, y: 21 },\r\n { x: 35.8, y: 21.2 },\r\n { x: 36, y: 21.4 },\r\n { x: 36.2, y: 21.6 },\r\n { x: 36.4, y: 21.8 },\r\n { x: 36.6, y: 22 },\r\n { x: 36.8, y: 22.2 },\r\n { x: 37, y: 22.4 },\r\n { x: 37.2, y: 22.6 },\r\n { x: 37.4, y: 22.9 },\r\n { x: 37.6, y: 23.1 },\r\n { x: 37.8, y: 23.4 },\r\n { x: 38, y: 23.6 },\r\n { x: 38.2, y: 23.9 },\r\n { x: 38.4, y: 24.1 },\r\n { x: 38.6, y: 24.4 },\r\n { x: 38.8, y: 24.6 },\r\n { x: 39.0, y: 24.8 },\r\n { x: 39.2, y: 25.0 },\r\n { x: 39.4, y: 25.2 },\r\n { x: 39.6, y: 25.4 },\r\n { x: 39.8, y: 25.6 },\r\n { x: 40.0, y: 25.8 },\r\n { x: 40.2, y: 26.0 },\r\n { x: 40.4, y: 26.2 },\r\n { x: 40.6, y: 26.5 },\r\n { x: 40.8, y: 26.8 },\r\n { x: 41, y: 27.1 },\r\n { x: 41.2, y: 27.3 },\r\n { x: 41.4, y: 27.6 },\r\n { x: 41.6, y: 27.9 },\r\n { x: 41.8, y: 28.1 },\r\n { x: 42, y: 28.5 },\r\n { x: 42.2, y: 28.7 },\r\n { x: 42.4, y: 29.0 },\r\n { x: 42.6, y: 29.3 },\r\n { x: 42.8, y: 29.5 },\r\n { x: 43, y: 29.8 },\r\n { x: 43.2, y: 30.1 },\r\n { x: 43.4, y: 30.4 },\r\n { x: 43.6, y: 30.6 },\r\n { x: 43.8, y: 30.9 },\r\n { x: 44.0, y: 31.2 },\r\n { x: 44.2, y: 31.5 },\r\n { x: 44.4, y: 31.8 },\r\n { x: 44.6, y: 32.1 },\r\n { x: 44.8, y: 32.4 },\r\n { x: 45.0, y: 32.7 },\r\n { x: 45.2, y: 33 },\r\n { x: 45.4, y: 33.2 },\r\n { x: 45.6, y: 33.5 },\r\n { x: 45.8, y: 33.9 },\r\n { x: 46.0, y: 34.2 },\r\n { x: 46.2, y: 34.4 },\r\n { x: 46.4, y: 34.7 },\r\n { x: 46.6, y: 35 },\r\n { x: 46.8, y: 35.3 },\r\n { x: 47.0, y: 35.6 },\r\n { x: 47.2, y: 36.0 },\r\n { x: 47.4, y: 36.3 },\r\n { x: 47.6, y: 36.6 },\r\n { x: 47.8, y: 36.9 },\r\n { x: 48, y: 37.2 },\r\n { x: 48.2, y: 37.5 },\r\n { x: 48.4, y: 37.8 },\r\n { x: 48.6, y: 38.1 },\r\n { x: 48.8, y: 38.4 },\r\n { x: 49, y: 38.8 },\r\n { x: 49.2, y: 39.1 },\r\n { x: 49.4, y: 39.4 },\r\n { x: 49.6, y: 39.7 },\r\n { x: 49.8, y: 40.1 },\r\n { x: 50, y: 40.4 },\r\n { x: 50.2, y: 40.7 },\r\n { x: 50.4, y: 41.0 },\r\n { x: 50.6, y: 41.4 },\r\n { x: 50.8, y: 41.7 },\r\n { x: 51, y: 42.0 },\r\n { x: 51.2, y: 42.3 },\r\n { x: 51.4, y: 42.7 },\r\n { x: 51.6, y: 43 },\r\n { x: 51.8, y: 43.3 },\r\n { x: 52, y: 43.7 },\r\n { x: 52.2, y: 44 },\r\n { x: 52.4, y: 44.4 },\r\n { x: 52.8, y: 45.1 },\r\n { x: 53.0, y: 45.4 },\r\n { x: 53.2, y: 45.8 },\r\n { x: 53.4, y: 46.1 },\r\n { x: 53.6, y: 46.4 },\r\n { x: 53.8, y: 46.8 },\r\n { x: 54.0, y: 47.1 },\r\n { x: 54.2, y: 47.5 },\r\n { x: 54.4, y: 47.9 },\r\n { x: 54.6, y: 48.2 },\r\n { x: 54.8, y: 48.5 },\r\n { x: 55, y: 48.9 },\r\n { x: 55.2, y: 49.3 },\r\n { x: 55.4, y: 49.6 },\r\n { x: 55.6, y: 50 },\r\n { x: 55.8, y: 50.3 },\r\n { x: 56.0, y: 50.7 },\r\n { x: 56.2, y: 51.1 },\r\n { x: 56.4, y: 51.4 },\r\n { x: 56.6, y: 51.8 },\r\n { x: 56.8, y: 52.2 },\r\n { x: 57, y: 52.5 },\r\n { x: 57.2, y: 52.9 },\r\n { x: 57.4, y: 53.3 },\r\n { x: 57.6, y: 56.3 },\r\n { x: 57.8, y: 56.7 },\r\n { x: 58, y: 57 },\r\n { x: 58.2, y: 57.4 },\r\n { x: 58.4, y: 57.8 },\r\n { x: 58.6, y: 58.2 },\r\n { x: 58.8, y: 58.6 },\r\n { x: 59, y: 59.0 },\r\n { x: 59.2, y: 59.4 },\r\n { x: 59.4, y: 59.8 },\r\n { x: 59.6, y: 60 },\r\n ];\r\n var t6_0 = [\r\n { x: 23.6, y: 10.1 },\r\n { x: 23.8, y: 10.2 },\r\n { x: 24.0, y: 10.4 },\r\n { x: 24.2, y: 10.6 },\r\n { x: 24.4, y: 10.8 },\r\n { x: 24.6, y: 10.9 },\r\n { x: 24.8, y: 11.1 },\r\n { x: 25.0, y: 11.3 },\r\n { x: 25.2, y: 11.5 },\r\n { x: 25.4, y: 11.7 },\r\n { x: 25.6, y: 11.8 },\r\n { x: 25.8, y: 12.0 },\r\n { x: 26, y: 12.2 },\r\n { x: 26.2, y: 12.4 },\r\n { x: 26.4, y: 12.6 },\r\n { x: 26.6, y: 12.8 },\r\n { x: 26.8, y: 12.9 },\r\n { x: 27, y: 13.1 },\r\n { x: 27.2, y: 13.3 },\r\n { x: 27.4, y: 13.4 },\r\n { x: 27.6, y: 13.6 },\r\n { x: 27.8, y: 13.7 },\r\n { x: 28.0, y: 13.9 },\r\n { x: 28.2, y: 14 },\r\n { x: 28.4, y: 14.2 },\r\n { x: 28.6, y: 14.3 },\r\n { x: 28.8, y: 14.5 },\r\n { x: 29, y: 14.6 },\r\n { x: 29.2, y: 14.8 },\r\n { x: 29.4, y: 15 },\r\n { x: 29.6, y: 15.1 },\r\n { x: 29.8, y: 15.3 },\r\n { x: 30, y: 15.4 },\r\n { x: 30.2, y: 15.6 },\r\n { x: 30.4, y: 15.8 },\r\n { x: 30.6, y: 16 },\r\n { x: 30.8, y: 16.2 },\r\n { x: 31, y: 16.4 },\r\n { x: 31.2, y: 16.6 },\r\n { x: 31.4, y: 16.9 },\r\n { x: 31.6, y: 17.1 },\r\n { x: 31.8, y: 17.3 },\r\n { x: 32, y: 17.5 },\r\n { x: 32.2, y: 17.7 },\r\n { x: 32.4, y: 17.9 },\r\n { x: 32.6, y: 18.1 },\r\n { x: 32.8, y: 18.3 },\r\n { x: 33, y: 18.5 },\r\n { x: 33.2, y: 18.7 },\r\n { x: 33.4, y: 18.9 },\r\n { x: 33.6, y: 19.1 },\r\n { x: 33.8, y: 19.3 },\r\n { x: 34, y: 19.5 },\r\n { x: 34.2, y: 19.7 },\r\n { x: 34.4, y: 19.8 },\r\n { x: 34.6, y: 20 },\r\n { x: 34.8, y: 20.2 },\r\n { x: 35, y: 20.4 },\r\n { x: 35.2, y: 20.6 },\r\n { x: 35.4, y: 20.8 },\r\n { x: 35.6, y: 21 },\r\n { x: 35.8, y: 21.2 },\r\n { x: 36, y: 21.4 },\r\n { x: 36.2, y: 21.6 },\r\n { x: 36.4, y: 21.8 },\r\n { x: 36.6, y: 22 },\r\n { x: 36.8, y: 22.2 },\r\n { x: 37, y: 22.4 },\r\n { x: 37.2, y: 22.6 },\r\n { x: 37.4, y: 22.9 },\r\n { x: 37.6, y: 23.1 },\r\n { x: 37.8, y: 23.4 },\r\n { x: 38, y: 23.6 },\r\n { x: 38.2, y: 23.9 },\r\n { x: 38.4, y: 24.1 },\r\n { x: 38.6, y: 24.4 },\r\n { x: 38.8, y: 24.6 },\r\n { x: 39.0, y: 24.8 },\r\n { x: 39.2, y: 25.0 },\r\n { x: 39.4, y: 25.2 },\r\n { x: 39.6, y: 25.4 },\r\n { x: 39.8, y: 25.6 },\r\n { x: 40.0, y: 25.8 },\r\n { x: 40.2, y: 26.0 },\r\n { x: 40.4, y: 26.2 },\r\n { x: 40.6, y: 26.5 },\r\n { x: 40.8, y: 26.8 },\r\n { x: 41, y: 27.1 },\r\n { x: 41.2, y: 27.3 },\r\n { x: 41.4, y: 27.6 },\r\n { x: 41.6, y: 27.9 },\r\n { x: 41.8, y: 28.1 },\r\n { x: 42, y: 28.5 },\r\n { x: 42.2, y: 28.7 },\r\n { x: 42.4, y: 29.0 },\r\n { x: 42.6, y: 29.3 },\r\n { x: 42.8, y: 29.5 },\r\n { x: 43, y: 29.8 },\r\n { x: 43.2, y: 30.1 },\r\n { x: 43.4, y: 30.4 },\r\n { x: 43.6, y: 30.6 },\r\n { x: 43.8, y: 30.9 },\r\n { x: 44.0, y: 31.2 },\r\n { x: 44.2, y: 31.5 },\r\n { x: 44.4, y: 31.8 },\r\n { x: 44.6, y: 32.1 },\r\n { x: 44.8, y: 32.4 },\r\n { x: 45.0, y: 32.7 },\r\n { x: 45.2, y: 33 },\r\n { x: 45.4, y: 33.2 },\r\n { x: 45.6, y: 33.5 },\r\n { x: 45.8, y: 33.9 },\r\n { x: 46.0, y: 34.2 },\r\n { x: 46.2, y: 34.4 },\r\n { x: 46.4, y: 34.7 },\r\n { x: 46.6, y: 35 },\r\n { x: 46.8, y: 35.3 },\r\n { x: 47.0, y: 35.6 },\r\n { x: 47.2, y: 36.0 },\r\n { x: 47.4, y: 36.3 },\r\n { x: 47.6, y: 36.6 },\r\n { x: 47.8, y: 36.9 },\r\n { x: 48, y: 37.2 },\r\n { x: 48.2, y: 37.5 },\r\n { x: 48.4, y: 37.8 },\r\n { x: 48.6, y: 38.1 },\r\n { x: 48.8, y: 38.4 },\r\n { x: 49, y: 38.8 },\r\n { x: 49.2, y: 39.1 },\r\n { x: 49.4, y: 39.4 },\r\n { x: 49.6, y: 39.7 },\r\n { x: 49.8, y: 40.1 },\r\n { x: 50, y: 40.4 },\r\n { x: 50.2, y: 40.7 },\r\n { x: 50.4, y: 41.0 },\r\n { x: 50.6, y: 41.4 },\r\n { x: 50.8, y: 41.7 },\r\n { x: 51, y: 42.0 },\r\n { x: 51.2, y: 42.3 },\r\n { x: 51.4, y: 42.7 },\r\n { x: 51.6, y: 43 },\r\n { x: 51.8, y: 43.3 },\r\n { x: 52, y: 43.7 },\r\n { x: 52.2, y: 44 },\r\n { x: 52.4, y: 44.4 },\r\n { x: 52.8, y: 45.1 },\r\n { x: 53.0, y: 45.4 },\r\n { x: 53.2, y: 45.8 },\r\n { x: 53.4, y: 46.1 },\r\n { x: 53.6, y: 46.4 },\r\n { x: 53.8, y: 46.8 },\r\n { x: 54.0, y: 47.1 },\r\n { x: 54.2, y: 47.5 },\r\n { x: 54.4, y: 47.9 },\r\n { x: 54.6, y: 48.2 },\r\n { x: 54.8, y: 48.5 },\r\n { x: 55, y: 48.9 },\r\n { x: 55.2, y: 49.3 },\r\n { x: 55.4, y: 49.6 },\r\n { x: 55.6, y: 50 },\r\n { x: 55.8, y: 50.3 },\r\n { x: 56.0, y: 50.7 },\r\n { x: 56.2, y: 51.1 },\r\n { x: 56.4, y: 51.4 },\r\n { x: 56.6, y: 51.8 },\r\n { x: 56.8, y: 52.2 },\r\n { x: 57, y: 52.5 },\r\n { x: 57.2, y: 52.9 },\r\n { x: 57.4, y: 53.3 },\r\n { x: 57.6, y: 53.7 },\r\n { x: 57.8, y: 54 },\r\n { x: 58, y: 54.4 },\r\n { x: 58.2, y: 54.8 },\r\n { x: 58.4, y: 55.2 },\r\n { x: 58.6, y: 55.6 },\r\n { x: 58.8, y: 55.9 },\r\n { x: 59, y: 56.3 },\r\n { x: 59.2, y: 56.7 },\r\n { x: 59.4, y: 57.1 },\r\n { x: 59.6, y: 57.5 },\r\n { x: 59.8, y: 57.9 },\r\n { x: 60, y: 58.3 },\r\n ];\r\n var arr_t = new Array();\r\n //碳化深度\r\n if (sd_value_po >= 0) {\r\n var intsd = sd_value * 1; //碳化深度\r\n if (intsd == '0') {\r\n arr_t = t0_0;\r\n } else if (intsd == '0.5') {\r\n arr_t = t0_5;\r\n } else if (intsd == '1') {\r\n arr_t = t1_0;\r\n } else if (intsd == '1.5') {\r\n arr_t = t1_5;\r\n } else if (intsd == '2') {\r\n arr_t = t2_0;\r\n } else if (intsd == '2.5') {\r\n arr_t = t2_5;\r\n } else if (intsd == '3') {\r\n arr_t = t3_0;\r\n } else if (intsd == '3.5') {\r\n arr_t = t3_5;\r\n } else if (intsd == '4') {\r\n arr_t = t4_0;\r\n } else if (intsd == '4.5') {\r\n arr_t = t4_5;\r\n } else if (intsd == '5') {\r\n arr_t = t5_0;\r\n } else if (intsd == '5.5') {\r\n arr_t = t5_5;\r\n } else if (intsd >= '6') {\r\n arr_t = t6_0;\r\n }\r\n\r\n var m = -1;\r\n for (i = 0; i < arr_t.length; i++) {\r\n if (arr_t[0].x * 1 > ht) {\r\n m = 1;\r\n break;\r\n } else if (arr_t[i].x * 1 > ht) {\r\n m = i;\r\n break;\r\n } else if (arr_t[arr_t.length - 1].x * 1 < ht) {\r\n m = arr_t.length - 1;\r\n break;\r\n } else if (ht == arr_t[i].x) {\r\n qdhsz = forComm.GetDataOddIncreaseEvenDecrease(arr_t[i].y, -1);\r\n break;\r\n }\r\n }\r\n\r\n if (m != -1) {\r\n var x1 = arr_t[m - 1].x;\r\n var y1 = arr_t[m - 1].y;\r\n var x2 = arr_t[m].x;\r\n var y2 = arr_t[m].y;\r\n //强度换算值arr_ky_str\r\n if (ht >= 53.0 && intsd == 2.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 48.0 && intsd == 0.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 49.0 && intsd == 0.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 50.2 && intsd == 1.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 51.6 && intsd == 1.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 54.0 && intsd == 2.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 55.2 && intsd == 3.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 55.8 && intsd == 3.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 56.6 && intsd == 4.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 58.2 && intsd == 4.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 59.6 && intsd == 5.0) {\r\n qdhsz = '>60.0';\r\n } else {\r\n qdhsz = forComm.GetDataOddIncreaseEvenDecrease(forComm.InterpolationMethod_y(x1, x2, y1, y2, ht), -1);\r\n if (qdhsz > 60) {\r\n qdhsz = '>60.0';\r\n }\r\n if (qdhsz < 10) {\r\n qdhsz = '<10.0';\r\n }\r\n }\r\n }\r\n }\r\n } else if (jzfs == '泵送混凝土') {\r\n //泵送混凝土的强度换算值\r\n var sd_value = thsd; // 碳化深度\r\n var ht = xzhhtz; // 回弹平均值\r\n var sd_value_po = ''; //角度所在数组位置;\r\n //平均碳化深度值arr_sd\r\n var arr_sd = new Array('0.0', '0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5', '4.0', '4.5', '5.0', '5.5', '6.0');\r\n for (var i = 0; i < arr_sd.length; i++) {\r\n if (sd_value == arr_sd[i]) {\r\n //角度 碳化深度的值\r\n sd_value_po = i; //角度所在数组位置;\r\n\r\n break;\r\n } else if (sd_value * 1 > '6.0') {\r\n sd_value_po = arr_sd.length - 1;\r\n break;\r\n }\r\n }\r\n var t0_0 = [\r\n { x: 18.6, y: 10.0 },\r\n { x: 18.8, y: 10.2 },\r\n { x: 19.0, y: 10.4 },\r\n { x: 19.2, y: 10.6 },\r\n { x: 19.4, y: 10.9 },\r\n { x: 19.6, y: 11.1 },\r\n { x: 19.8, y: 11.3 },\r\n { x: 20.0, y: 11.5 },\r\n { x: 20.2, y: 11.8 },\r\n { x: 20.4, y: 12.0 },\r\n { x: 20.6, y: 12.2 },\r\n { x: 20.8, y: 12.4 },\r\n { x: 21.0, y: 12.7 },\r\n { x: 21.2, y: 12.9 },\r\n { x: 21.4, y: 13.1 },\r\n { x: 21.6, y: 13.4 },\r\n { x: 21.8, y: 13.6 },\r\n { x: 22.0, y: 13.9 },\r\n { x: 22.2, y: 14.1 },\r\n { x: 22.4, y: 14.4 },\r\n { x: 22.6, y: 14.6 },\r\n { x: 22.8, y: 14.9 },\r\n { x: 23.0, y: 15.1 },\r\n { x: 23.2, y: 15.4 },\r\n { x: 23.4, y: 15.6 },\r\n { x: 23.6, y: 15.9 },\r\n { x: 23.8, y: 16.2 },\r\n { x: 24.0, y: 16.4 },\r\n { x: 24.2, y: 16.7 },\r\n { x: 24.4, y: 17.0 },\r\n { x: 24.6, y: 17.2 },\r\n { x: 24.8, y: 17.5 },\r\n { x: 25.0, y: 17.8 },\r\n { x: 25.2, y: 18.0 },\r\n { x: 25.4, y: 18.3 },\r\n { x: 25.6, y: 18.6 },\r\n { x: 25.8, y: 18.9 },\r\n { x: 26.0, y: 19.2 },\r\n { x: 26.2, y: 19.5 },\r\n { x: 26.4, y: 19.8 },\r\n { x: 26.6, y: 20.0 },\r\n { x: 26.8, y: 20.3 },\r\n { x: 27.0, y: 20.6 },\r\n { x: 27.2, y: 20.9 },\r\n { x: 27.4, y: 21.2 },\r\n { x: 27.6, y: 21.5 },\r\n { x: 27.8, y: 21.8 },\r\n { x: 28.0, y: 22.1 },\r\n { x: 28.2, y: 22.4 },\r\n { x: 28.4, y: 22.8 },\r\n { x: 28.6, y: 23.1 },\r\n { x: 28.8, y: 23.4 },\r\n { x: 29.0, y: 23.7 },\r\n { x: 29.2, y: 24.0 },\r\n { x: 29.4, y: 24.3 },\r\n { x: 29.6, y: 24.7 },\r\n { x: 29.8, y: 25.0 },\r\n { x: 30.0, y: 25.3 },\r\n { x: 30.2, y: 25.6 },\r\n { x: 30.4, y: 26.0 },\r\n { x: 30.6, y: 26.3 },\r\n { x: 30.8, y: 26.6 },\r\n { x: 31.0, y: 27.0 },\r\n { x: 31.2, y: 27.3 },\r\n { x: 31.4, y: 27.7 },\r\n { x: 31.6, y: 28.0 },\r\n { x: 31.8, y: 28.3 },\r\n { x: 32.0, y: 28.7 },\r\n { x: 32.2, y: 29.0 },\r\n { x: 32.4, y: 29.4 },\r\n { x: 32.6, y: 29.7 },\r\n { x: 32.8, y: 30.1 },\r\n { x: 33.0, y: 30.4 },\r\n { x: 33.2, y: 30.8 },\r\n { x: 33.4, y: 31.2 },\r\n { x: 33.6, y: 31.5 },\r\n { x: 33.8, y: 31.9 },\r\n { x: 34.0, y: 32.3 },\r\n { x: 34.2, y: 32.6 },\r\n { x: 34.4, y: 33.0 },\r\n { x: 34.6, y: 33.4 },\r\n { x: 34.8, y: 33.8 },\r\n { x: 35.0, y: 34.1 },\r\n { x: 35.2, y: 34.5 },\r\n { x: 35.4, y: 34.9 },\r\n { x: 35.6, y: 35.3 },\r\n { x: 35.8, y: 35.7 },\r\n { x: 36.0, y: 36.0 },\r\n { x: 36.2, y: 36.4 },\r\n { x: 36.4, y: 36.8 },\r\n { x: 36.6, y: 37.2 },\r\n { x: 36.8, y: 37.6 },\r\n { x: 37.0, y: 38.0 },\r\n { x: 37.2, y: 38.4 },\r\n { x: 37.4, y: 38.8 },\r\n { x: 37.6, y: 39.2 },\r\n { x: 37.8, y: 39.6 },\r\n { x: 38.0, y: 40.0 },\r\n { x: 38.2, y: 40.4 },\r\n { x: 38.4, y: 40.9 },\r\n { x: 38.6, y: 41.3 },\r\n { x: 38.8, y: 41.7 },\r\n { x: 39.0, y: 42.1 },\r\n { x: 39.2, y: 42.5 },\r\n { x: 39.4, y: 42.9 },\r\n { x: 39.6, y: 43.4 },\r\n { x: 39.8, y: 43.8 },\r\n { x: 40.0, y: 44.2 },\r\n { x: 40.2, y: 44.7 },\r\n { x: 40.4, y: 45.1 },\r\n { x: 40.6, y: 45.5 },\r\n { x: 40.8, y: 46.0 },\r\n { x: 41.0, y: 46.4 },\r\n { x: 41.2, y: 46.8 },\r\n { x: 41.4, y: 47.3 },\r\n { x: 41.6, y: 47.7 },\r\n { x: 41.8, y: 48.2 },\r\n { x: 42.0, y: 48.6 },\r\n { x: 42.2, y: 49.1 },\r\n { x: 42.4, y: 49.5 },\r\n { x: 42.6, y: 50.0 },\r\n { x: 42.8, y: 50.4 },\r\n { x: 43.0, y: 50.9 },\r\n { x: 43.2, y: 51.3 },\r\n { x: 43.4, y: 51.8 },\r\n { x: 43.6, y: 52.3 },\r\n { x: 43.8, y: 52.7 },\r\n { x: 44.0, y: 53.2 },\r\n { x: 44.2, y: 53.7 },\r\n { x: 44.4, y: 54.1 },\r\n { x: 44.6, y: 54.6 },\r\n { x: 44.8, y: 55.1 },\r\n { x: 45.0, y: 55.6 },\r\n { x: 45.2, y: 56.1 },\r\n { x: 45.4, y: 56.5 },\r\n { x: 45.6, y: 57.0 },\r\n { x: 45.8, y: 57.5 },\r\n { x: 46.0, y: 58.0 },\r\n { x: 46.2, y: 58.5 },\r\n { x: 46.4, y: 59.0 },\r\n { x: 46.6, y: 59.5 },\r\n { x: 46.8, y: 60.0 },\r\n ];\r\n var t0_5 = [\r\n { x: 18.8, y: 10.0 },\r\n { x: 19.0, y: 10.2 },\r\n { x: 19.2, y: 10.4 },\r\n { x: 19.4, y: 10.7 },\r\n { x: 19.6, y: 10.9 },\r\n { x: 19.8, y: 11.1 },\r\n { x: 20.0, y: 11.3 },\r\n { x: 20.2, y: 11.5 },\r\n { x: 20.4, y: 11.7 },\r\n { x: 20.6, y: 12.0 },\r\n { x: 20.8, y: 12.2 },\r\n { x: 21.0, y: 12.4 },\r\n { x: 21.2, y: 12.6 },\r\n { x: 21.4, y: 12.9 },\r\n { x: 21.6, y: 13.1 },\r\n { x: 21.8, y: 13.3 },\r\n { x: 22.0, y: 13.6 },\r\n { x: 22.2, y: 13.8 },\r\n { x: 22.4, y: 14.1 },\r\n { x: 22.6, y: 14.3 },\r\n { x: 22.8, y: 14.6 },\r\n { x: 23.0, y: 14.8 },\r\n { x: 23.2, y: 15.1 },\r\n { x: 23.4, y: 15.3 },\r\n { x: 23.6, y: 15.6 },\r\n { x: 23.8, y: 15.8 },\r\n { x: 24.0, y: 16.1 },\r\n { x: 24.2, y: 16.4 },\r\n { x: 24.4, y: 16.6 },\r\n { x: 24.6, y: 16.9 },\r\n { x: 24.8, y: 17.1 },\r\n { x: 25.0, y: 17.4 },\r\n { x: 25.2, y: 17.7 },\r\n { x: 25.4, y: 18.0 },\r\n { x: 25.6, y: 18.2 },\r\n { x: 25.8, y: 18.5 },\r\n { x: 26.0, y: 18.8 },\r\n { x: 26.2, y: 19.1 },\r\n { x: 26.4, y: 19.4 },\r\n { x: 26.6, y: 19.6 },\r\n { x: 26.8, y: 19.9 },\r\n { x: 27.0, y: 20.2 },\r\n { x: 27.2, y: 20.5 },\r\n { x: 27.4, y: 20.8 },\r\n { x: 27.6, y: 21.1 },\r\n { x: 27.8, y: 21.4 },\r\n { x: 28.0, y: 21.7 },\r\n { x: 28.2, y: 22.0 },\r\n { x: 28.4, y: 22.3 },\r\n { x: 28.6, y: 22.6 },\r\n { x: 28.8, y: 22.9 },\r\n { x: 29.0, y: 23.2 },\r\n { x: 29.2, y: 23.5 },\r\n { x: 29.4, y: 23.9 },\r\n { x: 29.6, y: 24.2 },\r\n { x: 29.8, y: 24.5 },\r\n { x: 30.0, y: 24.8 },\r\n { x: 30.2, y: 25.1 },\r\n { x: 30.4, y: 25.5 },\r\n { x: 30.6, y: 25.8 },\r\n { x: 30.8, y: 26.1 },\r\n { x: 31.0, y: 26.4 },\r\n { x: 31.2, y: 26.8 },\r\n { x: 31.4, y: 27.1 },\r\n { x: 31.6, y: 27.4 },\r\n { x: 31.8, y: 27.8 },\r\n { x: 32.0, y: 28.1 },\r\n { x: 32.2, y: 28.5 },\r\n { x: 32.4, y: 28.8 },\r\n { x: 32.6, y: 29.2 },\r\n { x: 32.8, y: 29.5 },\r\n { x: 33.0, y: 29.8 },\r\n { x: 33.2, y: 30.2 },\r\n { x: 33.4, y: 30.6 },\r\n { x: 33.6, y: 30.9 },\r\n { x: 33.8, y: 31.3 },\r\n { x: 34.0, y: 31.6 },\r\n { x: 34.2, y: 32.0 },\r\n { x: 34.4, y: 32.4 },\r\n { x: 34.6, y: 32.7 },\r\n { x: 34.8, y: 33.1 },\r\n { x: 35.0, y: 33.5 },\r\n { x: 35.2, y: 33.8 },\r\n { x: 35.4, y: 34.2 },\r\n { x: 35.6, y: 34.6 },\r\n { x: 35.8, y: 35.0 },\r\n { x: 36.0, y: 35.3 },\r\n { x: 36.2, y: 35.7 },\r\n { x: 36.4, y: 36.1 },\r\n { x: 36.6, y: 36.5 },\r\n { x: 36.8, y: 36.9 },\r\n { x: 37.0, y: 37.3 },\r\n { x: 37.2, y: 37.7 },\r\n { x: 37.4, y: 38.1 },\r\n { x: 37.6, y: 38.4 },\r\n { x: 37.8, y: 38.8 },\r\n { x: 38.0, y: 39.2 },\r\n { x: 38.2, y: 39.6 },\r\n { x: 38.4, y: 40.1 },\r\n { x: 38.6, y: 40.5 },\r\n { x: 38.8, y: 40.9 },\r\n { x: 39.0, y: 41.3 },\r\n { x: 39.2, y: 41.7 },\r\n { x: 39.4, y: 42.1 },\r\n { x: 39.6, y: 42.5 },\r\n { x: 39.8, y: 42.9 },\r\n { x: 40.0, y: 43.4 },\r\n { x: 40.2, y: 43.8 },\r\n { x: 40.4, y: 44.2 },\r\n { x: 40.6, y: 44.6 },\r\n { x: 40.8, y: 45.1 },\r\n { x: 41.0, y: 45.5 },\r\n { x: 41.2, y: 45.9 },\r\n { x: 41.4, y: 46.3 },\r\n { x: 41.6, y: 46.8 },\r\n { x: 41.8, y: 47.2 },\r\n { x: 42.0, y: 47.7 },\r\n { x: 42.2, y: 48.1 },\r\n { x: 42.4, y: 48.5 },\r\n { x: 42.6, y: 49.0 },\r\n { x: 42.8, y: 49.4 },\r\n { x: 43.0, y: 49.9 },\r\n { x: 43.2, y: 50.3 },\r\n { x: 43.4, y: 50.8 },\r\n { x: 43.6, y: 51.2 },\r\n { x: 43.8, y: 51.7 },\r\n { x: 44.0, y: 52.2 },\r\n { x: 44.2, y: 52.6 },\r\n { x: 44.4, y: 53.1 },\r\n { x: 44.6, y: 53.5 },\r\n { x: 44.8, y: 54.0 },\r\n { x: 45.0, y: 54.5 },\r\n { x: 45.2, y: 55.0 },\r\n { x: 45.4, y: 55.4 },\r\n { x: 45.6, y: 55.9 },\r\n { x: 45.8, y: 56.4 },\r\n { x: 46.0, y: 56.9 },\r\n { x: 46.2, y: 57.3 },\r\n { x: 46.4, y: 57.8 },\r\n { x: 46.6, y: 58.3 },\r\n { x: 46.8, y: 58.8 },\r\n { x: 47.0, y: 59.3 },\r\n { x: 47.2, y: 59.8 },\r\n { x: 47.4, y: 60.0 },\r\n ];\r\n var t1_0 = [\r\n { x: 19.0, y: 10.0 },\r\n { x: 19.2, y: 10.2 },\r\n { x: 19.4, y: 10.4 },\r\n { x: 19.6, y: 10.6 },\r\n { x: 19.8, y: 10.9 },\r\n { x: 20.0, y: 11.1 },\r\n { x: 20.2, y: 11.3 },\r\n { x: 20.4, y: 11.5 },\r\n { x: 20.6, y: 11.7 },\r\n { x: 20.8, y: 12.0 },\r\n { x: 21.0, y: 12.2 },\r\n { x: 21.2, y: 12.4 },\r\n { x: 21.4, y: 12.6 },\r\n { x: 21.6, y: 12.9 },\r\n { x: 21.8, y: 13.1 },\r\n { x: 22.0, y: 13.3 },\r\n { x: 22.2, y: 13.6 },\r\n { x: 22.4, y: 13.8 },\r\n { x: 22.6, y: 14.0 },\r\n { x: 22.8, y: 14.3 },\r\n { x: 23.0, y: 14.5 },\r\n { x: 23.2, y: 14.8 },\r\n { x: 23.4, y: 15.0 },\r\n { x: 23.6, y: 15.3 },\r\n { x: 23.8, y: 15.5 },\r\n { x: 24.0, y: 15.8 },\r\n { x: 24.2, y: 16.0 },\r\n { x: 24.4, y: 16.3 },\r\n { x: 24.6, y: 16.5 },\r\n { x: 24.8, y: 16.8 },\r\n { x: 25.0, y: 17.1 },\r\n { x: 25.2, y: 17.3 },\r\n { x: 25.4, y: 17.6 },\r\n { x: 25.6, y: 17.9 },\r\n { x: 25.8, y: 18.2 },\r\n { x: 26.0, y: 18.4 },\r\n { x: 26.2, y: 18.7 },\r\n { x: 26.4, y: 19.0 },\r\n { x: 26.6, y: 19.3 },\r\n { x: 26.8, y: 19.5 },\r\n { x: 27.0, y: 19.8 },\r\n { x: 27.2, y: 20.1 },\r\n { x: 27.4, y: 20.4 },\r\n { x: 27.6, y: 20.7 },\r\n { x: 27.8, y: 21.0 },\r\n { x: 28.0, y: 21.3 },\r\n { x: 28.2, y: 21.6 },\r\n { x: 28.4, y: 21.9 },\r\n { x: 28.6, y: 22.2 },\r\n { x: 28.8, y: 22.5 },\r\n { x: 29.0, y: 22.8 },\r\n { x: 29.2, y: 23.1 },\r\n { x: 29.4, y: 23.4 },\r\n { x: 29.6, y: 23.7 },\r\n { x: 29.8, y: 24.0 },\r\n { x: 30.0, y: 24.3 },\r\n { x: 30.2, y: 24.6 },\r\n { x: 30.4, y: 25.0 },\r\n { x: 30.6, y: 25.3 },\r\n { x: 30.8, y: 25.6 },\r\n { x: 31.0, y: 25.9 },\r\n { x: 31.2, y: 26.2 },\r\n { x: 31.4, y: 26.6 },\r\n { x: 31.6, y: 26.9 },\r\n { x: 31.8, y: 27.2 },\r\n { x: 32.0, y: 27.6 },\r\n { x: 32.2, y: 27.9 },\r\n { x: 32.4, y: 28.2 },\r\n { x: 32.6, y: 28.6 },\r\n { x: 32.8, y: 28.9 },\r\n { x: 33.0, y: 29.3 },\r\n { x: 33.2, y: 29.6 },\r\n { x: 33.4, y: 30.0 },\r\n { x: 33.6, y: 30.3 },\r\n { x: 33.8, y: 30.7 },\r\n { x: 34.0, y: 31.0 },\r\n { x: 34.2, y: 31.4 },\r\n { x: 34.4, y: 31.7 },\r\n { x: 34.6, y: 32.1 },\r\n { x: 34.8, y: 32.4 },\r\n { x: 35.0, y: 32.8 },\r\n { x: 35.2, y: 33.2 },\r\n { x: 35.4, y: 33.5 },\r\n { x: 35.6, y: 33.9 },\r\n { x: 35.8, y: 34.3 },\r\n { x: 36.0, y: 34.6 },\r\n { x: 36.2, y: 35.0 },\r\n { x: 36.4, y: 35.4 },\r\n { x: 36.6, y: 35.8 },\r\n { x: 36.8, y: 36.2 },\r\n { x: 37.0, y: 36.5 },\r\n { x: 37.2, y: 36.9 },\r\n { x: 37.4, y: 37.3 },\r\n { x: 37.6, y: 37.7 },\r\n { x: 37.8, y: 38.1 },\r\n { x: 38.0, y: 38.5 },\r\n { x: 38.2, y: 38.9 },\r\n { x: 38.4, y: 39.3 },\r\n { x: 38.6, y: 39.7 },\r\n { x: 38.8, y: 40.1 },\r\n { x: 39.0, y: 40.5 },\r\n { x: 39.2, y: 40.9 },\r\n { x: 39.4, y: 41.3 },\r\n { x: 39.6, y: 41.7 },\r\n { x: 39.8, y: 42.1 },\r\n { x: 40.0, y: 42.5 },\r\n { x: 40.2, y: 42.9 },\r\n { x: 40.4, y: 43.3 },\r\n { x: 40.6, y: 43.7 },\r\n { x: 40.8, y: 44.2 },\r\n { x: 41.0, y: 44.6 },\r\n { x: 41.2, y: 45.0 },\r\n { x: 41.4, y: 45.4 },\r\n { x: 41.6, y: 45.9 },\r\n { x: 41.8, y: 46.3 },\r\n { x: 42.0, y: 46.7 },\r\n { x: 42.2, y: 47.1 },\r\n { x: 42.4, y: 47.6 },\r\n { x: 42.6, y: 48.0 },\r\n { x: 42.8, y: 48.5 },\r\n { x: 43.0, y: 48.9 },\r\n { x: 43.2, y: 49.3 },\r\n { x: 43.4, y: 49.8 },\r\n { x: 43.6, y: 50.2 },\r\n { x: 43.8, y: 50.7 },\r\n { x: 44.0, y: 51.1 },\r\n { x: 44.2, y: 51.6 },\r\n { x: 44.4, y: 52.0 },\r\n { x: 44.6, y: 52.5 },\r\n { x: 44.8, y: 52.9 },\r\n { x: 45.0, y: 53.4 },\r\n { x: 45.2, y: 53.9 },\r\n { x: 45.4, y: 54.3 },\r\n { x: 45.6, y: 54.8 },\r\n { x: 45.8, y: 55.3 },\r\n { x: 46.0, y: 55.7 },\r\n { x: 46.2, y: 56.2 },\r\n { x: 46.4, y: 56.7 },\r\n { x: 46.6, y: 57.2 },\r\n { x: 46.8, y: 57.6 },\r\n { x: 47.0, y: 58.1 },\r\n { x: 47.2, y: 58.6 },\r\n { x: 47.4, y: 59.1 },\r\n { x: 47.6, y: 59.6 },\r\n { x: 47.8, y: 60.0 },\r\n ];\r\n var t1_5 = [\r\n { x: 19.2, y: 10.0 },\r\n { x: 19.4, y: 10.2 },\r\n { x: 19.6, y: 10.4 },\r\n { x: 19.8, y: 10.6 },\r\n { x: 20.0, y: 10.9 },\r\n { x: 20.2, y: 11.1 },\r\n { x: 20.4, y: 11.3 },\r\n { x: 20.6, y: 11.5 },\r\n { x: 20.8, y: 11.7 },\r\n { x: 21.0, y: 11.9 },\r\n { x: 21.2, y: 12.2 },\r\n { x: 21.4, y: 12.4 },\r\n { x: 21.6, y: 12.6 },\r\n { x: 21.8, y: 12.8 },\r\n { x: 22.0, y: 13.1 },\r\n { x: 22.2, y: 13.3 },\r\n { x: 22.4, y: 13.5 },\r\n { x: 22.6, y: 13.8 },\r\n { x: 22.8, y: 14.0 },\r\n { x: 23.0, y: 14.2 },\r\n { x: 23.2, y: 14.5 },\r\n { x: 23.4, y: 14.7 },\r\n { x: 23.6, y: 15.0 },\r\n { x: 23.8, y: 15.2 },\r\n { x: 24.0, y: 15.5 },\r\n { x: 24.2, y: 15.7 },\r\n { x: 24.4, y: 16.0 },\r\n { x: 24.6, y: 16.1 },\r\n { x: 24.8, y: 16.5 },\r\n { x: 25.0, y: 16.7 },\r\n { x: 25.2, y: 17.0 },\r\n { x: 25.4, y: 17.3 },\r\n { x: 25.6, y: 17.5 },\r\n { x: 25.8, y: 17.8 },\r\n { x: 26.0, y: 18.1 },\r\n { x: 26.2, y: 18.3 },\r\n { x: 26.4, y: 18.6 },\r\n { x: 26.6, y: 18.9 },\r\n { x: 26.8, y: 19.2 },\r\n { x: 27.0, y: 19.4 },\r\n { x: 27.2, y: 19.7 },\r\n { x: 27.4, y: 20.0 },\r\n { x: 27.6, y: 20.3 },\r\n { x: 27.8, y: 20.6 },\r\n { x: 28.0, y: 20.9 },\r\n { x: 28.2, y: 21.1 },\r\n { x: 28.4, y: 21.4 },\r\n { x: 28.6, y: 21.7 },\r\n { x: 28.8, y: 22.0 },\r\n { x: 29.0, y: 22.3 },\r\n { x: 29.2, y: 22.6 },\r\n { x: 29.4, y: 22.9 },\r\n { x: 29.6, y: 23.1 },\r\n { x: 29.8, y: 23.5 },\r\n { x: 30.0, y: 23.8 },\r\n { x: 30.2, y: 24.2 },\r\n { x: 30.4, y: 24.5 },\r\n { x: 30.6, y: 24.8 },\r\n { x: 30.8, y: 25.1 },\r\n { x: 31.0, y: 25.4 },\r\n { x: 31.2, y: 25.7 },\r\n { x: 31.4, y: 26.0 },\r\n { x: 31.6, y: 26.4 },\r\n { x: 31.8, y: 26.7 },\r\n { x: 32.0, y: 27.0 },\r\n { x: 32.2, y: 27.4 },\r\n { x: 32.4, y: 27.7 },\r\n { x: 32.6, y: 28.0 },\r\n { x: 32.8, y: 28.3 },\r\n { x: 33.0, y: 28.7 },\r\n { x: 33.2, y: 29.0 },\r\n { x: 33.4, y: 29.4 },\r\n { x: 33.6, y: 29.7 },\r\n { x: 33.8, y: 30.0 },\r\n { x: 34.0, y: 30.4 },\r\n { x: 34.2, y: 30.7 },\r\n { x: 34.4, y: 31.1 },\r\n { x: 34.6, y: 31.4 },\r\n { x: 34.8, y: 31.8 },\r\n { x: 35.0, y: 32.2 },\r\n { x: 35.2, y: 32.5 },\r\n { x: 35.4, y: 32.9 },\r\n { x: 35.6, y: 33.2 },\r\n { x: 35.8, y: 33.6 },\r\n { x: 36.0, y: 34.0 },\r\n { x: 36.2, y: 34.3 },\r\n { x: 36.4, y: 34.7 },\r\n { x: 36.6, y: 35.1 },\r\n { x: 36.8, y: 35.4 },\r\n { x: 37.0, y: 35.8 },\r\n { x: 37.2, y: 36.2 },\r\n { x: 37.4, y: 36.6 },\r\n { x: 37.6, y: 36.9 },\r\n { x: 37.8, y: 37.3 },\r\n { x: 38.0, y: 37.7 },\r\n { x: 38.2, y: 38.1 },\r\n { x: 38.4, y: 38.5 },\r\n { x: 38.6, y: 38.9 },\r\n { x: 38.8, y: 39.3 },\r\n { x: 39.0, y: 39.7 },\r\n { x: 39.2, y: 40.1 },\r\n { x: 39.4, y: 40.5 },\r\n { x: 39.6, y: 40.9 },\r\n { x: 39.8, y: 41.3 },\r\n { x: 40.0, y: 41.7 },\r\n { x: 40.2, y: 42.1 },\r\n { x: 40.4, y: 42.5 },\r\n { x: 40.6, y: 42.9 },\r\n { x: 40.8, y: 43.3 },\r\n { x: 41.0, y: 43.7 },\r\n { x: 41.2, y: 44.1 },\r\n { x: 41.4, y: 44.5 },\r\n { x: 41.6, y: 45.0 },\r\n { x: 41.8, y: 45.4 },\r\n { x: 42.0, y: 45.8 },\r\n { x: 42.2, y: 46.2 },\r\n { x: 42.4, y: 46.6 },\r\n { x: 42.6, y: 47.1 },\r\n { x: 42.8, y: 47.5 },\r\n { x: 43.0, y: 47.9 },\r\n { x: 43.2, y: 48.4 },\r\n { x: 43.4, y: 48.8 },\r\n { x: 43.6, y: 49.2 },\r\n { x: 43.8, y: 49.7 },\r\n { x: 44.0, y: 50.1 },\r\n { x: 44.2, y: 50.6 },\r\n { x: 44.4, y: 51.0 },\r\n { x: 44.6, y: 51.5 },\r\n { x: 44.8, y: 51.9 },\r\n { x: 45.0, y: 52.4 },\r\n { x: 45.2, y: 52.8 },\r\n { x: 45.4, y: 53.3 },\r\n { x: 45.6, y: 53.7 },\r\n { x: 45.8, y: 54.2 },\r\n { x: 46.0, y: 54.6 },\r\n { x: 46.2, y: 55.1 },\r\n { x: 46.4, y: 55.6 },\r\n { x: 46.6, y: 56.0 },\r\n { x: 46.8, y: 56.5 },\r\n { x: 47.0, y: 57.0 },\r\n { x: 47.2, y: 57.4 },\r\n { x: 47.4, y: 57.9 },\r\n { x: 47.6, y: 58.4 },\r\n { x: 47.8, y: 58.9 },\r\n { x: 48.0, y: 59.3 },\r\n { x: 48.2, y: 59.8 },\r\n { x: 48.4, y: 60.0 },\r\n ];\r\n var t2_0 = [\r\n { x: 19.4, y: 10.0 },\r\n { x: 19.6, y: 10.2 },\r\n { x: 19.8, y: 10.4 },\r\n { x: 20.0, y: 10.6 },\r\n { x: 20.2, y: 10.9 },\r\n { x: 20.4, y: 11.1 },\r\n { x: 20.6, y: 11.3 },\r\n { x: 20.8, y: 11.5 },\r\n { x: 21.0, y: 11.7 },\r\n { x: 21.2, y: 11.9 },\r\n { x: 21.4, y: 12.2 },\r\n { x: 21.6, y: 12.4 },\r\n { x: 21.8, y: 12.6 },\r\n { x: 22.0, y: 12.8 },\r\n { x: 22.2, y: 13.1 },\r\n { x: 22.4, y: 13.3 },\r\n { x: 22.6, y: 13.5 },\r\n { x: 22.8, y: 13.7 },\r\n { x: 23.0, y: 14.0 },\r\n { x: 23.2, y: 14.2 },\r\n { x: 23.4, y: 14.4 },\r\n { x: 23.6, y: 14.7 },\r\n { x: 23.8, y: 14.9 },\r\n { x: 24.0, y: 15.2 },\r\n { x: 24.2, y: 15.4 },\r\n { x: 24.4, y: 15.7 },\r\n { x: 24.6, y: 15.9 },\r\n { x: 24.8, y: 16.2 },\r\n { x: 25.0, y: 16.4 },\r\n { x: 25.2, y: 16.7 },\r\n { x: 25.4, y: 16.9 },\r\n { x: 25.6, y: 17.2 },\r\n { x: 25.8, y: 17.4 },\r\n { x: 26.0, y: 17.7 },\r\n { x: 26.2, y: 18.0 },\r\n { x: 26.4, y: 18.2 },\r\n { x: 26.6, y: 18.5 },\r\n { x: 26.8, y: 18.8 },\r\n { x: 27.0, y: 19.1 },\r\n { x: 27.2, y: 19.3 },\r\n { x: 27.4, y: 19.6 },\r\n { x: 27.6, y: 19.9 },\r\n { x: 27.8, y: 20.2 },\r\n { x: 28.0, y: 20.4 },\r\n { x: 28.2, y: 20.7 },\r\n { x: 28.4, y: 21.0 },\r\n { x: 28.6, y: 21.3 },\r\n { x: 28.8, y: 21.6 },\r\n { x: 29.0, y: 21.9 },\r\n { x: 29.2, y: 22.0 },\r\n { x: 29.4, y: 22.5 },\r\n { x: 29.6, y: 22.8 },\r\n { x: 29.8, y: 23.1 },\r\n { x: 30.0, y: 23.4 },\r\n { x: 30.2, y: 23.7 },\r\n { x: 30.4, y: 24.0 },\r\n { x: 30.6, y: 24.3 },\r\n { x: 30.8, y: 24.6 },\r\n { x: 31.0, y: 24.9 },\r\n { x: 31.2, y: 25.2 },\r\n { x: 31.4, y: 25.5 },\r\n { x: 31.6, y: 25.9 },\r\n { x: 31.8, y: 26.2 },\r\n { x: 32.0, y: 26.5 },\r\n { x: 32.2, y: 26.8 },\r\n { x: 32.4, y: 27.1 },\r\n { x: 32.6, y: 27.5 },\r\n { x: 32.8, y: 27.8 },\r\n { x: 33.0, y: 28.1 },\r\n { x: 33.2, y: 28.4 },\r\n { x: 33.4, y: 28.8 },\r\n { x: 33.6, y: 29.0 },\r\n { x: 33.8, y: 29.5 },\r\n { x: 34.0, y: 29.8 },\r\n { x: 34.2, y: 30.1 },\r\n { x: 34.4, y: 30.5 },\r\n { x: 34.6, y: 30.8 },\r\n { x: 34.8, y: 31.2 },\r\n { x: 35.0, y: 31.5 },\r\n { x: 35.2, y: 31.9 },\r\n { x: 35.4, y: 32.2 },\r\n { x: 35.6, y: 32.5 },\r\n { x: 35.8, y: 32.9 },\r\n { x: 36.0, y: 33.2 },\r\n { x: 36.2, y: 33.6 },\r\n { x: 36.4, y: 34.0 },\r\n { x: 36.6, y: 34.3 },\r\n { x: 36.8, y: 34.7 },\r\n { x: 37.0, y: 35.1 },\r\n { x: 37.2, y: 35.5 },\r\n { x: 37.4, y: 35.8 },\r\n { x: 37.6, y: 36.2 },\r\n { x: 37.8, y: 36.6 },\r\n { x: 38.0, y: 37.0 },\r\n { x: 38.2, y: 37.3 },\r\n { x: 38.4, y: 37.7 },\r\n { x: 38.6, y: 38.1 },\r\n { x: 38.8, y: 38.5 },\r\n { x: 39.0, y: 38.9 },\r\n { x: 39.2, y: 39.3 },\r\n { x: 39.4, y: 39.7 },\r\n { x: 39.6, y: 40.0 },\r\n { x: 39.8, y: 40.4 },\r\n { x: 40.0, y: 40.8 },\r\n { x: 40.2, y: 41.2 },\r\n { x: 40.4, y: 41.6 },\r\n { x: 40.6, y: 42.0 },\r\n { x: 40.8, y: 42.4 },\r\n { x: 41.0, y: 42.8 },\r\n { x: 41.2, y: 43.2 },\r\n { x: 41.4, y: 43.7 },\r\n { x: 41.6, y: 44.1 },\r\n { x: 41.8, y: 44.5 },\r\n { x: 42.0, y: 44.9 },\r\n { x: 42.2, y: 45.3 },\r\n { x: 42.4, y: 45.7 },\r\n { x: 42.6, y: 46.1 },\r\n { x: 42.8, y: 46.6 },\r\n { x: 43.0, y: 47.0 },\r\n { x: 43.2, y: 47.4 },\r\n { x: 43.4, y: 47.8 },\r\n { x: 43.6, y: 48.3 },\r\n { x: 43.8, y: 48.7 },\r\n { x: 44.0, y: 49.1 },\r\n { x: 44.2, y: 49.6 },\r\n { x: 44.4, y: 50.0 },\r\n { x: 44.6, y: 50.4 },\r\n { x: 44.8, y: 50.9 },\r\n { x: 45.0, y: 51.3 },\r\n { x: 45.2, y: 51.8 },\r\n { x: 45.4, y: 52.2 },\r\n { x: 45.6, y: 52.7 },\r\n { x: 45.8, y: 53.1 },\r\n { x: 46.0, y: 53.6 },\r\n { x: 46.2, y: 54.0 },\r\n { x: 46.4, y: 54.5 },\r\n { x: 46.6, y: 54.9 },\r\n { x: 46.8, y: 55.4 },\r\n { x: 47.0, y: 55.8 },\r\n { x: 47.2, y: 56.3 },\r\n { x: 47.4, y: 56.8 },\r\n { x: 47.6, y: 57.2 },\r\n { x: 47.8, y: 57.7 },\r\n { x: 48.0, y: 58.2 },\r\n { x: 48.2, y: 58.6 },\r\n { x: 48.4, y: 59.1 },\r\n { x: 48.6, y: 59.6 },\r\n { x: 48.8, y: 60.0 },\r\n ];\r\n var t2_5 = [\r\n { x: 19.6, y: 10.0 },\r\n { x: 19.8, y: 10.2 },\r\n { x: 20.0, y: 10.4 },\r\n { x: 20.2, y: 10.6 },\r\n { x: 20.4, y: 10.8 },\r\n { x: 20.6, y: 11.0 },\r\n { x: 20.8, y: 11.3 },\r\n { x: 21.0, y: 11.5 },\r\n { x: 21.2, y: 11.7 },\r\n { x: 21.4, y: 11.9 },\r\n { x: 21.6, y: 12.1 },\r\n { x: 21.8, y: 12.3 },\r\n { x: 22.0, y: 12.6 },\r\n { x: 22.2, y: 12.8 },\r\n { x: 22.4, y: 13.0 },\r\n { x: 22.6, y: 13.2 },\r\n { x: 22.8, y: 13.5 },\r\n { x: 23.0, y: 13.7 },\r\n { x: 23.2, y: 13.9 },\r\n { x: 23.4, y: 14.1 },\r\n { x: 23.6, y: 14.4 },\r\n { x: 23.8, y: 14.6 },\r\n { x: 24.0, y: 14.9 },\r\n { x: 24.2, y: 15.1 },\r\n { x: 24.4, y: 15.3 },\r\n { x: 24.6, y: 15.6 },\r\n { x: 24.8, y: 15.8 },\r\n { x: 25.0, y: 16.1 },\r\n { x: 25.2, y: 16.3 },\r\n { x: 25.4, y: 16.6 },\r\n { x: 25.6, y: 16.8 },\r\n { x: 25.8, y: 17.1 },\r\n { x: 26.0, y: 17.4 },\r\n { x: 26.2, y: 17.6 },\r\n { x: 26.4, y: 17.9 },\r\n { x: 26.6, y: 18.1 },\r\n { x: 26.8, y: 18.4 },\r\n { x: 27.0, y: 18.7 },\r\n { x: 27.2, y: 18.9 },\r\n { x: 27.4, y: 19.2 },\r\n { x: 27.6, y: 19.5 },\r\n { x: 27.8, y: 19.8 },\r\n { x: 28.0, y: 20.0 },\r\n { x: 28.2, y: 20.3 },\r\n { x: 28.4, y: 20.6 },\r\n { x: 28.6, y: 20.9 },\r\n { x: 28.8, y: 21.2 },\r\n { x: 29.0, y: 21.5 },\r\n { x: 29.2, y: 21.7 },\r\n { x: 29.4, y: 22.0 },\r\n { x: 29.6, y: 22.3 },\r\n { x: 29.8, y: 22.6 },\r\n { x: 30.0, y: 22.9 },\r\n { x: 30.2, y: 23.2 },\r\n { x: 30.4, y: 23.5 },\r\n { x: 30.6, y: 23.8 },\r\n { x: 30.8, y: 24.1 },\r\n { x: 31.0, y: 24.4 },\r\n { x: 31.2, y: 24.7 },\r\n { x: 31.4, y: 25.0 },\r\n { x: 31.6, y: 25.3 },\r\n { x: 31.8, y: 25.7 },\r\n { x: 32.0, y: 26.0 },\r\n { x: 32.2, y: 26.3 },\r\n { x: 32.4, y: 26.6 },\r\n { x: 32.6, y: 26.9 },\r\n { x: 32.8, y: 27.2 },\r\n { x: 33.0, y: 27.6 },\r\n { x: 33.2, y: 27.9 },\r\n { x: 33.4, y: 28.2 },\r\n { x: 33.6, y: 28.5 },\r\n { x: 33.8, y: 28.9 },\r\n { x: 34.0, y: 29.2 },\r\n { x: 34.2, y: 29.5 },\r\n { x: 34.4, y: 29.9 },\r\n { x: 34.6, y: 30.2 },\r\n { x: 34.8, y: 30.6 },\r\n { x: 35.0, y: 30.9 },\r\n { x: 35.2, y: 31.2 },\r\n { x: 35.4, y: 31.6 },\r\n { x: 35.6, y: 31.9 },\r\n { x: 35.8, y: 32.3 },\r\n { x: 36.0, y: 32.6 },\r\n { x: 36.2, y: 33.0 },\r\n { x: 36.4, y: 33.3 },\r\n { x: 36.6, y: 33.7 },\r\n { x: 36.8, y: 34.1 },\r\n { x: 37.0, y: 34.4 },\r\n { x: 37.2, y: 34.8 },\r\n { x: 37.4, y: 35.1 },\r\n { x: 37.6, y: 35.5 },\r\n { x: 37.8, y: 35.9 },\r\n { x: 38.0, y: 36.2 },\r\n { x: 38.2, y: 36.6 },\r\n { x: 38.4, y: 37.0 },\r\n { x: 38.6, y: 37.3 },\r\n { x: 38.8, y: 37.7 },\r\n { x: 39.0, y: 38.1 },\r\n { x: 39.2, y: 38.5 },\r\n { x: 39.4, y: 38.9 },\r\n { x: 39.6, y: 39.3 },\r\n { x: 39.8, y: 39.7 },\r\n { x: 40.0, y: 40.0 },\r\n { x: 40.2, y: 40.4 },\r\n { x: 40.4, y: 40.8 },\r\n { x: 40.6, y: 41.2 },\r\n { x: 40.8, y: 41.6 },\r\n { x: 41.0, y: 42.0 },\r\n { x: 41.2, y: 42.4 },\r\n { x: 41.4, y: 42.8 },\r\n { x: 41.6, y: 43.2 },\r\n { x: 41.8, y: 43.6 },\r\n { x: 42.0, y: 44.0 },\r\n { x: 42.2, y: 44.4 },\r\n { x: 42.4, y: 44.8 },\r\n { x: 42.6, y: 45.2 },\r\n { x: 42.8, y: 45.6 },\r\n { x: 43.0, y: 46.1 },\r\n { x: 43.2, y: 46.5 },\r\n { x: 43.4, y: 46.9 },\r\n { x: 43.6, y: 47.3 },\r\n { x: 43.8, y: 47.7 },\r\n { x: 44.0, y: 48.2 },\r\n { x: 44.2, y: 48.6 },\r\n { x: 44.4, y: 49.0 },\r\n { x: 44.6, y: 49.4 },\r\n { x: 44.8, y: 49.9 },\r\n { x: 45.0, y: 50.3 },\r\n { x: 45.2, y: 50.7 },\r\n { x: 45.4, y: 51.2 },\r\n { x: 45.6, y: 51.6 },\r\n { x: 45.8, y: 52.1 },\r\n { x: 46.0, y: 52.5 },\r\n { x: 46.2, y: 52.9 },\r\n { x: 46.4, y: 53.4 },\r\n { x: 46.6, y: 53.8 },\r\n { x: 46.8, y: 54.3 },\r\n { x: 47.0, y: 54.7 },\r\n { x: 47.2, y: 55.2 },\r\n { x: 47.4, y: 55.6 },\r\n { x: 47.6, y: 56.1 },\r\n { x: 47.8, y: 56.6 },\r\n { x: 48.0, y: 57.0 },\r\n { x: 48.2, y: 57.5 },\r\n { x: 48.4, y: 57.9 },\r\n { x: 48.6, y: 58.4 },\r\n { x: 48.8, y: 58.9 },\r\n { x: 49.0, y: 59.3 },\r\n { x: 49.2, y: 59.8 },\r\n { x: 49.4, y: 60.0 },\r\n ];\r\n var t3_0 = [\r\n { x: 19.8, y: 10.0 },\r\n { x: 20.0, y: 10.2 },\r\n { x: 20.2, y: 10.4 },\r\n { x: 20.4, y: 10.6 },\r\n { x: 20.6, y: 10.8 },\r\n { x: 20.8, y: 11.0 },\r\n { x: 21.0, y: 11.2 },\r\n { x: 21.2, y: 11.5 },\r\n { x: 21.4, y: 11.7 },\r\n { x: 21.6, y: 11.9 },\r\n { x: 21.8, y: 12.1 },\r\n { x: 22.0, y: 12.3 },\r\n { x: 22.2, y: 12.5 },\r\n { x: 22.4, y: 12.7 },\r\n { x: 22.6, y: 13.0 },\r\n { x: 22.8, y: 13.2 },\r\n { x: 23.0, y: 13.4 },\r\n { x: 23.2, y: 13.6 },\r\n { x: 23.4, y: 13.9 },\r\n { x: 23.6, y: 14.1 },\r\n { x: 23.8, y: 14.3 },\r\n { x: 24.0, y: 14.6 },\r\n { x: 24.2, y: 14.8 },\r\n { x: 24.4, y: 15.0 },\r\n { x: 24.6, y: 15.3 },\r\n { x: 24.8, y: 15.5 },\r\n { x: 25.0, y: 15.8 },\r\n { x: 25.2, y: 16.0 },\r\n { x: 25.4, y: 16.3 },\r\n { x: 25.6, y: 16.5 },\r\n { x: 25.8, y: 16.8 },\r\n { x: 26.0, y: 17.0 },\r\n { x: 26.2, y: 17.3 },\r\n { x: 26.4, y: 17.5 },\r\n { x: 26.6, y: 17.8 },\r\n { x: 26.8, y: 18.0 },\r\n { x: 27.0, y: 18.3 },\r\n { x: 27.2, y: 18.6 },\r\n { x: 27.4, y: 18.8 },\r\n { x: 27.6, y: 19.1 },\r\n { x: 27.8, y: 19.4 },\r\n { x: 28.0, y: 19.6 },\r\n { x: 28.2, y: 19.9 },\r\n { x: 28.4, y: 20.2 },\r\n { x: 28.6, y: 20.5 },\r\n { x: 28.8, y: 20.7 },\r\n { x: 29.0, y: 21.0 },\r\n { x: 29.2, y: 21.3 },\r\n { x: 29.4, y: 21.6 },\r\n { x: 29.6, y: 21.9 },\r\n { x: 29.8, y: 22.2 },\r\n { x: 30.0, y: 22.5 },\r\n { x: 30.2, y: 22.8 },\r\n { x: 30.4, y: 23.0 },\r\n { x: 30.6, y: 23.3 },\r\n { x: 30.8, y: 23.6 },\r\n { x: 31.0, y: 23.9 },\r\n { x: 31.2, y: 24.2 },\r\n { x: 31.4, y: 24.5 },\r\n { x: 31.6, y: 24.8 },\r\n { x: 31.8, y: 25.1 },\r\n { x: 32.0, y: 25.5 },\r\n { x: 32.2, y: 25.8 },\r\n { x: 32.4, y: 26.1 },\r\n { x: 32.6, y: 26.4 },\r\n { x: 32.8, y: 26.7 },\r\n { x: 33.0, y: 27.0 },\r\n { x: 33.2, y: 27.3 },\r\n { x: 33.4, y: 27.7 },\r\n { x: 33.6, y: 28.0 },\r\n { x: 33.8, y: 28.3 },\r\n { x: 34.0, y: 28.6 },\r\n { x: 34.2, y: 29.0 },\r\n { x: 34.4, y: 29.3 },\r\n { x: 34.6, y: 29.6 },\r\n { x: 34.8, y: 30.0 },\r\n { x: 35.0, y: 30.3 },\r\n { x: 35.2, y: 30.6 },\r\n { x: 35.4, y: 31.0 },\r\n { x: 35.6, y: 31.3 },\r\n { x: 35.8, y: 31.6 },\r\n { x: 36.0, y: 32.0 },\r\n { x: 36.2, y: 32.3 },\r\n { x: 36.4, y: 32.7 },\r\n { x: 36.6, y: 33.0 },\r\n { x: 36.8, y: 33.4 },\r\n { x: 37.0, y: 33.7 },\r\n { x: 37.2, y: 34.1 },\r\n { x: 37.4, y: 34.4 },\r\n { x: 37.6, y: 38.4 },\r\n { x: 37.8, y: 35.2 },\r\n { x: 38.0, y: 35.5 },\r\n { x: 38.2, y: 35.9 },\r\n { x: 38.4, y: 36.3 },\r\n { x: 38.6, y: 36.6 },\r\n { x: 38.8, y: 37.0 },\r\n { x: 39.0, y: 37.4 },\r\n { x: 39.2, y: 37.7 },\r\n { x: 39.4, y: 38.1 },\r\n { x: 39.6, y: 38.5 },\r\n { x: 39.8, y: 38.9 },\r\n { x: 40.0, y: 39.2 },\r\n { x: 40.2, y: 39.6 },\r\n { x: 40.4, y: 40.0 },\r\n { x: 40.6, y: 40.4 },\r\n { x: 40.8, y: 40.8 },\r\n { x: 41.0, y: 41.2 },\r\n { x: 41.2, y: 41.6 },\r\n { x: 41.4, y: 42.0 },\r\n { x: 41.6, y: 42.3 },\r\n { x: 41.8, y: 42.7 },\r\n { x: 42.0, y: 43.1 },\r\n { x: 42.2, y: 43.5 },\r\n { x: 42.4, y: 43.9 },\r\n { x: 42.6, y: 44.3 },\r\n { x: 42.8, y: 44.7 },\r\n { x: 43.0, y: 45.2 },\r\n { x: 43.2, y: 45.6 },\r\n { x: 43.4, y: 46.0 },\r\n { x: 43.6, y: 46.4 },\r\n { x: 43.8, y: 46.8 },\r\n { x: 44.0, y: 47.2 },\r\n { x: 44.2, y: 47.6 },\r\n { x: 44.4, y: 48.0 },\r\n { x: 44.6, y: 48.5 },\r\n { x: 44.8, y: 48.9 },\r\n { x: 45.0, y: 49.3 },\r\n { x: 45.2, y: 49.7 },\r\n { x: 45.4, y: 50.2 },\r\n { x: 45.6, y: 50.6 },\r\n { x: 45.8, y: 51.0 },\r\n { x: 46.0, y: 51.5 },\r\n { x: 46.2, y: 51.9 },\r\n { x: 46.4, y: 52.3 },\r\n { x: 46.6, y: 52.8 },\r\n { x: 46.8, y: 53.2 },\r\n { x: 47.0, y: 53.7 },\r\n { x: 47.2, y: 54.1 },\r\n { x: 47.4, y: 54.5 },\r\n { x: 47.6, y: 55.0 },\r\n { x: 47.8, y: 55.4 },\r\n { x: 48.0, y: 55.9 },\r\n { x: 48.2, y: 56.3 },\r\n { x: 48.4, y: 56.8 },\r\n { x: 48.6, y: 57.3 },\r\n { x: 48.8, y: 57.7 },\r\n { x: 49.0, y: 58.2 },\r\n { x: 49.2, y: 58.6 },\r\n { x: 49.4, y: 59.1 },\r\n { x: 49.6, y: 59.6 },\r\n { x: 49.8, y: 60.0 },\r\n ];\r\n var t3_5 = [\r\n { x: 20.0, y: 10.0 },\r\n { x: 20.2, y: 10.2 },\r\n { x: 20.4, y: 10.4 },\r\n { x: 20.6, y: 10.6 },\r\n { x: 20.8, y: 10.8 },\r\n { x: 21.0, y: 11.0 },\r\n { x: 21.2, y: 11.2 },\r\n { x: 21.4, y: 11.4 },\r\n { x: 21.6, y: 11.6 },\r\n { x: 21.8, y: 11.9 },\r\n { x: 22.0, y: 12.1 },\r\n { x: 22.2, y: 12.3 },\r\n { x: 22.4, y: 12.5 },\r\n { x: 22.6, y: 12.7 },\r\n { x: 22.8, y: 12.9 },\r\n { x: 23.0, y: 13.1 },\r\n { x: 23.2, y: 13.4 },\r\n { x: 23.4, y: 13.6 },\r\n { x: 23.6, y: 13.8 },\r\n { x: 23.8, y: 14.1 },\r\n { x: 24.0, y: 14.3 },\r\n { x: 24.2, y: 14.5 },\r\n { x: 24.4, y: 14.7 },\r\n { x: 24.6, y: 15.0 },\r\n { x: 24.8, y: 15.2 },\r\n { x: 25.0, y: 15.5 },\r\n { x: 25.2, y: 15.7 },\r\n { x: 25.4, y: 15.9 },\r\n { x: 25.6, y: 16.2 },\r\n { x: 25.8, y: 16.4 },\r\n { x: 26.0, y: 16.7 },\r\n { x: 26.2, y: 16.9 },\r\n { x: 26.4, y: 17.2 },\r\n { x: 26.6, y: 17.4 },\r\n { x: 26.8, y: 17.7 },\r\n { x: 27.0, y: 17.9 },\r\n { x: 27.2, y: 18.2 },\r\n { x: 27.4, y: 18.5 },\r\n { x: 27.6, y: 18.7 },\r\n { x: 27.8, y: 19.0 },\r\n { x: 28.0, y: 19.3 },\r\n { x: 28.2, y: 19.5 },\r\n { x: 28.4, y: 19.8 },\r\n { x: 28.6, y: 20.1 },\r\n { x: 28.8, y: 20.3 },\r\n { x: 29.0, y: 20.6 },\r\n { x: 29.2, y: 20.9 },\r\n { x: 29.4, y: 21.2 },\r\n { x: 29.6, y: 21.4 },\r\n { x: 29.8, y: 21.7 },\r\n { x: 30.0, y: 22.0 },\r\n { x: 30.2, y: 22.3 },\r\n { x: 30.4, y: 22.6 },\r\n { x: 30.6, y: 22.9 },\r\n { x: 30.8, y: 23.2 },\r\n { x: 31.0, y: 23.5 },\r\n { x: 31.2, y: 23.8 },\r\n { x: 31.4, y: 24.1 },\r\n { x: 31.6, y: 24.4 },\r\n { x: 31.8, y: 24.7 },\r\n { x: 32.0, y: 25.0 },\r\n { x: 32.2, y: 25.3 },\r\n { x: 32.4, y: 25.6 },\r\n { x: 32.6, y: 25.9 },\r\n { x: 32.8, y: 26.2 },\r\n { x: 33.0, y: 26.5 },\r\n { x: 33.2, y: 26.8 },\r\n { x: 33.4, y: 27.1 },\r\n { x: 33.6, y: 27.4 },\r\n { x: 33.8, y: 27.7 },\r\n { x: 34.0, y: 28.1 },\r\n { x: 34.2, y: 28.4 },\r\n { x: 34.4, y: 28.7 },\r\n { x: 34.6, y: 29.0 },\r\n { x: 34.8, y: 29.4 },\r\n { x: 35.0, y: 29.7 },\r\n { x: 35.2, y: 30.0 },\r\n { x: 35.4, y: 30.4 },\r\n { x: 35.6, y: 30.7 },\r\n { x: 35.8, y: 31.0 },\r\n { x: 36.0, y: 31.4 },\r\n { x: 36.2, y: 31.7 },\r\n { x: 36.4, y: 32.0 },\r\n { x: 36.6, y: 32.4 },\r\n { x: 36.8, y: 32.7 },\r\n { x: 37.0, y: 33.1 },\r\n { x: 37.2, y: 33.4 },\r\n { x: 37.4, y: 33.8 },\r\n { x: 37.6, y: 34.1 },\r\n { x: 37.8, y: 34.5 },\r\n { x: 38.0, y: 34.8 },\r\n { x: 38.2, y: 35.2 },\r\n { x: 38.4, y: 35.5 },\r\n { x: 38.6, y: 35.9 },\r\n { x: 38.8, y: 36.3 },\r\n { x: 39.0, y: 36.6 },\r\n { x: 39.2, y: 37.0 },\r\n { x: 39.4, y: 37.4 },\r\n { x: 39.6, y: 37.7 },\r\n { x: 39.8, y: 38.1 },\r\n { x: 40.0, y: 38.5 },\r\n { x: 40.2, y: 38.8 },\r\n { x: 40.4, y: 39.2 },\r\n { x: 40.6, y: 39.6 },\r\n { x: 40.8, y: 40.0 },\r\n { x: 41.0, y: 40.4 },\r\n { x: 41.2, y: 40.7 },\r\n { x: 41.4, y: 41.1 },\r\n { x: 41.6, y: 41.5 },\r\n { x: 41.8, y: 41.9 },\r\n { x: 42.0, y: 42.3 },\r\n { x: 42.2, y: 42.7 },\r\n { x: 42.4, y: 43.1 },\r\n { x: 42.6, y: 43.5 },\r\n { x: 42.8, y: 43.9 },\r\n { x: 43.0, y: 44.3 },\r\n { x: 43.2, y: 44.7 },\r\n { x: 43.4, y: 45.1 },\r\n { x: 43.6, y: 45.5 },\r\n { x: 43.8, y: 45.9 },\r\n { x: 44.0, y: 46.3 },\r\n { x: 44.2, y: 46.7 },\r\n { x: 44.4, y: 47.1 },\r\n { x: 44.6, y: 47.5 },\r\n { x: 44.8, y: 47.9 },\r\n { x: 45.0, y: 48.3 },\r\n { x: 45.2, y: 48.8 },\r\n { x: 45.4, y: 49.2 },\r\n { x: 45.6, y: 49.6 },\r\n { x: 45.8, y: 50.0 },\r\n { x: 46.0, y: 50.5 },\r\n { x: 46.2, y: 50.9 },\r\n { x: 46.4, y: 51.3 },\r\n { x: 46.6, y: 51.7 },\r\n { x: 46.8, y: 52.2 },\r\n { x: 47.0, y: 52.6 },\r\n { x: 47.2, y: 53.0 },\r\n { x: 47.4, y: 53.5 },\r\n { x: 47.6, y: 53.9 },\r\n { x: 47.8, y: 54.4 },\r\n { x: 48.0, y: 54.8 },\r\n { x: 48.2, y: 55.2 },\r\n { x: 48.4, y: 55.7 },\r\n { x: 48.6, y: 56.1 },\r\n { x: 48.8, y: 56.6 },\r\n { x: 49.0, y: 57.0 },\r\n { x: 49.2, y: 57.5 },\r\n { x: 49.4, y: 57.9 },\r\n { x: 49.6, y: 58.4 },\r\n { x: 49.8, y: 58.8 },\r\n { x: 50.0, y: 59.3 },\r\n { x: 50.2, y: 59.8 },\r\n { x: 50.4, y: 60.0 },\r\n ];\r\n var t4_0 = [\r\n { x: 20.2, y: 10.0 },\r\n { x: 20.4, y: 10.2 },\r\n { x: 20.6, y: 10.4 },\r\n { x: 20.8, y: 10.6 },\r\n { x: 21.0, y: 10.8 },\r\n { x: 21.2, y: 11.0 },\r\n { x: 21.4, y: 11.2 },\r\n { x: 21.6, y: 11.4 },\r\n { x: 21.8, y: 11.6 },\r\n { x: 22.0, y: 11.8 },\r\n { x: 22.2, y: 12.0 },\r\n { x: 22.4, y: 12.2 },\r\n { x: 22.6, y: 12.5 },\r\n { x: 22.8, y: 12.7 },\r\n { x: 23.0, y: 12.9 },\r\n { x: 23.2, y: 13.1 },\r\n { x: 23.4, y: 13.3 },\r\n { x: 23.6, y: 13.5 },\r\n { x: 23.8, y: 13.8 },\r\n { x: 24.0, y: 14.0 },\r\n { x: 24.2, y: 14.2 },\r\n { x: 24.4, y: 14.5 },\r\n { x: 24.6, y: 14.7 },\r\n { x: 24.8, y: 14.9 },\r\n { x: 25.0, y: 15.2 },\r\n { x: 25.2, y: 15.4 },\r\n { x: 25.4, y: 15.6 },\r\n { x: 25.6, y: 15.9 },\r\n { x: 25.8, y: 16.1 },\r\n { x: 26.0, y: 16.3 },\r\n { x: 26.2, y: 16.6 },\r\n { x: 26.4, y: 16.8 },\r\n { x: 26.6, y: 17.1 },\r\n { x: 26.8, y: 17.3 },\r\n { x: 27.0, y: 17.6 },\r\n { x: 27.2, y: 17.8 },\r\n { x: 27.4, y: 18.1 },\r\n { x: 27.6, y: 18.4 },\r\n { x: 27.8, y: 18.6 },\r\n { x: 28.0, y: 18.9 },\r\n { x: 28.2, y: 19.1 },\r\n { x: 28.4, y: 19.4 },\r\n { x: 28.6, y: 19.7 },\r\n { x: 28.8, y: 19.9 },\r\n { x: 29.0, y: 20.2 },\r\n { x: 29.2, y: 20.5 },\r\n { x: 29.4, y: 20.8 },\r\n { x: 29.6, y: 21.0 },\r\n { x: 29.8, y: 21.3 },\r\n { x: 30.0, y: 21.6 },\r\n { x: 30.2, y: 21.9 },\r\n { x: 30.4, y: 22.1 },\r\n { x: 30.6, y: 22.4 },\r\n { x: 30.8, y: 22.7 },\r\n { x: 31.0, y: 23.0 },\r\n { x: 31.2, y: 23.6 },\r\n { x: 31.4, y: 23.6 },\r\n { x: 31.6, y: 23.9 },\r\n { x: 31.8, y: 24.2 },\r\n { x: 32.0, y: 24.5 },\r\n { x: 32.2, y: 24.8 },\r\n { x: 32.4, y: 25.1 },\r\n { x: 32.6, y: 25.4 },\r\n { x: 32.8, y: 25.7 },\r\n { x: 33.0, y: 26.0 },\r\n { x: 33.2, y: 26.3 },\r\n { x: 33.4, y: 26.6 },\r\n { x: 33.6, y: 26.9 },\r\n { x: 33.8, y: 27.2 },\r\n { x: 34.0, y: 27.5 },\r\n { x: 34.2, y: 27.8 },\r\n { x: 34.4, y: 28.1 },\r\n { x: 34.6, y: 28.5 },\r\n { x: 34.8, y: 28.8 },\r\n { x: 35.0, y: 29.1 },\r\n { x: 35.2, y: 29.4 },\r\n { x: 35.4, y: 29.8 },\r\n { x: 35.6, y: 30.1 },\r\n { x: 35.8, y: 30.4 },\r\n { x: 36.0, y: 30.7 },\r\n { x: 36.2, y: 31.1 },\r\n { x: 36.4, y: 31.4 },\r\n { x: 36.6, y: 31.7 },\r\n { x: 36.8, y: 32.1 },\r\n { x: 37.0, y: 32.4 },\r\n { x: 37.2, y: 32.8 },\r\n { x: 37.4, y: 33.1 },\r\n { x: 37.6, y: 33.4 },\r\n { x: 37.8, y: 33.8 },\r\n { x: 38.0, y: 34.1 },\r\n { x: 38.2, y: 34.5 },\r\n { x: 38.4, y: 34.8 },\r\n { x: 38.6, y: 35.2 },\r\n { x: 38.8, y: 35.5 },\r\n { x: 39.0, y: 35.9 },\r\n { x: 39.2, y: 36.3 },\r\n { x: 39.4, y: 36.6 },\r\n { x: 39.6, y: 37.0 },\r\n { x: 39.8, y: 37.3 },\r\n { x: 40.0, y: 37.7 },\r\n { x: 40.2, y: 38.1 },\r\n { x: 40.4, y: 38.4 },\r\n { x: 40.6, y: 38.8 },\r\n { x: 40.8, y: 39.2 },\r\n { x: 41.0, y: 39.6 },\r\n { x: 41.2, y: 39.9 },\r\n { x: 41.4, y: 40.3 },\r\n { x: 41.6, y: 40.7 },\r\n { x: 41.8, y: 41.1 },\r\n { x: 42.0, y: 41.5 },\r\n { x: 42.2, y: 41.8 },\r\n { x: 42.4, y: 42.2 },\r\n { x: 42.6, y: 42.6 },\r\n { x: 42.8, y: 43.0 },\r\n { x: 43.0, y: 43.4 },\r\n { x: 43.2, y: 43.8 },\r\n { x: 43.4, y: 44.2 },\r\n { x: 43.6, y: 44.6 },\r\n { x: 43.8, y: 45.0 },\r\n { x: 44.0, y: 45.4 },\r\n { x: 44.2, y: 45.8 },\r\n { x: 44.4, y: 46.2 },\r\n { x: 44.6, y: 46.6 },\r\n { x: 44.8, y: 47.0 },\r\n { x: 45.0, y: 47.4 },\r\n { x: 45.2, y: 47.8 },\r\n { x: 45.4, y: 48.2 },\r\n { x: 45.6, y: 48.6 },\r\n { x: 45.8, y: 49.0 },\r\n { x: 46.0, y: 49.5 },\r\n { x: 46.2, y: 49.9 },\r\n { x: 46.4, y: 50.3 },\r\n { x: 46.6, y: 50.7 },\r\n { x: 46.8, y: 51.1 },\r\n { x: 47.0, y: 51.6 },\r\n { x: 47.2, y: 52.0 },\r\n { x: 47.4, y: 52.4 },\r\n { x: 47.6, y: 52.8 },\r\n { x: 47.8, y: 53.3 },\r\n { x: 48.0, y: 53.7 },\r\n { x: 48.2, y: 54.1 },\r\n { x: 48.4, y: 54.6 },\r\n { x: 48.6, y: 55.0 },\r\n { x: 48.8, y: 55.5 },\r\n { x: 49.0, y: 55.9 },\r\n { x: 49.2, y: 56.3 },\r\n { x: 49.4, y: 56.8 },\r\n { x: 49.6, y: 57.2 },\r\n { x: 49.8, y: 57.7 },\r\n { x: 50.0, y: 58.1 },\r\n { x: 50.2, y: 58.6 },\r\n { x: 50.4, y: 59.0 },\r\n { x: 50.6, y: 59.5 },\r\n { x: 50.8, y: 60.0 },\r\n ];\r\n var t4_5 = [\r\n { x: 20.4, y: 10.0 },\r\n { x: 20.6, y: 10.2 },\r\n { x: 20.8, y: 10.4 },\r\n { x: 21.0, y: 10.6 },\r\n { x: 21.2, y: 10.8 },\r\n { x: 21.4, y: 11.0 },\r\n { x: 21.6, y: 11.2 },\r\n { x: 21.8, y: 11.4 },\r\n { x: 22.0, y: 11.6 },\r\n { x: 22.2, y: 11.8 },\r\n { x: 22.4, y: 12.0 },\r\n { x: 22.6, y: 12.2 },\r\n { x: 22.8, y: 12.4 },\r\n { x: 23.0, y: 12.6 },\r\n { x: 23.2, y: 12.8 },\r\n { x: 23.4, y: 13.1 },\r\n { x: 23.6, y: 13.1 },\r\n { x: 23.8, y: 13.5 },\r\n { x: 24.0, y: 13.7 },\r\n { x: 24.2, y: 13.9 },\r\n { x: 24.4, y: 14.2 },\r\n { x: 24.6, y: 14.4 },\r\n { x: 24.8, y: 14.6 },\r\n { x: 25.0, y: 14.9 },\r\n { x: 25.2, y: 15.1 },\r\n { x: 25.4, y: 15.3 },\r\n { x: 25.6, y: 15.6 },\r\n { x: 25.8, y: 15.8 },\r\n { x: 26.0, y: 16.0 },\r\n { x: 26.2, y: 16.3 },\r\n { x: 26.4, y: 16.5 },\r\n { x: 26.6, y: 16.8 },\r\n { x: 26.8, y: 17.0 },\r\n { x: 27.0, y: 17.2 },\r\n { x: 27.2, y: 17.5 },\r\n { x: 27.4, y: 17.7 },\r\n { x: 27.6, y: 18.0 },\r\n { x: 27.8, y: 18.3 },\r\n { x: 28.0, y: 18.5 },\r\n { x: 28.2, y: 18.8 },\r\n { x: 28.4, y: 19.0 },\r\n { x: 28.6, y: 19.3 },\r\n { x: 28.8, y: 19.5 },\r\n { x: 29.0, y: 19.8 },\r\n { x: 29.2, y: 20.1 },\r\n { x: 29.4, y: 20.3 },\r\n { x: 29.6, y: 20.6 },\r\n { x: 29.8, y: 20.9 },\r\n { x: 30.0, y: 21.2 },\r\n { x: 30.2, y: 21.4 },\r\n { x: 30.4, y: 21.7 },\r\n { x: 30.6, y: 22.0 },\r\n { x: 30.8, y: 22.3 },\r\n { x: 31.0, y: 22.5 },\r\n { x: 31.2, y: 22.8 },\r\n { x: 31.4, y: 23.1 },\r\n { x: 31.6, y: 23.4 },\r\n { x: 31.8, y: 23.7 },\r\n { x: 32.0, y: 24.0 },\r\n { x: 32.2, y: 24.3 },\r\n { x: 32.4, y: 24.6 },\r\n { x: 32.6, y: 24.9 },\r\n { x: 32.8, y: 25.2 },\r\n { x: 33.0, y: 25.5 },\r\n { x: 33.2, y: 25.8 },\r\n { x: 33.4, y: 26.1 },\r\n { x: 33.6, y: 26.4 },\r\n { x: 33.8, y: 26.7 },\r\n { x: 34.0, y: 27.0 },\r\n { x: 34.2, y: 27.3 },\r\n { x: 34.4, y: 27.6 },\r\n { x: 34.6, y: 27.9 },\r\n { x: 34.8, y: 28.2 },\r\n { x: 35.0, y: 28.5 },\r\n { x: 35.2, y: 28.8 },\r\n { x: 35.4, y: 29.2 },\r\n { x: 35.6, y: 29.5 },\r\n { x: 35.8, y: 29.8 },\r\n { x: 36.0, y: 30.1 },\r\n { x: 36.2, y: 30.5 },\r\n { x: 36.4, y: 30.8 },\r\n { x: 36.6, y: 31.1 },\r\n { x: 36.8, y: 31.4 },\r\n { x: 37.0, y: 31.8 },\r\n { x: 37.2, y: 32.1 },\r\n { x: 37.4, y: 32.4 },\r\n { x: 37.6, y: 32.8 },\r\n { x: 37.8, y: 33.1 },\r\n { x: 38.0, y: 33.5 },\r\n { x: 38.2, y: 33.8 },\r\n { x: 38.4, y: 34.2 },\r\n { x: 38.6, y: 34.5 },\r\n { x: 38.8, y: 34.8 },\r\n { x: 39.0, y: 35.2 },\r\n { x: 39.2, y: 35.5 },\r\n { x: 39.4, y: 35.9 },\r\n { x: 39.6, y: 36.3 },\r\n { x: 39.8, y: 36.6 },\r\n { x: 40.0, y: 37.0 },\r\n { x: 40.2, y: 37.3 },\r\n { x: 40.4, y: 37.7 },\r\n { x: 40.6, y: 38.1 },\r\n { x: 40.8, y: 38.4 },\r\n { x: 41.0, y: 38.8 },\r\n { x: 41.2, y: 39.1 },\r\n { x: 41.4, y: 39.5 },\r\n { x: 41.6, y: 39.9 },\r\n { x: 41.8, y: 40.3 },\r\n { x: 42.0, y: 40.6 },\r\n { x: 42.2, y: 41.0 },\r\n { x: 42.4, y: 41.4 },\r\n { x: 42.6, y: 41.8 },\r\n { x: 42.8, y: 42.2 },\r\n { x: 43.0, y: 42.5 },\r\n { x: 43.2, y: 42.9 },\r\n { x: 43.4, y: 43.3 },\r\n { x: 43.6, y: 43.7 },\r\n { x: 43.8, y: 44.1 },\r\n { x: 44.0, y: 44.5 },\r\n { x: 44.2, y: 44.9 },\r\n { x: 44.4, y: 45.3 },\r\n { x: 44.6, y: 45.7 },\r\n { x: 44.8, y: 46.1 },\r\n { x: 45.0, y: 46.5 },\r\n { x: 45.2, y: 46.9 },\r\n { x: 45.4, y: 47.3 },\r\n { x: 45.6, y: 47.7 },\r\n { x: 45.8, y: 48.1 },\r\n { x: 46.0, y: 48.5 },\r\n { x: 46.2, y: 48.9 },\r\n { x: 46.4, y: 49.3 },\r\n { x: 46.6, y: 49.7 },\r\n { x: 46.8, y: 50.1 },\r\n { x: 47.0, y: 50.5 },\r\n { x: 47.2, y: 51.0 },\r\n { x: 47.4, y: 51.4 },\r\n { x: 47.6, y: 51.8 },\r\n { x: 47.8, y: 52.2 },\r\n { x: 48.0, y: 52.7 },\r\n { x: 48.2, y: 53.1 },\r\n { x: 48.4, y: 53.5 },\r\n { x: 48.6, y: 53.9 },\r\n { x: 48.8, y: 54.4 },\r\n { x: 49.0, y: 54.8 },\r\n { x: 49.2, y: 55.2 },\r\n { x: 49.4, y: 55.7 },\r\n { x: 49.6, y: 56.1 },\r\n { x: 49.8, y: 56.6 },\r\n { x: 50.0, y: 57.0 },\r\n { x: 50.2, y: 57.4 },\r\n { x: 50.4, y: 57.9 },\r\n { x: 50.6, y: 58.3 },\r\n { x: 50.8, y: 58.8 },\r\n { x: 51.0, y: 59.2 },\r\n { x: 51.2, y: 59.7 },\r\n { x: 51.4, y: 60.0 },\r\n ];\r\n var t5_0 = [\r\n { x: 20.6, y: 10.0 },\r\n { x: 20.8, y: 10.2 },\r\n { x: 21.0, y: 10.4 },\r\n { x: 21.2, y: 10.6 },\r\n { x: 21.4, y: 10.8 },\r\n { x: 21.6, y: 11.0 },\r\n { x: 21.8, y: 11.2 },\r\n { x: 22.0, y: 11.4 },\r\n { x: 22.2, y: 11.6 },\r\n { x: 22.4, y: 11.8 },\r\n { x: 22.6, y: 12.0 },\r\n { x: 22.8, y: 12.2 },\r\n { x: 23.0, y: 12.4 },\r\n { x: 23.2, y: 12.6 },\r\n { x: 23.4, y: 12.8 },\r\n { x: 23.6, y: 13.0 },\r\n { x: 23.8, y: 13.2 },\r\n { x: 24.0, y: 13.5 },\r\n { x: 24.2, y: 13.7 },\r\n { x: 24.4, y: 13.9 },\r\n { x: 24.6, y: 14.1 },\r\n { x: 24.8, y: 14.3 },\r\n { x: 25.0, y: 14.6 },\r\n { x: 25.2, y: 14.8 },\r\n { x: 25.4, y: 15.0 },\r\n { x: 25.6, y: 15.2 },\r\n { x: 25.8, y: 15.5 },\r\n { x: 26.0, y: 15.7 },\r\n { x: 26.2, y: 15.9 },\r\n { x: 26.4, y: 16.2 },\r\n { x: 26.6, y: 16.4 },\r\n { x: 26.8, y: 16.7 },\r\n { x: 27.0, y: 16.9 },\r\n { x: 27.2, y: 17.1 },\r\n { x: 27.4, y: 17.4 },\r\n { x: 27.6, y: 17.6 },\r\n { x: 27.8, y: 17.9 },\r\n { x: 28.0, y: 18.1 },\r\n { x: 28.2, y: 18.4 },\r\n { x: 28.4, y: 18.6 },\r\n { x: 28.6, y: 18.9 },\r\n { x: 28.8, y: 19.2 },\r\n { x: 29.0, y: 19.4 },\r\n { x: 29.2, y: 19.7 },\r\n { x: 29.4, y: 19.9 },\r\n { x: 29.6, y: 20.2 },\r\n { x: 29.8, y: 20.5 },\r\n { x: 30.0, y: 20.7 },\r\n { x: 30.2, y: 21.0 },\r\n { x: 30.4, y: 21.3 },\r\n { x: 30.6, y: 21.6 },\r\n { x: 30.8, y: 21.8 },\r\n { x: 31.0, y: 22.1 },\r\n { x: 31.2, y: 22.4 },\r\n { x: 31.4, y: 22.7 },\r\n { x: 31.6, y: 22.9 },\r\n { x: 31.8, y: 23.2 },\r\n { x: 32.0, y: 23.5 },\r\n { x: 32.2, y: 23.8 },\r\n { x: 32.4, y: 24.1 },\r\n { x: 32.6, y: 24.4 },\r\n { x: 32.8, y: 24.7 },\r\n { x: 33.0, y: 25.0 },\r\n { x: 33.2, y: 25.2 },\r\n { x: 33.4, y: 25.5 },\r\n { x: 33.6, y: 25.8 },\r\n { x: 33.8, y: 26.1 },\r\n { x: 34.0, y: 26.4 },\r\n { x: 34.2, y: 26.4 },\r\n { x: 34.4, y: 27.0 },\r\n { x: 34.6, y: 27.4 },\r\n { x: 34.8, y: 27.7 },\r\n { x: 35.0, y: 28.0 },\r\n { x: 35.2, y: 28.3 },\r\n { x: 35.4, y: 28.6 },\r\n { x: 35.6, y: 28.9 },\r\n { x: 35.8, y: 29.2 },\r\n { x: 36.0, y: 29.5 },\r\n { x: 36.2, y: 29.9 },\r\n { x: 36.4, y: 30.2 },\r\n { x: 36.6, y: 30.5 },\r\n { x: 36.8, y: 30.8 },\r\n { x: 37.0, y: 31.2 },\r\n { x: 37.2, y: 31.5 },\r\n { x: 37.4, y: 31.8 },\r\n { x: 37.6, y: 32.1 },\r\n { x: 37.8, y: 32.5 },\r\n { x: 38.0, y: 32.8 },\r\n { x: 38.2, y: 33.1 },\r\n { x: 38.4, y: 33.5 },\r\n { x: 38.6, y: 33.8 },\r\n { x: 38.8, y: 34.2 },\r\n { x: 39.0, y: 34.5 },\r\n { x: 39.2, y: 34.8 },\r\n { x: 39.4, y: 35.2 },\r\n { x: 39.6, y: 35.5 },\r\n { x: 39.8, y: 35.9 },\r\n { x: 40.0, y: 36.2 },\r\n { x: 40.2, y: 36.6 },\r\n { x: 40.4, y: 36.9 },\r\n { x: 40.6, y: 37.3 },\r\n { x: 40.8, y: 37.7 },\r\n { x: 41.0, y: 38.0 },\r\n { x: 41.2, y: 38.4 },\r\n { x: 41.4, y: 38.7 },\r\n { x: 41.6, y: 39.1 },\r\n { x: 41.8, y: 39.5 },\r\n { x: 42.0, y: 39.8 },\r\n { x: 42.2, y: 40.2 },\r\n { x: 42.4, y: 40.6 },\r\n { x: 42.6, y: 40.9 },\r\n { x: 42.8, y: 41.3 },\r\n { x: 43.0, y: 41.7 },\r\n { x: 43.2, y: 42.1 },\r\n { x: 43.4, y: 42.5 },\r\n { x: 43.6, y: 42.8 },\r\n { x: 43.8, y: 43.2 },\r\n { x: 44.0, y: 43.6 },\r\n { x: 44.2, y: 44.0 },\r\n { x: 44.4, y: 44.4 },\r\n { x: 44.6, y: 44.8 },\r\n { x: 44.8, y: 45.1 },\r\n { x: 45.0, y: 45.5 },\r\n { x: 45.2, y: 45.9 },\r\n { x: 45.4, y: 46.3 },\r\n { x: 45.6, y: 46.7 },\r\n { x: 45.8, y: 47.1 },\r\n { x: 46.0, y: 47.5 },\r\n { x: 46.2, y: 47.9 },\r\n { x: 46.4, y: 48.3 },\r\n { x: 46.6, y: 48.7 },\r\n { x: 46.8, y: 49.1 },\r\n { x: 47.0, y: 49.5 },\r\n { x: 47.2, y: 50.5 },\r\n { x: 47.4, y: 50.4 },\r\n { x: 47.6, y: 50.8 },\r\n { x: 47.8, y: 51.2 },\r\n { x: 48.0, y: 51.6 },\r\n { x: 48.2, y: 52.0 },\r\n { x: 48.4, y: 52.5 },\r\n { x: 48.6, y: 52.9 },\r\n { x: 48.8, y: 53.3 },\r\n { x: 49.0, y: 53.7 },\r\n { x: 49.2, y: 54.1 },\r\n { x: 49.4, y: 54.6 },\r\n { x: 49.6, y: 55.0 },\r\n { x: 49.8, y: 55.4 },\r\n { x: 50.0, y: 55.9 },\r\n { x: 50.2, y: 56.3 },\r\n { x: 50.4, y: 56.7 },\r\n { x: 50.6, y: 57.2 },\r\n { x: 50.8, y: 57.6 },\r\n { x: 51.0, y: 58.1 },\r\n { x: 51.2, y: 58.5 },\r\n { x: 51.4, y: 58.9 },\r\n { x: 51.6, y: 59.4 },\r\n { x: 51.8, y: 59.8 },\r\n { x: 52.0, y: 60.0 },\r\n ];\r\n var t5_5 = [\r\n { x: 20.8, y: 10.0 },\r\n { x: 21.0, y: 10.2 },\r\n { x: 21.2, y: 10.4 },\r\n { x: 21.4, y: 10.6 },\r\n { x: 21.6, y: 10.7 },\r\n { x: 21.8, y: 10.9 },\r\n { x: 22.0, y: 11.1 },\r\n { x: 22.2, y: 11.3 },\r\n { x: 22.4, y: 11.5 },\r\n { x: 22.6, y: 11.7 },\r\n { x: 22.8, y: 11.9 },\r\n { x: 23.0, y: 12.1 },\r\n { x: 23.2, y: 12.3 },\r\n { x: 23.4, y: 12.6 },\r\n { x: 23.6, y: 12.8 },\r\n { x: 23.8, y: 13.0 },\r\n { x: 24.0, y: 13.2 },\r\n { x: 24.2, y: 13.4 },\r\n { x: 24.4, y: 13.6 },\r\n { x: 24.6, y: 13.8 },\r\n { x: 24.8, y: 14.1 },\r\n { x: 25.0, y: 14.3 },\r\n { x: 25.2, y: 14.5 },\r\n { x: 25.4, y: 14.7 },\r\n { x: 25.6, y: 14.9 },\r\n { x: 25.8, y: 15.2 },\r\n { x: 26.0, y: 15.4 },\r\n { x: 26.2, y: 15.6 },\r\n { x: 26.4, y: 15.9 },\r\n { x: 26.6, y: 16.1 },\r\n { x: 26.8, y: 16.3 },\r\n { x: 27.0, y: 16.6 },\r\n { x: 27.2, y: 16.8 },\r\n { x: 27.4, y: 17.1 },\r\n { x: 27.6, y: 17.3 },\r\n { x: 27.8, y: 17.5 },\r\n { x: 28.0, y: 17.8 },\r\n { x: 28.2, y: 18.0 },\r\n { x: 28.4, y: 18.3 },\r\n { x: 28.6, y: 18.5 },\r\n { x: 28.8, y: 18.8 },\r\n { x: 29.0, y: 19.0 },\r\n { x: 29.2, y: 19.3 },\r\n { x: 29.4, y: 19.5 },\r\n { x: 29.6, y: 19.8 },\r\n { x: 29.8, y: 20.1 },\r\n { x: 30.0, y: 20.3 },\r\n { x: 30.2, y: 20.6 },\r\n { x: 30.4, y: 20.9 },\r\n { x: 30.6, y: 21.1 },\r\n { x: 30.8, y: 21.4 },\r\n { x: 31.0, y: 21.7 },\r\n { x: 31.2, y: 21.9 },\r\n { x: 31.4, y: 22.2 },\r\n { x: 31.6, y: 22.5 },\r\n { x: 31.8, y: 22.8 },\r\n { x: 32.0, y: 23.0 },\r\n { x: 32.2, y: 23.3 },\r\n { x: 32.4, y: 23.6 },\r\n { x: 32.6, y: 23.9 },\r\n { x: 32.8, y: 24.2 },\r\n { x: 33.0, y: 24.5 },\r\n { x: 33.2, y: 24.7 },\r\n { x: 33.4, y: 25.0 },\r\n { x: 33.6, y: 25.3 },\r\n { x: 33.8, y: 25.6 },\r\n { x: 34.0, y: 25.9 },\r\n { x: 34.2, y: 26.2 },\r\n { x: 34.4, y: 26.5 },\r\n { x: 34.6, y: 26.8 },\r\n { x: 34.8, y: 27.1 },\r\n { x: 35.0, y: 27.4 },\r\n { x: 35.2, y: 27.7 },\r\n { x: 35.4, y: 28.0 },\r\n { x: 35.6, y: 28.3 },\r\n { x: 35.8, y: 28.6 },\r\n { x: 36.0, y: 29.0 },\r\n { x: 36.2, y: 29.3 },\r\n { x: 36.4, y: 29.6 },\r\n { x: 36.6, y: 29.9 },\r\n { x: 36.8, y: 30.2 },\r\n { x: 37.0, y: 30.5 },\r\n { x: 37.2, y: 30.9 },\r\n { x: 37.4, y: 31.2 },\r\n { x: 37.6, y: 31.5 },\r\n { x: 37.8, y: 31.8 },\r\n { x: 38.0, y: 32.2 },\r\n { x: 38.2, y: 32.5 },\r\n { x: 38.4, y: 32.8 },\r\n { x: 38.6, y: 33.2 },\r\n { x: 38.8, y: 33.5 },\r\n { x: 39.0, y: 33.8 },\r\n { x: 39.2, y: 34.2 },\r\n { x: 39.4, y: 34.5 },\r\n { x: 39.6, y: 34.8 },\r\n { x: 39.8, y: 35.2 },\r\n { x: 40.0, y: 35.5 },\r\n { x: 40.2, y: 35.9 },\r\n { x: 40.4, y: 36.2 },\r\n { x: 40.6, y: 36.6 },\r\n { x: 40.8, y: 36.9 },\r\n { x: 41.0, y: 37.3 },\r\n { x: 41.2, y: 37.6 },\r\n { x: 41.4, y: 38.0 },\r\n { x: 41.6, y: 38.3 },\r\n { x: 41.8, y: 38.7 },\r\n { x: 42.0, y: 39.1 },\r\n { x: 42.2, y: 39.4 },\r\n { x: 42.4, y: 39.8 },\r\n { x: 42.6, y: 40.1 },\r\n { x: 42.8, y: 40.5 },\r\n { x: 43.0, y: 40.9 },\r\n { x: 43.2, y: 41.2 },\r\n { x: 43.4, y: 41.6 },\r\n { x: 43.6, y: 42.0 },\r\n { x: 43.8, y: 42.4 },\r\n { x: 44.0, y: 42.7 },\r\n { x: 44.2, y: 43.1 },\r\n { x: 44.4, y: 43.5 },\r\n { x: 44.6, y: 43.9 },\r\n { x: 44.8, y: 44.3 },\r\n { x: 45.0, y: 44.6 },\r\n { x: 45.2, y: 45.0 },\r\n { x: 45.4, y: 45.4 },\r\n { x: 45.6, y: 45.8 },\r\n { x: 45.8, y: 46.2 },\r\n { x: 46.0, y: 46.6 },\r\n { x: 46.2, y: 47.0 },\r\n { x: 46.4, y: 47.4 },\r\n { x: 46.6, y: 47.8 },\r\n { x: 46.8, y: 48.2 },\r\n { x: 47.0, y: 48.6 },\r\n { x: 47.2, y: 49.0 },\r\n { x: 47.4, y: 49.4 },\r\n { x: 47.6, y: 49.8 },\r\n { x: 47.8, y: 50.2 },\r\n { x: 48.0, y: 50.6 },\r\n { x: 48.2, y: 51.0 },\r\n { x: 48.4, y: 51.4 },\r\n { x: 48.6, y: 51.8 },\r\n { x: 48.8, y: 52.2 },\r\n { x: 49.0, y: 52.7 },\r\n { x: 49.2, y: 53.1 },\r\n { x: 49.4, y: 53.5 },\r\n { x: 49.6, y: 53.9 },\r\n { x: 49.8, y: 54.3 },\r\n { x: 50.0, y: 54.8 },\r\n { x: 50.2, y: 55.2 },\r\n { x: 50.4, y: 55.6 },\r\n { x: 50.6, y: 56.0 },\r\n { x: 50.8, y: 56.5 },\r\n { x: 51.0, y: 56.9 },\r\n { x: 51.2, y: 57.3 },\r\n { x: 51.4, y: 57.8 },\r\n { x: 51.6, y: 58.2 },\r\n { x: 51.8, y: 58.7 },\r\n { x: 52.0, y: 59.1 },\r\n { x: 52.2, y: 59.5 },\r\n { x: 52.4, y: 60.0 },\r\n ];\r\n var t6_0 = [\r\n { x: 21.0, y: 10.0 },\r\n { x: 21.2, y: 10.2 },\r\n { x: 21.4, y: 10.3 },\r\n { x: 21.6, y: 10.5 },\r\n { x: 21.8, y: 10.7 },\r\n { x: 22.0, y: 10.9 },\r\n { x: 22.2, y: 11.1 },\r\n { x: 22.4, y: 11.3 },\r\n { x: 22.6, y: 11.5 },\r\n { x: 22.8, y: 11.7 },\r\n { x: 23.0, y: 11.9 },\r\n { x: 23.2, y: 12.1 },\r\n { x: 23.4, y: 12.3 },\r\n { x: 23.6, y: 12.5 },\r\n { x: 23.8, y: 12.7 },\r\n { x: 24.0, y: 12.9 },\r\n { x: 24.2, y: 13.1 },\r\n { x: 24.4, y: 13.3 },\r\n { x: 24.6, y: 13.6 },\r\n { x: 24.8, y: 13.8 },\r\n { x: 25.0, y: 14.0 },\r\n { x: 25.2, y: 14.2 },\r\n { x: 25.4, y: 14.4 },\r\n { x: 25.6, y: 14.7 },\r\n { x: 25.8, y: 14.9 },\r\n { x: 26.0, y: 15.1 },\r\n { x: 26.2, y: 15.3 },\r\n { x: 26.4, y: 15.6 },\r\n { x: 26.6, y: 15.8 },\r\n { x: 26.8, y: 16.0 },\r\n { x: 27.0, y: 16.2 },\r\n { x: 27.2, y: 16.5 },\r\n { x: 27.4, y: 16.7 },\r\n { x: 27.6, y: 17.0 },\r\n { x: 27.8, y: 17.2 },\r\n { x: 28.0, y: 17.4 },\r\n { x: 28.2, y: 17.7 },\r\n { x: 28.4, y: 17.9 },\r\n { x: 28.6, y: 18.2 },\r\n { x: 28.8, y: 18.4 },\r\n { x: 29.0, y: 18.7 },\r\n { x: 29.2, y: 18.9 },\r\n { x: 29.4, y: 19.2 },\r\n { x: 29.6, y: 19.4 },\r\n { x: 29.8, y: 19.7 },\r\n { x: 30.0, y: 19.9 },\r\n { x: 30.2, y: 20.2 },\r\n { x: 30.4, y: 20.4 },\r\n { x: 30.6, y: 20.7 },\r\n { x: 30.8, y: 21.0 },\r\n { x: 31.0, y: 21.2 },\r\n { x: 31.2, y: 21.5 },\r\n { x: 31.4, y: 21.8 },\r\n { x: 31.6, y: 22.0 },\r\n { x: 31.8, y: 22.3 },\r\n { x: 32.0, y: 22.6 },\r\n { x: 32.2, y: 22.9 },\r\n { x: 32.4, y: 23.1 },\r\n { x: 32.6, y: 23.4 },\r\n { x: 32.8, y: 23.7 },\r\n { x: 33.0, y: 24.0 },\r\n { x: 33.2, y: 24.3 },\r\n { x: 33.4, y: 24.5 },\r\n { x: 33.6, y: 24.8 },\r\n { x: 33.8, y: 25.1 },\r\n { x: 34.0, y: 25.4 },\r\n { x: 34.2, y: 25.7 },\r\n { x: 34.4, y: 26.0 },\r\n { x: 34.6, y: 26.3 },\r\n { x: 34.8, y: 26.6 },\r\n { x: 35.0, y: 26.9 },\r\n { x: 35.2, y: 27.2 },\r\n { x: 35.4, y: 27.5 },\r\n { x: 35.6, y: 27.8 },\r\n { x: 35.8, y: 28.1 },\r\n { x: 36.0, y: 28.4 },\r\n { x: 36.2, y: 28.7 },\r\n { x: 36.4, y: 29.0 },\r\n { x: 36.6, y: 29.3 },\r\n { x: 36.8, y: 29.6 },\r\n { x: 37.0, y: 29.9 },\r\n { x: 37.2, y: 30.2 },\r\n { x: 37.4, y: 30.6 },\r\n { x: 37.6, y: 30.9 },\r\n { x: 37.8, y: 31.2 },\r\n { x: 38.0, y: 31.5 },\r\n { x: 38.2, y: 31.8 },\r\n { x: 38.4, y: 32.2 },\r\n { x: 38.6, y: 32.5 },\r\n { x: 38.8, y: 32.8 },\r\n { x: 39.0, y: 33.2 },\r\n { x: 39.2, y: 33.5 },\r\n { x: 39.4, y: 33.8 },\r\n { x: 39.6, y: 34.2 },\r\n { x: 39.8, y: 34.5 },\r\n { x: 40.0, y: 34.8 },\r\n { x: 40.2, y: 35.2 },\r\n { x: 40.4, y: 35.5 },\r\n { x: 40.6, y: 35.8 },\r\n { x: 40.8, y: 36.2 },\r\n { x: 41.0, y: 36.5 },\r\n { x: 41.2, y: 36.9 },\r\n { x: 41.4, y: 37.2 },\r\n { x: 41.6, y: 37.6 },\r\n { x: 41.8, y: 37.9 },\r\n { x: 42.0, y: 38.3 },\r\n { x: 42.2, y: 38.6 },\r\n { x: 42.4, y: 39.0 },\r\n { x: 42.6, y: 39.3 },\r\n { x: 42.8, y: 39.7 },\r\n { x: 43.0, y: 40.1 },\r\n { x: 43.2, y: 40.4 },\r\n { x: 43.4, y: 40.8 },\r\n { x: 43.6, y: 41.2 },\r\n { x: 43.8, y: 41.5 },\r\n { x: 44.0, y: 41.9 },\r\n { x: 44.2, y: 42.3 },\r\n { x: 44.4, y: 42.6 },\r\n { x: 44.6, y: 43.0 },\r\n { x: 44.8, y: 43.4 },\r\n { x: 45.0, y: 43.8 },\r\n { x: 45.2, y: 44.1 },\r\n { x: 45.4, y: 44.5 },\r\n { x: 45.6, y: 44.9 },\r\n { x: 45.8, y: 45.3 },\r\n { x: 46.0, y: 45.7 },\r\n { x: 46.2, y: 46.1 },\r\n { x: 46.4, y: 46.4 },\r\n { x: 46.6, y: 46.8 },\r\n { x: 46.8, y: 47.2 },\r\n { x: 47.0, y: 47.6 },\r\n { x: 47.2, y: 48.0 },\r\n { x: 47.4, y: 48.4 },\r\n { x: 47.6, y: 48.8 },\r\n { x: 47.8, y: 49.2 },\r\n { x: 48.0, y: 49.6 },\r\n { x: 48.2, y: 50.0 },\r\n { x: 48.4, y: 50.4 },\r\n { x: 48.6, y: 50.8 },\r\n { x: 48.8, y: 51.2 },\r\n { x: 49.0, y: 51.6 },\r\n { x: 49.2, y: 52.0 },\r\n { x: 49.4, y: 52.4 },\r\n { x: 49.6, y: 52.9 },\r\n { x: 49.8, y: 53.3 },\r\n { x: 50.0, y: 53.7 },\r\n { x: 50.2, y: 54.1 },\r\n { x: 50.4, y: 54.5 },\r\n { x: 50.6, y: 54.9 },\r\n { x: 50.8, y: 55.4 },\r\n { x: 51.0, y: 55.8 },\r\n { x: 51.2, y: 56.2 },\r\n { x: 51.4, y: 56.6 },\r\n { x: 51.6, y: 57.1 },\r\n { x: 51.8, y: 57.5 },\r\n { x: 52.0, y: 57.9 },\r\n { x: 52.2, y: 58.4 },\r\n { x: 52.4, y: 58.8 },\r\n { x: 52.6, y: 59.2 },\r\n { x: 52.8, y: 59.7 },\r\n ];\r\n\r\n //碳化深度\r\n if (sd_value_po >= 0) {\r\n var intsd = sd_value * 1; //碳化深度\r\n if (intsd == '0') {\r\n arr_t = t0_0;\r\n } else if (intsd == '0.5') {\r\n arr_t = t0_5;\r\n } else if (intsd == '1') {\r\n arr_t = t1_0;\r\n } else if (intsd == '1.5') {\r\n arr_t = t1_5;\r\n } else if (intsd == '2') {\r\n arr_t = t2_0;\r\n } else if (intsd == '2.5') {\r\n arr_t = t2_5;\r\n } else if (intsd == '3') {\r\n arr_t = t3_0;\r\n } else if (intsd == '3.5') {\r\n arr_t = t3_5;\r\n } else if (intsd == '4') {\r\n arr_t = t4_0;\r\n } else if (intsd == '4.5') {\r\n arr_t = t4_5;\r\n } else if (intsd == '5') {\r\n arr_t = t5_0;\r\n } else if (intsd == '5.5') {\r\n arr_t = t5_5;\r\n } else if (intsd >= '6') {\r\n arr_t = t6_0;\r\n }\r\n\r\n var m = -1;\r\n for (i = 0; i < arr_t.length; i++) {\r\n if (arr_t[0].x * 1 > ht) {\r\n m = 1;\r\n break;\r\n } else if (arr_t[i].x * 1 > ht) {\r\n m = i;\r\n break;\r\n } else if (arr_t[arr_t.length - 1].x * 1 < ht) {\r\n m = arr_t.length - 1;\r\n break;\r\n } else if (ht == arr_t[i].x) {\r\n qdhsz = forComm.GetDataOddIncreaseEvenDecrease(arr_t[i].y, -1);\r\n break;\r\n }\r\n }\r\n //强度换算值arr_ky_str\r\n\r\n if (m != -1) {\r\n var x1 = arr_t[m - 1].x;\r\n var y1 = arr_t[m - 1].y;\r\n var x2 = arr_t[m].x;\r\n var y2 = arr_t[m].y;\r\n if (ht >= 46.8 && intsd == 0.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 47.4 && intsd == 0.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 47.8 && intsd == 1.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 48.4 && intsd == 1.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 48.8 && intsd == 2.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 49.4 && intsd == 2.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 49.8 && intsd == 3.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 50.4 && intsd == 3.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 50.8 && intsd == 4.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 51.4 && intsd == 4.5) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 52.0 && intsd == 5.0) {\r\n qdhsz = '>60.0';\r\n } else if (ht >= 52.4 && intsd == 5.5) {\r\n qdhsz = '>60.0';\r\n } else {\r\n qdhsz = forComm.GetDataOddIncreaseEvenDecrease(forComm.InterpolationMethod_y(x1, x2, y1, y2, ht), -1);\r\n if (qdhsz > 60) {\r\n qdhsz = '>60.0';\r\n }\r\n if (qdhsz < 10) {\r\n qdhsz = '<10.0';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return qdhsz;\r\n },\r\n};\r\n","import { FormulaUtilsOther } from './formula-other';\r\nimport * as math from 'mathjs';\r\n\r\n/**\r\n * 自定义函数公用方法\r\n */\r\nexport const FormulaUtils = {\r\n /**\r\n * 初始化自定义函数(需要在SpreadJS工作簿创建成功或加载模板成功后调用)\r\n * @param GC SpreadJS的GC对象\r\n * @param spread SpreadJS对象\r\n */\r\n initFormulas: (GC, spread) => {\r\n // const sheetCount = spread.getSheetCount();\r\n\r\n // for (let i = 0; i < sheetCount; i++) {\r\n // \tlet sheet = spread.getSheet(i);\r\n\r\n // \tFormulaUtils.allCusFormulas.forEach((item) => {\r\n // \t\tconst cusFun = FormulaUtils.initForFun(\r\n // \t\t\tspread,\r\n // \t\t\tsheet,\r\n // \t\t\titem.funName,\r\n // \t\t\titem.funDesc,\r\n // \t\t\titem.funCallback,\r\n // \t\t\titem.funDefaultVal,\r\n // \t\t\titem.funMinArgs,\r\n // \t\t\titem.funMaxArgs,\r\n // \t\t\titem.funParams,\r\n // \t\t\titem.isContext,\r\n // \t\t\titem.isAcceptArea\r\n // \t\t);\r\n\r\n // \t\tsheet.addCustomFunction(new cusFun());\r\n // \t});\r\n // }\r\n\r\n FormulaUtils.allCusFormulas.forEach((item) => {\r\n const cusFun = FormulaUtils.initForFun(\r\n GC,\r\n spread,\r\n item.funName,\r\n item.funDesc,\r\n item.funCallback,\r\n item.funDefaultVal,\r\n item.funMinArgs,\r\n item.funMaxArgs,\r\n item.funParams,\r\n item.isContext,\r\n item.isAcceptArea,\r\n item.isContainNullUndefinedVal\r\n );\r\n\r\n //全局注册自定义公式\r\n GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction(item.funName, new cusFun());\r\n });\r\n },\r\n\r\n /**\r\n * 定义公用初始化自定义函数的方法\r\n * @param GC SpreadJS的GC对象\r\n * @param spread SpreadJS对象\r\n * @param funName 函数名称,如:YjMax\r\n * @param funDesc 自定义函数描述\r\n * @param funCallback 自定义函数回调函数,但函数返回了3个参数,第一个为Spread对象,第二个为Sheet对象,第三个为JSON对象(包含了arguments【原始参数数组】,cellObj【引用自定义公式的单元格索引对象】,allCellVals【所有参数值数组】)\r\n * @param funDefaultVal 自定义函数返回的默认值,默认为:0(使用场景:如该自定义函数选择的单元格没有任何值,此时回调中的retData.allCellVals可能为[],因此就可以将默认值传回去,格式如[0.0])\r\n * @param funMinArgs 最小参数个数\r\n * @param funMaxArgs 最大参数个数\r\n * @param funParams 自定义函数参数描述,默认为:[]\r\n * @param isContext 是否返回上下文对象,默认为:true\r\n * @param isAcceptArea 函数参数是否为区域单元格,默认为:true\r\n * @param isContainNullUndefinedVal 选择的单元格值是否返回为null或undefined的值,默认为:false\r\n * @returns\r\n */\r\n initForFun: (\r\n GC,\r\n spread,\r\n funName: string,\r\n funDesc: string,\r\n funCallback: (spread, sheet, retData) => any,\r\n funDefaultVal: number = 0,\r\n funMinArgs: number = 1,\r\n funMaxArgs: number = 1000,\r\n funParams: Array<any> = [],\r\n isContext: boolean = true,\r\n isAcceptArea: boolean = true,\r\n isContainNullUndefinedVal: boolean = false\r\n ) => {\r\n //声明自定义函数对象\r\n const cusFun = function () {\r\n this.name = funName;\r\n this.minArgs = funMinArgs;\r\n this.maxArgs = funMaxArgs;\r\n };\r\n //设置自定义函数的prototype属性\r\n cusFun.prototype = new GC.Spread.CalcEngine.Functions.Function(funName, funMinArgs, funMaxArgs);\r\n //设置自定义函数的描述信息,以便在输入自定义函数关键字的时候出现提示信息\r\n cusFun.prototype.description = function () {\r\n return {\r\n description: funDesc,\r\n parameters: funParams,\r\n };\r\n };\r\n //为true时,函数的计算依赖于上下文\r\n cusFun.prototype.isContextSensitive = function () {\r\n return isContext;\r\n };\r\n //函数的参数接受引用单元格区域\r\n cusFun.prototype.acceptsReference = function () {\r\n return isAcceptArea;\r\n };\r\n // cusFun.prototype.acceptsArray = function () {\r\n // \treturn true;\r\n // };\r\n //自定义函数逻辑\r\n cusFun.prototype.evaluate = function () {\r\n // 获取该自定义公式被引用单元格的索引\r\n\r\n /**\r\n * 说明:\r\n * 如果isContext=true,则arguments的第一个参数为上下文参数,后面的参数才是自定义参数真正传入的参数\r\n * 此时我们可以通过arguments获得当前sheet或spread对象,如下所示:\r\n * const sheet = arguments[0].source.getSheet();\r\n * const spread = arguments[0].source.getSheet().getParent();\r\n * 也可以获取到公式单元格所在的索引,如下所示:\r\n * const curForRowIndex= arguments[0].row;\r\n * const curForColIndex= arguments[0].column;\r\n *\r\n * 如果isContext=false,则arguments所有参数都为自定义函数传进来的\r\n *\r\n * 可参考论坛:\r\n * https://gcdn.grapecity.com.cn/showtopic-154888-1-1.html\r\n */\r\n\r\n //根据上下文参数arguments[0]得到当前Sheet\r\n //根据上下文参数arguments[0]得到当前单元格引用公式所在的索引\r\n //注意:目前只有在isContext = true的时候才能通过第一个参数获取表单、工作簿以及单元格索引等信息\r\n let sheet, curCellObj: { row: number; col: number; rowCount: number; colCount: number };\r\n if (isContext) {\r\n sheet = arguments[0].source.getSheet();\r\n\r\n //通过getSpan方法获取合并单元格索引对象,如果为null,则说明该单元格没有合并(也就是行和列的数量都是1),如果不为null,则直接getSpan返回的数据就直接是:{ row: 0, col: 0, rowCount: 1, colCount: 1 }\r\n curCellObj = sheet.getSpan(arguments[0].row, arguments[0].column);\r\n if (curCellObj == null || curCellObj == undefined) {\r\n curCellObj = { row: arguments[0].row, col: arguments[0].column, rowCount: 1, colCount: 1 };\r\n }\r\n }\r\n\r\n //获取所有选择的单元格值,格式如:[1,2,3]\r\n let allCellVals = [];\r\n\r\n //或二维数组,格式如:[[1,2,3],[4]](当isAcceptArea=true的时候,即:自定义公式的参数为范围)\r\n let allCellValsEw = [];\r\n\r\n //参数为范围的时候\r\n if (isAcceptArea) {\r\n if (arguments.length > 1) {\r\n const sheet = arguments[0].source.getSheet();\r\n\r\n for (let i = 1; i < arguments.length; i++) {\r\n const item = arguments[i];\r\n\r\n //获取范围中的所有单元格值(数组)\r\n if (item.$gt != null && item.$gt != undefined && item.$gt.length > 0) {\r\n let curRangeVals = [];\r\n\r\n //获取当前范围的所有单元格对象(涉及到跨行或跨列的单元格,如果直接使用getArray方法,会返回合并单元格中的所有值,如:A1是3个单元格合并为一个单元格,其实只有一个值,会返回3个值,第一个值是正确的,后2个值是null,其实不需要后2个)\r\n let curRangeCellObjs = sheet.getSpans(item.$gt[0]);\r\n if (curRangeCellObjs.length > 0) {\r\n curRangeCellObjs.forEach((itemCurCellObj) => {\r\n curRangeVals.push(sheet.getValue(itemCurCellObj.row, itemCurCellObj.col));\r\n });\r\n } else {\r\n let arrayValue = sheet.getArray(item.$gt[0].row, item.$gt[0].col, item.$gt[0].rowCount, item.$gt[0].colCount);\r\n arrayValue.forEach((element) => {\r\n element.forEach((elementVal) => {\r\n curRangeVals.push(elementVal);\r\n });\r\n });\r\n }\r\n allCellValsEw.push(curRangeVals);\r\n }\r\n //获取非单元格范围的值,如:其中一个参数不是单元格范围,则直接返回值即可\r\n else {\r\n allCellValsEw.push(item);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let length = arguments.length;\r\n for (let i = 1; i < length; i++) {\r\n const argument = arguments[i];\r\n\r\n if (typeof argument == 'string' || typeof argument == 'number') {\r\n allCellVals.push(argument);\r\n }\r\n //参数为单元格区域时\r\n else {\r\n //通过argument也可以获取到上下文\r\n sheet = argument.getSource().getSheet();\r\n // const spread = argument.getSource().getSheet().getParent();\r\n // const sheetName = sheet.name();\r\n\r\n //获取行索引、列索引、行数和列数\r\n const row = argument.getRow(),\r\n col = argument.getColumn(),\r\n rowCount = argument.getRowCount(),\r\n colCount = argument.getColumnCount();\r\n\r\n // //声明Range对象\r\n // const range = new GC.Spread.Sheets.Range(row, col, rowCount, colCount);\r\n // //得到类似【A1:A8】范围的字符串\r\n // const string = GC.Spread.Sheets.CalcEngine.rangeToFormula(range, 0, 0, GC.Spread.Sheets.CalcEngine.RangeReferenceRelative.allRelative);\r\n // //得到最终的字符串,格式如【Sheet1!B2:B8】,可用于其他特殊场景\r\n // const setFormulaString = '' + sheetName + '!' + string;\r\n\r\n //获取该区域每个单元格的值,返回的格式为:[[22],[33],[10],[5],[80],[1],[2]]\r\n const arrVals = sheet.getArray(row, col, rowCount, colCount);\r\n arrVals.forEach((item) => {\r\n item.forEach((itemSon) => {\r\n if (!isContainNullUndefinedVal) {\r\n if (itemSon != null && itemSon != undefined) {\r\n allCellVals.push(itemSon);\r\n }\r\n } else {\r\n allCellVals.push(itemSon);\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n //设置默认值\r\n if (allCellVals.length == 0) {\r\n if (funDefaultVal != null && allCellVals != undefined) {\r\n allCellVals = [funDefaultVal];\r\n }\r\n }\r\n\r\n //返回的回调函数参数数据\r\n let retData = {\r\n arguments: arguments,\r\n cellObj: curCellObj,\r\n allCellVals: allCellVals,\r\n allCellValsEw: allCellValsEw,\r\n };\r\n\r\n return funCallback(spread, sheet, retData);\r\n };\r\n\r\n return cusFun;\r\n },\r\n\r\n /**\r\n * 供自定义函数内部使用的公用方法\r\n */\r\n commFun: {\r\n /**\r\n * 返回自定义公式参数为范围的二维数组结果\r\n * @param forAarguments 自定义公式所有参数集合\r\n * @returns 返回二维数组,格式如:[[1,2,3],[4]]\r\n */\r\n getForRangeCellsValArr: (forAarguments) => {\r\n let retArr = [];\r\n if (forAarguments.length > 1) {\r\n const sheet = forAarguments[0].source.getSheet();\r\n for (let i = 1; i < forAarguments.length; i++) {\r\n const item = forAarguments[i];\r\n\r\n let arrayValue = sheet.getArray(item.$gt[0].row, item.$gt[0].col, item.$gt[0].rowCount, item.$gt[0].colCount);\r\n retArr.push(arrayValue);\r\n }\r\n }\r\n\r\n return retArr;\r\n },\r\n\r\n /**\r\n * 验证传入的内容是否为数字\r\n * @param content 传入的内容\r\n * @returns 返回true或false\r\n */\r\n isNumber: (content) => {\r\n return /^(-?\\d+)(\\.\\d+)?$/.test(content);\r\n },\r\n /**\r\n * 将原始数组中的每个元素转换为数字类型\r\n * @param arrVals 原始数组,如:[123,456,'789']\r\n * @returns\r\n */\r\n convertToInt: (arrVals: Array<any>) => {\r\n let retArrVals: Array<number> = [];\r\n\r\n arrVals.forEach((item, index) => {\r\n retArrVals.push(Number(item));\r\n });\r\n\r\n return retArrVals;\r\n },\r\n /**\r\n * 获取最大值\r\n * @param arrVals 源数据数组\r\n */\r\n getMax: (arrVals: Array<number>) => {\r\n if (arrVals.length == 0) {\r\n return '';\r\n }\r\n\r\n return Math.max(...arrVals);\r\n },\r\n /**\r\n * 获取最小值\r\n * @param arrVals 源数据数组\r\n */\r\n getMin: (arrVals: Array<number>) => {\r\n if (arrVals.length == 0) {\r\n return '';\r\n }\r\n\r\n return Math.min(...arrVals);\r\n },\r\n /**\r\n * 计算平均值\r\n * @param arrVals 源数据数组\r\n *\r\n * 修改时间:2024-7-26\r\n * 修 改 人:Quber\r\n * 修改说明:由之前的原生js计算求和和除法,修改为了现在使用mathjs来计算,目的是处理原生js计算精度丢失的问题\r\n *\r\n */\r\n getAverage: (arrVals: Array<number>) => {\r\n if (arrVals.length == 0) {\r\n return '';\r\n }\r\n\r\n //将原始数组转换为mathjs的bignumber类型\r\n let arrValsMath = [];\r\n arrVals.forEach((item) => {\r\n arrValsMath.push(math.bignumber(item));\r\n });\r\n\r\n //方式1:使用总和/数量的方式\r\n // //得到数组的总和\r\n // const sum = math.add(...arrValsMath).toNumber();\r\n // //得到平均值\r\n // const average = math.divide(math.bignumber(sum), math.bignumber(arrValsMath.length)).toNumber();\r\n\r\n //方式2:使用mathjs的mean方法直接求平均值\r\n const average = math.mean(arrValsMath).toNumber();\r\n\r\n return average;\r\n },\r\n /**\r\n * 根据试件尺寸计算面积\r\n * @param content 传入的内容,格式如:φ100×200或150×150×150\r\n * @returns 返回计算的面积\r\n */\r\n getNum: (content) => {\r\n let ret, contentArr;\r\n const reg = /[×φ*]/g;\r\n\r\n try {\r\n contentArr = content.split(reg);\r\n\r\n let x;\r\n if (content.substring(0, 1) == 'φ') {\r\n x = contentArr[1] - 0;\r\n ret = (Math.PI * x * x) / 4;\r\n } else {\r\n ret = contentArr[0] - 0;\r\n x = contentArr[1] - 0;\r\n ret = ret * x;\r\n }\r\n } catch (e) {\r\n return 0;\r\n }\r\n\r\n return ret;\r\n },\r\n /**\r\n * 计算常规修约\r\n * @param roundingVal 修约值\r\n * @param accuracy 修约精度\r\n */\r\n getRound: (roundingVal: number, accuracy: number) => {\r\n //验证修约的值是否为负数,为负数的话,取绝对值进行修约\r\n const valIsNegative = roundingVal < 0;\r\n if (valIsNegative) {\r\n roundingVal = Math.abs(roundingVal);\r\n }\r\n\r\n //修约精度为0的时候\r\n if (accuracy == 0) {\r\n //得到字符串形式\r\n let inputValStr = roundingVal.toString();\r\n\r\n //判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return valIsNegative ? -roundingVal : roundingVal;\r\n }\r\n\r\n //获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n //小数部分大于或等于0.5的话,就给整数部分加1后返回,否则返回整数部分\r\n if (parseFloat(`0.${decimalStr}`) >= 0.5) {\r\n return valIsNegative ? -(intVal + 1) : intVal + 1;\r\n } else {\r\n return valIsNegative ? -intVal : intVal;\r\n }\r\n }\r\n\r\n //系数\r\n let coefficient = 1 / accuracy;\r\n\r\n //换算后的修约值(=修约值*系数)\r\n //注意:此处使用到了toFixed,目的是可能会存在精度的问题\r\n let roundingValCal = Number((roundingVal * coefficient).toFixed(8));\r\n\r\n /**\r\n * 计算修约结果函数\r\n * @param inputVal 换算后的修约值\r\n * @returns 返回修约结果\r\n */\r\n const calcRoundingRet = (inputVal: number): number => {\r\n //得到字符串形式\r\n let inputValStr = inputVal.toString();\r\n\r\n //判断是否有小数点,没有则直接返回换算后的修约值\r\n if (inputValStr.indexOf('.') == -1) {\r\n return inputVal;\r\n }\r\n\r\n //获取整数数字部分和小数部分字符串\r\n let intVal = parseInt(inputValStr.split('.')[0]);\r\n let decimalStr = inputValStr.split('.')[1];\r\n\r\n //获取小数部分的第一位数字\r\n let decimalStrFirst = parseInt(decimalStr.substring(0, 1));\r\n\r\n //大于等于6的时候,入\r\n if (decimalStrFirst >= 6) {\r\n return intVal + 1;\r\n }\r\n //小于等于4的时候,舍\r\n else if (decimalStrFirst <= 4) {\r\n return intVal;\r\n }\r\n\r\n //小数部分为5,并且只有一位小数的时候,前面的整数部分如果是奇数则入,反之则舍\r\n else if (decimalStrFirst == 5 && decimalStr.length == 1) {\r\n return intVal % 2 != 0 ? intVal + 1 : intVal;\r\n }\r\n\r\n //小数部分为5,并且小数位数大于一位的时候,则入\r\n else if (decimalStrFirst == 5 && decimalStr.length > 1) {\r\n return intVal + 1;\r\n }\r\n\r\n return inputVal;\r\n };\r\n\r\n //返回最终修约结果(=修约结果/系数)\r\n const retNum = calcRoundingRet(roundingValCal) / coefficient;\r\n\r\n //获取修约精度中的小数位数\r\n let accuracyStr = accuracy + '';\r\n\r\n //如果修约精度中没有小数,则直接返回\r\n if (accuracyStr.indexOf('.') == -1) {\r\n return valIsNegative ? -retNum : retNum;\r\n } else {\r\n const retNumStr = retNum + '';\r\n\r\n //补位的0的字符串\r\n let zeroStr = '';\r\n\r\n //结果为整数的时候,需要补充小数点后面的小数位数为0,如:34→34.0\r\n if (retNumStr.indexOf('.') == -1) {\r\n let zeroStr = '';\r\n for (let index = 0; index < accuracyStr.split('.')[1].length; index++) {\r\n zeroStr += '0';\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}.${zeroStr}`;\r\n }\r\n //结果为小数的时候,需要补充修约精度的位数,如:0.3修约精度为0.01,则最终应该返回0.30\r\n else {\r\n const xsPart = retNumStr.split('.')[1];\r\n\r\n if (accuracyStr.split('.')[1].length > xsPart.length) {\r\n for (let index = 0; index < accuracyStr.split('.')[1].length - xsPart.length; index++) {\r\n zeroStr += '0';\r\n }\r\n }\r\n\r\n return (valIsNegative ? '-' : '') + `${retNum}${zeroStr}`;\r\n }\r\n }\r\n },\r\n\r\n InterpolationMethod_y: (x1, x2, y1, y2, x) => {\r\n let tmp = ((x - x1) * (y1 - y2)) / (x1 - x2) + y1 * 1;\r\n if (isNaN(tmp)) {\r\n return '/';\r\n } else {\r\n return tmp;\r\n }\r\n },\r\n GetDataOddIncreaseEvenDecrease: (in_value, keepdigit) => {\r\n let i;\r\n let tmp1, tmp2;\r\n let sxz;\r\n\r\n if (in_value.toString().indexOf('00000000') != -1) {\r\n in_value = in_value.toString().substring(0, in_value.toString().indexOf('00000000') + 2);\r\n }\r\n\r\n if (in_value.toString().indexOf('999999') != -1) {\r\n let keepdigit1 = keepdigit;\r\n if (keepdigit1 < 0) {\r\n keepdigit1 = Math.abs(keepdigit1 - 1);\r\n }\r\n in_value = parseFloat(in_value).toFixed(keepdigit1); //in_valuetoFixed(, keepdigit*1+1);\r\n }\r\n\r\n in_value = in_value * 1;\r\n keepdigit = keepdigit * 1;\r\n i = 1;\r\n tmp2 = in_value;\r\n\r\n if (Math.floor(in_value) * 1 == in_value * 1) {\r\n //即小数为0\r\n switch (keepdigit) {\r\n case -7:\r\n sxz = in_value + '.000000000';\r\n break;\r\n case -6:\r\n sxz = in_value + '.00000000';\r\n break;\r\n case -5:\r\n sxz = in_value + '.0000000';\r\n break;\r\n case -4:\r\n sxz = in_value + '.000000';\r\n break;\r\n case -3:\r\n sxz = in_value + '.00000';\r\n break; //保留3位小数\r\n case -2:\r\n sxz = in_value + '.0000';\r\n break; //保留2位小数\r\n case -1:\r\n sxz = in_value + '.000';\r\n break; //保留1位小数\r\n case 1:\r\n sxz = in_value + '.00';\r\n break; //保留整数\r\n case 2:\r\n sxz = in_value + '.0';\r\n break;\r\n case 3:\r\n sxz = in_value;\r\n break;\r\n default:\r\n break;\r\n }\r\n } else\r\n switch (keepdigit) {\r\n case -7:\r\n sxz = (in_value * 1).toFixed(9);\r\n break;\r\n case -6:\r\n sxz = (in_value * 1).toFixed(8);\r\n break;\r\n case -5:\r\n sxz = (in_value * 1).toFixed(7);\r\n break;\r\n case -4:\r\n sxz = (in_value * 1).toFixed(6);\r\n break;\r\n case -3:\r\n sxz = (in_value * 1).toFixed(5);\r\n break;\r\n case -2:\r\n sxz = (in_value * 1).toFixed(4);\r\n break;\r\n case -1:\r\n sxz = (in_value * 1).toFixed(3);\r\n break;\r\n case 1:\r\n sxz = (in_value * 1).toFixed(2);\r\n break;\r\n case 2:\r\n sxz = (in_value * 1).toFixed(1);\r\n break;\r\n case 3:\r\n sxz = in_value * 1;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (sxz * 1 > tmp2 * 1)\r\n switch (keepdigit) {\r\n case -7:\r\n sxz = (sxz - 0.00000001).toFixed(9);\r\n break;\r\n case -6:\r\n sxz = (sxz - 0.00000001).toFixed(8);\r\n break;\r\n case -5:\r\n sxz = (sxz - 0.0000001).toFixed(7);\r\n break;\r\n case -4:\r\n sxz = (sxz - 0.000001).toFixed(6);\r\n break;\r\n case -3:\r\n sxz = (sxz - 0.00001).toFixed(5);\r\n break;\r\n case -2:\r\n sxz = (sxz - 0.0001).toFixed(4);\r\n break;\r\n case -1:\r\n sxz = (sxz - 0.001).toFixed(3);\r\n break;\r\n case 1:\r\n sxz = (sxz - 0.01).toFixed(2);\r\n break;\r\n case 2:\r\n sxz = (sxz - 0.1).toFixed(1);\r\n break; //tmp2-0.1\r\n case 3:\r\n sxz = (sxz - 1).toFixed(0);\r\n break;\r\n default:\r\n break;\r\n }\r\n tmp2 = sxz + '1';\r\n sxz = tmp2.substr(0, tmp2.length - 1);\r\n\r\n if (\r\n keepdigit == 3 ||\r\n keepdigit == -1 ||\r\n keepdigit == -2 ||\r\n keepdigit == -3 ||\r\n keepdigit == -4 ||\r\n keepdigit == -5 ||\r\n keepdigit == -6 ||\r\n keepdigit == -7\r\n ) {\r\n if (sxz.substr(sxz.length - 2, 2) == 50) {\r\n if (sxz.substr(sxz.length - 3, 1) % 2 == 0) {\r\n tmp1 = sxz.substr(0, sxz.length - 2);\r\n if (in_value.toString().indexOf(sxz) != -1) {\r\n if (in_value * 1 - sxz * 1 > 0) {\r\n tmp1 = in_value;\r\n }\r\n }\r\n } else {\r\n tmp1 = sxz.substr(0, sxz.length - 2);\r\n //数字如果是-0到-0.99保留到整数变成了1,应该是-1才对(添加判断条件若将tmp1为-0时则i=-1)\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n switch (keepdigit) {\r\n case -7:\r\n tmp1 = tmp1 * 1 + 0.0000001 * i;\r\n break;\r\n case -6:\r\n tmp1 = tmp1 * 1 + 0.000001 * i;\r\n break;\r\n case -5:\r\n tmp1 = tmp1 * 1 + 0.00001 * i;\r\n break;\r\n case -4:\r\n tmp1 = tmp1 * 1 + 0.0001 * i;\r\n break;\r\n case -3:\r\n tmp1 = tmp1 * 1 + 0.001 * i;\r\n break;\r\n case -2:\r\n tmp1 = tmp1 * 1 + 0.01 * i;\r\n break;\r\n case -1:\r\n tmp1 = tmp1 * 1 + 0.1 * i;\r\n break;\r\n default:\r\n tmp1 = tmp1 * 1 * 100 + 100 * i;\r\n break;\r\n }\r\n }\r\n } else if (sxz.substr(sxz.length - 2, 2) < 50) {\r\n tmp1 = sxz.substr(0, sxz.length - 2);\r\n switch (keepdigit) {\r\n case 3:\r\n tmp1 = tmp1 * 1 * 100;\r\n break;\r\n default:\r\n // tmp1 = tmp1;\r\n break;\r\n }\r\n } else if (sxz.substr(sxz.length - 2, 2) > 50 || sxz < in_value) {\r\n tmp1 = sxz.substr(0, sxz.length - 2);\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n switch (keepdigit) {\r\n case -7:\r\n tmp1 = tmp1 * 1 + 0.0000001 * i;\r\n break;\r\n case -6:\r\n tmp1 = tmp1 * 1 + 0.000001 * i;\r\n break;\r\n case -5:\r\n tmp1 = tmp1 * 1 + 0.00001 * i;\r\n break;\r\n case -4:\r\n tmp1 = tmp1 * 1 + 0.0001 * i;\r\n break;\r\n case -3:\r\n tmp1 = tmp1 * 1 + 0.001 * i;\r\n break;\r\n case -2:\r\n tmp1 = tmp1 * 1 + 0.01 * i;\r\n break;\r\n case -1:\r\n tmp1 = tmp1 * 1 + 0.1 * i;\r\n break;\r\n default:\r\n tmp1 = tmp1 * 1 * 100 + 100 * i;\r\n break;\r\n }\r\n }\r\n }\r\n if (keepdigit == 1)\r\n if (sxz.substr(sxz.length - 2, 2) == 50)\r\n if (sxz.substr(sxz.length - 4, 1) % 2 == 0)\r\n //&& (sxz * 1 == in_value)\r\n tmp1 = sxz.substr(0, sxz.length - 3);\r\n else {\r\n tmp1 = sxz.substr(0, sxz.length - 3);\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n tmp1 = tmp1 * 1 + 1 * i;\r\n }\r\n else if (sxz.substr(sxz.length - 2, 2) < 50) tmp1 = sxz.substr(0, sxz.length - 3);\r\n else if (sxz.substr(sxz.length - 2, 2) > 50 || sxz * 1 < in_value) {\r\n tmp1 = sxz.substr(0, sxz.length - 3);\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n tmp1 = tmp1 * 1 + 1 * i;\r\n }\r\n\r\n if (keepdigit == 2)\r\n if (sxz.substr(sxz.length - 3, 3) == 5.0 && sxz * 1 == in_value)\r\n if (sxz.substr(sxz.length - 4, 1) % 2 == 0) {\r\n tmp1 = sxz.substr(0, sxz.length - 3) * 10;\r\n } else {\r\n tmp1 = sxz.substr(0, sxz.length - 3);\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n tmp1 = tmp1 * 10 + 10 * i;\r\n }\r\n else if (sxz.substr(sxz.length - 3, 3) < 5.0) tmp1 = sxz.substr(0, sxz.length - 3) * 10;\r\n else if (sxz.substr(sxz.length - 3, 3) > 5.0 || sxz * 1 < in_value) {\r\n tmp1 = sxz.substr(0, sxz.length - 3);\r\n if (tmp1 < 0 || tmp1.replace('0', '') == '-') i = -1;\r\n tmp1 = tmp1 * 10 + 10 * i;\r\n }\r\n\r\n switch (keepdigit) {\r\n case -7:\r\n tmp2 = (tmp1 * 1).toFixed(7);\r\n break;\r\n case -6:\r\n tmp2 = (tmp1 * 1).toFixed(6);\r\n break;\r\n case -5:\r\n tmp2 = (tmp1 * 1).toFixed(5);\r\n break;\r\n case -4:\r\n tmp2 = (tmp1 * 1).toFixed(4);\r\n break;\r\n case -3:\r\n tmp2 = (tmp1 * 1).toFixed(3);\r\n break;\r\n case -2:\r\n tmp2 = (tmp1 * 1).toFixed(2);\r\n break;\r\n case -1:\r\n tmp2 = (tmp1 * 1).toFixed(1);\r\n break;\r\n default:\r\n tmp2 = (tmp1 * 1).toFixed(0);\r\n break;\r\n }\r\n if (isNaN(tmp2)) tmp2 = '/';\r\n\r\n return tmp2;\r\n },\r\n GetS: (args) => {\r\n // if (typeof arguments[0] == 'object') {\r\n // \targuments = arguments[0];\r\n // }\r\n let total = 0; //表示求和\r\n let len = args.length; //数组长度\r\n let x = 0; //平均值\r\n let s1 = 0; //求平方和\r\n let s; //标准差\r\n for (let i = 0; i < len; i++) {\r\n // len-=1;\r\n\r\n total = total + args[i] * 1;\r\n }\r\n x = total / len;\r\n\r\n for (let j = 0; j < len; j++) {\r\n s1 = s1 + (args[j] - x) * (args[j] - x);\r\n }\r\n s = Math.sqrt(s1 / (len - 1));\r\n // if (!s) s = '';\r\n if (isNaN(s * 1)) s = '';\r\n return s;\r\n },\r\n },\r\n\r\n /**\r\n * 所以自定义函数集合\r\n */\r\n allCusFormulas: [\r\n {\r\n funName: 'ZERO',\r\n funDesc: '将单元格值为空或/返回默认值0',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n let sourceVal: any;\r\n\r\n if (retData.allCellValsEw.length > 0 && retData.allCellValsEw[0].length > 0) {\r\n sourceVal = retData.allCellValsEw[0][0];\r\n }\r\n\r\n if (\r\n retData.allCellValsEw.length > 0 &&\r\n retData.allCellValsEw[0].length > 0 &&\r\n (retData.allCellValsEw[0][0] == '/' ||\r\n retData.allCellValsEw[0][0] == null ||\r\n (retData.allCellValsEw[0][0]._error != undefined && retData.allCellValsEw[0][0]._error != null) || //此情况为单元格计算出错返回来的情况\r\n (typeof retData.allCellValsEw[0][0] == 'string' && retData.allCellValsEw[0][0].trim().length == 0))\r\n ) {\r\n return 0;\r\n }\r\n\r\n return sourceVal;\r\n },\r\n },\r\n {\r\n funName: 'ONE',\r\n funDesc: '将单元格值为空或/返回默认值1',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n let sourceVal: any;\r\n\r\n if (retData.allCellValsEw.length > 0 && retData.allCellValsEw[0].length > 0) {\r\n sourceVal = retData.allCellValsEw[0][0];\r\n }\r\n\r\n if (\r\n retData.allCellValsEw.length > 0 &&\r\n retData.allCellValsEw[0].length > 0 &&\r\n (retData.allCellValsEw[0][0] == '/' ||\r\n retData.allCellValsEw[0][0] == null ||\r\n (typeof retData.allCellValsEw[0][0] == 'string' && retData.allCellValsEw[0][0].trim().length == 0))\r\n ) {\r\n return 1;\r\n }\r\n\r\n //此种情况,有可能是 =SLASH(A1+A2) 的时候,A1和A2种其中一个为空,如:A1为空,A2为3,则应该返回3才对\r\n if (retData.allCellVals.length == 1 && retData.allCellVals[0] != 0 && retData.allCellValsEw.length == 1 && retData.allCellValsEw[0] != 0) {\r\n return retData.allCellVals[0];\r\n }\r\n\r\n return sourceVal;\r\n },\r\n },\r\n {\r\n funName: 'SLASH',\r\n funDesc: '将单元格值为空或0(包括0.0、0.00等)返回默认值/',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n let sourceVal: any;\r\n\r\n if (retData.allCellValsEw.length > 0 && retData.allCellValsEw[0].length > 0) {\r\n sourceVal = retData.allCellValsEw[0][0];\r\n }\r\n\r\n //此种情况,有可能是 =SLASH(A1+A2) 的时候,A1和A2都为空传回来的默认0\r\n if (retData.allCellVals.length == 1 && retData.allCellVals[0] == 0 && retData.allCellValsEw.length == 1 && retData.allCellValsEw[0] == 0) {\r\n return '/';\r\n }\r\n\r\n //此种情况,有可能是 =SLASH(A1+A2) 的时候,A1和A2种其中一个为空,如:A1为空,A2为3,则应该返回3才对\r\n if (retData.allCellVals.length == 1 && retData.allCellVals[0] != 0 && retData.allCellValsEw.length == 1 && retData.allCellValsEw[0] != 0) {\r\n return retData.allCellVals[0];\r\n }\r\n\r\n if (\r\n retData.allCellValsEw.length > 0 &&\r\n retData.allCellValsEw[0].length > 0 &&\r\n (retData.allCellValsEw[0][0] == 0 ||\r\n retData.allCellValsEw[0][0] == '0.0' ||\r\n retData.allCellValsEw[0][0] == '0.00' ||\r\n retData.allCellValsEw[0][0] == '0.000' ||\r\n retData.allCellValsEw[0][0] == '0.0000' ||\r\n retData.allCellValsEw[0][0] == null ||\r\n (typeof retData.allCellValsEw[0][0] == 'string' && retData.allCellValsEw[0][0].trim().length == 0))\r\n ) {\r\n return '/';\r\n }\r\n\r\n return sourceVal;\r\n },\r\n },\r\n {\r\n funName: 'YJMAX',\r\n funDesc: '返回一组数值中的最大值',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n return retArrVals.length == 0 ? '/' : Math.max(...retArrVals);\r\n },\r\n },\r\n {\r\n funName: 'YJMIN',\r\n funDesc: '返回一组数值中的最小值',\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n return retArrVals.length == 0 ? '/' : Math.min(...retArrVals);\r\n },\r\n },\r\n {\r\n funName: 'YJSUM',\r\n funDesc: '计算单元格区域中所有数值的和',\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n // 得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n return retArrVals.length == 0 ? '/' : retArrVals.reduce((accumulator, currentValue) => accumulator + currentValue, 0);\r\n },\r\n },\r\n {\r\n funName: 'YJCOUNT',\r\n funDesc: '计算区域中包含数字的单元格的个数',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n return retData.allCellVals.length;\r\n },\r\n },\r\n {\r\n funName: 'YjMid',\r\n funDesc: '获取所有选择的单元格中的中间值',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '数值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n //如果传递的参数小于3个,则返回0\r\n if (retData.allCellVals.length < 3) {\r\n return 0;\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n const maxVal = Math.max(...retArrVals),\r\n minVal = Math.min(...retArrVals);\r\n\r\n return retArrVals[0] * 1 + retArrVals[1] * 1 + retArrVals[2] * 1 - maxVal * 1 - minVal * 1;\r\n },\r\n },\r\n {\r\n funName: 'YJAVERAGE',\r\n funDesc: '计算平均值',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n return retArrVals.length == 0 ? '/' : FormulaUtils.commFun.getAverage(retArrVals);\r\n },\r\n },\r\n {\r\n funName: 'YJRESULTPD',\r\n funDesc: '报告上根据技术要求判定',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '技术要求',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验结果',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n let symbol = '/';\r\n\r\n //如果传递的参数小于2个,则返回符号\r\n if (retData.allCellVals.length < 2) {\r\n return symbol;\r\n }\r\n\r\n if (retData.allCellVals[0]._error != undefined && retData.allCellVals[0]._error != null) {\r\n return symbol;\r\n }\r\n\r\n //技术要求\r\n let jsyq = retData.allCellVals[0] + '';\r\n //多个试验结果,retData.allCellVals中除第一个数据,后面的都是试验结果\r\n let syjglist = [];\r\n retData.allCellVals.forEach((item, index) => {\r\n if (index > 0) {\r\n if (item != '/' && item != null && (item._error == undefined || item._error == null)) {\r\n syjglist.push(item);\r\n }\r\n }\r\n });\r\n\r\n // console.log(retData);\r\n // console.log(jsyq);\r\n // console.log(syjglist);\r\n\r\n let kk = '合格';\r\n if (jsyq == symbol || jsyq == '/' || jsyq == '' || syjglist.some((item) => item == '无效') || syjglist.length == 0) {\r\n return symbol;\r\n }\r\n for (let i = 0; i < syjglist.length; i++) {\r\n let k1 = syjglist[i];\r\n if (jsyq.indexOf('<') != -1 || jsyq.indexOf('>') != -1 || jsyq.indexOf('<') != -1 || jsyq.indexOf('>') != -1) {\r\n jsyq = jsyq.replace('<', '<');\r\n jsyq = jsyq.replace('>', '>');\r\n if (jsyq.indexOf(',') != -1) {\r\n let r1;\r\n let r2;\r\n if (jsyq.indexOf(',') != -1) {\r\n r1 = jsyq.split(',')[0];\r\n r2 = jsyq.split(',')[1];\r\n if (r1.indexOf('>') != -1 || r1.indexOf('<') != -1) {\r\n r1 = jsyq.split(',')[0].replace('>', '');\r\n r2 = jsyq.split(',')[1].replace('<', '');\r\n }\r\n if (k1 * 1 > r1 * 1 && k1 < r2 * 1) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n } else {\r\n kk = eval(k1 + jsyq) ? '合格' : '不合格';\r\n }\r\n } else if (jsyq.indexOf('≥') != -1 || jsyq.indexOf('不小于') != -1 || jsyq.indexOf('≮') != -1) {\r\n if (jsyq.indexOf(',') != -1) {\r\n let r1;\r\n let r2;\r\n if (jsyq.indexOf(',') != -1) {\r\n r1 = jsyq.split(',')[0];\r\n r2 = jsyq.split(',')[1];\r\n if (r1.indexOf('≥') != -1 || r1.indexOf('≤') != -1) {\r\n r1 = jsyq.split(',')[0].replace('≥', '');\r\n r2 = jsyq.split(',')[1].replace('≤', '');\r\n }\r\n if (k1 * 1 >= r1 * 1 && k1 <= r2 * 1) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n } else {\r\n let num = jsyq.replace('≥', '').replace('不小于', '').replace('≮', '') * 1;\r\n if (FormulaUtils.commFun.isNumber(k1)) {\r\n if (k1 > num || k1 == num) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else {\r\n if (k1.indexOf('大于') != -1) {\r\n if (k1.replace('大于', '') == jsyq.replace('≮', '')) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (k1.indexOf('不足') != -1) {\r\n kk = '不合格';\r\n } else if (k1.indexOf('+') != -1) {\r\n if (k1.replace('+', '') >= num) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n }\r\n }\r\n } else if (jsyq.indexOf('≤') != -1 || jsyq.indexOf('不大于') != -1 || jsyq.indexOf('≯') != -1) {\r\n let num = jsyq.replace('≤', '').replace('不大于', '').replace('≯', '') * 1;\r\n\r\n if (k1 < num || k1 == num) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (jsyq.indexOf('≠') != -1) {\r\n let num = jsyq.replace('≠', '') * 1;\r\n if (k1 != num) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (jsyq.indexOf('~') != -1 || jsyq.indexOf(',') != -1 || jsyq.indexOf('~') != -1) {\r\n let r1;\r\n let r2;\r\n if (jsyq.indexOf('~') != -1) {\r\n r1 = jsyq.split('~')[0];\r\n r2 = jsyq.split('~')[1];\r\n } else if (jsyq.indexOf('~') != -1) {\r\n if (jsyq.split('~')[0].indexOf('+') != -1) {\r\n r1 = jsyq.split('~')[1];\r\n r2 = jsyq.split('~')[0];\r\n if (k1.toString().indexOf('+') != -1) {\r\n if (k1 * 1 <= r2) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (k1.indexOf('-') != -1) {\r\n if (k1 * 1 >= r1) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n } else {\r\n r1 = jsyq.split('~')[0];\r\n r2 = jsyq.split('~')[1];\r\n }\r\n } else if (jsyq.indexOf(',') != -1) {\r\n if (jsyq.split(',')[0].indexOf('+') != -1) {\r\n r1 = jsyq.split(',')[1];\r\n r2 = jsyq.split(',')[0];\r\n if (k1.toString().indexOf('+') != -1) {\r\n if (k1 * 1 <= r2) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (k1.toString().indexOf('-') != -1) {\r\n if (k1 * 1 >= r1) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n } else {\r\n r1 = jsyq.split(',')[0];\r\n r2 = jsyq.split(',')[1];\r\n }\r\n }\r\n\r\n if (k1 * 1 >= r1 * 1 && k1 <= r2 * 1) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else if (jsyq.indexOf('±') != -1) {\r\n let r1 = jsyq.split('±')[0];\r\n let r2 = jsyq.split('±')[1];\r\n let min = r1 * 1 - r2 * 1;\r\n let max = r1 * 1 + r2 * 1;\r\n if (k1 >= min && k1 <= max) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n } else {\r\n if (FormulaUtils.commFun.isNumber(jsyq)) jsyq = jsyq * 1;\r\n if (k1 >= jsyq) {\r\n kk = '合格';\r\n } else {\r\n kk = '不合格';\r\n }\r\n }\r\n\r\n if (kk == '不合格') {\r\n return '不合格';\r\n }\r\n }\r\n return kk;\r\n },\r\n },\r\n {\r\n funName: 'YJROUND',\r\n funDesc: '计算常规修约',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '数值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '修约精度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n let symbol = '/';\r\n\r\n //如果传递的参数小于2个(第一个参数为修约的数值,第二个参数为修约精度),则返回符号\r\n if (retData.allCellVals.length < 2) {\r\n return symbol;\r\n }\r\n\r\n //验证待修约的数据是否为空或者/,如果是,则直接返回/\r\n if (typeof retData.allCellVals[0] == 'string' && (retData.allCellVals[0].trim().length == 0 || retData.allCellVals[0].trim() == '/')) {\r\n return symbol;\r\n }\r\n\r\n //判断要修约的值和精度是否为数字,不是则返回符号\r\n if (!FormulaUtils.commFun.isNumber(retData.allCellVals[0]) || !FormulaUtils.commFun.isNumber(retData.allCellVals[1])) {\r\n // return symbol;\r\n //直接返回原始值,因为有可能retData.allCellVals[0]为其他自定义公式返回的结果,比如为:“不合格”之类的中文内容等\r\n return retData.allCellVals[0];\r\n }\r\n\r\n //修约精度(正式以配置中为优先级获取,如业务系统中就要根据配置来判断)\r\n let accuracy = retData.allCellVals[1];\r\n\r\n //修约值(数字类型)\r\n let roundingVal: number = Number(retData.allCellVals[0]);\r\n\r\n //此处用于获取真实数据,比如:0.1005 - 0.06=0.04050000000000001会存在精度问题,真实值应该是0.0405\r\n roundingVal = Number(roundingVal.toFixed(8));\r\n\r\n return FormulaUtils.commFun.getRound(roundingVal, accuracy);\r\n },\r\n },\r\n {\r\n funName: 'YjGetNum',\r\n funDesc: '根据试件尺寸计算面积',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: 'cellContent',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回0\r\n if (retData.allCellVals.length < 1) {\r\n return '/';\r\n }\r\n\r\n //验证数据是否为空或者/,如果是,则直接返回/\r\n if (typeof retData.allCellVals[0] == 'string' && (retData.allCellVals[0].trim().length == 0 || retData.allCellVals[0].trim() == '/')) {\r\n return '/';\r\n }\r\n\r\n return FormulaUtils.commFun.getNum(retData.allCellVals[0]);\r\n },\r\n },\r\n {\r\n funName: 'YjGetS',\r\n funDesc: '计算标准差',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n //检查是否所有数据中至少有一个不为空\r\n let isHasVal = false;\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n if (!isHasVal && ((itemSon != null && itemSon != '/') || (typeof itemSon == 'string' && itemSon.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n });\r\n } else {\r\n if (!isHasVal && ((item != null && item != '/') || (typeof item == 'string' && item.trim().length > 1))) {\r\n isHasVal = true;\r\n }\r\n }\r\n });\r\n //如果全为空,则返回/\r\n if (!isHasVal) {\r\n return '/';\r\n }\r\n\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n //如果传递的参数小于1个,则返回''\r\n if (retData.allCellVals.length < 1) {\r\n return '/';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n //总和,参数个数\r\n let total = 0,\r\n len = retArrVals.length;\r\n\r\n //平均值、求平方和\r\n let avgVal = 0,\r\n squVal = 0;\r\n\r\n for (let i = 0; i < len; i++) {\r\n total += retArrVals[i] * 1;\r\n }\r\n avgVal = total / len;\r\n\r\n for (let i = 0; i < len; i++) {\r\n squVal += (retArrVals[i] - avgVal) * (retArrVals[i] - avgVal);\r\n }\r\n\r\n //标准差\r\n const ret = Math.sqrt(squVal / (len - 1));\r\n\r\n return isNaN(ret * 1) ? '' : ret;\r\n },\r\n },\r\n {\r\n funName: 'YjGetCv',\r\n funDesc: '计算变异系数Cv',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n //得到所有参数中为数字的集合,即:数字参数才参与计算\r\n retData.allCellVals = retData.allCellVals.filter((item) => FormulaUtils.commFun.isNumber(item));\r\n\r\n //如果传递的参数小于1个,则返回''\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n //总和,参数个数\r\n let total = 0,\r\n len = retArrVals.length;\r\n\r\n //平均值、求平方和\r\n let avgVal = 0,\r\n squVal = 0;\r\n\r\n for (let i = 0; i < len; i++) {\r\n total = total + retArrVals[i] * 1;\r\n }\r\n avgVal = total / len;\r\n\r\n for (let i = 0; i < len; i++) {\r\n squVal += (retArrVals[i] - avgVal) * (retArrVals[i] - avgVal);\r\n }\r\n\r\n //标准差\r\n const staVal = Math.sqrt(squVal / (len - 1));\r\n\r\n //变异系数\r\n const ret = (staVal * 100) / avgVal;\r\n\r\n return !ret ? '' : ret;\r\n },\r\n },\r\n {\r\n funName: 'YjInterpolationMethod',\r\n funDesc: '直线内插法(已知y求x)',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: 'cellContentX1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentX2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentY1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentY2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentY',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于5个,则返回/\r\n if (retData.allCellVals.length < 5) {\r\n return '/';\r\n }\r\n\r\n const x1 = retData.allCellVals[0],\r\n x2 = retData.allCellVals[1],\r\n y1 = retData.allCellVals[2],\r\n y2 = retData.allCellVals[3],\r\n y = retData.allCellVals[4];\r\n\r\n const ret = ((y - y1) * (x2 - x1)) / (y2 - y1) + x1 * 1;\r\n\r\n return !FormulaUtils.commFun.isNumber(ret) ? '/' : ret;\r\n },\r\n },\r\n {\r\n funName: 'YjInterpolationMethod_Y',\r\n funDesc: '直线内插法(已知x求y)',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: 'cellContentX1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentX2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentY1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentY2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'cellContentX',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于5个,则返回/\r\n if (retData.allCellVals.length < 5) {\r\n return '/';\r\n }\r\n\r\n const x1 = retData.allCellVals[0],\r\n x2 = retData.allCellVals[1],\r\n y1 = retData.allCellVals[2],\r\n y2 = retData.allCellVals[3],\r\n x = retData.allCellVals[4];\r\n\r\n const ret = ((x - x1) * (y1 - y2)) / (x1 - x2) + y1 * 1;\r\n\r\n return !FormulaUtils.commFun.isNumber(ret) ? '/' : ret;\r\n },\r\n },\r\n\r\n {\r\n funName: 'YJROUNDYX',\r\n funDesc: '计算有效数字修约',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '数值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '修约位数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n let symbol = '/';\r\n\r\n //如果传递的参数小于2个(第一个参数为修约的数值,第二个参数为修约位数),则返回符号\r\n if (retData.allCellVals.length < 2) {\r\n return symbol;\r\n }\r\n\r\n //判断要修约的值和精度是否为数字,不是则返回符号\r\n if (!FormulaUtils.commFun.isNumber(retData.allCellVals[0]) || !FormulaUtils.commFun.isNumber(retData.allCellVals[1])) {\r\n return symbol;\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n //修约位数(正式以配置中为优先级获取,如业务系统中就要根据配置来判断)\r\n let accuracy = Math.floor(retArrVals[1]);\r\n\r\n //小于等于0时,返回原始数据\r\n if (accuracy <= 0 || retArrVals[0] == 0) {\r\n return retArrVals[0];\r\n }\r\n\r\n //使用toPrecision方法得到指定有效位数的数字\r\n const retVal = retArrVals[0].toPrecision(accuracy);\r\n\r\n //检测retVal中是否包含指数符号e\r\n if (retVal.indexOf('e') > -1) {\r\n //转换为数字\r\n const calcVal = Number(retVal);\r\n\r\n //检查calcVal的长度是否超过了accuracy的长度\r\n if (String(calcVal).length > accuracy) {\r\n return String(calcVal).substring(0, accuracy);\r\n } else {\r\n return calcVal;\r\n }\r\n } else {\r\n return retVal;\r\n }\r\n\r\n // const calcVal = (number, nDigits) => {\r\n // \tlet numOld = String(Math.abs(number)),\r\n // \t\tnum = String(Math.abs(number));\r\n\r\n // \tlet index = nDigits;\r\n // \tlet numSplit = num.split('.');\r\n\r\n // \tlet roundNumber = numSplit[0];\r\n // \tlet pointNumber = '';\r\n // \tif (numSplit.length > 1) {\r\n // \t\tpointNumber = numSplit[1];\r\n // \t}\r\n\r\n // \tif (roundNumber == '0') {\r\n // \t\t// 查找第一个非零字符的索引\r\n // \t\tlet decimalIndex = 0;\r\n // \t\tfor (const item of pointNumber) {\r\n // \t\t\tif (item == '0') {\r\n // \t\t\t\tdecimalIndex++;\r\n // \t\t\t} else {\r\n // \t\t\t\tbreak;\r\n // \t\t\t}\r\n // \t\t}\r\n // \t\tlet removeZeroPointNumber = pointNumber.substring(decimalIndex, pointNumber.length); //去除无效0之后的数据\r\n\r\n // \t\tif (index > removeZeroPointNumber.length) {\r\n // \t\t\tlet dyCount = index - removeZeroPointNumber.length;\r\n // \t\t\tfor (let i = 0; i < dyCount; i++) {\r\n // \t\t\t\tpointNumber += '0';\r\n // \t\t\t}\r\n // \t\t\tnum = roundNumber + '.' + pointNumber;\r\n // \t\t} else if (index <= removeZeroPointNumber.length) {\r\n // \t\t\tnum = roundNumber + '.' + pointNumber.substring(0, index + decimalIndex);\r\n // \t\t}\r\n // \t} else {\r\n // \t\tif (index > roundNumber.length) {\r\n // \t\t\tlet pointCount = index - roundNumber.length;\r\n\r\n // \t\t\tif (pointCount > pointNumber.length) {\r\n // \t\t\t\tlet zeroCount = pointCount - pointNumber.length;\r\n // \t\t\t\tnum = roundNumber + '.' + pointNumber.substring(0, pointNumber.length);\r\n // \t\t\t\tfor (let i = 0; i < zeroCount; i++) {\r\n // \t\t\t\t\tnum += '0';\r\n // \t\t\t\t}\r\n // \t\t\t} else if (pointCount === pointNumber.length) {\r\n // \t\t\t\tnum = roundNumber + '.' + pointNumber;\r\n // \t\t\t} else if (pointCount < pointNumber.length) {\r\n // \t\t\t\tnum = roundNumber + '.' + pointNumber.substring(0, pointCount);\r\n // \t\t\t}\r\n // \t\t} else if (index === roundNumber.length) {\r\n // \t\t\tnum = roundNumber;\r\n // \t\t} else if (index < roundNumber.length) {\r\n // \t\t\tlet zeroCount = roundNumber.length - index;\r\n // \t\t\tnum = roundNumber.substring(0, index);\r\n // \t\t\tfor (let i = 0; i < zeroCount; i++) {\r\n // \t\t\t\tnum += '0';\r\n // \t\t\t}\r\n // \t\t}\r\n // \t}\r\n\r\n // \tif (num.indexOf('.') > -1 && num.length < numOld.length) {\r\n // \t}\r\n\r\n // \tlet sign = number < 0 ? '-' : '';\r\n\r\n // \treturn sign + num;\r\n // };\r\n\r\n // return calcVal(retArrVals[0], accuracy);\r\n },\r\n },\r\n {\r\n funName: 'YJDZ',\r\n funDesc: '按照单元格点选顺序,优先提取最后一个有数据的单元格值',\r\n funDefaultVal: null,\r\n funCallback: (spread, sheet, retData) => {\r\n let retArrVals = [];\r\n retData.allCellVals.forEach((item) => {\r\n if (\r\n item != null &&\r\n item != undefined &&\r\n item != '/' &&\r\n (item._error == null || item._error == undefined) &&\r\n (item + '').trim().length > 0\r\n ) {\r\n retArrVals.push(item);\r\n }\r\n });\r\n\r\n return retArrVals.length == 0 ? '/' : retArrVals[retArrVals.length - 1];\r\n },\r\n },\r\n {\r\n funName: 'YJTKY',\r\n funDesc: '混凝土抗压强度',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '超差值,如:0.15',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验名称,如:混凝土抗压',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于5个,则返回空字符串\r\n if (retData.allCellVals.length < 5) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[0]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[1]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([retData.allCellVals[0], retData.allCellVals[1], retData.allCellVals[2]]);\r\n\r\n let a = Number(retArrVals[0]),\r\n b = Number(retArrVals[1]),\r\n c = Number(retArrVals[2]),\r\n d = Number(retData.allCellVals[3]),\r\n e = retData.allCellVals[4];\r\n d = d * 1;\r\n\r\n let ret = FormulaUtils.commFun.getAverage(retArrVals); //计算三个值中的平均值\r\n let max = FormulaUtils.commFun.getMax(retArrVals) * 1; //计算三个值中的最大值\r\n let min = FormulaUtils.commFun.getMin(retArrVals) * 1; //计算三个值中的最小值\r\n let mid = a * 1 + b * 1 + c * 1 - max * 1 - min * 1;\r\n if (Math.abs(max - mid) > mid * d && Math.abs(min - mid) > mid * d) {\r\n // msg = e + '最大值(' + max + ')与最小值(' + min + ')与中间值(' + mid + ')之差均超过中间值的15%(' + mid * d + '),试验无效!';\r\n ret = '无效';\r\n return ret;\r\n } else if (Math.abs(max - mid) > mid * d || Math.abs(min - mid) > mid * d) {\r\n // msg = e + '最大值(' + max + ')与最小值(' + min + ')其中一个值与中间值(' + mid + ')之差超过中间值的15%(' + mid * d + '),取中间值为结果!';\r\n ret = mid;\r\n }\r\n\r\n return ret;\r\n },\r\n },\r\n {\r\n funName: 'YJJSKZ',\r\n funDesc: '水泥胶砂抗折',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '超差值,如:0.1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验名称,如:水泥胶砂抗折',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于5个,则返回空字符串\r\n if (retData.allCellVals.length < 5) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[0]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[1]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([retData.allCellVals[0], retData.allCellVals[1], retData.allCellVals[2]]);\r\n\r\n let a = Number(retArrVals[0]),\r\n b = Number(retArrVals[1]),\r\n c = Number(retArrVals[2]),\r\n d = Number(retData.allCellVals[3]),\r\n e = retData.allCellVals[4];\r\n d = d * 1;\r\n\r\n let arr = [a, b, c]; //三个值的数组\r\n let arr2 = new Array(); //两个值的数组\r\n arr.sort(function (a, b) {\r\n return a - b;\r\n });\r\n let ret = FormulaUtils.commFun.getAverage(arr); //计算三个值中的平均值\r\n for (let v = 0; v < arr.length; v++) {\r\n arr2[v] = Math.abs(arr[v] - ret); //算与平均值的差\r\n arr2.sort(function (a, b) {\r\n return a - b;\r\n });\r\n }\r\n if (arr.length > 2) {\r\n let max = FormulaUtils.commFun.getMax(arr2); //取最大值\r\n let min = FormulaUtils.commFun.getMin(arr2); //取最小值\r\n let m = max / ret; //最大值与平均值的差\r\n let n = min / ret; //最小值与平均值的差\r\n let y = arr2[1] / ret; //中间值与平均值的差\r\n if (m <= d) {\r\n // ret = ret;\r\n } else if (Math.abs(m) > d && Math.abs(n) > d && Math.abs(y) > d) {\r\n // msg = e + '当三个强度值中同时有3个超出平均值±10%时,则此组结果作废。';\r\n ret = '作废';\r\n return ret;\r\n } else if (arr[2] > ret + d * ret && arr[0] < ret - d * ret) {\r\n ret = arr[1];\r\n // msg = e + '有2个值超过平均值的±10%,按规定清除,测定值取剩余值作为结果。';\r\n } else {\r\n let pin = FormulaUtils.commFun.getMin(arr); //取最小值\r\n let pjz = FormulaUtils.commFun.getAverage(arr);\r\n if (pin < pjz - pjz * 0.1) {\r\n ret = FormulaUtils.commFun.getAverage([arr[1], arr[2]]);\r\n // msg = e + '有个值超过平均值的±10%,按规定清除,测定值取剩余的平均值。';\r\n } else {\r\n ret = FormulaUtils.commFun.getAverage([arr[0], arr[1]]);\r\n // msg = e + '有个值超过平均值的±10%,按规定清除,测定值取剩余的平均值。';\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n },\r\n },\r\n {\r\n funName: 'YJJSKY',\r\n funDesc: '水泥胶砂抗压',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '数值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值4',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值6',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '超差值,如:0.1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验名称,如:水泥胶砂抗压',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于8个,则返回空字符串\r\n if (retData.allCellVals.length < 8) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[0]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[1]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[4]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[5])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([\r\n retData.allCellVals[0],\r\n retData.allCellVals[1],\r\n retData.allCellVals[2],\r\n retData.allCellVals[3],\r\n retData.allCellVals[4],\r\n retData.allCellVals[5],\r\n ]);\r\n\r\n let a = Number(retArrVals[0]),\r\n b = Number(retArrVals[1]),\r\n c = Number(retArrVals[2]),\r\n d = Number(retArrVals[3]),\r\n e = Number(retArrVals[4]),\r\n f = Number(retArrVals[5]),\r\n g = Number(retData.allCellVals[6]),\r\n h = retData.allCellVals[7];\r\n g = g * 1;\r\n\r\n let arr = [a, b, c, d, e, f]; //最开始数据输入的数组\r\n let arr2 = new Array(); //计算与平均值差的数组\r\n let arr3 = new Array(); //剔除超差最大值后的数组\r\n let arr4 = new Array(); //再次计算平均值差的数组\r\n let arr5 = new Array(); //算第一次超差个数的数组\r\n let hs = 0; //第一次超差个数\r\n arr.sort(function (a, b) {\r\n return a - b;\r\n }); //排序\r\n let avg = FormulaUtils.commFun.getAverage(arr);\r\n let j = 0;\r\n let ret; //最后输出的值\r\n arr2[0] = Math.abs(arr[0] - avg);\r\n arr2[1] = Math.abs(arr[1] - avg);\r\n arr2[2] = Math.abs(arr[2] - avg);\r\n arr2[3] = Math.abs(arr[3] - avg);\r\n arr2[4] = Math.abs(arr[4] - avg);\r\n arr2[5] = Math.abs(arr[5] - avg);\r\n\r\n arr5[0] = Math.abs(arr[0] - avg) / avg;\r\n arr5[1] = Math.abs(arr[1] - avg) / avg;\r\n arr5[2] = Math.abs(arr[2] - avg) / avg;\r\n arr5[3] = Math.abs(arr[3] - avg) / avg;\r\n arr5[4] = Math.abs(arr[4] - avg) / avg;\r\n arr5[5] = Math.abs(arr[5] - avg) / avg;\r\n for (let i = 0; i < 6; i++) {\r\n if (arr5[i] > g) {\r\n hs++;\r\n }\r\n }\r\n if (arr.length > 5) {\r\n let max = FormulaUtils.commFun.getMax(arr2);\r\n let min = FormulaUtils.commFun.getMin(arr2);\r\n let m = max / avg; //最大值与平均值的差\r\n let x = min / avg; //最小值与平均值的差\r\n\r\n if (m <= g && x <= g) {\r\n ret = avg;\r\n } else if (hs >= 2) {\r\n ret = '作废';\r\n // msg = '两次有值超出平均值的±10%,本组试验为无效试验。';\r\n } else {\r\n for (let i = 0; i < 6; i++) {\r\n if (max == arr2[i]) {\r\n continue;\r\n } else {\r\n arr3[j] = arr[i];\r\n j++;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(arr3);\r\n arr4[0] = Math.abs(arr3[0] - avg);\r\n arr4[1] = Math.abs(arr3[1] - avg);\r\n arr4[2] = Math.abs(arr3[2] - avg);\r\n arr4[3] = Math.abs(arr3[3] - avg);\r\n arr4[4] = Math.abs(arr3[4] - avg);\r\n let max2 = FormulaUtils.commFun.getMax(arr4);\r\n let n = max2 / avg; //最大值与平均值的差\r\n let min3 = FormulaUtils.commFun.getMin(arr3);\r\n let max3 = FormulaUtils.commFun.getMax(arr3);\r\n let avg3 = FormulaUtils.commFun.getAverage(arr3);\r\n let y = avg3 - avg3 * g; //平均值超差下限\r\n let z = avg3 + avg3 * g; //平均值超差上限\r\n if (max3 > z || min3 < y) {\r\n ret = '作废';\r\n // msg = '剔除一个超差值后,剩余的值中还有一个超过了剩余值的平均值,此数据作废';\r\n return ret;\r\n } else if (n <= g) {\r\n ret = avg;\r\n // msg = '有一个值超出平均值的±10%,测定值取剩余的平均值。';\r\n }\r\n }\r\n }\r\n\r\n return ret;\r\n },\r\n },\r\n {\r\n funName: 'YJTN',\r\n funDesc: 'ta/√n()查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '保证率',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '检测点数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于2个,则返回空字符串\r\n if (retData.allCellVals.length < 2) {\r\n return '';\r\n }\r\n if (!FormulaUtils.commFun.isNumber(retData.allCellVals[0]) || !FormulaUtils.commFun.isNumber(retData.allCellVals[1])) {\r\n return '';\r\n }\r\n\r\n let bzn = retData.allCellVals[0] * 100 + '', //*100是因为,Excel单元格中的内容虽然显示为95%,但是实际接收到的值为0.95,因此这里需要*100\r\n n = Number(retData.allCellVals[1]);\r\n\r\n let arr = new Array();\r\n let res1 = 0;\r\n if (n > 100) {\r\n if (bzn == '99') {\r\n res1 = 2.3265 / Math.sqrt(n);\r\n } else if (bzn == '95') {\r\n res1 = 1.6449 / Math.sqrt(n);\r\n } else if (bzn == '90') {\r\n res1 = 1.2815 / Math.sqrt(n);\r\n }\r\n } else {\r\n if (bzn == '99') {\r\n arr = new Array(\r\n '2-22.501',\r\n '3-4.021',\r\n '4-2.270',\r\n '5-1.676',\r\n '6-1.374',\r\n '7-1.188',\r\n '8-1.060',\r\n '9-0.966',\r\n '10-0.892',\r\n '11-0.833',\r\n '12-0.785',\r\n '13-0.744',\r\n '14-0.708',\r\n '15-0.678',\r\n '16-0.651',\r\n '17-0.626',\r\n '18-0.605',\r\n '19-0.586',\r\n '20-0.568',\r\n '21-0.552',\r\n '22-0.537',\r\n '23-0.523',\r\n '24-0.510',\r\n '25-0.498',\r\n '26-0.487',\r\n '27-0.477',\r\n '28-0.467',\r\n '29-0.458',\r\n '30-0.449',\r\n '40-0.383',\r\n '50-0.340',\r\n '60-0.308',\r\n '70-0.285',\r\n '80-0.266',\r\n '90-0.249',\r\n '100-0.236'\r\n ); //保证率为99的数组\r\n } else if (bzn == '95') {\r\n arr = new Array(\r\n '2-4.465',\r\n '3-1.686',\r\n '4-1.177',\r\n '5-0.953',\r\n '6-0.823',\r\n '7-0.734',\r\n '8-0.670',\r\n '9-0.620',\r\n '10-0.580',\r\n '11-0.546',\r\n '12-0.518',\r\n '13-0.494',\r\n '14-0.473',\r\n '15-0.455',\r\n '16-0.438',\r\n '17-0.423',\r\n '18-0.410',\r\n '19-0.398',\r\n '20-0.387',\r\n '21-0.376',\r\n '22-0.367',\r\n '23-0.358',\r\n '24-0.350',\r\n '25-0.342',\r\n '26-0.335',\r\n '27-0.328',\r\n '28-0.322',\r\n '29-0.316',\r\n '30-0.310',\r\n '40-0.266',\r\n '50-0.237',\r\n '60-0.216',\r\n '70-0.199',\r\n '80-0.186',\r\n '90-0.175',\r\n '100-0.166'\r\n ); //保证率为95的数组\r\n } else if (bzn == '90') {\r\n arr = new Array(\r\n '2-2.176',\r\n '3-1.089',\r\n '4-0.819',\r\n '5-0.686',\r\n '6-0.603',\r\n '7-0.544',\r\n '8-0.500',\r\n '9-0.466',\r\n '10-0.437',\r\n '11-0.414',\r\n '12-0.393',\r\n '13-0.376',\r\n '14-0.361',\r\n '15-0.347',\r\n '16-0.335',\r\n '17-0.324',\r\n '18-0.314',\r\n '19-0.305',\r\n '20-0.297',\r\n '21-0.289',\r\n '22-0.282',\r\n '23-0.275',\r\n '24-0.269',\r\n '25-0.264',\r\n '26-0.258',\r\n '27-0.253',\r\n '28-0.248',\r\n '29-0.244',\r\n '30-0.239',\r\n '40-0.206',\r\n '50-0.184',\r\n '60-0.167',\r\n '70-0.155',\r\n '80-0.145',\r\n '90-0.136',\r\n '100-0.129'\r\n ); //保证率为90的数组\r\n }\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n let a = arr[i].split('-');\r\n\r\n if (a[0] == n) {\r\n res1 = a[1];\r\n }\r\n }\r\n }\r\n\r\n return res1;\r\n },\r\n },\r\n {\r\n funName: 'YJSMD',\r\n funDesc: '水密度查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '水的温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n let symbol = '/';\r\n\r\n //如果传递的参数小于1个,则返回符号\r\n if (retData.allCellVals.length < 1) {\r\n return symbol;\r\n }\r\n\r\n //验证待修约的数据是否为空或者/,如果是,则直接返回/\r\n if (typeof retData.allCellVals[0] == 'string' && (retData.allCellVals[0].trim().length == 0 || retData.allCellVals[0].trim() == '/')) {\r\n return symbol;\r\n }\r\n\r\n let a = retData.allCellVals[0] + '';\r\n\r\n let md; //最后输出的值\r\n let arr = new Array(\r\n '15-0.99913',\r\n '16-0.99897',\r\n '17-0.99880',\r\n '18-0.99862',\r\n '19-0.99843',\r\n '20-0.99822',\r\n '21-0.99802',\r\n '22-0.99779',\r\n '23-0.99756',\r\n '24-0.99733',\r\n '25-0.99702'\r\n );\r\n for (let i = 0; i < arr.length; i++) {\r\n let ret = arr[i].split('-');\r\n if (a == ret[0]) {\r\n md = ret[1];\r\n }\r\n }\r\n if (a.length > 2) {\r\n let wd = a;\r\n wd = wd.substring(0, wd.indexOf('.'));\r\n\r\n let j = 0;\r\n for (let i = 0; i < arr.length; i++) {\r\n let ret = arr[i].split('-');\r\n if (wd == ret[0]) {\r\n j = i;\r\n }\r\n }\r\n if (j == arr.length - 1) {\r\n let arr1 = arr[j].split('-');\r\n let arr2 = arr[j - 1].split('-');\r\n md = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -5\r\n );\r\n } else {\r\n let arr1 = arr[j].split('-');\r\n let arr2 = arr[j + 1].split('-');\r\n md = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -5\r\n );\r\n }\r\n }\r\n\r\n // if (a * 1 < 15 || a * 1 > 25) {\r\n // \tmsg = '试验水温范围在[15-25 ℃]之间,系统会自动生产该温度相应的密度';\r\n // } else {\r\n // \tmsg = '操作错误提示:请输入15--25之间的数值!';\r\n // }\r\n\r\n return md;\r\n },\r\n },\r\n {\r\n funName: 'YJSYMD',\r\n funDesc: '水银密度查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '试验温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let a = retData.allCellVals[0] + '';\r\n\r\n let wd = a;\r\n let md; //输出的数据\r\n if (wd == '8' || wd == '8.0') {\r\n md = '13.58';\r\n } else if (wd == '10' || wd == '10.0') {\r\n md = '13.57';\r\n } else if (wd == '12' || wd == '12.0') {\r\n md = '13.57';\r\n } else if (wd == '14' || wd == '14.0') {\r\n md = '13.56';\r\n } else if (wd == '16' || wd == '16.0') {\r\n md = '13.56';\r\n } else if (wd == '18' || wd == '18.0') {\r\n md = '13.55';\r\n } else if (wd == '20' || wd == '20.0') {\r\n md = '13.55';\r\n } else if (wd == '22' || wd == '22.0') {\r\n md = '13.54';\r\n } else if (wd == '24' || wd == '24.0') {\r\n md = '13.54';\r\n } else if (wd == '26' || wd == '26.0') {\r\n md = '13.53';\r\n } else if (wd == '28' || wd == '28.0') {\r\n md = '13.53';\r\n } else if (wd == '30' || wd == '30.0') {\r\n md = '13.52';\r\n } else if (wd == '32' || wd == '32.0') {\r\n md = '13.52';\r\n } else if (wd == '34' || wd == '34.0') {\r\n md = '13.51';\r\n } else {\r\n md = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.InterpolationMethod_y('8', '30', '13.58', '13.52', wd), -2);\r\n }\r\n return md;\r\n },\r\n },\r\n {\r\n funName: 'YJKQND',\r\n funDesc: '空气黏度查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '试验温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 1 || retData.allCellVals[0] == '/') {\r\n return '/';\r\n }\r\n\r\n let arr = new Array(\r\n '8-17.49',\r\n '9-17.54',\r\n '10-17.59',\r\n '11-17.64',\r\n '12-17.68',\r\n '13-17.73',\r\n '14-17.78',\r\n '15-17.83',\r\n '16-17.88',\r\n '17-17.93',\r\n '18-17.98',\r\n '19-18.03',\r\n '20-18.08',\r\n '21-18.13',\r\n '22-18.18',\r\n '23-18.23',\r\n '24-18.28',\r\n '25-18.32',\r\n '26-18.37',\r\n '27-18.42',\r\n '28-18.47',\r\n '29-18.52',\r\n '30-18.57',\r\n '31-18.62',\r\n '32-18.67',\r\n '33-18.72',\r\n '34-18.76'\r\n );\r\n\r\n let a = retData.allCellVals[0] + ''; //水的温度\r\n let b; //空气粘度输出的值\r\n\r\n for (let i = 0; i < arr.length; i++) {\r\n let ret = arr[i].split('-');\r\n if (a == ret[0]) {\r\n b = ret[1];\r\n }\r\n }\r\n if (a.length > 2) {\r\n //内插法\r\n let wd = a.substring(0, a.indexOf('.'));\r\n\r\n let j = 0;\r\n for (let i = 0; i < arr.length; i++) {\r\n let ret1 = arr[i].split('-');\r\n if (wd == ret1[0]) {\r\n j = i;\r\n //continue;\r\n }\r\n }\r\n if (j == arr.length - 1) {\r\n let arr1 = arr[j].split('-');\r\n let arr2 = arr[j - 1].split('-');\r\n b = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -2\r\n );\r\n } else {\r\n let arr1 = arr[j].split('-');\r\n let arr2 = arr[j + 1].split('-');\r\n\r\n b = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -2\r\n );\r\n }\r\n }\r\n\r\n if (Number(a) * 1 < 8 || Number(a) * 1 > 34) {\r\n // global_msg = '试验水温范围在[8-34 ℃]之间,系统会自动生产该温度相应的空气粘度';\r\n }\r\n\r\n return b;\r\n },\r\n },\r\n {\r\n funName: 'YJSBBZCA',\r\n funDesc: '3倍标准差方法剔除特异值:平均值(YJSBBZCA)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type = 3;\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n }\r\n\r\n return avg;\r\n },\r\n },\r\n {\r\n funName: 'YJSBBZCS',\r\n funDesc: '3倍标准差方法剔除特异值:标准差(YJSBBZCS)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type = 3;\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n stand = FormulaUtils.commFun.GetS(_array);\r\n }\r\n return stand;\r\n },\r\n },\r\n {\r\n funName: 'YJTWL',\r\n funDesc: '计算混凝土抗弯拉强度',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '断裂面1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂面2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂面3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于6个,则返回空字符串\r\n if (retData.allCellVals.length < 6) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[4]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[5])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([retData.allCellVals[3], retData.allCellVals[4], retData.allCellVals[5]]);\r\n\r\n let dlm1 = retData.allCellVals[0],\r\n dlm2 = retData.allCellVals[1],\r\n dlm3 = retData.allCellVals[2],\r\n sz1 = retArrVals[0],\r\n sz2 = retArrVals[1],\r\n sz3 = retArrVals[2];\r\n\r\n let cdz = '/'; //混凝土抗弯拉强度值\r\n let arr = retArrVals; //new Array(sz1, sz2, sz3);\r\n arr.sort(function (a, b) {\r\n return a - b;\r\n });\r\n //三个试件中如有一个断裂面位于“加荷点外”,则按另外两个值计算。如这两个值的差值不大于这两个测量值中最小值的 15%,则以两个测量值的平均值为测试结果,否则结果无效。\r\n if (dlm1 == '加荷点外' || dlm2 == '加荷点外' || dlm3 == '加荷点外') {\r\n if (dlm1 == '加荷点外' && dlm2 == '加荷点内' && dlm3 == '加荷点内') {\r\n let min = FormulaUtils.commFun.getMin([sz2, sz3]);\r\n if (Math.abs(sz2 - sz3) <= min * 0.15) {\r\n cdz = FormulaUtils.commFun.getAverage([sz2, sz3]);\r\n } else {\r\n cdz = '无效';\r\n }\r\n }\r\n if (dlm1 == '加荷点内' && dlm2 == '加荷点外' && dlm3 == '加荷点内') {\r\n let min = FormulaUtils.commFun.getMin([sz1, sz3]);\r\n if (Math.abs(sz1 - sz3) <= min * 0.15) {\r\n cdz = FormulaUtils.commFun.getAverage([sz1, sz3]);\r\n } else {\r\n cdz = '无效';\r\n }\r\n }\r\n if (dlm1 == '加荷点内' && dlm2 == '加荷点内' && dlm3 == '加荷点外') {\r\n let min = FormulaUtils.commFun.getMin([sz2, sz1]);\r\n if (Math.abs(sz2 - sz1) <= min * 0.15) {\r\n cdz = FormulaUtils.commFun.getAverage([sz2, sz1]);\r\n } else {\r\n cdz = '无效';\r\n }\r\n }\r\n if (\r\n (dlm1 == '加荷点外' && dlm2 == '加荷点外' && dlm3 == '加荷点内') ||\r\n (dlm1 == '加荷点内' && dlm2 == '加荷点外' && dlm3 == '加荷点外') ||\r\n (dlm1 == '加荷点外' && dlm2 == '加荷点内' && dlm3 == '加荷点外')\r\n ) {\r\n cdz = '无效';\r\n }\r\n } else if (dlm1 == '加荷点内' || dlm2 == '加荷点内' || dlm3 == '加荷点内') {\r\n let max = FormulaUtils.commFun.getMax([sz1, sz2, sz3]);\r\n let min = FormulaUtils.commFun.getMin([sz1, sz2, sz3]);\r\n //三个值的最大值或最小值中如有一个与中间值之差超过中间值的 15%,则把最大值和最小值舍去,以中间值作为结果。如有两个值与中间值的差值均超过15%时,则该组试验结果无效。\r\n if (Math.abs(max - arr[1]) > arr[1] * 0.15 && Math.abs(min - arr[1]) > arr[1] * 0.15) {\r\n cdz = '无效';\r\n } else if (Math.abs(max - arr[1]) > arr[1] * 0.15) {\r\n cdz = arr[1];\r\n } else if (Math.abs(min - arr[1]) > arr[1] * 0.15) {\r\n cdz = arr[1];\r\n } else {\r\n cdz = FormulaUtils.commFun.getAverage([sz1, sz2, sz3]); //三个试件的断裂面都位于“加荷点内”,以三个值的算术平均值为测定值。\r\n }\r\n }\r\n return cdz;\r\n },\r\n },\r\n {\r\n funName: 'YJHJGJPD',\r\n funDesc: '焊接钢筋结构判定(YJHJGJPD)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '牌号',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于7个,则返回空字符串\r\n if (retData.allCellVals.length < 7) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[1]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([retData.allCellVals[1], retData.allCellVals[2], retData.allCellVals[3]]);\r\n\r\n let ph = retData.allCellVals[0],\r\n jxqd1 = retArrVals[0],\r\n jxqd2 = retArrVals[1],\r\n jxqd3 = retArrVals[2],\r\n dlxz1 = retData.allCellVals[4],\r\n dlxz2 = retData.allCellVals[5],\r\n dlxz3 = retData.allCellVals[6];\r\n\r\n let txjgpd = '';\r\n let jsyq = '';\r\n if (ph == 'HRB335' || ph == 'HRB335E') {\r\n jsyq = '≥455';\r\n } else if (ph == 'R235') {\r\n jsyq = '≥370';\r\n } else if (ph == 'Q235') {\r\n jsyq = '≥410';\r\n } else if (ph == 'HRB400' || ph == 'HRB400E') {\r\n jsyq = '≥540';\r\n } else if (ph == 'HPB300') {\r\n jsyq = '≥420';\r\n } else if (ph == 'HRB500' || ph == 'HRBF500' || ph == 'HRB500E' || ph == 'HRBF500E') {\r\n jsyq = '≥630';\r\n } else if (ph == 'HRB600') {\r\n jsyq = '≥730';\r\n } else {\r\n jsyq = '/';\r\n }\r\n jsyq = jsyq.replace('≥', '') * 1;\r\n let k1 = jxqd1 * 1;\r\n let k2 = jxqd2 * 1;\r\n let k3 = jxqd3 * 1;\r\n\r\n let dl1 = dlxz1; //断裂形状\r\n let dl2 = dlxz2;\r\n let dl3 = dlxz3;\r\n if (dl1 != '/' && dl2 != '/' && dl3 != '/') {\r\n if (k1 >= jsyq && k2 >= jsyq && k3 >= jsyq) {\r\n if (dl1 == '断于钢筋母材,呈延性断裂' && dl2 == '断于钢筋母材,呈延性断裂' && dl3 != '断于钢筋母材,呈脆性断裂') {\r\n txjgpd = '合格';\r\n } else if (dl1 == '断于钢筋母材,呈延性断裂' && dl3 == '断于钢筋母材,呈延性断裂' && dl2 != '断于钢筋母材,呈脆性断裂') {\r\n txjgpd = '合格';\r\n } else if (dl2 == '断于钢筋母材,呈延性断裂' && dl3 == '断于钢筋母材,呈延性断裂' && dl1 != '断于钢筋母材,呈脆性断裂') {\r\n txjgpd = '合格';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n dl3 != '断于钢筋母材,呈脆性断裂' &&\r\n dl3 != '断于焊缝,呈延性断裂' &&\r\n dl3 != '断于热影响区,呈延性断裂'\r\n ) {\r\n txjgpd = '合格';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂') &&\r\n dl2 != '断于钢筋母材,呈脆性断裂' &&\r\n dl2 != '断于焊缝,呈延性断裂' &&\r\n dl2 != '断于热影响区,呈延性断裂'\r\n ) {\r\n txjgpd = '合格';\r\n } else if (\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n dl1 != '断于钢筋母材,呈脆性断裂' &&\r\n dl1 != '断于焊缝,呈延性断裂' &&\r\n dl1 != '断于热影响区,呈延性断裂'\r\n ) {\r\n txjgpd = '合格';\r\n } else {\r\n txjgpd = '无效';\r\n }\r\n } else if (k1 >= jsyq && k2 >= jsyq && k3 < jsyq) {\r\n if (dl3 == '断于热影响区,呈延性断裂') {\r\n txjgpd = '无效';\r\n } else if (dl1 == '断于钢筋母材,呈延性断裂' && dl2 == '断于钢筋母材,呈延性断裂' && dl3 != '断于钢筋母材,呈延性断裂') {\r\n txjgpd = '复检';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n dl3 == '断于钢筋母材,呈延性断裂'\r\n ) {\r\n txjgpd = '不合格';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂')\r\n ) {\r\n txjgpd = '不合格';\r\n } else {\r\n txjgpd = '无效';\r\n }\r\n } else if (k1 >= jsyq && k3 >= jsyq && k2 < jsyq) {\r\n if (dl2 == '断于热影响区,呈延性断裂') {\r\n txjgpd = '无效';\r\n } else if (dl1 == '断于钢筋母材,呈延性断裂' && dl3 == '断于钢筋母材,呈延性断裂' && dl2 != '断于钢筋母材,呈延性断裂') {\r\n txjgpd = '复检';\r\n } else if (\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n dl2 == '断于钢筋母材,呈延性断裂'\r\n ) {\r\n txjgpd = '不合格';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂')\r\n ) {\r\n txjgpd = '不合格';\r\n } else {\r\n txjgpd = '无效';\r\n }\r\n } else if (k2 >= jsyq && k3 >= jsyq && k1 < jsyq) {\r\n if (dl1 == '断于热影响区,呈延性断裂') {\r\n txjgpd = '无效';\r\n } else if (dl2 == '断于钢筋母材,呈延性断裂' && dl3 == '断于钢筋母材,呈延性断裂' && dl1 != '断于钢筋母材,呈延性断裂') {\r\n txjgpd = '复检';\r\n } else if (\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n dl1 == '断于钢筋母材,呈延性断裂'\r\n ) {\r\n txjgpd = '不合格';\r\n } else if (\r\n (dl1 == '断于焊缝,呈脆性断裂' || dl1 == '断于热影响区,呈脆性断裂') &&\r\n (dl2 == '断于焊缝,呈脆性断裂' || dl2 == '断于热影响区,呈脆性断裂') &&\r\n (dl3 == '断于焊缝,呈脆性断裂' || dl3 == '断于热影响区,呈脆性断裂')\r\n ) {\r\n txjgpd = '不合格';\r\n } else {\r\n txjgpd = '无效';\r\n }\r\n } else if (k1 >= jsyq && k2 < jsyq && k3 < jsyq) {\r\n txjgpd = '不合格';\r\n } else if (k2 >= jsyq && k1 < jsyq && k3 < jsyq) {\r\n txjgpd = '不合格';\r\n } else if (k3 >= jsyq && k2 < jsyq && k1 < jsyq) {\r\n txjgpd = '不合格';\r\n } else if (k1 < jsyq && k2 < jsyq && k3 < jsyq) {\r\n txjgpd = '不合格';\r\n } else {\r\n txjgpd = '无效';\r\n }\r\n } else {\r\n txjgpd = '/';\r\n }\r\n\r\n return txjgpd;\r\n },\r\n },\r\n {\r\n funName: 'YJYSXHP',\r\n funDesc: '液塑限:HP值',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '锥体质量',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '材料类型',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于8个,则返回空字符串\r\n if (retData.allCellVals.length < 8) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[4]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[5]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[6]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[7])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([\r\n retData.allCellVals[2],\r\n retData.allCellVals[3],\r\n retData.allCellVals[4],\r\n retData.allCellVals[5],\r\n retData.allCellVals[6],\r\n retData.allCellVals[7],\r\n ]);\r\n\r\n let ztzl = retData.allCellVals[0],\r\n type = retData.allCellVals[1],\r\n h1c = retArrVals[0],\r\n h1b = retArrVals[1],\r\n h1a = retArrVals[2],\r\n w1c = retArrVals[3],\r\n w1b = retArrVals[4],\r\n w1a = retArrVals[5];\r\n\r\n let SumNumber = '/';\r\n let tmp_x, tmp_y;\r\n let wp;\r\n let sdh = 20;\r\n // if ($(\"#tztzl\").val() == \"76\") { sdh = 17; }\r\n if (ztzl == '76' || ztzl == 76) {\r\n sdh = 17;\r\n }\r\n let array_x = new Array();\r\n let array_y = new Array();\r\n let h1 = [h1c, h1b, h1a];\r\n let w1 = [w1c, w1b, w1a];\r\n ///----------------给数组X,Y坐标传点-----------\r\n for (let i = 0; i < h1.length; i++) {\r\n tmp_x = w1[i] * 1; //含水率平均值\r\n tmp_y = h1[i] * 1; //锥入深度平均值\r\n if (tmp_x != '' && tmp_x != '/' && tmp_y != '' && tmp_y != '/') {\r\n array_x[i] = tmp_x;\r\n array_y[i] = tmp_y;\r\n }\r\n }\r\n array_x.sort(function (a, b) {\r\n return a - b;\r\n });\r\n array_y.sort(function (a, b) {\r\n return a - b;\r\n });\r\n\r\n //--------------------针对土工和矿粉试验,传入2个点求Y对应的X坐标\r\n // x1, x2, y1, y2, y\r\n function call_x_y(Xa, Ya, Xd, Yd, y) {\r\n //(y - y1) * (x2 - x1) / (y2 - y1) + x1 * 1;\r\n let x;\r\n x = Xa - ((Ya - y) * (Xa - Xd)) / (Ya - Yd);\r\n return x;\r\n }\r\n //-------------19 GetHpValue(wl)//土工和矿粉试验依据[砂类土][细粒土]------------------\r\n function GetHpValue(wl, type) {\r\n wl = wl * 1;\r\n let hp;\r\n if (type == 0) hp = 29.6 - 1.22 * wl + 0.017 * wl * wl - 0.0000744 * wl * wl * wl;\r\n else hp = wl / (0.524 * wl - 7.606);\r\n return hp;\r\n }\r\n\r\n let wl, hp;\r\n\r\n if (type == '细粒土') {\r\n //-----------当3点在一条直线上的时候---------------------\r\n\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n // wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n // wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = GetHpValue(tmp_x, 1);\r\n\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n let x_d = (x_b * 1 + x_c * 1) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n //wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n //wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n } else {\r\n //-----------当3点在一条直线上的时候---------------------\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n // wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n //wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(tmp_x, 0), -1);\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n\r\n let x_d = (x_b + x_c) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n //wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n //wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n }\r\n\r\n SumNumber = hp;\r\n if (isNaN(SumNumber)) SumNumber = '/';\r\n return SumNumber;\r\n },\r\n },\r\n {\r\n funName: 'YJYSXWP',\r\n funDesc: '液塑限:WP值',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '锥体质量',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '材料类型',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于8个,则返回空字符串\r\n if (retData.allCellVals.length < 8) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[4]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[5]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[6]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[7])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([\r\n retData.allCellVals[2],\r\n retData.allCellVals[3],\r\n retData.allCellVals[4],\r\n retData.allCellVals[5],\r\n retData.allCellVals[6],\r\n retData.allCellVals[7],\r\n ]);\r\n\r\n let ztzl = retData.allCellVals[0],\r\n type = retData.allCellVals[1],\r\n h1c = retArrVals[0],\r\n h1b = retArrVals[1],\r\n h1a = retArrVals[2],\r\n w1c = retArrVals[3],\r\n w1b = retArrVals[4],\r\n w1a = retArrVals[5];\r\n\r\n function lg(x) {\r\n return Math.LOG10E * Math.log(x);\r\n }\r\n\r\n let SumNumber = '/';\r\n let tmp_x, tmp_y;\r\n let wp;\r\n let sdh = 20;\r\n // if ($(\"#tztzl\").val() == \"76\") { sdh = 17; }\r\n if (ztzl == '76' || ztzl == 76) {\r\n sdh = 17;\r\n }\r\n let array_x = new Array();\r\n let array_y = new Array();\r\n let h1 = [h1c, h1b, h1a];\r\n let w1 = [w1c, w1b, w1a];\r\n ///----------------给数组X,Y坐标传点-----------\r\n for (let i = 0; i < h1.length; i++) {\r\n tmp_x = w1[i] * 1; //含水率平均值\r\n tmp_y = h1[i] * 1; //锥入深度平均值\r\n if (tmp_x != '' && tmp_x != '/' && tmp_y != '' && tmp_y != '/') {\r\n array_x[i] = tmp_x;\r\n array_y[i] = tmp_y;\r\n }\r\n }\r\n array_x.sort(function (a, b) {\r\n return a - b;\r\n });\r\n array_y.sort(function (a, b) {\r\n return a - b;\r\n });\r\n\r\n //--------------------针对土工和矿粉试验,传入2个点求Y对应的X坐标\r\n // x1, x2, y1, y2, y\r\n function call_x_y(Xa, Ya, Xd, Yd, y) {\r\n //(y - y1) * (x2 - x1) / (y2 - y1) + x1 * 1;\r\n let x;\r\n x = Xa - ((Ya - y) * (Xa - Xd)) / (Ya - Yd);\r\n return x;\r\n }\r\n //-------------19 GetHpValue(wl)//土工和矿粉试验依据[砂类土][细粒土]------------------\r\n function GetHpValue(wl, type) {\r\n wl = wl * 1;\r\n let hp;\r\n if (type == 0) hp = 29.6 - 1.22 * wl + 0.017 * wl * wl - 0.0000744 * wl * wl * wl;\r\n else hp = wl / (0.524 * wl - 7.606);\r\n return hp;\r\n }\r\n\r\n let wl, hp;\r\n\r\n if (type == '细粒土') {\r\n //-----------当3点在一条直线上的时候---------------------\r\n\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n wp =\r\n 0.5 *\r\n (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0]))) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0])) +\r\n Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1]))) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1])));\r\n wp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = GetHpValue(tmp_x, 1);\r\n\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n let x_d = (x_b * 1 + x_c * 1) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n wp =\r\n 0.5 *\r\n (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0]))) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0])) +\r\n Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1]))) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1])));\r\n wp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n } else {\r\n //-----------当3点在一条直线上的时候---------------------\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], 20);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n wp =\r\n 0.5 *\r\n (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0]))) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0])) +\r\n Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1]))) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1])));\r\n wp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(tmp_x, 0), -1);\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n\r\n let x_d = (x_b + x_c) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, 20);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n wp =\r\n 0.5 *\r\n (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0]))) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0])) +\r\n Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1]))) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1])));\r\n wp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n }\r\n\r\n SumNumber = wp;\r\n if (isNaN(SumNumber)) SumNumber = '/';\r\n\r\n return SumNumber;\r\n },\r\n },\r\n {\r\n funName: 'YSXWL',\r\n funDesc: '液塑限:WL值',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '锥体质量',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '材料类型',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '锥入深度平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '含水率测定平均值3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于8个,则返回空字符串\r\n if (retData.allCellVals.length < 8) {\r\n return '';\r\n }\r\n if (\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[2]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[3]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[4]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[5]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[6]) ||\r\n !FormulaUtils.commFun.isNumber(retData.allCellVals[7])\r\n ) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt([\r\n retData.allCellVals[2],\r\n retData.allCellVals[3],\r\n retData.allCellVals[4],\r\n retData.allCellVals[5],\r\n retData.allCellVals[6],\r\n retData.allCellVals[7],\r\n ]);\r\n\r\n let ztzl = retData.allCellVals[0],\r\n type = retData.allCellVals[1],\r\n h1c = retArrVals[0],\r\n h1b = retArrVals[1],\r\n h1a = retArrVals[2],\r\n w1c = retArrVals[3],\r\n w1b = retArrVals[4],\r\n w1a = retArrVals[5];\r\n\r\n function lg(x) {\r\n return Math.LOG10E * Math.log(x);\r\n }\r\n\r\n let SumNumber = '/';\r\n let tmp_x, tmp_y;\r\n let wp;\r\n let sdh = 20;\r\n // if ($(\"#tztzl\").val() == \"76\") { sdh = 17; }\r\n if (ztzl == '76' || ztzl == 76) {\r\n sdh = 17;\r\n }\r\n let array_x = new Array();\r\n let array_y = new Array();\r\n let h1 = [h1c, h1b, h1a];\r\n let w1 = [w1c, w1b, w1a];\r\n ///----------------给数组X,Y坐标传点-----------\r\n for (let i = 0; i < h1.length; i++) {\r\n tmp_x = w1[i] * 1; //含水率平均值\r\n tmp_y = h1[i] * 1; //锥入深度平均值\r\n if (tmp_x != '' && tmp_x != '/' && tmp_y != '' && tmp_y != '/') {\r\n array_x[i] = tmp_x;\r\n array_y[i] = tmp_y;\r\n }\r\n }\r\n array_x.sort(function (a, b) {\r\n return a - b;\r\n });\r\n array_y.sort(function (a, b) {\r\n return a - b;\r\n });\r\n\r\n //--------------------针对土工和矿粉试验,传入2个点求Y对应的X坐标\r\n // x1, x2, y1, y2, y\r\n function call_x_y(Xa, Ya, Xd, Yd, y) {\r\n //(y - y1) * (x2 - x1) / (y2 - y1) + x1 * 1;\r\n let x;\r\n x = Xa - ((Ya - y) * (Xa - Xd)) / (Ya - Yd);\r\n return x;\r\n }\r\n //-------------19 GetHpValue(wl)//土工和矿粉试验依据[砂类土][细粒土]------------------\r\n function GetHpValue(wl, type) {\r\n wl = wl * 1;\r\n let hp;\r\n if (type == 0) hp = 29.6 - 1.22 * wl + 0.017 * wl * wl - 0.0000744 * wl * wl * wl;\r\n else hp = wl / (0.524 * wl - 7.606);\r\n return hp;\r\n }\r\n\r\n let wl, hp;\r\n\r\n if (type == '细粒土') {\r\n //-----------当3点在一条直线上的时候---------------------\r\n\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n hp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n wp =\r\n 0.5 *\r\n (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0]))) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0])) +\r\n Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1]))) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1])));\r\n wp = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = GetHpValue(tmp_x, 1);\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n let x_d = (x_b * 1 + x_c * 1) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n // hp = GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 1), -1);\r\n // wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n //wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n } else {\r\n //-----------当3点在一条直线上的时候---------------------\r\n if (Math.abs((array_y[2] - array_y[1]) / (array_x[2] - array_x[1]) - (array_y[2] - array_y[0]) / (array_x[2] - array_x[0])) <= 0.00001) {\r\n wl = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n // hp = GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n // wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n // wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n //-------------当3点不为一条直线,AC,AB -----------\r\n else {\r\n tmp_x = array_x[2];\r\n tmp_y = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetHpValue(tmp_x, 0), -1);\r\n let x_b = call_x_y(array_x[2], array_y[2], array_x[0], array_y[0], tmp_y);\r\n let x_c = call_x_y(array_x[2], array_y[2], array_x[1], array_y[1], tmp_y);\r\n\r\n let x_d = (x_b + x_c) / 2;\r\n wl = call_x_y(array_x[2], array_y[2], x_d, tmp_y, sdh);\r\n wl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(wl, -1);\r\n // hp = GetDataOddIncreaseEvenDecrease(GetHpValue(wl, 0), -1);\r\n // wp = 0.5 * (Math.pow(10, ((lg(array_x[2]) - lg(array_x[0])) * (lg(hp) - lg(array_y[0])) / (lg(array_y[2]) - lg(array_y[0])) + lg(array_x[0]))) + Math.pow(10, ((lg(array_x[2]) - lg(array_x[1])) * (lg(hp) - lg(array_y[1])) / (lg(array_y[2]) - lg(array_y[1])) + lg(array_x[1]))));\r\n //wp = GetDataOddIncreaseEvenDecrease(wp, -1);\r\n }\r\n }\r\n\r\n SumNumber = wl;\r\n if (isNaN(SumNumber)) SumNumber = '/';\r\n return SumNumber;\r\n },\r\n },\r\n {\r\n funName: 'YJLBBZCA',\r\n funDesc: '2倍标准差方法剔除特异值:平均值(YJLBBZCA)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type = 2;\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n }\r\n return avg;\r\n },\r\n },\r\n {\r\n funName: 'YJLBBZCS',\r\n funDesc: '2倍标准差方法剔除特异值:标准差(YJLBBZCS)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type = 2;\r\n //array为所有的左侧和右侧的测定值\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n stand = FormulaUtils.commFun.GetS(_array);\r\n }\r\n return stand;\r\n },\r\n },\r\n {\r\n funName: 'YJKBBZCA',\r\n funDesc: 'k倍标准差方法剔除特异值:平均值(YJKBBZCA)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type;\r\n let len = arr.length;\r\n switch (len) {\r\n case 3:\r\n type = 1.15;\r\n break;\r\n case 4:\r\n type = 1.46;\r\n break;\r\n case 5:\r\n type = 1.67;\r\n break;\r\n case 6:\r\n type = 1.82;\r\n break;\r\n case 7:\r\n type = 1.94;\r\n break;\r\n case 8:\r\n type = 2.03;\r\n break;\r\n case 9:\r\n type = 2.11;\r\n break;\r\n case 10:\r\n type = 2.18;\r\n break;\r\n break;\r\n case 11:\r\n type = 2.23;\r\n break;\r\n break;\r\n case 12:\r\n type = 2.28;\r\n break;\r\n break;\r\n case 13:\r\n type = 2.33;\r\n break;\r\n break;\r\n case 14:\r\n type = 2.37;\r\n break;\r\n }\r\n\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n }\r\n return avg;\r\n },\r\n },\r\n {\r\n funName: 'YJKBBZCS',\r\n funDesc: 'k倍标准差方法剔除特异值:标准差(YJKBBZCS)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retData.allCellVals);\r\n\r\n let arr = retArrVals;\r\n\r\n let type;\r\n let len = arr.length;\r\n switch (len) {\r\n case 3:\r\n type = 1.15;\r\n break;\r\n case 4:\r\n type = 1.46;\r\n break;\r\n case 5:\r\n type = 1.67;\r\n break;\r\n case 6:\r\n type = 1.82;\r\n break;\r\n case 7:\r\n type = 1.94;\r\n break;\r\n case 8:\r\n type = 2.03;\r\n break;\r\n case 9:\r\n type = 2.11;\r\n break;\r\n case 10:\r\n type = 2.18;\r\n break;\r\n break;\r\n case 11:\r\n type = 2.23;\r\n break;\r\n break;\r\n case 12:\r\n type = 2.28;\r\n break;\r\n break;\r\n case 13:\r\n type = 2.33;\r\n break;\r\n break;\r\n case 14:\r\n type = 2.37;\r\n break;\r\n }\r\n\r\n //array为所有的左侧和右侧的测定值\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n let a = array.length; //所有的左侧和右侧的测定值个数\r\n avg = avg * 1;\r\n stand = stand * 1;\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(_array);\r\n stand = FormulaUtils.commFun.GetS(_array);\r\n }\r\n return stand;\r\n },\r\n },\r\n {\r\n funName: 'YJKBBZCC',\r\n funDesc: '被剔除的特异值点数:YJKBBZCC',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '弯沉左侧和右侧的数值范围',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '舍弃值的倍数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于2个,则返回空字符串\r\n if (retData.allCellVals.length < 2) {\r\n return '';\r\n }\r\n\r\n //获取retData.allCellVals中除最后一个值的数组\r\n let retArrValsPcLastVal = [];\r\n for (let index = 0; index < retData.allCellVals.length - 1; index++) {\r\n retArrValsPcLastVal.push(retData.allCellVals[index]);\r\n }\r\n\r\n let retArrVals: Array<number> = FormulaUtils.commFun.convertToInt(retArrValsPcLastVal);\r\n\r\n let arr = retArrVals,\r\n type = retData.allCellVals[retData.allCellVals.length - 1];\r\n\r\n let ds; //输出的个数值\r\n let array = new Array();\r\n for (let i = 0; i < arr.length; i++) {\r\n if (!isNaN(arr[i]) && arr[i] != '/') {\r\n array[i] = arr[i];\r\n }\r\n }\r\n //avg为舍弃前的平均值\r\n let avg = FormulaUtils.commFun.getAverage(array);\r\n //标准差\r\n let stand = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(array), -2);\r\n //得到舍弃的范围\r\n if (type == '' || type == '/') {\r\n //不舍弃\r\n ds = array.length; //所有的左侧和右侧的测定值个数\r\n } else {\r\n //得到舍弃值得范围\r\n let max = avg * 1 + type * 1 * stand * 1;\r\n let min = avg * 1 - type * 1 * stand * 1;\r\n let _array = new Array();\r\n let num = 0;\r\n for (let i = 0; i < array.length; i++) {\r\n if (array[i] > min && array[i] < max) {\r\n _array.push(array[i]); // continue;\r\n }\r\n }\r\n ds = _array.length;\r\n }\r\n return ds;\r\n },\r\n },\r\n {\r\n funName: 'YJHTJD',\r\n funDesc: '回弹角度修正查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '测试方向',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '角度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '实测平均回弹值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于3个,则返回空字符串\r\n if (retData.allCellVals.length < 3) {\r\n return '';\r\n }\r\n if (!FormulaUtils.commFun.isNumber(retData.allCellVals[2])) {\r\n return '';\r\n }\r\n\r\n let csfx = retData.allCellVals[0],\r\n jd = retData.allCellVals[1],\r\n htz = retData.allCellVals[2];\r\n\r\n let jd_value = jd; //角度\r\n let jd_value_po; //角度所在数组位置;\r\n let ns = htz; //实测平均回弹值Rm\r\n let jdxzz; //输出的角度修正值\r\n\r\n function GetRm(key, value) {\r\n //参数为检测角度和实测平均回弹值Rm\r\n let result = 0;\r\n if (value >= 50) {\r\n if (key == 90) {\r\n result = -3.5;\r\n } else if (key == 60) {\r\n result = -3.0;\r\n } else if (key == 45) {\r\n result = -2.5;\r\n } else if (key == 30) {\r\n result = -1.5;\r\n } else if (key == -30) {\r\n result = 1.0;\r\n } else if (key == -45) {\r\n result = 1.5;\r\n } else if (key == -60) {\r\n result = 2.0;\r\n } else if (key == -90) {\r\n result = 2.5;\r\n }\r\n } else if (value <= 20) {\r\n if (key == 90) {\r\n result = -6.0;\r\n } else if (key == 60) {\r\n result = -5.0;\r\n } else if (key == 45) {\r\n result = -4.0;\r\n } else if (key == 30) {\r\n result = -3.0;\r\n } else if (key == -30) {\r\n result = 2.5;\r\n } else if (key == -45) {\r\n result = 3.0;\r\n } else if (key == -60) {\r\n result = 3.5;\r\n } else if (key == -90) {\r\n result = 4.0;\r\n }\r\n }\r\n return result;\r\n }\r\n if (csfx == '非水平方向') {\r\n let arr_jd = new Array('90', '60', '45', '30', '-30', '-45', '-60', '-90');\r\n for (let i = 0; i < arr_jd.length; i++) {\r\n if (jd_value == arr_jd[i]) {\r\n jd_value_po = i;\r\n break;\r\n }\r\n }\r\n let t90 = [\r\n { x: 20, y: -6.0 },\r\n { x: 21, y: -5.9 },\r\n { x: 22, y: -5.8 },\r\n { x: 23, y: -5.7 },\r\n { x: 24, y: -5.6 },\r\n { x: 25, y: -5.5 },\r\n { x: 26, y: -5.4 },\r\n { x: 27, y: -5.3 },\r\n { x: 28, y: -5.2 },\r\n { x: 29, y: -5.1 },\r\n { x: 30, y: -5.0 },\r\n { x: 31, y: -4.9 },\r\n { x: 32, y: -4.8 },\r\n { x: 33, y: -4.7 },\r\n { x: 34, y: -4.6 },\r\n { x: 35, y: -4.5 },\r\n { x: 36, y: -4.4 },\r\n { x: 37, y: -4.3 },\r\n { x: 38, y: -4.2 },\r\n { x: 39, y: -4.1 },\r\n { x: 40, y: -4.0 },\r\n { x: 41, y: -4.0 },\r\n { x: 42, y: -3.9 },\r\n { x: 43, y: -3.9 },\r\n { x: 44, y: -3.8 },\r\n { x: 45, y: -3.8 },\r\n { x: 46, y: -3.7 },\r\n { x: 47, y: -3.7 },\r\n { x: 48, y: -3.6 },\r\n { x: 49, y: -3.6 },\r\n { x: 50, y: -3.5 },\r\n ];\r\n let t60 = [\r\n { x: 20, y: -5.0 },\r\n { x: 21, y: -4.9 },\r\n { x: 22, y: -4.8 },\r\n { x: 23, y: -4.7 },\r\n { x: 24, y: -4.6 },\r\n { x: 25, y: -4.5 },\r\n { x: 26, y: -4.4 },\r\n { x: 27, y: -4.3 },\r\n { x: 28, y: -4.2 },\r\n { x: 29, y: -4.1 },\r\n { x: 30, y: -4.0 },\r\n { x: 31, y: -4.0 },\r\n { x: 32, y: -3.9 },\r\n { x: 33, y: -3.9 },\r\n { x: 34, y: -3.8 },\r\n { x: 35, y: -3.8 },\r\n { x: 36, y: -3.7 },\r\n { x: 37, y: -3.7 },\r\n { x: 38, y: -3.6 },\r\n { x: 39, y: -3.6 },\r\n { x: 40, y: -3.5 },\r\n { x: 41, y: -3.5 },\r\n { x: 42, y: -3.4 },\r\n { x: 43, y: -3.4 },\r\n { x: 44, y: -3.3 },\r\n { x: 45, y: -3.3 },\r\n { x: 46, y: -3.2 },\r\n { x: 47, y: -3.2 },\r\n { x: 48, y: -3.1 },\r\n { x: 49, y: -3.1 },\r\n { x: 50, y: -3.0 },\r\n ];\r\n let t45 = [\r\n { x: 20, y: -4.0 },\r\n { x: 21, y: -4.0 },\r\n { x: 22, y: -3.9 },\r\n { x: 23, y: -3.9 },\r\n { x: 24, y: -3.8 },\r\n { x: 25, y: -3.8 },\r\n { x: 26, y: -3.7 },\r\n { x: 27, y: -3.7 },\r\n { x: 28, y: -3.6 },\r\n { x: 29, y: -3.6 },\r\n { x: 30, y: -3.5 },\r\n { x: 31, y: -3.5 },\r\n { x: 32, y: -3.4 },\r\n { x: 33, y: -3.4 },\r\n { x: 34, y: -3.3 },\r\n { x: 35, y: -3.3 },\r\n { x: 36, y: -3.2 },\r\n { x: 37, y: -3.2 },\r\n { x: 38, y: -3.1 },\r\n { x: 39, y: -3.1 },\r\n { x: 40, y: -3.0 },\r\n { x: 41, y: -3.0 },\r\n { x: 42, y: -2.9 },\r\n { x: 43, y: -2.9 },\r\n { x: 44, y: -2.8 },\r\n { x: 45, y: -2.8 },\r\n { x: 46, y: -2.7 },\r\n { x: 47, y: -2.7 },\r\n { x: 48, y: -2.6 },\r\n { x: 49, y: -2.6 },\r\n { x: 50, y: -2.5 },\r\n ];\r\n let t30 = [\r\n { x: 20, y: -3.0 },\r\n { x: 21, y: -3.0 },\r\n { x: 22, y: -2.9 },\r\n { x: 23, y: -2.9 },\r\n { x: 24, y: -2.8 },\r\n { x: 25, y: -2.8 },\r\n { x: 26, y: -2.7 },\r\n { x: 27, y: -2.7 },\r\n { x: 28, y: -2.6 },\r\n { x: 29, y: -2.6 },\r\n { x: 30, y: -2.5 },\r\n { x: 31, y: -2.5 },\r\n { x: 32, y: -2.4 },\r\n { x: 33, y: -2.4 },\r\n { x: 34, y: -2.3 },\r\n { x: 35, y: -2.3 },\r\n { x: 36, y: -2.2 },\r\n { x: 37, y: -2.2 },\r\n { x: 38, y: -2.1 },\r\n { x: 39, y: -2.1 },\r\n { x: 40, y: -2.0 },\r\n { x: 41, y: -2.0 },\r\n { x: 42, y: -1.9 },\r\n { x: 43, y: -1.9 },\r\n { x: 44, y: -1.8 },\r\n { x: 45, y: -1.8 },\r\n { x: 46, y: -1.7 },\r\n { x: 47, y: -1.7 },\r\n { x: 48, y: -1.6 },\r\n { x: 49, y: -1.6 },\r\n { x: 50, y: -1.5 },\r\n ];\r\n let t_30 = [\r\n { x: 20, y: 2.5 },\r\n { x: 21, y: 2.5 },\r\n { x: 22, y: 2.4 },\r\n { x: 23, y: 2.4 },\r\n { x: 24, y: 2.3 },\r\n { x: 25, y: 2.3 },\r\n { x: 26, y: 2.2 },\r\n { x: 27, y: 2.2 },\r\n { x: 28, y: 2.1 },\r\n { x: 29, y: 2.1 },\r\n { x: 30, y: 2.0 },\r\n { x: 31, y: 2.0 },\r\n { x: 32, y: 1.9 },\r\n { x: 33, y: 1.9 },\r\n { x: 34, y: 1.8 },\r\n { x: 35, y: 1.8 },\r\n { x: 36, y: 1.7 },\r\n { x: 37, y: 1.7 },\r\n { x: 38, y: 1.6 },\r\n { x: 39, y: 1.6 },\r\n { x: 40, y: 1.5 },\r\n { x: 41, y: 1.5 },\r\n { x: 42, y: 1.4 },\r\n { x: 43, y: 1.4 },\r\n { x: 44, y: 1.3 },\r\n { x: 45, y: 1.3 },\r\n { x: 46, y: 1.2 },\r\n { x: 47, y: 1.2 },\r\n { x: 48, y: 1.1 },\r\n { x: 49, y: 1.1 },\r\n { x: 50, y: 1.0 },\r\n ];\r\n let t_45 = [\r\n { x: 20, y: 3.0 },\r\n { x: 21, y: 3.0 },\r\n { x: 22, y: 2.9 },\r\n { x: 23, y: 2.9 },\r\n { x: 24, y: 2.8 },\r\n { x: 25, y: 2.8 },\r\n { x: 26, y: 2.7 },\r\n { x: 27, y: 2.7 },\r\n { x: 28, y: 2.6 },\r\n { x: 29, y: 2.6 },\r\n { x: 30, y: 2.5 },\r\n { x: 31, y: 2.5 },\r\n { x: 32, y: 2.4 },\r\n { x: 33, y: 2.4 },\r\n { x: 34, y: 2.3 },\r\n { x: 35, y: 2.3 },\r\n { x: 36, y: 2.2 },\r\n { x: 37, y: 2.2 },\r\n { x: 38, y: 2.1 },\r\n { x: 39, y: 2.1 },\r\n { x: 40, y: 2.0 },\r\n { x: 41, y: 2.0 },\r\n { x: 42, y: 1.9 },\r\n { x: 43, y: 1.9 },\r\n { x: 44, y: 1.8 },\r\n { x: 45, y: 1.8 },\r\n { x: 46, y: 1.7 },\r\n { x: 47, y: 1.7 },\r\n { x: 48, y: 1.6 },\r\n { x: 49, y: 1.6 },\r\n { x: 50, y: 1.5 },\r\n ];\r\n let t_60 = [\r\n { x: 20, y: 3.5 },\r\n { x: 21, y: 3.5 },\r\n { x: 22, y: 3.4 },\r\n { x: 23, y: 3.4 },\r\n { x: 24, y: 3.3 },\r\n { x: 25, y: 3.3 },\r\n { x: 26, y: 3.2 },\r\n { x: 27, y: 3.2 },\r\n { x: 28, y: 3.1 },\r\n { x: 29, y: 3.1 },\r\n { x: 30, y: 3.0 },\r\n { x: 31, y: 3.0 },\r\n { x: 32, y: 2.9 },\r\n { x: 33, y: 2.9 },\r\n { x: 34, y: 2.8 },\r\n { x: 35, y: 2.8 },\r\n { x: 36, y: 2.7 },\r\n { x: 37, y: 2.7 },\r\n { x: 38, y: 2.6 },\r\n { x: 39, y: 2.6 },\r\n { x: 40, y: 2.5 },\r\n { x: 41, y: 2.5 },\r\n { x: 42, y: 2.4 },\r\n { x: 43, y: 2.4 },\r\n { x: 44, y: 2.3 },\r\n { x: 45, y: 2.3 },\r\n { x: 46, y: 2.2 },\r\n { x: 47, y: 2.2 },\r\n { x: 48, y: 2.1 },\r\n { x: 49, y: 2.1 },\r\n { x: 50, y: 2.0 },\r\n ];\r\n let t_90 = [\r\n { x: 20, y: 4.0 },\r\n { x: 21, y: 4.0 },\r\n { x: 22, y: 3.9 },\r\n { x: 23, y: 3.9 },\r\n { x: 24, y: 3.8 },\r\n { x: 25, y: 3.8 },\r\n { x: 26, y: 3.7 },\r\n { x: 27, y: 3.7 },\r\n { x: 28, y: 3.6 },\r\n { x: 29, y: 3.6 },\r\n { x: 30, y: 3.5 },\r\n { x: 31, y: 3.5 },\r\n { x: 32, y: 3.4 },\r\n { x: 33, y: 3.4 },\r\n { x: 34, y: 3.3 },\r\n { x: 35, y: 3.3 },\r\n { x: 36, y: 3.2 },\r\n { x: 37, y: 3.2 },\r\n { x: 38, y: 3.1 },\r\n { x: 39, y: 3.1 },\r\n { x: 40, y: 3.0 },\r\n { x: 41, y: 3.0 },\r\n { x: 42, y: 2.9 },\r\n { x: 43, y: 2.9 },\r\n { x: 44, y: 2.8 },\r\n { x: 45, y: 2.8 },\r\n { x: 46, y: 2.7 },\r\n { x: 47, y: 2.7 },\r\n { x: 48, y: 2.6 },\r\n { x: 49, y: 2.6 },\r\n { x: 50, y: 2.5 },\r\n ];\r\n let arr_t = new Array();\r\n\r\n if ((jd_value_po != '' || jd_value_po == 0) && jd_value != '0') {\r\n if (jd_value == '90') {\r\n arr_t = t90;\r\n } else if (jd_value == '60') {\r\n arr_t = t60;\r\n } else if (jd_value == '45') {\r\n arr_t = t45;\r\n } else if (jd_value == '30') {\r\n arr_t = t30;\r\n } else if (jd_value == '-30') {\r\n arr_t = t_30;\r\n } else if (jd_value == '-45') {\r\n arr_t = t_45;\r\n } else if (jd_value == '-60') {\r\n arr_t = t_60;\r\n } else if (jd_value == '-90') {\r\n arr_t = t_90;\r\n }\r\n\r\n let m = -1;\r\n\r\n for (let i = 0; i < arr_t.length; i++) {\r\n if (arr_t[0].x * 1 > ns) {\r\n m = 1;\r\n break;\r\n } else if (arr_t[i].x * 1 > ns) {\r\n m = i;\r\n break;\r\n } else if (arr_t[arr_t.length - 1].x * 1 < ns) {\r\n m = arr_t.length - 1;\r\n break;\r\n } else if (ns == arr_t[i].x) {\r\n jdxzz = arr_t[i].y;\r\n break;\r\n }\r\n }\r\n\r\n if (m != -1) {\r\n let x1 = arr_t[m - 1].x;\r\n let y1 = arr_t[m - 1].y;\r\n let x2 = arr_t[m].x;\r\n let y2 = arr_t[m].y;\r\n\r\n jdxzz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.InterpolationMethod_y(x1, x2, y1, y2, ns), -1);\r\n }\r\n if (ns >= 50 || ns <= 20) {\r\n //\r\n\r\n jdxzz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetRm(jd_value, ns), -1);\r\n }\r\n } else {\r\n //固定的,但偏差不会太大\r\n let ns_1 = 40; //相邻的NS\r\n let ns_2 = 50;\r\n let v1, v2;\r\n //取30度\r\n if (jd_value * 1 > 0) {\r\n v1 = FormulaUtils.commFun.InterpolationMethod_y(0, 30, 0, -2.0, jd_value);\r\n v2 = FormulaUtils.commFun.InterpolationMethod_y(0, 30, 0, -1.5, jd_value);\r\n jdxzz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.InterpolationMethod_y(ns_1, ns_2, v1, v2, ns), -1);\r\n } else {\r\n jdxzz = '0.0';\r\n }\r\n if (ns >= 50 || ns <= 20) {\r\n jdxzz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(GetRm(jd_value, ns), -1);\r\n }\r\n }\r\n } else {\r\n jdxzz = '/';\r\n }\r\n\r\n return jdxzz;\r\n },\r\n },\r\n {\r\n funName: 'YJHTJZM',\r\n funDesc: '回弹浇筑面修正查表',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '浇筑面',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '实测平均回弹值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于2个,则返回空字符串\r\n if (retData.allCellVals.length < 2) {\r\n return '';\r\n }\r\n if (!FormulaUtils.commFun.isNumber(retData.allCellVals[1])) {\r\n return '';\r\n }\r\n\r\n let jzm = retData.allCellVals[0],\r\n htz = Number(retData.allCellVals[1]);\r\n\r\n let jzmxzz; //输出的浇筑面修正值\r\n if (jzm == '表面') {\r\n let arr = new Array();\r\n arr = [\r\n '20-2.5',\r\n '21-2.4',\r\n '22-2.3',\r\n '23-2.2',\r\n '24-2.1',\r\n '25-2.0',\r\n '26-1.9',\r\n '27-1.8',\r\n '28-1.7',\r\n '29-1.6',\r\n '30-1.5',\r\n '31-1.4',\r\n '32-1.3',\r\n '33-1.2',\r\n '34-1.1',\r\n '35-1.0',\r\n '36-0.9',\r\n '37-0.8',\r\n '38-0.7',\r\n '39-0.6',\r\n '40-0.5',\r\n '41-0.4',\r\n '42-0.3',\r\n '43-0.2',\r\n '44-0.1',\r\n '45-0',\r\n '46-0',\r\n '47-0',\r\n '48-0',\r\n '49-0',\r\n '50-0',\r\n ];\r\n for (let i = 1; i < 11; i++) {\r\n if (htz * 1 > 50) {\r\n jzmxzz = '0';\r\n } else if (htz * 1 < 20) {\r\n jzmxzz = '2.5';\r\n } else {\r\n htz = Math.round(htz);\r\n for (let j = 0; j < arr.length; j++) {\r\n let a1 = arr[j].split('-');\r\n\r\n if (htz == a1[0]) {\r\n jzmxzz = a1[1];\r\n }\r\n }\r\n }\r\n }\r\n } else if (jzm == '底面') {\r\n let arr = new Array();\r\n arr = [\r\n '20-3.0',\r\n '21-2.9',\r\n '22-2.8',\r\n '23-2.7',\r\n '24-2.6',\r\n '25-2.5',\r\n '26-2.4',\r\n '27-2.3',\r\n '28-2.2',\r\n '29-2.1',\r\n '30-2.0',\r\n '31-1.9',\r\n '32-1.8',\r\n '33-1.7',\r\n '34-1.6',\r\n '35-1.5',\r\n '36-1.4',\r\n '37-1.3',\r\n '38-1.2',\r\n '39-1.1',\r\n '40-1.0',\r\n '41-0.9',\r\n '42-0.8',\r\n '43-0.7',\r\n '44-0.6',\r\n '45-0.5',\r\n '46-0.4',\r\n '47-0.3',\r\n '48-0.2',\r\n '49-0.1',\r\n '50-0',\r\n ];\r\n for (let i = 1; i < 11; i++) {\r\n if (htz * 1 > 50) {\r\n jzmxzz = '0';\r\n } else if (htz * 1 < 20) {\r\n jzmxzz = '3.0';\r\n } else {\r\n htz = Math.round(htz);\r\n for (let j = 0; j < arr.length; j++) {\r\n let a1 = arr[j].split('-');\r\n\r\n if (htz == a1[0]) {\r\n jzmxzz = a1[1] * -1;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return jzmxzz;\r\n },\r\n },\r\n {\r\n funName: 'YJTKLZC',\r\n funDesc: '土的d60、d30、d10 计算)',\r\n funDefaultVal: null,\r\n // isContainNullUndefinedVal: true,\r\n funParams: [\r\n {\r\n name: '粗筛孔径60',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径40',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径20',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径10',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.25',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.075',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径筛底',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛60小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛40小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛20小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛10小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛5小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛2小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛2占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛1占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.5占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.25占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.075占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛筛底占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'd的数据值,如:60、30、10(其中之一)',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于25个,则返回空字符串\r\n if (retData.allCellVals.length < 25) {\r\n return '';\r\n }\r\n // if (!FormulaUtils.commFun.isNumber(retData.allCellVals[1])) {\r\n // \treturn '';\r\n // }\r\n\r\n let p60 = retData.allCellVals[0],\r\n p40 = retData.allCellVals[1],\r\n p20 = retData.allCellVals[2],\r\n p10 = retData.allCellVals[3],\r\n p5 = retData.allCellVals[4],\r\n p2 = retData.allCellVals[5],\r\n px2 = retData.allCellVals[6],\r\n px1 = retData.allCellVals[7],\r\n px05 = retData.allCellVals[8],\r\n px025 = retData.allCellVals[9],\r\n px0075 = retData.allCellVals[10],\r\n pd = retData.allCellVals[11],\r\n bf1 = retData.allCellVals[12],\r\n bf2 = retData.allCellVals[13],\r\n bf3 = retData.allCellVals[14],\r\n bf4 = retData.allCellVals[15],\r\n bf5 = retData.allCellVals[16],\r\n bf6 = retData.allCellVals[17],\r\n bf7 = retData.allCellVals[18],\r\n bf8 = retData.allCellVals[19],\r\n bf9 = retData.allCellVals[20],\r\n bf10 = retData.allCellVals[21],\r\n bf11 = retData.allCellVals[22],\r\n bf12 = retData.allCellVals[23],\r\n dn = retData.allCellVals[24];\r\n\r\n let arr1 = [p60, p40, p20, p10, p5, p2, px2, px1, px05, px025, px0075, pd];\r\n let arr2 = [bf1, bf2, bf3, bf4, bf5, bf6, bf7, bf8, bf9, bf10, bf11, bf12];\r\n let dnn; //最后输出的值\r\n\r\n let array_y = new Array();\r\n let array_x = new Array();\r\n let len = 0;\r\n let tmp;\r\n let start = 0;\r\n\r\n for (let i = 0; i <= 11; i++) {\r\n if (i < 6) {\r\n tmp = arr2[i];\r\n } else {\r\n tmp = arr2[i];\r\n }\r\n\r\n if (tmp == '/' || tmp == '' || isNaN(tmp)) {\r\n continue;\r\n }\r\n\r\n if (tmp == 0 || tmp * 1 > 0) {\r\n if (start == 0) {\r\n start = i - 1;\r\n }\r\n array_y[len] = tmp;\r\n\r\n if (arr1[i].indexOf('底') != -1) {\r\n array_x[len] = '0.001';\r\n } else {\r\n array_x[len] = arr1[i];\r\n }\r\n len++;\r\n }\r\n }\r\n\r\n if (len < 3) {\r\n return;\r\n }\r\n\r\n let _index = 0;\r\n\r\n for (i = 0; i < array_y.length; i++) {\r\n if (array_y[i] >= dn) {\r\n _index++;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (_index == 0) {\r\n return;\r\n }\r\n\r\n function ncf(getD) {\r\n let zhi = getD.y1 * 1 - ((getD.x1 * 1 - getD.x * 1) * (getD.y1 * 1 - getD.y2 * 1)) / (getD.x1 * 1 - getD.x2 * 1);\r\n return zhi;\r\n }\r\n\r\n function GetD() {\r\n this.x1 = 1;\r\n this.x2 = 1;\r\n this.y1 = 1;\r\n this.y2 = 1;\r\n this.k = 1;\r\n this.b = 0;\r\n this.x = 0;\r\n\r\n this.$get = function () {\r\n if (this.x1 - this.x2 == 0) {\r\n this.k = 1;\r\n this.b = 0;\r\n }\r\n\r\n this.k = (this.y1 - this.y2) / (this.x1 - this.x2);\r\n this.b = this.y1 - this.x1 * this.k;\r\n let result = this.k * this.x + this.b;\r\n return result;\r\n };\r\n }\r\n\r\n let getddn = new GetD();\r\n\r\n getddn.x1 = array_y[_index - 1];\r\n getddn.x2 = array_y[_index];\r\n getddn.y1 = array_x[_index - 1];\r\n getddn.y2 = array_x[_index];\r\n getddn.x = dn;\r\n\r\n dnn = ncf(getddn);\r\n\r\n dnn = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(dnn, -1);\r\n\r\n return dnn;\r\n },\r\n },\r\n {\r\n funName: 'YJJGX',\r\n funDesc: '集料坚固性公式',\r\n funDefaultVal: null,\r\n isAcceptArea: true,\r\n funParams: [\r\n {\r\n name: '质量百分率数据区域',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验前烘干质量数据区域',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '试验后烘干质量数据区域',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '质量损失百分率数据区域',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '序号(从1开始)',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于5个,则返回空字符串\r\n if (retData.allCellValsEw.length < 5) {\r\n return '';\r\n }\r\n\r\n let zlbfl = retData.allCellValsEw[0],\r\n syqhgzl = retData.allCellValsEw[1],\r\n syhhgzl = retData.allCellValsEw[2],\r\n zlss = retData.allCellValsEw[3],\r\n index = Number(retData.allCellValsEw[4]) - 1;\r\n\r\n // let zlssLs = [];\r\n // zlss.forEach((element) => {\r\n // \tif (element._error != null && element._error != undefined) {\r\n // \t\tzlssLs.push('/');\r\n // \t} else {\r\n // \t\tzlssLs.push(element);\r\n // \t}\r\n // });\r\n // zlss = zlssLs;\r\n\r\n // console.log(retData);\r\n // console.log(zlss);\r\n\r\n let zlssbfl = '';\r\n for (let i = 0; i < syqhgzl.length; i++) {\r\n if (parseFloat(zlbfl[index]) < 5) {\r\n //小于5时\r\n let Uindex = index - 1; //当前数据的上一个下标\r\n let UValue = 0;\r\n let Bindex = index + 1; //当前数据的下一个下标\r\n let BValue = 0;\r\n while (Uindex >= 0 && parseFloat(zlbfl[Uindex]) < 5) {\r\n //是否满足小于5\r\n Uindex--;\r\n }\r\n while (Bindex <= zlbfl.length && parseFloat(zlbfl[Bindex]) < 5) {\r\n Bindex++;\r\n }\r\n if (Uindex >= 0) {\r\n //取到合适的值\r\n UValue = parseFloat(zlss[Uindex]);\r\n }\r\n if (Bindex < zlbfl.length) {\r\n //取到合适的值(不能等于),>=时没有合适的值\r\n BValue = parseFloat(zlss[Bindex]);\r\n }\r\n if (UValue && BValue) {\r\n zlssbfl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease((UValue + BValue) / 2, -1);\r\n break;\r\n }\r\n if (UValue) {\r\n zlssbfl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(UValue, -1);\r\n break;\r\n }\r\n if (BValue) {\r\n zlssbfl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(BValue, -1);\r\n break;\r\n }\r\n } else {\r\n if (isNaN(syqhgzl[index]) || isNaN(syhhgzl[index])) {\r\n zlssbfl = '/';\r\n } else {\r\n zlssbfl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n ((parseFloat(syqhgzl[index]) - parseFloat(syhhgzl[index])) / parseFloat(syqhgzl[index])) * 100,\r\n -1\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return zlssbfl;\r\n },\r\n },\r\n {\r\n funName: 'YJNC',\r\n funDesc: '内插值',\r\n funDefaultVal: null,\r\n isAcceptArea: true,\r\n funParams: [\r\n {\r\n name: '数据区域Xn',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '数据区域Yn',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'd的数据值,如:60、30、10(其中之一)可以为固定值 也可以为填入值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于3个,则返回空字符串\r\n if (retData.allCellValsEw.length < 3) {\r\n return '';\r\n }\r\n\r\n let xData = FormulaUtils.commFun.convertToInt(retData.allCellValsEw[0].filter((item) => FormulaUtils.commFun.isNumber(item))),\r\n yData = FormulaUtils.commFun.convertToInt(retData.allCellValsEw[1].filter((item) => FormulaUtils.commFun.isNumber(item))),\r\n x = retData.allCellValsEw[2];\r\n if (Array.isArray(x) && x.length > 0) {\r\n x = Number(x[0]);\r\n } else {\r\n x = Number(x);\r\n }\r\n\r\n // console.log(111, retData);\r\n // console.log(222, xData);\r\n // console.log(333, yData);\r\n // console.log(444, x);\r\n\r\n let arr1 = xData,\r\n arr2 = yData,\r\n dn = x;\r\n\r\n var dnn; //最后输出的值\r\n\r\n var array_y = new Array();\r\n var array_x = new Array();\r\n var len = 0;\r\n var tmp;\r\n var start = 0;\r\n dn = dn * 1;\r\n for (var i = 0; i <= arr2.length; i++) {\r\n tmp = arr2[i];\r\n\r\n if (isNaN(tmp)) {\r\n continue;\r\n }\r\n\r\n if (tmp == 0 || tmp * 1 > 0) {\r\n if (start == 0) {\r\n start = i - 1;\r\n }\r\n array_x[len] = tmp;\r\n array_y[len] = arr1[i];\r\n len++;\r\n }\r\n }\r\n\r\n if (len < 3) {\r\n return '/';\r\n }\r\n\r\n var _index = 0;\r\n if (array_y[0] > dn) {\r\n for (i = 0; i < array_y.length; i++) {\r\n if (array_y[i] >= dn) {\r\n _index++;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (_index == 0) {\r\n return '/';\r\n }\r\n } else if (array_y[0] < dn) {\r\n for (i = 0; i < array_y.length; i++) {\r\n if (array_y[i] <= dn) {\r\n _index++;\r\n } else {\r\n break;\r\n }\r\n }\r\n if (_index == 0) {\r\n return '/';\r\n }\r\n }\r\n\r\n function GetD() {\r\n this.x1 = 1;\r\n this.x2 = 1;\r\n this.y1 = 1;\r\n this.y2 = 1;\r\n this.k = 1;\r\n this.b = 0;\r\n this.x = 0;\r\n\r\n this.$get = function () {\r\n if (this.x1 - this.x2 == 0) {\r\n this.k = 1;\r\n this.b = 0;\r\n }\r\n\r\n this.k = (this.y1 - this.y2) / (this.x1 - this.x2);\r\n this.b = this.y1 - this.x1 * this.k;\r\n var result = this.k * this.x + this.b;\r\n return result;\r\n };\r\n }\r\n function ncf(getD) {\r\n var zhi = getD.y1 * 1 - ((getD.x1 * 1 - getD.x * 1) * (getD.y1 * 1 - getD.y2 * 1)) / (getD.x1 * 1 - getD.x2 * 1);\r\n return zhi;\r\n }\r\n\r\n var getddn = new GetD();\r\n\r\n getddn.x1 = array_y[_index - 1];\r\n getddn.x2 = array_y[_index];\r\n getddn.y1 = array_x[_index - 1];\r\n getddn.y2 = array_x[_index];\r\n getddn.x = dn;\r\n\r\n if (getddn.y1 == dn) {\r\n dnn = getddn.x1;\r\n } else {\r\n dnn = ncf(getddn);\r\n }\r\n if (isNaN(dnn)) {\r\n return '/';\r\n }\r\n\r\n return dnn;\r\n },\r\n },\r\n {\r\n funName: 'YJMDJWDJZ',\r\n funDesc: '土密度计温度校正查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '密度计种类',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '悬液温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于2个、为空字符串或为/时返回/\r\n if (\r\n retData.allCellVals.length < 2 ||\r\n (typeof retData.allCellVals[1] == 'string' && (retData.allCellVals[1].trim().length == 0 || retData.allCellVals[1] == '/'))\r\n ) {\r\n return '/';\r\n }\r\n\r\n let mdjzl = retData.allCellVals[0],\r\n xywd = retData.allCellVals[1];\r\n\r\n let xzz; //最后输出的修正值\r\n let wdAll = new Array();\r\n wdAll[0] = ['10.0', '-2.0', '-0.0012'];\r\n wdAll[1] = ['10.5', '-1.9', '-0.0012'];\r\n wdAll[2] = ['11.0', '-1.9', '-0.0012'];\r\n wdAll[3] = ['11.5', '-1.8', '-0.0011'];\r\n wdAll[4] = ['12.0', '-1.8', '-0.0011'];\r\n wdAll[5] = ['12.5', '-1.7', '-0.0010'];\r\n wdAll[6] = ['13.0', '-1.6', '-0.0010'];\r\n wdAll[7] = ['13.5', '-1.5', '-0.0009'];\r\n wdAll[8] = ['14.0', '-1.4', '-0.0009'];\r\n wdAll[9] = ['14.5', '-1.3', '-0.0008'];\r\n wdAll[10] = ['15.0', '-1.2', '-0.0008'];\r\n wdAll[11] = ['15.5', '-1.1', '-0.0007'];\r\n wdAll[12] = ['16.0', '-1.0', '-0.0006'];\r\n wdAll[13] = ['16.5', '-0.9', '-0.0006'];\r\n wdAll[14] = ['17.0', '-0.8', '-0.0005'];\r\n wdAll[15] = ['17.5', '-0.7', '-0.0004'];\r\n wdAll[16] = ['18.0', '-0.5', '-0.0003'];\r\n wdAll[17] = ['18.5', '-0.4', '-0.0003'];\r\n wdAll[18] = ['19.0', '-0.3', '-0.0002'];\r\n wdAll[19] = ['19.5', '-0.1', '-0.0001'];\r\n wdAll[20] = ['20.0', '-0.0', '-0.0000'];\r\n wdAll[21] = ['20.2', '0.0', '+0.0000'];\r\n wdAll[22] = ['20.5', '+0.1', '+0.0001'];\r\n wdAll[23] = ['21.0', '+0.3', '+0.0002'];\r\n wdAll[24] = ['21.5', '+0.5', '+0.0003'];\r\n wdAll[25] = ['22.0', '+0.6', '+0.0004'];\r\n wdAll[26] = ['22.5', '+0.8', '+0.0005'];\r\n wdAll[27] = ['23.0', '+0.9', '+0.0006'];\r\n wdAll[28] = ['23.5', '+1.1', '+0.0007'];\r\n wdAll[29] = ['24.0', '+1.3', '+0.0008'];\r\n wdAll[30] = ['24.5', '+1.5', '+0.0009'];\r\n wdAll[31] = ['25.0', '+1.7', '+0.0010'];\r\n wdAll[32] = ['25.5', '+1.7', '+0.0011'];\r\n wdAll[33] = ['26.0', '+2.1', '+0.0013'];\r\n wdAll[34] = ['26.5', '+2.2', '+0.0014'];\r\n wdAll[35] = ['27.0', '+2.5', '+0.0015'];\r\n wdAll[36] = ['27.5', '+2.6', '+0.0016'];\r\n wdAll[37] = ['28.0', '+2.9', '+0.0018'];\r\n wdAll[38] = ['28.5', '+3.1', '+0.0019'];\r\n wdAll[39] = ['29.0', '+3.3', '+0.0021'];\r\n wdAll[40] = ['29.5', '+3.5', '+0.0022'];\r\n wdAll[41] = ['30.0', '+3.7', '+0.0023'];\r\n\r\n if (xywd != '' && xywd != '/' && mdjzl == '甲种') {\r\n for (let a = 0; a < wdAll.length; a++) {\r\n if (wdAll[a][0] * 1 == xywd) {\r\n xzz = wdAll[a][1];\r\n return xzz;\r\n }\r\n }\r\n if (xywd.length > 2) {\r\n //内插法\r\n let wd = xywd.substring(0, xywd.indexOf('.'));\r\n\r\n let j = 0;\r\n for (let i = 0; i < wdAll.length; i++) {\r\n if (wd == wdAll[i][0].substring(0, xywd.indexOf('.'))) {\r\n j = i;\r\n }\r\n }\r\n if (j == wdAll.length - 1) {\r\n let arr1 = wdAll[j];\r\n let arr2 = wdAll[j - 1];\r\n if (arr1[1].indexOf('-') != -1) {\r\n arr1[1] = arr1[1].replace('-', '');\r\n } else if (arr1[1].indexOf('+') != -1) {\r\n arr1[1] = arr1[1].replace('+', '');\r\n }\r\n if (arr2[1].indexOf('-') != -1) {\r\n arr2[1] = arr2[1].replace('-', '');\r\n } else if (arr2[1].indexOf('+') != -1) {\r\n arr2[1] = arr2[1].replace('+', '');\r\n }\r\n if (xywd <= 20.0) {\r\n xzz =\r\n '-' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], xywd),\r\n -1\r\n );\r\n } else {\r\n xzz =\r\n '+' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], xywd),\r\n -1\r\n );\r\n }\r\n } else {\r\n let arr1 = wdAll[j];\r\n let arr2 = wdAll[j + 1];\r\n if (arr1[1].indexOf('-') != -1) {\r\n arr1[1] = arr1[1].replace('-', '');\r\n } else if (arr1[1].indexOf('+') != -1) {\r\n arr1[1] = arr1[1].replace('+', '');\r\n }\r\n if (arr2[1].indexOf('-') != -1) {\r\n arr2[1] = arr2[1].replace('-', '');\r\n } else if (arr2[1].indexOf('+') != -1) {\r\n arr2[1] = arr2[1].replace('+', '');\r\n }\r\n if (xywd <= 20.0) {\r\n xzz =\r\n '-' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], xywd),\r\n -1\r\n );\r\n } else {\r\n xzz =\r\n '+' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], xywd),\r\n -1\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (xywd != '' && xywd != '/' && mdjzl == '乙种') {\r\n for (let a = 0; a < wdAll.length; a++) {\r\n if (wdAll[a][0] * 1 == xywd) {\r\n xzz = wdAll[a][2];\r\n return xzz;\r\n }\r\n }\r\n if (xywd.length > 2) {\r\n //内插法\r\n let wd = xywd.substring(0, xywd.indexOf('.'));\r\n\r\n let j = 0;\r\n for (let i = 0; i < wdAll.length; i++) {\r\n if (wd == wdAll[i][0].substring(0, xywd.indexOf('.'))) {\r\n j = i;\r\n }\r\n }\r\n if (j == wdAll.length - 1) {\r\n let arr1 = wdAll[j];\r\n let arr2 = wdAll[j - 1];\r\n if (arr1[2].indexOf('-') != -1) {\r\n arr1[2] = arr1[2].replace('-', '');\r\n } else if (arr1[2].indexOf('+') != -1) {\r\n arr1[2] = arr1[2].replace('+', '');\r\n }\r\n if (arr2[2].indexOf('-') != -1) {\r\n arr2[2] = arr2[2].replace('-', '');\r\n } else if (arr2[2].indexOf('+') != -1) {\r\n arr2[2] = arr2[2].replace('+', '');\r\n }\r\n if (xywd <= 20.0) {\r\n xzz =\r\n '-' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[2], arr2[2], xywd),\r\n -4\r\n );\r\n } else {\r\n xzz =\r\n '+' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[2], arr2[2], xywd),\r\n -4\r\n );\r\n }\r\n } else {\r\n let arr1 = wdAll[j];\r\n let arr2 = wdAll[j + 1];\r\n if (arr1[2].indexOf('-') != -1) {\r\n arr1[2] = arr1[2].replace('-', '');\r\n } else if (arr1[2].indexOf('+') != -1) {\r\n arr1[2] = arr1[2].replace('+', '');\r\n }\r\n if (arr2[2].indexOf('-') != -1) {\r\n arr2[2] = arr2[2].replace('-', '');\r\n } else if (arr2[2].indexOf('+') != -1) {\r\n arr2[2] = arr2[2].replace('+', '');\r\n }\r\n if (xywd <= 20.0) {\r\n xzz =\r\n '-' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[2], arr2[2], xywd),\r\n -4\r\n );\r\n } else {\r\n xzz =\r\n '+' +\r\n FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[2], arr2[2], xywd),\r\n -4\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n return xzz;\r\n },\r\n },\r\n {\r\n funName: 'YJSDLNZXS',\r\n funDesc: '水的动力粘滞系数查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '悬液温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个、为空字符串或为/时返回/\r\n if (\r\n retData.allCellVals.length < 1 ||\r\n (typeof retData.allCellVals[0] == 'string' && (retData.allCellVals[0].trim().length == 0 || retData.allCellVals[0] == '/'))\r\n ) {\r\n return '/';\r\n }\r\n\r\n let xywd = retData.allCellVals[0];\r\n\r\n let dlnd; //最后输出的修正值\r\n let wdAll = new Array();\r\n wdAll[0] = ['10.0', '1.310'];\r\n wdAll[1] = ['10.5', '1.292'];\r\n wdAll[2] = ['11.0', '1.274'];\r\n wdAll[3] = ['11.5', '1.256'];\r\n wdAll[4] = ['12.0', '1.239'];\r\n wdAll[5] = ['12.5', '1.223'];\r\n wdAll[6] = ['13.0', '1.206'];\r\n wdAll[7] = ['13.5', '1.190'];\r\n wdAll[8] = ['14.0', '1.175'];\r\n wdAll[9] = ['14.5', '1.160'];\r\n wdAll[10] = ['15.0', '1.144'];\r\n wdAll[11] = ['15.5', '1.130'];\r\n wdAll[12] = ['16.0', '1.115'];\r\n wdAll[13] = ['16.5', '1.101'];\r\n wdAll[14] = ['17.0', '1.088'];\r\n wdAll[15] = ['17.5', '1.074'];\r\n wdAll[16] = ['18.0', '1.061'];\r\n wdAll[17] = ['18.5', '1.048'];\r\n wdAll[18] = ['19.0', '1.035'];\r\n wdAll[19] = ['19.5', '1.022'];\r\n wdAll[20] = ['20.0', '1.010'];\r\n wdAll[21] = ['20.5', '0.998'];\r\n wdAll[22] = ['21.0', '0.986'];\r\n wdAll[23] = ['21.5', '0.974'];\r\n wdAll[24] = ['22.0', '0.963'];\r\n wdAll[25] = ['22.5', '0.952'];\r\n wdAll[26] = ['23.0', '0.941'];\r\n wdAll[27] = ['23.5', '0.930'];\r\n wdAll[28] = ['24.0', '0.920'];\r\n wdAll[29] = ['24.5', '0.909'];\r\n wdAll[30] = ['25.0', '0.899'];\r\n wdAll[31] = ['25.5', '0.889'];\r\n wdAll[32] = ['26.0', '0.879'];\r\n wdAll[33] = ['26.5', '0.869'];\r\n wdAll[34] = ['27.0', '0.860'];\r\n wdAll[35] = ['27.5', '0.850'];\r\n wdAll[36] = ['28.0', '0.841'];\r\n wdAll[37] = ['28.5', '0.832'];\r\n wdAll[38] = ['29.0', '0.823'];\r\n wdAll[39] = ['29.5', '0.814'];\r\n\r\n for (let i = 1; i <= 11; i++) {\r\n if (xywd != '' && xywd != '/') {\r\n for (let a = 0; a < wdAll.length; a++) {\r\n if (wdAll[a][0] * 1 == xywd) {\r\n dlnd = wdAll[a][1];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return dlnd;\r\n },\r\n },\r\n {\r\n funName: 'YJK1',\r\n funDesc: '混凝土芯样强度K1查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '试件数量',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let sjsl = retData.allCellVals[0];\r\n\r\n let k1; //最后输出的修正值\r\n let sjAll = new Array();\r\n sjAll[0] = ['10', '1.01730'];\r\n sjAll[1] = ['11', '1.04127'];\r\n sjAll[2] = ['12', '1.06247'];\r\n sjAll[3] = ['13', '1.08141'];\r\n sjAll[4] = ['14', '1.09848'];\r\n sjAll[5] = ['15', '1.11394'];\r\n sjAll[6] = ['16', '1.12812'];\r\n sjAll[7] = ['17', '1.14112'];\r\n sjAll[8] = ['18', '1.15311'];\r\n sjAll[9] = ['19', '1.16423'];\r\n sjAll[10] = ['20', '1.17458'];\r\n sjAll[11] = ['21', '1.18425'];\r\n sjAll[12] = ['22', '1.9330'];\r\n sjAll[13] = ['23', '1.20181'];\r\n sjAll[14] = ['24', '1.20982'];\r\n sjAll[15] = ['25', '1.21739'];\r\n sjAll[16] = ['26', '1.22455'];\r\n sjAll[17] = ['27', '1.23135'];\r\n sjAll[18] = ['28', '1.23780'];\r\n sjAll[19] = ['29', '1.24395'];\r\n sjAll[20] = ['30', '1.24981'];\r\n sjAll[21] = ['31', '1.25540'];\r\n sjAll[22] = ['32', '1.26075'];\r\n sjAll[23] = ['33', '1.26588'];\r\n sjAll[24] = ['34', '1.27079'];\r\n sjAll[25] = ['35', '1.27079'];\r\n sjAll[26] = ['36', '1.28004'];\r\n sjAll[27] = ['37', '1.28441'];\r\n sjAll[28] = ['38', '1.28861'];\r\n sjAll[29] = ['39', '1.29266'];\r\n sjAll[30] = ['40', '1.29657'];\r\n sjAll[31] = ['41', '1.30035'];\r\n sjAll[32] = ['42', '1.30399'];\r\n sjAll[33] = ['43', '1.30752'];\r\n sjAll[34] = ['44', '1.31094'];\r\n sjAll[35] = ['45', '1.31425'];\r\n sjAll[36] = ['46', '1.31746'];\r\n sjAll[37] = ['47', '1.32058'];\r\n sjAll[38] = ['48', '1.32360'];\r\n sjAll[39] = ['49', '1.32653'];\r\n sjAll[40] = ['50', '1.32939'];\r\n sjAll[41] = ['60', '1.35412'];\r\n sjAll[42] = ['70', '1.37364'];\r\n sjAll[43] = ['80', '1.38959'];\r\n sjAll[44] = ['90', '1.40294'];\r\n sjAll[45] = ['100', '1.41433'];\r\n sjAll[46] = ['110', '1.42421'];\r\n sjAll[47] = ['120', '1.43289'];\r\n sjAll[48] = ['130', '1.44060'];\r\n sjAll[49] = ['140', '1.44750'];\r\n sjAll[50] = ['150', '1.45372'];\r\n sjAll[51] = ['160', '1.45938'];\r\n sjAll[52] = ['170', '1.46456'];\r\n sjAll[53] = ['180', '1.46931'];\r\n sjAll[54] = ['190', '1.47370'];\r\n sjAll[55] = ['200', '1.47777'];\r\n sjAll[56] = ['250', '1.49443'];\r\n sjAll[57] = ['300', '1.50687'];\r\n sjAll[58] = ['400', '1.52453'];\r\n sjAll[59] = ['500', '1.53671'];\r\n\r\n if (sjsl != '' && sjsl != '/') {\r\n for (let a = 0; a < sjAll.length; a++) {\r\n if (sjAll[a][0] * 1 == sjsl) {\r\n k1 = sjAll[a][1];\r\n }\r\n }\r\n }\r\n\r\n return k1;\r\n },\r\n },\r\n {\r\n funName: 'YJK2',\r\n funDesc: '混凝土芯样强度K2查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '试件数量',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '直径',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let sjsl = retData.allCellVals[0],\r\n zj = retData.allCellVals[1];\r\n\r\n let k2; //最后输出的修正值\r\n let sjAll = new Array();\r\n sjAll[0] = ['10', '2.91096', '2.56837'];\r\n sjAll[1] = ['11', '2.81499', '2.50262'];\r\n sjAll[2] = ['12', '2.73634', '2.44825'];\r\n sjAll[3] = ['13', '2.67050', '2.40240'];\r\n sjAll[4] = ['14', '2.61443', '2.36311'];\r\n sjAll[5] = ['15', '2.56600', '2.32898'];\r\n sjAll[6] = ['16', '2.52366', '2.29900'];\r\n sjAll[7] = ['17', '2.48626', '2.27240'];\r\n sjAll[8] = ['18', '2.45295', '2.24862'];\r\n sjAll[9] = ['19', '2.42304', '2.22720'];\r\n sjAll[10] = ['20', '2.39600', '2.20778'];\r\n sjAll[11] = ['21', '2.37142', '2.19007'];\r\n sjAll[12] = ['22', '2.34896', '2.17385'];\r\n sjAll[13] = ['23', '2.32832', '2.15891'];\r\n sjAll[14] = ['24', '2.30929', '2.14510'];\r\n sjAll[15] = ['25', '2.29167', '2.13229'];\r\n sjAll[16] = ['26', '2.27530', '2.12037'];\r\n sjAll[17] = ['27', '2.26005', '2.10924'];\r\n sjAll[18] = ['28', '2.24578', '2.09881'];\r\n sjAll[19] = ['29', '2.23241', '2.08903'];\r\n sjAll[20] = ['30', '2.21984', '2.07982'];\r\n sjAll[21] = ['31', '2.20800', '2.07113'];\r\n sjAll[22] = ['32', '2.19682', '2.06292'];\r\n sjAll[23] = ['33', '2.18625', '2.05514'];\r\n sjAll[24] = ['34', '2.17623', '2.04776'];\r\n sjAll[25] = ['35', '2.16672', '2.04075'];\r\n sjAll[26] = ['36', '2.15768', '2.03407'];\r\n sjAll[27] = ['37', '2.14906', '2.02771'];\r\n sjAll[28] = ['38', '2.14085', '2.02164'];\r\n sjAll[29] = ['39', '2.13300', '2.01583'];\r\n sjAll[30] = ['40', '2.12549', '2.01027'];\r\n sjAll[31] = ['41', '2.11831', '2.00494'];\r\n sjAll[32] = ['42', '2.11142', '1.99983'];\r\n sjAll[33] = ['43', '2.10481', '1.99493'];\r\n sjAll[34] = ['44', '2.09846', '1.99021'];\r\n sjAll[35] = ['45', '2.09235', '1.98567'];\r\n sjAll[36] = ['46', '2.08648', '1.98130'];\r\n sjAll[37] = ['47', '2.08081', '1.97708'];\r\n sjAll[38] = ['48', '2.07535', '1.97302'];\r\n sjAll[39] = ['49', '2.07008', '1.96909'];\r\n sjAll[40] = ['50', '2.06499', '1.96529'];\r\n sjAll[41] = ['60', '2.02216', '1.93327'];\r\n sjAll[42] = ['70', '1.98987', '1.90903'];\r\n sjAll[43] = ['80', '1.96444', '1.87428'];\r\n sjAll[44] = ['90', '1.94376', '1.87428'];\r\n sjAll[45] = ['100', '1.92654', '1.86125'];\r\n sjAll[46] = ['110', '1.91191', '1.85017'];\r\n sjAll[47] = ['120', '1.89929', '1.84059'];\r\n sjAll[48] = ['130', '1.88827', '1.83222'];\r\n sjAll[49] = ['140', '1.87852', '1.82481'];\r\n sjAll[50] = ['150', '1.86984', '1.81820'];\r\n sjAll[51] = ['160', '1.86203', '1.81225'];\r\n sjAll[52] = ['170', '1.85497', '1.80686'];\r\n sjAll[53] = ['180', '1.84854', '1.80196'];\r\n sjAll[54] = ['190', '1.84265', '1.79746'];\r\n sjAll[55] = ['200', '1.83724', '1.79332'];\r\n sjAll[56] = ['250', '1.81547', '1.77667'];\r\n sjAll[57] = ['300', '1.79964', '1.76454'];\r\n sjAll[58] = ['400', '1.77776', '1.74773'];\r\n sjAll[59] = ['500', '1.76305', '1.73641'];\r\n\r\n if (zj == '70') {\r\n if (sjsl != '' && sjsl != '/') {\r\n for (let a = 0; a < sjAll.length; a++) {\r\n if (sjAll[a][0] * 1 == sjsl) {\r\n k2 = sjAll[a][1];\r\n }\r\n }\r\n }\r\n } else if (zj == '100') {\r\n if (sjsl != '' && sjsl != '/') {\r\n for (let a = 0; a < sjAll.length; a++) {\r\n if (sjAll[a][0] * 1 == sjsl) {\r\n k2 = sjAll[a][2];\r\n }\r\n }\r\n }\r\n }\r\n\r\n return k2;\r\n },\r\n },\r\n {\r\n funName: 'YJCSHTJZM',\r\n funDesc: '超声回弹浇筑面修正查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '浇筑面',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '回弹值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let type = retData.allCellVals[0],\r\n a = retData.allCellVals[1];\r\n\r\n let arrr = new Array('20.0', '25.0', '30.0', '35.0', '40.0', '45.0', '50.0');\r\n let arrd1 = new Array('2.5', '2.0', '1.5', '1.0', '0.5', '0', '0');\r\n let arrd2 = new Array('3.0', '2.5', '2.0', '1.5', '1.0', '0.5', '0');\r\n if (a * 1 > 50) {\r\n a = '50.0';\r\n } else if (a * 1 < 20) {\r\n a = '20.0';\r\n }\r\n let result = '';\r\n if (a != '/') {\r\n if (type == '侧面') {\r\n //回弹测试面\r\n result = '0.0';\r\n } else if (type == '顶面') {\r\n let ht, yz;\r\n yz = false;\r\n for (let i = 0; i < arrr.length; i++) {\r\n if (a == arrr[i]) {\r\n //回弹平 均值,角度修正值\r\n ht = arrd1[i];\r\n yz = true;\r\n continue;\r\n }\r\n }\r\n\r\n if (yz == false) {\r\n //使用内插法\r\n for (let i = 0; i < arrd1.length; i++) {\r\n if (a > arrr[i]) {\r\n ht = FormulaUtils.commFun.InterpolationMethod_y(arrr[i], arrr[i + 1], arrd1[i], arrd1[i + 1], a);\r\n }\r\n }\r\n }\r\n\r\n result = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(ht, -1);\r\n } else if (type == '底面') {\r\n let ht, yz;\r\n yz = false;\r\n for (let i = 0; i < arrd2.length; i++) {\r\n if (a == arrr[i]) {\r\n ht = arrd2[i];\r\n yz = true;\r\n continue;\r\n }\r\n }\r\n\r\n if (yz == false) {\r\n //使用内插法\r\n for (let i = 0; i < arrd2.length; i++) {\r\n if (a > arrr[i]) {\r\n ht = FormulaUtils.commFun.InterpolationMethod_y(arrr[i], arrr[i + 1], -arrd2[i], -arrd2[i + 1], a);\r\n }\r\n }\r\n }\r\n result = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(ht, -1);\r\n }\r\n return result;\r\n }\r\n },\r\n },\r\n {\r\n funName: 'YJCSHTQD',\r\n funDesc: '超声回弹强度换算计算',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: 'fccu,i',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'υai^',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'Rai^',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '声速值平均值(km/s)',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '超声测试面修正系数β',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '回弹平均值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '浇筑面修正值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '角度修正值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '平测声速修正系数λ',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于9个,则返回空字符串\r\n if (retData.allCellVals.length < 9) {\r\n return '';\r\n }\r\n\r\n let a2 = retData.allCellVals[0],\r\n a3 = retData.allCellVals[1],\r\n a4 = retData.allCellVals[2],\r\n a5 = retData.allCellVals[3],\r\n a6 = retData.allCellVals[4],\r\n a7 = retData.allCellVals[5],\r\n a8 = retData.allCellVals[6],\r\n a9 = retData.allCellVals[7],\r\n a10 = retData.allCellVals[8];\r\n\r\n let result = '';\r\n if (a7 != '/' && a7 != '' && a5 != '/' && a5 != '') {\r\n let q = 1 * a5 * a6 * a10;\r\n if (a10 == '' || a10 == '/' || isNaN(a10)) {\r\n q = 1 * a5 * a6;\r\n }\r\n let w = Math.pow(q, a3);\r\n let e = a7 * 1 + 1 * a9 + 1 * a8;\r\n let r = Math.pow(e, a4);\r\n let t = a2 * 1 * w * r;\r\n\r\n result = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(t, -1);\r\n }\r\n\r\n return result;\r\n },\r\n },\r\n {\r\n funName: 'YJCSHTJD',\r\n funDesc: '超声回弹角度修正查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '测试角度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '回弹值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于1个,则返回空字符串\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let b = retData.allCellVals[0],\r\n a = retData.allCellVals[1];\r\n\r\n let xz = '';\r\n if (a > 50) a = '50.0';\r\n else if (a < 20) a = '20.0';\r\n let arr1 = new Array();\r\n let arr2 = new Array();\r\n if (b > 0 && a.length >= 2) {\r\n arr1 = new Array('30', '45', '60', '90');\r\n let m = 0;\r\n arr2[0] = new Array('20.0-3.0', '25.0-2.8', '30.0-2.5', '35-2.3', '40.0-2.0', '45.0-1.8', '50.0-1.5'); //30\r\n arr2[1] = new Array('20.0-4.0', '25.0-3.8', '30.0-3.5', '35-3.3', '40.0-3.0', '45.0-2.8', '50.0-2.5'); //45\r\n arr2[2] = new Array('20.0-5.0', '25.0-4.5', '30.0-4.0', '35-3.8', '40.0-3.5', '45.0-3.3', '50.0-3.0'); //60\r\n arr2[3] = new Array('20.0-6.0', '25.0-5.5', '30.0-5.0', '35-4.5', '40.0-4.0', '45.0-3.8', '50.0-3.5'); //90\r\n\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] == b) m = i;\r\n }\r\n for (let i = 0; i < arr2[m].length; i++) {\r\n let c = new String();\r\n c = arr2[m][i];\r\n c = c.split('-');\r\n //如果数组中有此测试角度则直接得到其值,否则使用内插法\r\n if (c[0] == a) {\r\n xz = -c[1];\r\n } else {\r\n let wz;\r\n if (a > c[0]) {\r\n wz = i;\r\n\r\n let c1, c2;\r\n c1 = arr2[m][wz];\r\n c2 = arr2[m][wz + 1];\r\n c1 = c1.split('-');\r\n c2 = c2.split('-');\r\n\r\n xz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(c1[0], c2[0], -c1[1], -c2[1], a),\r\n -1\r\n );\r\n }\r\n }\r\n }\r\n } else if (b < 0 && a.length >= 2) {\r\n arr1 = new Array('-30', '-45', '-60', '-90');\r\n let m = 0;\r\n arr2[0] = new Array('20.0-2.5', '25.0-2.3', '30.0-2.0', '35.0-1.8', '40.0-1.5', '45.0-1.3', '50.0-1.0'); //-30\r\n arr2[1] = new Array('20.0-3.0', '25.0-2.8', '30.0-2.5', '35.0-2.3', '40.0-2.0', '45.0-1.8', '50.0-1.5'); //-45\r\n arr2[2] = new Array('20.0-3.5', '25.0-3.3', '30.0-3.0', '35.0-2.8', '40.0-2.5', '45.0-2.3', '50.0-2.0'); //-60\r\n arr2[3] = new Array('20.0-4.0', '25.0-3.8', '30.0-3.5', '35.0-3.3', '40.0-3.0', '45.0-2.8', '50.0-2.5'); //-90\r\n\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i] == b) m = i;\r\n }\r\n\r\n for (let i = 0; i < arr2[m].length; i++) {\r\n let c = new String();\r\n c = arr2[m][i];\r\n c = c.split('-');\r\n\r\n //如果数组中有此测试角度则直接得到其值,否则使用内插法\r\n if (c[0] == a) {\r\n xz = c[1];\r\n } else {\r\n let wz;\r\n\r\n if (Math.abs(a) > Math.abs(c[0])) {\r\n wz = i;\r\n\r\n let c1, c2;\r\n c1 = arr2[m][wz];\r\n c2 = arr2[m][wz + 1];\r\n c1 = c1.split('-');\r\n c2 = c2.split('-');\r\n xz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(c1[0], c2[0], c1[1], c2[1], a),\r\n -1\r\n );\r\n }\r\n }\r\n }\r\n }\r\n //当测试角度为0时,那么角度修正值也是为0人\r\n if (b == '0') xz = '0';\r\n if (!isNaN(xz) && xz != '') {\r\n return FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(xz, -1);\r\n } else {\r\n return '/';\r\n }\r\n return xz;\r\n },\r\n },\r\n {\r\n funName: 'YJTDM',\r\n funDesc: '土样定名及代号',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '粗筛孔径60',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛60小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径40',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛40小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径20',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛20小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径10',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛10小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛5小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛孔径2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '粗筛2小于该孔的质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛2占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛1占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.5占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.25',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.25占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径0.075',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛0.075占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛孔径筛底',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '细筛筛底占总土质量百分比',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '液限',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '塑限',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '不均匀系数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '曲率系数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于28个,则返回空字符串\r\n if (retData.allCellVals.length < 28) {\r\n return '';\r\n }\r\n\r\n let p60 = retData.allCellVals[0],\r\n bf1 = retData.allCellVals[1],\r\n p40 = retData.allCellVals[2],\r\n bf2 = retData.allCellVals[3],\r\n p20 = retData.allCellVals[4],\r\n bf3 = retData.allCellVals[5],\r\n p10 = retData.allCellVals[6],\r\n bf4 = retData.allCellVals[7],\r\n p5 = retData.allCellVals[8],\r\n bf5 = retData.allCellVals[9],\r\n p2 = retData.allCellVals[10],\r\n bf6 = retData.allCellVals[11],\r\n px2 = retData.allCellVals[12],\r\n bf7 = retData.allCellVals[13],\r\n px1 = retData.allCellVals[14],\r\n bf8 = retData.allCellVals[15],\r\n px05 = retData.allCellVals[16],\r\n bf9 = retData.allCellVals[17],\r\n px025 = retData.allCellVals[18],\r\n bf10 = retData.allCellVals[19],\r\n px0075 = retData.allCellVals[20],\r\n bf11 = retData.allCellVals[21],\r\n pd = retData.allCellVals[22],\r\n bf12 = retData.allCellVals[23],\r\n WL = retData.allCellVals[24],\r\n IP = retData.allCellVals[25],\r\n CU = retData.allCellVals[26],\r\n CC = retData.allCellVals[27];\r\n\r\n let arr = [\r\n p60 + '-' + bf1,\r\n p40 + '-' + bf2,\r\n p20 + '-' + bf3,\r\n p10 + '-' + bf4,\r\n p5 + '-' + bf5,\r\n p2 + '-' + bf6,\r\n px2 + '-' + bf7,\r\n px1 + '-' + bf8,\r\n px05 + '-' + bf9,\r\n px025 + '-' + bf10,\r\n px0075 + '-' + bf11,\r\n pd + '-' + bf12,\r\n ];\r\n function Arr(sk, opr) {\r\n let ret2 = '0';\r\n for (let i = 0; i < arr.length; i++) {\r\n let ret1 = arr[i].split('-');\r\n if (ret1[0] * 1 == sk * 1) {\r\n if (opr == 'Y') {\r\n ret2 = 100 - ret1[1];\r\n } else if (opr == 'Z') {\r\n ret2 = ret1[1];\r\n }\r\n }\r\n }\r\n return ret2;\r\n }\r\n let TM = '/';\r\n if (Arr('60', 'Y') * 1 > 15) {\r\n //Y60/M>15%\r\n if (Arr('60', 'Y') * 1 > 75) {\r\n //Y60/M>75%\r\n if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) > 0) {\r\n //Y200-(Y60-Y200)>0\r\n TM = '漂石B';\r\n } else if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) <= 0) {\r\n //Y200-(Y60-Y200)≤0\r\n TM = '卵石Cb';\r\n }\r\n } else if (Arr('60', 'Y') * 1 > 50 && Arr('60', 'Y') * 1 <= 75) {\r\n //50%<Y60/M≤75%\r\n if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) > 0) {\r\n //Y200-(Y60-Y200)>0\r\n TM = '漂石夹土BSl';\r\n } else if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) <= 0) {\r\n //Y200-(Y60-Y200)≤0\r\n TM = '卵石夹土CbSl';\r\n }\r\n } else if (Arr('60', 'Y') * 1 > 15 && Arr('60', 'Y') * 1 <= 50) {\r\n //15%<Y60/M≤50%\r\n if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) > 0) {\r\n //Y200-(Y60-Y200)>0\r\n TM = '漂石质土SlB';\r\n } else if (Arr('200', 'Y') * 1 - (Arr('60', 'Y') * 1 - Arr('200', 'Y') * 1) <= 0) {\r\n //Y200-(Y60-Y200)≤0\r\n TM = '卵石质土SlCb';\r\n }\r\n }\r\n } else if (Arr('60', 'Y') * 1 <= 15) {\r\n if (Arr('0.075', 'Y') * 1 > 50) {\r\n //Y0.075/M>50%\r\n if (Arr('2', 'Y') * 1 - Arr('60', 'Y') - (Arr('0.075', 'Y') * 1 - Arr('2', 'Y')) > 0) {\r\n //(Y2-Y60)-(Y0.075-Y2)>0\r\n if (Arr('0.075', 'Z') <= 5) {\r\n //Z0.075≤5%\r\n if (CU >= 5 && CC >= 1 && CC <= 3) {\r\n //Cu≥5且1≤Cc≤3\r\n TM = '级配良好砾GW';\r\n } else {\r\n TM = '级配不良砾GP';\r\n }\r\n } else if (Arr('0.075', 'Z') > 5 && Arr('0.075', 'Z') <= 15) {\r\n //5%<Z0.075≤15%\r\n TM = '含细粒土砾GF';\r\n } else if (Arr('0.075', 'Z') > 15 && Arr('0.075', 'Z') <= 50) {\r\n //15%<Z0.075≤50%\r\n if (IP < 0.73 * (WL * 1 - 20)) {\r\n //Ip<0.73*(WL-20)\r\n TM = '粉土质砾GM';\r\n } else {\r\n TM = '黏土质砾GC';\r\n }\r\n }\r\n } else if (Arr('2', 'Y') * 1 - Arr('60', 'Y') - (Arr('0.075', 'Y') * 1 - Arr('2', 'Y')) <= 0) {\r\n //(Y2-Y60)-(Y0.075-Y2)≤0\r\n if (Arr('0.075', 'Z') <= 5) {\r\n //Z0.075≤5%\r\n if (CU >= 5 && CC >= 1 && CC <= 3) {\r\n //Cu≥5且1≤Cc≤3\r\n TM = '级配良好砂SW';\r\n } else {\r\n TM = '级配不良砂SP';\r\n }\r\n } else if (Arr('0.075', 'Z') > 5 && Arr('0.075', 'Z') <= 15) {\r\n //5%<Z0.075≤15%\r\n TM = '含细粒土砂SF';\r\n } else if (Arr('0.075', 'Z') > 15 && Arr('0.075', 'Z') <= 50) {\r\n //15%<Z0.075≤50%\r\n if (IP < 0.73 * (WL * 1 - 20)) {\r\n //Ip<0.73*(WL-20)\r\n TM = '粉土质砂SM';\r\n } else {\r\n TM = '黏土质砂SC';\r\n }\r\n }\r\n }\r\n } else if (Arr('0.075', 'Y') * 1 <= 50) {\r\n if (Arr('0.075', 'Y') * 1 - Arr('60', 'Y') * 1 <= 25) {\r\n //(Y0.075-Y60)/M≤25%\r\n if (IP >= 0.73 * (WL * 1 - 20)) {\r\n //Ip≥0.73*(WL-20)\r\n if (WL * 1 >= 50) {\r\n //WL≥50%\r\n TM = '高液限黏土CH';\r\n } else if (WL * 1 < 50 && IP > 7) {\r\n //WL<50%,Ip>7\r\n TM = '低液限黏土CL';\r\n }\r\n } else {\r\n //Ip<0.73*(WL-20)\r\n if (WL * 1 >= 50) {\r\n //WL≥50%\r\n TM = '高液限粉土MH';\r\n } else if (WL * 1 < 50 && IP < 4) {\r\n //WL<50%,Ip<4\r\n TM = '低液限粉土ML';\r\n }\r\n }\r\n } else if ((Arr('0.075', 'Y') * 1 - Arr('60', 'Y') * 1) * 1 > 25 && (Arr('0.075', 'Y') * 1 - Arr('60', 'Y') * 1) * 1 <= 50) {\r\n //25%<Y0.075-Y60≤50%\r\n if (Arr('2', 'Y') * 1 - Arr('60', 'Y') * 1 - (Arr('0.075', 'Y') * 1 - Arr('2', 'Y') * 1) >= 0) {\r\n //(Y2-Y60)-(Y0.075-Y2)≥0\r\n if (IP >= 0.73 * (WL * 1 - 20)) {\r\n //Ip≥0.73*(WL-20)\r\n if (WL >= 50) {\r\n //WL≥50%\r\n TM = '含砾高液限黏土CHG';\r\n } else if (WL < 50 && IP > 7) {\r\n //WL<50%,Ip>7\r\n TM = '含砾低液限黏土CLG';\r\n }\r\n } else {\r\n if (WL >= 50) {\r\n //WL≥50%\r\n TM = '含砾高液限粉土MHG';\r\n } else if (WL < 50 && IP < 4) {\r\n //WL<50%,Ip<4\r\n TM = '含砾低液限粉土MLG';\r\n }\r\n }\r\n } else {\r\n if (IP >= 0.73 * (WL * 1 - 20)) {\r\n //Ip≥0.73*(WL-20)\r\n if (WL >= 50) {\r\n //WL≥50%\r\n TM = '含砂高液限黏土CHS';\r\n } else if (WL < 50 && IP > 7) {\r\n //WL<50%,Ip>7\r\n TM = '含砂低液限黏土CLS';\r\n }\r\n } else {\r\n if (WL >= 50) {\r\n //WL≥50%\r\n TM = '含砂高液限粉土MHS';\r\n } else if (WL < 50 && IP < 4) {\r\n //WL<50%,Ip<4\r\n TM = '含砂低液限粉土MLS';\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return TM;\r\n },\r\n },\r\n {\r\n funName: 'YJHTQD',\r\n funDesc: '回弹强度换算查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '浇筑方式',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '修正后回弹值',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '碳化深度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于3个,则返回空字符串\r\n if (retData.allCellVals.length < 3) {\r\n return '';\r\n }\r\n\r\n let jzfs = retData.allCellVals[0],\r\n xzhhtz = retData.allCellVals[1],\r\n thsd = retData.allCellVals[2];\r\n\r\n return FormulaUtilsOther.YJHTQD(FormulaUtils.commFun, jzfs, xzhhtz, thsd);\r\n },\r\n },\r\n {\r\n funName: 'DJCZL',\r\n funDesc: '地基承载力计算',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '地基土类型',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: 'N63.5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '修正系数',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '机械修正/水位修正',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //如果传递的参数小于4个,则返回空字符串\r\n if (retData.allCellVals.length < 4) {\r\n return '';\r\n }\r\n\r\n let djtlx = retData.allCellVals[0],\r\n cjs = retData.allCellVals[1],\r\n xzxs = retData.allCellVals[2],\r\n xzmc = retData.allCellVals[3];\r\n\r\n var value = 0;\r\n var dfczl;\r\n if (cjs == '/' || cjs == '') {\r\n cjs = '1';\r\n }\r\n if (xzmc == '水位修正') {\r\n value = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(cjs * xzxs * 1.1 + 1, 1);\r\n } else if (xzmc == '机械修正') {\r\n value = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(cjs * xzxs, 1);\r\n } else {\r\n value = cjs;\r\n }\r\n\r\n if (djtlx == '中砂-砂砾土') {\r\n if (value < 3.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(value * 40, 1);\r\n } else if (value >= 3.0 && value <= 5.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(30 * value + 30, 1);\r\n } else if (value > 5.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(40 * value - 20, 1);\r\n }\r\n } else {\r\n if (value < 3.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease((140 / 3) * value, 1);\r\n } else if (value >= 3.0 && value <= 5.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(30 * value + 50, 1);\r\n } else if (value > 5 && value <= 12) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(40 * value, 1);\r\n } else if (value > 12 && value <= 22) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(30 * value + 120, 1);\r\n } else if (value > 22 && value <= 24) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(25 * value + 230, 1);\r\n } else if (value > 24 && value <= 26) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(20 * value + 350, 1);\r\n } else if (value > 26 && value <= 30) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(15 * value + 480, 1);\r\n } else if (value > 30 && value <= 35) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(8 * value + 690, 1);\r\n } else if (value > 35.0) {\r\n dfczl = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(6 * value + 760, 1);\r\n }\r\n }\r\n\r\n return dfczl;\r\n },\r\n },\r\n {\r\n funName: 'YJLJJSYQ',\r\n funDesc: '钢筋机械连接技术要求',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '牌号',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头等级',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '拉断性状',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 3) {\r\n return '';\r\n }\r\n\r\n let ph = retData.allCellVals[0],\r\n jtdj = retData.allCellVals[1],\r\n dlxz = retData.allCellVals[2];\r\n\r\n var jsyq;\r\n var tdvalue = ph;\r\n var dj = jtdj;\r\n if (dj == 'I级') {\r\n var ld = dlxz;\r\n if (tdvalue == 'HRB400' || tdvalue == 'HRB400E' || tdvalue == 'HRBF400' || tdvalue == 'HRBF400E') {\r\n if (ld == '断于套筒' || ld == '套筒纵向开裂' || ld == '钢筋从套筒中拔出' || ld == '其它链接组件破坏') {\r\n jsyq = '≥594';\r\n } else {\r\n jsyq = '≥540';\r\n }\r\n } else if (tdvalue == 'HRB500' || tdvalue == 'HRB500E' || tdvalue == 'HRBF500' || tdvalue == 'HRBF500E') {\r\n if (ld == '断于套筒' || ld == '套筒纵向开裂' || ld == '钢筋从套筒中拔出' || ld == '其它链接组件破坏') {\r\n jsyq = '≥693';\r\n } else {\r\n jsyq = '≥630';\r\n }\r\n } else if (tdvalue == 'HRB600') {\r\n if (ld == '断于套筒' || ld == '套筒纵向开裂' || ld == '钢筋从套筒中拔出' || ld == '其它链接组件破坏') {\r\n jsyq = '≥803';\r\n } else {\r\n jsyq = '≥730';\r\n }\r\n }\r\n } else if (dj == 'II级') {\r\n if (tdvalue == 'HRB400' || tdvalue == 'HRB400E' || tdvalue == 'HRBF400' || tdvalue == 'HRBF400E') {\r\n jsyq = '≥540';\r\n } else if (tdvalue == 'HRB335' || tdvalue == 'HRBF335') {\r\n jsyq = '≥455';\r\n } else if (tdvalue == 'HRB500' || tdvalue == 'HRB500E' || tdvalue == 'HRBF500' || tdvalue == 'HRBF500E') {\r\n jsyq = '≥630';\r\n } else if (tdvalue == 'HRB600') {\r\n jsyq = '≥730';\r\n }\r\n } else if (dj == 'III级') {\r\n if (tdvalue == 'HRB400' || tdvalue == 'HRB400E' || tdvalue == 'HRBF400' || tdvalue == 'HRBF400E') {\r\n jsyq = '≥500';\r\n } else if (tdvalue == 'HRB500' || tdvalue == 'HRB500E' || tdvalue == 'HRBF500' || tdvalue == 'HRBF500E') {\r\n jsyq = '≥625';\r\n } else if (tdvalue == 'HRB600') {\r\n jsyq = '≥750';\r\n }\r\n }\r\n return jsyq;\r\n },\r\n },\r\n {\r\n funName: 'YJLJGJPD',\r\n funDesc: '机械连接钢筋结构判定',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '技术要求1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 6) {\r\n return '';\r\n }\r\n\r\n let jsyq1 = retData.allCellVals[0],\r\n jsyq2 = retData.allCellVals[1],\r\n jsyq3 = retData.allCellVals[2],\r\n k1 = retData.allCellVals[3],\r\n k2 = retData.allCellVals[4],\r\n k3 = retData.allCellVals[5];\r\n\r\n var jgpd;\r\n jsyq1 = jsyq1.replace('≥', '') * 1;\r\n jsyq2 = jsyq2.replace('≥', '') * 1;\r\n jsyq3 = jsyq3.replace('≥', '') * 1;\r\n if (k1 != '/' && k2 != '/' && k3 != '/') {\r\n if (k1 >= jsyq1 && k2 >= jsyq2 && k3 >= jsyq3) {\r\n jgpd = '合格';\r\n } else if (k1 >= jsyq1 && k2 >= jsyq2 && k3 < jsyq3) {\r\n jgpd = '复检';\r\n } else if (k1 >= jsyq1 && k2 < jsyq2 && k3 >= jsyq3) {\r\n jgpd = '复检';\r\n } else if (k1 < jsyq1 && k2 >= jsyq2 && k3 >= jsyq3) {\r\n jgpd = '复检';\r\n } else {\r\n jgpd = '不合格';\r\n }\r\n } else {\r\n jgpd = '/';\r\n }\r\n return jgpd;\r\n },\r\n },\r\n {\r\n funName: 'YJLJFJPD',\r\n funDesc: '机械连接钢筋结构复检判定',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '技术要求1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求4',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '技术要求6',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度4',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '抗压强度6',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 12) {\r\n return '';\r\n }\r\n\r\n let jsyq1 = retData.allCellVals[0],\r\n jsyq2 = retData.allCellVals[1],\r\n jsyq3 = retData.allCellVals[2],\r\n jsyq4 = retData.allCellVals[3],\r\n jsyq5 = retData.allCellVals[4],\r\n jsyq6 = retData.allCellVals[5],\r\n k1 = retData.allCellVals[6],\r\n k2 = retData.allCellVals[7],\r\n k3 = retData.allCellVals[8],\r\n k4 = retData.allCellVals[9],\r\n k5 = retData.allCellVals[10],\r\n k6 = retData.allCellVals[11];\r\n\r\n var jgpd;\r\n jsyq1 = jsyq1.replace('≥', '') * 1;\r\n jsyq2 = jsyq2.replace('≥', '') * 1;\r\n jsyq3 = jsyq3.replace('≥', '') * 1;\r\n jsyq4 = jsyq4.replace('≥', '') * 1;\r\n jsyq5 = jsyq5.replace('≥', '') * 1;\r\n jsyq6 = jsyq6.replace('≥', '') * 1;\r\n if (!isNaN(k1) && !isNaN(k2) && !isNaN(k3) && !isNaN(k4) && !isNaN(k5) && !isNaN(k6)) {\r\n if (k1 >= jsyq1 && k2 >= jsyq2 && k3 >= jsyq3 && k4 >= jsyq4 && k5 >= jsyq5 && k6 >= jsyq6) {\r\n jgpd = '合格';\r\n } else {\r\n jgpd = '不合格';\r\n }\r\n } else {\r\n jgpd = '/';\r\n }\r\n return jgpd;\r\n },\r\n },\r\n {\r\n funName: 'YJHJFJPD',\r\n funDesc: '焊接钢筋结构复检判定',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '牌号',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度4',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '接头极限强度6',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状1',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状2',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状3',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状4',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状5',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n {\r\n name: '断裂形状6',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 13) {\r\n return '';\r\n }\r\n\r\n let ph = retData.allCellVals[0],\r\n kl1 = retData.allCellVals[1],\r\n kl2 = retData.allCellVals[2],\r\n kl3 = retData.allCellVals[3],\r\n kl4 = retData.allCellVals[4],\r\n kl5 = retData.allCellVals[5],\r\n kl6 = retData.allCellVals[6],\r\n dl1 = retData.allCellVals[7],\r\n dl2 = retData.allCellVals[8],\r\n dl3 = retData.allCellVals[9],\r\n dl4 = retData.allCellVals[10],\r\n dl5 = retData.allCellVals[11],\r\n dl6 = retData.allCellVals[12];\r\n\r\n var arry1 = new Array();\r\n var arry2 = new Array();\r\n var count1 = 0;\r\n var count2 = 0;\r\n var tdvalue = ph;\r\n var jsyq;\r\n var jgpd = '/';\r\n if (tdvalue == 'HRB335') {\r\n jsyq = '≥455';\r\n } else if (tdvalue == 'R235') {\r\n jsyq = '≥370';\r\n } else if (tdvalue == 'Q235') {\r\n jsyq = '≥410';\r\n } else if (tdvalue == 'HRB400' || tdvalue == 'HRB400E') {\r\n jsyq = '≥540';\r\n } else if (tdvalue == 'HPB300') {\r\n jsyq = '≥420';\r\n } else if (tdvalue == 'HRB500') {\r\n jsyq = '≥630';\r\n } else if (tdvalue == 'HRBF500') {\r\n jsyq = '≥630';\r\n } else if (tdvalue == 'HRB500E') {\r\n jsyq = '≥630';\r\n } else if (tdvalue == 'HRBF500E') {\r\n jsyq = '≥630';\r\n } else {\r\n jsyq = '/';\r\n }\r\n jsyq = jsyq.replace('≥', '') * 1;\r\n if (\r\n jsyq != '/' &&\r\n kl1 != '/' &&\r\n kl2 != '/' &&\r\n kl3 != '/' &&\r\n kl4 != '/' &&\r\n kl5 != '/' &&\r\n kl6 != '/' &&\r\n dl1 != '/' &&\r\n dl2 != '/' &&\r\n dl3 != '/' &&\r\n dl4 != '/' &&\r\n dl5 != '/' &&\r\n dl6 != '/'\r\n ) {\r\n arry1.push(kl1, kl2, kl3, kl4, kl5, kl6);\r\n arry2.push(dl1, dl2, dl3, dl4, dl5, dl6);\r\n for (var i = 0; i < arry1.length; i++) {\r\n if (arry1[i] * 1 < jsyq) {\r\n count1++;\r\n }\r\n }\r\n for (var j = 0; j < arry2.length; j++) {\r\n if (arry2[j] == '断于焊缝,呈脆性断裂' || arry2[j] == '断于热影响区,呈脆性断裂') {\r\n count2++;\r\n }\r\n }\r\n if (count1 > 0) {\r\n jgpd = '不合格';\r\n } else if (count2 >= 3) {\r\n jgpd = '不合格';\r\n } else {\r\n jgpd = '合格';\r\n }\r\n }\r\n return jgpd;\r\n },\r\n },\r\n {\r\n funName: 'YJWJLKQND',\r\n funDesc: '无机结合料空气黏度查表',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '试验温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let a = retData.allCellVals[0];\r\n\r\n var arr = new Array(\r\n '8-17.49',\r\n '10-17.59',\r\n '12-17.68',\r\n '14-17.78',\r\n '16-17.88',\r\n '18-17.98',\r\n '20-18.09',\r\n '22-18.19',\r\n '24-18.28',\r\n '26-18.37',\r\n '28-18.47',\r\n '30-18.57',\r\n '32-18.67',\r\n '34-18.76'\r\n );\r\n\r\n // var a;//试验温度\r\n var b; //空气粘度\r\n\r\n for (var i = 0; i < arr.length; i++) {\r\n var ret = arr[i].split('-');\r\n if (a == ret[0]) {\r\n b = ret[1];\r\n }\r\n }\r\n if (a.length > 0) {\r\n //内插法\r\n var wd = a.substring(0, a.indexOf('.'));\r\n\r\n var j = 0;\r\n for (var i = 0; i < arr.length; i++) {\r\n var ret = arr[i].split('-');\r\n if (wd == ret[0]) {\r\n j = i;\r\n //continue;\r\n }\r\n }\r\n if (j == arr.length - 1) {\r\n var arr1 = arr[j].split('-');\r\n var arr2 = arr[j - 1].split('-');\r\n b = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -2\r\n );\r\n } else {\r\n var arr1 = arr[j].split('-');\r\n var arr2 = arr[j + 1].split('-');\r\n\r\n b = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], a),\r\n -2\r\n );\r\n }\r\n }\r\n\r\n return b;\r\n },\r\n },\r\n {\r\n funName: 'YJYSSMD',\r\n funDesc: '岩石-水密度公式',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '试验温度',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n if (retData.allCellVals.length < 1) {\r\n return '';\r\n }\r\n\r\n let wd = retData.allCellVals[0];\r\n\r\n var md;\r\n var arr = new Array(\r\n '5-0.9999919',\r\n '6-0.9999681',\r\n '7-0.9999295',\r\n '8-0.9998762',\r\n '9-0.9998088',\r\n '10-0.9997277',\r\n '11-0.9996328',\r\n '12-0.9995247',\r\n '13-0.9994040',\r\n '14-0.9992712',\r\n '15-0.9991265',\r\n '16-0.9989701',\r\n '17-0.9988022',\r\n '18-0.9986232',\r\n '19-0.9984331',\r\n '20-0.9982323',\r\n '21-0.9980210',\r\n '22-0.9977993',\r\n '23-0.9975674',\r\n '24-0.9973256',\r\n '25-0.9970739',\r\n '26-0.9968128',\r\n '27-0.9965241',\r\n '28-0.9962623',\r\n '29-0.9959735',\r\n '30-0.9956756',\r\n '31-0.9953692',\r\n '32-0.9950542',\r\n '33-0.9947308',\r\n '34-0.9943991',\r\n '35-0.9940594'\r\n );\r\n for (var i = 0; i < arr.length; i++) {\r\n var ret = arr[i].split('-');\r\n if (wd == ret[0]) {\r\n md = ret[1];\r\n break;\r\n }\r\n }\r\n\r\n // if (wd.length > 2) {//内插法处理水密度\r\n if (String(wd).length > 2) {\r\n //内插法处理水密度\r\n // wd = wd.substring(0, wd.indexOf('.'));\r\n var a = parseInt(wd);\r\n\r\n var j = 0;\r\n for (var i = 0; i < arr.length; i++) {\r\n var ret = arr[i].split('-');\r\n // if (wd == ret[0]) {\r\n if (a == Number(ret[0])) {\r\n j = i;\r\n }\r\n }\r\n if (j == arr.length - 1) {\r\n var arr1 = arr[j].split('-');\r\n var arr2 = arr[j - 1].split('-');\r\n md = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], wd),\r\n -7\r\n );\r\n } else {\r\n var arr1 = arr[j].split('-');\r\n var arr2 = arr[j + 1].split('-');\r\n md = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(\r\n FormulaUtils.commFun.InterpolationMethod_y(arr1[0], arr2[0], arr1[1], arr2[1], wd),\r\n -7\r\n );\r\n }\r\n }\r\n\r\n return md;\r\n },\r\n },\r\n {\r\n funName: 'YJHTTDZ',\r\n funDesc: '混凝土强度推定値公式',\r\n funDefaultVal: null,\r\n funParams: [\r\n {\r\n name: '强度换算值数组',\r\n repeatable: false,\r\n optional: false,\r\n },\r\n ],\r\n funCallback: (spread, sheet, retData) => {\r\n //获取所有数据\r\n let retVals = [];\r\n retData.allCellValsEw.forEach((item) => {\r\n if (Array.isArray(item)) {\r\n item.forEach((itemSon) => {\r\n retVals.push(itemSon);\r\n });\r\n } else {\r\n retVals.push(item);\r\n }\r\n });\r\n\r\n let tmp_xy: Array<any> = retVals;\r\n\r\n var j = 0;\r\n var s = 0;\r\n var avg;\r\n var arrays = new Array();\r\n var fh = new Array();\r\n var zxz = new Array();\r\n var tdz; //推定值\r\n //int k=0;\r\n for (let i = 0; i < 10; i++) {\r\n if (tmp_xy[i] != '' && tmp_xy[i] != '/') {\r\n arrays[j] = tmp_xy[i];\r\n s = s + tmp_xy[i] * 1;\r\n j++;\r\n }\r\n if (tmp_xy[i].indexOf('<') > -1 || tmp_xy[i].indexOf('>') > -1) {\r\n fh.push(tmp_xy[i]);\r\n }\r\n if (tmp_xy[i].indexOf('<') == -1 && tmp_xy[i].indexOf('>') == -1 && tmp_xy[i].indexOf('/') == -1) {\r\n zxz.push(tmp_xy[i]);\r\n }\r\n }\r\n avg = FormulaUtils.commFun.getAverage(retVals.filter((item) => FormulaUtils.commFun.isNumber(item)));\r\n\r\n s = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.GetS(zxz), -3);\r\n avg = avg * 1 - 1.645 * 1 * s;\r\n avg = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(avg, -1);\r\n if (arrays.length == 10) {\r\n if (fh.length == 10) {\r\n tdz = '>60.0';\r\n } else {\r\n if (fh.length > 0) {\r\n tdz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.getMin(zxz), -1);\r\n } else {\r\n tdz = avg;\r\n }\r\n }\r\n } else {\r\n if (zxz.length < 1) {\r\n tdz = '>60.0';\r\n } else {\r\n tdz = FormulaUtils.commFun.GetDataOddIncreaseEvenDecrease(FormulaUtils.commFun.getMin(zxz), -1);\r\n }\r\n }\r\n\r\n return tdz;\r\n },\r\n },\r\n ] as any,\r\n};\r\n","// 导出Excel文件所需的第三方包\r\nimport { saveAs } from 'file-saver';\r\nimport { RegisterFontModel } from '../types/wookbook';\r\n\r\n/**\r\n * SpreadJS工作簿工具函数属性\r\n */\r\nexport const WorkbookUtils = {\r\n /**\r\n * 加载在线sjs文件\r\n * @param spread 工作簿对象\r\n * @param fileUrl 在线sjs文件地址\r\n * @param succFunc 文件打开成功后的回调函数,返回的第一个参数为spread工作簿对象\r\n * @param errorFunc 文件打开失败后的回调函数,返回的第一个参数为错误信息\r\n */\r\n loadSjsFile: async (spread: any, fileUrl: string, succFunc?: (spreadObj) => Promise<void>, errorFunc?: (error) => Promise<void>): Promise<void> => {\r\n // 获取文件响应结果\r\n const response = await fetch(fileUrl, { method: 'GET' });\r\n\r\n // 获取成功\r\n if (response.ok) {\r\n // 文件的字节流对象\r\n const blob = await response.blob();\r\n // 将Blob转换为File或Blob对象\r\n // const file = new File([blob], 'template.sjs', { type: 'application/octet-stream' });\r\n const sjsBlob = new Blob([blob], { type: 'application/zip' });\r\n\r\n // SpreadJS打开文件\r\n spread.open(\r\n sjsBlob,\r\n async () => {\r\n if (typeof succFunc === 'function') {\r\n await succFunc(spread);\r\n\r\n // // 或者使用then回调\r\n // succFunc(spread).then((ret) => {\r\n // // return ret;\r\n // });\r\n }\r\n },\r\n async (e: any) => {\r\n if (typeof errorFunc === 'function') {\r\n await errorFunc(e);\r\n }\r\n }\r\n );\r\n }\r\n },\r\n\r\n /**\r\n * 获取工作簿的Blob对象\r\n * @param spread 工作簿实例\r\n * @returns 返回异步的Promise对象(Blob对象)\r\n * @example\r\n * const saveSpread = async (spread: any) => {\r\n * try {\r\n * const blob = await WorkbookUtils.getWookbookBlob(spread);\r\n * console.log('获取成功:', blob);\r\n * } catch (error) {\r\n * console.error('获取失败:', error);\r\n * }\r\n * };\r\n */\r\n getWookbookBlob: async (spread: any): Promise<Blob> => {\r\n return new Promise((resolve, reject) => {\r\n spread.save(\r\n // 成功回调\r\n (blob) => resolve(blob),\r\n // 失败回调\r\n (error) => reject(error)\r\n );\r\n });\r\n },\r\n\r\n /**\r\n * 打印所有工作表\r\n * @param GC GC对象\r\n * @param spread 工作簿实例\r\n */\r\n print: (GC: any, spread: any) => {\r\n // 得到Sheet个数\r\n const sheetCount = spread.getSheetCount();\r\n\r\n for (let i = 0; i < sheetCount; i++) {\r\n const sheet = spread.getSheet(i);\r\n\r\n // 获取每个工作表的打印信息\r\n let printInfo = sheet.printInfo();\r\n\r\n // 隐藏行和列的头部信息\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n\r\n // // 显示和隐藏打印区域的辅助线\r\n // spread.getSheet(0).isPrintLineVisible(true);\r\n // spread.getSheet(0).isPrintLineVisible(!true);\r\n\r\n // 设置打印区域,这里是固定的,在业务应用中需要根据实际情况修改打印区域\r\n printInfo.rowStart(0);\r\n printInfo.rowEnd(sheet.getRowCount()); //printInfo.rowEnd(41);\r\n printInfo.columnStart(0);\r\n printInfo.columnEnd(76);\r\n\r\n // 设置SpreadJS自身的边距为合适的距离\r\n printInfo.margin({\r\n /**\r\n * 设置默认边距\r\n * 单位是:以百分之一英寸为单位\r\n * 也就是,如果我们需要设置左边距为25mm,需要将25mm先转换为英寸,然后再用这个英寸*100就是要设置的边距\r\n * 即:(25mm转换为英寸的结果)*100\r\n *\r\n * 参考文档:\r\n * https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Sheets.Print.PrintInfo#margin\r\n * https://www.67tool.com/converter/length\r\n */\r\n // 纵表\r\n top: 0.5905511999999999 * 100,\r\n bottom: 0.5905511999999999 * 100,\r\n left: 0.9842520000000001 * 100,\r\n right: 0.5905511999999999 * 100,\r\n\r\n // // 横表\r\n // top: 0.9842520000000001 * 100,\r\n // bottom: 0.5905511999999999 * 100,\r\n // left: 0.5905511999999999 * 100,\r\n // right: 0.5905511999999999 * 100,\r\n\r\n // top: 0,\r\n // bottom: 0,\r\n // left: 0,\r\n // right: 0,\r\n header: 0,\r\n footer: 0,\r\n });\r\n\r\n // 设置打印的纸张\r\n printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(GC.Spread.Sheets.Print.PaperKind.a4));\r\n\r\n sheet.printInfo(printInfo);\r\n }\r\n\r\n // 调用打印方法\r\n spread.print();\r\n },\r\n\r\n /**\r\n * 导出为Excel文件\r\n * 如支持导出自定义公式的值等功能\r\n * @param GC Spread的GC对象\r\n * @param spread 原始Spread对象\r\n * @param fileName 导出的文件名称,不传则为第一个工作表的名称\r\n */\r\n exportToExcel: (GC: any, spread: any, fileName: string = '') => {\r\n // 导出模板为JSON对象,此处设置了参数includeBindingSource,改参数代表包含数据绑定的值\r\n const json = spread.toJSON({ includeBindingSource: true });\r\n\r\n // 需要移除的自定义公式名称集合(该变量的作用是,在导出Excel前,将工作簿中所有的自定义公式移除掉,其他内置的公式保留)\r\n const removeCustomFormulas = ['YJMAX', 'YJMIN', 'YJMID', 'YJGETNUM', 'YJGETS', 'YJGETCV', 'YJINTERPOLATIONMETHOD', 'YJINTERPOLATIONMETHOD_Y'];\r\n\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n tempSpread.fromJSON(json);\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n // 获取Sheet数量\r\n const sheetCount = tempSpread.getSheetCount();\r\n\r\n for (let iSheet = 0; iSheet < sheetCount; iSheet++) {\r\n // 当前工作表\r\n const sheet = tempSpread.getSheet(iSheet);\r\n\r\n // 暂停公式的计算,提高性能\r\n sheet.suspendCalcService();\r\n\r\n for (var i = 0; i < sheet.getRowCount(); i++) {\r\n for (var j = 0; j < sheet.getColumnCount(); j++) {\r\n // 获取单元格的公式\r\n const cellFormula = sheet.getFormula(i, j);\r\n\r\n // 如果cellFormula不为null或undefined,则说明该单元格引用了公式\r\n if (cellFormula != null && cellFormula != undefined && removeCustomFormulas.some((item) => cellFormula.indexOf(item) > -1)) {\r\n // 获取单元格的值\r\n const cellVal = sheet.getValue(i, j);\r\n\r\n // 移除单元格引用的公式\r\n sheet.getCell(i, j).formula(undefined);\r\n\r\n // 设置单元格的值\r\n sheet.setValue(i, j, cellVal);\r\n }\r\n }\r\n }\r\n\r\n // 恢复计算\r\n sheet.resumeCalcService(false);\r\n }\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n if (fileName == '') {\r\n fileName = tempSpread.getSheet(0).name();\r\n }\r\n\r\n let options = {\r\n fileType: GC.Spread.Sheets.FileType.excel,\r\n includeBindingSource: true,\r\n includeStyles: true,\r\n includeFormulas: true,\r\n saveAsView: false,\r\n rowHeadersAsFrozenColumns: false,\r\n columnHeadersAsFrozenRows: false,\r\n includeAutoMergedCells: false,\r\n includeCalcModelCache: false,\r\n includeUnusedNames: true,\r\n includeEmptyRegionCells: true,\r\n };\r\n\r\n tempSpread.export(\r\n (blob: any) => {\r\n saveAs(blob, `${fileName}.xlsx`);\r\n },\r\n () => {},\r\n options\r\n );\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n },\r\n\r\n /**\r\n * 合并多个工作簿并导出Excel或PDF(同时返回合并后的工作簿实例)\r\n * @param GC Spread的GC对象\r\n * @param spreads 工作簿实例集合\r\n * @param isExcel 是否导出为Excel文件,默认为true(如果为false,则导出为PDF)\r\n * @param exportName 导出的文件名称,不传则为第一个Sheet的名称\r\n * @param regFonts 注册的字体集合,默认注册宋体和Arial字体\r\n * @returns 合并后的工作簿实例\r\n */\r\n mergeWorkbooksToExcelOrPdf: async (\r\n GC: any,\r\n spreads: any[],\r\n isExcel: boolean = true,\r\n exportName?: string,\r\n regFonts: RegisterFontModel[] = [\r\n { name: '宋体', type: 'normal', url: '/spreadJsFonts/simsun.ttf' },\r\n { name: 'Arial', type: 'normal', url: '/spreadJsFonts/arial.ttf' },\r\n ]\r\n ) => {\r\n if (!spreads || spreads.length == 0) {\r\n return;\r\n }\r\n\r\n // 导出PDF的时候,注册字体(必须在初始化Workbook前注册)\r\n if (!isExcel) {\r\n await WorkbookUtils.registerFont(GC, regFonts);\r\n }\r\n\r\n // 主工作簿\r\n const mainWorkbook = new GC.Spread.Sheets.Workbook();\r\n\r\n // 暂停绘制\r\n mainWorkbook.suspendPaint();\r\n\r\n mainWorkbook.fromJSON(spreads[0].toJSON());\r\n\r\n for (let i = 1; i < spreads.length; i++) {\r\n // 临时工作簿\r\n const tempSpread = new GC.Spread.Sheets.Workbook();\r\n\r\n // 暂停绘制\r\n tempSpread.suspendPaint();\r\n\r\n tempSpread.fromJSON(spreads[i].toJSON());\r\n\r\n // 重命名样式表\r\n const styleSign = i + '';\r\n tempSpread.getNamedStyles().forEach(function (namedStyle) {\r\n namedStyle.name = `new_${styleSign}_${namedStyle.name}`;\r\n mainWorkbook.addNamedStyle(namedStyle);\r\n });\r\n\r\n // 当前临时工作簿的第一个工作表\r\n let tempSheet = tempSpread.getSheet(0);\r\n // 导出为JSON字符串\r\n let tempSheetJSON = JSON.stringify(tempSheet.toJSON());\r\n // 替换当前JSON字符串的style或parentName配置,目的是重命名样式名称,和上述的tempSpread重命名样式表保持一致\r\n tempSheetJSON = tempSheetJSON.replace(/\"style\":\"/g, '\"style\":\"new_' + styleSign + '_');\r\n tempSheetJSON = tempSheetJSON.replace(/\"parentName\":\"/g, '\"parentName\":\"new_' + styleSign + '_');\r\n\r\n // 创建新的工作表并添加到主工作簿中\r\n let newSheet = new GC.Spread.Sheets.Worksheet(`newSheet${styleSign}_`);\r\n mainWorkbook.addSheet(mainWorkbook.getSheetCount(), newSheet);\r\n newSheet.fromJSON(JSON.parse(tempSheetJSON));\r\n\r\n // 获取新创建的工作表newSheet的行数\r\n const newSheetRowCount = newSheet.getRowCount();\r\n\r\n // 当前操作的主工作簿的Sheet\r\n const curMainSheet = mainWorkbook.getSheet(0);\r\n\r\n // 如果是表尾,则在表单的最后一行开始添加\r\n curMainSheet.addRows(curMainSheet.getRowCount(), newSheetRowCount);\r\n\r\n // 设置复制和粘贴的范围\r\n let pastedRangesStartRow = curMainSheet.getRowCount() - newSheetRowCount;\r\n\r\n const fromRanges = [new GC.Spread.Sheets.Range(-1, -1, -1, -1)],\r\n pastedRanges = [new GC.Spread.Sheets.Range(pastedRangesStartRow, 0, newSheetRowCount, newSheet.getColumnCount())];\r\n mainWorkbook.commandManager().execute({\r\n cmd: 'clipboardPaste',\r\n sheetName: curMainSheet.name(), //此参数的作用是:粘贴到某个名称的Sheet中\r\n fromSheet: newSheet,\r\n fromRanges: fromRanges,\r\n pastedRanges: pastedRanges,\r\n isCutting: false,\r\n clipboardText: '',\r\n pasteOption: GC.Spread.Sheets.ClipboardPasteOptions.all,\r\n });\r\n\r\n // 删除最后的Sheet,也就是newSheet对象\r\n mainWorkbook.removeSheet(mainWorkbook.getSheetCount() - 1);\r\n\r\n // 取消选中状态\r\n curMainSheet.clearSelection();\r\n\r\n // 恢复绘制\r\n tempSpread.resumePaint();\r\n\r\n // 销毁临时工作簿\r\n tempSpread.destroy();\r\n }\r\n\r\n // 获取当前活动的工作表\r\n const sheet = mainWorkbook.getActiveSheet();\r\n\r\n // 设置缩放比为1\r\n sheet.zoom(1);\r\n\r\n // 隐藏行和列的头部\r\n sheet.options.rowHeaderVisible = true;\r\n sheet.options.colHeaderVisible = true;\r\n\r\n // 隐藏Tab、水平和垂直的滚动条\r\n mainWorkbook.options.tabStripVisible = true;\r\n mainWorkbook.options.showHorizontalScrollbar = true;\r\n mainWorkbook.options.showVerticalScrollbar = true;\r\n\r\n // 滚动条是否与活动工作表的最后一行和最后一列对齐(避免滚动的时候出现灰色区域)\r\n mainWorkbook.options.scrollbarMaxAlign = false;\r\n\r\n // 导出PDF时\r\n if (!isExcel) {\r\n // 获取最后一个要打印的PDF工作表\r\n const pdfSheet = mainWorkbook.getSheet(mainWorkbook.getSheetCount() - 1);\r\n let printInfo = pdfSheet.printInfo();\r\n printInfo.margin({ top: 0, bottom: 0, left: 0, right: 0, header: 0, footer: 0 });\r\n printInfo.showBorder(false);\r\n printInfo.showGridLine(false);\r\n printInfo.blackAndWhite(false);\r\n printInfo.showRowHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.showColumnHeader(GC.Spread.Sheets.Print.PrintVisibilityType.hide);\r\n printInfo.zoomFactor(1.06); //1.06\r\n }\r\n\r\n // 恢复绘制\r\n mainWorkbook.resumePaint();\r\n\r\n // 导出Excel文件\r\n if (isExcel) {\r\n WorkbookUtils.exportToExcel(GC, mainWorkbook, exportName);\r\n } else {\r\n mainWorkbook.savePDF(function (blob) {\r\n saveAs(blob, `${exportName && exportName.length > 0 ? exportName : '文件'}.pdf`);\r\n }, console.log);\r\n }\r\n\r\n return mainWorkbook;\r\n },\r\n\r\n /**\r\n * 注册字体(主要为导出PDF使用)\r\n * @param GC Spread的GC对象\r\n * @param regFonts 字体配置集合\r\n */\r\n registerFont: async (GC: any, regFonts: RegisterFontModel[]) => {\r\n // 基于fetch\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n if (!regFonts || regFonts.length == 0) {\r\n resolve(null);\r\n }\r\n\r\n for (let i = 0; i < regFonts.length; i++) {\r\n const font = regFonts[i];\r\n\r\n const response = await fetch(font.url, { method: 'GET' });\r\n\r\n if (response.ok) {\r\n const blob = await response.blob();\r\n\r\n var reader = new FileReader();\r\n reader.readAsArrayBuffer(blob);\r\n reader.onload = function (e) {\r\n var fontArrayBuffer = reader.result;\r\n\r\n var fonts = {};\r\n fonts[font.type] = fontArrayBuffer;\r\n GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);\r\n\r\n resolve(blob);\r\n };\r\n }\r\n }\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n\r\n // 基于XMLHttpRequest\r\n // return new Promise((resolve, reject) => {\r\n // try {\r\n // if (!regFonts || regFonts.length == 0) {\r\n // resolve(null);\r\n // }\r\n\r\n // for (let i = 0; i < regFonts.length; i++) {\r\n // const font = regFonts[i];\r\n\r\n // var xhr = new XMLHttpRequest();\r\n // xhr.open('GET', font.url, true);\r\n // xhr.responseType = 'blob';\r\n\r\n // xhr.onload = function (e) {\r\n // if (this.status == 200) {\r\n // var blob = this.response;\r\n\r\n // var reader = new FileReader();\r\n // reader.onload = function (e) {\r\n // var fontArrayBuffer = reader.result;\r\n\r\n // var fonts = {};\r\n // fonts[font.type] = fontArrayBuffer;\r\n // GC.Spread.Sheets.PDF.PDFFontsManager.registerFont(font.name, fonts);\r\n\r\n // resolve(blob);\r\n // };\r\n // reader.readAsArrayBuffer(blob);\r\n // }\r\n // };\r\n\r\n // xhr.send();\r\n // }\r\n // } catch (error) {\r\n // reject(error);\r\n // }\r\n // });\r\n },\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","CommonUtils","getFileBlob","fileUrl","response","fetch","method","ok","blob","getColLetterName","colIndex","letter","remainder","String","fromCharCode","Math","floor","toUpperCase","SheetUtils","getActiveSheetSelectCells","spread","getActiveSheet","getSelections","setActiveSheetSelectCells","cellObj","setSelection","row","col","rowCount","colCount","getAllCellObjsByRange","sheet","selectRange","isMulColOrder","getAllCellObjsByRanges","selectRanges","allCellObjs","forEach","item","index","getSpans","itemSpanCell","push","undefined","Error","i","j","getSpan","orderByJson","getSheetAllCellObjs","curSheetCellRange","getRowCount","getColumnCount","getSheetSelectCellObjs","getActiveSheetSelectCellObjs","getSheetCellObjsByGroup","cellRange","groupType","suspendPaint","valCells","groupByCells","groupByJson","retCells","forEachJson","curGroupCells","key","source","resumePaint","getSheetSelectVals","nullUndefinedReplaceVal","selectCells","selectCellVals","cell","cellVal","getValue","getActiveSheetSelectVals","getSheetRangeValsByGroup","retVals","curVals","getCellType","GC","cellTypeName","cellType","Spread","Sheets","CellTypes","Button","RadioButtonList","CheckBox","CheckBoxList","HyperLink","ComboBox","cellStyle","getStyle","cellButtons","length","command","dropDowns","option","showDateRange","setSheetZoom","scale","sheetCount","getSheetCount","getSheet","zoom","setActiveSheetSelectBgColor","color","sel","getRange","backColor","setSheetBgColor","cells","setSheetShowPrintPageLine","isShow","isPrintLineVisible","ignoreSheetShowStrs","ignoreStrs","ignorePaint","Text","prototype","paint","ctx","x","y","w","h","style","options","some","call","this","arguments","setSheetAuxiliaryLine","width","height","lineWidth","colorStr","isHb","floatBottom","FloatingObjects","FloatingObject","floatRight","divBottom","document","createElement","divRight","borderBottom","borderLeft","allowResize","allowMove","content","floatingObjects","add","setActiveSheetWatermark","getCell","watermark","title","setBindingPath","pathPrev","pathField","setSheetCellDate","isAutoSize","Style","imageType","ButtonImageType","dropdown","type","DropDownType","dateTimePicker","showTime","formatter","dateFormat","shrinkToFit","setStyle","getRangeStr","BusinessUtils","createTestObjectAttrsCells","gc","testObjectAttrs","isVertical","contentColStartIndex","contentTotalColCount","addRowHeight","titleCellColumnCount","titleCellValColumnCount","rowTestObjectCount","testObjectAttrsChunk","chunkJson","setRowCount","rowAttrArr","totalRowCount","addRows","setRowHeight","SheetArea","viewport","addRowRange","setBorder","LineBorder","LineStyle","thin","all","medium","left","right","hAlign","HorizontalAlign","center","vAlign","addSpan","setValue","colIndexTitle","colIndexValue","getTestObjectAttrsVals","allCells","allCellsChunk","newAllCellsChunk","retData","attrObjs","attrObj","fieldName","EChartsUtilsComm","getRound","roundingVal","accuracy","valIsNegative","abs","inputValStr","toString","indexOf","intVal","parseInt","split","decimalStr","parseFloat","coefficient","retNum","inputVal","decimalStrFirst","substring","calcRoundingRet","Number","toFixed","accuracyStr","retNumStr","zeroStr","xsPart","calcTrend","xVal","n","sumX","sumY","sumXY","sumXX","slope","intercept","gs","xl","jj","filterNullEmptyErrArray","dataSource","filter","_error","EChartsUtilsAll","chart10","config","xDataArr","yDataArr","lineJson","JSON","parse","chartLinesJson","chartExtJson","xDataSource","yDataSource","dxsJs","xData","yData","test","xMin","min","xMax","max","yMin","yMax","xAxisMax","xAxisMin","yAxisMax","yAxisMin","seriesData","points","A","N","matrix","math","pow","vandermondeMatrix","AT","transpose","ATA","multiply","ATb","coefficients","lusolve","valueOf","err","funequation","arrX","arrY","temp","maxIndex","findIndex","xName","chartXName","yName","chartYName","includes","symbol","peakvalue","coordX","lqhhlKs","lqhhlJs","lqhhlSc1","lineData","pointData","coord","lineStyle","xAxis","yAxis","symbolOffset","label","show","data","itemStyle","yValIsAllNull","every","ele","grid","top","bottom","containLabel","tooltip","trigger","datas","ticket","seriesName","text","textStyle","fontSize","fontWeight","legend","selected","legendName","selectedMode","axisTick","alignWithLabel","splitLine","name","nameGap","nameRotate","nameLocation","axisLine","series","smooth","symbolSize","lineColor","markPoint","markLine","chart11","ceil","upperLimit","lowerLimit","lqhhlSx","curVal","lqhhlXx","ifHaveIntersectionPoint","y1","y2","y3","y4","getIntersectionPoint","upperIntersectionPoint","lowerIntersectionPoint","upperIntersectionPointTrend","lowerIntersectionPointTrend","index1","validX1","validX2","chart12","avg","avgXIndex","chart13","chart14","chart15","chart16","lines","lqhhlHz","yAxisData","map","isNaN","lqhhlSc2","axisLabel","chart30","jsIsJz","isTwoLine","xDataSource1","xDataSource2","yDataSource1","yDataSource2","chartTitle","lineFunc","isShowMarkPoint","isShowMarkLine","isTwoLineData","cellValJzZjhsl","cellValJzZdgmd","trunc","jsZjhslJz","jsZdgmdJz","outJdZjhsl","outJdZdgmd","outValZjhsl","outValZdgmd","jsZjhslJd","jsZdgmdJd","jsZjhsl","jsZdgmd","coordY","markPointObj","markLineObj","seriesDataObj","maxPointData","lineObj2","maxPointDataX","maxPointDataY","lineObj1","chart50","xDataSourceOld","yDataSourceOld","yDataSourceSxOld","yDataSourceXxOld","allData","ySx","yXx","sort","a","b","yDataSourceSx","yDataSourceXx","sxValNullCount","xDataSx","xDataXx","markLineData","val045","getLineObj","lineType","obj","z","connectNulls","silent","position","nullCount","xObj","splitNumber","chart70","ztzl","cllx","logx","logy","curZtzl","jxhslZtzl","curCllx","jxhslCllx","item1","log","item2","abk","ack","dropName","getYOnLine","point1","point2","point3X","logX1","logY1","logX2","logY","exp","zero_ab","zero_ac","HpCoordinates","wl","hp","scHp","scWl","scWp","point_hp","Dy","Dylog","hp0_xab","hp0_xac","hp0_xcenter","Dxlog","adk","wly","wlx","wpy","wpx","wp","hpy2","hpylog2","hp0_xab2","hp0_xac2","hp0_xcenter2","outJdHp","outJdWl","outJdWp","jxhslScHpJd","jxhslScWlJd","jxhslScWpJd","jxhslScHp","jxhslScWl","jxhslScWp","interval","param","minMargin","chart90","xDataCl","yDataSourceCl","markPointData","gsS","jxhslSnShScfc","yDataCopy","curYData","eval","replace","opacity","val","chart110","xDataArrSource","yDataArrSource","curXName","chart130","logBase","inverse","chart150","chart170","chart190","_code","chart210","arr","uniqueData","self","t","getXline","chart230","lineCount","xDataSource3","yDataSource3","xData1","xData2","xData3","getHours","getMinutes","curArr","curItemMins","unshift","getxAxisObj","xAxisData","legendData","legendSelected","xValIsAllNull","topmargin","chart250","xmin","xmax","chart270","chart279_280_281","jjNum","chartType","chart290","chart310","yDataCl","chart330","wd015","wd019","wd025","wd031","Infinity","wdBh","wdYs","bszdjBh","bszdjYs","chart350","jsN","hsl","yVal1","yVal2","yVal25","isAllNull","seriesObjs","EChartsUtils","create","GC_1","spread_1","sheet_1","config_1","args_1","isHideChart","isShowCon","isShowVal","remove","chartId","allRowsTotalHeight","allRowsTotalWidth","allRowsTotalLeft","chartCellHeight","getRowHeight","colHeader","getColumnWidth","rowHeader","fObjPosition","fcObj","get","getElementById","divObj","setAttribute","innerHTML","ecObj","setTimeout","initChart","fObj","getCellVals","sheetName","retArr","dataOneArr","dataOneSourceArr","curSheet","getSheetFromName","itemCell","indexCell","curCellVal","xDataOne","yDataOne","xDataOneSource","yDataOneSource","curItemValsX","sheetNameX","xCells","curItemValsY","sheetNameY","yCells","ecDom","echarts","getInstanceByDom","init","renderer","useDirtyRect","animation","setOption","getEChartsObj","FormulaUtilsOther","YJHTQD","forComm","jzfs","xzhhtz","thsd","qdhsz","sd_value_po","sd_value","ht","arr_sd","Array","t0_0","t0_5","t1_0","t1_5","t2_0","t2_5","t3_0","t3_5","t4_0","t4_5","t5_0","t5_5","t6_0","arr_t","intsd","m","GetDataOddIncreaseEvenDecrease","x1","x2","InterpolationMethod_y","FormulaUtils","initFormulas","allCusFormulas","cusFun","initForFun","funName","funDesc","funCallback","funDefaultVal","funMinArgs","funMaxArgs","funParams","isContext","isAcceptArea","isContainNullUndefinedVal","CalcEngine","Functions","defineGlobalCustomFunction","minArgs","maxArgs","Function","description","parameters","isContextSensitive","acceptsReference","evaluate","curCellObj","column","allCellVals","allCellValsEw","$gt","curRangeVals","curRangeCellObjs","itemCurCellObj","getArray","element","elementVal","argument","getSource","getRow","getColumn","itemSon","commFun","getForRangeCellsValArr","forAarguments","arrayValue","isNumber","convertToInt","arrVals","retArrVals","getMax","getMin","getAverage","arrValsMath","bignumber","mean","toNumber","getNum","ret","contentArr","reg","PI","tmp","in_value","keepdigit","tmp1","tmp2","sxz","keepdigit1","substr","GetS","args","s","total","len","s1","sqrt","sourceVal","trim","isHasVal","isArray","reduce","accumulator","currentValue","repeatable","optional","maxVal","minVal","jsyq","syjglist","kk","k1","r1","r2","num","avgVal","squVal","retVal","toPrecision","calcVal","c","d","mid","arr2","v","pin","pjz","f","g","arr3","arr4","arr5","hs","min3","max3","avg3","bzn","res1","md","wd","arr1","array","stand","_array","dlm1","dlm2","dlm3","sz1","sz2","sz3","cdz","ph","jxqd1","jxqd2","jxqd3","dlxz1","dlxz2","dlxz3","txjgpd","k2","k3","tmp_x","tmp_y","h1c","h1b","h1a","w1c","w1b","w1a","SumNumber","sdh","array_x","array_y","h1","w1","call_x_y","Xa","Ya","Xd","Yd","GetHpValue","x_d","lg","LOG10E","retArrValsPcLastVal","ds","jd_value_po","jdxzz","csfx","jd_value","ns","GetRm","arr_jd","t90","t60","t45","t30","t_30","t_45","t_60","t_90","v1","v2","ns_1","ns_2","jzmxzz","jzm","htz","round","a1","dnn","p60","p40","p20","p10","p5","p2","px2","px1","px05","px025","px0075","pd","bf1","bf2","bf3","bf4","bf5","bf6","bf7","bf8","bf9","bf10","bf11","bf12","dn","_index","getddn","k","$get","getD","zlbfl","syqhgzl","syhhgzl","zlss","zlssbfl","Uindex","UValue","Bindex","BValue","xzz","mdjzl","xywd","wdAll","dlnd","sjsl","sjAll","zj","arrr","arrd1","arrd2","yz","a2","a3","a4","a5","a6","a7","a8","a9","a10","q","xz","wz","c1","c2","WL","IP","CU","CC","Arr","sk","opr","ret2","ret1","TM","djtlx","cjs","xzxs","xzmc","dfczl","jtdj","dlxz","jsyq1","jsyq2","jsyq3","jsyq4","jsyq5","jsyq6","k4","k5","k6","kl1","kl2","kl3","kl4","kl5","kl6","dl1","dl2","dl3","dl4","dl5","dl6","arry1","arry2","count1","count2","jgpd","tmp_xy","arrays","fh","zxz","WorkbookUtils","loadSjsFile","succFunc","errorFunc","sjsBlob","Blob","open","getWookbookBlob","save","error","print","printInfo","showRowHeader","Print","PrintVisibilityType","hide","showColumnHeader","rowStart","rowEnd","columnStart","columnEnd","margin","header","footer","paperSize","PaperSize","PaperKind","exportToExcel","fileName","json","toJSON","includeBindingSource","removeCustomFormulas","tempSpread","Workbook","fromJSON","iSheet","suspendCalcService","cellFormula","getFormula","formula","resumeCalcService","fileType","FileType","excel","includeStyles","includeFormulas","saveAsView","rowHeadersAsFrozenColumns","columnHeadersAsFrozenRows","includeAutoMergedCells","includeCalcModelCache","includeUnusedNames","includeEmptyRegionCells","export","saveAs","destroy","mergeWorkbooksToExcelOrPdf","spreads_1","spreads","isExcel","exportName","regFonts","url","registerFont","mainWorkbook","styleSign","getNamedStyles","namedStyle","addNamedStyle","tempSheet","tempSheetJSON","stringify","newSheet","Worksheet","addSheet","newSheetRowCount","curMainSheet","pastedRangesStartRow","fromRanges","Range","pastedRanges","commandManager","execute","cmd","fromSheet","isCutting","clipboardText","pasteOption","ClipboardPasteOptions","removeSheet","clearSelection","rowHeaderVisible","colHeaderVisible","tabStripVisible","showHorizontalScrollbar","showVerticalScrollbar","scrollbarMaxAlign","showBorder","showGridLine","blackAndWhite","zoomFactor","savePDF","console","font","reader","FileReader","readAsArrayBuffer","onload","fontArrayBuffer","fonts","PDF","PDFFontsManager"],"mappings":"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d,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,KAEVsiB,EAAO,CACT,CAAEviB,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,KAEVuiB,EAAO,CACT,CAAExiB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,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D,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZyiB,EAAO,CACT,CAAE1iB,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,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D,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,KAEZ2iB,EAAO,CACT,CAAE5iB,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,KAEZ4iB,EAAO,CACT,CAAE7iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ6iB,EAAO,CACT,CAAE9iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ8iB,EAAO,CACT,CAAE/iB,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,KAEZ+iB,EAAO,CACT,CAAEhjB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,OAEZgjB,EAAO,CACT,CAAEjjB,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,IACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZijB,EAAO,CACT,CAAEljB,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAIC,EAAG,MACZ,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EA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AAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZsiB,EAAO,CACT,CAAEviB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZuiB,EAAO,CACT,CAAExiB,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZwiB,EAAO,CACT,CAAEziB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZyiB,EAAO,CACT,CAAE1iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ0iB,EAAO,CACT,CAAE3iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ2iB,EAAO,CACT,CAAE5iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ4iB,EAAO,CACT,CAAE7iB,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ6iB,EAAO,CACT,CAAE9iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ8iB,EAAO,CACT,CAAE/iB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZ+iB,EAAO,CACT,CAAEhjB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,KAEZgjB,EAAO,CACT,CAAEjjB,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,KAEZijB,EAAO,CACT,CAAEljB,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,MACd,CAAED,EAAG,GAAMC,EAAG,MACd,CAAED,EAAG,KAAMC,EAAG,IACd,CAA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ACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aAEc,MAAPyI,EACTnQ,EAAM,IAAI0H,MACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,aAEc,MAAPyI,IACTnQ,EAAM,IAAI0H,MACR,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,cAIJ,IAAK,IAAInnB,EAAI,EAAGA,EAAIyf,EAAIvc,OAAQlD,IAAK,CACnC,IAAIgZ,EAAIyG,EAAIzf,GAAG2L,MAAM,KAEjBqN,EAAE,IAAMpM,IACVijB,EAAO7W,EAAE,KAKf,OAAO6W,IAGX,CACEhH,QAAS,QACTC,QAAS,QACTE,cAAe,KAEfG,UAAW,CACT,CACE3V,KAAM,OACNoa,YAAY,EACZC,UAAU,IAGd9E,YAAa,CAACxqB,EAAQW,EAAO0L,KAI3B,GAAIA,EAAQwf,YAAYlnB,OAAS,EAC/B,MAJW,IAQb,GAAqC,iBAA1B0H,EAAQwf,YAAY,KAA2D,GAAxCxf,EAAQwf,YAAY,GAAGkD,OAAOpqB,QAAgD,KAAjC0H,EAAQwf,YAAY,GAAGkD,QACpH,MATW,IAYb,IAEIwC,EAFA9W,EAAIpO,EAAQwf,YAAY,GAAK,GAG7B3K,EAAM,IAAI0H,MACZ,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,aACA,cAEF,IAAK,IAAInnB,EAAI,EAAGA,EAAIyf,EAAIvc,OAAQlD,IAAK,CACnC,IAAIksB,EAAMzM,EAAIzf,GAAG2L,MAAM,KACnBqN,GAAKkT,EA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ACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,GACZ,CAAED,EAAG,GAAIC,EAAG,GACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,IAEV2uB,EAAO,CACT,CAAE5uB,EAAG,GAAIC,EAAG,GACZ,CAAED,EAAG,GAAIC,EAAG,GACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAAG,KACZ,CAAED,EAAG,GAAIC,EAA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AClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,GAAK,CAAC,KAAM,WAClBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,UACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,KAAM,WACnBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WACpBA,EAAM,IAAM,CAAC,MAAO,WAER,IAARD,GAAsB,KAARA,EAChB,IAAK,IAAIne,EAAI,EAAGA,EAAIoe,EAAMl0B,OAAQ8V,IACd,EAAdoe,EAAMpe,GAAG,IAAUme,IACrBhJ,EAAKiJ,EAAMpe,GAAG,IAKpB,OAAOmV,IAGX,CACEtF,QAAS,OACTC,QAAS,cACTE,cAAe,KACfG,UAAW,CACT,CACE3V,KAAM,OACNoa,YAAY,EACZC,UAAU,GAEZ,CACEra,KAAM,KACNoa,YAAY,EACZC,UAAU,IAGd9E,YAAa,CAACxqB,EAAQW,EAAO0L,KAE3B,GAAIA,EAAQwf,YAAYlnB,OAAS,EAC/B,MAAO,GAGT,IAGIiuB,EAHAgG,EAAOvsB,EAAQwf,YAAY,GAC7BiN,EAAKzsB,EAAQwf,YAAY,GAGvBgN,EAAQ,IAAIjQ,MA8DhB,GA7DAiQ,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,GAAK,CAAC,KAAM,UAAW,WAC7BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,KAAM,UAAW,WAC9BA,EAAM,IAAM,CAAC,MAAO,UAAW,WAC/BA,EAAM,IAAM,CAAC,MAAO,UAAW,WAC/BA,EAAM,IAAM,CAAC,MAAO,UAAW,WAC/BA,EAAM,IAAM,CAAC,MAA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","x_google_ignoreList":[0]}
|