UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

191 lines 21.3 kB
import { isBlank, numToStr } from './common'; const COMMON_UNITS = ['M', 'G', 'T', 'P', 'E']; export const CORE_UNITS = ['m', '', 'k', ...COMMON_UNITS]; export const CORE_UNIT_REG = new RegExp(`[${CORE_UNITS.join('')}]$`); const toUnitNumBase = (coreStr, isUnitM = false) => { if (typeof coreStr === 'number') { return numToStr(coreStr * Math.pow(1000, +isUnitM)); } if (isBlank(coreStr)) { return ''; } coreStr = coreStr.trim(); const num = +coreStr.replace(CORE_UNIT_REG, ''); if (Number.isNaN(num)) { return ''; } if (num <= 0) { return '0'; } const lastChar = coreStr.at(-1); let unitIndex = CORE_UNITS.indexOf(lastChar); unitIndex = (unitIndex === -1 ? 0 : unitIndex - 1) + +isUnitM; return numToStr(num * Math.pow(1000, unitIndex)); }; export const toUnitNumM = (coreStr) => toUnitNumBase(coreStr, true); export const toUnitNum = (coreStr) => toUnitNumBase(coreStr); export const UNITS = ['', 'K', ...COMMON_UNITS]; export const UNIT_REG = new RegExp(`[${UNITS.join('')}]i?$`); // TODO: UNITS 临时被其他地方当成了枚举项使用,先临时添加MEMORY_UNITS来处理 toUnitI 中兼容 k、Ki 的问题 const MEMORY_UNITS = ['', ['k', 'K'], ...COMMON_UNITS]; const MEMORY_UNIT_REG = new RegExp(`[${MEMORY_UNITS.join('')}]i?$`); export const toUnitI = (str, negative = false) => { if (typeof str === 'number') { if (str <= 0 && !negative) { return '0'; } return numToStr(str); } if (isBlank(str)) { return ''; } str = str.trim(); const num = +str.replace(MEMORY_UNIT_REG, ''); if (Number.isNaN(num)) { return ''; } if (num <= 0 && !negative) { return '0'; } let base = 1000; if (str.endsWith('i')) { base = 1024; str = str.replace(/i$/, ''); } const lastChar = str.at(-1); const unitIndex = MEMORY_UNITS.findIndex(unit => Array.isArray(unit) ? unit.includes(lastChar) : unit === lastChar); return numToStr(num * Math.pow(base, unitIndex === -1 ? 0 : unitIndex)); }; export const toUnitMi = (str, negative) => { const unitI = toUnitI(str, negative); if (!unitI) { return ''; } return numToStr(+unitI / 1024 / 1024); }; export const toUnitGi = (str, negative) => { const unitI = toUnitI(str, negative); if (!unitI) { return ''; } return numToStr(+unitI / 1024 / 1024 / 1024); }; export const addUnitCoreM = (coreStr) => { if (isBlank(coreStr)) { return null; } return numToStr(+coreStr) + 'm'; }; export const addUnitMi = (miStr) => { if (isBlank(miStr)) { return null; } return numToStr(+miStr) + 'Mi'; }; export const addUnitGi = (giStr) => { if (isBlank(giStr)) { return null; } return numToStr(+giStr) + 'Gi'; }; const POWER_MEMORY_UNITS = ['Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei']; export function getAppropriateMemory(base) { let unit = -1; while (base >= 800 || unit >= POWER_MEMORY_UNITS.length - 1) { base /= 1024; unit++; } return { value: base, unit: POWER_MEMORY_UNITS[unit], }; } const reg = /^(\d?\.?\d+)(\w+)*$/; export const parseValueAndUnit = (str) => { const [_, value, unit] = /^(\d?\.?\d+)(\w+)*$/.exec(str) || []; return [value, unit]; }; export function formatMemory(mem) { const base = parseFloat(mem); const res = reg.exec(mem); const unit = res?.[2]; return unit ? getMemory(base, unit) : base; } export function getMemory(base, unit) { switch (unit) { case 'm': { return base * 1e-3; } case 'K': { return base * 1e3; } case 'Ki': { return base * 1024; } case 'M': { return base * 1e6; } case 'Mi': { return base * 1024 ** 2; } case 'G': { return base * 1e9; } case 'Gi': { return base * 1024 ** 3; } case 'T': { return base * 1e12; } case 'Ti': { return base * 1024 ** 4; } case 'P': { return base * 1e15; } case 'Pi': { return base * 1024 ** 5; } case 'E': { return base * 1e18; } case 'Ei': { return base * 1024 ** 6; } default: { return base; } } } export function getCpu(base, unit) { switch (unit) { case 'm': { return base; } case 'c': { return base * 1e3; } case 'k': { return base * 1e6; } case 'M': { return base * 1e9; } case 'G': { return base * 1e12; } case 'T': { return base * 1e15; } default: { return base * 1e3; } } } export function formatCPU(cpu) { const base = parseFloat(cpu); const res = reg.exec(cpu); const unit = res?.[2]; return getCpu(base, unit); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3V0aWxzL3VuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFN0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVyRSxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQXlCLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRSxFQUFFO0lBQ25FLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxTQUFTLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBQzlELE9BQU8sUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUN0RCxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRS9CLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0Qsd0VBQXdFO0FBQ3hFLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDdkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFxQixFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUNqRSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFFaEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNaLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FDbEUsQ0FBQztJQUNGLE9BQU8sUUFBUSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFxQixFQUFFLFFBQWtCLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFxQixFQUFFLFFBQWtCLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBeUIsRUFBRSxFQUFFO0lBQ3hELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFO0lBQ25ELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFO0lBQ25ELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFaEUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDZCxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2IsSUFBSSxFQUFFLENBQUM7SUFDVCxDQUFDO0lBQ0QsT0FBTztRQUNMLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQztLQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDL0MsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRCxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBVztJQUN0QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ2xELFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVixPQUFPLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE9BQU8sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNSLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxJQUFZLEVBQUUsSUFBWTtJQUMvQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztRQUNELEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNULE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNwQixDQUFDO1FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDVCxPQUFPLElBQUksR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXO0lBQ25DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNCbGFuaywgbnVtVG9TdHIgfSBmcm9tICcuL2NvbW1vbic7XG5cbmNvbnN0IENPTU1PTl9VTklUUyA9IFsnTScsICdHJywgJ1QnLCAnUCcsICdFJ107XG5cbmV4cG9ydCBjb25zdCBDT1JFX1VOSVRTID0gWydtJywgJycsICdrJywgLi4uQ09NTU9OX1VOSVRTXTtcblxuZXhwb3J0IGNvbnN0IENPUkVfVU5JVF9SRUcgPSBuZXcgUmVnRXhwKGBbJHtDT1JFX1VOSVRTLmpvaW4oJycpfV0kYCk7XG5cbmNvbnN0IHRvVW5pdE51bUJhc2UgPSAoY29yZVN0cj86IHN0cmluZyB8IG51bWJlciwgaXNVbml0TSA9IGZhbHNlKSA9PiB7XG4gIGlmICh0eXBlb2YgY29yZVN0ciA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVtVG9TdHIoY29yZVN0ciAqIE1hdGgucG93KDEwMDAsICtpc1VuaXRNKSk7XG4gIH1cblxuICBpZiAoaXNCbGFuayhjb3JlU3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb3JlU3RyID0gY29yZVN0ci50cmltKCk7XG4gIGNvbnN0IG51bSA9ICtjb3JlU3RyLnJlcGxhY2UoQ09SRV9VTklUX1JFRywgJycpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKG51bSA8PSAwKSB7XG4gICAgcmV0dXJuICcwJztcbiAgfVxuICBjb25zdCBsYXN0Q2hhciA9IGNvcmVTdHIuYXQoLTEpO1xuICBsZXQgdW5pdEluZGV4ID0gQ09SRV9VTklUUy5pbmRleE9mKGxhc3RDaGFyKTtcbiAgdW5pdEluZGV4ID0gKHVuaXRJbmRleCA9PT0gLTEgPyAwIDogdW5pdEluZGV4IC0gMSkgKyAraXNVbml0TTtcbiAgcmV0dXJuIG51bVRvU3RyKG51bSAqIE1hdGgucG93KDEwMDAsIHVuaXRJbmRleCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvVW5pdE51bU0gPSAoY29yZVN0cj86IHN0cmluZyB8IG51bWJlcikgPT5cbiAgdG9Vbml0TnVtQmFzZShjb3JlU3RyLCB0cnVlKTtcblxuZXhwb3J0IGNvbnN0IHRvVW5pdE51bSA9IChjb3JlU3RyPzogc3RyaW5nIHwgbnVtYmVyKSA9PiB0b1VuaXROdW1CYXNlKGNvcmVTdHIpO1xuXG5leHBvcnQgY29uc3QgVU5JVFMgPSBbJycsICdLJywgLi4uQ09NTU9OX1VOSVRTXTtcbmV4cG9ydCBjb25zdCBVTklUX1JFRyA9IG5ldyBSZWdFeHAoYFske1VOSVRTLmpvaW4oJycpfV1pPyRgKTtcblxuLy8gVE9ETzogVU5JVFMg5Li05pe26KKr5YW25LuW5Zyw5pa55b2T5oiQ5LqG5p6a5Li+6aG55L2/55So77yM5YWI5Li05pe25re75YqgTUVNT1JZX1VOSVRT5p2l5aSE55CGIHRvVW5pdEkg5Lit5YW85a65IGvjgIFLaSDnmoTpl67pophcbmNvbnN0IE1FTU9SWV9VTklUUyA9IFsnJywgWydrJywgJ0snXSwgLi4uQ09NTU9OX1VOSVRTXTtcbmNvbnN0IE1FTU9SWV9VTklUX1JFRyA9IG5ldyBSZWdFeHAoYFske01FTU9SWV9VTklUUy5qb2luKCcnKX1daT8kYCk7XG5cbmV4cG9ydCBjb25zdCB0b1VuaXRJID0gKHN0cj86IHN0cmluZyB8IG51bWJlciwgbmVnYXRpdmUgPSBmYWxzZSkgPT4ge1xuICBpZiAodHlwZW9mIHN0ciA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoc3RyIDw9IDAgJiYgIW5lZ2F0aXZlKSB7XG4gICAgICByZXR1cm4gJzAnO1xuICAgIH1cbiAgICByZXR1cm4gbnVtVG9TdHIoc3RyKTtcbiAgfVxuXG4gIGlmIChpc0JsYW5rKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgc3RyID0gc3RyLnRyaW0oKTtcbiAgY29uc3QgbnVtID0gK3N0ci5yZXBsYWNlKE1FTU9SWV9VTklUX1JFRywgJycpO1xuICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKG51bSA8PSAwICYmICFuZWdhdGl2ZSkge1xuICAgIHJldHVybiAnMCc7XG4gIH1cblxuICBsZXQgYmFzZSA9IDEwMDA7XG5cbiAgaWYgKHN0ci5lbmRzV2l0aCgnaScpKSB7XG4gICAgYmFzZSA9IDEwMjQ7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL2kkLywgJycpO1xuICB9XG5cbiAgY29uc3QgbGFzdENoYXIgPSBzdHIuYXQoLTEpO1xuICBjb25zdCB1bml0SW5kZXggPSBNRU1PUllfVU5JVFMuZmluZEluZGV4KHVuaXQgPT5cbiAgICBBcnJheS5pc0FycmF5KHVuaXQpID8gdW5pdC5pbmNsdWRlcyhsYXN0Q2hhcikgOiB1bml0ID09PSBsYXN0Q2hhcixcbiAgKTtcbiAgcmV0dXJuIG51bVRvU3RyKG51bSAqIE1hdGgucG93KGJhc2UsIHVuaXRJbmRleCA9PT0gLTEgPyAwIDogdW5pdEluZGV4KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9Vbml0TWkgPSAoc3RyPzogc3RyaW5nIHwgbnVtYmVyLCBuZWdhdGl2ZT86IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgdW5pdEkgPSB0b1VuaXRJKHN0ciwgbmVnYXRpdmUpO1xuICBpZiAoIXVuaXRJKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBudW1Ub1N0cigrdW5pdEkgLyAxMDI0IC8gMTAyNCk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9Vbml0R2kgPSAoc3RyPzogc3RyaW5nIHwgbnVtYmVyLCBuZWdhdGl2ZT86IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgdW5pdEkgPSB0b1VuaXRJKHN0ciwgbmVnYXRpdmUpO1xuICBpZiAoIXVuaXRJKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBudW1Ub1N0cigrdW5pdEkgLyAxMDI0IC8gMTAyNCAvIDEwMjQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVuaXRDb3JlTSA9IChjb3JlU3RyPzogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gIGlmIChpc0JsYW5rKGNvcmVTdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bVRvU3RyKCtjb3JlU3RyKSArICdtJztcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVbml0TWkgPSAobWlTdHI/OiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgaWYgKGlzQmxhbmsobWlTdHIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG51bVRvU3RyKCttaVN0cikgKyAnTWknO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVuaXRHaSA9IChnaVN0cj86IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICBpZiAoaXNCbGFuayhnaVN0cikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVtVG9TdHIoK2dpU3RyKSArICdHaSc7XG59O1xuXG5jb25zdCBQT1dFUl9NRU1PUllfVU5JVFMgPSBbJ0tpJywgJ01pJywgJ0dpJywgJ1RpJywgJ1BpJywgJ0VpJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHByb3ByaWF0ZU1lbW9yeShiYXNlOiBudW1iZXIpIHtcbiAgbGV0IHVuaXQgPSAtMTtcbiAgd2hpbGUgKGJhc2UgPj0gODAwIHx8IHVuaXQgPj0gUE9XRVJfTUVNT1JZX1VOSVRTLmxlbmd0aCAtIDEpIHtcbiAgICBiYXNlIC89IDEwMjQ7XG4gICAgdW5pdCsrO1xuICB9XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGJhc2UsXG4gICAgdW5pdDogUE9XRVJfTUVNT1JZX1VOSVRTW3VuaXRdLFxuICB9O1xufVxuXG5jb25zdCByZWcgPSAvXihcXGQ/XFwuP1xcZCspKFxcdyspKiQvO1xuXG5leHBvcnQgY29uc3QgcGFyc2VWYWx1ZUFuZFVuaXQgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW18sIHZhbHVlLCB1bml0XSA9IC9eKFxcZD9cXC4/XFxkKykoXFx3KykqJC8uZXhlYyhzdHIpIHx8IFtdO1xuICByZXR1cm4gW3ZhbHVlLCB1bml0XTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRNZW1vcnkobWVtOiBzdHJpbmcpIHtcbiAgY29uc3QgYmFzZSA9IHBhcnNlRmxvYXQobWVtKTtcbiAgY29uc3QgcmVzID0gcmVnLmV4ZWMobWVtKTtcbiAgY29uc3QgdW5pdCA9IHJlcz8uWzJdO1xuICByZXR1cm4gdW5pdCA/IGdldE1lbW9yeShiYXNlLCB1bml0KSA6IGJhc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1vcnkoYmFzZTogbnVtYmVyLCB1bml0OiBzdHJpbmcpIHtcbiAgc3dpdGNoICh1bml0KSB7XG4gICAgY2FzZSAnbSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUtMztcbiAgICB9XG4gICAgY2FzZSAnSyc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUzO1xuICAgIH1cbiAgICBjYXNlICdLaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNDtcbiAgICB9XG4gICAgY2FzZSAnTSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWU2O1xuICAgIH1cbiAgICBjYXNlICdNaSc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMTAyNCAqKiAyO1xuICAgIH1cbiAgICBjYXNlICdHJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTk7XG4gICAgfVxuICAgIGNhc2UgJ0dpJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxMDI0ICoqIDM7XG4gICAgfVxuICAgIGNhc2UgJ1QnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMTI7XG4gICAgfVxuICAgIGNhc2UgJ1RpJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxMDI0ICoqIDQ7XG4gICAgfVxuICAgIGNhc2UgJ1AnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMTU7XG4gICAgfVxuICAgIGNhc2UgJ1BpJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxMDI0ICoqIDU7XG4gICAgfVxuICAgIGNhc2UgJ0UnOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlMTg7XG4gICAgfVxuICAgIGNhc2UgJ0VpJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxMDI0ICoqIDY7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBiYXNlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3B1KGJhc2U6IG51bWJlciwgdW5pdDogc3RyaW5nKSB7XG4gIHN3aXRjaCAodW5pdCkge1xuICAgIGNhc2UgJ20nOiB7XG4gICAgICByZXR1cm4gYmFzZTtcbiAgICB9XG4gICAgY2FzZSAnYyc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUzO1xuICAgIH1cbiAgICBjYXNlICdrJzoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTY7XG4gICAgfVxuICAgIGNhc2UgJ00nOiB7XG4gICAgICByZXR1cm4gYmFzZSAqIDFlOTtcbiAgICB9XG4gICAgY2FzZSAnRyc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUxMjtcbiAgICB9XG4gICAgY2FzZSAnVCc6IHtcbiAgICAgIHJldHVybiBiYXNlICogMWUxNTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIGJhc2UgKiAxZTM7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDUFUoY3B1OiBzdHJpbmcpIHtcbiAgY29uc3QgYmFzZSA9IHBhcnNlRmxvYXQoY3B1KTtcbiAgY29uc3QgcmVzID0gcmVnLmV4ZWMoY3B1KTtcbiAgY29uc3QgdW5pdCA9IHJlcz8uWzJdO1xuICByZXR1cm4gZ2V0Q3B1KGJhc2UsIHVuaXQpO1xufVxuIl19